From b02026a89e59e1101e65e3388df375e67fb04724 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 25 Jan 2021 10:07:28 +0200 Subject: [PATCH 001/199] Added docsify quick guide and introduction. Added more example data Former-commit-id: 2b42e12c51f3c3af3d5118f784737d5537d74792 --- docs/.nojekyll | 0 docs/.obsidian/config | 1 + docs/.obsidian/workspace | 111 ++++++++ docs/Additional_analysis.md | 0 docs/BGCViz_renaming_and_coloring_options.md | 1 + docs/Glossary.md | 91 ++++++ docs/Input_files_options.md | 67 +++++ docs/Installation.md | 27 ++ docs/Introduction.md | 66 +++++ docs/Logic_of_the_output.md | 1 + docs/Quick_start.md | 283 +++++++++++++++++++ docs/README.md | 95 +++++++ docs/UI_guide.md | 0 docs/_coverpage.md | 13 + docs/_sidebar.md | 7 + docs/images/all_annotations.png | Bin 0 -> 37995 bytes docs/images/anti_all_annotation.png | Bin 0 -> 31830 bytes docs/images/anti_one.png | Bin 0 -> 36108 bytes docs/images/anti_upload.png | Bin 0 -> 14831 bytes docs/images/antismash_data.png | Bin 0 -> 11585 bytes docs/images/biocircos.png | Bin 0 -> 421179 bytes docs/images/biocircos.png.md | 0 docs/images/biocircos_legend.png | Bin 0 -> 40967 bytes docs/images/biocircos_one.png | Bin 0 -> 235191 bytes docs/images/change_summarize.png | Bin 0 -> 15795 bytes docs/images/color_biocircos.png | Bin 0 -> 46167 bytes docs/images/data_manipulation.png | Bin 0 -> 43065 bytes docs/images/data_upload.png | Bin 0 -> 58459 bytes docs/images/deep_anti_comp.png | Bin 0 -> 26996 bytes docs/images/deep_anti_rates.png | Bin 0 -> 35184 bytes docs/images/deep_comparison.png | Bin 0 -> 36103 bytes docs/images/deep_one.png | Bin 0 -> 26914 bytes docs/images/deepbgc_filters.png | Bin 0 -> 69472 bytes docs/images/download_button.png | Bin 0 -> 5758 bytes docs/images/genes_on_chromosome.png | Bin 0 -> 14084 bytes docs/images/group_by_one.png | Bin 0 -> 49129 bytes docs/images/group_by_table.png | Bin 0 -> 80632 bytes docs/images/hybrids.png | Bin 0 -> 35988 bytes docs/images/improve_viz.png | Bin 0 -> 42218 bytes docs/images/intercepted_annotations.png | Bin 0 -> 35002 bytes docs/images/p-supp.png | Bin 0 -> 39084 bytes docs/images/pretty_lines.png | Bin 0 -> 36465 bytes docs/images/prism_sempi.png | Bin 0 -> 21333 bytes docs/images/rates_one.png | Bin 0 -> 34901 bytes docs/images/rename.png | Bin 0 -> 15555 bytes docs/images/renamed.png | Bin 0 -> 49981 bytes docs/images/rre_data.png | Bin 0 -> 116188 bytes docs/images/summarize_one.png | Bin 0 -> 42404 bytes docs/images/summarize_options.png | Bin 0 -> 16223 bytes docs/images/summarize_plot.png | Bin 0 -> 65758 bytes docs/index.html | 26 ++ example_data/.~lock.antismash_1.csv# | 1 + example_data/SEMPI.csv | 34 +++ example_data/antismash.csv | 75 +++-- example_data/antismash.json.REMOVED.git-id | 1 + example_data/duptable.tsv | 45 +++ example_data/knownhits.tsv | 41 +++ example_data/prism.csv | 42 +-- example_data/prism.json.REMOVED.git-id | 1 + scripts/.Rhistory | 0 scripts/SEMPI.csv | 34 +++ scripts/antismash.csv | 34 +++ scripts/prism.R | 1 + scripts/prism.csv | 21 ++ 64 files changed, 1057 insertions(+), 62 deletions(-) create mode 100644 docs/.nojekyll create mode 100644 docs/.obsidian/config create mode 100644 docs/.obsidian/workspace create mode 100644 docs/Additional_analysis.md create mode 100644 docs/BGCViz_renaming_and_coloring_options.md create mode 100644 docs/Glossary.md create mode 100644 docs/Input_files_options.md create mode 100644 docs/Installation.md create mode 100644 docs/Introduction.md create mode 100644 docs/Logic_of_the_output.md create mode 100644 docs/Quick_start.md create mode 100644 docs/README.md create mode 100644 docs/UI_guide.md create mode 100644 docs/_coverpage.md create mode 100644 docs/_sidebar.md create mode 100644 docs/images/all_annotations.png create mode 100644 docs/images/anti_all_annotation.png create mode 100644 docs/images/anti_one.png create mode 100644 docs/images/anti_upload.png create mode 100644 docs/images/antismash_data.png create mode 100644 docs/images/biocircos.png create mode 100644 docs/images/biocircos.png.md create mode 100644 docs/images/biocircos_legend.png create mode 100644 docs/images/biocircos_one.png create mode 100644 docs/images/change_summarize.png create mode 100644 docs/images/color_biocircos.png create mode 100644 docs/images/data_manipulation.png create mode 100644 docs/images/data_upload.png create mode 100644 docs/images/deep_anti_comp.png create mode 100644 docs/images/deep_anti_rates.png create mode 100644 docs/images/deep_comparison.png create mode 100644 docs/images/deep_one.png create mode 100644 docs/images/deepbgc_filters.png create mode 100644 docs/images/download_button.png create mode 100644 docs/images/genes_on_chromosome.png create mode 100644 docs/images/group_by_one.png create mode 100644 docs/images/group_by_table.png create mode 100644 docs/images/hybrids.png create mode 100644 docs/images/improve_viz.png create mode 100644 docs/images/intercepted_annotations.png create mode 100644 docs/images/p-supp.png create mode 100644 docs/images/pretty_lines.png create mode 100644 docs/images/prism_sempi.png create mode 100644 docs/images/rates_one.png create mode 100644 docs/images/rename.png create mode 100644 docs/images/renamed.png create mode 100644 docs/images/rre_data.png create mode 100644 docs/images/summarize_one.png create mode 100644 docs/images/summarize_options.png create mode 100644 docs/images/summarize_plot.png create mode 100644 docs/index.html create mode 100644 example_data/.~lock.antismash_1.csv# create mode 100644 example_data/SEMPI.csv create mode 100644 example_data/antismash.json.REMOVED.git-id create mode 100644 example_data/duptable.tsv create mode 100644 example_data/knownhits.tsv create mode 100644 example_data/prism.json.REMOVED.git-id create mode 100644 scripts/.Rhistory create mode 100644 scripts/SEMPI.csv create mode 100644 scripts/antismash.csv create mode 100644 scripts/prism.csv diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/.obsidian/config b/docs/.obsidian/config new file mode 100644 index 0000000..e6976dd --- /dev/null +++ b/docs/.obsidian/config @@ -0,0 +1 @@ +{"pluginEnabledStatus":{"file-explorer":true,"global-search":true,"switcher":true,"graph":true,"backlink":true,"command-palette":true,"markdown-importer":true,"word-count":true,"open-with-default-app":true},"enabledPlugins":[]} \ No newline at end of file diff --git a/docs/.obsidian/workspace b/docs/.obsidian/workspace new file mode 100644 index 0000000..a49bf8b --- /dev/null +++ b/docs/.obsidian/workspace @@ -0,0 +1,111 @@ +{ + "main": { + "id": "44edab998b47376d", + "type": "split", + "children": [ + { + "id": "e25b93bafa83eedc", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "Quick_start.md", + "mode": "source" + } + } + }, + { + "id": "714e750e96c06a9f", + "type": "leaf", + "active": true, + "state": { + "type": "markdown", + "state": { + "file": "BGCViz_renaming_and_coloring_options.md", + "mode": "source" + } + } + } + ], + "direction": "vertical" + }, + "left": { + "id": "4cea809a57598f6b", + "type": "split", + "children": [ + { + "id": "78a4de77ac6738fa", + "type": "tabs", + "children": [ + { + "id": "1b96ed52b3713dae", + "type": "leaf", + "state": { + "type": "file-explorer", + "state": {} + } + }, + { + "id": "f3ac6c31d2548102", + "type": "leaf", + "state": { + "type": "search", + "state": { + "query": "", + "matchingCase": false, + "explainSearch": false, + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical" + } + } + } + ] + } + ], + "direction": "horizontal", + "width": 300 + }, + "right": { + "id": "a949c78d6a7ad850", + "type": "split", + "children": [ + { + "id": "172aa0b01dca747f", + "type": "tabs", + "children": [ + { + "id": "8d877be6dbcf794b", + "type": "leaf", + "state": { + "type": "backlink", + "state": { + "file": "BGCViz_renaming_and_coloring_options.md", + "collapseAll": false, + "extraContext": false, + "sortOrder": "alphabetical", + "backlinkCollapsed": false, + "unlinkedCollapsed": true + } + } + } + ] + } + ], + "direction": "horizontal", + "width": 300, + "collapsed": true + }, + "lastOpenFiles": [ + "BGCViz_renaming_and_coloring_options.md", + "Logic_of_the_output.md", + "Introduction.md", + "Quick_start.md", + "Glossary.md", + "README.md", + "Input_files_options.md", + "Untitled.md", + "Logic of the output.md", + "Biocircos.md" + ] +} \ No newline at end of file diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md new file mode 100644 index 0000000..bde06df --- /dev/null +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -0,0 +1 @@ +# TO-DO \ No newline at end of file diff --git a/docs/Glossary.md b/docs/Glossary.md new file mode 100644 index 0000000..e6b3de3 --- /dev/null +++ b/docs/Glossary.md @@ -0,0 +1,91 @@ +# Renaming scheme +| Product | Renamed | +| ----------- | ----------- | +|polyketide|pks| +|nonribosomal_peptide|nrps| +|melanin|melanin| +|ectoine|other| +|pentangular_polyphenol|other| +|nrps-independent_siderophore_synthase|other| +|angucycline-type|pks| +|angucycline|pks| +|butyrolactone|ripp| +|class_i_lantipeptide|ripp| +|lasso_peptide|ripp| +|nis_synthase|other| +|acyl_amino_acids|other| +|aminocoumarin|other| +|amglyccycl|other| +|arylpolyene|other| +|betalactone|other| +|blactam|other| +|bottromycin|other| +|butyrolactone|other| +|cdps|other| +|cyanobactin|other| +|fatty_acid|other| +|furan|other| +|fungal-ripp|ripp| +|glycocin|ripp| +|guanidinotides|other| +|halogenated|other| +|hgle-ks|pks| +|hserlactone|other| +|indole|other| +|lap|ripp| +|ladderane|other| +|lanthipeptide-class-i|ripp| +|lanthipeptide-class-ii|ripp| +|lanthipeptide-class-iii|ripp| +|lanthipeptide-class-iv|ripp| +|lanthipeptide-class-v|ripp| +|lassopeptide|ripp| +|linaridin|other| +|lipolanthine|other| +|microviridin|other| +|naggn|other| +|napaa|other| +|nrps|nrps| +|nrps-like|nrps| +|nucleoside|other| +|oligosaccharide|saccharide| +|other|other| +|pbde|other| +|phenazine|other| +|phosphoglycolipid|other| +|phosphonate|other| +|pks-like|pks| +|ppys-ks|other| +|proteusin|other| +|pufa|other| +|pyrrolidine|other| +|ranthipeptide|ripp| +|ras-ripp|other| +|redox-cofactor|other| +|resorcinol|other| +|ripp-like|ripp| +|rre-containing|ripp| +|saccharide|saccharide| +|sactipeptide|ripp| +|siderophore|other| +|t1pks|pks| +|t2pks|pks| +|t3pks|pks| +|terpene|terpene| +|thioamitides|other| +|thioamide-nrp|other| +|thiopeptide|ripp| +|transat-pks|pks| +|transat-pks-like|pks| +|tropodithietic-acid|other| +|bacteriocin|ripp| +|fused|other| +|head_to_tail|other| +|lanthidin|other| +|lanthipeptide|ripp| +|tfua-related|other| +|otherks|other| +|microcin|other| +|cf_saccharide|saccharide| +|cf_fatty_acid|other| +|cf_putative|other| \ No newline at end of file diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md new file mode 100644 index 0000000..da3db8b --- /dev/null +++ b/docs/Input_files_options.md @@ -0,0 +1,67 @@ +# Input files +We tried to make integration of various services as seemless as possible. However, due to computation limitation of shiny server we sugest to transform at least antismash output json file to the csv dataframe. More information is below. +All the example data is in the `/example_data` directory. + +# Antismash +There are two options for antismash data upload: +1. Raw output json file. You should download all your antismash results from the server, if the run was remote, and in the root results directory find the json file. Then be sure that box, which states "My AntiSMASH data is a dataframe, not json results file from antismash" is UNTICKED before actual upload. +****We highly suggest to use this option only with local installation**** + +2. The csv format file. This file can be easily generated from the json file, using antismash.R script in the /scripts directory. Before be sure that all necessary packages are installed (more [here](Installation#packages-for-input-files-conversion)). Then just run the following command from the command line: + ```R + Rscript antismash.R + ``` +Script should generate the the csv file in the /scripts directory. +The structure of the csv file is the following: + +![anti_data](/images/antismash_data.png) + +File itself can be created manually from the antismash results. + +**Note: If the region contain several components we are expecting the double underscore delimiter between them "__". Alternatively they will not be splited for renaming and will maintened as a one type cluster. See more on renaming [here](BGCViz_renaming_and_coloring_options.md)** + +**This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of antismash, but the result plot will label these as "Antismash"** + +# PRISM +Similarly to the AntiSMASH, there are two options for the PRISM input: +1. Use the json report file. It can be downloaded after the run. Because of the small size of json output file, it can be directly uploaded to the BGCViz. Be sure the checkbox "My PRISM data is a dataframe, not json results file" is UNTICKED. **We are expecting that the run was made on version >= 4.4.5 of the PRISM. If earlier version was used, please provide the csv instead of json one.** +2. The csv format file. Identical to one, described in the [Antismash](#antismash) section above. Can also be created manually. The command for generation from json to csv format is the following: +```R + Rscript prism.R +``` + + +**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Antismash, SEMPI and PRISM data options" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "P-supp"** + +**This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of PRISM, but the result plot will label these as "PRISM"** + +# SEMPI +SEMPI data can be used only as a csv file in the format, described in the [Antismash](#antismash) section above. Can be created manually. +After SEMPI run please download all the results. +The db file, script can transform to the .csv file is the `/genome_browser/main/Tracks.db` one, from the SEMPI results folder. + +```R + Rscript sempi.R +``` + +**This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** +# DeepBGC +We are expecting the default DeepBGC tsv output file. Please the the example in /example_data folder + +# RRE-Finder +We the expecting the modified default txt results file from RRE-Finder, which is in the format as below: + +![rre_data](/images/rre_data.png) + +The expected list of modifications: +1. The first column ("Gene_name") is divided in 3 parts by double underscore as a delimiter ("__".) +2. First part is a contig name. (Here "S136_genome"). +3. Second part is the most valuable one - coordinates. +4. Third part is a locus name, or other sequence identifier. + +**Please be sure that any other data from Gene_name column is deleted. The data itself is divided by double underscores (should be made manually) iny three clean parts. Please delete all other data in Gene_name column (product names or gene names), if any** + +# ARTS +There are two uploads for the ARTS data. And only two files are provided the data will be included in the analysis. Firstly, download the ARTS results (all results). +1. The first expected tsv file is knownhits.tsv (holding the hits to existing resisntance models) in the `/tables/knownhits.tsv` +2. The second input is duptable.tsv (holding the duplicated housekeeping genes data) in the `/tables/duptable.tsv` \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md new file mode 100644 index 0000000..4369c3e --- /dev/null +++ b/docs/Installation.md @@ -0,0 +1,27 @@ +# Installation + +The app itself is written in R and is available as a [shiny app server](https://biopavlohrab.shinyapps.io/BGCViz/) with no istallation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation + +## Base packages +All packages can be installed via R console in Rstudio via: +```R +install.packages(c("BioCircos", "ggplot2", "plotly", "IntervalSurgeon", "plyr", "tidyverse", "shiny", "DT" ,"rjson" )) +``` +If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: + +`conda install r-base rstudio` + +## Packages for input files conversion + +To covert input files from the program's native output format to BGCViz-compatible csv one, a set of R scripts in the /scripts folder is available. They depends on `rjson` library to convert antismash and PRISM data, and `RSQLite` library to covert the SEMPI data. Also common libraries in all three scripts are: `dplyr`, `tidyr`, `stringr`. Therefore one line installation from R console is: +```R +install.packages(c("dplyr", "tidyr", "stringr", "RSQLite", "rjson" )) +``` + +## Why local run +The local run of an app is identical to the website one, with the same UI in the browser. Howewer, it have several advantages: +- Fast upload of files +- Better response times +- Control over execution. Quick modifications to the code. + +Besides speed and flexibility of a local run, ability of upload raw json output files from PRISM and AntiSMASH is a big plus (more details [here](Input_filess_options.md)). For server usage we are suggesting to convert the json files to the csv ones, using provided scripts (more details [here](Input_filess_options.md)). diff --git a/docs/Introduction.md b/docs/Introduction.md new file mode 100644 index 0000000..7071901 --- /dev/null +++ b/docs/Introduction.md @@ -0,0 +1,66 @@ +# BGCViz + +BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: + + - "regions of interest", annotated with more than one tool. + + - novel regions, annotated only by one of the methods. + + + +This app is written as a part of **Cambridge Bioinformatics Hackathon 2020** ([link](https://cambiohack.uk)).  + + + +![Biocircos](images/biocircos.png) + + + +Currently, the app supports annotations from such sources: + +1. Antismash (both json and csv) + +2. PRISM (both json and csv) + +3. SEMPI (only csv) + +4. DeepBGC (raw tsv file) + +5. RRE-Finder (modified txt file) + +6. ARTS (raw tsv files) + + + +For more information about which files need to be preparated please see [input files](Input_files_options.md) section + +# What's next? + +1. See our [installation](Installation.md) guide if you decided to run the app locally. + +2. You can use our [guide](Quick_start.md) for a quick start. + + +# Contributing + +There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement smth from out TO-DO list.  + +If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) + +# TO-DO list + +1. Write all group information in one GenBank file (for know separate files are generated. More info [here](Additional_analysis.md)) + +2. Add BigFAM information parsing + +3. Add generation of json files for an input to `--sideload` flag on antismash v. 6.0.  Then the data can be analyzed in details using antismash interface. + +4. Provide parsing of SQLite file from SEMPI (raw output). This is possible locally, but the web version crashes. + + + +# Citation + +This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: + +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 \ No newline at end of file diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md new file mode 100644 index 0000000..5398d18 --- /dev/null +++ b/docs/Logic_of_the_output.md @@ -0,0 +1 @@ +# TO-DO diff --git a/docs/Quick_start.md b/docs/Quick_start.md new file mode 100644 index 0000000..1c06801 --- /dev/null +++ b/docs/Quick_start.md @@ -0,0 +1,283 @@ +# Quick start guide + + + +**Note:** The guide is divided into "steps", but no "pipeline" or sequential steps exist. Rather after files upload (Step 1 and 2) you are free to use the analysis according to your needs. This guide is used mostly for a quick introduction to the BGCViz capabilities   + +**BGCViz is intended to be run on one sequence. Therefore, it is not possible to analyze genomes with several contigs. One contig at a time only** + + + +# Step 1. Getting the input files + +A detailed description of every possible input file is [here](Input_files_options.md). In short, prior to use, antismash, prism, sempi and ARTS results should be downloaded. The only SEMPI  (.db -> .csv) and antismash (json -> csv, if using web version) transformations of input data are required. They can be made with a help of scripts in /scripts folder, or they can be constructed manually. The example data is in the /example_data directory. In this guide, we will be using prism.json, antismash.csv, sempi.csv files. + + + +# Step 2. Uploading input files + +The upload of the files is pretty straightforward - use the properly named file upload section.  Prior to upload, no UI toggles and elements are shown.  + +After the upload of the first input (antismash.csv) (**make sure the checkbox is ticked!**): + + + +![anti_upload](/images/anti_upload.png) + + + +## Results with only one file upload + +1. The first two plots are available for the analysis on the "Annotation visualization and comparison" tab. The first plot contains all the results for the antimash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. + + + +![anti_all](/images/anti_all_annotation.png) + + + +2. The second plot shows the BGC, intercepted with the chosen one. As a rule, on the top, there is an output which is used as a reference. In our case, this output is antismash. After uploading more files, they will be visualized under antismash one. And only clusters, which are intercepted with the chosen one, are visualized. (On the upper plot all the data is visualized). + + + +![anti_one](/images/anti_one.png) + + + +For now, this plot is the same as a plot above, due to lack of data. + + + +### Controls + +After uploading a single file, several controls are available. "Genes on chromosome plot controls" have one select menu, which states which data is used as a reference.   + +Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Antismash, SEMPI and PRISM data options" menu option. This will rename the multiple typer regions as "hybrid". + + + +**Tip: We suggest using this option after renaming the clusters (step 3 here). Because several product cluster can become monotype after renaming. Therefore more information about type will be preserved.** + + + +## Results with multiple files upload + +Let's proceed and upload PRISM and SEMPI results: + + + +![prism_sempi](/images/prism_sempi.png) + + + +**Note: PRISM checkbox is UNTICKED because we are uploading json format files. Also, it can take a file to process PRISM json file (up to 3 min)** + + + +The plots in the current tab changed.  Also, two additional tabs appeared: + +1. Biocircos plot tab contains dynamic circos plot for all-vs-all interception results. More details in [step 4](#step-4-color-the-links-in-biocircos-plot) + +2. Summarize interception tab contains data, that can help to prioritize clusters, based on how many times it is annotated by another tool. More details in [step 5](#step-5-change-the-data-to-group-by) + + + +**Tip: Upload field can be hidden by ticking the "Hide uploads" checkbox. All menu options have this checkbox and therefore can be hidden to decrease the clutter** + + + +Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, we can tick the checkbox "Use PRISM resistance and regulatory genes information" under "Antismash, SEMPI and PRISM data options". This will cause a new "chromosome" to be visualized with these genes, named "P-supp". More details available [here](Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox under "Improve visualization" menu. + + + +![p-supp.png](/images/p-supp.png) + + + +They are more controls for data manipulation available, as well as more plots. They all will be discussed in the following steps. + + + +# Step 3. Rename the input clusters + +## Step 3.1 Rename the clusters  + +It is a good practice, to rename the type of clusters after uploading. Renaming the clusters will hugely affect the colouring schema. In other ways, it will decrease the clutter in the legend and improve high-level visual comparison. Also, renaming is somewhat essential for colouring the Biocircos links and arcs. + + +To rename the dataset you can press "Rename" button under  "Improve visualization" menu.  + +![rename](/images/rename.png) + + + +The legend on the plots changes, but the "Type" field upon mouse cursor hovering on the cluster remains unchanged. Therefore, the initial products are available on mouse hover. Alternatively, the "Reset" button reverts the clusters types to the initial ones. + + + +![renamed](/images/renamed.png) + + + +Red rectangular on the plot shows, that the product information is preserved, but the colouring scheme changed (lassopeptide -> ripp). + +The renaming scheme is available in the [Glossary](Glossary.md).  Guide how to change it available [here](BGCViz_renaming_and_coloring_options.md). + + + +## Step 3.2 If multi-type - make hybrid + +By default, all hybrids remain intact after renaming. However, it is possible to include renaming rule for a particular hybrid (nrps__pks -> nrps). The last step in renaming is to tick the ".....rename as hybrid" checkboxes: + + + +![hybrids](/images/hybrids.png) + + + + + +**The data manipulation options changes upon files input.  They are not the same in the every case** + +# Step 4. Colour the links in biocircos plot + +The other tab is "Biocircos plot". By default, no colouring is done (the data should be renamed, or, at least, match colouring scheme (more [here](BGCViz_renaming_and_coloring_options.md)) for better colouring) + + + +The first plot is a default circos plot with an all-vs-all interception. More information is available on hover. The visualized type information (in the links and arcs) is a default product naming, not the renamed version. + + + +![biocircos_one](/images/biocircos_one.png) + + + +The second plot is actually a legend for circos plot: + + + +![biocircos_legend](/images/biocircos_legend.png) + + + +**Note: "base" color indicates the default color. Please include is, if changing the coloring scheme (more [here](BGCViz_renaming_and_coloring_options.md))** + + + +The coloring options for biocircos plot are available under "Improve visualization" menu: + + + +![color_biocircos.png](/images/color_biocircos.png) + + + +There are three colouring modes available for the links, which are discussed in much more details in the appropriate [section](BGCViz_renaming_and_coloring_options.md). The problem with links is that they can connect clusters with separate types. Mentioned modes are just different ways to deal with this issue. + + + +# Step 5. Change the data to group by + + + +The last tab called "Summarize interception". It contains count barplot, which shows how many times the chosen cluster was annotated by any other tool, and "Group by" table, which shows which clusters are intercepted with the reference (first column). + +For our example, the barplot looks like this: + + + +![summarize_one.png](/images/summarize_one.png) + + + +We right from the chart can see that cluster # 30 from antismash and # 18 from prism are the most abundant between annotations. The group by table reveals, the intercepted clusters: + + + +![group_by_one.png](/images/group_by_one.png) + + + +We can conclude that cluster # 30 from antismash, #18 from PRISM, # 31 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#54) and 2 regulatory genes (#76, #77), as identified by PRISM.  + + + +The interception of all named clusters can be confirmed in the Biocircos plot, or by reviewing PRISM and SEMPI data as a group_by columns: + + + +![change_summarize.png](/images/change_summarize.png) + + + +By default, only intercepted regions are showed. But if the purpose of the analysis is to show novel regions, annotated by just one program, then tick the "Show all BGC for the 'group by' method (+ individually annotated BGC)" checkbox in "Summarize options" menu. For example, if we group our data by Antismash and check the box it becomes clear, that many clusters are annotated only by this algorithm.  + + + +**Tip: Check the last NA row for the group by column. It shows the clusters, that are not intercepted with the reference data but are intercepted with other methods. For example, cluster #7 is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI and contain resistance and regulatory genes (#20 and #59)** + + + +**Tip #2: You can view the group by column in "Annotation visualization and comparison" tab for feature-rich visualization on hover. Just choose the same column in the select menu for that plot as in the summarize options** +# Step 6. Compare to the DeepBGC + +The clusters in the previous annotations are can be thought to be "boolean". Therefore, they are either annotated (so exists in the data), or not. The DeepBGC data contains several scores alongside cluster information. This program uses the deep learning model, which can annotate different from rule-based methods, novel clusters. The scores are deepbgc score, activity score and cluster type score. More about the model and the scores are available in the paper (DOI: [10.1093/nar/gkz654](https://doi.org/10.1093/nar/gkz654) ).  + +The output tsv file is the standard input for BGCViz. After uploading several plots are available in the new "Compare the DeepBGC data" tab. + +1.  The DeepBGC comparison to the reference annotation.  Therefore, the barplot shows how many clusters annotated at every chosen score threshold only by DeepBGC, only by chosen reference data (here Antismash) and by both. In the upper right corner applied score threshold are visualized for DeepBGC data (the default are 50%). This plot can help to choose the annotated/novelty rates for DeepBGC. + + + +![deep_one](/images/deep_one.png) + + + +2. Connected scatter plot with Novelty, Annotation and Skip rates, where: + +   - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how many clusters are annotated only by DeepBGC. + +   - Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash.  + +   - Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how many clusters DeepBGC missed, assuming, that antismash is a reference annotation  + +   These rates are just the other way to visualize the bar plot  + +   ![rates_one.png](/images/rates_one.png) + +   The controls for the comparison plots looks like this: + + + +![deep_comparison](/images/deep_comparison.png) + + + +Note, that you can choose which data to compare the DeepBGC among PRISM, Antismash and SEMPI, as well as score and plot step. + +The data cleaning options for DeepBGC are basically the columns of .tsv output file and are the following: + + + +![deep_filters](/images/deepbgc_filters.png) + + + +Therefore, BGCViz can be used not only as an interception between annotated BGC visualization tool but also serves as a nice GUI for DeepBGC data cleaning. The results on the cleaning can be then downloaded for downstream analysis (Step 7) + + + +**Note: The tab and plots will appear after DeepBGC data upload. Therefore, if no Antismash, PRISM or SEMPI data was supplied the plots will result in error** + + + +# Step 7. Data download + + + +After the analysis, you can download all the data as csv files. This is particularly valuable in the case of DeepBGC data cleaning. Alongside the datasets, group_by table will be downloaded (as visualized in the "Summarize interception" tab) and group_by script for downstream analysis with clinker. More about it [here](Additional_analysis.md) + + + +![download_button.png](/images/download_button.png) \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..8e6b8a6 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,95 @@ +# BGCViz +BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: + - "regions of interest", annotated with more that one tool. + - novel regions, annotated only by one of the methods. + +This app is written as a part of **Cambridge Bioinformatics Hackaton 2020** ([link](https://cambiohack.uk)). + +![Biocircos](images/biocircos.png) + +Currently app supports annotations from such sources: +1. Antismash (both json and csv) +2. PRISM (both json and csv) +3. SEMPI (only csv) +4. DeepBGC (raw tsv file) +5. RRE-Finder (modified txt file) +6. ARTS (raw csv files) + +For more information about which files need to be preparated please see [input files](#Input_files_options) section [TEST](#TEST TEST) +# Where to go from here + +# Contributing + +# TO-DO list + +## Prerequisites +App is written entirely in R.
+ **Note:** the [web version](https://biopavlohrab.shinyapps.io/BGCViz/) is also available, with no installation needed.
+Needed for a local run: +- R ( v. 4.0.2 ) [site](https://www.r-project.org) +- Rstudio ( v. 1.3.959 ) [site](https://rstudio.com) +- shiny ( v. 1.5.0 ) +- tidyverse ( v. 1.3.0 ) +- plyr ( v. 1.8.6 ) +- IntervalSurgeon ( v. 1.0 ) +- plotly ( v. 4.9.2.1 ) +- BioCircos ( v. 0.3.4 ) +- ggplot2 ( v. 3.3.2 ) + + + +## Installation +All packages can be installed via R console in Rstudio via: +```R +install.packages(c("BioCircos", "ggplot2", "plotly", "IntervalSurgeon", "plyr", "tidyverse", "shiny" )) +``` +If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: + +`conda install r-base rstudio` + +## Usage +Local run: +1. Open app.R in Rstudio +2. Press "Run app" button on the upper right corner of the script window. + +The app should open in a viewer panel in Rstudio, or a default web browser. The plots will be visible as soon as input files are uploaded. +### Input files +- Antismash and PRISM are comma-separated files, with 4 columns -> "Cluster", "Start", "Stop", "Type", where "Cluster" column holds clusted IDs as numbers.
Example: (for data see example_data folder)
+![antismash](images/antismash.png)
+- deepbgc.tsv file is an standart tsv file output from DeepBGC.
+Example: (data in in example_data folder)
+![deepbgc](images/deepbgc.png)
+- RREFinder.txt file is standart txt output file from RREFinder tool. But as a delimiter double underscore is used "__". So for proper parsing of this file, expected sequence name is: "Sequence-name__Coordinates__Gene-ID", possible "__Coordinates__product-description__Gene-ID" is reformated with product-decription deleted.
+Example: (data example is in example_data folder)
+![rrefinder](images/rrefinder.png)
+### Controls +The app consist of three input categories: +1. Files upload and chromosome length input (mandatory inputs)
+![files](images/upload.png)
+2. DeepBGC and antismash data comparison plots controls. Those used for the first two result plots
+![comp](images/deepbgc_expl.png)
+3. DeepBGC filtering controls. Applied globally + download datasets button is available
+![deep_filt](images/deepbgc_filt.png)
+### Result plots +1. Barplot with a comparison of DeepBGC and antismash data. Have three categories -> "Annotated only by antismash", "Annotated by antismash and deepbgc", "Annotated only by deepbgc" +![deepbgc](images/barplot1.png) +2. Connected scatterplot with Novelty, Annotation and Skip rates, where: + - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how much clusters are annotated only by DeepBGC. + - Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash. + - Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how much clusters DeepBGC missed, assuming, that antismash is a reference annotation
+ +![rates](images/rates.png)
+3. "BGC on chromosome" plots. On hover additional data is available + - First row is antismash BGC data plotted + - Rows under have the following structure: Reference_data_with_only_intercepted_results, data_with_which_the_interception_was_performed. The example can be "A_vs_D" and "D" rows. So "A_vs_D" holds antismash clusters (we use this annotation as a reference), which intercepts with the DeepBGC data (the row below). "D" row is all DeepBGC data plotted (not only intercepted. + +![ref](images/reference.png) +4. BioCircos plot. Here the all-vs-all comparison is performed. Hover on links gives a little bit of additional info, as IDs of the cluster of connected annotation tools, names of those tools and types of clusters. +
+ +![biocirc](images/biocircos.png) +5. Barplot, which shows how many times the given cluster is annotated by other tools. +![barplot2](images/barplot2.png) +## Citation +This project is still a work in progress, so there is no official publication. If it was useful you can cite it as:
+P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/pavlohrab/BGCViz, doi: 10.13140/RG.2.2.23431.01444 diff --git a/docs/UI_guide.md b/docs/UI_guide.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/_coverpage.md b/docs/_coverpage.md new file mode 100644 index 0000000..3ab9bd4 --- /dev/null +++ b/docs/_coverpage.md @@ -0,0 +1,13 @@ + +# BGCViz 1.0 + +> A integrative BGC interception visualisation tool + +- Easy to use with an intuitive UI +- Beautiful inteception plots +- Powerful DeepBGC data comparison + +[GitHub](https://github.com/ostash-group/BGCViz) +[Get Started](#BGCViz) + +![](images/all_annotations.png) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 0000000..680ff18 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,7 @@ +* [Home](/#BGCViz) +* [Quick Start](Quick_start.md) +* [Installation](Installation.md) +* [Input Files](Input_files_options.md) +* [Understand the output](Logic_of_the_output.md) +* [Plotting and renaming options](BGCViz_renaming_and_coloring_options.md) +* [Glossary](Glossary.md) \ No newline at end of file diff --git a/docs/images/all_annotations.png b/docs/images/all_annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..e73331fd09c4e09a742e8ef9a274cecf2ad70ed3 GIT binary patch literal 37995 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 literal 0 HcmV?d00001 diff --git a/docs/images/anti_all_annotation.png b/docs/images/anti_all_annotation.png new file mode 100644 index 0000000000000000000000000000000000000000..29474eb39f7638b3ea2c5a2b114b02e5ea66a61a GIT binary patch literal 31830 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 B7_$HX literal 0 HcmV?d00001 diff --git a/docs/images/anti_one.png b/docs/images/anti_one.png new file mode 100644 index 0000000000000000000000000000000000000000..c29f2b7f64051f027943e69b1f76e1f991eba29a GIT binary patch literal 36108 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 MD1NOHGyd`40OjCyVE_OC literal 0 HcmV?d00001 diff --git a/docs/images/antismash_data.png b/docs/images/antismash_data.png new file mode 100644 index 0000000000000000000000000000000000000000..a3563bfa58e3ad224734d4e77e8f8aa54b22f157 GIT binary patch literal 11585 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%0A}BxSpf7Z&TaxY2?~5}Z^2yN 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 literal 0 HcmV?d00001 diff --git a/docs/images/biocircos.png b/docs/images/biocircos.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7ca4034e410c30fa7f81e77d811bf0408796ba GIT binary patch literal 421179 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 z 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 z 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%0A_k|Tc%o8ghI&#DkX zfA71)8J#hpHa$JQx;MYb>FZ*6Xs6mC|D8N8b-}y3|sX6t}~jjtkck?W{+P_}8j{$@sX~Q~(0-I$a01 zNx;?I``OD9vqB2tz+8llf+l3sNi7w}W6K;DM%fgCDFYG{R7}ikz)g8slPnW7ks<{! z4jKBE0d^ZD17yF5X?(LQ?$ZN;va%+|i!p>^h4V_HZY8MY>csLUP0uRahiXfa-Cq-1 zC?~*~YmUvHWbv8JX`_YER&1f5F})zF;@$%I<9yeS#h@Ik$9kexb@Uzn=?Sda($?P} zy*B?Cf;ruR1irq88Q_r0sLGmMp;&K)_7~G+yp-fmdUrh&gQ7&?dwVlZlWTsh_ZGsA z#FH*@+JhHYkQ!FOl$USYIX&eso{#)e)A@I&V<+vwlukI=uuuY)7H4|f|A)sy+u0;ho<|DMcU z;sOzv1}b@um@8R25H@t@8e9*RBvqC21o>Jb328RB(k2+52krwN?<=k+r_2ZP1Nv72 z7XH<0>5tPMGw1Tq3`+~BlL(yGt6Ra{G7iKcS|NN(DbIehGM#cEpUHv{Ew$8eWXjiT zW)&f$_rA}u9{gfq5$hWsDW9Y4WuqUrVm>lVwa}OJ>$3d-+dQtn^8s(&U6qJW7?tG=1^WWqN=Zs!V)Y&SJV%BlB467qc{=6lMp)rD^h zXQq%Cv_FKvb|*kE9;-HiDzU2?E2`|`vi7)OkPKB=tA74Z6Q(a=;m^TMzS;ntQc@Au z$8%-68M2{h($_yt)KbSHFC2dFo!8H&pID{f4RFOolh{h%WAyZ{x%lKUzsib!mB*%O zHy%KR1->Ifm=Wcxgkbjza@S+At_qdtw)z=fwHA~R14Jfb@Xj`d!~z;=k83(`$u`rx zA6h6_MEe?Wgk9?&WOYNLyX=uiJxV;lA7KcmYd5}XWp7Z zo77#e+F)aa!iZCQ$h=rd^D}Qc3UDJ;s@+5m-E7D*mkmeks%jNXbk!s&OVY+bjNmWI z?#iW*Y(fy~vvl=?1v&^K5gPcq1j}#y>6-+Y8?TEV@`3=sJG!L;@rs?SX&=2pjd9r7 z$mGAFL<2D2%x!3Z3BJJI5N82;*)a%+7(`(2VDe|Z>c{4zoZ&=#bP!A$ad{7>qT+up zq{MA5&Oy>aHG?C1*7jKRZ07oNU?txdS08Ps*9qMrtMi53U*(VrVw ztnnTeHsDOL_x1dS!jr*VLAaY@JbxB{bRibx$b*x%_i~dcHpb=0UG}2PE9UNzV%(MMWV5qm7)h}5kD(Uw9JsnY#v<1 za2@96=g=Fw<#^YeA%0BaTAh4lTe zF0Ss;;E7h{3)f82&0@!HdUBL#9NVQM(H0wz#9kEzDz;L2*4Ah{@dRQr-Qc$wxG{Je zoJ*)I6B;C4ukYS~nV$)r(f%)^W85uINAI@KSl)cNFZ=#*7Cb8_?>D=XGytL*e!3s`o_lNZXeaqR*gd;d5cGQHl%Gv4bQ-w(RL+DLS z;QcAK?jE!Kq+QxbpM{+XTIgPUr}6yp)6L>D`45l~C3<;ArC^ePsF;>KxYYC?r2iCC zl#7)YxL=W(nlG>Xofy0KQw##D8eW&j83rG_DALu6jtE&xHaH1IVp3-nsQlLPJd zE>4=SD2>9ttgtV9jqsM<^P|n#;RLI-@V$}@`PgWwW{4UI5-HE(B=n(iyGdB;Rpki% znZu@!T_mWRqxjKWpL!}7qbA7S5231J+msei+CwCSnlH$WjJVT$XFw~F@vtK5YlC%$ zaEi{+Ibfq~$oXxg#yC)XK~CfSPGZ3Y;Z1)#FX!BdYOmrbge13wvjT;wz{Z5oFwwom zd1&9<+ZPJwZU8o7f0>V*LKM+*t2~7WmVx8&Wl=_WX(WAJd#luN5N!JZ$+H)C6C+-9 zzHKsgB}n3&E;(;kT>8J3myvutw|u-1qRlHgpN(9+{p)WCg;CM|B!hi-AyOB}4_CHR z{!J0rJGi#0mWWU}D6_?&dgp$Ikg;WcssWX7T%ozn(Vb@1w2iRxZHUrLGPz;%TFXf1 zxso*E{b>ywO(dgsKQ>(L*+y@I*%>UU#5v(w!6qU3SHy%->sVzCkwP~zK1kDxFgt$Sy5=2z9`4x@L3 zRm_JXNci(MJlpK~_h(kEXbB~{_Nukc9p3)v5I|pvvsqgNn+ujNQPJ&3Lpt{)U$kpF zZ!xp8XE`ND3mMC|5)_D3N_$$%Pt?5Rn?6{EwvN6I>0TWOyE)G_$=6M`ij7FA%|F|` z5f~c=q2cMdoQ#d+4K<&~7;Aqw2$JS5ZU1X4>R2azYzzl~52&S&6Q^C9LU+GdpDZPY zAZ@#a{ps8jQF;t#$R9u(7d`rciN27t&@uS-Kb31>JpnFPdJE-cnIg zcM%P(e72GeMkDk69&I0)wsZ-#*@yE3S+sSRk27p?&lI`BIrP%J7`rGZ^szStuVWo~ z-cLW~?nT~<9s=KGNtU>$2%cxJb2RtR+ttS&Y(AW}Lbs{-)s8o-ihEf`u;i>478`W3 zzcbKt&1CW?jM>}3I}xc9C-Fry>TsB;hhL=ZB(`qjw9)#gQ?tyF*M$e@36`Mdi`))r z$f>9u$`4@yNzw{<7=Q;Rokz4{*#MdLFZN{uYmY}_sznzQvOj@ZZyeC~>+-!~>9&a{()toF zqsae=W0$Bmh9f8EshfUF(5K@n5;Pkpar%Q0E6c2Jl3D`?7+||^(ZGn%W>pK+5DKs> z`uz9!=A^QgAR^Id^7IS*cW^QY)-_r1z8`#_SHCrv`?Im(Z$90#-rz$nX%E3Wi-o}1 zU0YFcBFAd}-xn~6^tkCBI3nH{3R8EsNxkKJ5^d)ZW9OV^HiBsQnQ^6ev}W%=Ru3F{ zBOPvo{2Bau@Rl}xF^X={3gyOVtVP~xZ&Zs?@~p(i{VmtWDbfb1PwRu;2OH@)Ayvtd zv~LnNNjZIzfz}Smx;<&Qb;gFYuYCahW*)RkXGJebhQE*aRwg|3LH_1xyT89|mw0oA znzKDU$1SRbl{gFWV$+4fZ)Y7N(4J4NfGj*>iAg(TGVG4-#AF$=x(c$CDSlk^2?pM5 zL(mdi`Fb9^U(p)5lrpuuEPXjW#Gi`1W(;WzEoZ71c8Ha)YbNFLVr1T5)Opk+=x>++ zb)H6y70?+Q${agB%Hj(J?hY1jl6s9^R?9_q_#TGX=XE-pgtjn86mfkP?&KNXJk`i< z92e5(gnFy^)Nw8%xM@fkMkpNJP$<1RrY5PyT0j%0ZMMSsvv3j4^@>*>xj%j?_Ofv( zt6#tuq%>^pY$LgF_C@$5-fOdat^{m1^h)Y50e) zMKkE-)8G_C;?%uCeK$(;>+$cNnw5Pn0oMKBy)t|C#VsJNxVxWA5moAlpn7>fon}hJ zT?9kH9mwADV?a{cyKbs7R@p3NOlH8p zjIv$u&!Y?0GIQ?E*&i35D(35s_dB7bG=$RQv$1~_LYhn`-(?tlG&$rVvDax|)F1>d zQ(IlPC;B+HZ7cmlm2*XK4^Xn0&?T%T)f79Vq0!Zz3%ySuA6%ydIm&!MBCM zqDQF6t<7_Q`fpM&l(Xt7YC_C-ZBH}zb!^mZ{`|09^}kA&@3#fsR@!xU1WyKS^WK=FO^@yGK#cmT6kkfjRqIXTzn!Al06<{mgyyy9Gk1 zNycn*W2XIy(ik*dJ7*{MWJQ;?yJX?*SLIpGV_#fTd8Ekp)$&F2)nWcFHM$ahPW788 zAW3Ra_LXA%u4Pa$4okCrP04T`#@*VUImob!Qkr9-zoDhk7s9T73zm#{3i7XAPSyf2 z$Th%%JYTD6S5<;v_w?f^oHxkG{g9l)gDLG$qSP_x4UvQNO{-NOSQmu&Gs~gE_jzb& zVzJtc8d@n4CSeBo`+N_iF#(|o-d+D!qZI7$DJM;&66ut}aMXI%YDi-k?&ZJnIq_&q zGOaPh5tf#e4I8ZcJG)%lY0Q#yF#4-DhxYn2F+j)0>83zhO$zY|(=W|2bVp7$ZNU(hUAPq^A?C*_O0di7>HyJP>g zd=c7JMz_OIkHT)-;V_nPNCmB*m&rMMo(`CpHOdC2H;?^x{q8cS4FvWRpJGIoyZt-p zV!)UwUfdxD9^_Un)jX^pICxHD6S*3 zy#;ZuOa{_E_;Ka~d;n-|td(!#7hwg4eYD70`s>jHL#Aq3L2T5 zI}X3@55Y{iI9#=n1!36UY)rH1o6h*@y@~V7h zvA*mRANh^a(0cHFM1`;$t6BOjf=5vBKj;mo+z>&*X4p^UI%e?lho} z!{%u-1Zrs~5zX^!-t>6`>3!YGI)N!A0fv{Fm!4mm%Qd zuF}$FdO0IROgu**mTi4|e=EZGKKyjFi&pip{EvQm(#&t^e#wYcc6PJN7s6cQE&O&H zGSX=PFTUa{@9?@aVfMI-?;{_Q)u$1DN<-Uk^~kd2!zdtOTO==iwXRGJPl7Oj&JLLu z@jxT?KL6VZ%?9Ck3ha*x;UU$pkD$q6=Jg*yohfjqE{45%M4g!L@E`>8n-^XWWR3vb8i|=YnN}Tvd@s z_QM447@>(FCH|zVLevSW*9oF`vCW52hqcD!ma7btBs5i(T8zA2NWxtCI9Yy0PGK8t z`297|Ruq>|`vjC!A!I!MEiA|^s%1)Eqp_BGOICHi!x{A)X zXT1u%I1DZhd324V>{_MDZ*7iS!m>$VizWVay+fpNt#Nj0FIo;?9Vb28(-o+#E{n;2 zMliXm`H@TdL@~}%7q%wi1&+C&%kDi-CbKwuL&BLc^P-^k%krlW!PCUG=zp)uakWgY zf#-SqbArM>vmvLoJ)8S3=W8vOPX~4C#*Q@z-!Xq3m{WU?7}PA@-Zc6`j+eT~Wpf-p z&-vqnc#az&rNgcIrC7PFmkQAt>my8MgzLZV=Tz88aJ)=Q1`^5zm`mR$wMuC;n(i{$ zx4dvvIL!8KS2w=li=#Io;qJNwQw=sgH*-O`z|XOn*+)l3!ini}*;OEj-bE3w2m=*o zN&SeYI9>vzBKa|?9-4fFK-k?khSbXN{mHSo2t|xBwkHAhtAhkJcH>2F~*j z=fl$h+$aCYk*X8lw1A1RRJYFO=2ff4+llh-LLRy}@&LjuPgxE0s@uOkY|f*RJo)z;I=z!Gcc&b_!6`+l3p`E#t65Baz6mf+5vgS6xFlU2T+u}2+F zCCN|k*N*u8Q=90VU%UCJ4(0cOC&Lwj9w4i+gUM_m;rx!5!J1Vv0hh*2HtQES5@eEq z;tyXDmac$XzgntF{K$@EA_+l?mU_E}2dj^jsH_F#6*4C9zhN3zQUxlsrr@(5vjsw={7!IArfRtwZOt#1)H8x*H%m!P zMQgx?rWwhOA;lTm9(hFDqOx*1@krq~h5y@4+J9O6yZT6z@$HU?@x4)X6QtNu7KMbk z-h~7y`@?0~492_WlsrZQ_$h-M^Wh^nfXzIIcLg#M{9_0!G6X3g_A+T-z%4aMJBqxZLOVF_Gm`KW)FiBN!Ng?|%{^ z!}2(Eo>Y`8`q@rC ze7j^8B(G{2lq7JOzId8kXSJZl^1EJaN3&;;?(V4Iu$YTLv9PeHC0X8@o8x%Bp3DDG zd%Da!d5s)N3;5?kRo=OX!$D6C&BIE(0ZS5>Hs`A>U6s}BVvEl@Ia=Ar`SnP_+|lUd z;dCtRfw4%PPM;*>exW_trCh#YaS?NzAp*Y+=?&lAzx*XPZFv=O+Bi<>PQ3pP9_$${ z$&#X}&z~wNF3-fcI?J+??#m8+1@aNMdQJ}RmJ4JCJOMYK!c!g(+ECnWW%7 z=r$%`=1*f5Uq;5zh9@cThTDS|&?#ZeQ6WZ8T=ucL{1wclTo{~$qNaV1N@n(mv0lKd z`U=%-sA&wRSC{j91?rc%=a`Q1^mo0UXF)o80v2+hcdga9YkJ;#x?UJ~Ctxi}X}KM} z5R`!jm}=4Xs7i0W3>%S|DmKyjVqLe)de@HwGJ+tS=vqYVCuD2>Ry)BF`swPr;t0V1 zd7hQj!GB|>!$Jh-(c1QQAF#!lYunQ6=c7t&uID`EH}mIG=$?Puo*rqQ&r%UXOz?)h zvw?3L`OdsJ8OrA$%KtTJ)5I;CnSw=SyTx-3H34Z=jC`5=es@Q{u5G`;)3?x8zzcZ# zuDzPRWSYOTwzFGrcRvMN7K58~OCgsXy{+=6B}X^G=d$tcyRvi>2*qs$y6Oxp9?%nQ zVi)95KrJrT{Es}u^bYeHU;Fw+-i3(-W%yFJ&&BDE4CJ4bzbnSsWNcS)(~*ENV;1*l ztLM1@!k$4}-%4s9`^g~Jv?R60ME&IfDEL+H^6uzYURY@Uv(TEI$C9Q(n=$ju$#TmWS?s+NyJ zz13n#A~DKL?!v-d^t}<0JtDjDFl!-Du}mx~T?N41g)-pZd2Hwe9qs`c!Bd14Ck$UJ=2Yf@pqe}mDV!1Q5dWo7nm>_N7e zQT5Ny%sshUXlF+qV#N)MVKD()gzbSSbwR@(J0$=}FDGMd%FZYfs z?4EN?cfYy0?J4cw@vWr3f-AJhd+$lA#Ra_tA|@YLHiTryy#}@td3kNiTy`z~v4>#N zP9NtdJY#po3SKwrY_0~7(nbvk(NmM31_+R*-`kE05zpw;720*~y%O+|nt7FKQ2-jB zP}64Sbmfc{5W~Nuwyq^|b*AQBwf#K#{Ve~6Yyvb@DpDk7rS1YX&6f=mbbl zldZu7^d5H?UiO~BiG1z8iNPn3b8&%Z3Tm<;LoZ0g2vGZOA?9TIYJEK{et5;JlV{<_ z-A&7-;SX!m6-K_@hZmwo%SC4b&y^S(*J9h*iJDSmJ$S@mA~RHq`6pPcrdKULZ2<-@ z|G(Ni9AT_vx_Vd)b6PHW?9n9jP2VV7rA2KOnoM5Z(c(eT`(#ghra_9X5?T_?1XYm3 zSo-Suv{srT(V)X)#ZGJ7^BugJqqVXB?p57tGe()6J>}m0Hju3~DG%Nzy1m2L-;94- zNi`gz_|))Uuwh_eTB-v-R?>0J5jvg+xQqf{FBM#e*Zih)kKWd-rUY->Y|B=>bK@w* z0#=%B)0xJH9rI&qHd^nVtg30YI>qVzOSo**{@J}g&yH>mmdgrk9z#F`Wo0wqIn>yG zGgPR{%4BR#zaM9kkh8S-$1me4=kYBE#F2ZfECBP1IgQa%K3wTKHw`anQvPkx5yM{b zU!@Q~e2|P%r7<3mJI~}s$loN&3l9m#rtZzf<+B*VVNaiNn@bV9YxErN*&xQbkwh6% zFmgIUzfNv?VOvH&XTDc8{&6@dB~lkPzFkw;5X?$(G~kNgfdE2s;R@ou|1E;LwqM> z!0o>meWrwpUCJ~Ko907#xU1O$x`_%2P5*>wGTQoJlJG?%ZFk~H70q|dphzAJw6wLJ zF*V$J#5qwJVL}F*4cee3tL%2&*3E(L1EPd;UP$ORjC=TcaiDlBiH?^#4qZSICMOQ% zG-1oTHnYR98n@NytR%cnqN*u+4sFz|Nbx6K)3mqw8C*CbJoj6=45>a3FCT}&lUiyb z+_r|oB!=#{Bap!>NHsW_j^LL2X(z&-hyOX`?Yz;>+)#&Gxc&8X>$L+v_XZ5Ad>lU= zfB`gAj>qNpoU`?|#>=TkuD6YJ*6DMl`;q~jSc~71qEjE8VB0pZv>u;~!XjU|wa2}d@Q$<8&W zc?{c&L1n&C7FzdXgbgweIjAUX4s;gPJlK~#I;(I# zY6zLAYA&RF@TPn-yK~#}ngbyV`CmM#os6cUWKp0VkN7D(x$Ph;`a}!3hmh9g;>Uyn zDb>qQ99!CGd)d|XITDmwkOj$OLUwF%zr*7O?YkeHNx3v}7l1pHpa-4~1oA%qo+OQ1 zYI2~?&szm2eOkn=~s z20L91>Q;RI23ui<<6(|x!fbWt6+@8$cfN$@ynPppe6=Jgonj1AAW25j^$G!gcm(VZXJ}^H#n&7aetHAE2zffpt5olrXsAMyJ7mC#hEx$08S#S+tqU9Vb z-y$E&R&oV&Nbf*&&S7r3$qJ&|N3TKsD*X=GJJkq;RXOl`r;(XF-0}%z7hSMhHF06+ z&FYXZu!q6?so`q;EAAtJRw$0g#-5xUlQu^j&JBc7%c*VK5y4atV{-j${3A>jP@<9) zgOKI!wBPN$6|heoM=)QZ!>o`?!TPKf)uydQ;?7b&|99b%APElrXS(7mC9p=P(+FbZDT_AP5CnDgV8( zAf+YapT|`%j`gyNY3w!ZEES#nT2c0`5ory)Uh;^!6(d>tA9W@DMfG*rAYbsh1K+$xU+CZ1#u>vC*mCaL4RurPH1HMd zA3Njy4=alwpN2sD`p@k=yNF5xbG3oza$HalmqT?aCI4vo#+7%G zf*fQe8!Vx+BbP%dFQ_JSPJiY=hJ2SJrnssaP$8#nY0zU}&#;q5$Jz4bCuwK-{*{gW z3I|c*Cq&vh#FFt`ih<9ax$=6dHPG_~V8G%c^_G#O4n0RuN*7&a;EV8GEg(ZCI$*MF z|N9^fn->U+SV%eB@Eow@h=9Rwg+0|WPU*mD^k5bW%(J9@O}2yQZ%>lb;alss-Gi{JV*L{(TLmch_qU`TALw!xZw^+TK`ac-@DAZ@c zhk=drf*N}5WFrsx0+?+NH6jKYsQPbAi?z4oSqru{|Ayn#h15xX?p0^C{~X${z3d>V zlUU#Dm)(uFS0Ju~&v4cl^}PS>3#FyObIqi@^q^L+*iLO7wWtNyw{t+$VA5XZLQs2x zlSk4o<;r5J=%;S0AllNI%-)y~#drcZLTuJdWefk#(-Qmjm{kGI4=x{aCGDMRH@)s3 z&O>yr@N#mBH-j{Fu%svtsjYH3Gikic>CvLh*P>Gj(y_uT3Q&0DBuAsXNau@|LgS4t z;wD}+wzDOehjew+9kT^Mu!Vke84p+OluoENeZ#=17DwQ-7IY{lX0W2T=CA9VUd&L6 zq%JD*x|QX}F2~leUP>1Pok&nmTvBh10aCBu<3_Xth_H?WT5&rV$1Ym^j6^46)i0^I zm&73kk__27oqsY6&|8iTMZ%do~(%=lO}pHh+Y=IbmmEnKwL?M`Rm6VEG zayb-1w*#Tb7u{=uZcz_t$QvEhN*v`U52ki+?UpEbmY4{^z3d=EJ#}6)dgvH~BGZiP z!~imw@z<58oa1Ror*!_*Fb3Wyg%9X^TM!JDa|%Y4_{7#GWe%EnGW4yb=%Oo_B8;?0z&-N%pRR9iYsFGsg> zMMQL0xRGjpJujFZPUWuHJ?y6&O)bHoBwq-S!aAwD_i}@(zFwBsu@I7J`?y*dUc5hC zZ_34Sg(h)Wr5LI6KKh@>dBp+yB;}OkWgyDplLg^yJtDkuuYLW0!x3ab=3p)wB`|h` z0Lm1>EA2{WgUab;km~%_la-tZjJlVL9;L5FM#E(ZDf|gjWvwCZv@R8qRy<+y&^FWi zp6Vc3kd*>QRhw}!p4Bd^D5t3Zo6b|8Lo0TWbDLNYp#H3ZzBd<0h8_g!sbD}hlT1Vs z)${vlXnxrW6?W8v5078}j;p4G27IqFLYPh-9+v&Drx24?;t@z@4-%J$6i^fY%itX4 zQ23#b6;!zl0jab{bJoL-Okm?&if?B66F&}&SgC|Q5S=0|J|Qnm+*vHx1$5rpK}s_i zP*Ic>-4??%Xh2)#LvtaJd$x-}kcm;!Habq;$$<@#rp?(qJTIq~W>*(VWo_ohjrtAk zZ24Z#crJQ8#M&(&{>}6)O9VbQ|F0&Eo4)z*{j925S8INIUBd;(%yKm5r6RED(0ALZ z8*0RA3e2aflXALxT&$0>O?+eR&PcE9+9Xj&*4=MT^({^4s<3Xpbb}T>UKQU=ixe}E zv!2^lL7dNCgvmdu{yhLE>nqOU5(7C7ZX?#br8thVl7h!+TvtbH=27m&fSI(gBb>8< zweoIGAR@t~1?zm=l3H`Id`||tJ$*Tpo3C)sre843r5iTL^uXsHHT(enH~1obUv{a_ zY}N18POv%wf(;o8GQ*fo0g|~m*whLAbw%ao*Ej_UK&Jb=WP;IIX|0!<%ntu;43U#7DM0=1R*_aebB$gl{7`+ zw|tm^}PQp*Eyvu`O(>$ZoRH zzP%rsdjmXbndV)5Drkv+-a~)^6@W82t$k2mVbRVmP!mZ-QpJu9!SQgllNN3Wig?u< zF{}8POpkp%jt6_JRX!JBdSm1&Kf-cbsNB(Oy))Z zx}@s2GWRt+CiuzB~;tKO^@vBex!Lepbpvj%1(SHnmUIVp~Iuv z`;|9${ck1yy(~hpqpqSZ41f z3y%1SZb07f-pt|K%~b|u*eDxBRzfF^{^ieAD_;&u|5B&NqSir2y`#-ao8BxzQ&=vl<(+6v7+Ag493U&A2&Qj z9+u4>*Iktb^IDb;DQ*YBk$d{L8}E0pH;2SN(`&j>jPh|c`5{!Sejs2dzo5uPYIuYL zZYVEf6()?8|)S1SK>=Ygh=>es!&4)iAn1=ZZH`E5Tob+91qXxegKSh!_c- z5CkQD2ygDiDg-X7G7n93SIF1HoZBSF@&Z*YXebIlbrfYQYB1pdMQ-3IhTQv$;$kSI zG_hYh>-ZIu2?AX^w*AYPAa9%^snU+Z22s^s1ueQy1js|`5!ONR^4Rf4 zcb#*avmf+@F2;j3m-Nre@KD;6`dL!S`FVSB@=zWw)-jdK^kC?g_=#t{PN85C*H-Z; zX1m-eIAl9>f+_$M>;APJFw23huALna_@|*f4B9E60dcH`sfA@W`Y9F;Cn80TSic=a zjtOkj4Xx0c&;cH8?@^HjV&3#mcYB9juQ%h{PF_nj2DhK9xwNxM6fQHTOm4OM18xKT z50F||WF{+z;x}hSZbkxOjL%n_!J9kPRaKqGr9&7smAOOD_cz;*FIzqP-E*vl8P9(z zG5h*JTg0yqfeK4lzl5@KMfxf&ED8up6XN~XwzUcU8s{)O*D)99HF5ag9_ZB+P!^5^ zi6B+F>oY#xnq9wLvgT}^G~+`KV5_zE*Yaaba zij>|?9wP2|BcOl?2uCBiTLEGC?enZF9dF;0A)`QUb$`d6N&vSCcN=B`5Fh-|s|rT` z$td824PMu)fDj!&Dbi!Z3bl$FWCu8PTEfbvA4?sw50|S|;kl=DlkSVH|GZ|P0Z>Yi z$DC{`J>1Y|K>xsxqKOC;IyyWSa+xu3taN~h=X-!A9UY!Y{k&06T^|NDn3_`G7!C(? z3Wd%`x@+ILhoKX!sEp~|T!q>YvKZ%_ukT_&AJnam;oB>PhuM+AgAn|?(JwYKmSN`I zJ8BnFRGaCADg}?_6%rudBbhD(+>R85PQv=@z!OhqX&ZP^$y)~#DA3ejpmX4@&1(&z zKI?hk>iM^4X^=C&^K5gF>517QcqJKW_M2_HeuQLv_sih_dtEv!?cRE1pw%^x{qP@+ z1E3xBMQf4gq4-kQs}v92xjl0&7dz6W_Erw%)GfMSj$00mD`2W)ZIL_lU-a#^g0ikN z;#qq+awE{xvw-p`Nh`;!p_i-+LC0EAEsfW_@vCG)^34^inc8Y*0;AyUic^-_Pgnyz z!Ff~b3&qH}6BLv_H%HC!li(6VKoglBLT*DX&~cSY##I4h)TQG09lL6hvm4f7=tHt?t=hd8H!!wnG=_4O|Yqeq?>U zXxMPJ$n>=%<;en#2=N-(ZL~KR78aJ5A6K`Oa#`f4-}CVAK(|&qAPz7AnKCR3$q;?B z*|)`Du|Z(Ikf&|ooH=~GYdFeN`Jp(yB!_jIH2+$@34X&MC5mHrw+qVzySZ(($SNjo zPG@m1>fbMphyV+|AAaMZ6{!HEz&J`{>QP(FeaL| zNC<#;2RS%;qwLD;y#{ovzfAO=XtN04sE-n%)t|+zI z{<+&yQ3nWqaEbj&>3?6r`W3v5eCk(iPPLZfsZD)0v)(6*YMa8n zh*)`}-7oyMdueDUqH54dR&5Aj?(&R;+xh5sv>lC_5dXe6p8vFWND?Tq+BtN(ezQOA z*qt-3XYK;V8OO)|Yg%3|dp>5+{0@$4r}dAUC-N#3OK4pqH~9t4UNYKT8yFEp7bfX> zjt-S9EcU_Eg?c%7mP*PKAua7aK&&;$D7uzaTz!@k2x_>OJkz)UKVk)CxwGld$QW+A zZQZ=AjbDJ(PYtnVm<=qar4F;Ua#DAxMtry{8t2$zn7Qx6`i@K*9Lf4Xc_aJKl3P- zxWG;ay(0D=U;uQ{!Os)(lbvBBkYq{Fk-JGSXQJNq?Sn7{-WfTSPzA02 zW-qmMCrgylrJas%CE(7a>}NKo;K6v|5!SlJ)Vr%{wvnl1+J5Fd6=uk=&k=tX*hyQ> z4PlC+BTLPIS_yqn_tp{`$#^9O5@g>w zhx%jg7>xFVK%mJb_F=Q^+c;B)QE&ur$IOG7G)uD6F+H{}13)?ab?rXn1}*YEUTW{jj_Z1UZJNJ+bAk~@)=$@7uX(-~-e>hA-OmfPHQM#2sg7nN z(J=U97OH`+3-X7LMBbNI7TuR)>@5|_rQV8%0<@;!`Wlunnrs<=Pn8^_`uFc?i25Tr zSU1DP#nAq*ceWe_v2;}A?P1-&ghZ|vj@s5vgtckJ6(qcN+|4ZrR*nz4hp>>Wp5IL})> z7Xk|gdew#SmD|3lDbNJFFRQBZ*B}K;4!M^A4ckO?NgLJ%xuP*_uG$g2=}&FnH*G3ZZF1hpRf&bBgJ`Qm$Dhv(1!q)p1QjjTO#j5^OHQ2lTGa6i8(BXs?%E z)N#YuKnZr<7vHhJoZ{r52GwHE46lOdAoPTV*(msb8g#o1&e{aX-~%-1Q4W1spxPv8 zt7uBxWC*+zA0(o4do?gR>f)G$%wOoIFk7jio1Xfx?nfEV%XA!t63<%GpOtG&FmSq$ci zm#J357ngn47TF8D;2?0H!{QCCLbZC^wqdk|o?ve`eeG@A2T8XHX+)`;FU}3!JNcp+ zz0|grM&y0C0S0Sdr>gU{l)xn8oS?Sx4?P34iJxJ)`s@N2v~gWa_XnR^stkJX^=;|q zhHAGwb~)!qeU6&md*eSmzBQ3?aDF6!3*I4w(A`U|;J(;to7VZGIMsm6}G zBk<#0Rat0h9?jTSF(_Z^(?!2LE(BIB%ir72Mi$r2R#WRn2N1!HtIX{;G?hnD6{@DT}&zeTQf6I3LA8>`s~#&Ka`fhwS(YWYc}k*gL>4yM{*f)2j7zcujur)ZJD zW9RMt0)B=cOvv{}CENG5sY|eb-M0QL89Y3!C5~p)cEOH^^d9$RfcsAccdj#!+pfpb z&f3(Wg;b50T+=|Q&%=b3i1SbE{yLjepV9!CaGLk$jXJEbzw2Rz{`-XTqOg{KDR6JB zn?})hY>}_{imUmuM#kex-%Z#Ar-UJFfT*tW4%1)*0guBas#C9v$+?@t&`cp!|8@y$ zO@vc(!Ao=_}Z(>YuJR-Klg+NQ2TLjf!-4cX!u0f`A|) z-QCjNCEeZK4blzozW?v_e1dbX-|VS1Yu41SwY)YV=(NDzO}yKsj(l0D!HnaEJk#m7 z`#$a-2J&a$Ac2TVvitTL{CSgm3%fTO@2OnQM>r-Jp$0~{qp67MH*#34D6=18V$&=ub%YHk3 zX4`5`KvT%2vISBwB)+IKa8 zIhw<2vS_4b-Ee@*p*CSj#30E(Zil6JKo$zI4mAN`NzsV}BJ-Rs?G3Zf+>5yGcmjkG zx!!ay;&0%mRphANt;5eMpR%jOR7gZH1sH|3D5xJLkm+ozBt{TP43YSwT~mC{FTPEq z)Au?5{4Lt;q=B~G-9zX;#@)F*_Occ*%T>iAJTTj9oz60kTZ;9HoABY!eX`BDfslck|(ZW2bB_BL6- zP@-jO&wnF|9HSjQ3%$m%OZrI{YB>_G^Y6#q1eC0s4g`rq2T}q z*1BmVd9|j(Zlwu)AX(oh^o8Aq04N`8d!9i-qRc{k@9yh_JQr_`j~_*M&*`0+&h&Ig%xQG9MGCV)dhi`=b`jg4|pa z5OU79B=Ip(U1jJQ&4Qp8hc!!0fsr z`E#{_rbS>^#R7nyfZgyp0=BEGa(>CafKDzkEzK@U`IC^0N_&~Ew6>Oo+o3Rqb?A{8 zr}i05=x+$_wA{mxt&JqmLVv1dK{cqvWM9B2(&P@H+9wtT3wM14;$n_JWx`&-=~SUIaqA5Js(Owzq=fvpufh=G&26y z_NkhgRiaubgoFMQmHIL6SHZ`@MhDk%P~SJZbk z?umu+m>O~|=>|-0xI}6Yj7^0th2MgX4ENhERrc)+14|hMBzp||q*(q>*{bKHp{C`r z9spp!1+&jb<~hO!oq?Pj1^Bu=Yn_l#e{a23!#4W#+M>P9nUKOhEOE^QJ!r5vXI4Iq z2lvl#3&t}P`{FuKF;_KBz|jv&z|R34WDWdlX*$sJVoTXzVGMs3O-ZO*4dRXdyx>Ae zHRDbjhFGuH&gls_Zc2RnHUQ>@0wFI3X7d8CLVhugoIGw?HcH z`JiCeB5r17=6vbwrALfS55{MY(s%n(KmGZBk_*evY$d6EwdyoSK3%h8Y7RpA-#{(U z=cb4a@)Bk5vU*z%aUF?8dc7}rz4#Z2UqM~c(~G3;v$p^_I86RqVovp*xGA~ilAm{! z3!+*3rqXKW4>%Jl{=@G%&&*}{n4$~BpZ05O!9eNsT0N{gI)Na0^xZKIG!dHOd{yeA zeL#&M()jdlu(4nFx>HAnD0LZjJW2uJ_2|uX*g-eX5?oD(4UiD+H+BCSHvan(ItwpC znf;68BW(2Hzz0%C_~2dgQYDaIQ?$wq{l&)u{m%ZJl)haybo#{q(^NFmjBA@mc=oV8 z`8}5lKxnp5$Gi_eE?B}M^@-f<(roLt-5r_PkSHhf_f44bKwpUlOi)t(kIY{C$f2fi zbA}IPpvoPjh=(NVM3e+sDMlJOeugStWb6kX%}{llROAfRi9p(3>r0hV{U!m&h$9Q+ zMF-FW6O!&6IB~4CnyFcgcQ$E#&bP`^44%zTPbpHv^9&6?IX!$@fxPS#)Ug?4sQ)@^ zOMRXO<;3h#xF;`y(>=Co?d|!_dsyZm7XvZBeCL_|SIkQ?QQY4^UhhaCRi6CH$wC=t zS=vI5$MtAS5kNDzvI zma^G7euKZdr!_llMjvU9UK`u5SE;a|P1cvYNv0F{LyqW*=!{h|abw(v3pW-wVvt?4 zj5NIY4ZZ3rJ6HqccW*HlDjxGx^^HSF_%rGZnmfc_!-mC*rRn(}D(p9Awv z-BMVqcafn7jUGdBCPClAGv%kT5-qNghuXi?=jaDxf55etxzA|Og5jRflJqIjsM8@i zZtB`xbhjlJtqRKDTcODVmlRGXK}Ko?=BsH(OHn-nXD!w4XL{vx0&BK&ip%>gLp^s& zX3VDDEcPV_0#=5jv^MJIed%;B4_KKVzBenwK>|YRN=odv(%-=6PLVH(;m>$jzG2CD zJV@#xzLBcbXxC#Y(W`wRevL;9UId3^yMwM2`p=~qFUGv2=|i96?@rz@{9`V83s>CK z`jj@OXft17cze1MCApoKphtYI!k;P|T=nCfs`k*OM_=Df`m0Dt3XDb6$N^DnyYN>n zBfcn8poGzl-Pj9njO@%6t%N%3Apuj?jwr}b^`qrX1q0$oLk1)n(S*>3UyF@Senqt8 z3d1_{$A}Iil6x@9JRBR#1~$x48=FiolGqPzqyzhoL?Rkf_F8Jc*Veqg{FDRfce6ku z|A_hvJ^&9}5nED+gRcdA!bJ*mKqPdTaQdZFmpe>a?$;yprGZe4v9)g2qRhkyh1pOt zvp41NTQ!w5Msm2!)443N+VqwUM;MAgCVJmpaqBEWT-%hh*A(HeF>?;7V>53?u7i{T zm-%)Ggg*`3%DD}~Ai1cjBXZ2Rog%%{%c1U%=O-EqBdrC%g)rhC48#vdqkAORRg}OW zCVWrMJCOh*0-(Mn0z}`ZB8=-#Z0`6Q=9nvd8qZ2Y>Uh)H6;8-29mt;PfMLCF)&-Y= zl5B$=uOQ;^PwNZPKPz76&#C%Im87`L&j8nDa=YoZ{?{)KnktXSz$j)yN11l8NQcMy z=g5BAUqgK-?SG}B1Red8cU|xmw(89}yGE-)O#-5=j7|MRE>}iRcp2932o+95PV8Fm zAGP$F%KDW8yBDK9DeA$Z><2C@|H}o`;}Xr^W6CQAWp9*@Zj9%%w!LFMKbejTYcDW>ZTtXyXb15!V7JYLJVW9p7sX? z`PY0N&y`6}qKEYN@vqSM8RkH{^y_kw<21H%=u=<<0sN?*Zx3#Rn5w?E#Xi6=Gd*xH<&R=FWadOGs$Z=h8UI)OaeEj z%T)(GTucP{-=y7U%K z`L1uZ{gzBh>6+-MOsGO>JR(%9RkVyL(%|gaN6k!3?j9cr@bKbzmVxhy_pBs%XzO0S zOX<#BNlI)%BF8RE1Nd^{9K+#e7)KSUga$q5b+1NgvC>`#Ba{7doyArGM9>gJNmzx$ zZ>%WL-xFWj$`(}YKVl^k8izNMuJqyq7Nv^60{G*+ucZWmPiCDK0z!B*>cRu{)K-g z=3qp5-iy^QzpNJwjOPWFy+8C5DsD3`M| z_KWvHEu$gwm>)BYbIhenc{CZzeF@4>IY#Bu__;VZrn-3sd>NU$nsok>tm%51Ez{$! zOWZqnvXY1mQQ6Os45N=wcBh>6RI_6kzV_eOwsO>rFszV#XTAz-ttCt+|d{mj9z zy`b_<-d`GkLpwx3uQykN~DQSn4ud&9`wJj$KGTDx(;|Ew*NcUpdl0Sl)&_%IiCkv>X(6L5LDzl2DxSHt zO?u34{~=ibB6qj{FF85+>B%R7*&|EIwV}bVF7oGl9BVqY2A)_h>xI)-%Ph5Btt89$ zw@S}8`dRWn8@9TOoNMdHd_a{c8{;?MlRKYQDl_(4?AxBpXXW2sd zsWG4(c$Hwd}EPh5robLUG=}UU2w=XMIE2AAy z^xj`!c0qz=NkvU%`(>|oR^V#l zo$?k*JnxS^;nQZ*X&O)Xj7}!>_0i*WEyGjW(a{kMqNJE~JUq9@3)Q|lCp#-W?J0zk zK(?dOpsV>TGiO&UQ!OW)zR*`Q*=35xMZ(TKR7;nSSj!f6<+A_i{gnC%b-W7~(y?`6ZyCuF2T z!C8jf$uJELe$2q#{mN{4+H*+>LS6p#%>kxpw2Bt7@Al97?mn8R$(`9?MS(nhn6Rjj zc}@Kp7Qu9yfnG_%WSEdTukf_CVw9~ch3ww=544j0;cx6pZJqnZOEMW?bOe2OjKt*$ zQu$pOd3X}~w!l@rp6>1jA2?Q%#%&bxPW1^{_kYFc%CYZErSy(gm^BR#uD#a{v*)c9SCZ8Pc2 z#?l3C7di8kl2THN73jU{`@e4nMGwXwh<#6@>Xmcyb%Df5nP(FL%3>wvf~V~o?VQ62 zo6%&-Wq^j1%hq%2bgivThQOOFq;V;xuErCk%uW^AE}8FBJ)cBUEM3!j1tgbuL~n$L zo80X4*b?9k%o1}Q%Ti;Ptm%aipe!OyJ;EIk>xX9FX;Cb~(n5c3A200YeD(Fn-0@3#VZ2=DT_2r>Of-!+hi!P>aVav^_wxE@TpJ@G#ZYnYP!kdO z`_~tPz3nDhX{}UHB}-v@cek#tZZwq-yh~9wYLnog@q9us^6IkTFMR9y19mU}e9*#< zIdWYfrEn%K`WHdO>GHq+k_`o!>3tb}0%^bN`D#`zdG!nNHm8jT)yb71iQImKEraPrKdBg>R09`+<6W^C zyd1zcx@wW6{2@1Lz=Vj1h$?D-IEe$K>z?+YmY*~}c^M(Y+{yhrT0$l|0;3PiKYFUa z^+&_7@xBCyX5U(AqT0wZT2&#s`kcW-)+Kv$QmfbGT6RI!M_jd z+p+$z5Q_hfL5Y14Nu*14?noUlj`pWdX5gC}h=APv+W@tKLV7lbhh?(HADG(DEG%o| zEgwZ|yHwFa8P+^E^8i$ruef*a9rqHY5vf9M75mLR>iL=jLnNV3M}_wxwdJ=jFO#j> zuZ_NY>fV=;c(JjA(rsGRhru$;c zc6%4|1mt|0g;ZhpU8Ls1KSzXy4u-RGL|4#vhf+*NvgQ@ewcXesJ4F+pcUK#|OfwAyQ}UPtq$5yhk&4(bUwP>)lZH zA5|utSMl+ONB-CI36XGb1j*r#CI_{d!n8i07^_{9i|(VV|G!Idj{MM2x;j!S=(EjEnM^AIX^kTiH*z%-UW(epNBj zu=hH(mumPRml`lOnZ_s^bB&h@bg3ZtGtC%B-f_OwcYC%rc4OJdKt4nTj?#waVc-*L z%ynu#2<>H(_vL^+*RStUCcUBxdz{vT?cWN&SbzS5H}t5meW|?ox!q@Cu70jPg8j9a z%=^}6?V`Xn^2JJVF?Rj#YiPCbVk|2RcI?X|SxQ1?$?|SJ7uIv&*Y+D6m}yCGrq^zP zp={m@Fkyd<#FfgMyo*bbZ`#Kb@?E^LtRk9|S7|b9{BCw!GO?2#O{VX=_{;l|@S1;p zbLQ`IqjQ05O8(Tr#l?l+!vS6M9LdPlkvHqBtrj6nSn{C)Y(zC^AWpbw5g(|l^+DS& zS9e5D=hg-)%>rW8mC~Pi4M1g6S-7kJ!fUDT2Q0eUZxAv&S+_l+Y^G4pj!tqTPL`I5C?^uqsf97#kq z*x1*<>z%UFkAetmfA1?SATwXSz?;y~2Cq&%jK)UO03~~+#)>-;!z!f_#)wVg$3iXk zZ_;Sntz!PI_|uvB15xzvf42fXJw3fz{lN3wpzFByy@8>hCV#Bkp;lA4kQB|oMFq@j zk?``p)CGHZMK?88O%P?WZst`sNCO*R!t#%hMV5Rn7m%J(^jT8*Wg`A!;ngG1mXcDC z%ms7N9JDW;`+`{=p@(PCYV4Ik@bCr0I%Y9abw|H+RUx|dB+Zn3>ByiXNB>c3IcBL& zkoz+b+gfjRkJJ>WziMH}TR8zyzp3Iuov-)RT^Q}#V|y|GR-R!b+MD*y*7y%AW(@VO ze#>_(I9#u{=iU)(leZB}1>MCv2R36BCuk*Ulpj7+WM#b*7S?C2zfO2OKSvGkY7nQo_;vblY~z9tBXN(qc*s=~^}f;MS1vh#v1sJS zGM4}#Z@Z9XOQ%?ritXWzU#Em*%|NwTbPNb(HYf1OuaySl06PLzl2l zAoNFFu^*m;B&@}Rd#FyH*;sxAxg{D3H79X?@WhCTROtOQLtlO8-tTupKA7KB>gONS z*LlAD#a|&QUwRx&|3DtcrLd5sfE`bY-jT^oyfSXCsjoh@t!%qp6BHPjS5PoyVt17d z??^RWGl)Au+>epbA#c{PUFWy)*ZjZIOZp+npe4T@drUr*fEVZPdcYeJF-w+8#G~;d zdmY6zL)>W5yL^x4)hagNZ9VI&HhF%O+){#{>URF8xxsa2=wgP#R)*re6{H``I%Q(& z4p$QYj8nK-!=fcO<6En}mA4~~3*3fw?n&_TO8MzEIg5`v-W4=JJh?+ZhvSL+)i6st z=m6$_ZtOuMyYuLgkL6dZ#_FHF#u~N)0TdLJ5{A0M!oq^EQtnpE%eKk-7;0on&K?&1 zM+~zjIa}a2uGw>Vqg);u=Qs^z_~DhJx_2=TwEifg4VGT z4G4LM%0?!{l_Mct$b@QfaAJH4(596G%ymaD6TKJk2J1ZQ&CJXGl!Duyj) z1NF(Lai_9UH8M+v*RMKv64JDh=O|f0cHsmv?haxwP!NYcVLr$knCOydsjErCoQ-HZ z>(syXLRhJET_`_UJonIg;Am!XELV$@kK){$g4^=Dxp9 z!GO_^`|?uG*8CWf`e#Lpl{?X*wv*;fqX&Pn>S@DP1ei>tX~4h@0S_Lq3j5v~5cSCf zPyW#CMnSGiM<4%M#`yh5i@zDY z6*xUpCL0W}KHpbQz`5P--T8c^2ATE4*174r(ItrMl&;@9TS+8`FGQ;=OXR=qdD0u( zf&DkQI49SBHjaJy?z=tI-N)_D{^eh+++4yd6KhURU#3b{$obJ6&ut?Z#M1?rEI4An?>BmeCDh_rpeWzbxwl=VxL;UrJ9?oihy9J?g!ze7~!gc@jsz^k)wd{_6{-}1Ruw** zN+o_=O`WgAgvijM;s6c!+PJntizH+b$F7qviei+MG0`*$Y>9z?)32Ctutg+3C#6l4 zlScpijr6=tIQT)|pF(e{z?dpVRk6PU)onql+;Z$&OI>r^kK z#>H__Qlpr8u^|2~U+sB``ieT)GX#)YE=?UZKu>=%=p*%5i;H)y%?a0V2W*`Q(EDt& zZj?UTj=gMTwA$xz#@YJ%=$;EM)icLRMys9i-aj)=&F&Og9^LfAh)zde3tWt4jICAr zWqobIWc~Co<0?7H)NKd& zYZqdcqoJFUfk%w$Z(wD$&hn)=jx*+?(mQBVom_HsvY@ullZCcJL*?)TG8_P=BxUeu z;Di#+Nao~jC6*}eu_T&lBbhyuKP+X;{K+OPb`&ve=0I6Now>%&9|ijC?Ci;@DeqP} ziYQ0eH-Q{@yANWv-m8+lY-XJ9pWw{ohx(pdl1TFA+Q129Lj2uDL)Tu;Yrxa4cZS#H zcO>$=Gsx>wF@g(%y_r3C>B@@~<0EDv^L$FVPR)zq!D*cGZhMRRYOu00mYwNc%TFXY z|L$6W)zGz%Y>dyPyT@$uKCfbb;1$Tdjn7L|>6Gdz?%aGCNqnY*Ay`U9E+Z?}^1izg zn4^@zG$Hq6%a!L_>J}Z^cK^o(DATDo4s&M0--Bw|vnN^(WiGzZy?_5+P;g~!t-Ywo zvd(=ZA3VjEn4~L^q4QZ(7R?UBt!fbKv#aKdk!WV&P;3!J@nY>~ql(BTy{^y&s74Z) zk)X(Xy}uU?u3wt*`yL+TH9|tA4a!w0eFC4^bU33nC)m>VJ5Te7lW>4Ua?E zKRqqN4BF*^>02}njBPywVs7>~wm2gDt3*OsTDqydF^*Bv!D<#AM2?*C`A~x2U+!VY zYv)ma+0wnk%rhNdI0$=-A$8TB(N)fzsES$8oaNZ(a9EhPaH#J2-h+w~* zb`?@hC~vaq_WWuQRAe~=mqu0k?I z^Z}zUa7jNxPQ(HKgfHuo^)z#);v5`W-{6mBe)k-^$5H7qp0Y6Jpno*VQI_o51mjm5qIog)5i;x-=Gx}S)cQBMT%V+5#ninI_SdyOAPQ- zNzlzGgUpf&b^mY*B#!W*8#=Tg84N%Htcfd?KpM-?zyPSOb9H+=*55BFBjfUt8dr1kiS@q(RRw-PC6S;fFCUAEHR~_`N9)HN)9Pi_$T4crt6cHmMBSXWD zCHwXh8$7iSzSlSQb!^5*aQV@tktH$06~4y#@FEI_Racdr=a-Y&L0yt7hClxUlRIPk zX3LZ5q2JnWd#KbF+L1c+wY=G4 zEWke&FD7zk&-W(W`pfhc>xbf+B9`9D*o7db(4jTm^5%WkCAcAQBY2N3k&TSj(#mRZ zWW<$*d6q#cWs$H$zCTa$$R0r}V4=CkfM#Q*bf!y$1IW&$0{;9_112T)sf`tqNdS## z{V|J67#VCDcm0-9y(wQ!K|MfWB7!oIg`-K6bj+uAimQZ&FoKQUZQ#ORagr8&UpAdcS6B2BXIq z^L+|X_F(%hpZ^Aa(I`HC-sKQKr*o&(jC3Qh~6h(%$yv$(e-1HTmoPCoNdH zzssJCilyg2W$J8zfW0)2JXgGUU%VaEz?W40Y!DE&2%CV78)}{Y!CY{$KON3+g-A> zlC*RNG}2*7`4ukk)C&&mQhpe?O{ zMlE*OE4}BN|{Za?vZ{@t`2X$=Nw2CFS|)iJgNZCOQ>aXYKi+ztMVdR#DTLV0mW8F+_qYs-`{V zfYna-`U2%1%bMajv%B&P$-lvy`^*c1r)?Vtsr4GcveaJH-LYIGuJO1kPC=GxhwNl~ z{z_PDKNtCSa=)TIyP82vt9I&p5?eemh@S9z%_{o7W(ZpZUQ$M>aT)-L0G3d#!RZ978K4A*f5E9^{#XjA#JL;d~# zE-$TZY+M{15^OoYRL@E{fBRd$mss&Dfw-HL-9%?D;8A=BJmyNdtyFs9b_w)kS%vKY z*&ZjC_JlznMf&JUrrETP7J;8|CDZyu#DIsMjz7&+DIzR96#5%9A{9gS%IQJ=LvcA4 zP|TtOV#B?_=qIt!kJvwG1B(4*f1%VI|*a0NrL)waJM#a&K6W z0u=3rOd(4-07$HPUp$~=K9)WL#x@I!-%@!2nvGhL_#*@{ZGDSv_1%`HKhJid#o2g) z$y=--&p_@rl1J|+2ZbCtPf7RD%;0SCa1HIPkkt_tsP&CypCD9c_^iF8o>FHgv_DQ) zO3Cet>doopdGv>1s7iRTrvJLSNw5JO1fvO}hr^rOR_b0hT%^ZBPLK03kd%4a5*ZD) zkX?%F+7cI=1491({p)$T8wcJty6ktZ^<=TiYu(rqN42c5A53nLrD)gGSx)&W(PvxE zSUSNTQ&&?IE=X4kQCGE=cBT7A*}yCW@c_~Z)Zm{y3VV!NQxHf zVT~I7xs>DHdPFM}TdKKD4o~Y1ln{agd`?0I3pOk$qcH;@?KI2vEDwnBO{@^u7tc9- zCQVnL1I1~y3vl&vBoJ%A+oEwyUTxbUF2e+GM<3rTZ$e7T&5>bYzt4aNIqORQY*9~_ z#wg2vi!1=8)=`y}{uZjpozO`!!aFEi?vX-NN+_T~OgC+wxFA~k^<1@Cw4#A)DVwuB zrs($SU<$-~Py_#tjj>Tv8~)OJSu?xeX zaM6DPtGSrn-=8*L`t&MX6;(S2dZ)v`-m*3~+)RwcDyJ`3`K2po)C{JT+xGktn5FX! zg9{*z^gH1htZQ%4eR%4v8M0?iuYGtbA)|9EmyO%M$VlRUwMURsH57ii+iE^-I!du` z^W4u02A($V=f-T9>eg-qax-~VE^^NG)1Jq^i+jqg?8iEH__wICy>TLQ#7xB4WsOy+`&B-|vy>MHf(vDNt$WW+ zy}YJZlxP$H{SCqvqB0x~F=~+EpW=-zQ!ZG1C{~6Mlp6&2$v5`;x_guEVOIjlm9vXt z-vU>W!u+)v$RR+z-Un_2bm--4})V$xg*Om7IO+p5mgf4c?W_~%fHM;tp z?*Zn3_5Hm)3+g6-oh#ffcj0%FEO_&2H|_qva(p81hI0rbYW?-zn63HGF7y6kPOOkn#HNWemIf& zjJDaXQmwq>q4%nu*62m*P|3AyqztW zYqTul3^qQ!U-u^!CU0w#ll=$^t}Ece^ht7zaJLsI>O`M)!Hp}~+Q*m3gsuZ${SCfF zZ-+F#PsDt2_yF3Vd@eXR80+(n)jLIA}!gtK;2U-4Vd3MM~{ zM%y|%YBuY+Byd}b%q4Q_9uBhzFL}NcUUQhC`4+z#zNj>3ojfE!)`BSaZ_m>aNuovT zXLz`*yu7@W6xFv2&<();lAfjZRqC!%3&Ft6Br^EIDve>fyXGIVUHw{_P97ZgP8ULE zLl!(G$}Nn8I0Qum9isGznvYLhlZU^AGy8OCYkLvj)&oGPbCLbWi>?4YW z0b;~#ry^o(-gz`vK8I}2{V+R8YPLI^bZ~G`Sy>rj=T!lgzoXQ5_lGO-{!9Yub)!0- z-;PoR8mYZnUos$`e4{=es0}qd5jD6WbN`-5DEM58cwL_#NhY83l=W6?PtqxQ&W5_6 z;E4Fyzoj8pQ7>P5$?K})!4ns_D4#WHU$7&=9$s$P;u@HJoI9@7`!RFiLc2t<_S>GL zSAd=UqKybE^>s0hqZSDz%kld=;Y-icNcp+hrV`md1UYrXh|Z?wdr*kkQhquo?c6N3e8ygF}XXz1hz8U9wzTH^4OblwdtUWgpl_B0Pe!Bsp_Y0_$l&e_K{}4>n^_obnJ4I(e1Xeij5!LpZIGrGYy5i#aSb~X77zc0_ zZ*B+)b+Oec64{0Em#y=k+Z_cJfHb0kF8`8sq zW}{i1R*12tV2?e{coIejKpQGEC3OxRtp<`f%)w~}xM$S4;ZSutoSKou`nJgwUiXzc z-v{jB1$r$jVYGo!D=bEt)}&-@HMN^t;U|6pJ)w6-glc+gW7b;t$4je1nC(~&{`t(B zb@YzoNfDnKu)!!pK&5^%@4VjK$udN>M1hRo|DZ$a$~WG)1N&Gpwfez&wj?YJU0+{6PAV=X#rvrtu5H&ijuAll zUe^@8lQ;4u2<2>+%eA$rm6U#4$t+;O=0gl=G}AU`3i0rV@Xa3@y`W;19qdnhnf?bWEAc=< z0DiJ~lC0zU3$vp;{kmAoJQT4ASIMM4y>3dC1rY1eS(YNlM)HQC=XeYEbAwi+j8lY; zvgD^qb!Un4VbAPUaZ^@n%O1(D?KEL06vpmQCi^?do;6&=2!RO2!Kc3+O@STi9SGz3 z?P=7q4vj80q`kE^bn1K1$a3Zjg6S!N=?^gD8|Oelk+*5 zyuLht$@$37&reNF&9^W(kH(YrVa9jq!m#qird@DLro2Zt$Z6zKkN9uM@KxJfk*k~U z%UNB9kdH&J!PWd#n&95d7JE7oi1dSUbJSqPd7>ZdJ-1T5kxLA~e>-x2;x;RwZ; zo?3|@5@ndR>D4EJ)6PHlwFlr}9-ETkLhTNi>Lt@LMq_rkBL(a%)?nvx5KADyEVTj5 zkNbZxIwzlcpi;7?l2ZE9ISBE{$duXHUWV@o_x1v{odayw$+i(-OWYSQH{N0YayY-J zH14}OThmulGhDY&89Ji_qlT6w3iixK8g}<|`TO+;6r7 zG}lDNK}?s8FC*=DUB1C!e9nCeJ|Y8K#&U{xRmo+6s>*Km=k~>>gY<@m$GP%ki&x8h zIXSJj%})gsUYzk5mc6SuMHB@dyEAk{_WbU^B2Hj0<*p+s$}p^gd!^#s!WaQNEp$_n zTk4N~YLTChT<%UJ9_lUTepR^4`xG8~J#*3=m#_*;o+SXACqLn$Ph}t2 z7qHXj5nQVa<3x(%y4oT(tA{?p8;mO%>$+(-cpOa9Le^kSWAw_+3(WsFF@(dvN}*4+ zG`Na4DfXlE=V49Hpy5%CJ+yuH)yxBBz%QBPS17cTK6rVA&UMi)_AeCEy_cid5BDI< zMekK^G?X2$a(9nq)@nPxE__-mIFz$pxl;`>Sq)mrD3QOO!+Y|5$tIAeRLTZ-WxXJM z`GNJsbjAs#PE}jno>rj)HvAP3`M>_>tgmEaD4~!hittPN_CP= zI8w$os}xt=tz9d_}I)mWOqoPvHrLPFn;Q%p=ub4?Fe z3mZ%R`D{b0#dPLH4N#B=Y7@ayLEb?bw=fW8;N4Tf^0Fxjo;I^2)v|8Jx+EFtzh)H> z$}$25|G2@KN=QVa)WV_l&~2pOuxLEN(V%1jR!3qA{W(C5OS-tMT!!2S^jkXZ?_MfS zRfcn{LHQ_?jksTaC#uh6+s_i`ifIcCja!P&-6YJtsGJ$wS|y8RHF%t7cN%0`Y7tUO zOGy#aglmc}BhSVV+e<||J`6Ob)29wlBYgDP8|{-P7x3BX?`zlQE!or+a4KvFCvvvG z2y47yyZ)ebKCS;q)){*(z|(U!toNeg_8--R_J3598488d)w_bt8mu9!@|k$w+QRLm z&qpO5hG~?x4`F;8Xl%O+hZ5vXzuzV$r)gvg-rSx*oVm3?hG-8jGkvoOrUtCO?efLT z#zjQWoS$3U;%EA|AbAO7vvPd;v~0so0rn@t!tGn6V`^aq@j(YaYyjZ-)?+XUAMOT7c_LVWlc{r=U6(bxVDBBkqb+a+& zO8qv$_toW>Kdrd<#PTp<_&@wx6$nDdyC%5}syDcVp_}US{ArZRN(P*hfpWoLB5!YD z9r7kdJA|_&I!0ekE_elajzIDrr)+RwAV_Zm<1`OW^BrrJWfd5^m$%len{E!E7SEdI{$ zu##Jw{($7EM)Oh5)l&iY_7WeYy6aeAHy2^FJ#o#L?m~giZdSt)wGxaMtoqdyKkP(@ z-KY7+9X?O=@O2=zEjH|USWblzwnyYGe3uQb?YukRngWIL+1cS?VFdb)`lG1x^70m~ zTmuG3aTjY3E!k`5?j=590=m_h@bf0KUd~(z>)y_b&xq!noxn(Y9q$F(92IMxg))V0S zV^hGusPL`Z;@zWlX6EJNiC9`5fTZR5Momx|kcr9qbh$Brqc={rE;@ygxe^En{qyIK z@at)%h3=|WumG{kiX=ziVC|qc5A&Q>jEWU(#X80LO<- z&yi;L^cFnSW;@sEveLDyB6u`P-`*#agVfEgE{7VJp+e;L5?4zK3cp(j-&%v4sd!3d zTeWis?wyr*w4Y=C;=(-4O|tJC@k7OeP*i+;d{op&zb6j>G;*}!bxlduBleHfBUu3c zEsV&TnTZ9m&pp6tRvR^eq+l4&WF5`}^W(gvW*zL|eeBa!FRi<{5XN89O}G<5mAM?^ zZhOUCfv^6qgq<^6;7*4Id;Ua2-g!2LTM|GD2DG)CHKCLUlpI^y zH4IBke1;J4#R#5^GI=%)kw5$tCJhpR4S@$(PjzlPg2?RG2rKxd@ZvnR8CR@>%H|6AJ}GB;{jtSzqEI?qA6RR5hpgBAYvL{92QF2BjS;P zSa))!j*JXUk+se@lWD79XN}GB2Bu+lIw!Zy=l%lJIm680ExE8Vf|rqyfY){a&)2%J zrI)>ept*@+P_o*!Idy`q3;)Uu3#2zro;>Y{#bIf>9)|9f4uR`tl@INd_`mEz>~VD@ z(uIQz-`R-^U@uqNom@SYp5X(4OXtU-1oJPA+u!gD*h2Q?n|*wErRUGxC6LB$Jx|Mv z+1|cR-_E=>{Zkhtm)rqKRiVe5A01Y*41d#1*1QySaur>SffLUyf>T_6BUJn zg9EeP8%_eYY9JZ%W|9;5ca00HFlPze!H2-85KEz8XSG<|+!&o`0vpSfE9zz=S(ADOT}FCXDgjHA3kAWVK%n%sw!L&4-b#sv?S-rJ#@JYsIAc*iqT}f z#;tLCI7dZiPj+^_zOR+2!@x31SKToxWqU;w$II#hT0G{}mrv+Kh((n)@HovjGgtT8 z!i?HiCU3E8d@L86Zg1mTxM?v(f2}Ugrp!K&-+A^bP5E8cDiidsZV=0ULXJX^#{VR6 zd1)`i*p}|I79H2B*Jtx#P7BSaR#*Ocsm+>g*;BiQPs8UL&q+FEk@Sr2NFIDW&2z`+ zhilLU&gu})>K?j+rSou!WOQbchCj%ltuViPW;R4nzd``=QTAN*f0zEzlJ!IA7)J-% z=}`dNYD{Q)K3yOB3(9XhsqrQ}7^WLoC_dLy$!#SLw0Ha<6Z$jUlpgaoltr00E*cgp z|&+<_M3+zLl2AbFu1I5Wn~rih5B1GKm{V0MkPO9F!?}A!0KGnW!Ub2TQD%o zy{~S*hRlx}dH;{5YYyx4ecPY3TFZ9Jwr$(ivRig7E^AqX6*|wMM`t&~gzQ^zW zucM=<`?;R`@_C(iXrBw`w@|3inD*x6y4n=Pe*&Z6e|GDR(7l@&d<~7N)WrIP=t(_rQ*R0xpxunj7{b{H6V_BNbc%)(QD9gl0*9IHtH8w_XsXmk# zwWu$`K?ad4n3%Nxmc@@s+8yd!T=adeuY1M}6e6~f(AfA!SHCQtNG_o=Jw4qg)~E}& zBMAV)o_XZT$lToA-k-KEZu<5kX2V-N$LZ{LhTfbtQ-(OVdUya)prEuk4kDt?KD#1dJZZ^*+i(npRYF{Z#-!`e~GMX@;IWi zgfcp_u;{3BPTY?}!ZL!u;3|P#dphQ3VPPqkrvZ+4Nr`gVe4*6bH+50;TP@M5XksBl zdrg*~=IZhDtMdX>UB8#geb7KSVGvNv$_O((dT-FEcq8gseNqUw+`XVcuH4yQEO-hQ z4zLxDifR2FI+bni2F#5^BAP%9rpBNzAt5n7KJML-Q)CS>uQzDYK%* zohprs>}i7L+2V(Ao{rtengWS%cR|7NzYKWyI~pWum)&F0pPEf^|Az&j_?KXaA; z5{NUd{;0DvEkHwyXqd3ma(+m}Gy*?FMR|pyvxS|(B7=y9z8O%+B!-b)5q!+|!%KL3aZ&pvMh<5Ks{UL5oyx>j&d`(Au$* z_q!e-NTZSF#b8x_W~q`fZJ#Mg$8lXH9!}>%-t=4b-uZ#}CR_9iXA|&CL^igzRYqMC zHkv`7xd~$BDNSKb5PbT7I3h6R%_*y!G~@N06nn_kEx+a>Zz6JFg1xakmI8zi!N1Tb z__@jaJ`>^*g)#QM<_=AXZfz=Qc42y~`&`>C4JSQKmzvyH5si>Dq^tYa>>LS!pG#kI zBJhbX9%FVu)6FmmF17=xxI0 zc|#I^TbGwH4DUK|Z)|L&21AYtXWieLUb zl@8Et_u$@~6Z~^gzX2BoN5Nq&IqN?#5G*t}f!}zhPoIF^*Ea|g@O%b~&ZszU2&Nly z{N;(ENAF6@_9+(Ahz=v;GqH%Z#Emk2=e@X-Q?N&U%7j07Yndwd+BvDli=K z|D&MIofQKO;^tSpUQcqsTGxLWvLrUR64%$yQfmTiAtpRx;CHYx5B~=fxz}g#l ziB<4>a4;DIqNC*m!#rt|TG2c-rmd11V{RRwDEN)R!$U4J!#=+6T&QZTs;aulwTZ0E zFN?Kb_FHo_e~mkuR)xDx-AKLsg(WAqpKSe$RcU$2pQr2GBwsr0LPT&qB6jtA&;r%f z_MFZQtT!1^7$?yiZ+rA=rSH!`Za_$5YHM*Wru{ zV#bTK^nFio_mo@beNe3X@XXB2@v%+8v^FqRq@y#u@D##Nf^A4}y|9W3#cbtjWHRf9 z67sTB#~ZtqxO~|Kx#c1qQ_gB%Ywq16une!3;U$HV&I4y~o?`2q)3d8d`C{%0QN?#{+9uvyGb$2k%#JDkkaWrK)g&YBJvWE=wl zE%NyE6hkDSONoD5M{?S8vl9s=9?6=lM`4E`l&5aAcTHabu;%*STr?d>m0}elKXt*u zKJBQVqns#wQh$Y6}0hrc z>huP0sA}mi>x?36$qFoWE&Sfz&saB}`~c@~9yk0b$p|$*|^#vx{_Ofm;+26rztOd5ZwTAlw}< z7P<+bLoVilToHVD84-q0e-7!rxUlKnAzE^L)%>QEM~}U zHu%A|_%-&h=U`mP&DfTbihs-A-oDU!#fqI3B$Eg&41hRC@2;+Jvm!TDT)pASqr0m| z?p`CiBftU@pV}f#k1ym9C60E?{l-YCsi_~qQ4cAKQwra4qSYSO`t>%sHePOvrY=`2 zDrF0=E8EVW0TyKj8DC(a9~jZ_ZjR9`Gk7_etqTxP_)K)$l37`>)g~w6x>xWZ*mJh+ zv=Dmha-~thl}yVnrrzZ)#hALdumH^5j#_hr-0f&UL~%pgPQJdr{a?Oz`H{Bjbsb|d zsy{u>b>6DpUfpn!1s#j~g31vC{Z1?p`+>BVnc1oT7^I(WB&T;wwgnzxu={Qc1X z>ta2T%BM+GPHvRT$d`0J>)mTd`D(B^P&4MLqGNp0{`Jq02RUyMe=`sz+&N`x8Ts8U zTju)R7*!2y3aog{F{28^Dyz|UH6K1h3F)~F)z2BOoj=wyfQB46A1tppBq@(`5Ajgy zb?x2U8btG^PVOw~(u=I?md8@8al=St5|cfkMVwmn8(R#?(ORl)e7-JXuB>Uj>FVi~ zOdOmq}JrPsn_xu|Id?u?y;AI6|0Z5ZrI62zzU_d9YO{|vj-XCvl zp00;{b?nFfNDk73wu!qrZ?ynkqqucDq8i3kz)AwPzd_fYHGRq5C#uq1NOrkNFp+#2 zp0SUa04aQEcba|t@Md|^Hq)-qxSl0r}7Jw80_RF8C>d^L8_`P7;&fF=SpD-ygm5Zl}83(8X-V}0AitO(?1il>XhvL(TR-#!C6d1o6B0uUGebiJQCew6xMLKZCez!oq$U3$m$`oOO_1(Cyy@%h4fDcnU<>0k zbxD_1sf^4*wF%&^zM)w9`iXR%YxJkbp6|QDa$H*~Wg^53>Mb_n)(~Cf$=>Y?kzdb7 z=yi5nd8MEKknVejtzo6X%OZP=v+OY(c;TSuYuH&&K5Q{HJ^d-QA;jxJLIbgXXN9~T zE(eD%h-+aIS^@@I0M7~hw7RRwwtd$ zF1l7X=r@vUxYGV61)QGSesr44U32Q1(YG4tFjEpTdsHLjWda8f$VfY-U9swOvf09< z)l`L@Yd22{io;8|WR*OMQ-m2x{i2*gF47>(fRTkZbb{%Qjv0s+6Ox|0T#h6du=D^1|4=xQ&#Lxn*r1M z*KadsMpu7coFBVp?`Ha8EiBjfx9-e|E0!+{gtavSUz+UO0@5bg9=1e*l!{#S{wTxE z$0j*uW7=AyvLYg-?CuQ< zMp?fq_7Zam^QUP*>dW&?^Gjk|CmaS|Uk)82D~X45yhn(cS+(+t-luOO?p zWQk*%fKW*iR?x_7gCPW|N8E1hcu%{Z(7~&Z2|+fBz|Ke|2<%egztd}po@B}AmRhM& zxd#ms^BuyBNdE)R6#nJZMTv)_U`FHHsKKTX!|-NO*TWBe%bRPy*^4Z~EREZBj!Z2? zB}lS2H7x~NOpHpOyMHqVcix0XBwCdVLvd(rPL7QUWq0laCjc%Qghi>HPNn{P3Z!fm zb4pxws5OT%hr1G8xlt6J069?LE6Uda*86R*&~G2!fWj@mCH~$T6*F-@u7QDt1@?MV z+e?l!(m&;69XM%wu~ED5S=YIO7v8!+ts=?->b6ou1QGp4kbgWbXwZcXuO03)s(v&A zQ5o;cIZYSujY!R~)p@P}5^a7_=(s22b{oD?`_-h-M!Q#?M-=&omrL%q+ew9u-*J}> zxmzz{D(k%=!es}G@X1J^R8mrMQTw{e3XxgQhGjde_tjK)USGWo_1!uKuk`dqy}X{@JMM-uy#l-(D!)$jCs6lCQywtAL_hF% z*^fPbgzCUXCWDFVvfm?--h8A2Y2Tm6CPPA?O<3lZ!<@Ds4h{@de0p8a)H96JLnZly z`_*v@T14IurMTSD%j4qUBUtVHY1uEh#lBs%PywOVR9)FR<|XnNY+?_t5H+=8OM?)9 zgomiM38dSpMcjo~%RccqHTh14?o9VXcU2R8Q~9gLp_KZ(&5PxmqAuJLTKUrWt{Fp# z`ftDY7g4>hdzBx};_X5XZn#Pj-gy~(!N~6@aFSD7_{dPP#bDkbnzfF*4z7iECha?? zEV9&5v)ZnXYma%8oAF*74@Y|^(vO!i<2f?~ns=+?lZS*Ogn!Sphm7+9{sxDNhwyyf z!6GjZNUz_XQ48V{(N^eHBkiPZuSpB1^4@QiD2$yIRmr|8&1PJ5$|k^?iUE2DlmKLB z_Kjze&WJod?+@EX3-Y}^;T93WlG>2jq1U|Y6N&Mun@h*QnRv$im!-gw?&kN-EOxd{ zm$oM!=4fNj@gJyeNZ0q(M(3cUfaR~#7lN7I?*?`fcfM^XYRO_|JgT^}8hst*H@=f9 z_W}vWr#V`&)uu}s7OV*6Aj)f*8yjcEV-tnZePFYH$Y8_@O0j7W!-AyxnDuuPI34?= z?t5dUNmW%o%K9}oEii^(3#6=;F}tru?TZ_RmEPTV|MeN9`+@VyETV?RAQR))I=Hs#o-=y8@{c;yjbU)pkGWs*`o&IOS)h&6UxvB)bu{U)t zRGS9d>j%S+G@Jn|%{bf`iEl+1_gCFqCGFTuT{uojeP8(7cwe<2OlQ#n!1&XMmO<55wYKdB+ePqGF*cqO*!1m-i0+!S-AwJ}9ZezUm*oy*L5_a_ z0#RTd3Aw|>{Wwb_-PU=7r_%l`&ZV^{VoEQ*p8Z?SR4wpzF9MzeoLhVWM)eS0;M>~OIV@IjNrsgAC%JWjog<57cq6ca};ro1-X#@ zh1ilF8f2!@IUY-GYH4L>_d3}KkXt;Bj6@(t70F5`I-Na>!FBY!PWr{vcz`)gw`aa> zM1?0r0TIYw3e$oi@L5Y!!0T;dd%6G52iACK@#o@K=R|AKo6WB08>w7JfPDg|d;AA2 zyWMQE{f3afzh%%}zBTMk*_0h~9f?$msS!s7np(D^oP8#&bY+DHjzs$J0N+TW=Ws)9 zI9J&YKKMfL?ypGJp=(5ff~~o{$xZM$VLsb3o8KG3VC_y^B&Yhjq&5 ziaGy3(G88ty)MY<%^jxG6;~nO8h%KNPy0CsOI22|AMiGL^8WOkbYStYa#8+;c^Y); z?w~=E)X`z>{$;Xr zd3j}}>Ug zvZnH0O+$tWXdtlG>p1x07PbE7^B2a|%S(t~E~M(GXkmk&g2yM3U5+N-mwf7g)(pLPK435Erxf(4pG+OR9N+0V~SbF&El#vs5;D#2ym z_1EjZ+g9269i0dmSvR-~P8&!7;~{(YU9mpc#nwBG3cFGV>5iWg`p|+Q8^;wKrH-pV|9qNB5jf-?F^ax;tL5g zFOJ8)8Fs2|Iy+BIEP>kQn$mj;EWRXq2Zs?Cr>()lm$>cuKI5K$`wZhNDgs*^$-QtA zYjDNg(!$8y?tSM`qDb~J@;$0Je1GWU`VgGGkRq5rg%i|&FSMm|)4l6L+V);j;3YhE z2=uJ#6C}gYN^PwHcxp96Q;a=9O}Bd!3irxDA>JSEsHZMZ z>MBq2dos+=>%)=4N20#6@ScBhx)bhp-nO3qJ9vJbV_wS!)|)9fG_5q@CP%Te zm#^!7ytr%fEw<<^p!FekCyY~S3<{`h&v$)|@ zi{NxywK$t(-b6WF`1&x;0vmBfDtDA2M9>$aA&1!Hm+zODfAr42w*&gE(Xf&?@7Hl= zw95&!SBf9f)m09cG{Zj?%Qe8_QFXo+KfJzW4}W~v>UjflTv)B%Z6`yYbES6MT3f1@ zK1VKf94-NGu!{%AG*zzu-6GG^i+*QkaJC-k9&=vrY)usQ22>WTp<&~S)23n4zA$i1 z%cbFp+dq#AxMKHh&EmOF6e&Ap6Yj;Su&mdb!)u24YVll~=hXE0uK@so9JWTfAm}yQ zq>@<+$2jZ+;h{`lTy0K#hP9P`M>F%4Hfd$O-%X)(JyDmgY+ZBIzG1zBVqJDrwvfKI zz4%)sB;<&OMIc0&Ng5B^7_;Shmyj~6c-C|a^P{iO%hM^d%Z7`gbQnPL)jsJGMFS1) z#7Ms%jQUX^LqjIdJNwt72j8hWegTo^HsQJw_WfdNVAU$h#4APwGwXeijUp!p4zwHi zh{?S%fY|rG%4_3QC>^X~p5~5K3x`)88|dg zO`cS_|N0gifWFz;eY>CrciMww8e3X%aO+&b^-Hsij<)l4_ETI#bjbnP}IPE)vo4r(0tTIc!(CWjL0jz{!UJokJer#fBn&qcD3!J7J0@6h+JGY3+{(3 z76^aTEc{fzx6|m`=V7Q+uA=Dv9@7;Ep7lTe*|}VfNAkL8U#4X$fo`Jl`!k)W)tZ93 zAP-LpugC3}sj_eVhZ{s>)3`GVTO)@uHutXpPI}V){blo_isB{bv2SHh;00{@zSMRe zu%|qVaiRa2kiFe2zW(+B{{fiVFdaftQi2V<`nN|4O5TIqs@GLz1&8OF^;ws6dR`m8 z!@|AC=TQaQppEk7C@8^__i#%l;`@)GpV+&Hz}He zYmPOs_}am!NEKbI)PhaU6?*a{-;HOb-gy*&+pEh5%-qD9wxh6_+TVeZ_s$IzRKKI6 zWSLn@ab}!3>4dAb78|}v6buY4a_-WeNH@&#qDwPk>Dq_}ecd`a{IQf92{9Lx=>xp>M^lbdE=P3#DFF zKid~ryW6^~_FEH}0Ek1A-Ev}XZd^;@I}8XZJ)we z0kxc8BD`djnFH7IpK>qop0SHR#AKR!Yg~f}4P=OfcjtNVBuM1z;jQM<<4 zqb4gDh~n}VPXK<(%ZQ|x#3B`VBBXsMm|gi`F=VXUg~i-lPKNOums;)e{!jNCVZ7&06Xr8 zub|zwvm>g?yTh>9#e!m83h2P=-DAFydIg46nvupfuH!W+rc85A({4#`FP-2X={vby zLGY%+XPZ(TOg)!b$^qAn)9SjblQi>&2GW^HO?-6wa!H#y`f&cTS=6MplX4N2tDx2bNE5hyGx<)R>82N!J{`95vq2fXb9 z#jLrF^Q_Zt9u|mQ_a;0AB4IcQr@vSQ=D+Mu=k1#Y$-746O>@8gkv@d%0&chDwy1te zY_E9?%rrovJ6r8$cX*XWfj^5-aO{AF2$oe{x%w7DIA|8i+G_!ynA#tCEYqL%N#dkT#bp%w4(PtP&99>^RR{(zun)3)}j6f;bMLW zRgP{)j$+ppk#heZ6b}0}PmGz5frtMz`%_;vRj#jdUl<~QB!|m;ayh8-dmL~fZgl0k z^Y*rJnD_8@ntt^;TG&CON}KK66Cit`X&z>Lx~(>bdKxO z!vA6gdD4(vSFg#@ci5W!ss7re3!kEkG~};VB(l|hpTP$g*%Hec+V+|81z`&KQ1^S0 z<~s^)zK@4tPf<$~y6yr2;5DJ9WFkRu(+`A!>*B#b&h4NHWU8!rWX+N{a8R1F9Wwq%dp6S8^|7v#+l8XIP?E@~aj2GsEG*YLqtf z1zNa&I`^jI2TIsjcGp#0T#u_wKc?)sWaBBF|AstKqKeB6K7m|cU$>kj6!1BB(hb|p zZ~yu8XGkXZN26}i1ijVORnsqDP6?c~{HOEk^e!fDM+Vi6vS%|MTLS$3LOYi)P+w6EBzy3C-9^2qz2kAoq22Xc1m8px@lkl#;k4`aHpy4H0sg_9b+I;ov=18WD z5}l^tWm-1uiEHb9>`2?SKa#4B-OAcip37mu!oer0fO3ZSNER~N?Py%K)7DK7G7K~p z%5EmgZpS@2V)%qpIU@Tu3O2Wx(j@cx9dyTyjI;qO7Q{?RbYj48ActB_c351ptvU6f zxUZpA!;$Qz+(X0V!69{2D(%iZYE&)emht%AuRV}o3tzJ@v3@z<==irAHzFLa`$$^f#w+je1zfkMlMT%_5XNpKTZ&&TKj?Jx7 zH6evjocAh!eNkh5NLAD4=hmu?jcWOKoz_t zBRG|Jf6)WrJli_ZWeBtJJDXBBW;@c=XXqQOv9Jw6;{k#_r0ebgIavz^NWl3l~%4`Ocl3H z_7;EVoM}H@|H)UMGa+#Ch-1+tT>2J>GhC2~YA=1h_ww&x-%w-c+k}x~7WcQ^i8XY7 zZR^9Y0{m_Vuj)gq^lDSz6}4*Y!L*+@u-=;vowSoOHbo&?!{) zy4+fH1l!L?j3}slT_3Pjb#^v|^z>J3?;l$hqA-;I9~NNEbZGQUNRZ7|vY5qrD%Ky7 z$dXmhBdZ@#Wz@f^XfAIHlOzNOr9DUncERYI+Wc9m4E;(SIh0fb#k|!rlslrgtBlF` zQ-55eA9Ka$2_xphb48k8vNyqQ<_Ez3RaCyH;?#h>aSb z$PgTD8Le4tZA@912kcJ3G$N9)mi@+z>0`VQ2gMiJHz|*VTsf=dq<2|T+PflKGU?n~ z*U=hNAY@X^&5@g*pU)C_=s>fTQ@mr)C+c-t9;u|J-6}>`5D*Z^%ey~+(`_~z*uF+Y zo=l&+GDvdubS!Y(zTkul-Nl}U>OK*Eh0mg;;A;A~4L1$RQ-Ubg{CIar_i2NnbNj4g ztbS~%qzQaCywDlnxCev2o^#KbsOA@U___ezr7NSwI^fa7$nGoLYzg!~gq&M*1&eEp z7w75#1CvTJGA`4^w1QswBRZN%ZaW=&-U!5XUbf$*LU(lTA6r7d5k6H}1u^KK%YN%{ z1NM3dv=(v&a8iXQG6-={(@(>qHdvzkP9M2KNBu1iuOeiIsk)SoasR?0x*o_@qx-3a zpFp1LzaOami=ro>0k=mh>2Q?d{@%K@oA6kgIs%ucE?@ zbYOm(h{)fC%9XcZ!i+cNpH`H!Bq-e~~**Xhbv?nGv7Dw#i~ z!P_7)4!G5Z-;@rsoHDE09iDOVitxUkzeZ=oaS5HZd{)Ec-?l~0WKGmMy3)~UH zAWx3(fc1xC1pKtm4Ir@L#R zj}^XY6NUG}R}gJH_0VN=nWWqs>dOUPUGKfX{25~wbD9~;)epW4czAf(>p$}6e=LZE z!0Tej0w#x70HvVW<(QlR$8=I@^i{fCSe^D<(uro>GWwe)&t^E*av^NZnLdlMPo7w*;oVwr{!hQELR5%1Z+RcI315P9x!C+2m4}!_wkkKE-H*@CI-F`6uX;a<<3z_6toa2f8*hzcIJxEbll$+-Y0%CG>oYD+ zkbEMhUwf~rn?_=ncOq$#?YiJ6ahNEe(^^_(g8@~ERWG+U`@yBH)a#yww`~qBU0Zwj z7-a^xI%Zy@r^dJv)(w4w+C-raw_Mxq<^7T-yXmX4ykJAJ1gWNW@T;ik+SB39?k7f> z#+L@C^L@^T_2QRkJ64`QT)hGL{su|uKw9y&-gbq|A+m`;H((xbOt)Zvg+ZSaq0R(n zdiKThm#Vet?($$16^*)^D?NuG$&!#U+8bMm&}P)I<=)}@Aeh9+_cfP%G{G#PgQO~o zz+tNXZvi}!o_RnY2B;mizsk6_j90DUWozi;gVeReeNlneTD9(GyWX?SF#bKV*AY|K zyQvI9f@ih>mm){W6bF~d83PtA4><=19|;KwGxHSUBB29k?i-_wJ~c@;Om z4A&lRkNSYv;PuM7y1JSx`Q3rsSDe-~Ze3qdW}jM0o>xoTli$giY4SzcLuKl}?+- z%dz^K$Jt^fkNb0d&j*F`wN`8ACuO-LN#9{RPS%|ri~d3K{{H^>VP(W_Lx)(SfO8sS zqmM!NBI{O`9Fxa?|5~*x&wJ)2o;ZGwxQSANvygxG^Wm`cxy<8v*zB4Ele|2fBH+^J z5?yG2L@j=NUW*@Lav3gAs?$!QhQ$UgetX39jA1*R@V!2}?}sIYnXZ)GbcOG$uCeer z*)&|Tdyi*$_k03Vm?3Wn&6ixoBAKTy(WBz`^`Y&4VFPG7pn-AFgIxxGtS)aTz!4p( z%DoiY=mcakiD9D;#VWyFyO~Sr6t6xjj^0pQ%vjx9SfAWI2Y}57ZXR0PKHiHSPIZ1z z-EaiQ^9YP)FT!-!0h+bZZ^iDg`L=0D{B`gxXF1I-Zm^Hx(xH?&``)Y_4z9 z*7mTfR(qQq#rc%GOnD!#uD+e7zMZPPeDqsDuOnTO@7w&_t@m4@TmE|YwUo%dMGXBdoX!=0ghSNfI=&bXx*@CO9l8Wb+aMhj}-AcA58@tt@li_&Xf(} z4j`uf85+(H*ZDhN*i21L`+D`8`^HYXpHIHar7{{ETRC*OYL=cNL|sOpu!`pg%49Ab z#|PNi__y3{3JSV6^ozkQ+chpOF#7Op?#orr+lz(sYQrd%N5nmJo>hR>c!3RR)oRnP zdZfDP=&=#IO34wu81Qf8j2ou8976KNX;EXmzw9w737)MKRW(&MNim$`949U@W706X zd)vw9OOpq+CMNm5r^wyi-y62hZTOcSs7i@>lJk%z63|>9-W2Oz?<-O9;?BVWtQuzT z@#sTH=@ajKTaKY|jF7N2*C@3hc=m;BN36nx2BTW}gfNi8}0Uo`2{jjiT=(U-r z;s`z(ZulfK_tA%DGiw*y?T{luF6E7ppC7<+?-L+dj;1gucEN*^i2JL$PyBQ{Z}dGh zc6v(!m65d!?ZBmeyl&w9wYD?(HF%COF1bxU1@07VmpP*4k)P4^G&}&|ctj;bkLByg(YL9W7?e+xvU} z+V=q71>@s`0VSdAQ!T%oy6$!JI{hAtx;yE4ftft8pq^1x zgyeo`IF*E?I3P$dLN}%_4Z2m(<=Lv%b(&O%pZo zsXr@)OLo+m%tzw(*@e0If7zTr@%cUs6DPQT@gC(p%;$dkI3xsC(bGHmQ3l$Q02EXW zs1*Xms`rD5+?T6GVt9+Ep~-7uUh9*iShG>W2Zqi~FiF7X>tT2*OL{p?a|5y3k&kzE zr(sn2;%~fq2}y94g>bP_sJ(z%gg)a1klh{~ou_a<+__!C%zcJPV7f$wThgzxk2%nn zLXr^;CdwAzTLqIK-W{%Xu4*%%XeQB3cp$vZ;m0>PEsyb8#P|ps7!a0s1+Ah0?toUi z&H^#a1lYDPoZn3!xX%rC2P?F#MgDZ!qwKxaq3*3mM@?<^$YqsCpVaxNoD!;Td4+7i zyReTH*F^fvls!Hui1e{1zq`8|2xhvwg{dd@EohT}S5+y|Cc8h>OSi2q5nzyCemp>j zCK)Sjf*7T7<=v$sMryx2Y$C+FyJ!NplQ%Lgy;BNRyWQC$vp+#oFzCK^S8aPh2eJUt zGpwqtWTc{!B29=s?;BvYdjK1tso9S7Y752kVa2c5lBrhYv5MVRLNh<0kDU=;5IFqE|iA@XkyVuKXa>++=%@imB$d#3qiBta?r<^{yYO%f| zs5@^4Hq)!b_qw(iIK!8!{Fw{o9kD`uV!042Yus#E`J78$>z`ug^ffDwM{=^6GB2Ko^- z0$OQu?!{{EF*Vm(ZlUvNs)SIFixJK)c8{+*`)bNdql4D-swyD$hn?kD;qv?4T6lR1 z2icWd!*7q{i6h~SSVP?G3ZQo6e@4Irhf@Tmzkn+CT%eZE+oXhfUIQkl|IUB}swR$J z$KpNS??rI;gO-xqr?1mL+Os8NkP)ns;di%wnk$=Vnp&_9r;a1-IR`J78zWH#4t%Lu zw&Tq7^TFa}PL~(^Z|PRJ8yg!7PxCQPaWGGbJv2B&`8I>08B>|jezT?})hMK@2*^>Kh)LO7U(`pr}CIbU>-7NU&h~ai1%9@h)3NoBA4?yKCWL7}>_q_d1#7C5Q?*6X5%Y z`LZ0hr{9xoguENXQbhY1#C8?@|ZV5f{!Qd!j-#^oOh_z=F<`J0-lcGBwIkeVdkkhp@ zht7F>uxZ!-e81F!b`%=xBhrRaifkd@LqN!jDNWRlue74v<4NmM-x0je>vqlZCvc8i!n@z3#3kl)5d^Jml9X_F)^ zUuM$PX_NoK&FTUA`}nW6HQLdOCNDaMZ|_1GWGl^?)56(55OColSOoW&b&r1t zUN-)m87*G$&59XCUNQ)x2^ZmyadrAQCti$X@pQ?*cfGl}0i**53?Pwy6DCLd{#{u7 zyD<493h;A+{AUytQGh4PY2Z()MIA1em4f7&RWIU)HLLblq2Oubx(pf&V%AV;67*pV z(sX%pH8>2`1bGql4CG{+D|79)*Y60F$vr=3j?9$aU%R=@SjTIKOXzaFrt?(xbCV-n zVQ0P!I_&W}DNg_XWbk^)_Vuc1AqXdRKIaVG%>0tX6Q&9A5e2y&Ng-ZW{od7me>Bv? zPrv#qM)VDK^-`#OvW|(#Sn?nmH=XUC`0;p-iVAX8r}xLDUb?JOCOzlp<-9H6mUR;P z8MvM@eC1Mdo1YzyUp33djhXSC*c_(toW|@Lbt^c{+Fl_7_7cvn-$_Ckg{pO#0_^Kz z_(Mwsp&19l2xGz^f$XZKIO}1X226NW&DK@xcUjGrZbs!z7ET|JL?^NTJ86^c)c$~ zkXj^Er=16j?Yqs`OlM79hGecuY21BXKYl#~?8F)Ib?(DEr^h!%l-|x3I!F+InN(yp zZ;#h=sT)!Z@8!IM!v(en`IT@4J&sMU68 z7(jr~zujqVja%jGAseEK`U<|Mzw0$T_Xy$I(j>Rpd}#gP$Zhu1hdB-BSo!kz?9mFN zhUg`HU=w;Iq-!f>srvC$37iT6bQOsEQ-2jmAE;GydOy|CVOObX>HHR~B0SYlaB>== zIr6&+*q?e*%I4)^fNHddV8%2Xzvct)LMTl_2CiZQfBG7vOil0gtfaL6YO+;wew*5m zrtfmbLW?`ddAYMgU@NSw(;#G9ROTHB0a~NsWOOpV^bH8;DyD+$wg(zlpg~l8^p`_R zLvQ+*hjrK=mLrqMG!0r^-le}^da@wH6}8pW(9sY?d!TS)rrY65{{= zypoQF2T2;qa8*}OkkvbXaiAVB=0 z3&jbpC1YWNNyFllVqHd{HTY{-kW+VR?pXx9`%g!5QRxaz51Glq!Bss?ED-Z>Lj#g; z<4tdk*ut1~S$;v0(8HQbP7W%liSVxxD6oSZO~%{1Rh)F&iGZ5dXY1t+`g$AJBc#pY z3kdX3QjxHrZW^>z-{NvDH6mn+Lx}-@a(qni`vW4VSptYOjH~uXQ$L0FBI0v$vmY0B zz23)Bd=)3{k*I?NHRHu*mQA`YXxg%|o#*gTO>S(#?J}T?x#!JrAH7>_(A{P z*cc}zC&y4r>u_r4y5tS`8Wi~ zi4Jf?-Jy-`dfowo^FrN=v*-{YZb?!iehPm{+v9DVoi$SOa%27_B~}UF z54N0u38m?w3mT2_;n|X-bYEIbK}JYsFP(};wqkM)%Z973E(haYfs==Po{;U<0XoZ_ zWMA~-A6|>{U8OdeK_DccvmSV2z0&^0a!{{uS$lutq3O(KQvV(Nte?|osY06!u-5Ua zz4@8_VBmRB6I(0YLNO&dtHA%|uokKsZPs7`h{U6uCHXBvIzC$DBEP z`+OYP{;+7-O{EFa{{S5P%0Ay;W)f;wQUhc@RhM;D*#19iZr0l~4b=g@PkuE&@lXyb zrGj6UVan8kikY;ats?fh2g8y@97G6@v3AG%axX3)y!J0{CTEe^CsGUg<2&|oj*72V zwv2#QHY2=xLpTxsTHBFm%kh4^+tFIYB%iXPsgtn4jh#{$s-pRC0YM`0LeIvl5BWGh zG6vz}ws>78Kp?)``x5+#Q6}~++#{X`2168pq|)}V?<@JA?|CF4)vX4Zh73szPmV0F zZZO@+#&4K`5ymk-O&tcBr9Y>w*47T2uq=5PiYxN+w&m|k%kDi6AcfxU4Sf#F-GgGN z`M4J%t|(2tI-3M(JfmXzoN@p@pd^gIN#yWj84fR+w{dZH<`-ZB1(pF7_dsl5=mrs3 zF+wKCv1y*FqNJ%z#$Mj4AkQ>sr{=>w1K)p`jrs z=QF5VI>sqL~Jf&>3>DgkV*t!R zfi^s^goJ>=&dHhO$gTL9`pb??gv>Vr#&tC|=qe~LTt_RLk=MOn2t;un zeJW@X(0$dwM!3d+$NB&FI7&m+#9_0Tn7cc~p<#75d43)0FR-v;HV~JZ>juC7?Mf3W zoIzHhg^hf^xPjmjt>ui`8t&UJ_YQF(&6h+a6CkMM(0TCIWk3u#=dw$)TGzscUe(`{$Qe13o zfoiEDcbn!~NCa9RiYVN6Etw-mr418rtu5~6$KnqldH8>ayk*$t!Ji6iO^7v^M;+Eo46yg#RDy4G( z_#iW2pwsA|@^XFww68y5 zGa4WFR89;sTGKI2NukKXeKZdVbJn(#W@}!z4oC3oIPMhe&<`{7qvXtFik6Rsivz9{ z!b_UT_+MqgSxEsC#60lNhIn*SD16DFp6>8b2J|k4$p~=eT-W9R9iWGYhvi~u<+(*2 z40^~ToG5jkNmjga$*`LqGakdg|6y36Z;^DD9wDyjsjaVVWoPwo{e>=sYP4Hc)zWGL zP*ffhKok=S7&=gM<;Py67)i2ZS-!TFwpP5hLi-?;$j?7;(0buNnzG?cP=AA_gw@F{ zs?wTesv9xajLAU3!onxQBF4fZ!o#x(u>AH_j~EKntq=@&04D?Yje7uZuUcB)*49>6 zW+?a>cZL?yQxJk*6ck5<^Jfc&_2)|}whB$SkI(!YYhC-~!lES{>i6D0wBBA)ATNM| zf^vMW#|dlUcn3sL`2Sl3z6K$mJ9n$Se(~(^zH^KI#wOEws>l6ko3C_OAc#1C=o|Lm z(OnkLZwT-MLlQ0@?t#oNIGA^TtJ(&|gf>XldfEmxX5{0iC`4rRSTh(DxN2);5c3fr zXpmD2kV*Y};^rb#>g|Kv9+WEWJV7_v2WT`XPycq|4{<}E6Tau<9AFgB9~^C=29H&~>Jq=9 z)n_K);ZEf0`_Ahd9ty1<^COY{T1{BRVsG%E?(u&Tzm$tyiF6m)p!ax))S^uWWW$(B zlPrKksZ|Qgo*_a^%$6i^Yxdemw#gohp&?lJb+^L-(d6yFg^q>>96$gen)|j} z2bZ_KZ32wHX_m1dsFl6=wCyRR5vbA4*%T57cbfqu6!=LJ7QjxivImM-(&lJ1-;Bvc z3GrC18a`xCaF$zi4C&+s0rcM%5B`#R8Yl*IkH0Y9?6RVdc+ceDBv8>op z!iNeMlF%j#=PgmIix>W1ao7G2)z-#$b!cW(XWZqK&SXU65@SMQLar4;E{z!+#=PS` zL`)dP^kFhYnyE-?T*`H%+>MW1#w|iguH$mbHF9^Tyn8x7ynn*Ge%PP2_YZqL&syK- zyPoyzwVsVTi80NEpS&WGWX`c~zk*_1P_pwuqF8@dsEMStdtz{x%oBTwI)}M8{L9jr zr0jN2w1haPz>x&%)sG9+*G_ElM(bU2Qb}z0()w|J-=l0fCYaQk_2dcd=XdJ!7(dC0 zuI`@2Mwz1BCFT$z=z&zl`w-_Ksp>FM;AXziZEfgJ_kG!HfK^`3MZej&*SNp4?3lU+ z4bzlqSCo01?V=`=*a8z1tKCrg4vTw3S>I=f#bET1t*7-$nu3cJ2ILRiIMN#6)cLuJ zZSMJUMl|l0Q7M9`1ouzyP=td~KbBFc1SG+z^iLvq`&+Cu!W1b1zjYIS9NuGz-Ir>q znUOk3zhq9-k-T(*h#3Me=pm-LD#JAIGFb}7y70_FB^1T7dDfFJoOluF_u$4v7e;v!71OG}v2wquE2+<~c9`OE#X7jcM-itLTzylWdU8rkm zp1y%r=DBUhmhfoC-7huQ%9%!#&7FHKo?z|{E%_v4V`I^{H@@XV{uQZbKGA&MYC9E% ztv%}9kHuo|&&#E~I@|Y$C-}K!@jFS}M1s-Wn@$D*&HM&1AKSR^Q!J2H=9Qtg~mDqH!I^}6M>uUO3KQu?;QZ)8-x@FDAeYb zI2DdY8sqT;^dtlQYHELm1#yvQ004R-LI7IrDLiXmXasq1I6hPs@irT# zZB_WMN83hEd}O^*cde*8M>7kwWzYDTQwvwOEbHb!Ct1A47$1;L^IUukN~tHZAlM6B z+Kbjof2r0KMSQnl?V5GbG@_+oT6H-d_O$iIHAWekwZu~DCfBr0yp%`BSx z0RUzGDNP3OK*N^^gtGV(CK927_te)lWiUQ}7pq;KIMP|LLHJvcp&H_slC1kxby!tg z%7Bm(p*{LL0C?Dg3pqgZYTFzt`O0aAR$VZ+Z2E~dR7U|ikxfajcyK=oA9pQe zfLE&(^q39N@F+nMDx|$ABEJ{AhI1q1Tmax(NXj_?0Ns>XYG>c-$PKHae5ZQ}uUW&% zr29WgS?}wrXLtp5x}@5vKI9=?weWt|i#yn{D&O3vX~J7}<3q)0rS67ZS7i4GBT+y=m0MhikWXIzJWF~^amW|-im zQrZ6aN^J#mb;c$f{~**}o`oEtI3GVOO|is1{Z>v0Qq%lJ^tmGwYX8 z8EvP;=Nj<1#Mwk?Ig^N~lD_hcyDBBvR}lkqxw(R*;j;4C^}&%HEX8jC4~k(Ax|l$N zoJ&jR?Tlnk2m(3mP*YU86?cLTM<;I9mw!z-fS?n1oV-bDqfsVIIlP9I;|{m+Ewhmz zL5KHU^i#FL4V#JWeer#dgs^Y#M3II6TC>>>WsUQ39s zB0a@lps^f_A1Wy;nAYhshoq(`ShV5GXInC3oipmA(_^U3VrH+7)dx-2=Xt+7(PssD zB%TaE&bT8OcG2SI5Mvf&j*T;)9DcMuP&*Um1~%|b?3WfUp?z(*7ZKC4lOwVl5H~m6 zb;{I&S*Sd;wF`nUEHT6I`$t7h&9dCpt@{|Cdf4i&GAXK5*7be_ zmB7AF*m|fE9=6dp$H^5d(2F5K8o{P#av<+T8l5<)&bK-iD2j%!7M2yjYe@3 zNDwMA%EwAtJ@WeTc=P9JYv>~rB+EZRB>W+?Wq{8~O&KdH7_HnN>2Xct;InwxHG#_T zU_CUIGD3%Qx@g%elXYbQSx)}ZG_QcO-B#dXzPT^!n=9h-S7VM^?Q2Lb>L%b=yyeyO z5tlUkUA!N#gJlE`BPd;)qQ(u4%U*%J#E|bpPk7VeC}4uJ=BkmZcV$Q z1gD*^saf;hy)#JqQvfuhPkTOss*KAckyzZLsvBODGm%86zYwP)y%cf2<`BffOkShx zOUGk@>Q9t86O$dbx?lTA+$`hskX~{EiN6j(*kA9RdplBIebMg$2?h>#j&uKO1U^BL zzI8WnXl=BQ^C8Fj@LqkBwxT6JqpBWlfd**9zgWXVO~V~I4!xsbT{l=!0&K1yMh< zyNed(<;Dg#x{(Q|-!Gh&%4sRkK!E}UN?M?}yR{|3Da9pNaS!g&Q(6e_8mws16qjH{i@RHK zcMpWzaL)6)f4uYFnfuQBJeka}XJ_xV*IxGheq<5!@q;wMW6H+>0DwSN2CM=A+}i^H z?yCKD7k7pYanlC?++ntql>De_ZTSfRcoXFl)gXuW?rEprgLl_=l|!D91;+hl#cuTF zDgLtbPsL}%?MsfeFN_>%5=eaTs8~uT`X4^UUuaf&TIBs#>CdyKM~-)bczXL`=H_nZ zZZG4cqLaV4K9yco87dejWJ9+(h|u|){?)k9_ZLhayFw5>6fohiDq-r7-Q!{+DY|`r zF>K$^IT4VBIf}o~um5xI&=A3~#7Wka=q(WX#1D?YJ6?+z?fXjpLT#n6Oh_(8)zK9g3&Q9q-4{Tm#OWBy$(ZJ@mNF0|07>2GZF7Ir>c7 zS(t|}$Wm@Tu(wHUa&vttrgz)HgCS3-g)8#po4>J&iq`-9d7$Ps_p-Y`O$;T__FG@& z!R^hu2Q96w%S%fiMw$sSS#c*m>sv20`rry+e`}tS)Kgw|dlf)ngiU$8ev78TcQkg@ zt1heDpr9-v=G4Z6pM5m?>NsC0LLfaA%{0Ovrk^J8 zYAsNt61|ddL`YpCgmt-td&*}oq3t)@Z=g2^MLUj<#yS}xmN``$t%~=jB9d%`Sn{OP zd+sW=n3ckRyeClYfE0qkU{cCuMo{i-=ZKS=Y}=2oPkTNrZ`E4*($x}ec`7H08S-jO znw)gGSxGCViEmwx*aqc>yY^|*{ifkr?FDbU6^7ZZhQ1%cM8RZl%zdx=;(B+W?>YPD z$CHJ?6CL-Jg7@V-5HJZf3Hz`KGgACGjtyFcYZcS;Ik$x&Uh7h= zJ=A_<|8AaWuX5GO_avd2ou;J2ULKyM9c*8+5XS;5$O>{uJk`W}ykLeY?h3dQe?*X! zw6ETMu#!Xq0>5@Y89fOkes%rq_9A|-VzxcByWXEiJ_w25GCu5n1~QJ*BbHrsR~mit zJ@cj{`Ms$LY0#pZKC#VBr(AtAJ~N5<#)7S0^1pD+cK(USCo;}eTBZISlGYU7^r^dd z{iui4T>QyJj?ng_j^vBcha}wwti67oRyXCzgBE&4;&#_xO(ZXddZ#imJ|E7Czn3wZ zbjR)-4HL(_QZC;MYw>)9k?d%B=mIkOsL;icu+jjH=3eGbl{)I_=_OXK&w3xEsKC39 z-R~i;m11J5md)Pt8rlQLueE~4kIFg(=T^6(mon9l%`O91>G`y6KsU+#7R46V;5H-i z5bVr?@6|3s0LIS2(X`)qrSGvy3arH)bocaRWoFtnVa`-(s>C?_kQN;u5H3#jI!}&r z9QJarzZ7K0{^_Tbj7f86pjTi`c3d9mh>mugDSotUEXh5Qd>2F#-O&LrmIDGqJZCdg zHd`U!?r;}9?V8-d%-|0`_Buv2GVVEt;VIXZ?d9ysh_jhC0bX`-E-nSx`f1Lw%tr*` z$M;US?#@ewL9T%XFcLfz!>ghBooig zgw~0vY*+Zwmx-|Zuyv*WURfSE9M1gO75oD(qXqtv5IbW-R+@CK27fcuwB?!14`P;j zwHimt5E7j+!gOg69}9giFK0s+6aC~0|JW@yaf@$NomiNOeaSg)gFzxL>7~vb%teO- z+Vv$iAC}B-!dA2^TM|SET7G4mH0rem4Fa_)w`)F!-hAF+E zN^YvN-)n2R{3Ja0Mshg2i>qNn*$_9|@4(|FT6eUSpU+5Ap6Fnm;spw2ub z&gW+LaFD&JI`VuJ-iVGUU(epS3u!Y$8-7{~CXzpczUG{c#I1B`g2ggjU$XOI{EXt_ z&`UR|zxmm)tFMb|EiOZ}t*h14rpJJwa`2u z7xIImcgdTR@sw+67qPQ&K;D6|1}7QNHuRHG=%-BhWVe1gpRKa;&CIv_fPU6OjXJVV z#Fbm2)Rrf&TG}n9YfFDj5*Iaz>IiU3P3fvsD5|cFK4+KMeXpXgqvzccMJ{)O1U=*8 z6VT=z(t%{>SV#ZtGXeq?n>VH0A_~`Pcv(Q^y`>-!Gwz)Cbc;whyL1sDp@hx~(TyMz zM96ef1Cl2yAwstyGto$=GxW8;tB>mR(~Vyky+QnQ&4lL@q`7NFDXxtPbGHMnmiR>x zDOa4Wmg%S>|5s};f^+-w6|Ij5t$ks*O!A>Z$~EjVvnWYJaX$0)ZpltXo@P=Dv3Xwz z53;MHEibdm%iQu^VsaU-;#P`#6}>(>-iQ^l zWXG?WsY5nO!tLfi8hO(%hZP?8Urm=ZM>tg}S2^y^YRiY66{dIj%w_Ysl7a zl`6+zHuwpCLfGo6K|+sUDm<}~sT>XlOIw3^>uNrlr#Td>F(>2@YF7M0+e_R1qAZ4x zW>GmzfA0`098T-!`Ic=WmhgIm6m3tFV3lXG^iDfpRL(aS1aY^vGii|aSL=BY-Y z^hgmrMW{2_qV@e3hz=_;ap6dCqI`(Lhp;7f&R*P;s9^ET%pwDEMu}y*Za53Epv^K8IG_$s5*OMm11bq|^ zAK!e^q$pRXpLZ&}if7l==)e>qZ4p5K`pLv(eW-`XW4HK3VF}+5xR|F-|8Wo{kf~p{ zvWMZ7nOSer3ub;j`?Uf`RKAYz%+yYuHb-9P<<#TUAWJF*lw2Qi@z{JyrDcj`kJB;N%6FFUs{;RxnFcYkllySwC)t_ovbsWJ{O_P-JEGb>JUexFB z*H%564ao-LFX_!!i$?0HtRx^nF57NxaZaYgwGn6PWKJ$RFX>M=#}vP+H*FB{>o%oS zYpZPab?%EkPWXHQ`EH@K1$OK+8kRAC;Ggn@=x{5;Y}h#G_UV_ECB=@V=p||h1bQUT zzq)QG)1xh@?G*fQHr67{bmk}plC&AvzVufZv3#!n9z%<7Fs*t;aEaGPFSK6M@0- zgb(C}MFpkz4QR+60%U9JMj=T@-e-X#kMUEJKl-R_g=)u0f?qoyscNrXCS5`whc*HO zL{vuhf`x3Q867m}s$w*IPsn*zzwKO~bMvGm!Zp`75oZA>J7kJ$-7P8Wk4N!bf+G5p#on<*C*FAHpjRtBIQlCEWB+i@t#q3Azi9W< z#kD6pr`!*5hcet3KKjgTHX**r*7QaoM)kwZXGGt{b(S`jPA04`QG)Azm1%Chmh*dq z?x={6ymYD`DsGj>!iX`m&uQncq}bv<1&yT3r}##TO?M&5l*GqPTX@pRB%F4BWLH3B zEg8kO;+DgS=?{gBm$WsA<2kLBTZ&?wDFiT=^)c%1c3)pB7(^amMwo(zr+Ihkohudb8)10i)=jic`Jh5^k9k*CQ+~k|@)F@kNJgLXf zjp+A%*wp=MYUm8k_HYg&PNo_6?sp8f?lM1RFlk3}LHMN5 zA(ry8kg<)_ITl?fzoU=a^IbNC~`Y=$B?-gpjZ7Xr{kudp-q;sL#_~LC;%H~{AL!w%vP9F{@B4;{J-c?N>GG1+hS~Bl91&S} zuv#J5RPt~(H=JP;%sLM|3LjGAnutp882{+Rr}8;4_~PJe*;U;x~G7*up=Ir*1BkSyl8s% z#P+H2$m8U2o9T2Bm)LpEyk^&u0RliXN9dfLg!4vZ&#JKV#z!wNuk-X~BW8CY+pRW- z2mbmJ!s45I74%e!vx9d465|6+pHh*^Q@JfWDa3XzxQeJMDk>5NN`j|nW{9YTNBbI} z^6|YgNvO=9+4GFvU+LJnGiob1&HG2SVTig*FyJ%(+-(`@Zwem~YA`Q!bS=&fg?vECun6JOYS@_zXDct z1sF`?=VqmAIKj|&V3~wvf1}I8@&Opa<%G@>`gSVWxxiz+HEB4~v6Dn(hB1_iw;apL zPqLOX8I9HE$<l>uLM57>2Q5bdc=cq5gaNJkxEO3)+eLWcf*ih7g zLT9F@MMXu!7bY(&tDBnq1X7xn4b)jO9|t{mecwC!WHcBKuRZ9ymdj%}rtSdnbs6O_p;9zDTlPCMo!EBUdZ17{$?NZS6mNHB#YqR#r24~!UX^>nV z)jWlB<?quC| zfD4WB!q3>v31o7una5dGb_rW}^o|h4rTX`v2y>+oOSu~%K4X7O4c=&Q!7&j8JgSdt zm#vyPW}xztnMux8#Oy2eInxEpm8TdEvyz(#)5x$daS5(iwCA9o&sRzpZ)|KV zA-TM`z_BxVi2e+|&@k0Dquwrl8tvGwGGkeEtEDPTp2H#tPLm5SFUqbs-qdoEt<`=l z$e`l&p1c+G9xyt;6@7 zjxs8DslFOtf$#E?PY1%>Bhkk}5oOPx+CCeZ?IluZVk#8?Q*l=JJ)5E5dW5ezFmmL= zj;rVI*49^V-ux&o-raalnUv2n#h^`&Jo;}e zafpQVgtWN>8+W<2FQZ?7c7K6T;7?3+D#-bnR{j0Z1^{T%5*HWmRO;Kho<@l%{UMDi zd+D|qnqBkDmQ*AZf9n@jZG>qrC&m8Ple?A_}#%r z!ehzHMi{^qHeFr1v6{I54)T10RX|&bdOe}FI=~Av$>D+*Yn$h|CcEK-wcPpWNa4 zi~FfF?kI!YicPOhE4Po*PQN2s;`W$v==9nq?1~Zt@>c`(%T`0QAvs#&+UH~S?XdnwRl7dh9OvSv!#RbtsI3j(p7^4sMze-hT0azf zTkYz;pO=Bpz!HJ%q6+kSdbSf=Wwuf_^S-W-7yvjJp`J!}4Xcj@S|!h175loz2|^Lu zIiPa03u>Yh55IR^i(Mqx8zVm?2DKoA9q9f^N2Ir}i7K2HHqpWa^F{bL9z@;)8^CH_ z(TmDtqZ>|z((fxKNvN+c)SDjGX_7w_6@s~6p$X(A9wl;PmC%2yTy-(xliLi|3vzwR zI6ZFP7LRAi!#cSqR=Z4eS0c@x5&3R*bGk@iPBFrTj#d2LjlM8w?72_#42oq?Wtml)mHE%Hd$>0LYM$&B@ zH!*y}8#TjZQ3dQ04JTOcjwj@u{R!el3U!-kPGFP>RtSuKBMu_wS3_P6bYloU9Eyw@ zR_>xb^Xzn|t#t-`L>$v@HY$Cq#he?AuNYmv8zWI51>k17{k}`%RlR7=_lsqJa{90l zq7&k%JH|^T+D(o#<7;2J9)`|fp5O-ro&teQlU;RKD0a2VM>Bw6x5#2&0{ipkSOfWT zZuPu>$Ynyc1}C>nq$+Dr6LZxRN+{Y(w5u!_k`%*7$=NP?)=|>pr!8ZDgFs6HYb7WN z&y`K6olbs}@LmDeG7^P0>dW`SEm!N>#-}$KznVyZmb029&aztT8qm4;fq6Xx<*AKl zQD+)~p$>2vY1HpX1I2oekCE`U4aS?j?cQS2z!IV##Zei5-_fHceBn6u7ML%nwfx4% z@-kgt*tHu`lU@AY_MlRIpCIIqFXY@>B-{o)8W z12YhscSNTe+Vv0Bk6kn^_}A;JuDZRlo&l9JbL)SyJDkU3ZKtff*Yiad>a6C68A-mN zs&B_5iI#+)C8m>}pz`c9IW78qn+Eh%4iWX}4g069NWG8*bpvq`kGlB*=t|H19({6L zqrPn)G1zrlxoE`0%Wj(=KJ7mAkD$~?3;ETZ7m)A^_ng5!f5)1VARh@^%If<(Jlhue zX`q$8(`0>|M~}Am5zyxVG%LESKkhhVR;|oB9zbsiBV3yeAz-l2=A4rFxe6Sjvlw@LOBiD4H(a!9ERXA{XG~Y zAa=8q?S=thCHdZ`Ffu7a!2JC z1mmqB@mDUI=zYCY6-!7~Wz|JFU-~3FHOU?aMk;*M@4$cH1~p)1TQpOjd4Sn179Uo^ zqTZcSNwCbCI|aAuUN_z6882C2B!1>QCewKq*KQgHa<$f;N9UPS_3UI)atrp}?AGNN z#P3$q6y(p;Wp1$S+t1O9UE=1jCjm|ab>ZLLalP84+VON4#;dHpc4>|`y^re699!UD z4?>+%=HucNs%qh)e`&=KIJ2j@hjIF}gWt1H^aiJRcK4wQ*_OzOT~^tMM4i2C4Bd1I za3MXWy0JvW$KSs&y<~6z#jX3I9beq0@hbOgzem$qKp(!iZh3?DmoMz7%jqD=ZgR7o zvTzFQ31+bXgVJQ1L3?OBNvGe`A&|A0wRbllP@h4`g-KuM0+uUnxW2DY;^NFO>&++s z5}8KV;Y0uoXep*ubK*x!KEYR2_$5F}-)}#0f$)?#>MVKAI-bm@vG6-2HsgC#6Y5If z5!baZE#Uh7tcS;j<(aE>Y%%sYz`SJn0S-69Tsv^^{VmKM{br_^B=n!CEO`DOI$^|C zqJ!jWaI0@_jQln+0OWQ2xRrVTd(gjoswoQZAz{jhFs{JM!2sp5P?0bTbq=( z=XmVL1OHK@%{5~9Zg{c-9l&1LEz9EDtiHaw13M)K2D%kioRb3&e|mFgc<1qC_;o%~ zq^9}ca7MkO<{@ji^oyl~W^PeEA&-y9_L!{HW~b>K)taDy#D5%J742)VZrPAa`()cM zfbs?E$`>`$I)XwW2>|wV8&z+hWp6BVJ*?`gI486|6~IEC3y2&K-78LvUx-rS=2yIW zr|}C?j&Ck7fcEj-F(781*GHA-YQHDWl}L?$Rst_(_476B&pnbWycf6~L!*#xH|VPQ z376hVmuq@>eXH<-*KF0#TvdC7z}*EgP>xHd5GUgwQ;yksS!;!mzxxPFSt(RR3igh` z2=wo?v*BiDdF#;cbCROaLb15-#ectJ2ObV-9^Tg z`=O8K6NiN9`;WcR;br_j4&q2Ez#sOyU2W~kA8c4X^%sb=W7nHpO~xKCd?&XcxQ?>y z)I$he#41^Dh-UpW2aOfm$b4+?!cQ*P{LiJ{yd!1^v!=OO{5JPdXnV&O&0GuqYqlAS z?UFj&0FC&>LBOody-^spwHAiw#!69f%;qO=`LPR1S?GK(+-7sx$!Pm!Pfi5yefLTO zQA{(E#I|$oiAXFSmCs!g1fM==7$`WqH#wL0eMqt`tGKOt3RS!SNgWvTd@;SY9piow z+*xQGP)Jy`H?y%JI-h0gWZ3#AHzZT(#hnL$40(YMoK-BJg1QcMfKhY~b$?!rxbX*( z0udV>d7*!)gR^D9ukGH;g{H$T2uPMI&nd#zo~5>ftiq&TE#(9y9w^*=-DAN4Q424rKTU>~V5X$_(`2AtWF;QHx@ z3;F`h*x#GZef|&J+~N0ba`_CQZsC%M#Z!OF~x*y35t2e!GKp z@b630bI6M6qe8A-i2{70D?Ru1lvNrg)oHg7fB zyETY=zk_p0$)Z%HtCdP}YQPgYhI%`O|WS4hGf z-O@ot^^YC4G)8D_S9y+34$Z8uZgk~&h&>;MBO||EvaPiWs(P#^{V}$Ir-x=fKR^HY z>7nR}1lDY!%GW;?4~7i(TKR)Cr@21u^-o}glJ+fr8nI??+?dtp0W{C0V3nsLtvesA z^gS2YejDOvVuT)vk%YX*9`!bo$M>d0D#KKHKcTZb*FO*n?cdscaB@(U@N}g(XlY1? z-iKX;`_ANI^*SwP3-!g;@bLQWp;d@yy~`)2&hOy3R+mGM0|$zk`eT=1d>-j_18>C3gQb_!%H#)LB4F z6+6l2i!93%^-bR!L<;c$*Dda;2)l<1yyk~vcwYt-*Kw8AwdU~2)uO4fayPK-Zxn$Gc{WxoDb4uQSeK7r!#`+$Cb4 zLN_5(=6vXJ!hmXZSofX|?WJ(O) zRX#W+zD_dvASPxze1b+xxA>%G^84~{<5m=j)zWn>$rpWh8>lsndb_{kPA1_NA44&N~oD&E5WK<>{Bh5~Bx` zNYIrlwXLlv>$LbC<|tU><%U80V8!8igV&r(0k?-_6nq5T?)FdzkAr6M)o`O**E&jvqi*w5_I$nFfI>~X#vNI?K2HRAyFY5H ztN|>&GH~f3Q2zDz0(?Tko?k(Q|5eu+ znhXdWBBXJAee%His!PME;jf5^yMV#tX~Mlz3U3^7FKKB#h~$&5D!kjmtJlMwk3M-6 zxfS3VRYFijZGiOJLy5aZ(C`dH!9{EQoBPWXE*VPA88NKuqxE*%(&_iZwD}pBXUjdj zrlbcbB!=`w%)WMOxcn(kX;{#x5CXT&??r~llmR~PZ;q3O4jA>lL#c+ZXjY;(H0(a& z1{LAB;><*o>WtRvlf?2vc_1`Sy>U`Y?9I}2Enee-n#+zc__$+W!LRaiNqULELEPMj zxo7Y6^p1cYkaUj?bmx^ZJN9(G1v?r>v3EIDPyG0oM4F%{(V$o&;Fu0(xxT=dj7-vaTue=w?`5FhJl#WAag*G#h3)mWL z*g3(|^iU|@_B(Fh6xHUtwGWY}tbf~K0FStf~g}}#ZFc{L^1W_tKkCjqbCFV>0 zDuTZdo(_jsmJTxwF{X8GItxNl`j@NWs@Wxrf9MofzP|Id0!DR+_3=LvuAX=Tu$Nrl z=yd;JIECJWE@**SQ4{s$dVEJ)J#`(XZpA*uHTrEDrFN%gJ@gZyuW=;xApWF6UqQ$h zT=kQSF?e|4Go~EVSF3xjQD=464GRV6K!bv4$v7-jmzozsPCaN>Y+XKHsl7d&3c@Ts zxZItGo@gURru3_C5OaJIiKv|6uh{9%`bHZV&J|H)fN9b*a3`we*1E>rRU7w5=|EEY z(tR*fACz}&i`mwe#~7A``R(#IND)NrsOa5{;(?)i z?u0Nn&Kj)G5j%FI;U<3VgvHihl*??O52`U=4V-l!s1wwRkH(iDrW;fWUES~OuM;gm z{x*+W;IEh}T+&!V;)etapE*_e4Sn^Qw&%I%ICs!p_ zcD78We2QOx5nk94dPerB;V7+}$N;kur|I*hBvj5_f&8Eb=O~%Esuw;oS~xz&k;}86 zap)9B?zo~bjHd>N)2XQvoL)X~O=0s?r!k&54ozYV!G`ZyhogY|cS?Mn zK9rw(|HDq>$Zo1z6&v@lThmp#C9E6pZ-KYn-;X+O&wj>#{GWW_KQR1%tNQ=fdO+yE zwZzE{A`>~cr2+;mHwM4wO?g$_7OwkT^eF4!%Js%oT>Z}iYXy#ovbb6|s@z8X%Mn6$ z5AiOX5P#NC93EZtD4>F1Vc}m)Pp&Vf*DUnR0V-9+_I`7d8wc|xX{O!0P3y;Y7#pFO z2WQn9Pe?4!D6dNgK8vO4Q?p;al-`}JO6E*}yHkG*#7NIocdM>$3X4`WIO@)P|2%TK zbM9h{W9@m|2;fl9?%e)OO;yd%s5_bKK*yXpclUa5tHF>zZSLRv?6gX^j# zAMKgF*XAfaz5~34-$Wv=b5<}3NN3tr>?hhn!a0*Uuc#ik1f@2S#@%zBzMCb?xBZ`3 zk3^USAAtkY!Ufp-&-RN!6$(ch4hp~@jXKzu!<#R?6kUf88gSaY=&M5eCOBM>8J|3x zA%gE8zd)bvQGRV9+!g{|fjrkx|hho=7hILt~sr25g zNc58Q=4n=^Vrq3k;bCs=VGOrsu?)3xg1UiH)jo(pJAxex+Ckp~?!ZK`I6~mz!BvaEnrR<0o#5g$2wk<7(-0F3+J-GYE!nY1L@^B>U zo1*<`yZJ~iryQ}(%StKZPxF#M$UvWt{=DKoj_I{4XurzzyCgEmKe_x6q`fEMT?@nF z>62r6V4rK3Kc+O)I<5VjumqL7kp2!*I_qM3<4HKG(7MvwxZqo=@~rA45U)C zov7M#?=7>AZoN`nh{W9X%R{ju|A_t?T3iKQM9|HbdZr^nyvXTWP_>Ks3qo&1pqLo_^t)JNRd=Qm%lnQT#(+1V;7?Z3 zd#MUQAQ#mHWhIGYOeP;FlTQKR?V-OHP_{Y5HFtsw27dysXPQvub1)~`T}bf)0qMY8 zW0cDo)?AR7TSQH=?COcl)AgrU)zwwn5gl^n+}G*B$kwsk@?DDcji*s}s*WDoP~Vgg zMuq=8lf;ZB`==3aEzU6zN=yuuS6|D|2?7xIweoPRozlxI`0egis z$+s!Hj4Z~-AD{5!c;wo>;Iiq%a|NbE9zKWie*4N_Pty|xnbm+%t+`(yQm$*CYC zn1h9JDyULj-L;sm!di?$(fPem#c$tbS$?@3_*X*Fql{1;WpEo4sH(uWr(Dx+T6=*3 zWR#zvEdBTpKj^u=k!3i#z;h_zt82pv(IbLq<#53Q1@)>U+b*F zZw1>w*f`GNzF>(nI)4g`AhQ%fKvG^X?+PyrGITaVZ%19SC~4sKM?=jMmnT-RjWw40 zfSN)(=$UL*dfM@?l`^((->`GB#}*&<`m}|JI-jQ_YG+f*I2oaNq?X<39+GzE%Q527 z=vQf~YzAp(C%GFQ^5fz7>R>st*Et%rQ#ry@!R`Gd1~gYonn8$|bTL^L0N^bcT;FsQ zHk*57dGHf?Li;+?>fmWilV1jA2D%dn0qchQevp>PbNSihR%(Eqt1?TK2e*xwjtJZ8 zn1?j2BX4r{1accJkua0e?dIL$N`GBY!LOdH6H=f<xhp&KE_V8y_R)#RsGjt4088HD__Dce|qM39B*>p z+P_`bWu?;+p^%%~ze@-FREC^&=6w&f>SevU2e|lV-E?9U1o+aC>ofbin21e5$u9c7Z?k?Rpy@ z@VR_kQF+{~H--Dt_%^*60^X{tuWw5Glz4}obTbLA^wShqcJ-x|1Jar7`b)v<13}6n9cWU(YcCaCtZ$3S5dz)yUHCyh*8eu}a++Ti zt~4s`t4z7Qr(7kryt0J7Xy^A5d|0VDH$A?=2ue#9OQWgW!a}`wylevJ>zwMB2ltB} z@?U)A7;_IQba9`VcW1<%1{IvLiP0#=3e2l~039iDO1Xoc_&%TV9=~ znlb*D{`EiNXx+T8TxB_jH*x)GbC1?%wuGEfkLUc=jL;99=9&WDp0A~C{BBUmUR`VH z@hfH%iN&R&$34{F%tGc^KGF&?W6C&pEk7&?+gx|onC#y;qV7E;K;$-g zI!4NY+cXd;pBbvLH8df;@N3s9ag9z44ZuEApOg7Y)iR*1L(0mt4%c7o;1Y(ISDZRH z3^qa+w8sK6DxCq7yjac>HZ7^pH1RIWVSStKvmC2F(Pni9`@jMd?vqt8r5ZUC?lj=b zH*9J1@MoP$x8s_Itk~a}Q^i9c4qVOI-k&hwnXk28Tleal^Y#D$swZr-%24`gCkf~o z+QXUa>2=c6K!2pyMi*ksz-tkMEZBbSy_C{~kwpT5(01t%Y-y2w!c>6;N9|gFAWb9F z)>qVb({(6T>!g2tPMwVYVtB|6v&vBoz6`qF?{Wy?jhJQHo}bfK)ziL$lkpBu!)7B!(?$e18=S$6*kuoJ!hK5op9Qt`Vjcv7)tfXENv5H&=wqtb~gqI7p;;`r+8ep6D5Nz2+ z^KZua$$F1vgp#iE>98>eDKuicMY(<_D2KEu?Rc$&4KeS{ibk~id7<9lrn9@!h365M zGe-gw#lD{u`k)*>A6;5%2PSdtk&;st+#6<{Ycs8{qABXqn#@GSzm~+Z2AkC)7Ps_J z$l%`C`U15}CVL6$k8bdKjSlz%%{3uX_0g)JZ&GaAd`hG&TIV@@fzD?;UEKu*HYzOW zlX5MswRE|yQ?>LO*mjqY0P~6^pT!jvRtBbzPbkk@02AOpMx}*;w2*Bp;oUztr((hn zD#qtCW0K1-%6yywggtD0GP6?wt^$sgH_FPcE6`}GI>kh+CZqO)3CIo~hhtiICtloa zET?w5{K;v;R=R}jk3D3`d{Tq1W2qqZa--EAV>-*7IiUm|hERJ1spu&m`j@Ad;()mz zzWAc0F=MX53sK+E?6_rywYGo_c8cmFH)Fn0&~aMntEF$}7%WIc9v4qm`(n*?{nC#S#|&s!vtK=X{$lnrP^Vbqn(s#X z=B#Wg734CeK3;%SLHe%OypkFp@1d7Am?{X-ho0>#xsJ_%!8%*?d%tNUu!h)IeuZFP zcM%a|+{R@4D#8R_^j0PWtY9YJmJuUfk@a}@3Oj|Gsrj*Wja{Zq{6whPI`-tb|6}(% z`rmUC$!(}EG{567udhM!p~*MQGji3sRrqsOmgTxE@*|afyfM=iCwV3GTLoj8aazHe zZ<#Z=-}KtM)Y#*;q5Da4^6)XocIXcT3M4v-uX~A`?}hF=HLj;*D&8hu)4;wHgj5*8 zc#s-6+aWqH{sWzd&% z-cR3wV?qA?zW@Y)3%y@F2;{u7#KNpbj7==C(%j95nCM)b~S`I5%4ITeeNRpSV>I|AF z8DbHJqzL8p^8MQNw9X#1iu*ZP`b!uH^fJ{~9NA&2+-l1mDX?(yEdEV#y!SXq$s!V7 zela>!WTpHpb&1Yu^KdRL;9_49_5g6*t=Imh@JXX>jqmylZ0AjBkYt|$kNI%65Msb9 z*q^;E13BH4_nU#x`YiaqNWrO5r4CZx@1OL(xIpc0CekAXa_{us#W~8CN%0CuPYTp9q2X zd2X~9rLy#FjZF{78SHfthEtI+fK;?j+KV{K%GFRgp#AoSZyo&&B<$Q1_<(~#*ZYjm z{UV652lbs~^%eGVM=>r&8!3Xm{l>4pG^QFBJ*in=%w{B4kkv1VpyXaFHK&R2H0p@H zNfD)IS&#S#jvxerCCX_%ke39JQteFg!yx}i`-^CJMUL~nq5qhwjtm7G&e>kS76*T+3Q!t>9 z;Wcg?5fHBLoLy*xc){Te-(gF*UH<)OccdQGGul+%CZ*@+z&il;KZ}mFIx6PXGe~C~ zYWl-G$mU*H48<{w_i4QTaI+wn{Abun%Rsy8vwa?cKkLqffD84SC1rlM<)u*8ApP+99iOS8@6|2?*Da0k8L`O-(K0Knp6jB z($kIGJ>gjV+;nV?Wtd?$IW{sflGk&3Htars)U2OEVp(R!1;+AG*4mycPJ$4Ftu7l! zlPr-$GiJkV(rj$z`LRP>T}_HIGID7LqunXEt?^UhES4v;>OHyiSl8Z6$>IqHoFw>8 zcmZUtmo4AcDq;Yo9eD`?rHMmDI%cQx77l!U_Cv#_H@2BTOPkNtR8H2Hf=j9%Ncyzz z7Z86VHtv=g9n?-7lIEILdyUq5KACt##};SC?>Ty$Mmu9{r8#oPZ^VDjOJR53qxgT(_TEuV zZSDFfZnwH^U?`$g4br7a?^_9=ARt`=1Oe$yKzdVAdJ&OcBE9z>Nvn4;?~) zkmN4+-rqT6+)Vf-;%-XO(4T$AlH|c~AD2WYCj-Cr`;#92A*Lpr_atD?> z!^gHGWXvwrU9-kyUjm(UF$8yC!UOq+9$jTq?^Trm_DdsBq zeNf{2;27S14-ct?*@|3vj06!rOf$*+n< z6;nEl-t0Wh{D?-#Hl&2Ci)a~})#lfR!&B*EVB9~q48m}H2uinNl_TPlt58JUOmGN_n&x_p)3SPX+XPKJRo<~ zz;4{jz%7|!zubndXrQ-{&bhFi*BB17Ix`wBoPF=)9x=Vn_I&C$il@Blf?~5$1YK;n zfL!u{ZO%zuH1c$+LEB6bvXPc*<|`$O8^CN7?KVTMV*uX@4C(u#kM@YJ5TrX#4!<=S zGGPm>(&taR{bbm9nZRcF{kXG()x1Zd$I@P}l?asK2wYl8%;&Q(>FD%3tG7VC#cau^ z+vvgdf+A;0ur78hi{025?7tAO|sx{88z2-J{`l{D)t; zC|b*cgL^wueq5k9p)0`EpJ&5>MFVuspQ3BH-CX%sL^WdmU)I(FPyJ7YZ#7@BwENa1 z-8QgCFk)AZu5|-y6zApY3C7r83C5!^jH6SWBapYDNBo4E|4uL*jeL{h{wZkI-~E4G zm;66x5&z{Qpt&uQ66+0dM?fi}SX&>U`pP-7kmm~Dc4|2BEJU`S@~ajyaRHb)|zh>Ev>6GST=CvC3b2?esJc5H2YYY;k zb7fblEy}X>H;TLLS|+0S{@C~(O&Tat*lBu4*xm>u`q*%j)*RpALpoXiaYr%x&FR-?SAyg$PdrU6 zgS*9U%n2Q^1_gKLGwQLHPfQ*WyX5zmjh$P-nX6^~HnT|g6+;IV&vOU7ocG+DSa2m7 zH!NI&moYtA#u$H6T&exB5Z!-jp7|JJPmcju-zRr@u-ANjvt$(+2A3zi$sB*Wh_fVC zHqUY>a%;q6q?-w}Wnm3>6|w3P#K`yNPUiyxWyF($>IiLv9Q6S0y+9AeoXfh|IrNTp z)?Wj*3{ZKao9a2}Cu&8(m+mM&xOYCD_gxV}NzWm`TP5~mtGj3-auc`ts!UAMn&KU! zO^z^JT&8yUJq)o!g=};?%^s-Tx+F}Wx`(6Jy7Wjs&Gs?oJ4N1t@)OlE3Y<2Lw1tHUAU`1MxnsVZ^m#J&sUa~jrX>P6>@ln58 zn%-DgJ=raYpUTgG^>kbzIKgivx)u-I;YgX4OH8fhT$l>1s@${(kI3@4s^qr;pZtXV zSwZnGzW%pZPy0qvvm!O8Mwl=_>2+S(RVfBEQgc&o?i-?urE(n2q^%8feT?}c4xAa? zXb$;$+MD*t4AbD8w@^z^>RMN%ZJ&SUaU>K_$xhy?MI48E%)Gt@3SDQlDyL1WHg-1w zb`jmz|4{d-U)%C;5ucmlT^dez!Y~c_SU>MN;x}&}EGj4)kXjWw>MFNZ>=+C%d-85) zrch}^xSseTEAPZJx|w?tSVXG*Bpk0X6Z}I9Jm~h7#PNmo?YD+ z@)8sA+dFzxW9RRv{h9iHp(5SBq?4gl7XL9~!><`gvXGQC$mvFF6E!I69j}KVFsVoA zLMp+Tp$MyuMtrwX`Pf4+LRBVih_nqykc8!p_8MR+uFUKyqy)ARjFk?rVzxu541sEy@WO4<%WV*&}1F5!Z%vC!xB?<{_`1LV8(Sru&CM-c$2%qEWWg(%&(mh% z>oO;{V@T5ZJhfZtcVl}-zr`QwjpzG7_OsZ@?n0ZqHH!Z8k$~+*sne}YZAj(@q*`{&) z#ns|r5{#Xr(zwh0n*m#Crp{+3R*ACrA1;1SQ}{l@DZN(8dxyZ9$3ID4m2Q-qT;O4% z0m9J|5KjH;RXQB&$Zv+D4}J=V9v&S|$lVUGa6|!=A^IGGnYUpb5NNN@)Sm$R_tt-f z|7ZUS|2Bzr2LDwR<*5%jG}O7xz#AORS~JeB zQ<@SlXsJ1ikEiEP`z+`%z5$>9)ussH`&I7vNOCp0M@q97t?^@%o~%e} zu=|cUopEpLI#5&WVdvA4{G_WkW!;;Z(+EJaRcbKp77Wh84(kYTOANc^%!yYiWY<5m z_c1?Re9Y;CtxkywGI(-Lyi*5yZE-Og+fr44^m6lkR&D!(%VQQz-h;>ohgdy+)_s)u zO(rD|X)->^uc-Zj2@K}9Kv(?e%saoH8ado%A#4^#^HogpCB-{}^B`A|s1jbZ){O?p zwHl3PFAWHDLjl|%KW8XJi z$I|zUqmNy=Sj>v7<(ER7p42rpypOz;Cp{o_$AM{2tx(-1Txzg(A`d5*IKL97dn?WT zN5#R}=&-}v4!}on#G599xf2ab7qfi%8rNsL3`^aj4u11MMRC|xbK)Riuzz4o!`D^YeImCr>ov|~&8g9| zRHte+hp&W@uvo2gF=hIR2#oXeVFL4d8GwsRsL&MN3zXN&u7g^68lq|=V@QP0I4rbK+d-_08 z(Fc=rgsb{wTMqLe*ZppB;_8qc@i^}i!Yqr*3iGD2PWdp1A0F5JK~1ysDm3Qv_dbcD z$A)tFuI4gW-cMcG#tm%p8YRkORQz`Stl8m!LwWa^IN8N#ypvl67U?rUf04q-4Zu+% z+15&ZLzn)!vP!xp_%UkhLO_yuP6`-&mJwipB&~#EK0ti4VuNme zX8Uw$%?e;)V{6eg92$3D(GD|Qd7hs5&59qz6XCDieMW3`FI++Bs`pmA-<&hds*!^1;+3b2Y-ar?YEnrvYGek9Q?bdvvI=Ippc%8h)wzmP;vItneEVf5^}DF9oX# zi1!RmGXS3&fokeuj=mq|#D|u()YR8$X1idH4E6oXy7WG0<=(h4Nm?D5xliS;4Y6;e zmzVM|S)9oU&=BMSqpjG9+ut4h=Q;ar8t1c!)SrNG$Nn%!(}wft5-vU0Pj(il9H5?g zMKiJXZn5Mfpo{rm8><=HQlUF1ByYgJpuW-BAO!6khSr-Hj$rBD!%zmu04&kX=Hbmu z{Ml^i8=&Hv8^>`+`kD*Xl+T=0Z5==oa(^Iz2jh!*n#tnChP9FI$w!s~KPy6?+6=Vx zS)EXHTkht!&H4wXL^IX~P>%6)S6LKHc7lyF@W> zB^X54LT5ND-E=RDoDt#Qx&JRuN?sASN!ArTp7&#ePJ$Fh^Rram!G6u{zzNkvf~ z*DlB9o)0lM0CmoBXtZD0Q@{0DN5ZIfFo&A&{XG1|jZqRDpPR?YKkXBv#qJ0_lfY~u zn-PYwBHJ++R#9CX4K@{&TNr%ik#GHxoS?il=P_mi`XvoA>^W9$&w59H^GZ)?@`Q=5L;dmD}dn z#v{8LKBgRij!`lU6uPX<8|)-y0ln#!1l7uaB@&GP-xHSqkszHro@r0QX3>m_h7n@0syHUMo_vlYHlOH5*J^(c?%JT1?GdVp>9)VXoEQ#+Tg-&tp zH%n%yDdwj$9k7@AO9rzqxxUpz&R+&>$lS;MYe|6Z4N-|zC_qwRRKnFIZ{lv<=HzA^ z-0zEd0WCaaM^;&*-ucgUi@_rCm+r+gm5zf2m6zEIJ*Bs6Lk^pxcs^e#_7+oerg#faqfxWN zZjUIdj$88Ck>7Q=>fNEwhdZ^}C1Y0seRj=`;$X6DuVu@A+18W17Swihzt@A|v$GQd zWrVNCzHx397T+Xt_VbI+Y{0tx_Lu4vyA~1j4Iwu2UZ1&wnpT79>iSJ%)+ltSmeb+x*A};cr}XWXM_=Q!aBl=gMoE z5VvpLbtKI(M#9|2Z)V7LMKer_>p+gozckwWVT>m4Wx%2q2gL+nhicAg)WhVUl&0jy z{2qd*#+%K#%f~lpW7G?TrE*|ICqU`hI~JyI;dXqH(fwqm>XpN4&{0RS=&xS4e!{1eeCpq@>5DG7E(%y+hu(FM@0X}oCkS@Ee#Hzu~l#Inke2a2ucyxdZ}@I81K z#f-Y3@?M@y7f8c$k7H)TYSruP>NOqpun_^7y`xaL(%zTH z`J9#E?fRipb^zH>ir{s6`Iw05r-}+YqT9#94-RHD>mX+#>)^BQtKW}jnN&vHUvl~tU3)>a(T16kz7^iNrl-l*D1H=7^Cp!MJ z``vqBGqHqE%1R+2`4$#Y-{c;v#RmAbU%qjT22@Zq)4W<$Lg?k$1~2A2eEyhQym9xn z$cboV9+hZMMh`S5_fn1GR5-nbY7hB2Yc{=2@x!9H*4EYV8q%B5|L_G+$sblu=HC_* z^Hjt<;urg_+EGU^{u#^)jZKiRFdyV40oz9Z{nC?*A8slrcL;b19Hu<0)o`DpX4wuH z?xwVbNbWiTL^r)cN@Rl|;ngz>h4n&%B(PhYg_Z>N>AYI3)7RbRdm0_iZ~Bw#qTSO- zuWjf4EcqcG&e9`Or@n?GdV^wmQptUW?lQJB^#yA?g>hZG@gjal2f9s7v~#P@=Mnz? zZa6pjwRIq~i{K@frhMx_Uw-Io-ix$Iklo)uS^Z%vAZc@3C^ST(f5N5n)@ne(g^0_| zOyy9;8(=W|C(f-AVweYD%2=lT3SXdcS8q^$(p*VP!)B(@-a+$#xqt(hnUtvbq>`J| zi|pW=dG40+L6qBXmaY9DWGvybts_0nQoxb8ap^M-rxb(m|lAFodkk5{GDcEMaa#M_j^yW06 zL@YQN>3F)T{VSZ!Un}Gl_PLu0xGeVTlKKS}hjDkt#_a~zid+kAu{_76QwM{CJsrK$ zW9tU)%deB3DohQJ+i8T9RaN#(hz!IulRfJ7Iy8@`^c%6I;k&DxH@oFurZ3^hUxFB! z<8*B;;-Ch)bN8qjP~4eYd&+Qqk&qJ4!2yl1r<*c?%#E4#gpP02b7p^z|y!!J*}PCwy+WhFUS~k)&5yr)5av(qMGtAJh#Uv7vD! zysZCVl|bHH%<>ps#p|RrTlRX|anTS!en+aa#|Q1bln2>x@qQh;zqX1$R!^4Pk#`a> z^bd&p-7Ttlt&OqKdm~c`Q|&X%X@d`-e!c12n~mOi@~RBm zU>LQ;dCM3g4n3EOQ!LSc)%Wdd60)&Wt%Vx+nNfiL$@Wu6AXI)ovv-aQmk*0o~Z-T zgteAiR)+Ws6mR6GYk_hQ#rbbjVba^5mwtjM3z~PbGS3XXbwWeNuI$RZ?kPEPw;g~~ z%O_3d^x#L>B1-Em>z9RJm{}(?S^vTEhUY{}y4WG1K|p82#eN27l{%gQXI?)@8q9!X zErl^LQOq+8g=y;b8^n;zl=NUZ{EKHPd9rcwBab0t03BluiEJz%DZReyceq@=QK!VK zRerP+D%m~~!MNtMd9vmZprP4^UL7<%cdl(vT4EJl#s`o_J7yo3pa3xOq~fhbjd~Vb zwIeGN%1AqX53H^_c|mO>KQZhTXgH38irb;k?PRxi`%UYjA!cZuQD+K?-iLYTiHN~a z8TmfJE?IdYlLU_!c;*95#SfiTnG!D8;cq>ctzI;0V^VhC7S{f5aIUJXTzCO&_VDhA zoTs02>nrmHFswWJ?fG}6R~24da-znKOvrtNu){vEOZ7K}^7TN)ay0@>a+_YW_G!Oa8i2Nk1rA7)UAo8ubJ**o|=Mkux9rf_Q%PyLhp+ZIVM45LD zcZ>Fm_~gbM{6fnxy%QA*nr3e!!7QE1Qho-8{=J`@{wO*2^hfn6n1U{EKrw99c7zg%K$9T1>eo%y@MzSn!*rsc49q2No=K1P!CyY=U zYS^CP=j4@k3nl0pNUyr*KcB-8wI^o4vc*+GXTfK{YH`=eKuSzcAXCHZfpJ}TuItOc z=otd(06hZ?dWMe*HB6}BUTb5y3`#j_@iLqHLlJUZIw->V94X(HAHs#{Qg4x5dLLai zMq3GhkPhE6wCkGG3vK+I`?oQLIYQRma&S3R!tdd06@F4apB8jb-=!O;>{k|&2vWOy z(uqu~At91)J+ici5s)qBcHKEMR@JQE;mtF)RK)eFD8CsL%x zPom&^RQCwh_W2KF0&+(Saz@q*V zD|h_!xcx%4*XC!JS?#NI?USdBqnG#o-~mdz$+EAzTiiQq!rJq&o8XwsigEA8b!&HI zul?4P3U%gDbK^HjQ`oE#+m|gDD7^RW&9YO^MH$6Hsn@UJ@Yx0xR+> zcYA2;wfHWx^!9FZlnkh>7Qr^+{qE59s zsBF>2#Q2q3`MSEUP2hJG=}iVjh^-$FLupR}uu84i<#6$KW&GS9XXS$-P?>tS?V%zb zI}>J#R?q9%Go)NM3T1RV^imrn042xqvLn6YG%tIDAFRs`duD$J^HK*2FlA$} zlL4&~^(LU`d7-9_vOS@pYZM1_!;!8~)>Uzh$9U_%tKi9(d%er;lxNMW(oR*>Z(29J z`=?_b`SvMF^6RK#j7dBSxBY@`@sB1<48;S~nbNziM%w&UwRFD-vMUx346Wo zSBH{+h?qv~|EewhJDlJDn~G8~z$(e{2Z~*WE*qq&2|fU4Zl^tMx0rbJZ?wZrGI{$I zL+)AcFi3H5zyLeeTOc7;A9o|AC*Qm9*A)AwWxXcDK58~nr52p;4O4x&T$+cWX zX8L0SQaz+{#Cbm>zQ_Rs%v}@{A*j2~A)gk+ZB${Q9v>3og4(3AL3#sa!u1dB{f<_4LoJ2 z2V0EgCJ6INngTpO1l37V7z_^xnGm_SlLDL=>s{5K+P6DaQsDMfnh#uxy&pM&e>Qg?SV^YVk#RBxp8V zP{w>I5kl7(Y0i<}AQxuhas;HFna%vhS$Z%oRiz>Q>T}VjC z>!@0i@gQXY0rlWZk`$8!?)Xk0q}ioEZ?b#bqF`?b{9)ea-#tZ*UNs2KGMOT$4KuGY zm&wYI;ydn(b8yUwy8a9Rs{JM{B99ybajhTr+d25;d9)J93v)Y+X*1Q`R8)Y3fk(WL z$$jpN+x4AB_Wc%%-NEN9l2)jOL*xXN)q^O1S!7KMFe;_YITKHs?`!cc=J%D|2orru z!rJYcXxfk$57Ds`@?ti)UZ1p6@=N$zEE#iP-J&adyrp(`l;yO%;nfn_P-CZ3dG_#W zUZT5PE{jmK`b`07z{9!wityV>gkxW8oy4E(G{W|+e(m;Tn91}+Fp!w4mU!suv2E_$ zJiVAs-b+&swsx4hZpkk(Mc(iLNK|J#qvDD5autG&>JUuD{3*ULc#!Z0dv+;n46nCU zVfU8rE*jxKAZ&Q#!8cp(N(j1CP`P?~Nm?g{k;U-fPXS|m@Eiu=t7YZ3#v9$NIY!?1 z0I<}voh83(w`KMZ2BbidAz9X{@s1;mj4+0PUWbcY(zRPQ>f_QLOoBIASw?N=fXp04 zp*q~FjnW{s>t8wc$F*XxoO4xv{iMtUk_Vc!tf{&~IdYS!8aSd$fRFVM;6C(StaF+> zk!NjYG9U8rCdFP2H)+gjn4j?Zz?2D692LoKNh{mQ7A=EqQG!-xoRD3wUW~Enxf(Ka zQ?#blK)>ojwn%}y^`c$3vH?01vhL~P@-yelppyHJ=fYx2Hp8!<87!<*(obF|tCaQy>J7($jz8k0NO0nR-Do+%Jh!{wW;0UWS;~cuo-celfb6*AoleI3JJK-!LYbf0C-ApQ6MY6 zq@Ku%55^;WCMzuzcGnNgFNa>=U6DDRCFtowcvRV`JUQTZdHaysxd0<6{;GRAhg zYfV81{COyL&rb=*vq9T>Tr)9 zVRoDv!hK3H2{3Qh|5T_A*(w|z!hVpp>rw5i-Rq$2Y0&$wV1LRkI-(4TSlGs?H8Kgx z46haR8`zqK`K{#<%#~yqa5T{X^kDarNb-flXdsZV<08$Af&NDnU5UzYo`B6yIBr!D zsetw$($XEi8Ji-R=k9x>OSQ7nvP-hVT$(ZXnLD*h;d)LifW~1cSyK-CJ zBvY)+=vZYC5b$csEiGk}G_~G-2a$qtyP;#LFIK{F1T|y0X9gjfp4@|C;A~z0tl~CZnoo5( zAZ}5FIPK{dsuUkrU3c(0{iGIP3rRg*?G`d9iJN2Y*G%-7yq(~pocb6jfr-fP5~!qa z0MZx$I!f-&7kJ36|9qQ>oP$2^3EA@l%)$?Tk`g;Q_Ta9cfeL%zjh|Ol(>KTLmeqRo zW?HsN{E3U+M8D2$RoFUdX;o-y>|zq

Cwy)4Y(wR(f_@`dK*(T-BhJjrvTgTx+j6Eevr( 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 Ixiyy#N3J literal 0 HcmV?d00001 diff --git a/docs/images/biocircos_one.png b/docs/images/biocircos_one.png new file mode 100644 index 0000000000000000000000000000000000000000..610b680fe0e985e72bc4731d616ee8be59f32a07 GIT binary patch literal 235191 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%0ACC#<{#rm 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

    %f8F)}gwhx+MwNQstLDHBtNBdyGTItpW}KKnQ2R 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 Bw=@6% literal 0 HcmV?d00001 diff --git a/docs/images/change_summarize.png b/docs/images/change_summarize.png new file mode 100644 index 0000000000000000000000000000000000000000..f534b8719c3292844ea5b3ea16713bf5145f373c GIT binary patch literal 15795 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 S7j_sMkds!Hs*o@V{J#KXOH3~S literal 0 HcmV?d00001 diff --git a/docs/images/color_biocircos.png b/docs/images/color_biocircos.png new file mode 100644 index 0000000000000000000000000000000000000000..c5fc424e7a0eb87e239fda25defcc85c68fecb2d GIT binary patch literal 46167 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 literal 0 HcmV?d00001 diff --git a/docs/images/data_manipulation.png b/docs/images/data_manipulation.png new file mode 100644 index 0000000000000000000000000000000000000000..d1de885accca637256defbcbe0767b0c1b7fd010 GIT binary patch literal 43065 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

    HDG}Zi`k*qoeh1*)`$n+kH#? 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ᧃ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

    ^tUGU~C(YH}X!_gqc*e`phYj>JxIz)fA;i!~; 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 literal 0 HcmV?d00001 diff --git a/docs/images/deep_anti_rates.png b/docs/images/deep_anti_rates.png new file mode 100644 index 0000000000000000000000000000000000000000..3da72071ffdfe62ff7aee696daec63a742887f28 GIT binary patch literal 35184 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 B{@(xq literal 0 HcmV?d00001 diff --git a/docs/images/deepbgc_filters.png b/docs/images/deepbgc_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..a83d66239075330515e7cb8aaf73909c7d504338 GIT binary patch literal 69472 zcmc$_Wl$YY&^Nlc1(yVu;BLX4;O_43?(XjH4#9&v1PH<1?EnFSyZd|oPu=IkTXjF) zs=HOxoU`oN>FH^i?*4U@qPzq$A|4_D0LW63-<1IXQWO053J(ds(-fua0ss)SR-&Sc zDmGR|06?AOm((K-C5$#404w|osT6~S6OjgQ&1f8qhO{g3Qw|Gb=&y4Jfw41D2Bser zK3&7|6dW4T)-PqW8ejN^pZ9$T&Ja;-6H^Wr79JKJBx&Nw*}?8;68p-tRZA!g&%d2` zNkh!wd$%Ux9b`WCkdtS_m!0+n&74Zd-AqOKP97fT9D9bB!%N<-(;xM_w;!B(5}5un zjlNh(tPD>d0A`4E;=?x>w!EEuAanr|nszxRZ)Wpp+!nT88Uf6LW*-p_!JQ zM$l#2m97!bpf^9UL|@{TV|-oU58x{>JE#5bHfiq)x^>0SA&7Xg@a#s;8#xLOmrKc( zd-M(*#hd6JSed<`qV!48|KwSHcTkJt1Kmy^(^$1e`2a;3Bsr1Ot*Zl_s@hpMRp=K=0_|t%c0g}U8BXYv#Lwq?eROlUcV(aTAbwn_M`7lz)?`S zu-#1gS@5lWty88%BBt7i*yeI+X?pHw#EyV|=P+e-9At@Mux)XRl4E-#rVeYfso~f| zLUUQ)5mV{f^34uZ&gjeX>qz&t|FjRK%Tzu;5OwGdle2P=cdLWtzyq??_cytl? zN$dZ6aG^?}IjV2w5*^qM(^B^873uk2-8X2A=WZ z+wuiT!pgRh;j%#Bqf7QQg=?7xUP#)7M!RwjWZwANqm;#|9Y%9+*mThc$&f_7p1&=Y zoGNVX-Js<%!k=%z2BU(blfn(`&_E^Es4EikYSu`Q(YD=pvB;muo6;JXn3D6JEvI?C9L$})t zm93n5QwM%5L;xUJ$ybmZNfU2k@(JH07_?<0U9i$=HS{xa0sUT;mmhBBHUpYfL*7EP z@hiF@UMw-PcfgjRm#xjvOlMs)$24qpg!^M_Hu=1=zDi zv}^$t_)uswZ|8$@3aE5fryUPp@dMB4bQlJ3yryybjfI^!j>dhH;zK8C9` zWYv9`zWLRhcMI?gO^)v*8e(D-aNEaYv1M(0hZX|SP2EEOiKfFloK4iZ zvPAT{Nt>-nX?0akj%jbkCJ1WBvjY4;+LY@3{GIsF<5UuoWi)`M;<%%{$WYJuy%Pd) zoFFG!{JdQ%mEz-Axu958hH;3;&@bPQ9;oy&jFDqg7R)S^OHlnDl(cEC9M7Li-N;bi z!T+LdOpmJNJQP=+T%e8ol|r_G0kqs5Bs%Nq6Z~0x>llb7tD&x?I38NQpZLq z0bTZHVXc2&zuhCm2tvr7w#Vic{TJVEIm4gvmZ%%SyF`}&NJ(uI=BhGC{F`NgiRN0O zdo$7{#XC#>!H{O55;po2q39Tv2?0(_Tbixjk{YzYLRTA^Fj4=DerT*inF~drNYylf z=_1m(<)4qtE-_pWDUM~&zC4VSBF|H%4VyPU3GO`??dB)c4#YP^%sh&p!>AGW9a(P> zCoYUS28U!#l7K$fe)Z;g)ITfNaf-1G^kXSvR7hf*$K~VjJ=S^coT$B3QGpAH0=f;# z)AnZN%Ec!y%@Zos9u&3e4%b#i9uA;l_NQV zG;ZLR&AU{(1$o*f9=!ydyZEXy&4Qbv|1&kxL%5T?MzcH>TSS?sHnR|MUuE8SA*)*+fQ_ z{w1<;3iu*`9pes(hPXKwrS~UByciOwT(oLpD)6jP58H5i!AvY`u=CLJ(GXm0T{qey z!pmh|ebwO{4C!8JaFN+MhWhN;y3xS&*K5e(JxmJLb+#vG!F0lhSr{kV7WGa+6;}b2 zq}Z7Z=Q`@=Y28*;^Ww&X?Y ziU9x!!jMAi`b<5Yy;r1XmM^LzU;_fjr!TrVg{N`>(K=OALtl#`*8MVIhH3)=1m4*@ zM7sS)*3Br$bTqQ!`pVnE`?B=|Dygi2Pqz*(%X?O{Is)w(w%zyvol$WF0Z7^f&r+#q zqCzLs+hMFSTV^AJvGy9NCILx&`@B9Mv*z0s!k5@tpn5AI3?v@e<}A&S{K>v&4Y4Lw zr4amv46l`XM1+a_i}+J0Y(ak5SL8HQ!CS?x0Q{x;Zy)Vrm=$uU3++U6`c;*A``>}! z;?MGycHA8OP(Vv!{@Q6F)=h;Fq>#QXLr?QF#(w8D#$sY>>A8Nzjnr^@T!{KsyS4(< zWs>6s@Nc9%*(2L=5@e18FScsZ3ehiD+&ipa4r%x%=YYHx5QW5Z@>U|=522b4CkMr- zul&5;4E*xPJD5X~e|#H;Az?SeXQD{4s!=;pW8R}J|8AwLp$_I>*P2H)NoZX&-Qrhh zR{k_n{w7G{hylL9Tk{_C5l<8UB>jD3G9$`l+R+RliBKyT64mGR@K4Or>}^M-U4Bs| zvN=Cg?hB5t-8zH&5$cz#M#R-4#RQ>J%zrrx5OMR=#D)GE!Yx-bp*^)p&lDg|-uvmK zWd8D8ksaacPd-lM#;ZOCK$F7E@Wyju+t#GPku1uzgq&y`JCtt@!-0@#iZXC!k8Ct5 zO_M)A-iDu(NkJCID8#9at6s||sD>hVKw%x;iG~{?l)dAu5tOC=(12;DmB4wlRBJI1!Se#gB9fqvjw1uuuWqlh4K|Z1Bud20Lf7P zUqC3*%O>BRC^=CE2>g|A3X$p<4c@vWTxeDz+r{X(8LenZZmURrCdA~COsUWEG^J{BRb3eYkL?nlHjIuy@?4e9<}E(w3S~wQYoU{ztlvT&7C19ChriZ-t@zvt4FIGxkw9W3`^(p_<(MiWh=qMF zB%~2;{c|^jp{a>@HvT=|#j%ekP!C;G{oZb3+m=k$TBKxv8Fo1#$d%RdQ1d$TC@k6OaslkdQJSiFOXE;N;52BvJcvPBUL= zNxO;5PgoNG5lL3-XyMC}z7YJ^Jx6~BeBFwl5 zeig!9c}6RWKipE(VG`>X=g_#(EkJf56qugw8PX+`58>InyViv^e$!PO3oF)%^N4l=e)-T9ya11Acjm3-+W^(fX-#w>00htjs3zy{(*Vu}TeR4O6t9>p0$dp-{lh&;NeFR1OtM`!^v*^^bm2REwSaa|iL|G>KP`DwsG1|pEK z^`(y4ict&_7Mir)$wL&1ZRuvSjf^*Yg)7!w-VP%e{6u6UCzkmGNGwy2b6E1Z_M@bSOl&T8 z$o}D-x0r}Db6)>urm{}W!hr37LO{F`QW#xpgAJhhEFP^1&T*@mzAaAuQ4czhda`@~ zp(Cb=Ad-Af2!~sw57$9K#%nz}>rG4+7WE}Nc`>2(!*z+J3&5P>)q`yoE}pe&0@g%> zc12a3l7vVGDC=bdQ?Y5SAW4YgKY_$f3*L-!X+mafztsjQ?iEj-OXqC5=mM2>zT?mD zK64b_GE$^M0|(yyf`uBH*6Rn(w(cv$wHH3eU+lCk5+T34^Y2G}ip(O6eW{$BDoAs9 zH(B4N-F4_*K|4!`ue98)euob96}#f1#4TS*9DeF9fJ;1{{PRvkZdT(EYyL5YLl@17a%Ez9U`%U#}HkUPt)qa_;~nCG(rWh1YRC1U&^e-R}@-A?1% zi5c&>#S$({TpPh+HM0Oa&h_WvkT+%)g zSkt`QEi~^?rwQAuq;?^nicy|?Q&XSZkIDNaqSrdR7cfS=WoHne+GmRZ6J;qAsrLHY z+}hm>4n@mDqI>-WSIJ&!r#2McZ&1#xF*Y%Bm=Spey_8*}=&7#tP(G$ZlmE637LYQM ziqpySU$W#n+!a&KuAix8Y}nA@d7Ld&oh`ZRvX>IHVc!!ZODxT0WKXT5rPC=P)TS?L zeP642ukAWw2#Ca#q^YIh(BVwSK@OO}o&Ezmr9dvpnxTHwBIcn@UmcE(By?2sjfm~W zK>vd`Vz7a0eTovkGFSNrmh~os_ii4n-Mi$KY&ql85aTYtz*eu&_^f5F+)q9!X{*J! zwPN0h^e$JEiIgLo%*NkZOg@X7w^Wqwgx&mOlSsKxnBg7k~ac z4pN-xqZ0W?=Snw5$B}M%BlJ>8(LMQ@8-y`7p9b*@!)8d~Z%bT}XDq_JHX%z=_q>@W zJ|I-yBG4z(H9WsSfJpr5J9JR$9AeMVZQmIE^VKFj3(bP`FpBby|Ku_T($lVTr=o@b zoRJPqdkzHgZrsc%`@!jIlSUVE3QLOr4;;U@DA_xnu6h+CKdTJ8Ls4Heku6hxetwNp zbQ}1|?^5@cF#+`nR>a+0MDgyBiP26|4I=P!}i!)|4GVrkY|LH(^!zSD1adCcpY;9*p_^xhbWaRFC-|2QjIiHSF@Fs!0M%ZOr z)jz(QkBtB2=0cC+DTU?^U*yyB+sc&vtsO(UtV)obTu$||XzsaF{WtR_D%)OzOylW{ z@{deM!jiMD`ag@cgrv9MICq5FeICxcySwjBmJ`wqFF-xud5O4jqLm)PuLrB$&)PH2 z4brVaw*K;eHx8(ikIvRrlWnNhiu>1cPRkg@!DpJ})Pw5gwk>&iaAY#s|1*;s1i}aK9i&zW$g}-695UvzE=0lE~gyvd^I1t5VFsRP`g- zhn1yzRe6@*4MpXa!ch%|zLg0tc&O5~OdT>vW&_F*GK!z-_(xBXr7l=2hgZw3Ry{CX zt^Df6&)|z3Vi8c|+}+%2wVKRhp>39Gj*gGBWp&`CJ5=QqdIm*j(k<|M0xmh;r+V&$ zF|jL~J}xE&+{cDc#2J|$Ui(kpLfV`xCd+eDdMgU9|IA>=5llel1RsWD5?0(zPwT zKhoZE($_9z((7^-%mlAg^WHGBBbmr=3Hn@WrR5CmotNGC|@#M7|yjH z@Zn4ll%#FsS_3MXv46_l-_?~s5-{1baCPh4UiH+iEkm-TN9d;YHWwf3pA`yyuF~&X z%|QFrQ8n~%$Y^8Z<^8?+VUzLWpRz?_M53A7_N?AFn~@~WDX7-VF~s9Zo&e#n3xm+A z+g_c+>epHPV=CEGV!v5TdaA|Me8*J!B!GOdUQOde;CFPYyIe3(%;$tld2=H7%$H9rY?+VlE={$0TV#8TCUZc~*owG6mKf-<$r zAN8$En6V9;BpQe3{y)dc3zmwYLT8ryCvxcrpRB9jSgT(Ivme^WwiyEW_!nrzH*>19 zY{os_C0txg;l-)#ko$zLG%u{PL-T zZ&l<=-n^fy~u5-#44^yyqr4oi;7((%yltdUND&V}Ftop}%jL9uB*E zSAT+14~J&C{}X^v*0<4df*Pk*<@n~1lL9y{>~7#L^Uofx>o}x5Z3yR+hu?3v`%O*8 z1zXvefVpxY4s(-hvV1jrKd^mw#zcng?oelrv+Dkwor7;9yNR3=uzw)#fc-MOwwAfn zP|dw^>bCjy=3{I#8Lu?}U1ZDEz>frrj8_^NDl;Dug)m5ll|e$%L@J6EpF~0Dxi9_B zJ)BHHP{;Jm3Y`KXu~O!oZB*oaX8$XxBo?B!>FWH^>=9Q zVOITp;joxH>V&Yy$@QB-~v5rE~q)0=+XF0c&T%oFoarH*eoU&zUm8ghT zojdWU8{nN`f!xwQ>>ZQk>S{Wua^yZFaSXR zbW-Qiv|~{<@TM}DM6kuD`;DTF%nR4d8Uv#Ufa96^N*9{!;6Vf;AxK~^j>98O2@)_) z=0Em%qQQUg^h*;40wJiZrZlv)38f2er3P`fmW;pT8oH7VQwA2lSZB<-5|x%{U7OCl zIjj6glYtP5{``x*Sttp$PwB!6rD>A}K;sf7jsI}oN-P#%=VAqtizRZmzow}4#7IF3 z$sz!w^8_7%=g1$SB07@K5vCYg=`hbz?@%GdpOZIeIAE%j?g!wLD>MZX)NhGV+2x=H z^I6Xrnjw#I*BO)Xx+&xX_drs z{fCkE3G56L@-uBc(Efn9FohTr5fEBEmZPpTPkvIOHz&h#fCRfTOcdZ325#jDcQ=t5 zA+!Ikcz%?d?a~X=;lzV#R9UlZ&E1&ZR>nZnoW54yw+}14t5*0RlMeTIll6iAa_g?1AWr)= z%Tx&J3wE1T&W)}TDRgC9nN7j^df#t|LPr;KNG}GUAxD5F{)&qub(yWl!smUnJbYIw z(DXJzKYZpW5(kwUiJe9t2um7DlpzsB`;wTDnDoYn@BQw zkcps7xw45}?v=`BO$yPKR~C8X=;cYiP%=S!=-gJB0*6nwu~Z<|`l)>^&BW00tI<9$(s?@GxeJ`Dm)fg6oxc<}{0U1wt662v5ja{au!!etd*3xR-F>K#0)9_Sw zcaorfT0`ANP}{20t*q_w5P}^~(Q<#5=3WJIOK|S?5h~)e%GpRrCju$hjyjFxLTB@ojcdFj9%6g%|)u;Iso!TCSXj~^IOUBxZzFTbJ zAIlE4(o3C7IfRf>mFg?40>%Vyh>a7skze0~yBeE$NE7EE^PaA%lH#dCXE--7atUfYN|X*FClpTUm6jR2 zyXzuSO!$g_4ih?q4X)6$fltWb$jAKx^p>;rYW`gCExNbg`1}qPrdh}Olx{C7B)|M? z>bbzsqCKVvJcO+M67?T$cB87h_=wfD&r3NRNXptKz9U+_SQZv!q2{6BH~}26iEMoV z2bgTmOVlFpq_=AQLXl`9mgYk;9-aIU`eALPfP$U9*(4ul+RB z&88o{s;<3iZMUKC{1nGJ*wC9{V4_)BeoIB+{ZuM_c)7~3=vS0MzMm>>)BXZtZ8G<6 zlgqIPStRVb%}yP|);1aaG!z6S3z3>XV z{=+c!Y>zZX{qPgTgU%!^u58j5HwS9e4gJ0oh&$C7FeU>x1toNJyFlBML`oU{gZoz< zLlIMoz)<%fe4$KVVS2_&dP1Ilxt_^DPT%4z*SreFY4Twa1tUezVRuMcWss{oa68mdMF zhR_&x)xNfr1Rntchq%a&%3a;dA_ib-_rtqAe}lH*Hr4T;EMbfzuIDLjk_pJk1DRlnaaVndm+X9XLA-OB2lu)j4zw65msUvpw% z-V9bk1AORZQOYIow@6R|zg;-T)*=A6Y|Qf$W02wc0G(p^MmeJ(^oT1qlv>v+HTK+eZBp z)L{WK{1vT})#2Yf!umg$RyBF8QhP-A~z1DD^=dHyGkORT;%!^SpS>xRe)vuXSo8HxmI#vA7>*0tu>59}V6?Ok5t zU6j+T=2O(lAp=ni%F1|}fB)0$UwDiEW^Yr|UNre(++!h#c_5{2M(;PFpL{-<3%{_~ z@g~bhn&_O?yI0|72Ma(ZleYEL(QKeJ_y4P*RgwmP6{z!04UnNWCZtq#dQNRljo6c@ zhau~n;#)42t4Lup&br;#v%evWHXo}QKwt>txOBbSFynf$lS3J)nAuT{PE|BKAlY)} zw$=s{GQIrdux>pD^~KDGG7ENj9F+crP7=FwabFETnwm@x-NJK4nArK{i+W+R88*s# zSuN@Orbdeu0sxd|t_3vvbXcCUW6>nPe?AdGD2ySjqs3&9s_z}XY9?O!LRXarec-b? zc_~!yz9eX0`n>+6dl|=Hq#Wm@Sf6OJvA8Jr39h+rPv7l$4j&AzInk?s9;EUdQ9EMD zp*>$#dg1*1!AA}Js^%CB(9(^=?nL=>Bci85osL#^i&1jN($#Tk!#ox=!?{jgk50LD z711f&QoQ2Z6_52bNU*8LA<`~?GVR=49bD!#sK7?y;GsPkppg#fQ_DaS`Z1BfE$z_3 zPDb0Ysz?sEBZ-s(4FvWbu^hi^r5zM1-Ubd{{bJn_^4n+f3#oIFb}K{u zVhK<)rwQ7#mA-_L9R$o`GR+)WN`CikVR}vhzeNbhz3g}>ORr_MbV*@gQswrDD5Ikz zNXV$f5LlkJ)&?UWIQY(NO-G6gRMq&+7u_Q^1U)$J>}(GaI}8M5H)~W(ude<*A9HGg zi)7YkIsE;hbGIqZC(>TNeO*z9!1$OrE(4Cj|neHS19s&SS z?ta)VJZu*vZ9>R}v7e1t9S<#l#g!U5+jg4a6==}|%hO!2Bu9=dcDGSi@i zlC6xON!-ft=arZ@r>gP-E-$>C9kD`7Kf)&S(PTiD4RuNq1`g48299ysW&@9J;}sN>}l2-&hPZat~dI38B4wF`%?@*G5&Fbu-cPKDf^6dpAvXiGm_2PtUR0^NW@HKB zC^sYqHgm|)AvE{oaL~2AL#o}u$s0-P^SPamCH~$VILk>7tN0TLZ`L(S4+VHaMfFuFh|lhPn)n9w~oz2xW0qa z*-Urg6l2Bfi{}}^B+HrVpOt>G003W$d4vria_wz6^7+b@qb|D@0trMQmE82%PX-9d zXHL$hM2FS(22Ihxx*P<1q(@N0XY8gcOi0t&PTpuanB>3fw@&)v4+eF+QoF5$9N3Pu zK1UpsI8o(GN&O!uCSsLGNymsG(7(RtG1j6ybw}8)>A>0+mAnH;g$?#zHLta_#`Yo;;S$fg<~ zv0nMXzsvZI>09U%s6?h~$~?Fi8jAOUq$J#}gcKJs)N^Fc!P%B|KgbMS9C<2h zbv6#C&549KMbV2jdnUjRCUIe%$l|TFFfr=bGS{m@IYtxPS9PW=VV_tk4n4r|Updx5 zEf~DSjKcf%$kC#;!o9`<(PW~ez#&+ST$#~qTWFDjUg-0I#Lu)=01$PbUj;hxE%84~ zJ3OaPzPKS2zzV{?-tM9|J(6o12gC~$t5|Zd;_^dC%g4X>tS19&%6wcX!Qe1Z-=F00 zEo&&FTJgyBPuCc|44`dtWemKFVGwf1Q1`^MZO#nA4{nfpolVT|4_(ekNT1TNp?rRM-0n0m00?w(CSra*13%6 z7&d^hX<|Rk;J?LNbUEv2sX*S$WVqfipIzr_Z!q|0CGIcR)I|#OAN9^p9KN|QBu8TG zu8^_K{3Q-xERj#)A9t6J^bA^ZzlP4fV^TX3(@q~cj=M86`-C1>osl=~m<|!)6f~QJ z@O5DsD74OK{(eNjd|mqmjAzwMlt)W&F6>!A+8gNSa*K(dBC;`i4$oC#aLYN#@ml1G zaEXIN>9Ado*ouKfdr%iViIYU$|EBIobh3GRssHZ;PUNtfIm#x~)==jjz-R8 z_2fS_JZ_=a>HZ(^3oXqAB(r#C5P{T>nIJP?A4sR9g{?~B zG7~2nrZ>@)_&wAQ3sD&YERXDF(PE_1WU68(B^$4mowbhPwjNdC%L(3{1(C2|Xv6it zQb3^T&!zWE(VT~7r7%Q15_F`B3s{+<0VfEdB4rc?oF8J%1VYBX7ET}EdjCYQm!jEt1>DY46)74> z1b>MmP$($wxEv-3)a~({*+gv&YsLz6h^z2Wp~vX5wHfY9`;%(DuCwfjMY3$!DaJZ> zpE?s`3C6jMwcypNmn4=$lbD$rh}jL7&;S7AGYy=OGSYBogXrNuQXPv08R1y=g{QUW z`ZUUt*=g?x3GmH18DUdAgWD!!16~ge4g1#mdfP9}wfpRHkj)Y%N1}(GwQh=#p?C*Zu1e9*)z;9v4LFpTjQ|r z<KJ4b>?`yZq=!n4;fAm{L#~U z=ykPyrZZ|x5w`@M5Z0bM{ghx?anuILk+hg$t~-_R0A{Z*1s^aGuc`Vt58nu|MkpxK z_c7X;Nz(opPCPu3JeMj)J=8j4E64S2uU?GF1(AW^}YoBI`gHeJ45mO0wMRwQUCAIWSfR^RLXUM>bN5e4Ezn?gGm)VfD zzoi+2oewG)nIW1kJP2aVbLwFK@~P*vMg~L{3bKU&&|uJLXbVEW;IC|!Dh_3X(D$Ip zzH zzZb&Y4O*Hsgk!C4zcZs*ud~Tl2bpix)Ccg(GBUX>sU9{$z`I@XK;;cd+<$}Cej+uK zwx?kngFyo$E4V}g97DTPcOtwoz^B5Yu)%f74F03$RGk=L0(1|0c9yali zql4h#(2UsY#KUua4|bjHTPp<++Gtxn-mBdo!Bmn_UBH=F;eJu)vmnfkXYY2T8v2p-h1zx4IGl zG<(_fRQuNIvt%Fp0~HRvhV0N8c3h5FM9_cABIS`YEvaeG}{%aa>HdroF0_T)0kG;LUFCYHj8cF`|wvzwnn@UeYq99f8>%oWB6W3^k zcX*%8+@5{+jYH`T<-MUf_>E1{3JMAq78bN=ot{^J$s4D0IGH#(Ilr1D>vdJa4%mHM z#LQ5Y2++nS0?g(g^jB|tI@P?`rv|_< z33emGkF(WrgNn(M93AKDkF#h?qILD2GX%f&YM&B-@Wo)W&vLM7`hBe9pKi*-v3iitW~Bj_}o7n1dti%R~(__6aRail9%Ah<+NFL?gS`I3yZ%6NBSs7nlU1fXz93h6f{CLXZ3lP|p*!NVToa~lG z`EQqDGkc3>^H~i3OCw^6>83F8uCJfS_^*+;EjWh+R=;O>J2F0HC^sXc$1l*T(VgH*nG}0 zcx)R+fhWHUDX`c61O)h8=zX;AMo~etT38(kGUSCHQLDU#JumjX|F}>PX*0em;hcmz z+=(w(d9GlK>gBwDyYZ+{h5?JZ14p`9g+9F8e9FioI0qZYxezlElyD))?6*$}UiL1V z#Z<1;LC@cZo&(9tC2#O8lO#!UjfT)lahf-`xdu!uJ*FIEY_Lf6u3leXlVgmQ`nVk# z6lA)dsq~1C6kxW!9gLzXxaP@40RU9NJ%_~uivUXwg2^JVb6hQE)&Z1 zAF)zUm>!Dx?DKrvm%}2&gJ#V29V`qbvQ~`~;M?<87q3q@^yB&5F5w4Hb#;uu$k^D} z=>J^P)6)|Zxx60d8yzn5f?1Ib|FJKYb(F}62U@?~ap(4Ep4jhJNnT#w-Q8VXUESTC z18}|D@$$d=JA@@BMV{>X{q%zHzn#|DB##h(;SC;+CzPQ~S=RH|-01lFKtEj|_%TXV zkVxJER?wQ78n2swX6EL`^#2hkDocrWFVX*1B3_a_ISlEuJ_pixqs4T-8f_XF&SpXi z=5tm_MTLcNn?h+l(tqTvG??thf}4WoUBMLT=-^M^fc3Y_aYv*xSE>bUp3t)8F?$n! zR#Y5-2_H3e&Q)TLD?hq9m~Lxp^YHK}5Df6&-ctrsdq|rtL_*+cb=i4Rmt!fnY!L8v zG+!~D&z~b*_EY7*WOsPxNU)|kXbs00p_qn;bv$C?Fg-f@<*339S@ps?VMbtaLi*|6p?w03X zKw1D&up@Y=_!dqC2#f(-#K*$N zot{?4E#ze!xfwrbGp2LXb$j-;z}HP9&$O$%t1G?cPs38%49*=HKb3-QRO7DK}xBH&%vsF;E6J+creWWoJ$jBZ^{G-avI+@CpCdp;9kT*A{ zWXX^eG%#mm@esF@(|vC-5CE@r+=-j$$zbssToie_IZz;@Et4Zbo62IN`ucS@{9@z- z+>di>O1tYN(1a?C_9iG51a4216QNDxarq|;rm9#hh7!zX?@%x&=+bFLFM2)RU!S6; zrqQ8Evt+>#s64@d-lir@hXNt62#Ou8Q{gaZv!|_7QC`lR#e8OpE?(K(oNPS(Y~b5q zI+~2I=z6-+0A68q@t(7nz5RK&*A4vNIi_V|es9;KxiU|#IlYyE z%H?lIvF*4O`8NOB(0Wnge&fjVFYjq{5n=it-h;UdmVq@GP_7E=%zB z&O%9m1@p(exeWhI5Gv~q%44EzSJ)|2A@ z0rZA{Q;wIuI3CH90@P_^_xJbzJ=W!YMD+tgNaMfj^Yjf^8S^+D@?|N&sh$o)$y28Z+XIj9Q?t}FO4DB)eXFE{bh~rl3|m92lR3{$(MrzG-#H9 zci;G39$sGVc-{;i!Hmq5d>A&c$#L*I(ZPr!r=zR>I3{`L;|J?It{JPx?!)kaYx6i* z@4@-c7Lv;J1r=s$XdTnFRA}WfIvz%LuUfI6=BN5Cv~m zwGqjGmh68AxxsG(0+rJOT-O^xSMQHoRl9=5f?3Gfm}=zT0c*h zPWCMX{CIt}$$`dthE6M^rA2#v!JQaX-<=6!EE^o%OfO#T$Jf4(F1g$SF~F4JSwAT_ zGl*AvPr#oy84ZD?x9qtedD*qiZ|3?5hOC6DT1cmKq<5_rDsaJq*#FT9oY>|a9e3!y zQ6HV)#hU)T^?unbX&x!^r$xr0Q=jz)MGQ^hV}E4lp6J?GVaeET)}!$Wx4A^@Jw^e< z>mK}AH`^Zh1xJ@r_NBu78Pe$QyvafRx6R%}N&nZ60Rvrw+dSNc`gv&m5jFa$xH5yQ z0{`U49Q=<~#ko!I!!w0091t^H9T`OO?*7*K6u)dGW>g?`f1?5BdhjtXFGJ=Ch4TRDqMxNisw8^TV6Z-=Ew9d`{YY z1iPYk*&HNphU4AnJMWfG4$3eprelm>BCaNK{2k{ZAFq21Z%zBVrt7}E>D0jl zo=NpR#?Nu2`J^;7O6rko=i2GeWYtY@THZYaSV0GXEY%UT7f=uLnmR=V#0ev?+2H@)M z-->?&S-+oRr*?^CrYVct)R`ApCdvFB8-pNo9CW_hw1z74Q0 zua)q;>!XxklC|k2qki=TSXHne2C#5Zy;l|HV|KsMGmCPTc_t@$2^dsh6=i ztkV&w4Yy4=!nTf%rNL}%jNG}*v0M}YdP`hDuN%00NK~8|hp((Kz@|Yysmp=E*}qaZ zzvuo2m94qg?QokB+)kFRcZ}!lc^810Gv*YX(R7qz6M+brDmV|_c*@e~@&XchyrMt% zy*{3aHl*ZL2*x_k;kK7_O_NVSKmb`;zr_N^_m^cqD$J!5H1X-(u1AtkpFR~+?XF#Hd5VH!ALr&{UbrqZz8_@d zF@I#k#H3?kmkRI^@Vg}ia(i(ys4!(hWSDI)LDeUP7`SdKO2(rkEkL!2102nl*{$zZIvFSaFssF>=TL;w<{Oz6t z!6iV@009C7cL*LJ1b250?k>R{f;$9vm*DOJg1fuByWb(dy|-%Xee3S-KU;T-s-e!z zIWyD!ZJB;P{d73iJTLp>T;XQIDsaDz#y)v8s0Pr zI)f5$3t6tM|FlYF#bQbHC7tR2Hy&XS|NCT1CbzZgQyJ`}aucO|oLg~+yBBoaT`+uXTR1mOF_utzR@>3!RFD zZb8e5QCGWMxYxcL$|VWpnq7Tvdyco}9z&KB%WPRPZ)p?Yx{~H|jd|)Nxc~JdkXJxudzJptRWnz*oeCGt~ePk?IBdezbB>hGu&puZfI`4{t`mNR_bt(LyI962+VUO3 z9h>MByXBMSm7SECAL$o7I|@9vK0n=lUs8_i&u-YiiEGGeezdu2uVDK)@tD)B{}!ah zO7J{2)J`1PxxN-(CN0nEp8;|5vYKW2egL4=l)27EmXXSmkS10iW;LbuK7#;!t<=iL z>EAgSBs{LB85z|aqvBrpZ6aUVw}1XSMy@AIdqcF$0 z+O45iMo(7xuxRwE=GSro<6%uBPPE)!d^z2aGCV}P1*7?+U208t7piTpkhTI-q!9r4 zRJ1l(ZfMi82%CT;+8KIl%wofnZ@ zHuZppv7RndF|g*aV98g8!Zl<2Wh|9+XYR12x5xi{a#B((l-4g`M^|bWqDMB*-yhk`m3s{H)phz5z%ES&3_<(O(tN1nav3PGQ=M^zAi?J#n%%&d$$B-G;Z=m3Tv@b9*ENz!}{9&^O z%NnX?$QsF^byM4?kQC#J@(^zE0lrA6Nn6qff!Fhup`H6}mZe(B$zp(WX_yk0$k2Jd zy>EqZ;=T1<{EZ}+b~6(KWXlm-+(K#2b^g{?G2)bm_|ZU|0}C)?s8W~bh(bF;N#mg~ zM6jq;VHiUTjOrF?Xf`bM=h0Ksd1z2O;F_grR}Db}{LxUW_*YiH{C~MD(Y#Mts@?X- zm9HyWy$h~1FFZ;Ob~vfgj5<$wT!)PVh}!ahH|w9;6YsFL=vwC*vtT$M_Jmm_Hop=j zUJrU*j%vAW+TXnE&LXzrxXi~7D}#3s6$tdM5D)NL08728ff~cM##QXCE#9f<=_5>f zy!n7(2v(~FeHe#4v3)1iS_KOyNWS(8gQ27$vIGs~TZt&Gz1n7V*~W@7SH&@|I;F?q z-AgJ5UaHA=gt*sCGt+P5G!;_5K>%@z3eO>n_BWCV5DnQG^xLAm8pV}nmbh~tGWiWgN|P=t>g&w%OvORd>coGdEj^t`g^ zAZ>=rZ;F$*Beh3Zj;9H=H(G^mz3VM4zaQ@)Yi1gs*c2UDC{F1628bX;hV-_!A__WY zRH|y{cVqX{N-2h9>#rwETn}9EVEBy(J1x+(zGkN7dik=rFC$Oiqp0&GX{tQRV8Q>g zE~yxQ%=|e_%g)t#0~HBm4AN`nN<)hrnQJ^ZwybGiGlk&;UfFf!{qsDDNWT(QA59CD zkXExyu!v;ic&y!|lb06_@n(4kCL^%+bgg};r4;)xX0$BUjb~J`1Y)m zNwPNq;e&%inn7w069*n>h?=a%<-W#Y-%IU4__}-=FT5-tjjykY)qcYzJ&J%j|bxV#|ou?RXnln8?Usjnt)gY zfOZOkWsN5aXxhpCxSCjtzY8o#iRZhyH_kb;50ZJTP&?6?&z zbcB(tB9c@vT1rT!8W?Kknvs;5)Ul;0rn_@*5W+WJJ*T>^Hy^STskK;H)9)LsR35Oy z1W;rL&k-ilTrMW&7j-{v&MvI3^EH$-um7|MXy+=Md!)1!gPG!_*o@SN2-J%D`-em= zTwOOL2v&I|Y1&&9JP`m9VxIlZ|G%vj28y$+CP%pKh|i0$qLdiG*;^0AuLGO> z;h4D^7Pwa0);d<)wN3qS=1NegaLy%2b;n9M`z5s+dlP&EP&7E0Is*Xnx@?=aTtiLh z1`qe=_F?x^xa4e$ru~C2kFXrBR#7}>{qUAvGJ92&8&Y;#5tn%KOp{I~b_rX#h#l@d zTM&^WBDnzIx8K`81pwXwSlB>eQug|eRB9X@G&y*}R{0_7Wap1ZZTR}(Q9x%YG9PRh zvF5fB_!@6}?lLDI-$ln^Knw$1lRPAfxX8RGKN3QqcMIs=;ODG@f z)b5bNuDKc)g{Qtf7}}L!B7)YsLRY5*@rf+!WMTq;h2LT6>v0yo`da|x;#U%b@e>}9a;F@*~ zh!`Q2EKtP-`+2+dp{p!tBUwFV2Cu2aLjz3KM@3Zfk=2>UBgw3-gO&J*_&{$ZKA-c4 zC{%tDyaYaxg(MRoS}ZREoZp+I*!X;wX&IUGowL0Gt8PwE|j zDMN#-cZ#Q5(J6GVW2}=9jaoglp5^3|gg{NIOxUxp5)YjiPZ=pjdmLzNSjb5k-8hoDHD z_VSJ|>D?DiB)Ff&o(zMAMP^#RcCotX@M*J8Qtu4gxin=||4_1!8UtOE*Oj7?y6{6 z-p^V%{2(~j{+a*Ou%)^AdwIucdGl2tcyzyaK^w?9Qk z+MF1hl_!=cmGKOA$iLj_RgI%J_ z_l1rmlVz)S{B!>v)y)2v-0I;1>-&WOx@6}M;mp3Ym=!|ll+eSCPsr#)$lG?pQ%MfF z)YInKf%M@Q<5Jk!lL;l7ZFl8OwY)K3D~EeVjJxeUJa;l60LW?D+!5}k9vy5dBMJx= zqlolZ~aS{-}wWP|1Wr~?&#{tBg(B|WC+v?0uqJ^Xojm`Q=YN?q@ zecoFlzZBqjoE9jP8p{hFr-sy>Ea^w0AuVcZmvuOb?9tj)17q53w;g6R0AfX#b4+}_dJt$3DVGnGNh8gbfLL8D5y=IwoiE-2OBDU~ z17r1PE)ZC=6fVZ|QXuUsPsTt5+ABSo~0vs_#BQ>!@iwQf*dq!FFmUbcw$CV`h7zoKNKsF`_6N>94!s zbH2=7N)@-hXlbeO_A4s?44P%gsMY7@%3-+naaOacz)zd1Z4}de0Lu@QAqL!%fc}}U z<<`?r31h$NoAYV~7{_lO$2leNv}5+-s%-)h;lvVBAs$6Zht1sci>N^OD3SHRg9~xI z#Pu_OZaPva?vl+ z#C#_Up;b?mlbn=F(YH+6wO-QDbACaiplGf&(L6mbhJN^beWa+E6{v6-Si^O=>8q$d zV;WeuFM=itSY(r;Gf749fc-Wmg8-TPXfN2=xol z{g1Jdt9(Dj{pgO+RP}wY+9;4cX6bD3W;cg*V!6XKQZ5!FV?nL1YjRqb#gRfJBQ+hz z;^N$Zn9?i1!g7MOjfXi3@|69?oH!n58uc)I4nL?KEtk z-5)%X^f(tZ%2<_qKSkM&z40GuQ^-;T00C+ir;%0T2k(F-*S8auP3ImBW%@Rqe^=^G zR<2RVole?#F+Hsh-XhW_R@f^Fnp~GMjyhagT`8d)*l?u2&7WAauYC~B-Cj|8Dmr|a z_zv*Jw_dj15!Vj54{vc#jjxfTTWMdm>lx7VB=C-QYp~i``(W)9VoA#|k}%ihWUU8Q zl`p!77|}JR?sD6VUOH{0xho}!cs@bj3tIAdbS&PimBY=mO|GNClkXGhnzNtyO}-NmivKQW>sq$cNtGm`kPP5WIfM& zWAW4RRh@Uxyknp0OKM4`eM|jnZ*yN_rpK*U6ORy0_k8y&mP&$98~HswJr%61P6Q0s zbfzkILM0rx(zFlAnDBPh1KVn3s~THf=5Bc|z)4r7?-2Y?RkK0OitICz-|MdCC(q~L zSG5zL`*m+z`JaJAx&Pe`?_hyEQG8MT`5^l?Pb!vPE7A?h!Ol%Aq)in z#-^q>-hAMl;Z*hZ^z`)h3JV9$RpXfvEuP*u4(y?=NEuZ+-MlIBSgmEu^8v?E)k}(t zL9ZsaJA0CP`@MI7#4p<;l2EID73r{LB80aR)}}d5gdk|c4*+^Uee|?DZ<{lpVai_z&r)->n=Y0o=y5u)ZSY(iVot<3h__cN=U2DUmInh8gG-8bUk%gYL?IL8R zZ2**7qj>^w|L7_O&1@+8_e_li)G!=L$F(-{k&&NrK6miT$<<{Me|ON1ev~e zIy!`X={`g7lMQBv=z_XqElOU~m+MFve3h~Vz0SBk<2J4dgEwPb9Yp!Fa@kuc{pNcD z4dX{$G5(Woy0?JW(f%h)cs*(TW=P$(WcdCKD7TRKV3OuRc8&H|IkMr?VC#p&z!3<( zUhk3F&`<%UFC=5nCWwfmuAA)*mt1naX+8BzJZqd=2JwBLznA-CZsj1B5bBY>epxKV z!mK-;_h656=fVDp{@|F#&7%7a_3`6Iy3&b}Xm>QZ_&A`mx3Tgtv0Y=PD#v7XH?ke} z%_+8`HS@V+B^?L<6U$A`)Az45e1DhRuBSY&onbs@uNIH=L?J%PtKZAo2T$jrqTb+KQT9pce>NW{~rZr>&!!$)4hrG)M ze07z+p2WXjQs?LQk)c3pQtWMWCqA6)bqR}X_+xRqV%Ixz@A3v8Xg|$w5fpTHvV1H$ zBsHO7j2EJQoy~{|@6WG?;P?1V>RYA^81%-Yqvc~=r{1Vtuf$0ZQ{FJs)6|H+&Nukw*)t&{sR=On7Rsp+{(3rGuv{%r6V zV8TI4<8e1;DajHXkpcu|-~G%fEe+F66i=YLy1F_WfTtdLO=oA^ zD|f$4nS!dSiG!6xz4^IXh{N;w%lA6Sq4d>TIkNgUSR8tNmeJ-x5 zs;aAFLxt1H20GT3-($L-z!vTum-kl?=Tt!s6L7^adP6`Lj+`f4Bv2e-iV4p$L~EWx8t_8W%|0&p)-1N zClF@B`RlMM$yfG;Z%9*SdkVi@Q$O zHUE(v5;&g-&u`zJ(@)V?*~0_b2sk)8Z17(=dr8R2(YXkOUWV3$zEmv`eu?M9!NmN8 z3J2%28pz1V_=IN7;{6SO9W{{sar-TZYpk!YcLs?y%R+S)6cp_4?#@kYVmIOhBakx& z=tBA4Qv7X;216bd;TsX^?%v+nof}AR>C)@l({_RPLd z_{kUp_0p-E@s~qodF{EVsKkg+|8ChvlbR&8-o0N~SooG1DL}lY-Q!0t2-2W}L9zlQ z&$zl05)$U-=4xtcR#sN7t`9?lv&+lJXU;itlrQrx;GLvnbYEnF8AY~OkZdqEHU{Yp zmcZP+ynDA+baE*u-;O9UL)F^C!k-a7a)q&;mAEfFofQUnU?SlXW*^XW)vetMeFSpy z@<7Om<@4t=$uH0FroigOof{8f7eh-+OGQNm(=Q3)s6XA^XY|`GmUaxyW^dMpFbTj1 z^iNgVGm8q9sU`)h!&gV!-vF z%DT}ff}6T!gCGS)us~L3vG1+REBc4_DW&Nw@cT!?BPd936`EGC#T=;gtkSxD{&4ol z0)_*rDA?+rfAi*RzlrLg098v0TfaM%q)e5+E7&VDGvx1n-rwKnoIT0sOL^;lF}uBG z!+>N&c&!&Gvg;#G)xcO~xK%>X^7Q0=`9ye;1$*{?!7M>wAEM_nV>}ZKe5e+HF{eS<9>rMrD(`kF^Vu7w?Ru z@`tWO_tIdnpK#mUvT&L0tbehnqN=1VGRr|bSn?X~K>37YH-cf9UK zoXMHgGx~(fyxqZLF0@+chM>morP;Bhu*??(>zq{KV zKhDI~=jaDN+A5pwn%%sw-@bR+UiBuE9_POkFp6~AdyHbvbVh@SQXT8yk>au2TVH^w z)s(ga6Jla=GOpQ~2$fd!f3g5)C9_`n%zte@^lJJ*i(^UnhrkYo+fgD$lk=z`=C9by z*aN4Ytta*C;W;{HdVflTpNHum>x!d4-rsv0HsjO#t>n8)v~z)4 zQ;UY14=Nx4FE_o=C8^UBAY!S`V1@vZlJ6TuMrIwQk|^LNm$e&WIKhi2EowN7#k^D^ zLI(lx6TmKgA>na;I>2O~n50Y14vl~b8Vr65qiW^4;r)%!-S%-)knUYwQY(QpLu1pO z$hVC%`4+xg*Tz0}4hX(KeR@v>D*{F*m8%Wt+9DGZIhi6Fn1T~>8@#;crre{}N=#gW zI6sTOS9=|zRDJ~B*7I4_v1L)IrEp7r#BD}gD;nD5pSiXAyfICja@+OCT2O5GTdUpm zwvuh0V?d&D^6p@$SF=Uw4d#66@QvZbiLH8`AhqgH}g3*n0< z4ZxteRAF<5wung1leXK60{}1G1WY`ZSyf#ZH3TM{p5i^xbMk-TXeCxe2co9M0aOy= zZ|3PDbeFC;0Gy-aH@6g>tSVT*+ivIm@p_?qV9HJ-R|MDMI9!RbXT;7sRDcK-^$9>z z85K_n53NoaJ zCbmsS*N3j7ou(Tdj<*&_;iluK#x0v8?9UHe4%!O_w1gJ?qsuV3Xe`W2*(>3zU`Hy4En;7g=3dw$LG`k4}J$Q6#yW4G)Y z_48-KfP6J#**xKO*ohK4So1QzdLQzyFl5S5yc_O*eIG)HdGp#c5=H($eP_}9Mz_71 zj-2`c7O!-XogQb&Yhwr#1c!6EmNr^+oR+FoRp+RYX*U?fg*8nam8QkMEllw`ms-Ws zweeCPJj;G!F|iJxPd79$NSF?Dy&?vsdm^&txkcEzspq=FvF-EQuSGINZ87S%0-4yBZ19JtFtVY_h!>n4&a&zAgcqXM&qFA9> z1jPB*411&GC`b*d6u3Iyoj*(%Y{ZKLzye`B_DKf4Ct2}3H{Sp}CZ<7s-YPKSai}EC>apf%+(~~S{Wc1W} zBE7EAsS%UTR8{`mVLfpL=mJEV+NT8`=3F*%4HWW}(6wDARmn)bxVYhpO1$MCZrX`P zM$L>Ofp*7vTw22}YPyVCtRVPIUQs+LG0k{m1mh z6edbO0)$sKo`XKiMUoiR=jZ!HDBv_n>u>R*^!9Tt z&rMb5`pu&1h>}d8X_yjdO^Vo070iSQSU*jcuhz6Ex0o1Z#~AVzDHvg6@TMly!Fcg4 z94GBNNz_(>+G@uO*L%Qg;ofpcoeMAZ15F_qV(Kc_IpOcLP6+=S^g{U2srVq|uAC#` zj16Qf4!&dTH&+HnOF;7_>niG&GFRPxGUy6$xrVJ#Pm^JHoStl+(aBbgmODtNp&b^* zgw&`LqGQVk$FkWbag&$iK#z`YTXzJ2FQZ%GA)v#4a%(MT5?^z3`_gs^n6hf zXE7dyRzabz3fL$duK~uZ_huK(4GF@)*eyWT<&y{H(J^)x<)CTXEl@KaS zEjP7r%for2^a{i0axad|wxVJJvY)ooMxMizQpN|%jCYwwo~-YaROM>io=(JB;N5tTF^kPC zxI(7`#aOz`60`BN%8TX<>|zwQgMHQl1D3ZNlVYA>flmgco})J2Y*IUIspBiK9CCKCr{MK>;SHwl{tkwDIN#re7LWIKncHU%5L zeoZkIl@hJ~%}mK1N;V!K5)EbTX+A4ee0gIgBqA4eCy+@-;3czFR;E%mwO_T_u7<~Z z1qs}i#Anm|bx?JJ7mbF}p;fP|xWP)`&Ccd530N^_ap(vtL_wd`t~z!=PmR`obo*fw zK3P#!v`%XVw3}&Z-zU4^86zlR?rqY6w?@UA0Rb6KYc_4p+OXN!X%u`ZR=2ejJRTOd zeDFwOwLv&Q?KGP+XMj0^UBKP5k3G%iBK+*+BzkAHmzul}PVaGp9-TfapHh1RGHIf~ zu*ZZmNlr3-E?(3SCB>6BLi@yR#Rnm(k*K0XB8c{?UY+Re1Rm`Iw5Gvi>bvn~ zv5c-`>k2-KDJp2MrZeCat>Q`w zKx7P?S3CAI=KQj2?)it1o9oW=9mGkkgXk%hWBB zgR|UtVR7b5d$h;Fqwv!BpP*L!$NE^Zj#qLx++I0t=?S5Ca1OirKP*1C#l z&U0`z78!KiFHAv#Wbr8e@y+)vM(*gTGU_?iw;b2t>rt`Gdm|E01&x)p->I-+(WDRn z&RyluRD>*Gzf@%yAcOg(h1iJGE80@SfZ@0@Uf;M(odj^(HNrr#D)Wf-!7|fXzJX&O3&*sln_8YzGvlAl$&&1-pnqux=~h49zRt zuFS!SC|k4M83juttOJ7fx2;$HLNqm%4my8_`{=qcY=&0)4o*=5fCu^?#})4tye5Zx zw#paqo(dnXpKMJzBpk4VLU7H>8CHeu}-G?0H2H)LWZxw zTn8bX=^8fzh!ANSL9iPgiMbzb2~J#wnfYZ*J|6ao1p`K2SN!cu>ySi>b_#Ex*{L-V zr0zopxSGAVS%x5Ua;OaefIp5Z&a3#%n&L2*Rc&l52HWk6FoiUmT^FWA;pPi`oLe%+ zVVaanfh66?=z)S9pz~C{k7EMhkom&H)l3KcMdgujoqd0S@50R<1^8l!>I`(zkpCq z)c$Bn4zK*~y;b|YZ`dY{_+djiF0%Vqj#G#2qMwe>YYYDVa1amftM2`Ncldiq!)nE> zlBaEJpSc(`&0s0Ef7;md)s70@1BMl4^}Kxk>|t0lC$UgUHc`=EO22F`++BRFt^Abz50#kIfse7>N}!V#(crNC zaYwqsfX`PD-=>y_$IT@iOu^xGdjFaK?cgvy!?x|awT9unZhD6eIow}e$2!1fUo51t z*FoG)KES5Z0W*PY-42OF&kMH0hi4rQHQm2$4NCV$9Dd9}V?gsY;SXua^aFnP+9zW# zxH>0|DG5U$>?$Y=upEJ714tRA$j7k~4(pOnv^U2^!F9AbdB4x=IAWcox9nhcYS8~H zKS6-x3%B%lw;auI*B*mUT=QtSwgXN$`B_D_HSf1`$VM>box2k35j?=xK6i+_i2r7} z>MeHuuxo9W%Yf9z!9X08-qRn}`UL$u_ekPj(Qkeu$-Fmp2uLDU!4k1mC~emje*^3{ zxghu9Kd)GX(a9|5E2Avr*Ztop11qvCucjf#_(8XRpJu9fos+;+Rs?{9LMFuly| zYM}tYSZ}Iog!_UkhD$V#4wC)A+7VnLX-3x$B1mDcZ$_Wvzt9qwja*{a`|LJ)Q2&K; zKxoSmD*L1`ECcy_c-#BQdO;NSO-4#?<2nVOlq@MB(sFr+jSuTHzY)aqZZtEDi;f%kw5tI+FGhJf2p6R zuD&r5(V;n+WPPh;aZOO{zU3dhp01SC7(g2>BO?#NKEDNOwDueye2)}(nEPEXs*4nY z?V1{>Q83u!p}pt=V_<@2HkZq#6cOGKfK$)he~zW&Vwwhfq?x(T8Q*==U50(XFOb>P zy$#~L23lu&dqCH{IEbENsEj1BK9T39?;GE;FgU9mF}5mcOi1i`szq{OE;=SBzoC+( zgo^x`1ElpdN-jL!HWnFni2IpbLZa5y{)ii^WbOa|eSHv-U+2HV>*+bDydUt|wjldF#z61fz*tt{#4ze~Gyw>_LsuLEK?)=Ec=Rc8?g zm=T7*3GtAySnZCcuQ0ge!a_-}9{xKbBOgUeY4asWs7}O`ReiZ=akC|)=Fk!fSe4!l zo25Q-|X36!LO-DNjlPX9I()emHJ>pKhQwMAs*087)2AM$G7W>`@2D>?`x*i;nSVBPy4Cx_5}ubP~X-8qa<49H#5T z8{SDdf%PL3jgTS7L659&dDNVHs0a&0xkLqMID zAob=SlL4b)tQ`{>cdI?~_g;yRy${HAmeVNd4|{GNBO5&6Tt~g73s1RdkMr^c++qIy ztj?OPh#Z8EYMBj|`&|^1Nf_w^rmVOx6*oFn+EJ>f13L(o30}@UUy{_h%k<(St_keB z2S;BXLbmRh{ZV7;`SP(`q&%m88=ZJ4dx~wJpKD{&#tUjcMEFe{tHrL{&Cw7ZJ>M4G z#19gd|2XTl>t?%kx_Cda67C>B?*qFX1o1fRX}%&&KIloIZ5Q(Lr|c+R%6~gbcv~8D zP8m_FrYKvmv0qvKVko?VwA7FNN*VZ=`{6d&UV9|m(YvY#*}Hc{n^gX~(I;ctF^83G zx|!#Ex4p%qDH~sm0g03@$St3`&gF198>Lr^7`&Jd_9O;W`yLk!aJx^L(XdOdda{=$ zqkSGGy0a;A*BZm0OPBZ88W%LnSQ8G2^FbD;>~X3b0sF6|Od5%z&BL?Bi?!{|^Mm{u zY~AtiQJ?qX%8IduE4Xh)&-NaA&_mm*y7#O(KS&wj4fTxlX>Aiix1&?wmVLje_fG7xsB8k{la|80$`5o$VOGu{DU5OFogkG>V2_8;*5L z)fV|N5`8pk>LnjmU}eDJxO=i>jeH?ch{{~!&qQsFcr`r83Gn`Z+_6qS!2SB~L5kk% zVaV5UK2uOnZEE5|g}c1D31oByz zns3I(saKADi*@4LmW{mLom%Xm$|h8LK+**}DB;klvl4CRxneq^(voS~H9uJE#A6NE zAGsS@o%hdZJ&g1R(oanh5(FwsM`$;T<#}Yjebg17Kz}KpijJ+cWp#{vwINZ17gyp@ zj{Jy*B?<&Fo-D~IBG6B1)u_TxnKrB;(7~M9jAwXo{7uLM3w(g((PL(M*LN8z z@Q_bS!*>$(W@r3F7Ovg(`ZEBc;!ZTo=7Lplo^QjHE;1Iv%OuC?YR%QhxPRQ zZXG+i7;_y0T>*S_x|mabncH~(s5@g<7x4*PW`}>pl0`DY{Ue5;Kcg}Q25v9jKF7hc zy!0Vq+dumeHgYN|s>2^`=MT%D_?v48z^4g=^Y4V$=v2v8*p}D}BOe`(4rBb!FTumZ z^Jg*~Dt&ml{`p&;@ZdB5_Pe?@&yf$j2M5U30MM0wjfHu&)Noc@8Ix1-M+Ntv`G_(p z20|DpAEIy|`}2c^I`iwdHX)QQSbn5HFr0|{6FCRKQgCrbkApPMvNSQ##Sl8O^9BG- zP{6-;qTjz~@eu|6eBIWx|6@BMBLH6|_&2b~`COV|gs#+B@LmEiW(g5qX92gU8XnPv#4m zB*ly6l3ay1KzQ?kpv0mjo2MfNp8so7c2KOpUm-r++gm${g7Xz1wrS7+9YkzEWi*O{ zj0~n}5Y!bA@I<4*Pr$5%^d>s=4=vNhM(`ij-jzyb4KDWW`q}-8QGgC3@|*7p{YXWh z=^h5|A>!@_WAmg(5W(?0BO~8=c1n9~uoEmh zZ*D^M+B_cMN2H`k96IAXu?6B?4O)6$szB;0D8%v+5yANo_Wb#CDcn8=^$*ZkKTYO3 z+}{rl2|*;GIuk;J%g)Nm%FZ^Dj?v!zPC=FO2PXgxX+3*&D%Ie%YDva|g96Q{+<3HY zZEa@}-)n|2aB|+K{V0r=MgiG^vFj0C)#-yP5H`?Z0R2G1>ZD&$Gm_`)pPQST6^lHK z!GV@HH#c_pJ2wv|NtRYt=^(>XAZKc78XO+3M1f)3z|F(M!^#>@MAz2v4BFOQY!BgS zE_bCK(1&4rl(cLeh$6n?1)XVVAvTA0f*x=$s7M|M##x>DbH!Za97-K$mP?tQg`xU9!4sLy)-3oep zedV0w4I~PxuV=4YSXx>-a%`f9_F)vjSV1HsBioKww?sqmCyp}S-6v{I11mAGhS;%u z1gQvNF0hnfh0tp@{;51%DZy^_6z1lYl#oCYjRvWXM;Rj2Q+Iuae}DwOE>FB61=jgZ z_s!MSPl2q~Rvr_#m&rnT9hDJWFy{RKV+%suPjO7rtONoSNUd=`Gaw@4+1J~=`_=8S z>mQGi1=b6UUkdCgexpHkvcInMP7E&0 zYuWyvyLomE5_}AHyUkruZ5HdXzWqD9eAJD)O-4lMVJ>NWo}pp2MrTJF;DE>Wwi-5z zBdAGF*X13@*xVbh$nvY8qsd%jxPZ+)C%PPdG?m1`=gJOnH4h>{RN$+^PA^I|v=>~Z ztUNYd+NTqfC8L8)IN;3w$cJ=Hz{m=2!Q+oHI!#|+;ym^b%ps5GF<}dhlpp~0)5sLn zPf+_Eb~jC5>O$jN%u-`=4Q@LU+1POxuosEVnx^VTPvrvOQaC&wW3hqu6NAl*6LlJp zps47rIdLWz7P2$Hy!?S^2v1_A2vv5mIo9>zVK>ACQc;#m^sr$Mh4fvU(EA*?AnB;;gm{#FtXj zCmO~LZtD!@NDMGFqAYlq=`>5k6KHd?1b z7Yb!-1HJ3nApugGvjmsMZyPnMXQ;)AX`}>2)0Xtu=|oU~tWWIKwKaNT#mDFctidFH zU}sM!=O?@dDHa)8dMw3#*4*Vtk9_p6s%{B3>S%CT;K<&uP9s4mS}!ip!z?x8I}{t) z5X4nkzF(&omYr8eh12nQe?*1+Da|YIMGrl;YZO&ENdfCS2 znrNJl|6q?_vY1f3Qx+Vnp1d7FNybHCNr@YjLK9jq!l5O4@HL0?dP6t5a1>S$j72Uj z9|Uv4UvJ9XF#7pfeW<<$j{KQ{Q6nn)BJw1qr6De*F!dwZJQ*i536WKDb{lQ!ReL50 z_O_5%1M+ImWsb4rqgadmd}4O3ArldpEj^C*4@^+GZQEYW)wv^LEUuzj395MhXL9>D*{6! zl6MbJ-AaX%hF791^sh0P_z@?Z#%*)1-T{At{-S~a9pV!K4B(Txgi1)BxO)h}x4QTv zpvl>E<>OAn@$kmmIu=Ok`IU_ZC@269N`RLSO3A*OC5_igSO6VB#ls%CwzmZ|B6gw` z2q5w=ospK{MMX&g0rA(e!-_);#R%}hWzC6u2QBVEsdiX|)F4(@eZog0j|dqJ4luh8 zJg3}fn+n|njTaG8xLhvT(Ix$|@>du=9r*?DFOjU%P1*PMT4#}M@- zVUHZ19F`6ZB0y*!?d}TGmY5m-HNO*HA8fcJ{Fa0BEATaPq*YJ%oxrNnMt(A0>KD{* zZ(>b07#*t6)b)fr3(-c_q+Wh0+N7*Dm zuFlWym0BP5`;U{y|CW9K-*NH(za4uBfa>%z(Uek}MqyQJ_&MCyQDmU1%0bT-`V!sN z_<|#pCY;uN-}L&~!L`gd3ABw(QX3??K3i~C21oVH0WJ2wx143l?2 z7#Wn{t}N)A>J}Vkb)MuRcB%U{Fd3!(-0FpwODa%UDW$&^^(M1lGKy>n*Gl|OfWOfMF_fxUO{s;;gs>V4{cC)=q+!!7Ap*y~k(3ZJy}QGEkUEi=+TLVE8m)6^>A zO*GQY7L_e{Waui>3tctMo`(CZ;1@SS7r>?0j`7Jf2s~IIKDcglRjr)u?yqWLcdc$P!k9NTTG%3Y^+T~t} zIRHR6#m$Y$In|*2stBg*KUebmA%1OoYagD`m03EYlCf`Eyr_J?Dh$T66b^i^sDN(a zT(7}>|5QITxAqmGUNMWAj&?K$nd&3Ul*_c$Ly_N>|0dqT{}aQD)ao{!YfIfrR^VhJ z-WacvF0^bf=xky1d((isJF-jI*J zFPL*J{C!AO-CgV<>k+=<9eY%8uq6Fhvt!+6Eq7gNW)srL=&V+*WvhqnA#ZSv_*lAf zZQeAGG2D>tELENRBuOL3fF>UBJxEA|1qS1Y80H4UFG5;V;8^esznzagJ<-irz|A-< zaWn)9lCxi9#YXg7&AMo^CHW)N&7q3X@#IvanFNIrGc!l=U>rKI;&ND)f0I8X%ubOr z#;>JZ#}SR{IN30XWo^`EQ=vmVHKPebR`3026YSJs@k4pra)XWq(r7>UA-enUmqsdw zvYv)@hQ{Y9|B5IT?eX^$6|H~kh6zk_MZ*Jc+wS^ORf*|Go3xER>7s`_Z=EAg4P*|f z-DVYZ;yWLP3dd^YYE&f(`)JiY2L;s|tgo;7M4c6I0&@#4hViGEGY;leF%PeyAh(oZ z;AF-{(RpVZu5qC4E?BK^z&g_TN4aUighQSFxyKa& zGxr<$y!MIgk!LZPa-#XtG4t!N&yf_se&NzrQcgFXb8!Ka!z)3JhgzM8HnQV+_V`^D z==A$_`}JJ==}^LE=?#nG#izDONn8)7NjUK#1u*7w#@VWrj|lo?y48SYb{mb6_I*nV z^>t#ucXRa;>Px~(RT4d_A2!o?zG7+O>cT?%CL0jJmt><}7HyYIW?JNV?0fOGS{Chu zu#|>hQcq_?L3XlAyH-}NytGe`K(;&az)51g!EYcBE7{xR3K}x4eW#gItrmNo*>-Yn zIi_pnIXJ=QiSoO=Z~?K9p+0}wV1BTqJi_8SSB{sFDCqsOA9U(~#k>W>oUYHhru{K% ziWhC}9iJtutzX-eQ%NhL zufO7_7nI3M^_pM*AZ(V-JQ4)4o0=R4N>q})b-wOKZ8uvo=#trcnl3ziMgm*~nHcAc ztuyRHe3VjTswbYN)OV4gfC!+t(Y);AV{wLSJ;O>d<#mF!Nb+wa@^DiiB^rkM=9utJ(X7-t%VZR%p|^< zq+{5tPT7UCirn(!R=V6eT2`ok7QRQRowGv;;b}H!%rz{FFb`)TkU&9`S*>qWq29Z&ymUh;yz;eu>{zkWE0tjT-K<20II?L}@u(9&0veR%PK)3Wp)3Bxw)X2>2UWV3PJ1T!SEX#HX%$ik zEn3uC7qLHQ(cIgSK#>UTEiGxVT;Jg-nx{t5@ou~w9@&YfArXTCU?mT0QsL}R`a)D~ zDjQQvN2G&?8QJnf`jBU(fNmKs&Tpnt-mB60=oKrDUO|_?{HC_yOp~BKCrO{z2`Cj0 zYZhOlPn@Wz_Wkg4vL}@VXw4t;jV*m>JGB3bFXTCd#yC`tXz< zM()03Y5?3U;*V1kM2KaDnUi01leg4OqK3>Qd~Nb#HiJxAGCU)(Wz8K#(`e!DJ0ehV z!+6`6QVmb&MnGfTD5-kDpv4)i1kv}?eubSkJPyT_JUffDr_xzOjMIjiQ>qYbj{45I zWQ-R@9mcn5<(5+>52k15&WY-r^xi$^J1jslIgGh!{`WU7;YZ{xrK!8C1#PA)$n5XG ze0;>cO%G~5InmHJ^GyPPeXe#}N$r*UxNdU%J*zOy1;GU-*LPWGozxAP9Io_6eyf5k zsF>R_>wzplIW)`m_zT(A@DQUnrP`Ik2NitD6wVqLlsw*;qS1naG0nU{&En|-s1F~@ z|7mb^L1+mX#sRgxqA-#hg>8#YH6jwwi+k2z;mbTD*y=+8$;@mr2t@Wh4DffXfD9rO z2!$piHK%;;eS0;H>u&^s`+~Qn+Dy}%h{yvf(7~C&LWb@ZHu>8a5vEr_g0$3Y2#Lcy zHmRCe5-kP{1Ppf&QerpM2O=c10V03ACw}=M z7Kbz~E>=4VWLr{QV|-Wapu1QdPCmbh&4zOcKWHzkIc=7!Rf#rI3$ z7NbTfcb%Gyd+lMD%au?12%V683X!={Ntg)bS8zJh&)cdzp}ZVm zgw{##{`T=>-NeneFy-y|ruvvOVkWm<$93A_qMpx==_FD|`H{fGTNGl_D}VBlPj6RX zfJ7nag}o7nN3M;N^zn->wTq507DY0c6972*h{1@n_sL*?i%}Fs4&s8I_r}92U9PMq&0S#9xVj6FTSJTu}7HR zb>!v)U@7}oRM`r2YpYjQGunM6yRLb_DS)yi#o~8+`67rkyPB}xBi+aF>0x=BuDq2f|yfj zvj9))k4V>owH+Nm&qiX_J>I@uBQ7wD>QJ$nh`E1R@tNm9H(;Z*wtCbXfMC0f9};lY zc5&3#tBS}tAid{tMq({B)G4j&JZTG{=cA)0ZF=7?09TOy zGp!0;jx44=1T&g~GWpdXcf4=fIm!jOAtVSSxSGes-K$qHz|A5PKIB*ah1PH|=;M;0 z`zl7$3Llb}yGA~J@*13***!yf%$P8zh2$pnJu?0v|6R5DF6*n3_p0@D^*Cmp64)_d zxM-4WI5)tL>*V#z!DQ!O_A4i{dH1-8VjI@o+2UNm`Jz#eVSg=Kyy!A!2Sj-f!UX&y zOm!J1f}vt~c+Ll~@`|Lrk=*N-YldZih}D``QOD$SApY4F&^E#j+`s0zL5EynOew@G zh8$}<$J{um*thRhsl**!(ar5K2)qSgSoU-g7{Kd;c;N}VAbJ#Zjzo*G4kG-^_NdtB z{zvn)QTkYatYz5HDjw%(E|IG}GF}u>68+D4P;X4`G(XRt(Wh-bo^i{HWa%Zi)Crw) zVq=%Nz2Lsf%<)+9c_CZJ!>kt=q62 zYk8=Y)Hkkr&a0I}A3H!z6&=>=ZZtfVfw+A$qP`T{`P?)G8feMn#X{R^q?b=y(^uR7 zu)1nkheD&N#FqKSJoucmbmc$WQc1EMp~x9_Y-45T;fWkE5oL)*3{1eaPR#4E&pU5y z6MiZjyIGaBPX&~U(c&%k(S?9dnk zJNJlMX`oxGP6B;0IUS>RxmO`Ehr^LL$ zfbs$WB*RZIQ+oI=A>nRyZ+;ln)b5i3K|i!k=bm-!qzO*(9*0C z_A>BJZtSWPCMV~2@-SBjJey)B?!=cF$8*88pIDjEQmv^aQs(i0*ERZtf5ubtv3QEy z8C9krosMBqC8@teLSre83yEXgw0~$UINU23%fDjHk`>~Zm~kN9+*G?%RZ`p~x~scj zt}QTO6%1O-3}vDw7XI|0y)<7hyHLAVVy!xa%zFN@6!=oZEiyrVmuaPSo(ly?a{BkZ z^Pj}8uN$|jsbC)t9&j9DXm$5X?H%HWP6Ei9L$gb$91J9HmD4_iUCa(v zr;m;`{su=G-~@juXhoiBAVjm*#7SV^mvZ)fvGLqQ-jM+z0~Z@5pp|?W|0R^97xmt2wx6dt}4!AG|@%`9FU9Kie62PnmKPf@`1={X}43V7Q*Sz}2Xfl#~JjXAk&w z?Jd{WHhaT&Fd15W4zhW&Zbzpc;z2ib_#j2`ROe+}pJkVu#!B4|>Y1NR|9(`~tG9;( za%B_IH8_CZhh;ccdf_(`2qBdgz?b##;}F+7@Wbj49Q4dYOLP34A$5WleanJ-Mm-zi!w+N%vB(3r;m>vF>nN{WQ8ym-4>LIcT)jQK zk7SNh%C-D=d&lXL&7TYwF4IGFeb^Y!%oh8aubZ#W3&uzYpdq%)Un?zK`fHQ*Un;h0 zs5KD<*0?~C8TrX;wag=>FKqt8EcN+vN()}w=22@d5;feg*lRyW!>hYb#$18n#s?>A zJ;i7v=tLxo-f4AD8R$`eU}@|gecZt4T}R&fkPRW3Z>4?uHTZ*32wY~*ph&EBk3M_x zRNf{wvupe9tThixXs`P`nG91{r& z5K5ps*bTjl^@p zdqDV1*zFK@qSZzIx3?hqsnJ(D^gQj}IInY`=+R^2A8I0~Nt~NfWoEp$xxFCIi`(EM zszYz>_6!&A^TXz_GnY?XQaP;_+9n<-j0W5Njp48x{!%pTQ?HZ~m-Kq4GFk zf(I3H{ud4~6}*DWQqGM;G)g+JqvGFcNS0+qI_(vlm)E~9H}rb zjti`3FjCE4mRbuCDD2^#bBYM03l6>QlIrQ^GA8jIx$e8c=yuIz*~*SeO6uD_|Jc{O zK>mmP=PRJXILKO1O1I5Mo$HI7VE3QPv35n8Rj(I3=2JFLoD{HFd34QSur z)YaAbc(WKSMmc^ads~h18@%MG%5Av`wSpo%%+0w8iEwcdQ1PB@9ysg70(W1iCs$AU zR3ozYEG&OETS0X+DHjy;K{pr{Tvz~9SwVLgk*}JX_~G3$k}uoJQd?mCKQH?$9TFk) z4MaacU0BciHs=$Kth6*JSxZSt0ceEa1LJ`N(pYJ5y?y-K0Ih#`4fW2xg3(p~FQTG9 zmXFgpEmTF?OOgw{yu85p6;7!rcH;pw1XvIW;UhwIcv&Xd^H+?FaOiuUeCpcyEokZO z!Tsyp}%VD`u(_fy%Y%q4Y)WsLfMdBTrWg2e&^(Xehb?5_BpL! za>P*WJI0r$l^)c}!%v9f;^=tu`1ILW7)AUuc=*G^Ly$=WA51$lz4WLOHe?v9)$y-P zK+B7%H88FH2y|K4-35I^W@tc*6wJgRK~CxMDoG0b0+#`+6IZ^BPdk_H^_5xw{`s5a z5&1**seSCBqJ@bMF>gyEsxN%|!I}qC$tM}IWXLC)3s*i+?*=^_KwN{A6zYZH7}*ex zG6Z1+b91`z?hscp19{(c4qfl@1?1TjOwE^PsKo5jZYZuGZHE&wOf)Skg>9s7Zrh)9}Xbc5h-Ul5cIoq zo_IE;MFmv)!3|c}mJ1UF8F_`;dky^Brnm(g3kb0_cm%QRF$DyEVZogx;P~D~B8;Z} zv`$ppRgF+z-4XVqBl;`1Gg;eL!j|NYa*W=;C?CPWxTXP93awnAb=L1&`-KNPigvIe z`})EXg?~i*dy@4LUVjA#@t?y`doQI9gLfQ|!w4K7Nx)bg*SHod0WUPdznxAORN8yU zpOh&u5MZJCh{7qPj=V6n$5}pNTXU z?xs@bdm53Rp5C%L?*nN2a((}!?F;xLn1%9>lScF#mwPb@i7r>`^uROG+GlN_-Q|j7 zyv-i)-pSAp5*i@tG&gs*@&om!neLl6Z#d+@Kr#ig$ZW8Vsi@HZ<}Yar=8^=Y3V6AL z(Jn4|m=d_L-|O(Z_2{n1eUC*Va93|+#IaXRWgkRq*Voou`O?J5z(xnMUM(wNVoArU zEqI2m*>YE}FF=w}#DFcbmpp)Zis3(504AoN`-h1M2|e5Apy>*jZNi=O9fw)>;?|Qa zGSI_;KYe&xK6uUTg&r~BJT1w;xp5^5@7_LVXJ`M>wi2)BJv%+kHP(aN!NI{{tMQ2f z9XvQ_O3@sCV%-%A+CF(0d_N}Nn6m{rBP1NACi_ikV`F0v4-fEq{zLb&_mqqtM7XH^kOK> z+U%-1;d9f`nLkljP-{jSukeS3RS*u@*f1=co}ZlDymY_6zprNo>jfPh{iuGM2n0}4 z-)@$otnKfDH>|MkztkdiR5)F47T=}E#5ivDVflZp!+B%BPC-EtLGe;6UT3aNtGqkZ z?k`BCms+P7nXiRC=`|$b>B;-0m`1kTZ|(Ul>K?dKpjnZ?8paQ&S^mf^uRTQYPp^rK zi!1M|&9q^Ai(2`TcXx^q&`~}{wt-Cj{^;{uhlcGv-xGV`IT`Q+YCA zo!@QEg7|M`#KVY)_y?ZRRVX3u8P74hD`~z9Kg!?$9K}^!?Zj{ACO@lvAv*?ZxlGy| zT4Rfz6QgbDfYf*;PBs$Nho-Lsozced$K^SF1&`&m8HwjU_gYBF3?u+79;$JFAnw9Q z@%6#yyl_fL-N&by6xwD+>iywsjMJ}e94a*oW|>(qkdb;2aJqv6+#jKOAG&c)4a(@8 zJ$|O`e(80M3rZKTX|wb`P!a#a+w#FFlON21gJV~oy{3lKHx;e?7NSRNVM<9fV$L3z z93|s3ahb%dnQTTu`DDZ#@2-SR)$H=(RdQ+HfmY1y|3ZGQ94)O2S+y~@;C zzh`>1yW-G3vjy04Njk%)_i%trlMH%kw5uNhvx~T1FcZiQ_ zYe@46Sz7P32z2?BKh13W+;=CIF;$k=O<%a&->o&`D@;wM^UTAD*|^{&GLQm+hEn=v z%-o}^I+HG|{WfC3c$u~gs^V>riL~1a>U-gn)ri}&>)rY)q1%x#Ub46lxc3v|o8bj- zQe*5|m029e|Ga7J%^BJ`=KO5&R{ml5uVkn6#_9^3i2*wgy@xUSDBEZoXscmUdenk9 z*exLFw%ewzVKcqMe{7CTU)AeHZGE|%fS}I7=s_A8)kpnc!l=iQr;xtmYW>Y9@umQk zNnO%0oo{X?CFR3~7Z{Cg0jt@nf8@o$xwW?DnEKe@(nY32m3}(2p9Ia-Tj4!5Wkr+g8mLpU){5Au>nuxj$K}gKOTHC$p@spz4VC`gh`~Mbi;fa;)Ios~ zI^MKqqjbycScOeicwe=cHNcFGO96p6ow_Qpxy-UB;4JM*C%c*mtJ}b?f$KG6pKb*I#~$?F zs14l35!><8Pi&NT9&(t(<=73jdlQL5d~bh(&Gdn%fb}%XB;wj~QLUx4Unhdk$h>Re zz$}BETH6W+_HPc8dVT^vOuW&r!vVd6MX;ek1HRWr!|`|eHbz&vjzmt^Xs;PWvzgru zC4yUTcXm;SD0o~-m>&tf-qvvDA!+{0**M&A0?g;AnBpJKD zwp{*Vl9*5w{Kwhzva?qPV31Aa^%2HrM&l(&G81%L(@uW2Cm|IlON?t?@n8Sy<9MC) zGM@eSf8V2A@G;W1{tMIj`bW^e6#xI~JM2R-+zLzG!qErA#?*ICZ>Lml9m0&IK8JDj zm50(7+Vq}|Vc`#sP48t2Zra%3kq5eMkX_ZPnR3W*5!de$6FKw_$203>YCK8k(0~9} ztw;bD^Q5V&Wu<~634#|YWoW%vUOi3T#atF6ZDc`(J!0ChN)9wdPqo6f2^B3ZS+MX= zElUYb@8TkRtFMcwbXUbnvW_(CD$k$mb7+MaX?va{zZ1_=6jRD@Y2jKYkcgYHP3r3` zvAgY6?TEj2DSQS)UROrV46fanP*wyQbj)PzaCA6XU~-rynHRXXi`Rn z#5?CcaYa!-d26ncGSidtxvmL_@UFAbl4QHm5O^qJt7RGCKx*O4Z_qp6Qc0-EBt%}? zaBm7*jQvl3;9!1N*`(_6*A;k-cM_Ps&^pKvihaHF%e_-MsmzIicxa4Yt&THSYBN7) z5M5%n218kDf0}0Bp|0>ND&F|}84FV=6%wxmXzC0pSoHs#=eJSC6eN2E+^r8XHyK@) zXB+17(T6EC64pE#)eQ6JV0F$GxFj80xd~Q&!2Ok30YQ+XdP^R)9osny@=gakwuf|3AV$qLL3fd$=CNvTCP zjIY>}sji(}nlv(61682{e4Y};d$os7`N|mgu(q2jY0t&A>V&CHwT8-IXVXRA<;uE$ zwEv>c4~P!|@4->&=OVg7u6*Fn(^YUL4AkI$KrI6vT?J>quCAE{rIAb;y8v_LQ%m+< zU3^LbGbkW5&vBei9nLA2FCW24KPvq=#f!xSL>S`)RT6&A@IysKS*Y1C^u?ZMj5pEd zO}wxDbCcivAZU76v$y6ZI?i3;wripK3J_ozc`%WmCBgy#C~qyJ&u(E^?`Y(NgGjle z1*`T{@m23-vEIj?Mtq*v)zi>*JE@z8M|V>N3raMdbUG(Hzg$+%bqnn)mOF)2tXG!$ zo`aX{%W|XJ{d2|W0VnH^>6Y5H=Eut;XaAT!<>wT=hvK*f)?Hssl-SrNo6{TdGs@vz z>(7b*%$CW+K+0+)4W@7hwH!wb3m&3-?fcdZ#3!_^h8o(N+}2hP6>kcQt+g1>qx%*G z`Nul+(WFbSmBy2MYXUjfr`{_ed6kDSgmGNd_{rFE;R`kJF_rRZrsIH3ajg$R3tz#q* za1Xu5C*8NPYiME!+$c_d$UV! zvlNfVJ+=poiFy1{6v=Y6SBMmxlD=oSQhqq6?ZyYYQs&eBsbZK^Q_<3sN8yM){?Xl{ znHWOx4KU?YBSK`<&i$OD&E8R8@7HexkhpOy|JJ2muQ41^y}mTaqG+vFOZt7B@;qK=aC>`RrMR_2XMb`bpPHKep@*t> zoILM+O}EqcF#)|_7*OlQMR`z~MeiRQ+Q%q|J!aLL#5Qh5>Ta{JffH|S&8oo#kxlI9 zT<&=Dg2$5bF+6C11WMgyQaAigL-f>M`B^Xo%82-_2d;Wz)0i9DTo2YWK0qimfSO5*y}vL<%L0iWDbMV@Vtpk(A6@T^g!Gm8#tDF6boG?F^CXMI2;w4h4~LqRQy4y%)> zBMbG+$@o$*Gik;+BQvgS-T5K4j`fR2+lHC_tq{L!zRV;hhE-*z`CY`4?3)F$9}W2f5vj1YO^!+!fpHr+0tKX`Nb=M1>ZqEgUb>K6 zJhYqwj_`f<&b#7HcV^)?&vjpMC+`GtC!{hyyzh3M0qGMF|19_PWYWsuTHFgo2z9|9 z^Q=wVlFM7mN6xPeKPTMOBT86seR6>ws$^9)?%w@)-}J<4WiQ*tS-HN7iw3umvo_-* z)O?k$66Sn>BxE_NwO_;IPh{=4wVDva&Y=pGEN(a&)gGfSc6WU5Rw@!xn}6x5G~L;~ zefYF@mz{q#@^zZ7c^$$j)Pn?O7CC-^gqG@=un||3snJP-z`>*J=TZsekT$!&Uj&Rw zY=#Fn^@%f{?*DrxqiEh&q*YkKj=aZkdQz%I+5NnJemw32zEI-xUKbytP$xIyH42sf z)4{@;n!V9;wo=ZwzZwR-E4B@y_4uhtbR|x~`JL{m_`e)5@1aEyfG#_8<+$n;-eUG| z4p$!<&CZ`GYM+?&oaC}b<~K5+DC{R!TDY`G$-h}U)w0kjzyrd)hMoXWt}Xm+&|#kJ zU?mn+kt+TzAQhtwix$yq3_#RBsKBBjumbwDQpx5^%*#*s9lw!(0}LGtg*cQvN~F{P zMBy_ggmA+`Oo-Y@cf|wHb;lYcV>DwX_q*nH27rlzJ)0`A@F695WVv` z^YypUyT?3Q&)|sot>b>H%G;w6S!ke*x(s#s-mc&jhM-`G+0B7=Q&9UXYPU-%O)WBO zM?g4g0h$W%@$L8+*u09sp$vNi2vJ1Cp)pjXsk{qF5Bd?_W23qO(uB|J8ARX6MVyM_`ZPC^t>i0S_^wOBG;0QlFp=urMAp8-by zETEvmkVKnADVoy(G9G-S07SmF=u%!>;+lPG-I*1rAl@?UXQ!RoH_Eb~X-4VQv9ZW{ z1lftB+<7i*>o7BWhZ5hoE$ml9F-#bF{e~1mdFd$`inJ>BuUQyqvBQ`i!|d>K@M2&g zuK^I2h@lJqf=kj%0r^$C$sotC`(>uWVfe}XhXicZ;u7DP@7N|Hlu%Ls;%fl#j_-gW ziJ)gIB?ytu18^0h;Q>IC(0Vx)dZXXC55RRivNBS=g3)ySI+JO zB{TwuT^^i>b)JXq@t$M783eQ1JCRPQ3-#8z=R2|*@liWi_16;Fj3QmSjU^L(Z)#@u zf5Hp>8qoB7R1q zM}B{xVStOaLz~DCcvhv(Fv7cWJ;Ds*%sIvI#aOLH7fe)#_p(#YZmXrKZsde+JlPNm zD8BRrSu^*==q%k=PD9b`gH(+L8#*IWi=5A2o%2dc^R<~j=x9{+4&LwIbqw^%(6IKG7C!YmO@3hAs*2a_mEwfo z{-q+Y%hqhK=U3TKrF@c|BA{MBEXBmUcrIOYMJu;yR&<+MG8QYng%RD`W!PL{vj54? z!PAuCxNprz*WwM3m@_U7RaY#i__!@|?o&|P{I%wop@%11S#JGaOKX9M7>1&nLaP%V zaB5?|yqX@Ud3VbLA5+NDQro*~Z6c{5zgoC&^Ge0M%FMVD#Jb*(1QW)QizW+;eI|o2 zc?=53$TZF_Fj0PUe(pF(h^NO61UxS}H&vP&iX*S!0~Z#0F?TgNN9pGGECK~M6w!y)cCi5@8fV(p z!OiaBouWOQ1k#9Gr%-=qTNyY@m7{+aR=lHvPgMDBB(v1R@4)@gS??zOT57)VYJT@5 z-vH#(Y~nTq>8yD^sWvqJ{9MK~+o0PC@2$Ez73S_Yt$pe&)%%mKR!r?CPS~Z9cmAfZ z+DL19*YI6jp9?)hm2zcGmF17Su7~$7VRk=2)@1K$A`NY`L{A`?GcK3?hy}!W%4>@) zZTR!;k$FS29yvE0G{esK(+ENRlg$4Q=*ETD z+v)Lf_EA<6OpE_QZrCVs6LtkygUiR0CRpBrB16)|$;6B7-HW6U_VVMwfBg1;wj=YJ z+ChL;o4I~^l6%zfA#n`(=)D_5JIwE0M)P(V_Qy-qu`Tz);9 zotXIRI8$Gc?YtiITno{uA2PPdH1Ma3co}Cg5j^&t{QkiKvY*7`)%RpjIsFfqH zzgZ5OkZ|=Nb=f)uT+yzGr+`iPjG4JW)|B-xi{bm~vJNHgIU}joS>crIXgKNYI@}$P z&25yuwMU5(#^GsQ@aUoL2hQ-k4`X$6dvmm_0i&lYl+~>;BYf>*jojhDBpi zPZ&M0#Cv9FZ5HGHQkmj)>B{`?3}SxdbefnUv)&bwQhjY@NFKstDt~G`ub)!g6B z$^Gd=^$&{ES^R&GH#Bbd!m`kkvj>+51#%LJYg?8QH?_P1rgo+4QoCS|)8_#)igJ+#PZ z70xew1t6l#;KDtgmvdg4W#;~XkwHWEU2)a+M$6*u)xFD8qrrA9rxU0X?i7MTY+(P= zp@pxAfNm^Uw~p^Xa^ag&puJ{a5@o|9!fa*dXev3_fR7s{CX@xziS3GhdfbcsbqGJ> zZ2yDhJpWv8o69+ap$`R=dfjMgF9-@IR9H(j&_v=Y5MaO5UK}`wJ1Ew}f6hUOf{Kjn z8-V=G^@OiY_SX?q_)Yc2D=P>7`~l*hK@)t_Brvi81s1yP3mO2L>HniTnwgpL5iyg# zY~MV7kZp;89~*=I1EUBN9LNNKQorZzW;|$dK}#z|f<{3}2_v; zQF^HT692O(7fIc20j6>!aat62nhd8cg7FCB}V%E&=28ccV-G_Za_$@QC1 zL_`Ec#~3_Z7?D&INGgB^0AMYz1%>jw^&WG*m2)5f{s7>~GRgLbgBCVCmzRFoqCnG* zAPQRApy6!?ms#*+BAbX2cCC&gcgs_7hjyr+A8)aAu&9-4^Y}bHJYFvo+c6P3kS$m= z!itvvS0n*e_-}VN1}rOw9i&bxw(a=zejdarB3G_&9v2@3oXP4Nmyy6)6dIYFoSdEI zaoU^E3UfCBF$cz_r=BfGf`2dtJ8h=WkdXBX{{O%S*0xOr{6toBWa5u>$(q_W(cU7z zBKLR}XThaF_}=fcus($z=nI9b`984YD5U+k|Kt_84Z1?p($c^u z{mgv<9lQk6B`MZ)wT8FP>&5=XjTX65e{Yk_t<(9Q`A8Zp+s*0r_bE(P5y5)%`jp9PcJ-@MUQ3ikl*D?pDA5KsBX z0|Xrd1GGm0=_PsjE!}~BPIwTQAr=NAbv_5m8lJZ!WU-aapn_!s*#u+Xx5Fr4fw!IF zxh_mYul?PRV0R~vK1hveRNm;8)fN@??_Yv_4h$fS2DUvAlek`RKusUUL4fU0gFn5z zcq#alD+Z}{G!n=$z=A4<@{18oEWH}8|EexWPgrzBgiw^BzCPJ?@A_$7UhfwW=Og9# zmKlMtnxvf|bS6&r*~h0x_4&LzFMZs_W z7^Lw?Jlank4F7baejTejRR}yCL17*-SGL%MPsb++3DDpRI|EIrL{N-*!7gx_)D?yp zY%Kp9R`}nr!vAYnfs6Osw>KC|wO_6(!CQTbYf$#JHYTeBaO*N)@mm^^gic%#ypDkj2x4bgil$JW{B;Y50wO+Dj6y~ zGdDqUuf{BUbYNT%iZSelmxI&wpsB#sZLbV!SD$;M#Ic)NrFw?k5wBg*bC=kkOtV>} zpcrL=RY8l}OdhX0v2F(>hW@__Ubbx_nfDu`U0WLy8OH{sGJ51AcUTU`1_i7*IC=XA z)6MMIyKJ|i-MZ75t|xckTdBxO>aomwtlji(WsAk(C}=m&GH$8vyeZnB-NJeI36H?GSnr#&o155i!ft}_Bxm*ebNA8p_=e_sAi6UJ)eaPNMytAHg z06MH;!Y+>FO>+wXTsS!jOS2uzcOHKq@v8wmZVyI>7jYUs4AnJdf(%geVhg{FZ^EXLIY?` zu3OSHRN*{c$j2?>vq%-&2pVJ>QG{6p_|_kYq;tiuQpPF(kdu~! zTSdKtl7Xd=p{ye!vTsI#7vkXqlBZn6{EKbq41vZ*!wMlmM2IOTn;4hNvcqY-)yo79 z1WBi94-1n}d^<3`DFN8IqR2;_&5j1mjRb4z5p-3k(jNRKd&7PR2uQgKuEfDbOf!Pb zw$E81xzNDx)N(bf$L)QEab)IihXmk_+X2iz`B~P&?e-etSKzSCEV&M+Zz9TmNUe}! zaju6#ku6CvUV*b<%Xbidq>F(Pkab)9g52#iQWBzcx7Xu>k4@XZkiGQm1z-PH-*q~Z z@#!{*WNF-KE{b)ZT1lY)H*_KF%vYyz%9JB1^Kpqa2G5LDLv3@IGl^21lS^U1fa&)3 zEJuc;e>op1jC$di_I{q8BPl02T-K2gAtUm?K?-}HlS#zKmFKYF{ODEISmpAXb9eHn z_68sQKS~e<^!0g3AhH`7ps;m?8PB$o?+Mb?a=_(N!rclgo{%SfH|XAL_qtdi&Xy!o zGGy-UefFtRHjE|+dJ)@^*dM5cgK6BZ&K|%aSI*xR7w^2;s_S2uG07+_*@0076&J&p z8*~Bt)ysCj#vK1_os2;F$H*!%YS%QZ>{_@fV^Zc;STczqLn@zRlN0{BtqJ z)VSD`6-adzQ}Rnf5bD@O6&}WghD9#9Ri5ChFRP_;|I;EGq9ZF1RqQi3UDVA<8p$Wa zALa`jI?oI?9$;H|&k`ec-OQU~j!oQkVgf?UR?idGvqnvlN3-?8(7~2NGGL z;v*n9v1jkCspY(I?% zkP#Qf?4VD-hI|$ygGx{-epL#z** zhP<0+abQx>poUrkmxASTO{QrpDlouo#vmh&(pn1F&{ENKwqjR{N^w@)w6?~lLiYzm zRG1TC77(VQa*`RxR4B#u9Xj<6IAjW@aYGgKeDV)CZ2D-c2N`L!Hn|>q4^Fyvvy8l1~4s6P3KA?>>dAs&UVUIUFNV}+xPBD16<&?z6FuD!hG!5L{ zM-{H?+UK^o%9Ovia(%Vbpp#5@HQy{$;A74rkcAE-l;3%lhdBPWky=R6{%|i$yx#uF zmZIz9;pVfjMXd_XFhR=Su>L1O0Du6kB^CKiU85*5xxfBKB=^F1Hx?lYp6%;0QC-Js zW_M2djL6v3$Nf3J$uIWwX--CgNakursogZ`Msi@X?Xx~Rk9&ONgDRlQo2e5B;WhO* z^q^mw*E5Kyo7%^jBt}194Rc=tLGy$RH|DHOqx8iQK@DcC)=!B9) zN*jALo7tX|==rN?s-)DG9?3iU@a}il6h2z-<-U(naq@d^9K}+4PmSS8yyKS4ly}Z9 zSxAuYU%ZU!{fxym2>PT|?d0Y^^*^Dn3)uWhMByjf;*~QBFqOz=no&&>j2|v(Ka)!? zv{Kok(s>%Nz@eP5&oAEa3h8E!Vs?{vSwyT%UZO24udk1dZY`G-jP@CCiI_aI6Q2#h z{%8RxZh%fUAwIc8CYj<0i@KPlZ>3H8{=$M|R+C$b*MAz!mn+XI9p`5CO>1K;847CH zgR%Vl6ih-Ewu0liRNRDWEWLh4!IDfCA^ZENK%^y->$lxp>OYL@T1Y!Q@6 zL{hw7dGz?d@&?IWq=2SH&GC7G+Lmz++(JNY{JZQ`=T`=$-pgtAvSsKu3&imRT(OPD z8#^jwdIpDAs0SVKE&m_gABK**jJ9E|VvkcJ1d8KcL#K6M<-qS|P@<&VjBNaJ1g~tK zc1=Vt&GK6vB!0%)6C=@8#YhXEg45m(oD zYW?&p+Re%%OniR-ak>o0-N&p~piwO;wpN1qalp{J*=;gtVi@=0tPM)EG+3~Gi%7Ru zjlRn&yAUaDS_w!~C}zU`Rc$_AM$e#g))XJsDI@k1H7r@s911w@&JmvSpkR-`uWh+ZYjd#i>Q>7CoBF8EX zay2GnOY}9#RTg&F*2%(Yucf_dY@9O*zP4OwsQZu~HxYjmM?!`87Y79n z1N!y16x*ona2NzcL?}|m)??z^jl-04-f5@Q2m4fqR0l})vHNnyqp;m*G-6qG!vUAa zM^h+)xdkDZh(1S<6|Al)ee*@$x^4UiuParvjh{9emQc@>-;>-)JxGk_Y4U0N3YmyGcLdRs}&FBBFUwEv)!<*_UqZ`wT)hd`r*pcS4EO zu&PZ!UU6xPw)@Lejqs$YKE{NmTkoJh^W8^UBtrP>#vnaivqp!v(G=XqUoSgLk@*XI zd#Bm_w}fp-@){W&-8<{K1C(+oig$TZko^&mtuZVz8MGdL5VSJZ`Bb*v{&~N^IhXiQ zqbI6)+{w*khCsj5xLu5nGPpm<2m-T{zHUCY`G{n216f9$yYr2;i#lcO(eb9{i7%Kx zmguOS-cH~G?po=rfMb+W7k5@|W6{+oIa{A+s+Zw&&P*?Wu+@-aB&D07o;NljRwT^y zYIsTB@<>0aiPhCLq@dJYGt+p&A1u`^7!>$kPO80QcIEvQT!-S9!*evHa*{S!;vAa! zt5`_c`Zu4!*RA|biXggA^`WEI^m=CXj~sg1$1TioZ{Yw`s}p!=&+w6jGXNgqv{$8* z9*l2hcV)oE&xMNgBny0igmI`Abg;Vp~_kbh3u?!zhkidO=FZ>kJ<1_J9At$Z|OiLTWM;7w!- zvGc;<$LVX*BnyDuu5Zka@cR2_*K3O&JYZU{K~3MIh24Tk zWie32i3R`yRl?vce(qid94X8ne8i;zD)i>H%;(i>V`v8SCw28v064%|EAp<0RELU& zlUsQ36^@QZ-N(9dU_+!oS4Emoqd_i91HCroY8i5A&DP0*jwa#{%g^e7PyXxFTx4}O zJx*qzfeaWhzaXIGf?LH%9Alm64Iths=(}yyb80dE5WC^NjSNr>>$KfyPOZppRKXG1 zJ~DdT{SInQ%~U;q33m3`1WzP2M zi))44L!^tDTAuRKDdv*F9ADAEQb}zXCmQdzx#aF%B<&RS!S9P1n*|Mr(PHn$T<1La zs3iPm8#3h>a3zak(Ktx-a4$0e*CRM|&$aWcT)%q!>0RXM`nvf8O7Xe-|g zStKp@I}HOajsJpJz9pAcq!Kc^jPze)DZfGYi4lvu4L2U`vhRe;O!F$OPRsiJl??Wz zoSL?8&S>(aQSH0T+z<6FdLn-DRAq6ds6oV3=@tRu2YLaN^^P6iR2w`)WkJ%MeX7t$R zz@dgoH+G#iFOdN*YHC#e#&%sOwe6&UZ^#sneJQ~!e@G(mCw!D~mU;3& z_|;#0QY!!XqUlgX;nr08JAI|PLd~5u(__{64XWjmvg$%Uv$wg|QmL;;Nco+5ck|2n z7@5#TWu@y3ZSO&^4n(8 zA-v)F|~C&w#;E^B2`L-L@syHAsNJY1#`HIwAu(wJj1rG!>Tfd4dgn>k#Q33YbL^ zuq|B$SvB&{P2A;z_kU*{mQkt=%c$Awn(B5=pqgH#L`Rz(#l&)4V0ZOt7`T}1b#|AwRMB@H{2JxR3*rZ zS6OCa@zCldDP+Dg-JMQaNEuMMk*D`_S_?Vqcz&*)Ei z9*QV9zw+3!6<_z}X{qYy<;DTMam>grhGCB5mron5WR_-vEvJ6_xaQpp8R}Vv8w7e=&cKM^n7oF7*z%m*Q0s4o_ntzff_|gAq0wjFl z_D{vX!G7im07!oMZ`b}mT-d~xbMGCRE1F=Isl$A6V9w#sApy`^(roA-wxds281E7Fd*M z9bL4oTNd7GqFBtWtHTG(hEnjBHsYGC&tGX)z|inNv@n2-Wmd8!m8SigQ+-vPVdLDl zCRwm}kmU=h#i)A#eE^5U*|duTEentKvwhzkWLoc(GU#6Z7$AS}z595Getb0GWqBAY z4gjcjnT*?VFB2(^E7g~-3{RR5PL?X3A_~wqAM35!+{!-ivH#fETXxf$VzXmdsHDuf zX?frQuClIP(w6(24K2r)9YC~wj7Y93iHFiU3{ z;wJoj0#t>F06R{)Nxwsr;qT57<`9>uG`O=_7ri zj_;>=!Wv1)z(D51?NOcG?4R%1NX7bE?9U2lWlu@>GVc!?9?b>%(5!Kje~&p5uDT!z zlv$^`*3Ewb02I9jJM1KIH|>N+{^(GgEEF5Osn3{Ho>G7arfYdr)1CON zOy-7h(2}0(z;ane%i8{B6#$5_J%afWHFxWo`iV4Alyu`EPc8OzGVBCtgW|oqXIup6 zV1&Yof4h86$O<-PzSz^AwdOz>0FxeAVMy?Bppl@lv01PDDL>*VNjVfubpR`5U^DZH zJJ{si^lv5q32R5sAf4w=xea!9!fwzsNt&?8NDzPlmGHm{@ydlK7znZ9*Z?j>aI6^| zfu(TF6wkOSYv&4T4SoHi6Zfs*^nvxr#W8e5c(7@jMv8-lSU`9rm-Qn39apjE`WyG-&P@BpV^9q6o?U1$ItPPfvs8d{o5Xm;cxZ z@|CVb?RT=;8=SVI+)h2twrc9?+}zym9()gQL2e<16$kQUBhX+bvvD3|0bgv417;f_~?|+{OxPRdT z{P_ojaG$?06Zei9={Xf}q-x*3CeeOW5i%#pudBN{-5j`D^0J$4uwM*4_L<-&_=Y4( z$uQTG&P^UXJF5W-2-33=--~~g0IU5SSE7I-b#vs=`W+Vjv)1S%`OUi+oWAoGHn7F~ zO~-JVT-`$Y_wVfECUv|}@!5j|G&`v}OuVN};usYgB+9z5PA# z*P6;ZJBxyfLTam3L~Jm90yny6{p<$uJ-VJJ7rYGNGOVNd-|tlDxqRr_)7AAgCiv~T zT+oQw;*_uk9pm%t?0GNunMJ*@=jL;Ir;>@+1asZ&|!`1TU%d0 zbiK=#2=7is9Z7pvWzZhz@ChF9D{HzWh3KxQGd7zV2I1(df$+{7Iq#z0Xv|jB_eMcD znT*Y-Jx1C1PazecnS&!a;whw}N61h{1{~J7q2h}}KPuRsrsKw-%%>!d`mqd9EChl& zAkDzS!eX2Z+Bv#59l=}@Xzc}f@W=%HYxJ~)zLX1%irPB60nc6B+*8|U={3_R@Bw43 zgY2?CK7vU|T}E%*Ou3=HK{)6L;0S&`5;WYha%-yapUTP$x-}U9?@?eID8zG5o&|)tUE9^zS$lwz-k*|KejkOdp z0IDqL--2$I7j&Ym_>T4WA(~HQ&p9}i$4yXgpwsa{mFB-_+8{?+F(F&}jdD5$7H;>bE<&d)8`UkQ2v^c9bb0yOj2tdB?6MliwjGxz4-q zo&f0f*!wGiFJ6Ut^~XpR`yB-I5sc0__d90s62ZSu-fQntVTVVXc&aR#31h<1F&du4 zdQ_I>cP6?f0^ib0wc}~hpvTB>SPIZzJ&xn;1-14TTWp>7kn>hKh{B8f@NScPFK!@F zHH;Qg%9;qQv2KpvRC%VzPw7Ibv%hrUM#^FFL&o6zVdHaE_#mqIg{tCkTRzhQEjH^X`=^{H-f80Zctf7rtYoEaqKioh39^gv zI=6H_#mUX$J61&)gVTPrp~pJcO?jpn(4}v`tY5C1uHjjpxIz=^cC+`PUkA2PJ&B^p zZBJ>3qWx`}dLV=aI%Vk+&Rhh;byb07y-c!+o69ZNOra-1u=|3oX)+0OvEt7$P`GDa zyR&1S>f=Up&M3XRHi9k;1Z*@E987$pJ^fp(`i}Cj+I_2U&0&|*GfiXWoZ*w3&_x60EyhHWJ1)Qdh-->Y0Z?zmd( z_}x=c9TGSoyZ(BqYs%G#zME22jAh;?q11YdFkB437=@1jRV!M{;|X7QlG^j z$9L=trbkmYs}FO!u_b)a(McOd!}l6b+)+k~=+v3mY4N)*z#7B#kP6>=Cr`pZg-hId zniIPJx=BJOU`av8&B$ONcPQ=~zF1N!98liGNyjP__;K}b4^BF%FR-(_L$$u1&rcFn zzN_N1ue+CbW*&p3^`rGHU-?rDNPNb=&zGmiIj?U9FfERPuHQZ$(q+Ow7MJSPu6L}i zUlykyn%l@ZfEg6>NyYf6z{*)D=0AxPZ!;GDl}LeuKjK_d1$<5_R%Z_P*YzY}gS`AF zks_SBoB;@Dh?DbFZrA)qod?`9AB- zGt}qi@^=Jb`(-K7IxSaYv|z7E3IAzI_O>I0FlF^@Rs?2{{LMP-Pi>~K#~u-Y_G}jo zpZ2sRMtMwjp%5oYOORAguUR%RTidzw$Z&bXmKzLA;wa~S;xK)FgA|$MEI#<93H1}P zY!Em#sh)4+NnXg(}>p_Q4*$J=AX>Wwr+ifrG5m}sQL%|q4}83iEKgj z1{UG+Dx?_YujAJ(rn#HtfvMitytSd03r&v;s*~lHc)|jZ7}+1&E8S_lS+f;VY(M(D zVvBmt&dB2}O_Uo(Pkz|rEuRFM+5`)$Ea+B79BrBxcNq?4H(1&D=C#0(7!nnoUYVEb zwA?x*n4ESX0s}{C_|UBKHoC4!lG4XH7wbgD2h;Te>qmXni*~*Ryd-={!aU7pssakO za3W?t`KptL{uWr}?1BzDW&W1M#RzVRW+LBe_C;!4iErr}zpI4?tP6xMt+E|bLFXTd z_1&wcyJ9Qf^+$-q*;M_wOh}F5?`I5i?vRRRmmMClVnJ7!Ani6eP8H_n{F#2bDb2-% z#--dk`8(AfPyT&7U%D-z6!!pGEO|zYsB~fyl@WIK-YMYeQi zh!W18H0uQf@vUnmG;k{qrz!t|3IfTw6XY=k>m1lzD*Z-msSO z6(CUSgNH{xsbLYE%XLd$!lv`)AiBU~py=XG2QYA_ov1H4U-63|O4vM{`bzG8Uj8b^ zt3Tp28`3tEIN_48z$h$W<`y8E9HXuhUl6lI1zHOYNQ3oTFQJqn>ScWljG9T5U@zC~ z<)gZUOKI0Cl4cm)esV`gLJ_eax@P0nVPzP?tJhMdC4I!Zygn6T3fe^@T+KSVtv25;l&7S|<(zD8UgbgEjo95^+!nVr&uiSWQrmIl5Q+fc_ z9y!*o;X!*$!32@*Ha4@a~ zwj0TuC-33A+4%(%H9!}GXB_)wcadnLQ|caKhUY7rEZUF9sW%8mY_yVwrw+NuXZ_ATfIad zf2vWQ^SxAy_mM;ZstINESs^xND#g#yGN(chgTvJI7dAnov`vq7xeYI$iRKL(?hc;Z z#2xK^-LwaA|B;cW)h1Wj5lx?kRfn?nkcr7-<^aXsSEbfBJS(}Mu|!$UH2{QDfc4us)#vW=ngB)#3n(QrHrq8CxeZ_!}pC-?ph6u z>+Q$rAhDx`+L_{UmUsl4r3bUTISgRPOJ+LhsP0dv$JdcoWl9@WqEyt7@JY>6fMlx`#?v)5&F!nax)k19&FBXoL-3inoqWq~}c4_Y^rBggMN zBeZ3TWw{FbhV=_8nzc>M08|PT>Cv0=u%ZvDmu;qsC7tJTbGCQKh3$58k6L|RbOnqB z_BO6XRke=m*2co;Z;jk})lTT~X2_Rbt2SBYJvtnI&m3GuDxTQoH2w2qU+4?~t_Slc z(0eO6$g#hJ^vDlas8Oqy#=YpPDYLTMO|=~254vj<8FW{hQ&yBf;jl*y4Ge4Um&->m zszc|E3fVE6uYfX+U-9_&-0e~rFRgzu6o)CIk;Q#)iIEjzjK#*p=)o<&%MlNAc1lM9 zV@Tjvq+O<@BzzSeGJ=2msi>W19B$=ZFO=}0AOwl##3Q`j7pmc)7{1qQzmWT-Q)hbz zB~6_%rG*Dn>f?;GCNOogeA3s+c9qw&&G60fe_^n#slYt@f z`|NYUxb4>aHT5$tvNNcD;$a?K)-xiv=+TKiXSnaryDA~T^_(Y*zu)Aq`XkQ%`>;=*&j1ppy9%to1E*-2{WO#a!;=Zqz81MvRUe{E ze#+u{B&42WPmB6CRWuHnSt8k(U)WaRkE2QJkH{kdHGUW2P1aY0yRXlJapS6>-;?1q zFQcWOb08kOJZotjbY8E(3f&t+->hYH!pM6F)_ZMFR7+%`RsvJhRLlnvIXit_GY%DU zwow7TTzCSH?z65G_lvNP%1G4{?tg4+v@AxSf6zk{_L+KynCB_kwx-yyQrtLL>?>7? zXwX~U*rVb!h}IFY{V1*49iPirDPDxW8xgD%{p4TUqtlev zeZ1=lFr*uSY)kf^1nBR0?*qOOu~G#Myc>ZkM?<>&V1 zE1OSd#vJEuYhLHDRu?+y}XC*l*LL-4KMeEv!>s22=(%uhrL*{&cRWI%p%dk5$KbtPV zd{__vXP#+hj|nAd=ci>oWHlQrd#^xaw2f)RBh(e{PuBQ>*o--NtI2OM=yKrn4G$pZ z{RHL-g5k__z94^R;C}GK-zvnV8C5?RV%CA#7+9iQowetwgepk{^f?Tu8j#k8qhk`e zz{WTGJ#c@J3?=Ct?|iRG>XmA=IwG&N@%dt?fvf=}8fr+AnzB?!oAyRcs=>H=Fv}IJ zYBcpn1{zkkXC)@kMWkVDSrodZR1sU0nQ=}k(%=ihm4KUl5FD)N(>{zM10;&5UV(ss z#rwV-fc+R{lLxU5!|pt6A49%ys(a~eU*zPRXBV`{n665m4OTLYq%s_~pPsB@>PM^C z=LpQt?K#HgFgsMMxraA;p#s1YwBh>xa>VMV`^SY>TDmWhf0lYa;7o}H67TRy;W3us z(d97$J3J|70oE{%8X*}5WFSAJmXwpwPaVDEG}e@tdFkk_?JuE8@-L!k>6ve8D^?S2 zeB(cOAtcBDzHiurEGKwq27~Q^=bXI0C|M^&ZdCC!${c`t4y4CD~= zCj5bn5PATn9#mWuY$U=IO|MgbLv!bh-avVXBh97V9ziXG2)();V?WU>hS>AMg=iZR zK}NWD$5?RxgR1xwlIzXmZ;~siH?o)M{gdQ2bJ3gQPddM#Kk2IZpBqKZzD(I%p0;y! zCi;=~arL5GSZlOKM!9*P`seu=BQ7$oWVwurNi}T@!l82LY;$b0$8Zj{-9@H1N%6?} z>mJH|ZfW;UoM8*RnLmOprtS|)RpjdGHs!^FwpntG6s9$Lg5!+nLWDM<#%^MeXWiH| zfd7!y8GLVS;iIrBuN~TFZa_rZwJ-Ry)lY|54y5xdy8uFsBw{U$1WkqW1Ce$fwNhPe z%lpoyG*b^;BoY44FUS-m0mR!(@<|xU%4j#9-6Y7xg9pTD_0X_S7P(ECL%xXxc2Bid z4$pj+hRi0hDRRnqn^x-wmfFX{iUW%L_gv4q{UQ|76C~icprwm50>`Nm#LJ8fzASC_ zJ*X(e$f&qZxIjcpR+|TJW}OEd?pb{7f5jb4j`>qr)O#b2@N5{D8;;ma=Wy$zl9@&R zGtRIUQ_Ex4OemQFav}t53Qyoe7HTkDYy>H7?3g)gX3kF#ACch%Pr-+;P!N79U>2T+{>m&I0bL+j|H-M z8U=BOup2T{mir7Q9+cufkKei8Jwlxe#dtw8_q)fPQ5<1Z!2IVYu%fNqidem!4x~N+ z$N?Ck;%-$}=6CWn@-8LBCuBg?rg{Ja@b&s)yn+v%UcFF1vB2X+o*{mA!QGO0o^icU z#)m>rHensCqUQ8v2m@HD=6(k!=@I*RQHDet0!eJkDl*DM@bA~kLNQfquFgC zL#v`lAz44Fd{&Jl+|Scy$o{}8Y~H37M{m!gbzp;D*vsJkf%`h?%&c&^ci>*e^02is zvV(+0qgc4&%Uf!@yyr%E?}~A`kCJO!eos|JWDC!!?jvt#UC@z65fEGwe7-p!HiCzYV2py!qwxL zfxM2cVnfs-rxDExp^ea9S{hPt7-y5T-?KUCXv^pTyAAI!FtptmW8m%Q zFrXZ$v@TxE@Pr}@q4U&CWLESyW2n}v9L<^dF4>#s()AuTio(Sl_gh6h4kO!E5ilf?9|kLN77|UlQkkk{KwF;6NCKZcrWFyD2b}f(Dy##tNEHA8=xS@ag2#JWMIj0a&GZ>k#O?kh?MH+A4?f_{oY%% zON}S``ggm6dsI)Y%^!qMT7GuLs}kcMf4>z*v*7lNk|&6&-yZkeb?+k*FC z0q5|1RSd=2#>c60`my9Xl{ce~DelWf)kNf{NOeTCDwl&8#q2!+#fKTr^mx{z&~pvI z-=g6%<{h(*pw`(~J5KdRR$As~ojP$oE1F@$xT{&%?>kf$-D{OH9>t=YFrL;4*GlMU zyF9VCn>B1EoR-b!(3T86RXnyVYo4WGB!esSYB5#2V$!A8`&0gqkJW4+3RpjP7;_$9 zvS>r?FZWxwmS;}ytmU308|-R~VSE`J!aH~zs4Juok0}#y$j1HBb*WD8=1~-il2%;)by>H754PN7 zRVLEkc|#o5mdr>{T8NI*=x8$Yo}b_C#;sB*=l%Ce=Z(fD!(zg2pWE^&GyH|QHG3|8 z64DZ#OAH&WG;~8JC|V^ zK9$NPj~~YT?hSs&qu69VblDFtOe|T{%^mVIwIrLZO>n9`>|FTiGj75iZ={$GO!Udk zaL*go@w&2`RGRI^-3Z@kj^Q{V0l=8jknzC8SHZGNvnGgd7t-ln)v4a?&8^*{SEt|M z*gS|%Ip*j-mTsyv-DrG)EbZhcKCtsbe4vB7>n;W9lXYRd%wLSb^v`XP^ePnx^I-m; zgkZ@{!o|%^-i=@f?axvEu4|i#YZ17lRjza9jaSOD^ssQiHrFNenSUDhK2#0nzI_>h z)m7^@joZ9E+6t~e?S;3MEfz+Or=3D1<`uolP=}a7lL72Q*6-sZ;H$VBVIw( zhs*m0U4;4r*K6j%`)T>QQ<*7|C?wy1q{CbUJ`!gUf=me!T4<|9RotwaO%Y=;(wn@& z$CJj6*KM*Mm}zS3Wj?MPv^fT1S+!FxopX;rkqG1N{(2-Ak|KBcDS36`r!3q5Q z{13i<^tg>T6QD%o`ucjuVz3pNx`SKTmk z9e4XAC-mN9LF08L2dd9a1TWg9yo=$ab}GgBCg;iDH!<&IH?Xataej{v!*LK1I%fU5 zab>4FyHp&#o>!Dyle1SjROhA>Hh1<5c5Y`gP-d-;mc^z+jF5D6!n%znwoS`5|Azaq zqdLFIVF1?JoHWh43T@|(ndA%*w}3P?U5w56Rq1%T*!A(lG)~V7j-w1vAJaZ=&0=-7B)F6Mr7>ik5_4~cF*Fxk+F3iRn3sDl%b9BgNAC9nlG%T*F1z2erHN*?Ac9_5;5se8X znQu3KLZlen#0dJBV|pNmQ2TH*DX^}h#Avh#4Q0c!>kJxIq0Eue8;n~{Y2%9m+-9KB zWh5rol?It{aDe~M<+*_*DS*zf=>uw{7|6CHs!Se2kul+%>pa9m-O+f1Y)ePnR_vRu z?z!Wbw3+2pxvWl5DmW_zVGL0LZ>M z{o#*>0aAMr&W}C@f)04Vd{lbT8nX$>*thA+q;3=}mxcPXFT3Qq$&8 z=KU8+95TO0S`v=1Q5yv*?Ti(_io41_{JbBpW1AME^r8!CH>F%;FU(siZ#ZfesyNe} zUSi#18?x}rJlaj7LK3nzl^MlQ`(e4i)I4%K7Ef7UkS8{YEx# zFJLa8@ zB9?e?N~p+rzccXKxa@62q4SwN2~Wy<+jLD^>%cD>`H?*xGx4a%UqB`y<@q9Bz?XIdkTZHoaL?t53YB-5^@{`_ zCGd+WX3Fy{g>M6X0V4kSyJcmpq{=`Q7Abu)DgupMUKDu_NI4#j$4#h^06-=ulwV6FOA5eZy>YdcrZ? zrVTz;w6-p-pA4q+C-o3}@XAtP*1MljNyUPo<@l5+h(lFt-k z!9ODn6l1MH8Wn=I=+F*2D?kM2&A&u2G}zp{yk0F! z;09*z*b2GvX$6^afJHf=2hU0G~!>fyg>_BaDYF<^GjgRijbbF9V*&>!Xe5oG96^1F;qEOLx(14g#P#i4vElUzaxn%D=Vw7 ze+#-h)=%tv(M5Twr8q!hj4|Q#=Dxz511f$kCDv1pUTVmOkwr*_`#fLj3%Gll`;7nD zOsh;d8f0m(V`vCT@m_o>WJkOv$rPJ(W)p%bl+7BvK7Y^mz9+@H!oN?l#`T1wW9-B ztD)i6<3tb$5>t8FaNlDtKKq)bfJ%OXMQ-N~B1to4x~Yxg-!O@CUJ9?C-E=hZM~rM! z|6_cij_yHw5kb0H>j%PX)URWAeaO1MS7&t#Iuxaaq>Bc1XaC>fFJezxs3mMUGWwbz zIocLX=wf9(_~Zg2TXPXj_TY%B!@@&SR6G=Hwzg%H_{xb;J~Oa=CKbC;NioBac0iAH z+i`aH0BTu;GTGj}d-pHGj@#!I&}`S}iYK2bV&SZ)IEK&n6#^*}p_Kr|AFU=V8jUi{3MznX2lrG!l>sxP$oa=g9$GpHQu>Ux(B1`Np+ zOn`AXGd;nGG;EBFVLj^*ml<79Hbjs6l8p54!UQ!J_tOwVd9l^;E1+r}Jla7^6JhY~ z{yt}#qhN#mt1B$2Sde;Kq;|s=Ge{N7Czi2en&G ze9-|At60lM%hvqnW$>FZ6r{BPiXCe{(}q#v7Xd$IFIJ2g2?DD!RFQuJa1tuq z`vf%ACk$oyWq`lK(=5{1a&GQlek3X*qxtPVcM;X!P~~#ES&vSgdrJvNA=|27KtWZJ zt-1ZRQw{u~>X78Pd#@=tRItZ-g*EoxFziFYw{++Z@W*fWU=9sz3nGhFuRZ=v8`x_d zrW@61zM#pGVw!Evrokl-QchU2muCg?)ku8`3P1A4AjJETKf}ygSn#8#^(mnP{nB){ z(yTslty8jkRLKk};1E)uN_X&U9JNzD%ovfp?tFlyUC9nL0 zTAU9oT9_<j7^=A*cuA_7F@W+^(4IZ_aS{UiG$%MP4fuM z3$D}c`qj>g@XjQqHM*ZP;{_i2wAk+gLd+0EMm9UmH!*0CQue6I7%r>*mYnK72(wLF z3wu^WGI75(=l52p*{Ie*SvX%KZC#81MMwsUgLEsQVZPu z&K{JkQ2?N*<87yIZeM98Kxnj46=#G}Tr<(x4gQ{_hz}!_R~KK@)o>ok_NYQN(6!NX z$c~Tv+d;Dyhy68^mjI^e_MXelx1=r(t6v-t>0SF-Wj$#vCC>uOyM5)*NF_w{gtK89 z2(Y+(jP|?VojW7_Ok>OKqgy88Y~ERz(pZJx7_hUuN3(8%2w=Sq-*vdj=WpJJS0C|V zRm%(g5;KeY^(wzxU&ye8U&~2?OIQLk^wXOZ`CxciOn;>5Wyo&mudt|3t?H~K1R6g7 ztpTrsGx7f;fR}R!3h@5}UjLr}UYP&zT^3s)P8(CfhWykh!1Etr+5bKN!N?0gU3;hC Tku`#Afq;~RoOqe2LE!%dShS6o literal 0 HcmV?d00001 diff --git a/docs/images/download_button.png b/docs/images/download_button.png new file mode 100644 index 0000000000000000000000000000000000000000..a077a7afa8f0366b22afa4ce9c72593d69622d48 GIT binary patch literal 5758 zcmZXYWl+>_w8wv>v@4A?(v3)mG%QHEl+=RKjg&M|M4A|)-cbR#Vx-CX`N z_syOA=9x3koO8b4IcMg)_X@{r;HJcc_|?#H3-#ST@{dK_J`>#adNj!rpb47Ai9rnp7fR zG)j)TnbBt;+!cftsL}_kuJ)o6+Xdwt|L~}zrKN|Z2VJs4LPn4~NO4nZynLE~>!!z9 zjQ*=RR>#T+mZQq!AN+*z&>82=x8}}8LvEjB#rH3-CY;*)XF?0_Pg1Uo+g2}~+hcjw zc}Y9de1xL#{KIh%rdu+nMuN$xAb%?AMU=C^z8^d*HP(`ds5IkMn~N!2DkD!{dgvu* zBvZjZ!Bcc&xQr%;r#TDVGR;nM{QydJUYF#awvRvHfoHCS22^3!mY!|+*}rx}Lsb(q zRIj`O23`)g{hS>?Vqx}9G{*C+INz=!^+x}}8ChRG&wPo-9H=w`X~&ua0FvimIcbPz z)VqcINEo1=J{YHTnG=}60xGquq~;g4K#W6FY`r*LsWuiYm#(881PZ* z^nn*7`L`#yQNQt$<>8;tqW7W5c8d8RI;6X>NV+KdLnc3LbxVpX}#&M>)l*I{_q5}Z|rg|CMNUlP<${LywVVd^;Dnq?c2AtwYBka%>>56zM7r%nVlUgWn~<2!b*eZ zQ^JevqM{+l!88;1@uoY5@%~oWm$~ zd}d)|W1DUi`(Q8k|J+J<;RZ@og3TPXd|%E&11v-kPFjpTx#nH}c?q^8Z_~33S@w!X z1KwFUXHOIyhe*+Nyv#5iMZ1+;P_3+NzMpPvM1N0!W^P02DM%>e#3+aj zy;0~tu%z4KrxxrRXsj96n7tDM042mRM2k^#=kn;iWq~0V&1?=Xjkrm6h=ilG&e)H! zbMv%`@Z99JuQ`H`7VWPkIx6(lmz-m-+DX~Z%Q!wQRUN!*?$yqx(^*dRiYa?X7HZ)S z_52VjT=UCr@P!#rV4`=BWmQb-*9!Ne+p<@+;c|rI_ftVW@3Q+|eNmnLnC>V9=Wa11 zoB!J%QHHJ_J#N)LD9&O!O8dTD|#O6yVsk?kbrC_rlfVUW&6; zAl`984Yt5j)7<$MhE%XKdRh04PRTSy&d3mH*!j#*z@0A`NrseiMvMrf7dDN;+k z0`3XA)e`w9^hV#OztW`6rH#JP(I^aQbAs&vt+=8!@>f4L;=KmIEK=0irML&+u)myG?+EH z%V&BB6(N=R?X~dDwvC;DCZ-|)w6c?6G&l1zBh`#H?2mJ%%9kB&#mb8zI%97DGAC*w z>(5U%tyY>v@2LQ(Dbi^8aE9__cz=mbl2ICwTaR{$hQ7qqAZC}9kMuwXg6x?-ET~SO=Oz{W9C4PkOxCQ(dm509x_+Uh z{@e5mH}|XF>n}g`v#W|O^n@F z0X=ab>Jau~4wA%p8;>~k;Bu>VHZgc=9H-=79;L0eA`A@EW}UaTJe*uHqw(68WQX<< zgw5q?Z?Zyet41G$Mdt|(SS&Wn29^nQc_VPEg2Tpl4h}Xqwr(78|G1>vg}u8tJ!rTy zWL}_89N5I@Y^T`_Efd4{(jPyf;S?2~{lG9(wYPOW&@m7Dgh6Zcg?HdIUu=6hd1z&y zDr>L8_r38yB;(j=8?1S?Dk#WT)#FRfHcJgv{L%dxH|?G{YvLx2sK++_*l9jTis2lb zOjdjh&he>5VCK80q*Jw3Sjo>X9tqnlXk;AAaU@ORt6%(T+vQTcugvIr)I$y%sggR4 zotb)0?^b&~Hcw=$JZMkuoJ=O+E%mvnjSs$HjvJemgrlk>KTrl$+c<=Atja0usuPy- z>p~D?YyRw(aBjH-E;R3a6S&VD zCMzmO%Canfh_1{l@s8VOp}os5hxT7A?(IKmJIn*EL*Y8=a;o~or*u^ z6)QC#Eu!UYzf!$Iwup6$KOQ@5JGz(`SAC7|8&ny+mJuI&?lnd|%w=_jJEp#5J1{ksrpo)?k^7@ir)lcT;^IOZ211b4j zqb&ES@F1XvQqZzOJ2Oz0A*Wc&LiNh`4Y07^!lrRJ9yyIt6oHFd6ts!@IETE>b~Smy z)Wc_Hn_qmRvHY>4D<0tGhP+H-KZFn`E?>U(PLhOGXGMk>? z_c6um0SLS`dUsgZxaUY35Xbvekl_g+&fSzLFsIL&^A^c(n+mvb5o3YJUb=EX2T+{8S#_9 z^5Xu4sc@FuZ^*Ob7<8@R%N(=Da4ubeq$A}#j_xIxo}9xNY!5L*?FJ8?bs&?XyFFtY zINp(vs9*=k$$Wq))g6u+bB{8s2!!bG0|9yN9O0c_q+3mOqVrl44X-V3&|K|&`??y^ zYSncYUgn)h72D>s7EMe*C;LR)Z~z1fzzC>3>(>e?I6vKtli9&0fDRt$4{sY|2E!ci z&D+yiO2#}^wi+|NZ+>tU*PsTY(52H^NI>EMULs>*9=Vl5`s}R7O3Zk*pHcxim}_zf zx52}|?UWfP0mrj%>dY~r!PujqLDdGbk453{sDgTHFM~do$+%n`xV@7rlLwB|kTAC* ztBpbvayDWG*GFpA*k?wLD)Xd<9QWMo1hKZ`GPQQ+`}@Py6_qYz+q)+g<--NDL7V}< zycbqQZ6J>|X$hK1GF79bW|OV~TX!b=jNi$Ua^?C96Z26p1xNhh!E^&H0emA~JkuhE zuppvD0AwLNel}5u>Ahm_XmxrQosJGTM4`En1I>HN4MX;#@` z?8tQBQlg8uY*E~j4h38ia=%i4tRt?<{OhcRax(nQF)uEA401e0axT%y5M&lsSiz*0 zGj8*-we{wW)PUg~LoyOy@EnJM3<2|7`E^t2ikgDH(PBri!c2nnYJc^U#y|9mvLN7WZyunTv7eEZJR||B@$G+s(jP0W{ z{a5IpzfL6I*Kkm*;!>={{=zbnw~RTA*T|WFZnY!3Sd!i6Zu4}co2hst^{m6z;gS}f z@mvVjra$8YLPHcOW?uyLnrQ5KaNba;u#96FH>NFMn1BCpmM$!XsO$XQ0Li1dt+DrY z$=pDfhXO{)5g!2{j&*{@gZobY=}*1fFk@mJ@PrtGd0U5b{tbKbG2u z(vy>8l9yEqCoC8u)=k8SO*s6~DiyU=QwdWr73fwd+4jjk23^#Lr0)Lb%`Zp-{U+JZdcFxVOwGg3656FfX1<&&i&32q>c0 z3Esc7Ph_9k)6gN~z`W)MHI9P5#b*S|AUwo4my5}W0ANwb&!h;g2pb!^)AA+)zB0y1 zS+kZIvac8v*uo_f$YU@sj>iZ{rDej?OxN|)=adpqOFI4iX1iabjn6!zQP=6nXj^kP za`)yZ8QeshMaLQ&7Wvl$665nuqcjzX`lYp_vI2womO>>xyaI`fyN&#z%NuhjpfSM?DUMU?dMVw(2FQ?S6`B5)q>okI=QHx#br3^D{og@b z6P-y;zI%81cW9hyHHEhaoe7NCXLos#yUsbzBWm3|EYZZ+JBTcamIdy93?6tqBZlkh zauz-F%`QF4H6e{j;;x_9VIPVpRxs}Y7?o!%o>|YGfkNG{O*99=9yHSkYp*M=YT`PX znSkiKM~vsXh*F*nm(>rJV0@Q!=3e>PAN`yU4UZp$x9BRy9+hl@b#_D&$rq4o1K~Mu z_SrKP4tP`qN9$6gT@_@zVGZ;PkGh+m5yRC|ZSufkJ-K+OcEMX|nPts9Sza(q&Tc z#c}k^5Ng!byiIl&1R53!0NuRg*k}Blsf@(Tzn3Yc0dCKx@nu}kG}Au1*$*Y$^({xA z0fg`V^C+y~%!IY?Hb|9+)9+b<&Vb-*IomX~J+1=eYe?APvpMHJ?J~AI#4aTY5cBWW znr@)6x88yD8#8L)(G$Ee0Uy+bZ^B~3KBl9DQb5T?SKAGBFGUjb^GHQqT{|&k$`XP* zYQ-F0|5ZXDtr~nOdJ2YzPyvLfb&kw$x4y%C{fmx%zs31~_*lH`Jc_F#`^T>Vs*UTj zEEWNEuC8@EmlX`f=V%CwtSa3;V{Ii;VMDw?vRP3=oWt9lV7&1NOv@q9luSriHIf3K zfJ#qrT6XnCR_8#e!;^?s2*m>NW-h6%NjC~W*bwoyIf@##oAgdk>eC@_ws2+CRe;_J z{}%uA^B8gfYE&XDvHGCn=qDn%Hi2tT8&dgQIq6XVvy1`~IP!rG9XRkO_m*t5N!D3! z5}(wpkkhca&f~3WZa=H-eKfUqR%@sG%I>4c)3J%oGZ07ATN2B)w&A`}J$QWc&gSvk zD-q#k3d);R%2QBIMNSxMXC-6h)lbDvO=<6z2G&B~mz+qcrlX@F&eSKcnfbIyG3;rr%F@r*?_@(n zB;5E-fnW3QtKpjFTCf^_%>oIlYQGU3EdvW>+vX$4drNzZY+c<2GtnKv+==(!!=tD% zhw5BTpe-ZNru$_Ziqd8>wh_*-Vhb&J#YoLYT$=U=TYOp=B~piULXOb>Jj{z8V2mKS zrpS)I3Ci3$J<_g_bl{xS3lqjuPqpG;KUYb}BV$S+JCJC%%f}3Z^y1jW%G-7N;w{d& zwHmnr05*9CTjIPU#|q4|^>ye9VTR2@T+?Crv?K$_VW@$MhmC66+(HBj5%P+ofRLLsZfh|3@& zRdu{N+}fnD>(8US_x&O3^ZCuYU3Gu2bEIx6t%C?9>W;^`Z>WV^8gY zU4?jl5Ek?tF+RQay0<27S(k@sl(#``FaGH3G!4+ynWgb$Wam|k#d5evgd&S%84md1 z?#bt`a!|Tb(7e3;L)SIj{@LV&J=(28u3rr58EjvFGbgDLV$i`lXcXX^-rX2By& zU!ev{`8@W#6fEE=V*rH5iXBJA8j@5Uv=V56AYy(Dt0>TI;^VHF+2^-2J9{}q$dXhv=WKEAS=tKmmbcr zgyQR-ovVPGSl3J8^`X9pe^0_#1|GX3@5PWQL#Y<9SiKOiC6MzV=w_7Ai%fV8Hf5+v zVV}--Yzg`)6J|+dO1uL$0;*8#NOvN%cM`}_0zbn3bLVPB+8^rf1(FeRt`9a|t-kHA zFckUCD|~s>F7eMs76OX#oT`YmPR5m0H)>c1(ML3?ZLIX>;?mwmc{Le14Rwut2d>(? za&v|qBGvg>D%M9_u46k@=#fH%LZD+0qJX@=>Z!zs_9u=Y`SVh6B*diS)KfnzPa~^j z$zc09CnB8+&jdC)V>)&BK#OR3^#MESBF2=XR1=16VBR7c5k>=B~?%N_<# zC^QFon=~y>Y#?kD3+pCiu|05$XID5cD@lE+(!dkkOa!LwIgXnaM7=lzQa02iN);Y* z88Zle6rRsIjQA{mHcy(vk4k@4F?z{co!v$XR+d$-C1V*;+KPr$&zl6aJ-#TDIu0Ho zv5Fei?z38~>4kmg?NrGq_30Y8ZCRckswMreUofS{^oq<)Z^ow9XRl)>%^h4?J65`iyhDmzpb{h@T4w};~28ZC#{tG)cYbHSGLc76hKbrG5@3CdK9}=iw9Dl(Avsx>j5P6Yl-P z;1}ke9d$H<;WG$Cmi)s){C2+vwKcdhf9cTqNmqiR@JtI|qzXHpY{;nNRV=Y!8A~;Z zO;=Zi%Z1r5i(q?sx41xQaN7z+B$+}H@<-D`ZpiCdSK!9`0g*RZ{lc>9EDQD1%RB9+ zRGRxr^ zMt54AC1T8G>ET>Gjo~x^wR8ee!R;)uFK@ZaRgC$qpT+PJ(+^+2;@w1y-tV%!$y$`*v_R090 z8^qUvPDkAIGN1ZD5ieFaprT>G=RDEqqBhAJmx;fs(?S_voAmHYu*>xaFWPkuP|Atz z)0N3lPe@>NA_y1jMIi8M&kNJ@emk^=JT-N(x>Ma{y|#WiH1o}kRK(uyzFt(<+jpg< z6AVr_dK^#S%@FL`>6b53%L9JK6jVkdW%%}A3hqh40cu4IJg2{cI%Ifa+itA zIKO^lHpq{ZrcJr! z*i-iU?Sq}LXN5xBQfE+1YA5U>^h?D*G% zvgs)2Skpl1&3JX~tT_Twm$KUV-AG1$yMV4*wz|XMrEZ<4S?KM%{_k_Gi-vCZ`VTJ) z_76S^xR&Qc+4+tmIprjoa4rctPiNOL)-@U&(zQC`<5~EJeA%8q6)V@B9rbR18(hNy z=Q@qMsm~X`pA?Q^ecoj?e=)L;dsy$QBu`^89%4#a;}Uw*>dPD3z>>a|pjR*%M}r%~ zBm}S{+_${f=nhLk)2ALa?6tioO9mGcV0FVF&bn}oX*w7>|<9%9( zpQo21ag%d6DHf1EO;iJda_elP#^ydDYukA!7opRjv00uxs+G6Y8+;a}+k+9CaD41o z9e-!}Qk?&j?3IHU`ts)NNE9FM>eR^IDXJP9t9zH0ChpMU+dnnff@`t&1#(rpOzTeR zxj}ObLnEBWP9*zuOxJdjAs7%NhS^;kX2-e%=dWBIf3q)1=~*hR7QkV*yu|$6Gd;6i z8rt>g@?IsH!WkTwH;evaHVs3p6Yn)d(^G8}MN{FTC5XY^c)2A|@ z{v80|OrhoA)rG1ACrY@R^u99g+<|q0+}-T6kGO`r{#v5g*Ik6M@DjkrB!W~L9=stp z(((3mRNWlIAoC5fxqKne?Y9F(xMJOw6$kL&)d>iTe$ako*g?cs3|hCXy#|1wSd&M9 zPvYR2y$eh#r&=+6GUH^(f5T8cWLoR<_2Wo@8n@-_4?GJ3%W)*4-(7E;_h@t%i(%zb zX2i6KvM4~{d`nfedzzg?0EKz%ubq$hlr$}|mQf6mchL~x-BvV`N_y6m*tPG}8jLou z-Rn2ADzBfU?%rJvxeZkr3SiDO>ueMg{7Q|nv1c|s|Cx!_&Gqwm8^ok`z_=qL5fiGk z1qbvqXh5XrYiOcuM1Uht&Yr7-^0>i#h?ga~^#8X`CR6=^ZlLvVu8la==kfeE5<*+$FR9{DO=1_pP4W z{IzyF@*^d_aPfzkzog#iV#-lP4pY~Ai&Zw>6~&)H&NyySwbEE^V2d8&^hm;cfh?G2 zuAy`6Gq3u?$r=b`voY1=Cxw__z6P6R0Y#Csoz%clQ44R31~-kbgX8I8k{d|&BUj~b zGfD^|03csh_zwR}kLE9@^O@Qp6{@^$To#1kGhIwTkp`tThwj3HmyfrV#4e)tFSNay z*$rTUM}KAjXvP$L23EpqBc`XD@zRKbJQkMW06>TmAE|q(48k(D#y)H+<(?24nZ=Qd zB(U^>S&WngSNUF25(Hfev!_H)kP$@%(l`8Mynbhx?)9^rGUR=SrZ#BLKD|;Cg~4(K zHHW;62S3rrZ5foi_h5t8c}3oc7=){O4R3isfK18+Zf9sBnhgWYhF4=Cw8hMRELptS%55d2!@D=I7;P-F{$Ppos6zGDPjoaJE2?)aJ+{()VwX3z;`S0F?DDs z6W{SGWE%&l2<#SJp+g5K4XH9F=-LNdp^x@l5N5-OiBrP)u`D5n;{*$w{fpoBTjtIZ zYg-+LRZ;Wt3&;<5A8ab~6i$;cN;d-&Q5GH4$hVj@@fy+p1L{ebY(HePqktt!-8*I2 z25i|SOwfFzlPL0GXkTuSYdguRy?QS`2)nn2CjOv9#x_r1n`otFw!3cw0HQ$*wpOFz zoy$Qw5(C_jyl1!(SuEf;>vUr(F|9`bHUf~sKL&gc`l#vfr`CzR1=AYs@b524y~em= z3x?W$o85-BL^>UySqps2Nr@)~!)A}Q4MUU_-;YdNOrpIxjDCwEP0@Utsrh~+XFNk^ zQ}!yh;NFah)chwIu%SMmquF5{xdjV;Z@J=~vmq7DWOdGjmFlZ?003-!&3U()^kx?r z+b{s8l%Xg)6Gse=bNAUD*dO?K5euOiA`r0q-3gy67_e94k8e(d2z0;XDfzlfP?A}) z^~eUftzY-QQ^A#vX8KME=u{8EInTN8K+XE$Y#28H_+9|74#F{tGz0(KSi0y^ff|#t z{60P82n6jnkF~nN(75DtH8i1V>C3#T~R! zv!}Lo=}Q&GqWj2^V|pd5I*jRzRERnRK#-8{D;j(_QJIAEz4^QB9uZ0zs=`U+lRQ>T z_D-pg7fGDN`b44?=<`1^RREGiET|pT#pF?L*C^uXyZB#*oU#f(@4aSox*xMurZCLC z`n?_)(3d~nf3qM*PBRJ=;oZw?OGS5MXaH1Evg~3 z%-tk?i4;MBhyD8ATO<3EDjsl;l$td3zBN%w%<%jK$>e4h&&=f|X-GE6L`Xb{D6+Nt z41-jT2nh%nAHHhSx5&)ht049f7G?&{w`q?i(j4dcAN~FokY)j5vi*sbTqEvne-V|w{I!av!jIwW{clF|=U;rnBoGukSpuAqs%T4JXz`B2-G2CT`n%L6as?haE z`;1HQCws}F(ct8l36c1cfaL+#d-r0~`|l-qc2mv3iKagKiP`k>jXsZEplY-C+rtP4 zjEt_9Cv4Dsh3_nfr6bXP*|ZIh-Hftk{XGEaXe%z>Mowv8LyaBb7lTNG3r{7^v2&z` zV558Bhuk_Uh+$^LLFRl~`Rf3F15$UI=I3(b_dO|%gEi=g#n5BOIS0Pg)^ol&xLaBM zkEQ9RMtWMZ3}DB(PdwxwOABg~Jz+QSk@Ybe!-t`fl{}JmNI{VP-7KB|~%7a&)ARV{}e=v~l`MIvz@Xb7CM@!FD80*j=#utk;Q>;q=PV?1r;;RuYC<{_?+*zai6SzS_h z_S!)OH0&D()-@hrUCbh8;ydaQoxH}Vk4d!Hw1ZCGMcr3)s8!n5Ioa3rJHt_Ot^(YH zm<0ku>EQA>!fU?RmUiaz>By+?wMe$

    uPO3`Pf?ZJDW90w$4Jox=w2O2kqPstwqC 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ⅆ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

    aZ>PZXqE66eU$~c@!C)IBdC;n%R|FdVIv$r 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

    S{|NH&;Y9_WZ{Fr-- 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%0D#Cph$B!AR(p(nT$j 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 literal 0 HcmV?d00001 diff --git a/docs/images/rre_data.png b/docs/images/rre_data.png new file mode 100644 index 0000000000000000000000000000000000000000..2c07f70d83a71e40df149f2f3eba78d9d759dca4 GIT binary patch literal 116188 zcmb^2XH-*b!!BwR6h(?iFM>*yD!mhxCSAJHLa)-1PNLGJcj-hrNRtjyA~p0Xy@cLt zAV47Hu-1Ct?|b(?-`+pYIQ*Gpj%3a;k~`0Qo@?F-f2*NHLPSr5hlfX^{6=0I508Ka z5APQDy}LJi)>)Nr-)smxUMuU~yZH;aXZ7{wF`cKvJ5L=K8&7X@cWXRbXBQ`HUJpxm zYinl@I~UI*e5foQ-V;1!`B%C=nfqD3KI+rcpWuV|2@hFUN}tgiiX^9V6^cHkREScj zHB6$nVEQq~MPI;%6iT93m9r$GQ+}QF=9#*#mctK$golrmty%NWGWpx*Z{s*noi?$FCJ@PTQRIIfr5L>}w-g#g zM5X_YI=`R<67hB;E8>OlLvQ0dUx?&aO70~SQ8m#rFhmM)Jxsd&e)fH8Ds5tEf1pF= zeJ;}6SS-U=5cNF*_piRW2pu26j==@SWEBN3uO*uFTpjYOVqGqG508QJ_}iaf3f;XM z`iVC0_AC3hFJg#EqWYWIZmWNly>fYS_5R7j-lv=4{js3-2VAEb3i%~eC2vc9|9&eS z#`jQHo~WlHJiO$ump)HOPQLk2+*W8Qbfx8)F=7ufJP+@!KRlJ+P^_$3W9U9N3|P%8 z!h*#)AL4OrF}9zKyrv)G+I^U>s16>pB&O}=j zL8R2(-QSkD_o)T;whqMaqu>o6VxRkzDYk)sv`#_puZ4}aTH`y=TE}^AJ!^Laz}9+A zX4z-RaJOP_d8JM}d?Il(R(-Qof8kl^gE`f`cCVRe#EmdBB27oqfg^}F`W_oUalp@7 z-rt=3LPS`mJxmyyyiO(BhLauPNQ*z`(m;_*ADV0SnUlTCVV)Sy$R62FW(L|>Fn*=_ zxw(H9&0And$LBuT=F9KSq)k7J1$CHQuRGklu*Wj~{P}&622Tz{oqn$^P-#PW-_Ahk zH*(fb%0GFX%Dq2wK%Rx2NYTz(O4zD4RaiWqzO2MMF&JJ0!YhO*Y@@mh^yD1Uw&D_e z5>LaV(^?O8PpU5Y<%Y2|E6iC_M=GtLnUi)>K%sEoQx1;EKVcV*j2oSEN225(fy$@{ z>Ck>xY~a%?5p88O|3lr^wM$Vy_Zl*XY8=;~R_t;b##_oC373j}H9yF=ys&sbwT9nv z7-T*v*&@*sqz6~utaOh2`nnA~XsBj$8e1Vf+nhNIhpg}72Rew^s}D81ML0mKJswp^ z<*aR)^Yo#JrnlNYZ`QeJ7Ct7KKQr&&XP!kPidvx3>1W{27~I`6qxypA_uAoB6NgLP z6}}!(jjGf(!Y(%Lt^TV9(x$9RG@f0H{0xb^B->Xzg5S#0yYy_yEL0Wzmm(tv3}yE= zpWk-*)ot^6WfV{|Ty@A@4-%^lhy{S`|_j@UM zx!1ra#Zh*s)KGF~3Ms_MFFGEXGs1?11mzaL^zU!#%0@5QG7HOl=5d^`AhIf_G1qi` zZqEH)1CE9lB_s0E4NkTfra)3BU_@z9_-kK@b>y@iPGF#c>52G0D@V-TRV3!!Qtcpj zjk^g9d&e@Z4a6Tt=C`~n_)VmljQnSyV7Z!VUSNUh`I=Pl5ul%>)UV~ko$b1$9cHP} zLDx>nb=4mK%ZL8F@#{(_#xciRf1<|&uRrMDd~-svU$1X7{~*rj`Tncm2NNgR_2c&e zyBzH2X5?F!n)7Ee4nrpbynnjuvi%j7Ykj6GY9G&~RbdD8{=2h%4|9Y?^3ZnR7_^neishzl(dHpINCP>p|SMLHtD%qzvmI8~o|* zwnbPe7n~jS1f2?K-uwu={ar~{P2ft_HyUp7N{e_O?d~qr{W+2YG%Rdjnk90xT2ba)a zX_@yWIyQn~`Rp977&T7N*e)=bZ4(&B40c~@Fg_)dxK6%QYPhnVc9}(~6YX5aLvU2< z4SGh)=R;oT*B#=%tF*6{7*f&SzO?8hM>;jAeV6L^0>2NJ~3bI7Jo1H0h~2kSaPcRkfV_hML$nW4IMy-Vn}E zN+V9i+f!@i1BaC{N+q=8UkPD!@izzQ-Z*t5+~4ekg}H6rJJ0O$UzA#%aiJ#nVm_Vi zWe*ug8fC0WnTx|sU9FblJlhzhzwl}<*_uhUYC8aT%*||6=RqbVZddnK$Ugg(7hD$^ z`b)NCs~mqeV}gDcwUG~blzm0-QqPAeY98nYwTjVh`=lvYDz46rL^DsAyqCCk%I^10 zkG6G~c(K{kCO3W9>ShEI#tBe4UIn&(Te)gZTd3q-T*~Odaxqtd%wM5XCjy666lsq( z60@^>U5-Wi4R^qmSskAm9`A^n-HrsIvaCM+xi_VT{j|cZ*&dx0 zFy6o)cy(S73v+RIh#VYg`i%-3vNvTYp3bxp8*!`nscUd;+I4x=Fi3Vcb;|Smg)4^x zmP%Qz+E6Qejcl21$v$Q9;s`3okrKWygUS`oON9S|3&HT&riZuhl) zPmw&@{ySnGoc$8&FFtf;rfciZ6FCb_$OKbG16X@pe7Bh0&j+rRIIN~!La>v!c2Lag zQ#98X0Ly^npn%alp~sK?Uszyc39tob$I@Z9HoaV4lo<#ehJ<a zpJP>@f}hLucjA75pyM)7%6t7p2cj%zXT|-2hk)K|m$2D3MiP<@yKTw4^LT!b-40wj z+L7~(ahXB8ed?qK_ntNTYtGRuk@T&mPLo#1-s)XnEqTW@KYuEyvau02O15qa2nU~$ zXjebI7^4g5bk?rSo^x&Si&vG~E=3m45iMUsrE?#R2vnO2Q@$jhZovZuK@v8gpC8q)t24-)q^RjhVA<_^;Uz& z{e@o{-1bdY0CXY*B%x8iTAwz)I2p2TqIx3j6_S6Zmc0P&flM>)S{zSo!`#^G?+#@! zm@nl@gbGx#Qq5G92J%}4=wVSg12nL3X{u1%dBNHAsd;~ry0H%Qd;Uqv5d`k#wDsCu zRH7v1WR70G!Z2XqN=dOTpeeM$fcPM+MQLemRsU>%uNUrr;imk6w@`+fB4GW^3Iv`R zgLsYiqh|lKN$H|(@f6tdo}@_Dq_GNzM}y#xzo;Zl(hlhFfv|J6V%~REc&>FaSDx;s zid^3DtqMqZ5KVM3YrP3nSR)%+YgqVe%-QJwDDRBX-vye)rQ>cjAvfBGGS-C;WA>zm zN}SGuFC(>#TPjT`3`dSx1O>lPfZ&Lpo!LfSnQjW+epP93^6P7=XczSp;44ls+#VXE zGL6=L!YNg2)Zy--{F{hdby+~Zl5S{O=BOGy?fqhsu*|7Sr2e;CH@P2mru4W_7wf5@ zNZDt9JY`na;t;TgsDz>oZH}%f>3z)0y6G##NpH4rjliqqjL51iUcar#b1Qejn%+CQ zTvT*)ba=&Y&CSf-svJxt3-KH!UknojCejPLr}tby%L?X}V^1``a(wnmzup>SVbV%W z7g_0UMZu`&=bEH_-WmeG4$Nb9nM&c`lvP%9v@9JAU#=KQGB2@IG}gG(IsNQwg|!mY zjjXPH?W8s`dRfUX5`A>qVCd`h`gUw_MU%wU6=mQ^soY~J8E1l}(K#+BaT@>Z_e1HU zgDp?Nj2H%@n7UmD_yam%G8iO&9>Q`6dKAX3N)L|3)Al+3-V6BQf5J*H!V~2pf$Qx{ z5esiKCD2UkUM@6xpEeT-a_Rc%jpZ%(l$JOr2}+@ACX#KBfxqcAahUAk55I3??RJyLMe-QU+;VNNWEOzC2 zkQ>7})lyA$_)<;w5m;#yw=fn=v(VWpPKTMr6&d3X?cWhUDiu$XTh>%ZN=}SduTGBC#A^c zfjTt?O~tZ)lqw?nvKgdrrE5s^#^7{{8m&bDgGc()bV|b%ZNX18*f=kk` zIV3_;xxbx#^h?|*%Io#JwXZRjYZe*5#upZe}^;u<}-`ob4RetfPIiGz&nzJIUfS;(5P|3Qv;Qn6g?VD24N z8`D11#bNvW$GzJrBBF8)G?cFuKk&qcA`3HS)h+Zl%!I3x_WfV2?Lh?r(qYCpytgE( zs)0{%1^JVuI;~IIs8C9;v3H)*!8JQBt#NAlB>SI6%Dt<|=G8vcAHDWZ=)hdlI}`RC z*rxBrcknaEbz34Eq~J(v+)?88M2%<>vEP`m1+&iD>40Z6pb532(6t5b!5V8RE60iUthuyx}IXT8kDFn73n2}+e3b)GVN#Z`n0(I)+CQZdQW z^w*ahP}{N**Ilm;KJMu%2v{h2I;B_ocCqkoh~}rw(3*Lvlv_Hm(L!gvC=&ImpZ4<2 z-;hZMe%oC9VO3Q6dgIECfe?e(t zPLY+aFFU(#(zNT33uB|9E z-WTg~yCf8@d+~ClRyIgUGKVH0n3FA+?Di~`ajbb_mT#XfnaqS=V}NApuXcZN#J#s! z?3cv?GK+WLj!>QrG6)8|wXI7zGuhgudN3yi4KHA#)pu#1F?T5;S=D`g{)}VFG3w~+!kY*@c}unHb%KAwCA=pfE^#qopnv7Yx}q$*TNZr7A!3GY7_rQMIq zQd~vSqHTt(jIhcEJJ`?paUqREmtXrV3#&l2yn1i8+7FHKOCp5!;s&40Mq(7$D@Be*r|ey8{nuHbhgLyC99HVw=0n%p&r~U`rWtAnh68X zJ6jmeZw$cJFwulVvcRtPHN9R9>47EYhLdaC`VbM;$JmG}8;Z2uwr>}}AK_Ylw++zW zPWqZM6h?RzU93-X*wjvC`)i{pA7Q8k?I!INsMp=%XHJiuRfxqt)fd=67A}9hf_DQ1 ze+Z=h`Pu#3RdQ)*ZRLc#jj>hZ0=|Pa7$no~MUusRi~znqNQ1gD)Rprr&oLE(l9}Nu zXco5E`-@vgX0N$l{J?_E5YM4L%{k99H!8Tr+2*0{2vl$P#X%q%0rR02Ss1z~ss&q2 zm0fttpX*=09Ds*wlFW|8zlRG^0@)wy%oD{UD>K3Cn_&^;kmPBQYWg{(Z(;UhiB@-9 zl#+K7S0Gpb0WSR1D<*@~aKy5TB$QExSkX zrCJ`kx5bEBeN3D%a=N$Q#HjK7i2D9N(1mUob42`T&Gnv$fC>NGzWzQ$(%n@7lK+Lo z_$j+H$Tfy#x=QZ-wO`k7ALd)Lmv^Tw$v`0h%~j@ck4A*Kn8a&6qq~EIC!<9t7@m z@@Vqk?$kJ*7XTJE@P*ssw0;QN9H$r^lgKFh^qNX@v?-`N^*^ZkJ}~{cOLjhtXgwJT zxr?#>0I_G*w6L`JgFP2mYCF4G%#)g7(`AA)iMJY9{4XK?2Ky=}At_WKG+j&Zzyjo0 zis@CC0P~dQQK(bZISm|_fYloZbt6;onzi<$P+2k*3_8W*jWpQ;^FC0oC9or@@jzd+ zTnTSUF%$Dq#8WRAp&gQYZ^Hzjjj?9w7A5a+2`gxyAPo6!bSsys*?*|?=hzCQ^={^?AKI!#6#ka<%Y{{M&A5a8roK-27UdP|IKEb5`-!|q+(JW%_bQH z!T5kUn^412lMgb%LjqE?$Ul|M_Az9rb5&Roqx-2*Gb(4K3rJk`S;+1iu)?4epF-b< z-1AvNF~zO@v&%SreN+f3g#_)IvI`RLX1!$_MMm+Ma@)WTqKM z8Yoik7)SRa((7PutlmUwuAZSQlsiegN#LVVTR#PkpZ2Pr#U<8wWG$O1V5;($zP>}@ zYAp0_p3J+;9))kDyTkKx2FIGPZl1^IXaiGq4F3-B&Vhj;I9yq?uyBvSSU5mVO}a6< zlSJ`FSxMKQxt|<-ll<;uQ+HDQl1o8Dm_)f?oVnnyv+s%F>7RUQGNlS1ZPO@|YM+#- znP$KHhP0F06PsVXJhYP@ZX3)$Vm~dU7G*LSjh}LwoA~%!UUVTa2vy2HhM>bd&J2Cw zyU5%kys0EQVi%p(aaFmW8C+V*4J0f|cyvZpQBk3Ga<$cT?l{FC{XVkq!_vOS%`7PG zU@D`*|CgZotZ9r%gw7#e_+^|ER4qV-1pvL3&zz~UC+ZY|HP&~f{*;0;+u#a)7hLU{ z`amXhkmGlNxMLfL%*n=V=xXCYXBDiBN!V^{dtP9*=P{dC6KI|JS6ZTB0YUzY@YFdN zIm~-e!qk?F$&#LXiodCCAXgg4{oL9Cnt*15B=l4|V|o2Ohg>|9`Qd1THgLZ*E-?+j z<%ia_s$GcsxrW=dac5t@mqNjmn4b9?DU@@mK*L*0r`&KK)f27h4Saebfs%hcg^LZc zJ&a4pQoV}q3^sYu)l+CDI99Z{eewqh?4r5GKEW!J#>owzMhNSaOE?eI*SL(x-i}ow zXP}Tf>wCD_mJD=8Khl`cUpoLNt+j{E)Z2-xmr~vHUN22FO8sN|EPKAb#=nw3te(Gn z@)fUCyt!=VgRT+ai2l>6olb+p$=RwCf?2~IgBdXWUm2a6 zn(A6?Qc$#Ezq#>aWn%+CvMDtn)cE$_4MqgnhHH+nuQ@+#w?csw7LzRdj`2U-+fxaPLjPie!8O-x&1o%1m=-lR{4!0b2oSyk*C$l1Uc)F}FJWuVi>K+zP>`<&AB)pSSr502Khft)9} z($VvQavW;=A@mojp=?Y9Iwk|)x=CaOxL*>N2mx?;p>;ph4$=%$Ybb;11AwFQ^8c|&>|4zQ%B87ICGY{y1HdVq7BcY8y*QBw}1c70;-kdSpWYP&{XjLY&r;7Y2Ao*X1~}| zX}Bn?g7zzw0pGC#p>+~%6rraFca%0sl(z=jS!NLHfp_aCblySvQq3$fU-cyBYK|W+ zvTPLiwd5Bwj+PFLR&vBOd)-=c8#&L(Z25vs`~y5cPs=c9_gYr@@;a7$wI+y)LP|%e zocz}}KuG(ZuuFR1Yzyf|QL1&`}+825&`mxH6!C=8YHx*7b=lY60Qsb}DEhErMGPdK3Ck2)1`mjt2ScQXmqK`(s=fKE!tYp%&dkt{?(50b z2TJ0lT(JKXnx-0Q8s?nOtoz;G9y%~K#)_Zc^YGN0gkI!FJiIWb@my?W`O3-o&G0Ma zI(wKGLHuGX$H4;@jz~*Wsm3dUCy9|o7QP=`Mh5WeGU=9mqJh%*mmD%FnSV+z{SKcE z`@R^ylhJIz@BV!2zL;}YqR*k`;Yr-3kBq~g;vYXjCgPg%`D`*_-mspB#6QGr2bE;1 z#-~TXONJH3kkCBpwR1bF2Z5_Efy^@HX9Gw`CbqhstOL3e;!(LI?hOw6JkgN2d&Zk> z$w=flTG#TGtJV$oMb=xt=IV`uzy@2+mskLW&>-=+vZlc`k4%=QrO+VBOJ&@^wLxwI zNk!AYy8xJKWXkQ(yR@wPw&h^_9?)pZTUGOFJ?`YUzvvuK++OM!N!7)mT^Xy@LirY4De*3+{# zEy2D%zjsCeaFP*4`q{u-Q7=yLift?~Fi~+D*|a}4B%6j*pGK>-UnP351Ur$li<4ZZ z(h2#+(=}$nou32hbiei>O^DJiODNA(H~0%^p=<~jx;#ga4iQQVwFz~goCa8Dd}j7_Q;H9u#(GGuRoVvYwbnf? zA$`q}8u7}av$JIP7aGHBl=0jMFpq+-=gwOcACg!9(rFBk$iDA1Z+UP4!yh26b!3D= z_9ze$<^S!ggJ8eVR4dcMP!U(MC*i>ab(CTp8H_AKQFspXW{Li>{`Vd9dSK*Xy!G{{ z6kD742REewK|#dfe92#|`u!$!Z=RZkOX0*E1p!Q{;ilv7TUbUCbU0$f?`(ud18n-1 z=XoA8{SJDxlX3{PdyjdUwesPdUNf(QjIYLdJ8Zu(uQ?FUN@mkse+iI?C0)MG!oPPg zPu`47X*8nWz)MB!5@z%4xu(xDAIe8kj1v|AUgKwpuKgf1_y_pL+9ve9jikMV%IbqV z*kn7X8m1tK${fLF$1w8YCJpFSxl&M$}*^3p3m79Xdg z@=MjNV(lxC$fm&-Ga?6&BS6q4?BI9bSW;rBhG)wL?1!p05#*JD@9@u-X+obx!vD>V z^+jL)!?tNedo|tlUVLOsl#GF+tsr~MBWb@b76Ld&kLGQ0AQ9unSWx>xjhlS*eqz*X@PE}!Cs-AddEQ}EH(0}bC4;!nGW^=_RMf)^}}$xFaG6<+7d;` zRXKZ=fBFMnC@$!o6ZHY20sz^%-r@q?5}O^XV_1xqbe#kzca?lu9o1|5x)4QZELj_y zI3YG(6(X=?Nb=BHcW?7GN8YX{C#NSB|A%qF({W4kT|Hh zJ_XrqS<6?N;TZEh7;1~e4Zkg{I8?52$>VJABuali1KGIL}@wuR0W;qtA1hifeZswt6hpb0+*!i->M_OlsRN;sTZj+rc z?7zAc>3|+DfxxVOWrbp;w|msXMUNPhWhzc69ev z*zg4COkVPjVE3O*UfIWs-%dfV7UXX(u9pV&m~mtZ-)xuj((h<*!ttCLe*4(_3%hd2 z92Q?8uq#9DPI%&p7W(xn(V7&W_$N!7;l|pj^N-*SEvPYi%WVh_$vA+WxHXqvUM-Fm zt5YBlp)Ilj0;)?cToNw3bOuFk&{v)ne(^QnfwC7`<@?-A7L7poA0ufRo5cH_K$5wzd3rLED9;g>%;W5@S4Xs*hL8cO#r;GRc+$FU0xEpr$|J~ex^!Zx zNo0})FK^ECaPMn35S)y#X=1;QznRfFLkF)ar9o_HogA%nxLvj8G`cwR6!`vT2{D1W zE_o?r2qLV{x5uRoW|^eW>k;?)c%}@*x2bu+I{=7|@4zg5mIc&@s>jqlT;mDO4;hZ{ zP)udzn8`pd_81G_4O?CnzWkP6=!R@Ss-dt+t63b0XI76GWzCPmHSv0tW4AOR)`MvF zR3E|1zzrX2(Dv}3I>Mg~0xT>i%)^K871hcT@=^aY9h2Qc(G>0(LT@j*!Y-OGem+Sy zvi*XxU$6*p=H?zzQGQ~2@J38zqF0OV^o4AjT~*2$|14PLEF~xKdq-}!-KHimLY<1L z&n-oK2l?FNVu`l^Ax0-rA~VH)JS3ZvD_U^c`NiIQT5^f#H3C+i)5Lg&Jm3L|!p#$@bMA>;$)u zjfCq$jp84-$6G4$c-q6NCsyVj+k;n-1KnU*G0aJ`Q26s%?t4i9DU5VAf_+BBNsb}L zqNC<0+ODtc_rxGUuLjGBA2F!Lrn)>I#+{wV=0U0?C?gXtm6Ch^+|@D&2etUBoe zKod&eoiR5pC7QfsJksA;IM1#)KTUPNDo`eR|8+hpHdWe&eotv$JH(S|0UHUSiP=b4 zpS8wUIMD*uV;p+BwoW-S;Ddf(B`cRYvQ_UF)iC#A1X)IrM!V-BF2{4Q)Hw5amjM_bh7m_6M60^J#MiHRX--Bf`}4*-FkiN8Ko!>w>kS zFZ290SngQheVndq(uP?2!2~aW>j-U-T|JER9E!b@{+AVFBK>lU_DcW}K+$^hkr~uJ zH2t;c-PGB(0kI|LOlFZ!$n;@BqQ58@5QGtT`L;f2*4wkUv6%Ge=^TIT=T7mK`nI8y zle`n@M133NKLtxpiR7(mrLyaj#ri7YF`sscsj@e@&Ki%r*K`ox1jrKok!;DUhIwnn%_oPBq`(NL=-42fWfIUwiEcU33;}U)Lx04sgp_`c|{zmVA_eS5YjGa@>{tMv$ zwUK-(%JTQ~eLl~`p4v<+AqSf2*c5Ale|!Eb`|n7b;5HLm_VPBwfT!b6ySuNwbx`H{0fRMLd|f=b^^r>l^9C7v>oGNfhlR3t6eQurzi1qI zX0+Aa(?E?#|NCgPAV6UHcJZ5z*t=EWwdtr2)+M8ogzVQ{4=HZ;Ps9g@-Cb_Ak;OL^ z0c+rPbj%434Tlz94RQXd_zwE(*4e>9G`z|#Hx{*ea4_^Eho5_*GR~nAX4KhwhB!*pb+CG>Fr?M9o%;Md#>nB?u<-&14wcY_V zof{mCT-n0()rhMEN_X<|Nli9@1nyW~M_G zJ>e#x8aAoL1DyDEH|MVctq>Zs*qQfnsT5bw5wGzr@r!Ph?l%vsbSiG7JJm!oQ7dA1w<9 z_w8Yq3j_ewzKV{6lv7~qEmmU_6O^QQa?~+qzs=w6WwG0w+8whkgOA6^U z-WITuy|vl-{uJr2JDp4Q*C<`og-f_%iw8nHvjE&^bcUw#DTT!P6tu^(t-bZoMeShi z>ss?6W2F#PtU$DC6IFWr;7v}R{bl02H#q^w{_g5%9J=1C+9uesWs$(he+J!T1@G^y z+%z1DE|c;o5nz+}8qHy-23MNVmlnrjtl^{P;C_30BzTp^q;}Mrb&-9Y zK}>crFk}l{@FG4AiCbGvlghW+N&v0BFsC7|s(QYy7C0Bpq-lav2&g(DTZOFSNvzwU zn>sCurx+Wo=Vu#inLoqwzD9>Xy|TLJ0q^G*1KlsOFFiR2^q(xteJ~QvESw|?mO@PS z@v7|#k&igd&$dpd$jzs$?tcH4WhiVtlae9+kWz7G1@qyu3{bfaZ>;`57lM=jR7(9q zL2t>JFy4cs@nLJ)z5y4srSo|55>niAdlV95_&Gup`%(jUjp;YU=PJ5w7eq7NTXl6@=?%4_V7IV{O zzY-sawV!H-U$eS%=J6%bnxYsl2r*1-JAbHqH^z^_gM^E|`K;@zi~i=lXzx}Sn2*^o zhU((h6|X5SXUMlS6dK|Oo5jaY%<({DzOOi`;415<#a|{?Uw)yMk_pV+rmJR#KMlZX zIlr4+v*r$e5XqJjmCsFZNV?)&9x7bx^Gld}gO5fI+!gqlOfOX3^6lbyIWQc%Rb|;r zELJAhX4Mi#RyF-d8ALg~XPI9#JMhod+$?tP<5|wB8Nt37JbV9Q-AVES8@$NwTxPl~uT?SqWhIcg#(n?I zU9##j8JcE=Rpym_r zgWD}@Rv$QH-0R>36l=tSf4r(D{_X7l6}=}5hEbDDeiiIHh4o!eoNdKdKKeyhkO zvcCc%aXrO(cZSMfE;U=G?7l=m0!5fy@xf{bcXBbP537~c4tNnhJRGy`#GElUw8OiK zkB&Sz|Kd@`ySFw$(dD;>Ohv5b zi|}22U2aQxn4DzpMO6=JJz!+~(8%~$UGSv?u>g4byH*}O%4zqjBbb7;0^Sp{&Zw*D z>~5#@aCXsuyzQrLjre9=P^l)KV3QBmH`w`k3-Q~5v|BOLm)%02z~df$%B>NVTYRgT zglon>oBWW^Qrxp$*A%70x3KF>WZ|*Xd5Y0Li1zr|R93}|=o z@Rb4;Z*Hz$Ug|A_cm7Hh>M|h~?%p$s7Zi*sL%RH)Axo!WrXj=3?iyrVDAoG4wUj)N zDGhl@8?Wvq|KzE@jGJ#A;t&5c0DOr${XIsfr1QJwfyU#bl`Zc>Uj_PAqqG3gEib<1 z8sIRM2cqzf5c=8IsIRPue10Y;{^gTNrt%mMZ`7)Id{M_Sye$dqC##lL9qve9slj@3 z>)kubs27WSDO3EPld1H(JTwvEQPXMF97%aOD6oH_G^Xtf4LO8fOB9fP{!Z;Uo+Shf z@{qi3=Il)RyidB-B}vV_nrUjPKQ`BKoZk`h3^%ZyBL7e3W=<;y|H@pE8D^k~yrcde zMP_K=U=&?zFY&^#OG6Swl1oH*lhFOmI$3fDcpT+IUbhXHOWTw3KDG^a9^2yr-sS9% z9e8V+fv)bl8Nx_WV0-P%KzHoqEY4c>e%o!pW-gq5^Qt`0uyZ&nRU-DFl!xvzp2nN9 z&vpe+B!u--d^hPh(97RuZG=f{Y2Kzxvr5du#Ql!W5YHfZs5Hv|sz{>$bbH*}Ni)5@7SY9q@Bj0TK3w(aOV+po%-)(-FRFYprHym_lC z;8EQtAlP~Ddp(J0(?w&-cYW&sMzog66x;aqv0_P=y!VP=+f0Oz3iJNHS(6}#VdIJ-RR816AZs& ziRh(e3)Qd|tj+c2_f$IOf%P*}!yD~EU-HO)P4kxnzbM7}$g4X{5mY$-+U6IH&KUlj zkH+aA4S1U_5~%`jx(-hP0NH8bw|9({_t zxwN7)@=9?7)Q=BgTM6z+PDkj+-}ah>hV=e!O7>WS@BOPQ0FD{IV;;-9A_de%jYGW7 zi)9gV>N=dM^lIt?eZ6tgq@{&P@aaL81lKna(?-IGFTT7QR!aB91e2 zq{4mPbWxR~rIiX0_XmetcNiYkIaRU6B)UDhR&fYHLLWvTasOe~*Jb~h_10;VdKF^C z(#r0hy}f2Do?2o+YkQ~thw>4FYq`@3ffwDmKV-RIHOhP!cJ1-q!;Ktw6xH42e;S zt3_kUEb5wG=`JC+P6Kep-Tce!Qop?NnzaZkt|}A6_1-f6>Zgg%IQgU+cJAhWr6^hd zqQ|K8R$-LGqVcvB`u06ZFsRl^l?|U6ZVRCV)ik#nT|-G}gvvLs0jwF*-ZiV_2=lD>37oF~&!mj~xf3P-u{nwF`c*?C`js-sSPRXOhSM*A5#pP{D+&Z%2>;qlDR>i(z*Q^W6dtdjAI1&^NOTB)oqY&ujlNSD8k#!k z{vGzy`)9LjsD}z7(?Q*Jf99T}4*pB#(_aUu??54Eh0I~-o+|~U)z-(cOe&_nXFEg0 z>Su<~dsvLyD{~5x^ozpjHQoSecVf$)Uu$m5k3x#H-8*LwvIahtSla0{aP@>1zMB!w zH5u^h_p)XpsOD~D>SUKXO(N^*k{U*$? zFm+6wjW;S*t`K<(Sp6O5H02!L3!aUN0=@TrTynf-Fbo(!VWR;cPS_}*R1qI6 z#9Wqpn(=qu?x)nk2%M2QSEKPQX@Dl${}yqWrm-s?Y%tT!zWiVh+n)!r#(4bSL45E3 z7Z8W<{{!O8B>x6+z?z>k0GjR6Ta2>wsfnTbR?kZ->n&WFIopkmd^!F+28R+1DkR=S z8tRo8?tKi^VEVea!;S%~5b_Ybm>U%D~aWfjB#&)!j!Kcwycq zz?C=o-S^-m6(*G${##SJVt7#w6HS#Y)L@L>(>68AoE-25A}rz%z=mRe+4`zc!qghZ z54P)_7w(2?qY$rOVTtVOHA`C9J#nC73dt>;b#wrFZxdIoFmUwyoA3c3v8iTHJ1^oX zUF@N|#CVGRq0yz1DeYP5ghQ|tgtxx41-ahmcEhYX8Y_@ z$FlfGjYY|Nu=DbATv@Sy0kllw9RT$wd!XI)kv$dC!`q{D(EBwXbO-TE>jYL=3(j9t z6$J^dud1?xxalv*s?LAY)<^TSiEj;#paX2l^87HdoDi$IbI*?D?JfBq@bcc6R+{%vpcQ_F}2X+E2{Gmbuju+%|hjz=(g(k$N!Hq?w}N0u-Cwh#b?6be^IFy;t&wy zUFzxVf78+MRg=Jsvxe|=IrS*1F$qN@^PEavOOiR`x{-n*M^JXes4d5Fd9swzgnXWvLlf(6Il2I*yRS*DTdw>J&M>(i9 zr03@(B~E2yfNT~`6<4j9)?(v1#Q!mu^1p^pp1-6#P@)A>7*+g#k#hdcvZ%lDn7)d6 zYbYU;j(FCmwIxIQnf&#JfGcg-^i+d{EJ!%pcD%og>F+K!mk`yCQeuA9A4@bo)_!HL_5X19mQii5?YeKN zQJ{qa#S1CL3Z+OXE@^RhEfU4y=C@74Rz`$9Zq~m@y|o3ty`&boTk&{UW0o$HyG6lV@O@C zS$_036h_=gX;JfZt>1|^fsQMq+(fbU{TVUa!}o%a?g{H3mP*}^m9wlqnxN$YmR{b( zlAHDQ$K`aN-RXkfBmx}g^CW+BLt5h}7 zS9aT|hOPFx%msn3a|sc9aCkYTsfX|TtO3n`sWGQrFJv6rxiA!`-ZkSj3=vUv1Uo{^4x< zfycq=g_C7b-CXyS#LV-WKsEP0>UX`NzF3N+LD+<-T15WYo^EKTdN;^9{bSM}?{&)~ zA!50S@H_6_zOp|8mXYqMeZMGGyno=Px^Rk^`KIoCdk+)8eRl);aBERKmii0i_>2FX zah2W&o_S5qOEB=P6yvJ7gP=fMNDwHcpAi|x4?^VAK}q5m`5qM;dJ||liiHY_f5u?( z)x>uvAOKm)zPY&-O2G};Nq{8d3q>7Ah`?+ScL(Pl>sMzUVX2Rotbhm4P|@VdXCt1L zf3Gq3MD(Wi8mysf*4P;A?V-*y>!e%INQUMZ0+8c%$cR%T7gz;7`Popf2`m5yB7r_u zbVlQFu@exzwbU(2rc2$>ch+U z(EFe_qV0EvO7@t{L4Gob)_W3Qy;1)>Hr%14IeBEVz`t;Pv<|>l3H-du! z4!JMA#cO@I)jv0>(YWBn%}w%IL zD1s-$PQ|qEYP;`i9Og5u|NJ75aQV5F%~Hd;p{uk7Vsen8rxfvw53`U`y12}97OJrz z%a`Z9epQ?v_e#y@K1!k%`4Y_<<%xL|*L3w-%;4OoAAo-v>6^>PFkNc#zNcb{`d$2M z#OG_@0+xN4LcxCCi#+fv*;Zc{RNf3owe3YgEp)G2;0K6m9Hnsd5z;jT(5V*4VOjS8 z#ytguX|&yf;BX1Hy)_~S;z(d^L`7{mh!``9({W=1f&`#hnZy#p+K>|ZlIuL8%bZid zomR{rHuMCY!@P&r5s24!sA0P-T`)6NWT*~TMNY-9z3fcpk*LnwKNf`xOs-9@6Wxsp zKfSt%lRd^%Um-=uT+jMj{KD2#qAKg&7_o8Z9fr9~h*YKq`=A+FUla8)s2pzNYZ;F| zo+g{0A#DsjA?5Ds?r}ZRWUK+clII80^cL?w5^(-XN_=~wCz8rc-p%i^GOwYZy5RTH zNNj$l$p?5_|0cI0P%hkekoob)+VGXYUP17yFwoY;cazbMB&}uWqjX@1%~G>q?Q~)r zhnX(S4PY`~@Mla@9zDlkk9ld|d{!39+eV{8?&l`CheB*@ZN!}+ugLu#@^4?)FEYx? zR3kQ^`4-y(RMIPZ%m41g?e0_*C?`YDvpJcOR*ftZBE9t;j7F)eW(Et_7B#+)vJ z_ty^A-cM`+1mjbO$AiqUg*6g2BUzE!vfUezi_lJ{Wv0?OAOE}|gKAPj5*MQnt=>*R zPJi%W#XZ;98lDzdQXs=07_Ulh1^q6E<2z`>X0m<+$rWnqnSKi?Zg;!ztLIVyz zK2Fq=G^#Qo%nJ=ze61MqCim1vPP-?pZ14;OPkHFhB#Pcyv!QJF_#mvO3T7i;Dh#W_ z4Y~wIo~}8HFpHHPO60IThh=6xnxv`IDU^Xn%*;@$+r~9v4a;+y}xK23g zJrM2z56o*Zu&nqC^dCO4XOW=V$coxB5I5$-$c-Hc(t&0r2gphG0SBH{UCS?DMP3oz z90F^jfps$TmxkH5I!}7{VULJfW7j{agm{#wSZLj91Efg3Z*UO!!6)?u3~qbA2g6_H zLg7npbvv<7tmk_Y?DUSShWJzO-Fnnm?8<)BRp2y#TM?k8>f%MvB6QDS9bXA~NECFe{_1oB4}XJDyI70RIj1==*87l~4+&}t^TM}BkEvO^$+ zt^+64ME_-_7m!ZhyChl$40Y%`<1yvu`~;TzL3_sqCGr)zRV40yQ_d%S+%F}3^?0jD zdB5_Ey?`X`=wT>fP`Mj>YEodSLKYFr`sgbD4?k1Jzohy7ax~&EX{t92`#CPL=>;mm zTmtiME{Zwj+GbFkIo9$u%z_4u&L{-*+zvu(tnGgd;*US?_WW5~wSTc(@3tDadS0)S zH1}wmgHMu9sJmYxUem)RXO-qF%oz17bNjs~epaTCx`3a(v{f&WEWU7iuqlo>`pqWz zPIVInK);JmOsWYD_b&BM2=*}hIO*>gNL%bJm_DO9sbkUmoSqG3 z_z?#3{wUdu?A}c2_)dG6Q9w%k{MQeNoIVC!OoxZcy+ck&IK$FQT-Y+s!krx%yEoSN zK_)9K4lGm!d&-GK3xvye%w)nBSEA#n^A+pPReN0i!-YooCIN^(a~o`*TgZjN2Ju$ppS9Xm}GYd2ONBs*1%xY zJ)q^*Mkp$Ao@V`B<*>KrH@gx%&)1xC?m^s+K#-eh5ji z2<()dQcpG+&w2b=;MX2&3I9&966Er0?+897?bL%3czv-Y8%sFj14^o&tmrZ3yN%8L zbp|w8FZ9nnNm}up+jr{0t>Nbu^bwO_&SqHbqf6;tvQKME#d&S^6yl&B0I{ z{vLk8F#VWkv$Jw&h- z$=#muMSj_CzGj2(4aY0t$Ij0o5lrl5jQPQlq?cRTo^ntTKxJ;db3PxpMDdcwDF2?o(SN7yDO;Q^6YrF-m$h7%+u6*xCeK9H;XszzpI3JsQR%AD;|rUF9%$a)oD$Y&SQ3_QnvnIT zkycyo6{Hj@F>?u+ZL)iMr4As)XP6 zO-eF(SjiBt5&puPu?{ONseN>yjk#H0!v`6B%r~y?v4uD-86ncPZ#1p>7E?3Uz zpE}Qr>(Job6t|BXal)uskOJM21xk!R`LR=ng%)S>5@9=w<+E~>EouEOv;#&}+tpqC z(r5d8tM@E;P%q>SOO0Cz!5i>(qJUCBb@ebTZ0y1<@J}TKj%wtAYFdv(-?Mw*PF5s7 zf2+_pqP(@&CYqUEA5Zu@8t+e$zg*|{8UlcJn3+zI+ zEUgaZ7oMEZ6IJyt5x%k|nJAJ|qH}&HCl^PJ_Sg1M&^Ms)^-z42c)-_9hox) z)asFuZ;61&#*AD9f4wewlyp(?3q?Y_5BM|>*?Ea(2YoF>Yt>9+%j&QDn#e93-f;82 z?I=yZXZX-B1eJf*r4a7MPCZ^FanD|n>w4$W^1;mi=f+CoJedYy?|Tw_|M; zm7^zm(<}r(nBnG-WB>kLkN>CGV#kh&V`DVDo#)!NpLGSHcJR2b@Jh$Aw!|i;DxNjD z9=l!qo?NS!w&4tpEb9Kos@&pW`^DepjREsTp{3-D(ELxfb6XWmR@3MC3bA760IqK* z{4A-syTt5tTwm(e=9T4(CW)qF_)iw$g?kcl69w~QJ)07HI@}T_#*&*4IU0%VWi@B; z^2&e5K|jc=lgN!gSj}Y@n2TD`4NYEy>F&zMW@Xr3t%Vw~F}g-=>{T_yXHK*;GGVUE zU?fcR+%W@KXghQp`n;<_?P1uGhW5nsmA7@^zRAjNJy{yKZeolY7Ty~m+U*Ut4imKr*CO?jd} z+#)cHU60?Hs;?YpK2DX*r9c}k-GZv%xs;PP;XMHLHHkNCfGqgHMPwyr#}HC{QAkLP zc@`ZTbeLOnZQvBvtx67L~%VVdWpFljT zLefay3N5D7&sI4nFtt`1%%L07H;v7A!J%Sp2q)0*3xW=7h-5D<^AcPQxTV&!W?B?b zEnF|sTmh674D=o(4r$T}L|I++!|!ZZFuQP@KNwGuiIe1mlv4EusL}b>(Wlp_o*viw*(RkSs~?^E8`QuEjWKT+}B2fBQKUkf&am1UamZP&Dv5h|vaN7FSQWPMPi zCmH;J`Lvqr!?-sEd2Uy+#s$Ok!4pIpc()C0hZ^YlmGOFv%9fsNw~-+Cmf!J zl-eiUh>oiU%b5-Lnbh`EQ4Xdw%Mh-d&b!JYu+~ zWf(8#k(CKV;Bi7}Mgyo;t}5& zh%Bpppeum6350ajG>DS@(CP?qdSso}zxc(b@fO3N*2cvePvDHYQ7C9s>h=kuP3mJr z99h(JQg&+nYVF0BL#xTuBIU!bt!(lxVl5Z7Nf(uNiR9WI@1KfNT!;P!HJJ&`XXQ8d zsCQ31>J@ig+}s$w@GBFH)8DuZw`|aa;gOf z5M5TFv8bfUO)LP^%R#>p%mk{szOzC_rBc)X@+`kz<3AMJ3$UO8$V+70NOeKZ%U}~X z8lhnj`LI}gFD=X~pRTnU@rh|z?d>Ez*4=?&{&1k#?XX8~+dtP?Hx-qF^_l8c0>XUt zFP(=B0vz+=Bk%GwkLb~@41hX)*8L<5g0Rh+u|upF$oD1R3&dl*URKR9@R~ja^gOsz z7uf(F2zOyP5rXD4_?rJcmdpqGWkeZ`#}g;T%&bc<13afHI@bTnqqhK_mbxjrK5I;;oduNS|T`}(Or{AO^q(ro{)?m8FA(xni%+npXTT3*h*rg z^k*O&&(z|Z;px{nTD)?c+c%L*oZq2&$hvO}4WRD%#vydlA5tp;H}?C-Hd$3XujCU| zA*p-?n1+m5fLFkB?19z(8u}fdA1jf=UIlv^*xUXz4StZAH6roc}BvC?vZm@+u z$($32+Y1P=<-TdqUGtSuUsoCcz;B38ojQLqoQQ6Yq&$&tV{_7VdL|r$5eNF*qmH>? z@t%LQ1THSk^;KEtFUfwG@2iD+o=QTZaL`nfDNLg@5zlpZY9#+kn2aFtFm#=QW)NUC z;(B@R(gD%$Jpdo8HC?;spSy97O45qT{^>cUoH|92O#qM#I5;>#bi%z&X192c9vL6D z&y8&;bgeBK4V|B|Ag`%RzsI<7olsbUEkTSBo_h{oIqIp}w{$@v^9nUkPed?E<8c+b z>TrP}{}y^u;Z^Z!@!Llq=F-#cm40he<&f2F!HDGUzoEjCF6U3G*A~_bWEC?{nT2HI zIMsl4mno`XwV)nOR#Xk8I0~Z2;DRJwtBc|kho^8Hye7xs8PDeNyG`Sgc(Fw+6XBkM zVq>eOKcn{aA$QmjJI&5(M#B>F$Q&iaAhp9`;U>!TP-Yp;)QT#B6B&NXhonqz+dUzw zEFJ!qzkJpo-K0qMR7$*_YI2Wn(=b;*kHXMo>>Gtb8$hXh=7)$k;xYh#X3oN;&rQT_ zowUDfwc|S|`Rum?Mb86rL&F+QyB6HU^L6o%-(f7Q1kX;FtVQjca=Z_#J4+n0} zChz+Z|DG-F!06N!i!0AO7UB@lK6lvgJ^d>7mh%bL0^&$=Dza-EkGU&yoyt|BAWP_XuJkK$G^KgEhi|riHqe|_trU1HZf6Es*+CL|25p&|8m7du zlo{{N^)EP|G7^3f(EdavXB;DX@$qx7-`0qIxo9~3GL%7sbrC~MnKu2cE`!BRM`hJ@ zySwYo%8wDUf3F3YMlp|16AAgcW#)S=k9qW`rMOZgaz^Q$vD%}XIQ5!gR$D}cjq&!f z7d^)sy!2{6aqb_md<0{68PY9~`+WiQ*Ln~fa^yZ%yY z)N~7*)9UuM+oX7!Uf?Y|!p)bIte79}Zt;A)nSxQ$6ngn;ZR2==ZklzGIS&6w@etK< zD1$*W)uBqxh#W@eV1w|px{&V5|DO>7UspHRJ})d@{3EpHK;Z58oRWX2FMM?VeMiS;;2DtT)!8 ze)nIL0!<<#BSQvVEiz%ws4#>Foesn>2!^oUx~wUbhBf)x)Fw#@M`XL#3|9~DKR;xN z$&05qo(LKx)pv8fc(|6$n)00_MxjHnu?yZ!D<$-&BFMK|qnxyjCn3o8qR0wix>r+s zzx+9ZDi%SnN&PMf%&VZ#=jR<;^euOxzC_C5$Jnm8Y&?kC=b`Umgwn>#9ElEXR5#*0Q~sgglM>WOw=iwba@_)x9LS2$np}a=T`q?W()% z+$rquq5cmz5EczuL)CDZ{xx;-p~D%3+N`Mn__0oN^E&p(XUw4rZ3?<|S9j&on#@_A zGp@A+cwcUszF^Xa4 z)4I@_<(3JPhonp$r(~0>rOu8PZ1-vk`lJ^1R%kx@fXJ`3mboq1mAo%=vIiQQfPsX4pYp>OwDcMXhh7wSeQ=nF#{8|3Sd=HlK9vyuK{ zrtY@NM=JP8o>9Pw%0>rZb&$3x7HVZ_5eCQT*SX-fZehoLJkgzzt3*TVZ*0oks#o8Y z9~dM9SoS9H+&Qg(T`V?-`{-s`MwVp-TrF{TSgAW1w55Ilfk7>n!t@TV6C}8}`sG=| zGHma?*{dKrIUfSqq%8K{FB>r*TwJcI+tNMI!&Hx4y=a08j30UZ7F$n+aq?H+acy)J ziYdI<*P!{9PTDHGWFD$Ri80?wOaTX?j9~FQ6M(|C{t+6T#`Ki#!+AN8C|I8#UE){s z_epG9Bxlpawuc}^UhinWYB%I}l_sDf7eu36|*|SbjYT5^R_CU;FTshH%1SsL!%wzI*+i z{gblcxSTf%h5RnRW?v?p@HA~?(3Wzr$rU4SjgbkWP=LIE&p^K&$0 zw#}8uDORtO$Z_hr{P7C7Sbc-!m>=pTyrxj$Yi$Qw$qi-+6Z6ZwH=jH@_~O3DmC}Ny z&xHgXb6~!O3xVD6bdFV+7^%{EG0L;PDQLUF|D!#HpI+M?Y?Gb%F27&=Z`0T4JcDv& zBEbGfoY^`jLP(7_W60jxL6Vn*05F;$YZB*61leoxk8GU7H2DeXwqK&7&nMmfp8w1t z#E1avw_-nzpbtiiFr2T0dVntXZ#fNnLQ8u14d-;;wUOlh3qSG3D_Pigl5Jg8aQ3TC zen1~?Y~455BpU-X%Kt}>{usH~5zXrq!l%Qa1>mQi*NBGtk?EUFGCF^#E7K>@8VN|p zcO#Y%WoT!8UDEDZK5%U5#;eC)FH68!73arC2g-V9Cb7>2XNa}&jW`9zBeM>E$2D>M z_b+iho_Co^2rq5E;DjxHOn+Bys9-9d;XZReD8Zmf)PaV{b+mb>1&2oXAnMI-;~v*= zH!9Gdm|1YT$n;*YniW0~-K*eKuci$xuH3utKkM6{9lL=L*8zEwBv{r^zH^#swQ=vk zg9qkT6y+IYs$ax&;!-jDzbbcCLxeJoFTSSmsfzgwtbc#g&k6~J2ZEep&Ue1FUTKBv zzX_IQurJ1S`kmS_@@t%1w(0%*^9QH4j0vw;X^Xg1f1}r}PYkwr!PElypeG>K$qaPB zmBJsDipx;fMQ{yIUmtI$BBGszhiAz3ZNKMkn%ZYn8vNIRlHzdoNL=`~EPr*cMHRn( z0jFjA03~B# z(toHwyEhreJKtH<>bE-65#t#o?-##7*t~~eWT9~K6BxNNBp8X}dRHudueTUkX?Bks zB|~~5U$F>d2Yq2t@f6o8(SG1q+`RKPqeq#c@tVwNpRV-s7%6gbab5Uy4P`b}wRsLw z8_OUwr%(oB&+K1&H_HRPvMu^K&!XhTs z`P=YwK43uZkD?*!jubnvyspr>F5qTQ+rQG4k>wX`+cz}4)W65j9(sHNQRYcHJ1@|$ zMy&UNKTm*i@HA@7*n_(W;L{5tQ3hL(1GM5Il6)VI$XgT`2uUIocvxQ;Tm`&(Cm2?^ zLKTY8v3krUU z$k-!n9L_9(RBotgWEO8xkHtA#(O+m=>A$53v4V!u*nBXl;LEo*y1)7!y?y&LZP8Z*>BMSi!@tfET-)KoFYo1o1?k*)o1EV zH*dVhRUStUbNK4g$6Rph*S5dov(_8wEPL$2hS9fmm2cxEq%Gt*g88|Z8fizva zwKGjYWp!18&NQ}_R&|202z%v#$clAB!VBKNyjgRs5j;t6gG}IRW5b3IG7c!{#PcpO zn|G4dp(JbWkPwd$bwWC?e9vPKk+R%`py4z4KnOQFL&Kq?Tu+U7h0+`Nfw^s9>= zxrnr^ut^mhb(DI!q~1<9+V&d2P1J%pgHmQmV%Bli$za(ar^DnstAxlgR{) z_Osj>syLP7iUn(}@#kg?8te`)*wno3UqzCuMSjr8^qil#b8q}(qvD>*@38lT z3NGFbXVYYLH>-2-hi$@W-`%Ir^yeCVWl?OFuO3GgEwn$l@_!PJFYG^2N2>Oi?A0BK zaocyttzihmqiU1Ev;^0%{B5hags+lgXCQp4bh`HM{3xac&LU{`A?RrS*rDSRCDlw! zY6JTHOke!voal0$5v40TtJ)zcklq)k^| z`?4SvSG+VQ($EwG(hiG(bQg`Q0Jdb97LMDJ@#P?CiK$BP3WK&6^1XesAot$6yIM#LkT2AtUWcHe+@|HC9u3@=OfXP)6rB-ark}dJ*UjMc1G7WC_vK zhAujV^}BD?9Z4zbQ&9(@7-xFt2URZWZLrIr$_HlLP@%xj z^lp`Go0zZ|F7NSXxC?-^vFF7%XSC^N1zGlr~UjDsB1NYDi4PVmcljcKIQA{iRPGa>u zR`7XxeMPzLBfu}ktOf!bK#1QHbcF)lp_xP_jaa89%XZfC@THIc7(B%WOMz%%|t#s60STYEY7{eZ2iykeVxBcGCilXmNF)?i0zKf|u zy!KGEYOeV-ty_{xZQ{w2D(Bd?fU^RsA4&J09DqRFA(^#$Ff$X;&h3WxGhUhlf9OEW%InK($dlvf zhKJCIf4uWi+>73amG6%29@@8PO-Xq%ZJb8tI#Whsrc?yE9q$`$^PDHg{^j6D4P_`I zZoQ*~?7ge!tR6>C8a*Ak(PEt#QlO`2Ewh#$ej54lqS(YUG*Hggi5(EOYn9qzR$8Ur z%=9MvLc*$&Q_Aq?5Y6w5BY^r`#Q_X!`(qe33{gpfb{Xrfs}$;?gcgI*n5@qL?8Q3R zVF=$+lor9av~4hsk1T<2WHl*XF7`%!-wiwPsR~jwY6qiyJ@q|g$5gg3Z=8NYT6X`2 z0i$6C=u2qF$#qEHASv-bY=I52?5%{Y-}u*2u#nry&}Q)uLHVDrUGXdo|9oS_fc>+a z%%^-F_(@q2WdQ!?Ls1!igPRBC_^~io%qd%Mu$n4EU${a6`#p8J38zv?)ZFbnsXOb- zf3y+D53%!y8?_Pmmn0e-L5h1%cN>n!Ys4ni9kQ6Vx~XyvPeg+4f#XXMvPm=`cNl%A zAbJ;bXn84i8HJNvT{7_AgJ*0m=ik78ZwvAC=V$`~VIBB~gz;M#(P$f>N3rjxEgKFQ+UkA7E(gVpI`^c{Byp zMf~XGbbl^ZTZBHez|bPg^wHK|59BTdZ^>j!$n*<#AqPW!2g z$D(W$%jI9e9L(uOxwv?9*R-7<#b5zgXvp~D#g{*3+X5c;KrDbLrPb9>_YK!=nU75S z8{9}JPPh<0M0X6097Jw7S$>Ni>*l*R^L&5M*~jLRloM77iNF%M`YfNkPZ(k}?=e|E zji%j5kQVy62$j-MKNnI&X0-Y`W0{b2mS$gy-z@)ebn_Y+O@|~d-YL^w;S`!=fHOj@ z7aLS{YkL2x?dh*-Ij601BF0nAXD|Ta28<41=JWy#HSg+C!Mi9V4_}A9nA@oMKxexz zGbEOvMhms21aQlsS=T4Ibfw{w;++_)M|1y{6@Z;-UB!GtE(DVDwsnk`shND&MadSyelm#Y zoj_l+?_c3T2@Se|w8@qBs&cY=lLh#KCOp>j^=};J>hqQ6!ARHEPl68rWEK|QWNCsg zDC%Na4-37yhuNN89c5j2UBDQH%gtSmZJ8cS{J^AOE?;i}11?y!(S^SheUChXVH}Yv z310N+HG07*vKJ$78F-RP{IHFKw(#JqMgYP|+JSG(cMX01i57GZKS=rLr2Ut-b+C-! zZ>X}i!^z!xlEXFsZ?vHsOB+^>|H2J(vdn&#a1o$FpnmPwayecjp^8m!8D3^K4&ZiuJgxZ(W}NWED0 z^RIiDugVEB0J2_EeB}(w{##~x4CJ6kW{SVbkK;ZY)87Lg_7!%vcgq@21oU7Sqz+z44o`**7H*Y#B_&P1y$rr5b@ zbD>z)5~BLm5y=;$F-`2e@`~l<lK$60RCEvSF5#dt+U1C6-&TYtV#NnBjMpiUd15g)bWDMOg(GuyQBoz z<)e8(X<3e7(ASeFW_IOWD4z&|5?7Q=CSvoZVua=9R=p$r6w??ERv{ z!zUq8w4;)rx3frtM}|M$JjQ&Du$6r0>e92d;XMVd?CzH8v^je_3~B^-A%$aqz&JXV zec!p=&T8Z?8??Qf8~9G!K#=(V0?hFKgP50>7ZVKmaxvZa1I)vz`g0Y(S_2^7cl)`R z0-sA6itEOvx=K3BR}IBD2a;`jaYF~|y4|jpW^a4?-#`UZ8!|vdG}QEhC1mEBGb9LE z7Zr;&6-Ccur8#${3gJ=1L7?`Sz+#X(e4y1E;?kqP`j4MxDOqGgB&Br+G zAQm4!q&YH|ABo*Xc54Q(`GsEvB;4+|fZ|c44{J`?X9!HF{gzW#bCb(i2d!F*@SLO3&>7P8`7*C3|wbFo-;Nc;TK1-kgR{ z*<;*aH+=m*_4N;6=Ia#2RrX}%{-N^7EsZW|+GRqV{ZY3JsUMtfR%oi?{(}N7+8w@` z_>z>|a3w82E%zbf?_H}@`2-?LzD6TO>S3pJx=*^ z6@>FC)LqEjh2Dz0)&f-Us7BuMs2c?Nabp?F`8VLQihGWKi9q-J#mM($&U)a?A`O(TOHUH$eyZDark1Z ze17DaNNZ$*OiWWTx_NTxgOdKP0m+PDDReYgwKXDdaAJXTpm~L_wP`648xD1Y@M9LH8cA)hLxzxXT zKJ5y*_nC^Pnu-mYLI*Imv;G|N*g;RIHJo6WJU$58&vd0I5U)Ml*mAbD!D#>-LkhE? zxmd;ys#HX~;rq}zu3!IN3&2@HgB-j}^6~T;q6RzH^mtg@xl%}anc@jU49ydRytk9< zFCU0~^bFV;?-i_cplW?A?(DJLrBtT_+%S2o`;ok%a?6+2J7kAvR1!KDYn7qk38pE6 z?>p{o5*S+qlgTYm_%h_O9{I}%c<1de-YL?p zdYPAhy4Iq`R$TmWW=7UfRGSl|36#5}i0ACve-6{U8rgg}3YUtKuRYb3z4F=D^=RB- zdVv+`=wBkudqIwQM4tfTSU1zUV4!b%DlPJlNSD7pz>3uFHgf*zqT7jWu0nY(1$(uw z+R?fWj?sUcSa4GrLyZV<{UF7C%x0|h<4GrZc~{}^Cozz3`g7O*-+qeMJxT_$IIFT{wwTo`@y6-n%2E1`IEtC%I&oq9D>43)G+N(P7mNj1Tpt9!mPmygZ#QP5)aAs$N_bneh`= z$a;}NByA57xK(g0_ul1_j@KXScM7-57PBi{36sUDW?UJl-q95Vpd3Elu68Z&Dki$m znV$V$*5~JOfhVRg`KmGV6-5}?VxSErAMJo@C~0Z->DWVK91J@^KllmPixeQA10%h$ z$f94MrhVrillLuQ_BCNIyim8}EBU2oO zVh`j;X!bTD_gMPTrl-N4e(Nc7XawZ0#uC+Tcf_Stn&3d}w$mTkaH8Nfz<-iz{Y@l2 zlNedMth{fD7V=y3wKS)-4Y2GO*X6b?`C3Woc2e$^L_FZ{eW>Wi(%$Vv_w`pa+CnRo zGuh-l=!HaTAkP0G%fK(Hp`ln^qh%ke#rhREH9~KH8+)+88|G6S8;%*xdeZHp==w5T z@JdiPM|i*dk*pd&ahh}N{m$eW?Rya{j3x6XGA|2BKAg+ih9mZ4Eq%AF+u`tSe4>p3 zrIjzs#BCq9hkRa}d7AK~4%`qc!2TtF0MY&@e^3$~%|=P}LHgnD`+tc-kdpmpGyKKB z1|AZuwl2zGLFXH8_L-Xl(s!b)d0z)jPy+E|d&j3Ryg4HE*y!cxH}rk(!oj|!N~@PL zW5E@gmm{v-ovo$I+dT=ZN{yv^#!2%y*IiK^bs&chJ~G-9t3MVvgGDRh6}OdS6)gk&&t(pe=H~4R9v2ads95z^hfO^yxIXk&I$G3ASEkjis|l z%t|TIYaR~-o9cdYU+u(qDUI!C<4xbTVsZPtOsA|gFB`hmbKiQRU8|3Rfj4<(KWTS$ zCjEG%=R|Q+swq!Y@n!M#r>2(LgngqzNW{xOK+Amij@s@ze5~AvDM#KXeL4UbvE5*w z@uzl=cG$ohp9paJ)aT&v%Nh^A-9#QUkwAJLqipnF`^8z%ci+!Dwn+6fhMPWhBWFZa0K|e4M`4HDBGofWq$Nv=tPBSNJo3vz!L*!z)W0G zC28K>|0XTbJ;;Wj%41}TKS!pBhir5!U?)dgK)b5{U9NX!(q~JNsmq%jSY@#a*~|H0 zDDtrNtlSvlVqo#aUZ`C!&GpgsS-wPh5UR#EUSVMi)QIu|%>D3{^^w1xdRmH0nEP36 z`@8jKR4!aioPiYD0PPCnib)e(J#8!KMI}k0UtTcmEl*yX4tug8-k5BQdb+P#X-iIY z`%P_Yj>>v4q!Su-jL|C@?KFJ01L6E{>4rb|$Wo~E$BV3hLTRAY4vQzuFBu0oe=8xU zL)CMxJW6Tj(|UMIxp;m=`E_2o#GUxnOz%V4;^u&CQC!%21Q1%U=7MMdUFEPnZr^g6 zGCN(h*>b@^tJrU=h~-B=@8)H0b#>33yB({H+is=m*bTI^`c(pbQWI4e`>;W;?$sTv~dP95qjBR~kHX#LLo$v&=_X;Lpymt~rniDOJ~lg%ohBP%?| z7|Fl~eyI+5iFJbRUr_Xe>`>it#sHkIb&XE$6s ztsUrl7@{}h87x`)zs)>c%OEYeY6~`1iMHNU^^P@uiTXO<75v7$LuH$lPUZMGJ=kYc zP;vg*@Z0gnj>x0vTcSdy3e`08g41>rk!F<`+!vfY;gR&OQ``}Qv(G*Ix#Qk*pBK-Y z49Lg`A>+%R{O0F7=WIx*7-)CJ3kGPH+92m+y;qvyv%~3Kc0txWOc_m(Cw$J!rR@>4 z=;8f=w6)9X608kNCUXrh5?vkf!cA`YtzGwsJuS-UxY~SHll3M48EXN8naAVX8fLcT zX99UOakkQb`X^LP$E%RUhaC{nS?Db;yTZ;e92-p22IIZe~m#ibr}R=*wx(|IGPNaZ7Y%cfiT_72?4aS76BY6rWe9!sVI01c+~Af@Cl> znl}f}$k!`QvwHpYtLIr%KSqChX^i{o1ZAfrrnLVq-U&W++Ddv1VY7*`Z3{oGQpV~X zT3!34EorITQ?NT4^6$(Lidj9+SwgZa!kAmEgmUHxZPhhj+QN= zt)Rl$TUwHxKqZD>kT(alsk^p{5P6uncG5{hE6^I*Pct!h%)Z2*$eJ%pzKmlLo5uC+ z!A;Upm4y+%qiFFX(ego$&WNg}9BOQ6vF>eA&~CaL_+^1#3$p(dDFv{$L3(=oGw_NxetAAq1|- z>dIO+1S_u4O`J;4c~Gt$>oZB*pAhfw9UO#1@eBFVX{hvwge*8E1jl=2d{UNn*a^OF zm970gn;tU!TYOK^%16#VNZj@s@{XwMZ+uxP7H7{ zFfim0H6V_F0c&T^6q1jBj-EOD>WA>D$V?L@u1)avLPpcs3;Jq4`a_bs zu);Is;X#m+$~c)lF=mc*_W>>&~#`uO0Psn)pJgTIDB-X%h7O$5|EoHdn=2 z6Mc*j3WqK=D;}eN+wL_L>ggVY3bwz?RdvIg*K;k=*`K8P;*2YC<>QF+p*vb_=-_}JeP+J$9l2Srh77#BDNjCmPLZD?{?Cp#xStvHeQG-PoHTtv zWinZQ3VABFUu)AA=53CLnhlJSYl^ct>0kGm0%eSSEn!nac|>SPd7Ph}Ixp_k`f4!j z%O{q7HuO7eZE!kXOnILnGV$~L1Gq`Y^@HS{02P!nsnPPL5&BFZtMO~&@JxNAo#t2W zp`@Q>7cUUE>_DaMF6?Z>=EqlIbIjX-nj^9t*fnVFis$=*vf!%}_{Jhs95Zjbf4lKMI6RxK)d;sC@S4gG~xXV%t@!- zre>GB9dfr0k7UKl4-(%;L!LBXch$Xdvp3P1D0qA%;?ll7QBiMLGIDXrw_E5N!JO!n z;}yht;gsBOM}Qj0j+pp-7l7?2V@L1f&n2=dAFU z^%ACEFS4jYwr&G>toi(o77T7yeaOz!Z_g_33G++lM*0qL#%W#>0_Ky?s-s0&=e;<<%;}#aWY5zcikckSmh82+Wz37oOzk|v{c$5lrsAZ- zLV&Gv)LHE%$O2Dj>+!Eg4gSDA6CLSeI6vljZ!p%?o?Tc`y(j8I?EE;f>acZ%v85No zp-*NwcN`IHGd(MD%q-3pGXY9aiMCFQ?cKll>qCB2ImI|mJS9Y+S`~& zlDAs2OoQ|(=+j!ay@GHS`Tbll)%vxPtV>->jh23dFgj4oge#F z%>9$S*@C!j?pCxLS2F*xvC~)TR!G0JVY3%odb;`{u2p|$1qUg?@|>~jp_1ikauknR zc6Q1j?Riz&oag+b6y+`(0I7b%FTtgs5HLm(N4(SYQ|* zyIf=l<+Ns7T5@)uIgGF4h`9PTSzH#{z51Fh3F}pCP#A3?q@A{sW|)|XYVkxyfB6Aj zuk4H}VzA(?ww+7ll7T3ckP9r}oJZTGZ0^e){_4pUSK5?yeXw()2vKoq=q`Ak$MImU-R_F?hb|>z#Vud=Jwimif9{#z&}g zh0VQPY>42;nPg0{3<^z@&@omi8L|Q=LnOsvqYJA9cEPmT3w9}?meV7B5xMYQzhl;u zARUt+JL)$dSfTGmXrXeS-J6!i0@)s$PsC1f#j|wx&LXRYBrS1PE&ZUzc+>lhfHHYR zPRC1&47*+g+z+>oCXMg(jw5_>xhLF5Z0~YT8DI0B_&To(_H3TY-mG7K+OWcStz5aq znYt^IEQ_zcDzOtbK$xLfZJRRG6(*w;^z8HODp8%SWs5MA7-wW>cZ6y(EFl_;A*V=z(?#Sk#l-^0V}!A%Ls{gUv49+ z^R}n3P1H!U5=bc&wQuj7tU(Ss(!XI{mr1R;xCVN8B!^VWduZQ(l**PoIRJyZqPCm$ zZQ^W`14OxgFpv4!XA1*azu;&u^K}SaXOD{8$1Lc_^ei@Fob$TZOt3KCUIL7r6W-IZ zNyPV$uoLflU1tj9{c~6?dz*;FELKqu)aw4==+7(QHS{YuA9id}1`6HXBNArHk; z4_4i}J+R4HH|bO|5fnP>Dy#d<1Li}@U7vP1QM`M;#iH9!`=rR%`jVx6IKu)pUc0ym z&6@3z>0vJ~pIq~M(deq|_{Y`U^JZA!YHch2=dhf7Z9ToO48o}&y)Vd3kiR72UhzLY zn2ezFyLh{K+?Ft@4+AZ3l<%lIxGzj>X$-V%Zqll(8$K{|Jo04!96_ZH_?}3EFHm>W z!4WNz;o8;>(lwQyKgBDwFiL9yRzWm@G$ItSJe#wQycH`I9 zrvE&d!%5&OQEAjsa9Ofg6W5$XlaM25EF(o1kMc{84VMaMf|Yrd$st*t$}G^_5=zhN zh9b4ef?!7#2Hy8BYw!BLznl(7jnnek9Qp3RrxN58J+-(Sg?AZg%#{9+dKLcV*Nqsa z%H!ERP}+!G4VznY9-c=Wp>MlmFAf2H=OC?4*tY`DiYxd6(A$hk#2W8G4(+Uqhd&gx z6&o7gS@#A`&FR5mdsb+_vXUPJMC7eK|lj&E=g!VZjKKKMe`j6uR?wpszmN*+AUhJzbXd zWR;n}`7~;Y(bf|My@ijQV0y>I5Q(a6T{{1nnpDFrm<0Z&oB~$8V}ygGq3Fw^B~M;5 z^kZrk+tZ)tb>!#-#L7Ve(g-{AJy0IphZ2^s47Q<+(D9k5ieSG~dSGJ{@A2aeJdO3f z_|b#nJ+f0pDL_d7Jr!IqXd>tBoM53b zzUU))Iu-@auE8O?x==ce2UdDUG1tLz3Jx-_UPXH|B_;+GSV9>IdPhc>*@{P7x-{WQNW2KT;ATWFzSUVO;DyZ#ua};==WDU=O$^TyHB^vsh4= zu$-jFKOQ$4Z-IY*Esp(gM+sZ=MfaQQw(qFtD9qGI)-GnyI41I0+c3hSrasqEcD+8B zD9JkO#;g-&m}{{lerI^Uh6%+(JsO$uEz3SkGRcaDFwT|r%CMV#RBceSwPJth_Gtc=|C5PG8~`=z8?vG0s&rtKu5aNN2C2OXd7y2gBNDZ_nf;4kKZ&aZ zYf-RfK9_zxZ;da5iQ|J^{IasAkOK#=8=Tkay@fM*5${zl%938M`8|=>n zrR3xmd$O75>gw_;DnW>5-(NK_x7=ER`OO$E!JgL>Tvl0(sIWaU$@Uu^GtJN2Tz%(` zGW0gc7qSXqIwoLzJnHq2%DcMQg|dZ1Hcer1qp99MVr7Oo43MvWLo~4WyH#{LvsMvh z$Co)y@pXS*B=@rqZ)I*TwPe0`-`|L4_GB0h=zg*GY8=xM2fQ*nIq+)*9q>Kd(%CniO~a z>>I<_*%4)IWs5HpoI7uumk$-hrI@fxe@vaMxSJMAg3s&Nd*<6k_rNgrYQEo8W}a(G z+#DHW1W8e)xGVF&Qi!xT@MNxi^j#?k4$hTzC(?QaV^XDDAsyO~vKAN3BsJA_sM$Pn zt3Qa4+awcu_Df~8ww(;|xkk#uvhzm(KEmmT(OXc{lGD{t{Mc0wG(^MPr#X9oE7$C< za}D51Fp~Lu*C3D0{vj1QG3m9W0o(*u8QTE9d9Y()lcz@|)~vB_G|s)pw2{MFVIAqI zY9hcD1_MoS$)dY?1dDlEYZ-vjGBC9@g}0)Rba|7pg*t~UvaD-?4fW?fXJ=iGnW8N4 z+wz^6vh#9Tt@%kmXejMe`6q?q)N34QEM^qooSdzM-6#9+zJ*w!nAZjJA%9=$vccx^ zlt89IknrtpoXqqWGCH;G9Yx<&Ly-!C4=)o`6zqXpk_ovuA0vu3{>6|nZtiKF3C$=nR>WZkbmmRqT&@#J?G-C(X?-S^1Q zYVw7(&+cRdb2mS!qu&g-f&L_kctRF|!HkpHzn( z_Az18yey#SUa4L!K0_T@<-=QYCWhpuCf4C06%uO#Wlc|LkwKiM1>-e|4>4Z=cx|ki zk!QeuF$LHQr&urP4a&gXPkU;=LhyFh-r?Yi8kF;ERC}E`9Jn|)&ejw(;(y2!Si+h$ za=+X^@KgQ$LujsZ4c@cD1R9S`l2AmqM3;eC%$kLN`u?fDOah4ywSp8^&}R*-(P;^+ zQGr4ksvtX^@tucyF8*Y<3I=W!SHF}u37hT(kHNyprBAuW$Fb-42S(!RV2T@WPWxOU88mB3?Wr*slI9uxvCBSk6i##!q(rMB=90fYB|IS>r_6T zy_4&jMdxFGZBupIK3GN`KljQEQ^3!5p$27&q*+GZ<-O#3)Fp z^$fXHatISkyZ^a zyf+K=#$+)2%&EjwmVZDXT%S8JpX|!vlrq{Ob0TS57U&?IlXFx zardwD2h*OG@9K?C@GfF1{Ij^F(1BRO%*qC*F``sHcX&ndh@_7zcQeQr9z||90PQ~{ z`w_bUs4>R&!o=&gpDp)Ykp#t#`{{^VlT&TkH6;lnW2T|3ct4SBWk?PIR59fKHIDfa zo15oruFf(DqX9&Nkk#<9R?gP?FCq`am9IYzFl>ljDeYZ zzRCr%;6%o)>uV)(n#z6<*(SH1XU_(Y?%CQRZqppiNk?)EkYq1Ok=aAf>Ak0vKVm5~{cB`a zNxPbk<+OCb&)U5EUrAgQUdI@#03gjyy7Q9+w1Il-vchW42S5FfEWs73vBU-m)xn3o zeXD0jTFL!3sDT{?#(pse`5`=q^Gny%#|UpR8)U4By0q= zzn!&?U0t?$_M@4Q3Y4o4(V*5H(tA@%ZCCahmoj`U>KDyvN_nuK{Yak#mehcX&e2gP z(3JXX8MQ~on@^+PB|1>t5zOvYyx#;mYL`oQi{hWYyYCvS$n4F`064mjYcFz|#p}JL z{QI#@%I3G9GPt)N>zwfTY%8kN4{kfNOb)$UGhRP$Cw*(9yw9H>dF2)Pij}m4I(V)i zqg}noG~Wq2Z7vX%I^T<0{yJ4F&$733+`Kb&qQ76epCl3@mX9{7V?O)G9e;gMcu{y8YV}|4 zLcb|~m^Gv9vVXok=!e_Ibd&s^yEFF-EtUN_HVOL2Gkkba*i8PzW-4Rvz-0sA5ZQZP zfb;gSD__B&kQJgfWr62-$@KqS*(adi2BF3Ho=!r&^*_~k2lx0IfVYGrHFRM(CVCb!2&bRMf$K;11M(8n9V#|RL#D`^O_1%DR(ysU z3T0fjJhYyMO{-9TEW5SE>9xrhA3sKwU3C*4yp0q-QG;V&63{eq;%p!GFYo?-Wh}pP zY3$Fwr*`wpCcZQ2DXhPo(oahn4iR zNPQoIb4e!i3F+~y>pYD-pMyrbdM+s1(K!9>amNU!SVa;0Mp-9Zg);9v>b2x~k|I3h z0sXmS!vL;o=2g-+EN5uiF|T77k=5a2j$Cm!kDT7z3Fgvmue<@}yNJW)pMJblnQ=U= zLM!mk5uoyWZ;K7B4Yg}R)7z*G%<1rN3qA)oxOfOSrO_WVDYnYIcNsYM&`pU;+QGZe z90LG+GZ>Ol;RrO*j5+7ySfS%ydAiW-wyAjE>(#KpWs>#eUM6{gWBUM8p&5?zx#o~8 z53TK2+>lIiwV|H%G*(_fD+Vcq{m6ge56)JHY7hi*53?DLpFL&fOGuTceE z2Jk{~-^ZZN$v0m%I_!g|LL3=0`qN~0#SYFc<;;%_S1p0kthOn`fspu58zD?fU(ZG) zpzc!c@AW$RBPK$s9GNuVLse=?BZMz{+?LC%%YYFhkl5Qync=i|Mozm-@<^L@{*&P2UlAg%lK{nlLJuK?w3QI_tHR6PVM|ji-MK z2^$6x4V1CbI-fH*Z{^+Ap;v+3XXFY~0Ab-#*=H{z7daIS;d1cNcSr!2et7umm%VOP*kf@lY+)J&Yh}E#9ZBs|<2C!=*X0=vI49mD z>G8Ct{2ly$y;vVn<_TV@0N(=Z5-Qknef5AM$%Z)GNG(iqAFpH!eYC%!lu4Yv4 zkLE`@+WGt!2#T}>8Q|+~$ag`Aivwx>_ifd>W527mFLr-)#n{}{$0SN^|2CSg4;pK; ze}Ibl2;>$NM1Q6c*D2diX5dkEr~30VPAT9)7}9e`jb`MRB`y@M7Vdr(rV76+`wBO? z?Lw>&dZh59&Hd|6lER+}R4VP|7=Hn4xSAicxik|;JBE5myh{B0dV;I_rU?Y$&59UfPkrTW_7R!zIJjw5eJalLLdO_xZOxD07qkhB_g7 zVqe$0jtp@iw@BxwVSIrtkg$w_C7h-^|INEG*OJ-ph|(O2dHDdVzXS+r6z(3Gv^A1V z+6YYYDvd3ZP5av}eMrh%Gci%cQw$nPes>inj;$b9Bs~rtsxSc%Is_sWShUN~83-*40d>J4vtUO63`^+%8a%KImhywT>s3I}SN zVx=K|&giJRZn?DHb- zST=2Re7{Nd@%9gb13n^=Z2B!$w@SBAx@T0P>(fW;9?g69_KX6y%BBiEY!3r9>JfJW z#K1IVAd}0=VpCceAhNAZacsJMe_veiZb05k* zt>w8E2o&(}R!w3a{kVyxC-~#VSrS8V{d1M+G~vxrp6c9**38LZ;rFxZq~Yw*-QV;1 z?`7xJ&aIyC{0trG55;3*zxNWZQpWxq6m=0UGB--F%GnKT~}` z^5siOtZ7KX%3j=8bW8)~_+Vo=raj$Ve_;dPQTezorYt}&mSR4 z=ZjPo1b(zZswHOy)A0jeCm=+OAVgd7(5E~99I!&jfCEC+Uw1~%JQ^^-@J5_9TxF^h zv@F2NDcj8G;zt5PxTn3?5Zr(`5df8w#-vp$X~kCvU?R)2BBMj~tA|OL9@QUh z^)bn?IV#R`UE5;QuHDW?-h|Fo-Nn*Whw)v99hV@aT&4LB<*vFV$()MnED%Xo$)CRr zh}m)IL(8YUDh?J1&>gkhuG5_3HZ$u2%Z;(KXqPPA{rnrssz(KuR66@f59a5abwY2i za8>8-%CzA{yIQLdFDX1{-oE%1yUY}Y{7gDoVd6+FOeg121>xRA??7ep8Qn7vyiCmU z38+9;l$93DRf*#272T77ooEtT>EINx$`>c^;U@PRcBlujHizXr55nDz7LJIJ$Rs6J zHR6@=O~?Af8vibczUJ4Ryk}MS9U<6JFV`1|^hFHXE=2$dwP9DGndWoV&SEP^W=L|6e=@dU@c*AT8} z&w(Ib3DBsJ0q=j&@k2lO2SX-@2sBcm(l7u|{5F~boTlf2(K7FQ++M2(ExV4i(e-eiui&|(^*B~zKUq%vl^Cku_@_Z<+^@(^fN2z z$>7O*Z%xucbhW}oWsU2b^^i*yFQ7QREyOQO-YloC6y|A zFj?D5e?k$Zj_9R6*PV3h8bl{ZhG(4#g#BrB5 zTc8iMtt!*ryYbdwc&wnQ>7RUWrJizEMm~PYX1!8^$LoN{6A$?j{ev!WF2!u~Q3HJs z8;0(um=4fFEo{_-_g;*Ebrv&Ks`D7=y8RY&0c3*hY3P~zYY?B!lutkEni0TpQLM=z zGfi2?27yv-g1pr4ANeIzE)7xQyA>23j>pa8wZU1+lAj-)nTZc~!_f2C zI@h+bsqSL{9lJ~Y16L_S3ER)Ja^dfYF{{aUx>HM42k+W(Ni$E~aODTMp406ESl~ZC zAQ=RpeX5O!f^;|LLoGfCsWdyZ)ac`>T|=+mcSu~nHG+l1yGO9rmW&6S%gud2N$y3&oQ2gCwrR5t#r83 zTGe%AzxYu7Qgwk?iC8G?s7X`26$eKslcIX}& z{_y&81EK zXqD-6=&^Eq*uC13dI>aVLq0X-%lT5|HdD-FtVvO8{gJ@aL)H)e zjj*mwb0)|8(}%-D^NMu>?ykj?ZMnwdO5JiACUeyA>`rUL7hBMLbf*HjiLIuow~ZV) zICL|wJD6Rg91tAqHG9HW7 zpTiD@D+CcsYJ|7y!D)A>@V1)G+Bn{123y$Jx_}izcq`|Sf`iH zvd9rw7g)s~Xwe;VO8`mUCK3*Sp3gE1qq1V60Z+GqYCBx~Fu>2(HlT;On>`6#$notm znb#Ll{)k3NRXU*BC(zuE77WSp4s1{xTm#bC>>=)vGe2Xwye)b3;fUwi<1g;B-@aD_ zuwXVel22FWj|8ifH#+zXsKKb?wr8Eb_%`_9e~(aI;tZ#{d3fEC^Ylb`vBM69A)dbK z8<9sl9~kk~sd8hhFHS#3TP9=remAYwuS_<|67hsg->ZxaiXqAs?zQYDK>kK+~a|%`-x&wN?<6au}z#hiT866T58Qka^x<5NVi@; zMQqrSf+U@i^y-Qyx=O{SoV{6V_QYE;CyKSgut;oZ&;-Lzx7z+Dk;#j;++5C8;%)Y2 z)%UnV2Fe+3X*s1Nt9NEX1a^wrt9$Fe%G}U4gIBRP`$>|rF+^Lo&|ok6+Z+MBA0ysv zLikjgr+T~SSXb_Wpl7D0_0o4!Yc#vicKOLNG+`iiy+If9WGK$)Vv=in_EuM9-1MMc zUo+B_{SWy7(w^<5w}-(in8uD!M-iZ$ehxbLzU9i=qkZ)entSppEq@ zUj5+F@vdAKDPg?Sk;J^;!7GiKeoqYp4ffH25L|s6SJqbrp&i%O>9b+m&V$@_hW&V%rqBByB85QGSiQZGHTmZd* z7k`H^ZqAT~P9o$Ry!N-W+K~z3$apf7qXJtnJFmDRMOLmp^yB{;3v5hDqLVGAJ`45- zbg`9iPYp0LY;jij3?#z_FhaK{rC2%X(P*~FUX^Z z{h*#H4L2iNR5Jff!q=)cW7maxDldeakCkX>e;i`wUlZQBQZ{V^hmdl7yOTL28AHL` zh(jForhleL*tXEBkdWXqv+*DOCI0YqUgFlB{96Fw*{t?I%1XbwZXVaE3TU=^}^c5AB$OEdHQ{8Ql@nsX?Gi;3AqhWz|jevIOIy<0lzvn<@l-i zs*j+w(qr#QDeiH`RLpb0GwB1aAbHP3Y4kS9teqIq{U$Pcw{KS*_%%kv8Z}ShhcR4& zaHQwQa~f+o8K^$XT*O+XZQ2>>vR*cuc55<9z4Nax1g2E1kIdA5MN3MyS>I8B;zAJ7 z-{ae<#5-Q;DzQ!FRltx_@U2ZBpb3a3MZKMfVp&Rbc&~WhPoeQ*OZYbEFyUaKnZX;Nw7hi{6JKE9n>A3P!7q90&WGk-u+DaQwCD&W*$383Y98$ z3+qnU4-u{T#2pB%b!oM1r^oLWW5%Mv;{cl1)RCaV?OT8I9?FdUrGTR*-em3$^)Jrh zEx0#j7pt+pxg?Y8ai{li0T1penA$f*tJ-e;LoGkyHAim6IdpiwJP>;|s=tSmG}p`- z(AdBts_bc4PhSwB@Vk3*tYu_OI?p%ZG0$DKx~rn|VEl1G!{D~6pcK7&>KIah-^xWEHA@zOT@p>~;lwF$potc6;(pKn=SyXBxcN4M*R5}>*l0l~ z`M0M3p%+!w^X6~(@GqDkfmQ>g`s@Er4o1JfNbSP@n;fihjJswFdO)o|j7`1fPrd!} zH#wl}f0RJRQ2ncs&uhsRAvH|ohI~U8^n3QrPh5>Hm7@7@p6^RbMWnZz@J0^O+M=JM7W> z0uhPY``WH@yCz;tmZC26-|gsp5c&R zeDh$a#pnK6aj`)f`k%xgAl?wPXd-&k?9vALg1_9}@T=n|M`0l?=qQ42+L79MIS)o; z1^9Qw;FQDm12O3TJP$y6mhb=A1E8^v`2O5^YXwtn+fD&{lX?GTd{(>!m??E7Sk(fl zF6lPU#VUg=J=`@QE=6&OPCc5X0ew>H^)r1Y$CI7cI=b9Tt8@89 zzbc-t_}Vt1tl7%}hd@YHGfLbumy6kG@^O>x-V?aozu*Dk(H2u?YjK*egRWa;5YR7@ zb=K8HL2&-tuB1xPPsG(Jlzm<(qtV0~1=F6prkIv|HAu%`4 zWj#Hg^om~aABi}<3X^Hl6HzO)V8Q2pv-SLDi#2hl(lumCc6S9>J1y0~ zt4JJp|4xs0eZl62R;=r%DHh!3>}BeU<$7K!7%o7{XUf zM)dpnjyUT@B83B$Bixf!bH^@6j01cFMjpPPk{~&pmhVzIvL_0YT!z5QLd3n+?<=A( zm4DI%6ZV~&Fl97ZeLu`{g~4yWKARYdb#llpicTbV9qb`zQ5{pZh=R`zS&Q5FDCe)& zMxhy3p%*OsF}7k=+i}ji-oyX&1biY6<@!I{6VMVmL|{_L20{i8t;7=cs!R?LbiqiR z&)LopvUsW}4XeAZjVfiB;E$Wa51k0TWf<}KfWvu~Hllb1*hzQ*H0KpZFWU^ypa?fn z*b8qB&2?we1iVxS82;+X23rc~O=YD>o6zHXV4UU^D zIO)u1s(rrWZbSa|WyCWQ*^OQ9V4WQ*UI=ov-KJ+74*|wysJZ4bHBxc+5{UEDfOdL) zuJH7`lBG`JjjhqL))r!qv!ju#*y!59J1$|W@Z=vW8aO>Eh^{loS;l!f|A*Dx15APU zLX@|aZ1uZMg}1v0<}pllq3LJ4L?bK3LD|QeYKD^cots@BCXn)FAO(ck3w5BCykAuQ z#`qECffzk*lt8YrpWI?&27DiJQ7=SHB`9m$UosIo%~93hT5&VoSPnkB{VBI~0^P5P za`mL7(CBhF#f%KhWb7P?b5?Ismn(gVp25ifO{RdP|Ba>qXs!YB>?bwOM$Us*)6?2a zJ;WYb$5A**4Hvm|LnQ;B2#G4olo4G1PtT$4a0!gb1TJRj9Xp;U=jf@Dnu5itZE3+? z_u6$5Uag3jK`U=Q3PRNBfZ)5rWK?29vp)i6bF0FRR2oB%7Zqd@9f3edO2%MF+|(Ar z1^)dm>@4jJ*cb%JANZ90T4hY_>bo+jS+NR{%ki7Lq}r`*O7${%V5YlR69+c|B_WuK9Uis(DtPOI?nAi5<6&L%E^_*+Ba6CuXDw{l+^6*c>W`i@ z^AqU$7Ve#jsCb9wbyuk!@X#I7zN*tCUuO`u;Ci5Si>?}z2`jMPbCr zE>ZAX(lrTanw}V6>m}IiO9j(_D&HA8*qrBInGl#K(o`gicl~`$@eWD5!i?zA46PKXz zb%j04)5*z+F%jhMl;+i?*n?F?-vw)>)l$y1y^)yaU(Y+z}Q$MS8*v@DFC%`co< z3U3RY@c1d%*yR;P+0mBZzt|9-pG1?6fr^BS70r*KCc$tONzWGLjlBV1NIrt9H_8y- zAAdJ6;qKD+SE@-58#PCD?^>CSp4+Zi3NjOmR8%(h|2+n%8PR||A{MQv;aN>DfYw{F--a|^B4;fAH#axyn^x2_&!a5h zIv4{4Xmh`j$!)iRzPj?eKa+@H=TB>G2P}K%=Rd{Cwdl7L{sU3vgRoi7p`(bG7|vS* zB$wNEV+d(Q@at&Q%eO$H-ZI7?>`)@9PRNP>{T5l4c?vWMm-VJje^UlFuv@qN=V;pe zHJU&1X2|m7BJR%IM59F75^JVsZ=LdfEz_=R>_z;qg@5`P3i9t+2~6k~<@YQQ8$E;D!FOw^=oyvT-856f zqRPKY+;GdHT}ax;ZX{da6O=;eh)L1zzN9Q>|8yz(LPs7&Pys)6)eQgKry)ZiyL{Qr z0K-iWoM!&2w}y+Xo~NtgTOXCg0ylp6DkA@190KDdyD(gqIdS_NtmTd>OD=bph zY&m{*-SMJrulBOswv8Uq?x$=@-*+?8ocGm|7~eDYv#4dGrBwwan!Hh{^=Jj0`%(X8 z5lE~IBjkZUl?Z_A`FLf+`zUbWKmI`aIdmEd=!x`SV;7a-Z`tI0BfkcPr`q(L=eTHI?>?=99H?s81^C*IFs0|?~;TS$mJK`DNPKzSL^L%W4rrzrU0uoBe$g1 z4%Ddm;m5{l-qzN2sr(4^t}arp0n1x_NPMMrdrd`q2gbm|70$yW(A_!v{VP>*GSXrD zFA{K?W#p+ls&GXV@r67)Cr_#76>oZwAQStk)7rFE#YRF1wMiYSdr1XrLSs!vmr_FH zzEIrr4Gk_9SqA>q?0!Zoka0}|rGSmUnfrsL@~WuixQxC(X)>s2 z?rQaTB9|&e!M4J(3aCNdV!6?2_@>M>@P{#fNos9RV}AX`e?tMLp8r2lfaFH;F5>^< z?yaKQ{QB+RdZ833P@s767MJ3Z;!vy-CDOUM6hw1fR{c>bN==?zC_OQzcLpi{hkWMHT-teKLRGsY%A+4&_ z_@G3-Ps&A?r<6;eU^nJ`pI(R|f@jR^p+`rcRD%Kb~o?XCEL&;XmIm%LOks8r=Ov+_PGW zAFGQ9!~;6Oa?1nh^&*cPM=bDp%iqOJTHNDG4~F&E+n(qL>!CI6(-wL|YNx6Qy?(mu4bCa2Jemz1^gZb@fin2(G8ARc=A|;*f zg9vkalnWt>@H@X8Ffxr~+^xooz8AEWE&i^w$c?`KPH^)qj*G{oZ*%!oLZ>8az7jE* z?qhG`f}Gt{^vGDlrxL>_)v_8@mCeUoR;GTJ%HWAq+Q$6jZ z_D_3EyA;t1KBN|Z)6kT4&n_9v5ulg+vI7{&GCdKpbO#+j$G~9#T8jp(?0yQ=C@x4k z#$P<(^IDcrK0Hk_{{PejpuMemqw`2%0Pi)R3}3r+a8G4!bN49rt=>;Ay`zDhj!b1@7Oh?e2-Sr#Qrwp}+pVa(0qDwj?^&zU1mO1SagzPrt;K8O`S4q4pZ*2xguh)bQfb9ttyKXb6jj_nZKc6 zXZOO6A@dh!!iU1@*l)8hi$6%e%pa`^{gz`H@YObi~&CfQHx%lOVRvomo5)_isy&tk8I zHJLXU?NuEqsTJtgeH&^i+~RaYdh(ZjlSXG?Rz56ZUB7O0VJU*sp0RONQA`?wn2{%XxuE z^yu$mgCBXT$VmOSmD!uU!(Kr8^uI6DOb+>f{aEP~)eF-ji|_2$uX@9s(f?fO(Z=Vl zFrwK6iKKdv5J-w%Hcd=**oaV2edo>j>O*aZ9!Cp@Hg!L_#8s@1ptSed#SwPQvaN!X z7wK6slP`1*6vfLXLnUuj1hw4w2&0K2G=0Xi7?uYp!{CTewhOVAIP*?|VXwQ_fzVYC z(eScZ$-2Rvz`%qD8$X);zCT>~AnnoWz>mUb8c%#i7jFes+H2)lT$OvP_`)K>3zm(A z^N__UR|C|EC7}3B2s658Rc$M&G*=JOH&x2Gp~a3rwDW(PDQNMDos6WiG^G5+vge5vj;UP zuFyWypqejQ4FbLbzjWP4KfRzbWc@_k7|L5C;aR$MOHjTC+aeS$YF^#*I7uOq%W!)> z7cafx@meC4+=gnGSmi#Zq{3U*LGoF72DqWr^!yJZrtkjTWxdcC-uWg9Q6#K9+vzx% zr~HeXS(0r6BtcmPj&;RsgkQC!5O&p_%nv3r-?dSyf!^YuWA+`nqQ88DPEH`1S{`41 z3_PptLNKzbO=0eAg>W*@ajR$_K^f4boa7_inSLFs*`rFzKL>}crVFuVf$N{|*{bsV z71da?V4UFkgHFA*QKVn{lrj{7PFGFBXz+PotVp1YNyEL3=OhAOLmexKLLIEmJ44Lv zAZo6@dHj=f-@D<)jOO-9onn+&x4_Cn)P1-2`b*xa@;s*8b4+Cx$^=ava5P7qkvpg$ zlWBnN9dEPHRJ8mQSUmg^t@_GLw8Jy(#|R%ZryCmElWa0=PbTIr47-pZ+>G4oe&{Zf zT;mR4E$vkH@PF+aoB>tzeZ(j!c_)Vk5fG6sN{ZT_av}1USDCI0Sz&4Apt4ejtc2n6 zP^8zZ zjl{v$J1iqPuaR=Iz^8CDNw)K;a{YyNBY2%b2oR$UboGsf!J3PndUNJ>?xS!AqEEPfFUOoCxCf=o2LcGlE zL3Y~jqOf|e)=xiF6JeT`%g}(0hiC?R393IV`UhK&wBKfPu1y}U`cK`yqpt9ThE&c} z@d@720QZ#7-PD;>*cqU8XD!G{pEq<;;1Qe0R%%pw|2}|*yw-4k?x=6Yu#m!9n?p>% zYT!?4?V8{E)4T}U^+e_`meJs~Ue|4PY6H;_k&??1_z7qQb7M?AM1%tu;Zhl1cq z$;m`u3>QUmvZ=XwOmea|M~HnudJ}1;7--qm_tDUrT7{LxJv%@}AM`Hsd#=f55mVCL z0Ve)az+;Mu2+f8I64v}?U0SSuB6zRNKU)83z$ngw8=GR*TcrJV;<_{m+}YcC7KW8?kvgJ!dDG<6 z0X=K_g|v{9>t&NctK{5r%kexr`KO;#ar#hzP;ij6@JSsV#>7e z+!6T1$t`tsJjZk=%)-e4A5D>$E2%{%l4^wCs{?%s&n-8-N?hZ?L!`VMl$2fal|31| zR}utwIjlLmG}W>6eZ+v>q*19d?(Xg*+^kDAlXU$1#i_`ew)o+>NTo)qkh$IigCoIj zMydkB_*ih`LF_h|9v)DYWueaLTYI#IIOP~Uq_!xwd67>2;F#|936k}7=OEabC>7j6 zRIP4)Q!CUb0WQBFmkB^Ws)lA^w<$WF4oDh?z1P|MmBZxheM1@N(WKv#{7R+JZ2sR) z&zJ5YBwEZ%_)UCXW&bSjD~xQ1iCsof)6lFOecPoRyYf@`CM5c8@3RdYY^#Fb{L;QG)h{yj^*-LWbq6s)ljT}{irl71y}L_!Q{9y! zx+s2wMA8X|`4OBYt8875nH0J9v8!35S7KuTBSmt~5X6R&sTNHbJ(UQtZ_IN#k4g0- zDOB4xOX=7y!a6VZ;^V8hX6Kj|+)T_uPpkGu{9M+!v;?iGiaCv$EWR(S+%9UdC-p9E->Y z8bga2WTnxdR&=`0ZA=T3_wWUHDcf_M=x228x!tOkR@!Pn4f2Xo1FT~piSVW{ zeLA-hg;>5lv}hSz(8nBq3c(>2!^HC&pT<7=dcYopeES8da(X&dgpzxiiy@r_(!)2D z49Ph!!86{ckxjSllGh6HA*tbV4*H8P1PPjL(o7+Usy|Hh&2Nh(29&xFf}xWi<){4F;-3R}O}CBr*cLYzVSak{>S7sL*G{&uaa?)%y$W_d2x z?sp=MxnTaROiY#<4K?Mms1qE+G4eTVNzeg`US@Njq0^j(i{z9}aY9Jr92N2(vjEt3 zq3=~y#-yX8ievm8iVD(RPUAHWx7{dSEhgyG9vZxJvuIR-(GRj$LUvu9Kd51@vBhQ_ z8ynJEbET?dZ4~VnRy1-`CsJMBEqRIZ9rP^#G-)(oyrZ@Xq1WNbVb*iRo9iwpCDwd~ z$0*K`cKigGCI;++Q`OG9oe!xyf1?t;fO#i z(7-zMC9e1rUxsY_h>xvlID;53kpy30Yhkc@^*_GB`c=6}AOL!Q;r5MhV9^t2AoPYs zL=TUjf5!tj(Sz+Qh{4FM(-S0Xy7nzG>|R_j*>t=sis)7AMbGLm!ceoE)SW$2HG=noS-cGJnceN!uw zo?LXr!U`;Ure+fKj&tr@EVnyc)-M@_?GAeNsp(a;F8E7;>YqMrl_Yr~qID~&3_ovS3L0P5#LLW$wwjo0S&>si^^j2cjtkK$WBVU1uG6iLe^?H63yVH)Kr zn+~&_m=v>MBN#ag1*LIPvb?om6z98=+p~7^{Ik2SsLYiXe&|_Z4@tMq70OM9o~Dq~ zg3}@LzM(!+$4$i7_?|8Scs32`7U(?MU$dW!dO-^bkjmZ_+CqikfFiz#4FECHJNhIT5%zsBRNxN^A`Toun7 zT|)f`wF}VudW25TJ2WYWzYO)akYheLuq%Hh*a@G$Ue5{you@F()OK#1084{FnP_~+ zPC|^Qhiwr)&Pa9UwIM)I2?}F|N|Ild9NoJRe_)5r*wiKuTtXdkzqN09zPafWvi}|n z{3+{4raRt8&s+X!?~5-A+w19xh|3$#RHIo=`2D4%%MPvEa_ zkOXqZC$I^VkDU*1+z1*U*ZO62GHPf*qN4Jgnfbo6%SlZHIaF07+@z-hcgXWt zmD41)h8BU}b%bX34py4Sk+{z<@2jIF`W%9|_?&cYcAX=9<~I&$Op11&y>1;h!6pgh zzb(5@8%x7o`WWuGV_KR4^3DJ_E-yg1qWXEHQaG#R>Fuq&bBj~$+b?%T!SjBrRbrn$ zlE2W6`epI?KJ079mu>cZ>?E>!!OpIA&fam&T;hX(;MYE{K8uOeSDA|g%JBLy z-FmI?9eyJo>LfKsJ#shgu7^*+Q8O};8=M5Uj{~;uu+MEcKqWa99NNrUpd1)q{H=^P zwHTTpjjC5;o2g$~y>7~II&@RdTbpnUCc{YcW=}G|ljZ%C-%NLSPmQK+^(~)?sGX8~ z+nlOhXpFhV45rze8 zA{0dFLxa=8WlLxzU;jz7b9KlI%9E#2!KO23PCr&#*2v~0rVRASfN|l*ObSG9*(`T$ z7griii5lN}y(Jr>WsZ7#>|VcbA=lm1``1KJ0e7u+=K=|@_GblFtv#|0Wv(ihHSkX- ztMXkE%ld{^Mi^<0LUQlFJsuoD;9IuHs4+by$&qjV8=ul>7A0n!srf`bcWXFz><(QF zqj)fD5ZhtM_vb}46SNmzTBMkad70|>?nDOv6v79AiZWFLtoO-BFmLvU6bwQ6 z^toGfBCt#;)ElWUNX1;g(q)9SwQmAR?i@6LsOm_d7pVPX#)R_0`?IP&S$-Fi$F6R? zMK*GfXgXsr_#NJNCux+$WrvH@{C8`8$($>FLUJ5+&C|>_sF~lF#3RKC_ylZmiiqFIA zpq6-npIh9^^q}I>Q$~KUVgvuiOQ19cw10lk-6YInHXKz5eCi@P2UVz?{o55(S&w!6 zKRlsy6b0{X+ub3+s7}GgcHU3jx_j!8%-hTlzNT4;$Z-yNMcpO5r#lbED0eDBNm7JKLnTt#P$vOVrVe_XYpNxfKLc*8 z#yj8S2y*3{SX?Qq{EPd%oxpPs2qd+fboI`au`e4B1QhtfrZTWS3?>#m*P^$4xUvzigR-9Z!Bv+ z-=WUq7BEiAzH7HjX<|@|&uEU{dV=H~l#GA=PmX{Ih(9a3eQWlCo0ZU&O~OTe_hh;e zbGOC_9Lmh!IOsU(BFYS9)M!10*fI@b%&Kp0h)I~ZDLCHqT-3xYcNR43ATb8`h(QqZ z=X<2HCFGHuH7G|C&5lG!zw=EXwSp@IGFUF{#od4kY?f21XkR4;o>IMS_{~M3zE($j z*k_xUj%5ExQDrk?R7Ilv{)2H=qO$d#W_d3U1H6Iz%d)%}JpY4`Z9T-Kf@`0aL(>o-}M+becugX_1e z6Mk8~RNB+Llc3t=c_A)%&C&Mi5_f6{-L*b(Tl_ZGO5oCgKC4fvq8eHiDda89PaDuPh>EY5w)Z7LuWQzwom_WB-I?$Mrkq}n`6&~x$|Qx> zU}(Df_d}BqGt7KBPKYRu9_^G&yQVNCS&V4kpclb(0|TilY`4Jrdk3@T~*6wG6@LC0KkRgm~kioogxkQB4^ z_2^q9FMVJGdBo}7di+&fT`q?i8Z5PY`gl~yC;v$6?5~Unh+Ak59VE=nfZobFAlyA5 zAHx3D)(3Q6{6`msH;f=7#9e{4Mu%(>!VCq9h~mF;MrVgvi(7Qc58EM!w>>dAxY zf|e$6OO?Vzo?VA?xbjq81q)=XUHR;PGGMnZjR^R=WN!p*?Tf_6OYVgg>bWXd;(bKK zgy{wH;&xtMc=v|1b>NQ1+neQ??qx>D9Q}RfwP2lUR{ZQ;9yl%_@OrWpD)}#<*xMy@BjX=|9puGtaz4rbCn;*kE{e|Vw)fWCHrG9_#TXW{6h9nn?QBo|!B3wix!Pl%w>S>o z;Rye5W|7fHdq+KeqhATQ>B~6-*!9(oESPrzC8vmeuT_ZmN=+JG=I8u@7@I)kmVHtE7&(>dp#$Q)n{FPP%6 z)cUKD9Y2oh7a^jUxVzd-m^ZMk1E^&~Z9c;&lIV)r zVJp#Q;-IVQ+(+11FfF+9wx=-oO;CUXNMCj9Z5$pd^kLFRph1>zl0CCjv+VUa0@wx* z!#*|W0pP+DI3x|O7l1LPj{(O8q4{dnMbRW!f64vjCk;cq zp})KStK6?gO``tZ&!-t}h7Vk*u?W>ckKli+7;$@w3*fNmZ+u2PDwW6P*2ShqQ#ot; zpugRFrU&W3x)o)39DTL5sB*NbZ+yRCQh`eN%1L-@?Dper!MVVfKcRg27>oJBiC8$G z$V6`b_0PkhYhw4l5F1Bp$KY}lt0N6N%kTXTuhshx(4GS7KNPQfA|l^Z1Lpz%7zkO( zVzy)&AJUVmy#xx^zVWrLN&Zmya^Vnj2u&k$;W{0!5?b1KHSbXs`$?xld>Lt5;Ef@@ zjMRdg*C=0Q!DJ4xH$@&$!5yofaSBoV>xGCb2~I=gb`+ID9;dnKo}X=~#;H~OPxtAm z-@V#2KKoRM%Q~u(GKM{fiCT3*BeX)#^mx$a*%zGNKc%0>N#+h;-cuuFrOLcYcn?go zoV-YG$>{!JV*v4B5v{ap=O{V*AoW$2N}b~%A{I!7s7^UXhgTQPzKYe=x5x_Xx$LdV zvC2aW4`PyOzMCKSctqzY4TIZFSY#xATqn z8H7}OTz)}x5$US6MLyc6eewv&NM4VQ)d%tbeD0%31_{}*?J%9S^C!Ks?M90+m{)(+ zrH6S-0KRH(PGsy2ak{uGEVKF)e=7{9IQ36^d>PH(W(+U@uMY=ai}&@?A6#gt8BTW2 zH!i;q5j5;l&-{#elt6bC_Vvv6d8%zSgk4MOdri20L)hJq4{^k4q+GS0M$=1i_zFP{ zj__^G9lFLa_wpj?y6ie%e3*LiYd+mU+MTZw<7zOEtrLQB2YD2m|B44i`^HX&BfZ5I z71W$|x1~UOe8FUJp%RrKbVqA$Y|`3qNOn*fg*70A6I&-#W0YdHP4SUfxrMm_+~^8Vsq0G+zC(z3%Ky{bb=Fw;e$zOao~XWl@0?Udu30`nfZ zH6%?DdxG8>rv6JUt0X6IwtJiXvW6ma%Xfp30zsEB_Q7Vt=oPRc!3>jT2I76_<#}Z z9NRWOg|DCZof7q^lhn~}4%N?%F2x#V!d?bnUE!=7HdYF!3euyCOX zcDXP#s7+!CR7OzLKpGQZ_4eUZe8H0L5m(|W9epF;CM<5BZNIu^O{l@K*f}QL9&up1 zKI<;`%EyX3|Wa9WtJXmBarR-B{6wdzS>D82aer^@M+vQ z18?980lvi#u&@qF5>f3U1>sk1#gGfcO9-0b|gDT3ff~PF`23(8b~AYJ&-dZGJ%& zv%6nEjwof@Ot#c`Wo=%kO%AZk&zXCfE=iV9-{vGC5`V|+lneJZ+JNK9^Z)J=teH`C zVta*toVHx%`=Os@s=wmlD;0d;RUj!j_%luyT4{6aS04-y{I2v8ZTI1+F z034l|2GNefd_C_w01{)f1?veq43yYDq37Of!jdRBnSE1Pn~tvH~?&Yz<;7d8WhX*g8F3HNfjo|hCTJ|z3N=@9YgjV+S+W4g$jf= zfB(=dtln!n^mty&#>Ww`04j~v187NrKSE&lb77&kFFF5u*XF*g?Mnsy3LsD{+lj|g$_Q5 z=kTO_6S?*^&>N{m{9ANeT>Q^_42w$2@cVOYz0lQZDo{d_VjbSNCLO>P5$B9Tf}HJ!7!cy>cnFCSjPJLAZ5SekPuh8Vg`UMhnkHJr8zX@H18 zB3d#v&tUGsbnZ3e_eA+QHyQ%kw)zOE6=bUuZG_@|82P2W5aX2h2_a#)CK}PU9 zNh!u}?hxLC{IUF!t;53_a0>ny!Mvn%%(kk@IohT0MUq_vw6D7|;pw>xiy{iQoaj1Ch?%n3FUBTN2;E5Cb|k72CW`w+c_^*%*<$1DEmI z>@Jv9$VRG=8p8uw;6bA68&J|v?CtIX8iy=0MzIzF?J=Xb%Kx4K-+ohG-ZD6!Ymc7;Z~Ant|~8j0vE1!gyo^#-TGXw-M*q&!Rjx&|AkKo4*0ecqMS|R>Y&AG>(x1u`Q zgF4^!?{icXQoO_eks-1vLg@Jx34?s~TrF>DW568ulds>Zudg>XU0)FDV6wom`!2lmV#dyiaDpaU6^(?)ToEtmmn|B z3G@60WNHA3d%?fcA92kO_J`;C@=3%zHB{c$sjF}~eDtj}?75-)^=HTb%`wpag<{yC z$j36xjCGNL8Q;D=GyfU=!MGH9+d<9I$gcLZA2WUz-<>D%u68|!?8hLW?SxSuG{_d@ zQ$$Pp+BkWgQ3S+Bh|LzP4js$|pQgP5Uw&buW$a<_y*v_kqYE2Q*SIIn&SvG{5SCm1 za1zvsfo2AcVzcK|czQqowi0UFx`S_?)wFs^}o35JZ-%iPjQ1wSrWmevMc zr&PHg;$-rYNx^yRaZ=GEJeufPdMAO&N)Fiz{&sPNdF96Dp zBBSTkLDKz%5w@IvOo-P)hJ0J#R;U?Y?bo5d!`kbvJFGlf8oAztKJ?IOS(B4Qv zIlaN4KDu}@2lw3mBU=L1?wIo#i@^hA-^tLFquN?xQ9QYJIVPYC{B;Am#uJ)gKI`kk zBV4M|eT&4zZt~$JgQFhz`!wQMAms#1^S-BRFlP{Jg|n?q$uDo7^Z()sU{WuIiV3FY zD4i@vK7s0@YH1W3+Ep$FYVuH*V4~ulEM2p`p*+{?j#YBUhnJVwW}y#4#wa0NY_m|{ zJVI{Wl*#$v__p+>ZMKh?gt!2fJ@9L!FXOU6u9BIdY25ZBEkYR!G!_Z{MI}J->6Bn8 zJ#sm)_e+K6#f#5h18ObI0PLcN+JBpcOc4CE04@}w)MBcHNT-47fU*s8Khip>_NQuk z!&gHPK_o2<2iqg&kK~dkRECeOf^6|##5G+XULk8ocifUVVIF2J0cwUq_2-WI67u)+%nMZax;kn zEA>7T*zW!M*}+9<-xqBdBzCnAZE1*2E2|lnnJarqux9J!bi$O#oROtA2Rid>jveY& zFzO;Nl_k@Pi&|0vz+esEr`mS2yyy&dsv$Y}nT?K4kV z+=u89daGakUEtKo~+`et(8y}|A z>qIZDoJe_|GHf+`r-o~<6Ja?02)A>uMyzOKrx@)-*vY+ewT2Lyc{w-dkKr z@ehQfV_i7}!q&0YZhM{)Jojv(bB5f#^17MaJ zVaCJg0RDEMrV8qe!X^v;i#hNr-O|sGL*FBdgmrjp<5IrL;^VT{<{i`AlkN9UL8qIm z?huspG zH*wr5?}quh{NNOoEQ4KcjrS*%7-5T~?%b&z09+T(#Or$aS|!5WOk;$!8ickT?0m7? zb)eu)THpVZ7ZBgX_jimvUZt`pqo@}hvodF|eUTrByMe@l22%PnmL!+Y;$U?Kip4w< z{|vmB@@pUL(eCn6{drKURQ1m1^<(`>){*C8A$4CZ;Ox$`)I96R-Ov z512CE;%Qc2`x#I3dD8~Pj>oe%PBtFia0b|5g;=#6D1Ct~nXAgDDbWYhd!1RjccCxm zFaPl!UT}YebOv`X_8)F>I=?l{Xs%C6J`74ugi=R40Ukk;`;Lo~uoXgdG5eZVkPWxU z$SD-^W`h3}Lm2p?-`G|K?_FFV&OhpZJkkRT8ThO4|NG_b#>g4z#J?u_|NU0+mW=VA z6u?LN0T!Q%%gU~JKT0!s5%51(3Osqe)`?@+N84`zrGox=!Z4W5vR(EtHP1EI8}_B3 z*0iotXeF;XOBn{WnaDYB5vlX^BynZ=I;J2#vp=4S;7$+J2t)U~+zhT)ritwIrA3(W z9)QWEFgyQKzSs3SPZ0KPB3W8~BK_rJjSpq`2%upvjx+V^MV2y3aBS&y7Ft?m8*cY} zgu6R<9TEQt;4j5a-8}QzVc2T$-u21cqlX_TET02AKwr>Y-0%ym&tPQ^eS-Znhc!6+ zS2;i43;gQ5nM4i{ZHhGejLGSM%wI&$gW~=Fiw%GU4*Z{N0F+FSy>g_BySBsGn{l3; zqi=5m65QqTmetwT^uHi>%c#Q?w4Q=90P3c)!kMfQj*fG+;X7|Nv)tbIpM)^5orp(o zwd3Lww7B#cKY&_ky+OlW@^I!Gk^|cpf4=>F4>cf<^3Tg-1+g-Qi0_19Kc&jQieUjV z2rN=|_$Er+%Xq}daQ0N85oCl8N`Rku@U#_8x0<)l5N!}<{L zhO}^di9rnt?S+08FSSQkuE?h0x3t4GMW6bf&RL5FWf^Sih_{>}R*5&-UD1LE5F15yiA*sr0$>%tk!>#NP_vR|IY!;CKE?7Y$pf} z73e4QhmSbt0D8=O*wyIq{e<&p^}Ax;-CX9A$8T5p9_P>H;5+OrGB9IsP@7+L;R{>O z2yj=^2Z>}%yXgB4 zeA8WY(D8igj-jt|(WeQ7<=uw>f-T?QuTb}sX1G?ux(HvM<9@6^07hTjh{-)cF;GBoXMgxc}CDVB4}Q27#)rC+ICfExNTFU zDzCL<@#sIHfC3Y2D1Zi8(8D^%#&gv4~TF=t+>34p>y7o<^e^^kr>L4N(4-Xn{+i(#i_~B5v?N_gSh6m^xhL# z)kZq+R&Z@@-miUAwZjK`gpbrIL$&~!axCu7m=>Z8G9Ou2na$4{QXh-HUf#jU%FYUY zjBC8o0N?O-_{8tSpMho-_Cxa6v&)bCmY3Q%^d+f?O-ALdt=5G3UHgeN+6c%LpM|Zb zR++C)&A}v{Lp2o$Px@k{s{TNo%tX&v3AoZbsHafW66^hMua#_PJd*qkE4M#AmxCH~ zAgAt$`LIiSAX|2>o?SjvG-h6nIBD#`=6_ETz&DIxthIhjH9)f%w@|;&oJr!% z)w``?{7-BBUOuL{zAbMpTUAxtzQ0dalP1``__2M?JH80`3%o9iAi0{SoVyH7fPeR% z9Y!hL0!4dCy|__Zw=`%{<3CgDS!p^ej3}E*K-ITfN#+IZ6d5%?-_?$hksrmsb9tXg zr}m|)>YIdSPqOZbWr)*T@=vQf3!XTC5=3WhtNxcb=)u^)zHSP#AV1EIeSdp5;PD6B$$e< zI1Ae-J;Cy>c`@$~u0|c3(W$SY52yRx%xxph$F-^*&YgroTeLCQnbXDt>8YfyBQd_l z5ncmAgFcLj%Wqe~6>r2`k^5!Wk_SLcNA-sv=Z?iR=;TA!)^A?>KhF`Gbf>u{=JH(qlpTPCWCl4o_! zYTec_)B@SZ%TSAAUqs_XLX@r?3C5Oeq}MLZSI1FoRPzi>z2ud2|I<$Z+S4r;BT%*X zMC~l+L}SCq9e#0e(SV)j6r``U1;0%M!`;Mi>C|%}l+eZhQyL)pe@O#u8GpWoHBR5r z`9D7F{z?Mck)+`6d+{wI^M3lnX7z*9ZXCa?&(U7hyuVE3pc;bX^~7pg6}#Dd3<0>R zUSS@h2_MO#^MD4Rm)5Si`l(MNeCYD_fuki?S6Y!+fPg>c`}evm@+5}7dFsB86KRDq zbG1eASEVoF!!UtSVt`PM^KRe@yq@|*Oz-rF{q-(f>Bkw;@EpaO0O<+C#Qf@YU?Z$U1*dnfb9i;_q=pa?b3LsUDv05K*l$P!M6rvvkZ1lV;)Bl%Z&r7tri>I(IRdZ+t2+7>VG?lh@{S+iBY=)q_OCm-()rWcxs1Etb#Pp zV+*&kycUZnzTeuN<(o#ZKpXBIJA5FRd0Bq-d!Ko6^7dRn=g@SaL7&>z#lbz=PJ`9k z>WYfPS?+cw*kH-?RlrSS|EMB+^O7Lv_g4}!;jXvPEF6t2?%CcZC3vFMvwSdqF_r3S zZE@{6&bJJa#uKEFfEBw;^_ReN4U&!I^jz!wM4=iAQ8Dc~YN z&`e@~i(y)QD%e6vt2qhv$?NIW&bz36zW z_J`Old3pI`j^vm<`5q=#8zXZT)M240JnKT~1RCrsWjYvX-1uOvbooj%18$hSxug?3 zdm0-W3cnUOhD;+F+0n{BM4|aw>lZ`L+e>X|?jd9)2O^9y0op68?Q65XR6q_itGfpp z)P{0$oLz@ds`~JFA2PVx74$?6UEII|$gjA!KSSROs8G3^_n)}c31svsun$Hnk?HBF z8Bk{NKm-#WDAboL2#-=CI03 zgQ^&=RSHn_J_6R5wq#jLF<@CZW}Bq#`z5jr{pUZ&_jMCaAN~S_()j!wZY&#g15sjo zvMzyvsBeu8j$-`$2`4>gitk)G%YiGsgZ1psnz;g8iQvDpF79$?oUY3)0%Fm)%RZ5< z_XxKma`&p8XWwYYUpw4>&?wRxSiLaFkI^L5Iyin$13sAzvMs;*^~f?)jtp$SB%ijW zg=nDDf<03wTWJ7q<6Xq?##6o847gY+>ZN8-rIf)Y;&%ZnW&SRLgMm^(;M=N7h^@B1a_0qOc9TJE% zb`E5Rb!xe+#`0C)z#n~(qN-{jB@6dLr$B4Ry?5{4Jr`niu(5-Qztg9(bN<6A*p(mq z4@kI&TzV7vg5{$tsN@dLcfh+7u~wwqC@xMvw3Lu->u9PK9B>-hf5rW67x^;=dm8M^ z2IC>1jVD7DyWFqE!NpHr9Xn`;b5mTdxp%1Yb4hzX;WEI+$%oCzg@_RX?K|Rg=VgKHp`*_6X9A(clqC9Wvf@D!<3jJWAI;Tq7 zVoIvEjmC}2UDcGgN1M4>^US<4c6eRo__qv2IgjZ@+P+K^d;fdPKST~-ggO!q&&o{} zT%vwF$UgSpC-|AFz(^@`LWzW0;d?E38RR9lI#nn;_^^DKrY7U*N6Q4#AgBTl(6(mn zz>P>Y_z!t4)HUq=Uyq>|Y*)>80lek+A!6}spFda+4W}H;_r*>BeHA+;i4}PYj<=ua z6R4YROivoT^z)&$_gN)_yIEL#^=~RB3L?Yb48rs3TbZRXuW+c5IDlfp zELB+sdM6?3J7}UXU<=Ls(vjSe^+NFZ5>r{>Yf|Su^61#;Kh^CIagr;)A0C_?kN^6j zlr7Kgvsg$rkPv+KuF}hEo0}dOzWyT1e%#c5K+M-eGJu?ouy=JP8#__H*c^{4+OE@~ zfMnr>NA3)HBJ0lf+A|CrT_VD!bfbe?=CT;fVA*DYSeR1aPf;AM6GpKqWKLscx0@EWT0P_ z=Y|_xLh2_E3f|bj>rm`*v94t__=X!y>1x*2Qd>{uE{XZS$a~A6xVm;-H%@R1 zZoxtl0*yO#aQ6_L#@&NkC%8j!C%9X1ZQR|12KV67bVHx!eZOz5wfFw^I<jzjhW5cjWaV3P0-C2(WZjI)^s z-(jGTl3%YU#r=py2K!kN%Wr<4tU6Hu(`}tGSy;e{Bpdwa^{cplUIqW7!uLO5d`9Tc zxWF!AGm0?SF}U>tkHFw=hZ`$z>?<`7235wj_U1@e+(s#}P@24f$|zO8H2pj3Z~mPi zydvJoi=leNzZ?O$x)?y$uTrOe-3zA7a6L2(q>LOnkWcuIf1Q$Qb)}a=V*T41xG}A^ zgn()5)U{Y1nQGU35^3)X`g+=u2%!5B?K`1j3{A1)n}9_s%&gSGu$rA`_uHanxJGUa zVEc(ZKFm5&AWaY_5c*yT^m_OD|yj;Jp!zA}AT(A7OpZFHS z!TqbcC(6k(70K;v1K91Z(+XAZ~S_zWY6~S*A=h^6n>w zkd3K$p?Plfm??S9Ij}lo%0hGfSj`(wKmyL)boGUXz05whQxn#OZRgnDm!I9^r-C|E@awwmu251p*FE0a(FhEOfW^p}mQLbM2fKg67QVJKR59oORhUdL0Cp5`QW1 zqZ8depC}g(no#(lX%P~l$6O>`AA+SZT9e7F#F8m=WAr$ZlZe&K^K}WPN{HY_=*IO9 zU4`{t0sZ;7<$GjL@blOFOy6XMtdg6zc~Ff{c6#4^fK7)0>O7`~m!iWZ5snj9Ov)2T zH&DT|52@j&hwj!_n*J7l@XIsrA_hvHx;+VoRO*!bICR5ZJ+Gg%u_03E^%#n}MDO`p z!lBJ!d-p&FFK(}J)OSm*_Guu7itd8$m?~!7zQ|nR6F#iM`8C=?#4l02P@7-*|HSQY zTau!YTRIPO^jYA#zBggBN0&e_<5XZ2i6lj7MTyq99%dAukvJ|;2*kME6c4qI9{vB+99fj z>My3F$?WWA$ZNUxM0Ok~qa7YFR8LX$xc)I0@mzW2yN8Nmzvh){`(JkzV$jZ9e`dqs z#7y=s_cxSAWkm`v23!HvRuj+4i@muqKT;0>NkeBrsJMs^5jCe1g=2g)u(x;7n*)V< zRt@bCYgp&=E-3Q{gb@uV=H+%1*9LkaHb%|welrW=N+J-s|)6hOXFidO+?BeJZQ}!hxbRov=k1) z>+?N=&ymOoO?de5fn1|EM`dT#VP6vkzIpkTFArCle3qUq8mhD+y85OQYnh#_?lM2Q zj7n;ixv_)7&Gjq1)5%+;x`s@DQbPtZ`u*we#Iy z-#(fLv=CDxzY8txIa*cv?nuTM*=HBd!Ehb$-(Q^k*L*-X)m9GF9M(S0l0BM1bMb?S zjKMj(=}dekm34X~sy}vhTp8+`PFi!wjqVBnBJJi5`_bHFx}GZ6d0NEWM?>V-%l>Hs zU3>VCkw?cq6yF`w7z4Z7{vaLRZ|{!GVr-0C4nBNpN*Wf9Lx;e=?K$+hyeBTrP zXEgu^=13M62S@>(zEL;_)1Q2LhRXmyO`3UX6~Cpfd{@G4)E{&7j2wCB+KK9q>T1sH zkmk%~l;b2Q82JJyegx=f%idDYzN_st<sC?sNPKW0ipH$L%^BxKIH)~5YmLsB zM7dd+ab>buT5FBqh5T)`^@v-zQMp(ZY4Sg_0B5^fhtQeIpQD?Vi^hcA^f9V)A@q>a z%~Wj#xwCgIO)IZ`PKbpk1AD?#@Fi8=yxqJbo5ZaGF%6{{ql{%8Wa9^{ejcT*zo9+5 zowi!^9sbdSk?I`6uq_C6X(j`$+8Y-ihh_3sI^CoINQHhg1E{O+rnl@kW+TKAL_>!i z?7C!yg--vnb5m*_(?k!mZE0+NrI;)Rl)Yu`v?k$pADS^ z0r(1+^`|9oGVLoi&t|Syb!dFCVr$!oj>-J-v@Q%BHvaH9Nz)oz(lx%Uh19^;yMGqX z@wfn=2*x(G931xEIMzzsaG7ej?q#CqpE-tf^F8@~W0b9=p4 zKO;Sx(BbCtPLw;gXp_2AiuOQOaY|P~es~FY_pO?aGCGvGex2~{bHLO_R8=9 z>b)a^#w+ml6j*LBFyW@HWS*G=aY!DyF`)^dInARsqsQq^HFT#d6hD7f4~&k!;pdlphcmDp zv%@w^+3-@O(R?l)aG1^96ly@+9gN76P(7 z9k)lyHTV6>>-f`yvk>0p<^!BcXTV&>R5EJVp79i`L%X9pW53#f#}eP2sTxS)X4bNov-?thu7j}{znY5 zaTwx0A?z=35ZVQ!k9rc`yg0Sx!18V4c^T96y~-Jp5(UhJnq12iu^yS7*zfKVWxu+y z#8#pB^vgGNwHV3IgU%vXfiX(WtPvx6a^CkG-x&LRdY!X?GeKj<_N`}3piubaJj=xp zt41KRK};&JikmX#mM+8!S2(Se{x0nh?NSlB!$rq zw4RvLU-^+)DLpuYE@RCfoI$~3c7%l6bReD~pha}1OMHLBt6@v2Wo=q! zh~vAUn^(`)QEDQw19s{K97Fp?tbbOo>i-VrN?U4-dL}(d-z#ZSPNk;vU=j+8swo4T z3y8vW{@lYTjl2eed?M{&4&K zg`-mkLYPg6`KpxX=?_I%GO()Bf(||CKFHSlP4%2U1{u+UD&9e@L3iKSjX~$zK#bk7 z(&~sLZaaNs_pt1(cYQK$lV|e8@ly{kHvHB7%#Er-I&hb3IBF7`?@VIT*~~ab0tU&z z)vzMTyt1Srbm6rv&}d^{0~`KLv`+zN|9D`bXt}VYJnL1N`7&E7I#GEdJYO}+U{#*l z?p&k=A7pEUdc=?f!HpnY+36jLF|)TgJ*E4#K*K~=W_^drGCoElYY{Jacki9irkT0E zr&am)5`-YyKE8v6{Zbc!##%*%Mso+AE)Hw06Bw1s@e3GzdI|oN zSR2D@O8Y##6BnHCL6wN@Ooq2~0k&AW?=*zCvV-nC>7JuFWJ!Hhg2@gbD~7MvX+m1u zqDm7@-e$4<%ol}V7rOs>xfaE#^z$`$VC~^9duN7LB5jDYnz!2LY1YoEmGxy;89wDI8)O-5lujUXM*+lfMc&+A)Zq1-zzP^xY?)r%K%0M}V;PWinifvY3q{UPF zTVpgmcR%~g^6x)tVXz{mbERWb0-X0df84(yKbh~yo7OpFxBD`F zj>9WRvG?gvZH%{SG4@98t95x=#8z?{6XqjJewH5xm_Dx9+pFOMj#KNX_N$`VT{z^S zgqiCV_MF_Y+VwGR#IE0A0&m_)2c>Yz(pevt*Oc-!wnsh^r1(T(_U{uy<7 zZ>(0(dSH0Fve@5CE1vqv*+RgB#3-ZG>^qodcmK?gF)SVsv)cZWR{RCYAnY4ETmLwB zr-q8Y#;;q1yqGa2xg@e_3i}mdnZx}O?ibzV$>Y?LeJZU3fCO?VI#~DIPePt3=a!N^r#<4%-CH3?YZUJG1BC=li zx}yDcOf%p33=YemNbf}0vlqSbgt@(tysa_nQ7dW?g0f(JK#HslBm6ZRO-z5~qa{9_ z&LeHAh`KK>Ag|E=Y6jGWM&EnB`-TSVt-ys6sxuan;o(pL9oX4}9>_M5S9*!ai#CUV zS*VZ4r}Sj3Z>#4VO)mgkEdJ0DXGJ0zMgHy{J#Fs!BO@atx0J!K1Bs&C{C$0kcXxY* z$N|Bv^v{O@LHADml6KZ%FiX47jT`a|1@|v%eqL|M{ZVwx?J*hQMW{TT&)cyZr6ahm zn9XgJ^Y8pb2BM*hmwGesQj@#lmV1>2&|9JRW4G#07J4POa6lmufXNNm&)0+qbpgX$ zEAIQx%q9)beR|{D<%hB1s8hYm#Jn&@m-32^_Ayu5qq5AMXCns^(F&Zy2d?_l>obSu zJgHF$8T3e5j3XufPZLHWl}C8I7cgoaZr61ttkbi_vOM>}S}SR}y>V38Hja4LF{JBmG>YMKl^UTi_`HP{5UtIPD{Uty zI{~sPc0@3V)ZXK5teLZ6s6F8>b0why5Wvx(=9ex7j6}v(9Hy3d{?)KfIw2N}w}; zhUx6jOuzG+!kDX_*FV5R^;qj~lAN18Ulp{GA|4urhXtx)s7qudV*hFszPNB=;q=^l zS59JzoOmU?cxV)^h^N)i)pbHP3cu6)!~psPl)fU01^Cb3Sao}z*Ru&)QD-VdypbP! zQIJPzo!J_fRg!}PW&#aCt2-xbeQ+bFa=U|kPotciv?Gjjm*35fL|^%Kh83n}*5(c# z0P^kv)^p~_kvqb&4Mx)<{FQrCC?@Cp(}IJR-_MhZ?FDLJaV-jmb5TV9&V zt=|IfoI=cQj@qB6q15McnKcek{8{4aC{Lh%l{`9*<5&8j+%G?4*igA;V)!z>s5H}#gDA0grp6JgN3N~NUgeI>8&(hy00o0~%no0#{ z{i4MMH9S-ryiVbBjXpV8BV?oxJeL#AH(#(1o$KuO? z(c~iu?nd)ZzEU3TKx0X_#9LC%Kw`f4TM}xAkk`iGkKJtx35fSc74+EHm3u$fha~DZ ze-;xF*|}HK?z8t|*nT{j1*7{+Sp>!Uv7)q*wg;X+kMeU`ls7w;V_5J(5LKl-i;vg! zq0WQZ34H6QKZXB55iD_jBV^v%Uj9VQJQd>qP$odRq&Q#7Mf?$jY~zd{&R5*`)zHq84y1?DqvU=mjFcy+YQLEz_Gl2UP-M`lSBjwTkp3W1_gU* zLjr;_*f{K$OK+58ue&d!t&h5_!s9V?vkF(rr)~E6-h%iS$Qqq$OOd|1%Lh47Q00!f zci@=)Z+TG)Cyav)4x5*kk+=3@g9FP834qWfVU5eK{i7b`mjVs-fml1fHoCoZuMYljhR1uJF2Hr zxka0&;q3yyVFfs?eY|`9J{DP1k1v76)0(sA0FHmS<1zh~P{OI_mpAt6b9?fH6Z$E5 z8tzd;S{1&PS%<6?cD`UTpS5FImMgbkbL3?f+ub$LD!@I0jTxP1Q!Xw3!~zjek-hx_ z#oJ2Ue$mYRT*ao{wKQ|yZ`*lU~K?cuFG5vhbuj&3OE&y~usmWBR={@NM>EL(FJrHomOx+&%*OPn#16`hA! z-id9Xy!&gJe!ul2nc}1zTSZKcm*Z`lJ-!n!I=c<4ftY)J5+gZM-II!ln%*n0d3g7b z3d0@@&Aow$;7)<|Z?rilPAD5*Fu}%5@0UELOUor^W1p3azhIei_B=&)3O5nfknIi5 z4Oz2HjWGyr5mt4CC7(^XBRhp*;Nh;kUiIMx(oVE4r*%co-)DE41B#z9*;L&1xs$!k z-aL&?{oXB(P#e~BkE8o}a~>r9;dVG4zy&j~G7+2Y0yqAy4o%W{CwzeKOC;ZIyiLw^ z3l4Cx?==WX_VVQ*IzCIsH(Y)G+C^kf1Wv)mT!@n|6?({s$TPLPgg?z z*gx-a>C*8h8jh~ace;eQR~L_w55w}Jcm>-wp{UrHQ2u6pDBjuX0%w$6X~IeE7^>yz zR|pof;UDI`x+3d4C{X>$thX*uerWQv?m3_BUCJ>{N4;eYOEmG6t3>}w<);AAxMnV&bs>^H?Y33;83XBzDvLjGrG zJ-2q$^?ol~xG56TYW?F(?DEZho?2_w6$tjR{@(gRyTHbTH+6IT-_t|#0OYt`_!7HT$e(%t)p4@g=?$X+D{lLTf}KIitpZWK2m4K zpDH+YeuL_~*L>H!h!PO2-%|oTc2`b~QmPqTA2p1WyMJNHWa89+MWZStZU7Fnani#E-kUg zu3nP{WF)nCShX3*_$>hyl`mzw1a`qn)y(0Xn{^xu@Tu<+qm(x*RIdIX2-Hcd)JNn|>h7?S&0?gU4;BiUY#m zzF$g~UQl+e=Aism=DfNcc;MS`Y$N`O)U8Gko72$9V7W|k^Z_8U)0U=Tp6Gqs+k?@+n{B zVQv|ycYXVS?ajro5QiBZyAAod1L*&lWjx6Lfa(_&EQeJa~>G48^K092m1R<^99D;SViXY$)@K1(6DfX7giU%6x{9Ul};}#_fozz z#c)2SJ=^4V`gE^bfV^>xbS@7?jZYb*@okPs%wE+m4om1CaMgnPFi`vukN{GFeIn$_ISqy4XBLgTWDt*7|%;S8BdKW(t=b0J>h$ zQG0T+fln4+$tEhb9R*{$d3xfz(WLC+KSq95?W6G&DgQUT{S4l2I)1Zh{7iX`fp_y9 z{R^<>T^uCBAVG#m8_PsHoFT_1j=u03`}7taRzPgHVbu4$PwxyuY$)2cdDQ8YzL1{$ z(}g=|R1DAg4Kbj8%v}9q#ICuBJlLTi>Zjk{b+2G=W|0ftrtGw0*&Y2f=vCI~R4$Mb zFccX=&1FjKjTzwICKVrrs7cRcwD(D*gOqM1N_xHF0w$t7xee(hqIubivbBalb^Kd<~*pH64SQRq4gKG zF`wN6gk$eNXtPspB$Wtw@Ot`imX@;f9&#l=cL>>>b~YRUFhaKz@MFEuD$2QosRSgV zYYbR(w!6Q_p`y7X0-eMT)rWq*`PK1dw`o^wtv>3!pXolhg*x4=iG2XB{^sH?t(kB+ zx!HhI7XOyj9n_I%`FxSc{C@}ZyQlJQB$4|$#nw8eehjVQO3g$!!%aU2Ne2Fs}4F{SZ3Ep4ZN8Jt5NE7aR6J;QQ?Cuu5JDPoi+FrZisx?8t1B5 zjlW8BX~en7bvo;M%FiQU^0-U;kBN6$ied?eOZUJ!n))jRo|)C&iWINT)|esnRiQ?) zXB2O&ya6lRFX=f-So|DZ$(wR<**If#{NdVKJ`RSOGgjoyRNpeBbyu8SjP9C9bpBMu zA&pm*p!w%>?c^9ANKZRz)INZK>24_8hVh#)eSHOFhb@r+o zDQ*8t{HWD#oN(;H4g}+Z&;ku|jhXu>!xFmg{9bmRW;K8`IDE* z!`})!<9ovG*VLUTTw-0e36s1fdZ#Vo{G(QdJ*5lkEJ~o`Z@6H__U3no0~Q9ro`H$l zMWI+?q!EKM!2Dgx+l)jNV$EgHGBgCcn63^ z&lE{F3v}t(n4edZa?&LLOhGn(nGgTtV%|(Mwv$qQ6KPX~l>T6u^{sHch`h({wG`v{ z;@EvQ{Dv$2XXk))m&vKj-#x;9FWqMeg05vL=}BDc3x+oIpX8vYDfL70HUU5Qu7*T- zYKHH7D8vEZ&krfr+WHzz^fF&;KOrinizIrOg+(Cwt-1{>N5&|OO7&C&Ssc*@@L{vz1V^hM?pKX#0G+S(3) z^s;Q3fCeYp+&4BwC~NhU-@O=8D2D1B%g*1v;GX?KiWChz?7BtHp5u}M&->r~NksmS zLps`VZFm~LP@%?bCW^wt#W9bSCQykZ9%8cazMV%=dc-^!U*bP#hf*A&prT6G0SWuA8VD`Sw1 zXKI>}vD&S)BddiIE?~Cov`*J-IjblaH^y(;W`KQ0%F_3N$He$7CeKO$&RZo}Bp*oF zVvdqC*(!4)yU%KcmwbAAXR0V~o(4sxzn)%=tyOJSu5ZY~_#4p^aQ_q0uW40!lT8$^ zdD||1a1Tr%q*9D2W2%dpj91#DQu_!t`L{s;5#rUqfZmZYX4#!vw5^D^km6M^=trD) z&!Xh~{W?^9vEV0bvBXk^w)CwroA>nm&f4^pag^F`#_YV5Fe_c<9?mN-(_sgFc^sgjl zop!GubB<9^!>eA%5N`HXCQx`w%&Q(a(yAZ8Y2z;*J~+THxURP5DjFa}4HKF<8%xc9e^1 z-|awiXvST92!}yfr&$_zgN$u&RUaO&kSBNX%D9k_ENQPFjfk+msQ9oKr=9^wQ;RSx zVFK7Q{#NM27HHw1;^k&ZB!0<5D` z=O}tKgYBM#VQMNaDEHq1{L}s&_;VyvSxtdUpK`YfG`@x6dby8M5ro&BR~N&#NT@<* zDuyrT-U#6*XM*zXE!VkObNf(CPQj-)RVv?KLDco{iImJhM{re)y`zdw$e=Lz@2#G8 zp!RPw9n__6czY&`%~HhoYKY;^Ehz@vi+gg#!(Cy##rE0Wr>+(s6bUB1k;uSmsQI4e zU!}sV)Y^59)X!gk7llxDI)7nUS;qlDmbFp}bea>oMKd?ewlZsIkAq9kNeR#XXV8v$sn40xjV!Lxn92`zvD{$BFWu((nz!SwG#Zu zS+dgRnl9xP`ak&oO3CzUG~vdQ<_whl3-CPK7^M{Vcw}|(qBOvZk28fskSs01qtg3I zC9ph_Mzsd6F0A$kB3@Wsp#cm21rmXM_J9Rv{ZGh0RrkMu{9!s+bZ;l{Vda7Td%vc( z6kZ>2y0c{4_>5NPyLKdFHof4qFa*XTj{=16MW4FKB1-@?mI&rP76BZ!jC2{IHaD}& zuon^mA3$Fj6x~FaEN7nB7B}y*X)}y=R_qekghgrAH%mI~mz*k6clY%T<1>={EH>sC z8hfwdBc-T_qFSApv7TaJ`oh8jIXG9Zbk>0iNvjj-p7pCYts-@M|3v;5Hy`U~q$C#7 z4VN+GB}UFtfO@Kb!Tqt4k90!#V#Yo`CbuPFfZRd=lhE5#glsSsBYxFQTlP6))=JyL zO~Es|S_moPJ@#E~E4ZlhwCrEP{o3=)^P5$6xXbS+qkh^dsnttcSgy9I`szbCp-mZC z)GstOeHRVl{m*vtD_*YDerp9|?C9+qt#dV0HolFNR-j{r3GL)xnB=s(vq1M>6!?46 z?bdY_b1BulR_-IU!b6pPHbGlNp8#^Yy^P2!ef@{A=p}ghtU7RHh>zym|TK#jn8F;uDh_i zQKpO%8)$*euu?%dlwUaf5c-cp_k1gA8Q)7;`k@_!Ij08iZWlS ztc!Ns>=0x#3o(l1-P4?(Gfsf$+QxBaPK7n^K<787GuguMaup!v89Gfzo8i5tLYys_ z8u1=*_k0i>v7tSpH^owu(`@8vT{g@zJ=IlMN6{Jx4j#!n@0JevB9}T(IbANhsA#wO2_|3cd-;MY)jgd>9MO{N zB(A!rU=+℞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%0Am>#Aj_k{hfn%<+zR@3i`5Cl7s4mK` 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


    jK$o|(p!qm4o5k9@Q>`gHpUABe$L{{zb zbKE?8gSE4ALBYW)S%^Cy{-MFi`NZ!)QY*u&c}?`I|8*xx|G5)C>3)~OI(Fo}oDzx>FT91JFJ^m zAUEs~?B}x==(OjQA24YGt1<{aY-S4xZe5BLao{;minP0js;Ll4V`dLA6{*K@eO3D| zLj>m*tlJ#bnKI7*!=h zL&opjfDFp2M}Y*Bo~HxE(|!7$_EEUWhVn+l$&U8TQi1`nFYMH6Pq}Xm?f7;hn0x9J zoaOZn;$9jKMW|HmVY7gdWuN4YGjb?i^KNUhn%@pazP1{x|E%4wDXs}|@;O;5t5bvV zoZX#9rLvJY4m+Rir7K2$-de2olMZ`Ba|~J_sNg>g4;yp$uE2?5`YOwrUcz0_J)F_L z&Q?)yy2r5}l#%hePqCRjxRV#u%q4?KlaQ@24S+P}@EFJDx%cZg3>cIBQ=}B@g4rAg zb5w*Kj5I0l6Dz;oCrYZE62?=KE??MaFU%>SQNtsI3k&qeQ9$w!BWQOzu^CehW=rOx%#3CUT4ffd9UlPH%h^5w3lcAKo-=%I27jryjb?q(BZ{B8 zTLKyO`L~F7pCdQ>prGWJF7Ugy_a+$=E?Tp(b*XNBm(hTfLlYCRNi3Q`HCQQak@9z* zbisCV>t$*_hlNg#?a}oa@`Cdm9(xq;#Qe!`5{aeiM3wO4cT!p&3#Rl~M zGfid9Fw9fjFkijwYQx2?0x&y1aW3{4i9&X)kT@Serr)*pTmSVN8GSR<{NO*QH$VD1 zlSZ+NC2C!+%I7way}h#;f*V`HMne7GTd$=tpXTNNCZ?1yy_|9Xc@~#|Z>bdVSR3ea zb?u7$en_UOWARtE(_2&ZHi2xW{YBlF-+H>rsuGwqS|jk+7XTU1Le1sm?%?338XmDr zNPV~dQ-)e6clec2;B3F_+ zrPBzWE$sQ;xokm^4YYr{FKpaZL}W75%ICvc&T}k(BsS( zLgu1xpG`1NkV?ZRqrb9|eN!9T6QP+%np&jqBg3*;_VL2g=8lSYda*27<@JQ1s3)@X zhE6u*F}IAFYCsXiFJs5MNx_DdMo#%quXI&!+snlFmO-~!Wl+NSG$i-d_;4ms-@Qow zWSF2?=e@tQ01_!OSZ1rN8X+vlepI12pODMOZ|&Jv^VUC(+xG zQLB-OPg=h5*UcB2dl{}x%;7&8cNR4>px^w3m3!Nkb3E{Q_fhhL%SV`P2Le(FuT3$Z z@)@guC9em7^lY20mQ?}5CcS;2!Fq(SPx2Nf+6y)gobZRf8RhdAwlU=yf=q%Uv!5sL z62{`rDEjaSy%b9(Q}@_#$*(RMf{ob&38eSc1sOMuY_h8ISpa2s#`_av`Z#^HJKDr! zUMifI>cPXtWRf3>B-eEIDxNg=LzJ<6e$WOIM6(|_XwH+c#f?FosT9L7zKXOGO>N@_ zBe6~qK4TBoD*f3SrsvvnQu?XscGjmBJrn*xdmwVeRq4eY+tClgHAO473!ljh7*w@A zC_jzaIBF$;cS@}_>nF6^euQ16JYs%lCcdn<2= zfo$oAdX_%c9=a~#s&u{|r;!@ zZdqGK7dZNsO(d;0CzVTnKf7QZ#P?=44!vSydaaUCBWLz+9eKr~V5ZPGtk zfPnqLWx_U`2T&Z&~D^8lzus;&xdY z+$~PO_sE{93U6_6a^U~O3A+EKo$N#Zrkx&%-yes8&vAldVI2q3tmb!)h$VesENw%J zh4syP0bgO@*sWas;MT#*m}#sHKMnMqg_iZpY$E_V^W9ei&XCtPIMgH*)%kgL245`Nx3Dv!CV_!gz^^#B7| z3D*t}jFNqI4;rN(&(2ahDtu>GT)B@Q8XpDBe|#>AYfKb}`*!g^4YD;%tig;%jM7oB zriIbA?FYBzNztJBNEGpgI)uaL+GV-JRXR~&WgUcOU@U`pptQTnVxrJT{2UW9ARNuT zl&fFjLFyaWu5St{`Cf)xBn&T+d)iOMhQ;qyg=|a_Q%tITM83rX<5Pn{etU%u_fJ-B zda>zez$|+E-t&MaT4?8mxb2cFDq5S?3FzN$$1=}t1L&j_7kA39MKQ-Kw2MOZO+wWU zPQci5^wb*uPU=5;C$v$4W6MFWnjCx0o9pW$1e#HK39s=vlh;oQ!gH`#5ozl8P>`a; znflL*%b@rW(W4k0&i$TC)f=zo=kTrS;Pc?vy8Pd-kmya73Mh_SUKEbRHs;Piuo)m}U2?v+AJL zVnh7})@^%4h?gcBA`>Zb-3Ey$z-}2=f?wOwQmZ(2IH9)?36jh~L+ zP)seUmToN9FV0Y1r}J6aBaDUK&5d5PK3_DfaxcAozJ8*Qa1@@}UXD`KSSs7>EZP{+ za&C?Z*kmNT@~RM(MC~Z!Pb?qbs^XTlIaOv0yY(CcLpmmho^DA(B91tTq~(K$?55L+ zqT_SvLc%kQ{&b(25audrRm`{CmLY?OWQy>QN1I6b-3Pg8jIBj#5cEE}ERLstQIxnO z;8!svyCB0u(9vVmzXnGhE?!X#vaG`1NE}`pjZBtXIZ7P8Kb`jTsbtZBC3`?BDH|=! zFN(!v?Vi?9eravuj?z8Y%2lcxcR0zZPwl4Lx>aj*78T_TpX7t(tNe-Jmlh0tqkb+1 zUF!}RVhnwdVl8ww%2}6Ict@90AyMbg8%5>RY>@mku`%0JA(LIP{3O$WH~5m9a&n5f zPilUnr#>w*(KnZRa`01nq~%})mx&&!b$rbdm#{s5>)`L&$hwibavb}yzjdC=N~v%T zSpT_C9l8sQT~@Nv?`?meLN17Jq8?c$7C~OC{k@wt>|jLZxo>U{7F8Kh|9uJ0c!7Hl zDxM(R2h<@PJ^NlJR>4ukDNbiYw4{rPcikXQ{Afcz% zgdOmYCF42lP-7+|PK1dM8%N0I_a|jVnj6!)lJOw^89!Qlr}^G{c|q`K0(IQQh@urf z(PbJ&D2Ihakv^T}CmY8mKUK@ASG?mOaVf>|5d>c0M%lOc4WW(vA(EMHe|XUsbKYJu zU&C-4nwz#qM~r=&*h0DZL`Ol*BfGHi>mgViKzr0f6BvhAuCkb_?Y9{^3Ylqz91JDn zsq=#*$i|8#8;-=I?n;FWM_K&u&Y~t~X27xf7 zuy*qmz|r6|{v%TEs@*y4{NhIS5(ISnXxr&;+d1Vtaiz6*?k)b|W9D45Gr-8RXD3&h z=`pT#TK((>{F7ml;Aa9@r-VDQW zkgbIAmR2q9H&0P^r@esZTzBz&Wl@YFmZh(x8?8j|SQp#arBUNAZBf=Qs%6XZ)e`F3 z9j6COKToW?po?lCj6e(_QXE6KLLte)_Z`z45@-TJA)GPMS)~M5SE|ezm4ALW@)B^t zbAEp>%nOOhp2_09CJ6IhU@w9%Tv31gk`N!TdDDvT%k6d7eVS|D`*DDN?;5)4Nif)i+MR?sXXP03}EdU-^ty1f1rs@uT7ex!Bwc?yp-eLa>xEwnusE0jUO+8G zh>Nn+H|rzNy5Eyr)ZeB53p(GdUToeU;+avFI{Upy&G;ZX=?(lAA}!RqjLNyr^-D5m z+X4=*YXuA3R`;iztw=X;d)Zp(1jcA=yB;YXTJj-5MEn6Bmf7vq9hwgyl+F@=3=Y4iSL0S{IFo zSZEn``eC@Uow4Q{XR`v@us)@P-iPFkd`NuB=yWP87K2(~TPyR!u1`8Bm8rW_SHQvW zqlv)-g-k@9jMeR(Hm`pVR5Wi|h}WZLZzTjpJW>kQfA!K#O--jPrOvEGLE1WA@H~CE zyzL=QL7^Noi-%8%#+nUa-y7MK5?EK?L@l%U=I2u=-s^@`&|J1VHoU*VJEX^tg3-?N zkk3xVci1trAo2<~CISoQ=`_@U6*03(K;zzJ?PoR`9HVKLE(4+G*c6MZ9G7>Kx&lnNt%+||Fv(<%d}(}0caIcYX_dz8;B zSO;}Z!G$PR)zRp5qVX&5WMz*X-{3+{W}QDPtRwekNrxQycUWHpxOSGC`U!E40@dTF z?gu27GjsXYlS=g-(E6L%cCpRfN~aYyukk9UomS}mrDrxyttV~V?}Soyt)dbIJAK5x zMnm{s9B)$pNOcq?;Je3G>Fd%nR3FO0F-*~BI*`gjaP?t9e z207|IDh$E@Y5dg?uxYQ2(>F00v$6L|xxNUrx*@`sW#0BBPdD9JFXv8uG3XFxS*e`e zW^E{og_Y6nJ!);47$`_DSH=H`DEjlaCv@z2)$`ktIEnzU!Ui^oPgc@)KKxCi*%Bzi zqg%T(5)q(x5K{Nh{>WnsW4rKUDZUl?eXub!@eQsNPpN#Sq=pOW6}S=gTi$Y{(HOzC8Oy-6q? zC+k-NcG^4)aYYVUZR4#^^Yq92`jjccBMZA<$bq< zJ%BAWP)zy0o;dvmV$`z7fd(JxSY=0O0i9a>r1dhJd;j6#X;t?9+o7d5o1l*M%*MZ! zDG=|L@qWRj5Sj*Rh!o3iCcX?$xljZGKa21QiWZN!EN)?0q-SWLdwmh#L5oc(9ze8u zWOu1)yWc+J!Fp%cy1BW8ijBax+V$~O!cFvUW;^AHqcgf35^eT-<=w84X9BZaSyL97 z{KD*8n(^(HXWiq)K(X2gN@C#(=20!`(V66F?&0KV5d3!CIC(OuZMyoMd5Jf;`=a~7 zCn9%RL!(~jWqHHH;ks`Tc1R=avDQ^LBqqxqb+*99Ka?j~Y+TrIuwkW2xL>zu6kLAk ztGt_fP)K}#BXA)8|t{(fE zRwa^gsqP%K>D^AZDTF~2M6-&yIQO}mM>T_e}5h>4_`Vj_S%7n*+ zCTGa`+w;i#tze}LaY$Z#f!KZq?pBC-p|-)4nBjd5k~Kj68D0k|X9&9wBxxlLS!Q`k zzFQF1vB&si=)8bIh@HljJ*UOsEc#9l>01abRmw*6DpaTlOX=X_?5FB$tCo+!`)#ke ztQ?jyrrj>;By`@&CCmAx{7ah5CQ=$v)f|}E?3R>w$&J0^+B9}++^*PMd}rR{vn}ge z?Qts>f6NKfbLL#URolB<+r%9!KA3_vP;=;Pe+h2eM*xDSTahURP?PPSom~oZRdKs^XvM zoq^w`c-n+bns5Cfqn;}*^K>kao{P|etm=!4L@CaE%!>Q%PKeJ~wn*(fhSfy@GVSPZ zy0Ym-kAvAs+UD%~(|w8h0zF^BR`B!Mxwi_~h;~JLvj7fK=#kb{M^?+D;a`&6 z#$Sr!#VVVZ_7+`nXuT87WA}KE*+imo1fQ; zy7ZXXW}-nQQiw*Zl6Ra~ap-UnlqqUJuP%RfZNKQc)O|_11-ZsA+9XyKszhqoO8}ak z+kGDk@H{UZktT_=;pmDw2JXl$h9`BWScAEX6-Nin*U#1@pkn2{-$YB8Jw4%*kUXW$ z_*Mj#f&Xehbzc@7_E}o16)|Kr#V4tZ{r0)mV*5zBS{!<^*(cl`H3ZK}_t$Y1hj)9? zx&s=OPdkf=1*)eXj=C6+|8SiDo0lMUZyeT&=VFYn*o9LPs<#8z>}PC7sWnv`jU2S9 z<~8^oQT1zCfw0(zjx^+p%{fHaAVguY`Kg8Wfa^Q&bNX$I8lv7=EBzUb=&s&kEEi#k z$&!%mr|AWmoADhn|44`IWqY*?+(&tJ?l`9oA4M*a;_DU|E zaOkQ4axJQ3K93)?X8c=cajz7W^?nmS!MRqbXi2R!SoAjS>TzpvEkBY-?G{egYo*mK zb2FVK514})doB)vLSvG}YW(3x$fxLVJnDr9EU4<$albL19}En%raRuC_^lP2m4BX1 zR(V1n`1%%{0gxQfj5^JI&QlsS?j!NZ5#xpwZS25iTrTmN}2eK1#`6v9UdAAE~sMK@F%%iY$cgK z^(!hU9+s_$=E86c6{-o|r37N*!uR(Z%-;gGMWx!2UM0gLNomd8NB@e6u53ba@U0U< z)J|+@y=aBKyJj?>nD~5eJLZ7W zvTQULxA`dyt(V=WZ3UUW5pSU{v)+)3o1O-bI9G+chfyo(6J$GgC}8pwa_Fb*SiA*k zfy4Xgg1{|z45Pwo%~cK6Ig)0o5K%5vC^F77Gjsc#8JXG^40$`SDS>lW_KcSgy1pjn zPz2Q|Ia+P&{_;9v{Pg(3b!*8$qQJ{_Iv7&ELMHX85HMif{Fz*)S^vWO`Fx2Ez`DL3 zq;pU>%_ig!rIiMg_pE(m*?KGYkTj4b4vP|6uV|_u-+HNG**%&?+^TQ)Yf-o+?gO2zg_9cmlb4l2UrRprI9GU<&WdXoS>^*`ZP+cm|`);mvfL-0nsy9%a~J zhl?kZYf4zyt*=#L z4{ovR&A7nvYc?Nu5uN?&@Mm+6UC{1Gi0l}uB_kIY`1x~HG%oTncH*p&f&EuX}vz6}F7z!xBv+gd7aX*oE7HsNo8Jge?X+$p;-0E#eYn6; z(84f3(>}n{ZRONtd2ASMr*t2mr-M*Za=2)1(p%xCNv+`3j?d#xRy)|Qh}|DqLadE@ zarx8BiQzSkF|YlwS7K*7x4E{oZRP1hj9!Ov9@A~(jZ-4fNLZ(L|A>VU9QGg=1u+er zP0aIYWTd_=SS`wMNVy!J6%o|D^67 zockVkya?wayd)l!E&lNj!=?xeme}<^Hh>aND7@{^mpUXmc4tyE*~~{N`erDghw%Ei zQcBUEWVNdSQF9rK@pvnrOHSix)R@hua+*yoHGGa?U^S!5XZ zi8J;rNf$e2cqo04V8dc8DzI}N02!f=v%2x-Oz0hO^UcEV`^Cq@D zP~dncY9(JBgY2rVpg%Y>QtQC=D=^MkiXf2op18X}S{$6C5_sGl;vCd2^7|+Ug@=3r zVa27t`ArgjafJ{_6Cw%SH&0Hx+J^VWP`dnBH_96MO@DNeZ~lL`UEVjnP6J6{qfP3ZUmii0Fl4pi_@J({{x5Xl4Tkd}{)Rrk-q-*g$@K z@$gt8+`zDRSV%I{Sg~bxwp4t{L}~=;m3(3@VH1nz7jk2QCSSvghJ{bR#b<2KKaQ&vo=2A=xPje1QYq#U+qX`Gq6U}?Pw z-*vUXk&5@MBUA3gqE<3#L8o2xZK&zyu-+@Hy^4QcBN)u=Sc^iyU4}LC6n6i)0q`!L zLajIhZ2W^!xLtFh>Gn2cb2ax8!B`TZbVpS9EvRhc5RWSTV`fST+;p5QpKpeF5i)gk zcJVeqhThc!BUH-+8h>6$O9!e>xGftHJboFH63z~TL|O8_!vrT--aT%x+@<}wbMq38 ze-`(xApT4h1rDXer0&*Gl&l`BgJ*@I_GasXlIQQnNPR#)eI|FBirp>=Qo2oym&=FY z^E=Ac0#BW#`$J{jN`C9Ry}!~5g#%$ZDu1jS<{83o%k(Pf?ayg}Ugflrh0M~C2&S@g zw=~xu{Q?S%eSuG(y_U#qCP;#bjemHC$HCq}a}igEOzaJmKaaohsyws#yE8QrKS(*F zMjH?6`mqz}x>+#RkyR-_h?Qa+;WkO&N@*5A|Bbe9ff0}Ur~9E3Pj6JX<-L%o;!mwU zeB(!o0PVW?^TUxP6;9;I$b8VP#>aq8NdSv9t8(+BFN4+ z3}gXjwsQoszzkp(^@;6QV57=#J-er4R%JdG&5u8>T7AU}t&`PkXAWaaqtB8h*k!$b zsyE;{r5~1RK`X1NR@)o8LAgIK3|=zFP~b`=zDdXy^-+g9kXJLJXBa>$DgsDXPJB`G z?KH^G{(N*E6Wq-e;TKx(UoC3F?Y5(2l?qL(B&Z3z#W>8&c%J?8JY6k2a$M70iPS2> zVcsgfNEw|-o6({9wF|~3M-cito4KTznAj7+?glR&epF>GiU6t|KfPFSm(j*rGlgxH zUy;}LvK$sWJ^=RQ%4JILn$Eoq@i}Qazf~p{(lUj{dMvU6*~9igNgfziBraIJ&Tb0^(@A@f^AQLU$@^v z<}RG^m}}Sdm_CGa_;!Fj_R7Y8!Mtwg>R1WI39VM!*k3fBE6Y3I^uElJ*hOU5Ir%-b z%N&jwB!Tb3Js=9Dg&O%ML~74ytk_(V^Nxb37xxlIBQRSztBb^2WCgd3?%d#e?7YL2 zLBjDmdlBDNJ|&w=^3c6Hj>=s5-6xh34EOpf>4kF|sg8gd_nvdfeX#q)jD*j5nU7Ic|62= zZkj3aE)vl_ycnn6n;R9fzRjg%?Tw99#Mh2Ib6dM^C4!Bor1dE8y*<~W;2}(xuX9Ho zG>9m3PVa~MHVgW9)Fw!$C2TW5#Mv0@2JkaS4H|FbBIkNeMJzjsFe#r>zNOw5cbNR8 zUE>QkTPxa&)ARh^e_BO0I#{cDKZc*=r*FN9+0B8Xcy!8M{pgCna}Rxn^T0K_4Q8i* z)wq3w>d+?P#d<3itpEMv4qwzdtr8yo;uanghB{$3ZCG19E{ZU`ds4%Oo^n;X9liyQf#*1nko~|J@bNg zqYLw`5_#In+9y~w6ycedQP+Lxbm`@xTNYcj1LTt=JzD^s_M7>;}ONp>2ogE1$2)g*g{cq zO>HQge1j?!E8R6212y^U*Y69s1tFiP#_ynsjOqfQoxp0T%bKKwgm+`xw)pgK(`=-f zv%aujX^t4YqXnHR&MXDqoC9QFr2QLY);ATkY08O56FCDkwWW5wuk+UAGFv`?O6ddF zvF<_(AUMWvI;`6}FajG5>SFx|t7qSAl>X5%>ldpUfSZ)p6L!80#rTp~B|GNTIB>Mc zKC4u}S|YEG>TmU!x8~oQ>YIEO!Ol;UP^2UNfr?j1Z`v)aS!I;`sa>Lv$+v6gu8tTr zPNU{hczeDd>WMyl5hBfmkFMTJLONCEj5}oG;Lh8%dvkn*gy>EHeD`of-|o^I94s*Y(xtg+Mp~>}1WpSPl?WiJZK*+U`@SVV zZ;-!|V>q^V8J-{1-0!pyF7mNh+BV@XLBhGwl<~D67^@TlM@{>cxO}eKd$%TwjR@nv zGUIv4+TVBpBf-0cyRSlOeK+(odCk;6o!g9t8P`gNh|!ME{xTvl&w#Rc^HT@yL6IMq zZwl6nqEyw1^9@U%;I&aP_4eHX?ltxR3w5-#S zN(Fq7LGwP&`F)DJ3yjuk=*(fhKnWx_KYyFXH!vhr8j-pZ9`2B}+)+9JND~7)nxP#2 zw`kq(sL~Z!kbDL}ISJp#)%6{y1>{x=9|jDlW(zD~*UM%L+uilX&kluOTGhr_8n8K^{-yLeXrlk9IWw4URVD7X38m@v>C1 zb`5R0tH(SOQ&$E8a%rs`y2Zk-9sNDo>~5#fY$_0X)$!*7w^(&Yqq@%(*RHmTQ(_KF z-;;o_N-xBN<@HQ!intIf?DAf=c4YCeXTX&lM5C|X29fXHKx-X+hH#&2?Ptzdu=Sc} z9hj0INBz=&D}ko{aM4>IT|CzB{Hz@LmNGd#oOs?XOn~{I2fsrI$s0VLMNq{yqDT7n zZZs(#`26*`V{?rm{oNT0uIx7UGXKcL%%w9A>#4NzJ1b}BzVgs972f5KUhl-K_oZ&> ztl01P+CiE>Mit7L;?##rOSlGJzD_l>h_wwo2Wq3yb><;(ELvFcl)c2moA``A_w^!G z-|Tkqugu@-h08f(#+)J`&puJzS5hVga@5T`c4VS@2A2u(Db=>0(!s2F5|zK!u$Uuy zaca`+QqSsC{hxBa)8T?4g~z+@Z20fOMp9A}_9Yk$SYCe#VSbT~ozP$a0hD_mFMm*9 z58rr^mNG4mQM@YjqnozmVE1>qp7MMX3RI)_>F2=TF^9@l7=I*}`i?|BnEZc&>ZkA zFk=+Mvf*y`CkF?<@G%jeQSj*VYu}d4B2{TdC;wDIvx&2H@gZavkvpHnA7B7TJX&Bz786}_!KZaF!#Kah5$md( zgNiw%W-ne<)yf)sE^Tn&_!ytcDN5j%Z@CtyymGQpmvBVj4DeN}dx+M#lDmFDW4Y3@ z#Yie$wY8yZrZ`yJ3|5Gyn$juMXnz83b4xkRir&>glw4?yw$0l|B;measL~!9Y6xW^ zP%6@Od*8K7&hHYm^|xOzMvSTI`RDu4af=U_G)mfx%8H51X&Ij*Ql=3(-vYS-u4Qxt z2hjcLq8|BF-puxpW4HE$EGIx@RkLHntdPb~G*bk?uAk5EH#)g#>sv=o@>|$?` zm+AEiiNV8XtGZ3&*d4H3t%3=Yi_{l%v#&xr`bf)F*j3OEg83bxI=2z7{kakmKE|0H zgYk5dpFZ-Gp-DiA;!L^y+Bz8K`pC;w_7ZI{;;>n9F6I@r;6&qo@{8{g?Ye_u%jYpL zWl~mpEDTpo_*W5#e)HN>OLj+dmBLDbef#CtSnOy3x~ybK{8yau`t#LQO=+~UVO^=gGG?oPfK0?VWz9Wo@RFC7n`&W*hR-6 zwY}(@sjj@^ugAUNQ2eo18jKCtv7I07+t+{1{z{#@y@b0WNB&J? zN7rcW$nQyi{7_8J)Y0uI4iVO7BusEPf@jq-_MquS$o_iXW_fHVL-}{10OoA|?*sa) z92Sor?O#iap{CV_;L)oMR2}m|!>t&!*AHxH=r4GmP@9SDaP@K%6-vUB#D_~d!6 zf$j-|hKgyavvd53rPSdRKceRoGRC};Q$H|VZYLROC}B&?(xmfgtRoK*S#cZd*^fV* ztCN9Ix%ugKq@LXqWf&MP={&N=OQyz|=(7nZLFm2anECC$6uS+m+zq797ai&JDO zdjox@(2c)KkkSOExlOy{7dO6nEuHVYarNhd#K_B+nR3|Ty>Jse#Ns#k(#H#oydtS} zQglcz}Q@AvWdHKQk2ihwa2?X5vakj_ZlCClPMGDC~O;syQX3sR}jlmyB1t_}!Jhn5i!t_tA%y^OgibnNGr;l{;aGCOG}N z2XrpuXt@3P?6Y9eERfOA-(czOO7x?cw9)mJ`B~n)``GQ+5mf~l_Pk-P2Im45BCVjOunugsN@+{4j#p_hI0HQS-S67Q5Z=SfMyrIunOLP^T- z?5}`>czfN4pcUz>V)CL%b(h4;8KonBAHGay6XWNXa~6n`e`aQCd-tW$Iqiy0m~5`c zTo+M}sMbmUlD3pYot8+odV-qY-^CZ_1XXGTj{9YnZj?(0{Gr&Ls(B0mer4==qw-3O z;6BN78!+MRF7Lb>C2MzQL0qVJ;v7O@Sj;? z#ju}QK8j@VzOz2szMpfLTq&gcbJ}&zE)(@E`l=zppX(9u?KE8CXzYu^xQ`qto!*t# zb%Dy1aue)D^2CVhcKN!>oPCG^yO*LK zpC||`Hv9<4c>}_C8}u63!SEjsaEg6z!^2GC(ZyDw;X~)?LM^fymgI-H*!j}Qm6HFf zt?P_xV(Z%2Km?>IMFgY^N()FAm10AR^dcmHbPy1bP80;hAY2kK)Z|ig1JavP0;n{R z&;lX!-a|h+5P=*?dWP z2F%1vd;ZQq(@%F@&np_F@lpf^Nb?XzFdmG&;ucGle~pu`akOX_9L^Q1u(Z1%mqO9dT{IoUPlMa9K~%knzeef-Nb>0Z^e zy9e{FkqGkb&3*B{u6uEhdoMat{Vi4nk~%@qgTks0JgwW*dseb#Kid_d|8#_nj2_fV zS9xNXTQuE`7hUo?jqZE)5Sw6v)%w%rMfDY~#V<|rWNvyzHRHZL1XkR-4R3S=-?yOR zpZpLhgbOlecpQ2C2ElnY&fRUg_|wStG0v0`JXi@1Syo6(RS6YZbD}Rx(pl z9o;KLx_$6dl%ZpyW_Uew3+4ePluRIm)&v$X6r{Aai^A=<<5EkKc-iVD{`Q6o(aM9{ z13ZQ?Z_G&UaRU>UKx;fUPR)(2n2Bks=5gSoTPo$T6Ki)T`JnbZQF>L0%3sA>3Y#Rq zItNkqg4>?jZli2b8u`6_Du|P=@+C>0DQc_Skmkw*a{e}se2*_Uw?s}YXda8LE&R!+ z&H3B3)w2lto}uJP-H20_?Ner!@r+Q69M$sIyK_k33N=>cC^kU%g!%G#D5l7P@T1Ui zH7ZwZ5t1ii%(|g>R09-J$T^B(IxxTRXkmPPf5Y(GbjvilBF6;k_~hiNR2{*a%C@Eq z)VHm7m@OBqm&&E=wYM%n^UZU7ix)z*yc@7lWKi+HQIqgXWP^lA(dXJl{s6v zzUU*?BqRWDnc&Z_AJ%L!Ao{{F6p?-_IuE8NbR5q^F5 zqNw4M)mvu$9nH;~jusg-tJf~&p2G{S;w2a%YwxTGtPChItuXZ^g;e&JpzsV;eS;vLgMTVEpP9l4 z(T68DFT<8{y7_R^TlEHNtuijPncc~KXDPRpZI3>(ar=n8SsCjMVEV-o45YeyUFe8;S9{aLf>ffO)%qC$L zhP=Ze=e?#^ZfJDV^7;H{Q<5!H$n)Y?4u0Y{{DETFKE~QqG^_5yhqF4h{SHHDjn5^Q zxAGSRO|~Wuf12hS9pO0$vaS@C>f>O6Pw#tK&~s|COVS1CAw~)d3AUI1riM~?nfy15 zz5i;Q-V%grs641)AZYR=Un;)M)PvdIMM`TQ>bN)8)PCui{+jqmJJUK1bk^{=UA^Cd z?YTLRLc-6btt<9ono!1r`$0E!_t$j>lUd4b)FFmy^2?9$K=JGtzC!mXg=($qCvoxD zc+H2H-n%>8q{V5rhpm zo#>BEdbp8bU>O|<6mziG^G--%cg&p71kJ~H9<#45q=Hl5{X(>2;IPypmnuY0|IwYb zPm8~M9<(ecI&P{KN5?AM;gtN#&+e zr5|%|<3PyYnMACsWS4rnP@{WUM$lqWkK%g91p9D$@7BJkTF%tev1g??v&MryP&6kzrKwW3RbyfilBqR!)=EG5ej1!pdrXuG%Z^YDd+oU^? z1B-MY2P71bUeZtWo~g=6H);bbybe5UX9Z2erF7*xPpZ=>t~ZbRn8o*Uc0sQnQh0Y1 zaz3z5vOil3(+;G#o>|UU){ub3;M#d_AO4kgwv>>NEYD2E4`Jp9$34m~`D$frH@gev zQWMWSrhngCcHzJ8S2*T?{)^M0>6J#|&8-(kl~rcQi>#Yug<6$elf8iGzIPE3*>M)q znNwP2lRiR1xE@&_m$+y@aYjl;X+eqA0ykUmuQiQQ392ukA3ANQ?Pq3h98`ux0zv+m z)*|bZkc01iOTA7JEgNE2k6e`|BO1ds#Q;HRNZ|e5ICmxh4AewK=}Bl_vRznQtkv9E z0W;uy4_GYxsKus#ieLOl1oi9k|HfY*!7w_K!j`XBqvtuA7klnEwFo-Mla4VnfItpSH_ zH%9e2Kj@HoSnsq-D3FgG%lsB9JQ?bWm4;&WB71F?NTaMSfPOLek+5k+PD%Npm^)ov zffHB!A0-`GA&dS)T7`7!# zm>;QM*Ub3wx+?oGHm%1%@ovqm(CtdVLs!$%*M7thGrO4GDy;#B4UH^$H{o{}CitDW zAv7P(B@Z~yudn)u@xu%0rEe}7xQZ{gmzD85S3dJWUOmb?$z*bD2C-Zo-ifCMzBGf5 zX$Lka;7tXR(3}j+>n6L7l5ft@dt40XXmy?f-HkRxfMRcbJ%11s#YA^*Q=Jzqtb_Qy z=+G)T3AM9cQk!bv_+_ejuo(FhR*lty40--shVd$V8~$dPXor$bZLa`9nOcr5Lnr)( zxD&HfDY5XoikcJ&qy?Q$fgvl8e2sB0G%YuYROY zPk!Gcs9zK4%PpO*=iP8qHKZVJqYLR;6Oa?$pz$0)XUITsmYVcPiXDimUx7qdbm`+H zuTy?vtm4h`bUkJN0S_VaBvpe+!s(K8Z%T4~P`3}(swvCI8AJOOU+5`2g^`hfD3~j; zz+yb4phC&T#&V&X5hl6w+ReEfA#%mvPP=WHuLLaJXt^l2(XH?OdwK7lD1#b>+gsPt zSRwhM&70PXgy5aM(@>Zhk~^Bi;I}u%rva(w zk@mTyN`C<*WlK3oz|!GD4E+nvDW82Wl?(}5E-vq+v?~nUh-NnW5kej0U`#9vz zGO;(@R;)flR`fi>dLu|?Kj>(MlP^ld@Cdh8n}YWEtjm@DNzc=?}_ebOT;Z2deiDYf#K7`xd3C16z5I{2kiwDw_W$= z)7zc@*MX>K+~*r4*vvYrdnjsg?oCf&m64R5)p(UbFEvivJNU~6K=_H3X0RJ|rSysm zHn}{Vft9}78wzRah15u|OU2Iov`>UPI%7r7A6V)-*IAc^fblDFikD-L?`S}oFgiIoivs>xvF00AW{ey=?h$p`!D$6WbRd8 ze-e}R1n^mDWb}aY&7T~NK0A|ja9MZbzEnmV8xhT-SGB zvKqsmO>uXNfs$7oO!OEy*C)-;>&s@UPoMz)7`Fa-6f#%FPDV~ORbqrjSjy89PpgA@ z*1b-BgZ^ouMLV4T@}2m~$F8;oWj2AX)yt#E-SGc!&DezCyH5<+aq~4Uc;>P(t!^t@ zFEPeB>#@$upA)WKy%t1c9E#Bxc+_iW+&PXpF{|Ot^7%95d8B$Y_*Cnv`G!_{^PKc1 zS4Bj<-AyyxsN8UghD&HgT7J~#o~Trm`lQWI{vyfGpItjH-{uwwgr=P>R5|Lq5^52+ zq3h?h@-*LNumeF{YqL*KzAKdCiu7zpNRxK{UhTSsO`b$f&8^I|RVXNE{M%J@^X{oy z!Ex1J|G>VH8+Bj&>W0orT1}4e&d#-EXYh;7kRF*VT{ooJCazv3xba>v<8izeYySop z+au`Gju0X3fD}_)Twczh(}^#}ER~$isY1gNgo<6J#^|-@$_6OZoYZP@+L#-~nLbYE zfHtNgY&@rYfj{&;uz+-YtzXT4bNqMvY!6&J>d@3W3?lC>vH#SWawADZxZ?t!;4 zR}o?>b3>yS096TxO4BB@MTe)fEM}K)5~5(#;vN~!5da9pBz{oef4HTrU&2KHf{^YC zc&383>DAVck z>UF<$fh*IVBzq@pQa!?>L7cs!<#aAE1B^};R(Z}|gVY9fhp3|h>`e>SNb`CZ&^8*^ z6wHJ6+ktN3AI($H&lxVc3tS#CKV^}FTGDYkVLW&GKxTKN4ny;+MOm4P;sn~LpL$2NY2Y|!FB zu2u_keo~HV%!1H+qg;~FKX~T$tt%gM$$COtA46zA<5uh>BxJ|-YrClSe&+YM-d}pE zj&R=_bSk;ZmY|`$DC06XB-XgtX<(BA_1g?cxBxyeVy_3(VDHsG1fN9c`{ME<&DhZa zIZ<%dUCZ*JtE(FYyF#X+VJX0dh+yaZ0$Kx6j-`$uMbatJGuvo}#shRbOFzx_n`Vs-Q*95DrIU=eVX2Ahjx~$^Qq>w-3&? zA^)884I5-Fd?>NS^n)+DFaM4EMJ)b($xC;ELDPf};t0oXjv0?ppJU}ao+iJp&1GPf za=2jYZH(9*y7lL2x+sSDQ*Ds%Tg;Yf)lvbI<>_{%=J_&yY1KQcc2q!dTh0(|=MK-x z`cU9eWjThOV6bD2kx?RM9!~0Q6ri}M7zVXLC;B?y{Fy#TaX`S%#Xn}>vS0YmZh1O) zfX^q#mJxWEh%r-gO3KOeE7uA8P}j!8J+q<(YS_&IU#YH|1)Jb*ZQ5)QmN%K$BY`z3 zueV0hZ3gz)vWM!r@b1=G1qS?4U%q@Xa@5zgb@aHEUiUJ^(8JmEnXm0FtxqZKlRK|% zIDl@Rj(@z<@yPs(9P^nPJH}S{fL*OwTdB2*W7~D4S?sOxiS8z7Wl7+3;af=78H=$* zYNndw=k|}!P-aCc7w>xN_Cz}gPzvL>{I45kt8C(Lxe(R4S_PxNaFtlfql1pfmF6!8 zg;01CKS!6a+KKLWT4^iwrM_;?=BcAT;kKu55HDYto9pHfv<^j@|h_!6j&r;1DFZy9AdY!QI{68-fLbYj7tx!D&3fJ-E9Chv3#doqPZD zG{1H4yv)4xsT22_sWc>{!h{gyGW zw@zwiDp|Wldzy9}i{Z@J{QDx$EVI9PK>(==yIX2shk0vz$h8NqK3U|0wND3T&d^~* zgmQAG^1Wa1Fv(cQuf?hJcl7?rMi@SoHwV>({)nybzt&eQ)88S`hscdh6OK57GXWw1IsJ zNt6PIu!l$-Nd{6=2vr!)h|D(-3RPJB>;JC0UPEWf+3rQ|=n^Bxl-*uEEJi_0q$xqy zs32&IZj$kYNLTFeNtiUO&oeVoczX*Mw@!P4<KpMf_?Ic<1txyTNY|8A-MA=RT*2RuPvS=>j|0*~x?U z8I!W81N;6W;=$6?oAL%fpfLe6X;z#?`$I`yt(h7uKakt@XsqLRvy=z zT`%XdWnMX(@7T4MYiZHdCrb-6StXSQIiV)kiQzyz2RWw=7 zmAc&ow2eQDt1LKy*va-jeifIq1!w9SnpV6oc$dlF-(1z;qe8UcDabSR5!U4K;tEZJ zZqMpUkOv9x?t$Jh{r6(Wc!YGrI#f~W)?XMZP2Ccf0ALFe1FRWuO?Z zN&njE#W&~Ok>^XnG}!4xT3r$lcgRa;h3(L94e6y!wJoVCK~z7Ts;>~lC8S^c<`(VW z`IFV&gYl~aCv2JDo;P43kr8H{n|w7FaBrsP%DGrv`Oqs)YUHu36<^Eyt67gkcyKLl zf#*!w&aF`XlPfgnSL3)PD~W%#!g+=N^xL(WeMV*u=EEdp-ij|}cNgqxHtf!C&hx*Q zo+q!IyIi{^e6Mq8(jFO{$Bk=eQE7j5*VMT7Yq62@O}8<_Ex1$9Ubexs>Rro3nN68n z*sIQ`-Z_;DIH1tz?x*Px*P@U^TU6D~(_6yI^ZZKtPSdIx-LhJLbw*q_0xt;6!D$Xm zLKDaEugi-!`+WBurY-;jSn`Es-XYOOHqJenG)L?m2jCR1eFYBoe z)GUmCtgh3ruV55x$Ez=^NTQ-7z$S|sd!jUhh*Y6SU54J^Z6N~|iMHm%nCxUeZ2UJ? zwe{Pmy-TJ_`P?mKaKTUSC%zkR^0OkTs#fK$P8BH}WiBr_3spG30hQzzy9IjQEGL1x z(J8}J=~*`)ywyzuYG&Hkv|6IU8?jM4$2xy>S`LFy722Gy+Us#nfNFvuJV7lC3?GIMGW5m&&46%1{P ze|u{ZPmYG^cKO>0*`L9|TThX*HI^oEq?pT?u6WwEHVNR0IOJp%!aehyITad`iL{;w z&5mnJ%RSd|jy`s6M2wWECmd9lA4@#-BdMvaf4kv`Cwm93+TutKv{5jT*^juWvc)`Oe>ZR4CO3- z*WmT+b93OFmC7R0niZSfxY*B!&Iy8qsx7`H?P0iAMlcQ~y|aRa2aDnR8;G37{eLuL zx~4JUy?-}75KNk^9<17$@N#6V5_TkHi4dnK|6mbwz8H`$3@$JGU6H1KD9*au7>RWE*2-(|n!#)tQX4Di82Z*Scj(v@i^$C{Qrbd$c7SkB-XiQ|OJ zV_V>G9ShwiF`&()k2Ot(eS@czGuxN73ef-c&@G@u|7oGwoAvx~`4~ImRZ(DilH763zVMfaE>$&N^LMFI`r0jhjITX58Tt)(o0GtVKlX>CFU!a zNO224mIk__!Du~k#)!sUzOV8e@Q@)+L}1Ufe!df#Peos2m%ssvP+il4m5@m|ct~e_ z1w1>|UIUcY%@{d>d7P5)3Aj>lCd-?|&e;A~mCO zDA+P^;z8}M%P)=hQ9Aqj%GW~1w|&x*UF%jELGjq)lA~8}l*6F9ify;vU{Afe`awR-5u%|c9(nxnAEFN*ZzTPatU?YqROQIFInt%Gxe zv{ZGu`t`u8yl=1oEo10CwC`e_@W9J^6ziPK9UtjdM+cE|H~KoCB9Vp$=zAS>#N`@r z-+l1rxxGq?0|^jM_#}(!3!417rPMNvtVhTyTfYh($rhq;PhseibXC zob(g6vj1qr=f<(pu<2O=)r0E{gtC-a_i6ASB#(TvgLUOQHm-$qKDz?oFmOuP8{Y- z?t8Sd92=U>_&N_3%iB5%zX2S(UgX)0^Q!r$Hzv3!mcB?_Jkd#1-ufF$JP-LRLMY-4 zm@To&!^G{Oe0}3Dfl{Uhm5J~eetLe}*2h^UhSg7z5|X56bF6>T44=innrHQ{A05y~ z*5F(s7Xe`%E&(;ahatIZhKBx+wGnIzu%I+q=^RRsk(H~$-E|Us3w8)(rH)UV@eM=l zn=yFa{Q)~SHmAv6qZOBmW{K-Mt8=_P%{nC1mNCMzyRQ%+z4b@3jWwq~-93d^(KUSu z8YYLa8XXsLSQ$$}HSh<{B+oIB|)Rn+%E3QONJg(u%+sJ^4{7QO+KjNU8j$`R_3YnF7qU&7#A4%@NOR z8sT?#-zZ8zLJ@m1RL+_?)qZ*+wvOPA?z++l(^*B!ZK5qm@1;ews;H{irBbm{d5Yqq z&#a@ba8=UlF>~d)k;A9rk*axf&szj4YsXaMPlY3)y9ZlAytzv98H0|V=vfC+oY)Jb zSWC~yCp?jBc1_Vq@U#y@?;M`FaimLQ?FW!uRIZyHuf7VrYU|j|7W)F*`RK_H&qR9q z8+BuUK$ArLxN!s9mpj?t;9;RIGfxEpi8(ki<8MrGVcW3$iHq-(j3@Ux>h{!iYBfNS%E>`Z07^jpc5|%+E8@N)mkP) zX`U;dNWRN7-$b zTvg$b2wNU5|7q2>1A}X{czSl%lxeG$9+wQl~3I#3fixz!fNP=E}qz6 zcg5d)g#YOt$qz-M3RC6%1^M6ZnE%7|^M9ziUK@+{^!CmZaNqBX!s8+$AS7hfYqVKw z^UQGY?z0BhDz2^DYJCh8IjgC*jCB@ZzT#RsnxopU;c2iWKM*|ndoI+`G{Wg{+i63| z2JLz+`KKa99s=v}V1Ivpc6O}kS6ARuTYI~8e2+$-roMM$W5Wxa-!@M{%hWxZ?S?aR zqV4-yreO+8)$&RT$AE!y@GWP=M#dLtd|{~)3qnF|gMhR^1Z?ceLl)0hV;Nj~dwT~u z1sxsFuyTfmtR!Pv`5)&4&&=ZJ*^1GnJJRdsGxT?GfVft^7SRan&OeLn(&eGf^QMy+ z^BMiSmny8k>r48*g&A3XYt#s>=pwTIe#{)5bd!(Ls41@jRp{jidD2MsElh7?$$-^{ zlDX`2e`NBc{9dtHl@QukE=vP~H$gxDjJW&pmiL}&V)km@2uR!|z5zvWI@A+K3hCcQ zf~i!inwIT}iCqjy?R2U&J*!43ws668qwB(H^DBghg(TL~vAR&i>=4&@epI@&L=d0YAKC^j|+^cCad(45t^~?&E!qDR0)R zoC{^K2kns(7L?99+nt--D#w867Y*a)op?p5aT}K}5=v?`B;dnVDoG-g=R3p~3VgDO zb{`*0l?Bm)vB6}}2Xa!12r@nJvPIxX*}YegkOYclPNf$F{oLO5-jaTyz0*H??jlhv z7aj=K=$rdv0@7HxbaJl!zQo|g(|C{fNzu(;U$4+k-`e@d!m$C{6?9;ZZ468b|HUFt zEU3NniY2~*tfN-Pph$B9EB-(lvt{&@LZOzf9{JaZv6oMq&=@!*&6+Gx==81gsVy^6 zV6DG7V=!LMZFSXl6qa%AMguqu)O$t(OSz%aVm}o!pXBnrr%SptR8XjT3jG=SbMt5Z z0dcHH-GB=^66KHT`T0rW71GX5WI;z}@caO;mmZNGN;}Eh6Lt5<+LnbGhc~Bo&#`&P zlytN%q8kZQ4{6qu`pTKftbci8vNzDcPpeKg$2ViE62w^N)ugX z$HJmhSRxK}O)r>}5XaOXwbk}G;(xq5pULYc4u#%acbaxSNL8A%rC$m~!ve)r<|NRz ziGQjWZts3Rzhf%m3KX@VvP$DU{E(*hnm<=!P~h)_0|lk{G*#MQCC!Hf3BtdTrLRn= z6A>lpQ{m+-qB*k;-r5g?+ul>Fm2q)$0_vJoNzqJeBm}79gypF{t{~;w55HSTJRbmD zy+9hI2Ra#kgJP7pAfc#*!PXW)xK)Hn( zzFc_>BIOma`xE5$=K6$G1_sud7zZGuH4X8=k8TE>7F_p}HH>O*y+HDrWBJHh+H zj7gMqpTCjlOJ_1?=^(k4*R}i5!ZE5L25WFW8)dcgjm4q?lz$6_c?ka?D$g{Wi4Yt= z#4-=edZ(xX0BG-HtXrsxU1zeEDP#m8yVLaB{b$Af>Az7lCAK7sbzy1K*Z0xBzW5ib zE@)Qr75Ia$;v1rMVTH9c_iX%dvj8xA?+Pb@3oyPWv{jD3CvDcKUh7Y(`fa0#N$1uP z^#$iKt(E!#8L>na|6?Z9S5h!AHiiE*4-ZQJmnpOTIKy2^uWRBlVt^Y5<2oE(=)Ix8 z(#P-eqJdBD3#S38c~L9YExu80+6Ji##NuNwtzeMZ64_16saIpp`?@6z>nmkyKF7Sv z%|U@NSCkq5=>yLiHss=?kbMzv=|?fFaM9akdl91a5D0(e3WWUW#Na8W~w(}^qi7MDT#wW3>BP-1aT0jWr9Mo&1i z(AOq0FjD|=YH|VJE{y25Q)dj)BbK%(25?$e?xy)=RN^Y4824#2{ScZ>^ua{UuYLhk zmToKnNFw7~r++3AR`pn~DyJ_X;C8u;^7j$;Rxhp*T5x|Im58WXk>vL2MX_eT3FrQU zjb9VY+N?vnaWUc|FeCAw!zfzu%}2xYaOo%jP<3F(mlA;w9MLDtD;P`}Z9T$JuzA4=Fs4ZuV;`D=6U7 z$1MfVR%0bNIgR~v2g$FMHNO(WgasM~ZkcOkyT=m~DZw zGJPU1QNyk8Hh#XIdv=F$v!7+r4hr?OwK+C_X!w+HH|$6G>8pLU)DI1}tIYB|o%|ev zM@`g3au?qzUh8}%TyDiHc%+}>7*Fb0l%QQ!xo*axnB?q*Xdn3~g~*YdbqT+ko7*5JB(6Uc(ajqtv|*d2gIy4Z5aa z6Dswua9A_{koPY*EBPN{sQ+K8rdpVwVe2xTTJ5)*x71Et^_?=6b9%QIM6Ovd`)XRx ztqeFh{{${vW@rLORYhL4VL*`@AD4! z@-god7+-F$e=J^p%fjNv$$?z6a)ADidvHr=9 zbQvKVhR84iplaTZ;(Qx0IRdPF^i#Deomb!5IF>Qa9N%aXYTKkq4E334@6a6XRsZb% zsF$z}zd~v^f7DcYW66^?A4&%NsI95?2`4aJyhE>sgaZI=+#P>z71NA;Q;EGjpLaN( zJK0~G*5mLxyT;o~0Cl7GTF)_~lP&N~&*^&poL%K|Z${(0e~Zmp^h}Cziw%dbmAOzp zRF^K-zg#*o;kDvNfC?bO;RYv*E(C4ut5^Hg;T+o7*xU_Xd6Z&Wg=S-)*6Zp$9*ksi zf2IWbRISr}^m9BzGxkD@&574AvMaQed#!+ z)U7GST!gLVUe;o{om*Xw{Dr?$bdo&!vy_ug^+d4hKA|7e){%d%YQwJii*`|52NC?Sb}V1u-;m%kCP8ojTrgtrOejQT-A53L zQvHZp#MG%%!TRywC(+apL$E=~7!nXH%~V46jBvSl0DPTnKo3{{2oDVXDZvK@K^z## zPV01Cn-Oru;eW3c6-ttV>z+qP33|J|&liv6N~P2g0ZANd2Sb_H+3g26^Jzp<9CVUs zlyuRIz;KKmeu;lu%JVBUEca)k-XC8$Y_0h$%Qgg@JXHWmYiW8$s={- z55&0cV>&j@x$Vl^j8=X6K4cnq5gP9t^;85GPF&@UPDQC-uEAs_c8maw_hIkDLa)D30Uc#bal7;V;Y8Ko>Awtu8BAgigf`&iA`j{{usYzRO zsglGYVu|5+TX(u2{nCE~&*{oZ7>oT?{CB0|ENxGt0PR<90{gv?oPv2GJ={v$v!WUk z+}&fQCNRL5n)K?nxci2$acfy_GeKO5CG*66sbz4k2#$|gGWX{XGrRP9oyyU>hgWM^ z#z;BbCu01fB{B*#>cKM(DlKBXyH}WMh%Qs{fm@cT^<<1aE+7^Ag))g`6$A`f|MmcZ zddL}j1~R(`_u}{OP0_ZKF0`T5x5A-*+_RoKVZx!jhL};mbo5S~u)~8*=1DIy(86#Y zUkzW}88cMRHO=XjXpYDf7O3*)Ql>6Px6!9RN$)sth*#L>jK`Dif^OQIn;rxd^p9Oc zhhc1+8qC*DxPuN{5f8>_(e4`fYN=4(uu z{AZ49#9G4hCuOF8)k8(vzYAMYMNzJ0~_v&ZXrgx|G7yVg|S!%@ygtdx!E;lh@P z;4-JS8}g{IVCt24%Cn#2x^G+SemY0W@@tE5hOGm&dVI#BwSwYF7KMs?4rv@ZW_KCv z5BegqxkLN60=W^!xm52?pe%IBK|M_?l-5UVj?*7vPWC%m=?qGkLE&ued0pzYbFFCp4 z_x3-i?&lN~d~E4{IlVrdS%A^?pQ+iCAsdG?--+0a{>2B@s)R6xzU_;fo7=QV-OP6t zHr;v)2oe_SCi z{~-GRQz$T{nGK@x=c{V#KAjnDY}u(@Yd<>dj2dm^`zIb)+#3?xlDq0;)~X8Xau$uZ z3RrJ>>g@)AU=Pg?l`ls9CDo)bygKn9{;TrG{|-SCG|Zl7nban)R4p4I;3oEfOLWrL(f4T<45zDyXBF$w?V#lfrk{_B9BE3-zn(L3anlYb`bku4QfO@abAH#K3Lm z2)TMbk0qJz)`|11bE=JL-xr$v$ru6}wL4WYgl<*74TRp!YJ)3}jGfw^A^}RWJ6^ta zvFB?IcsFN*8?MUnMx|E($hZ4pFHY=v!5TGT?IPKqPuL#36M5K1kJZlG1ceM)GalAA z&F_Cd*Xh9?hOL#}m%yjn&in1J4Xk<%R^zpxmt#f45XE)q)8C%;E{gTQNwEzV@55Mx zt~)WYb}9b96OoF%&E2OW7q@tdk4DFT@X~5F<^!B-PR`OFv7Ep=4uj`Vk7ZDL>%rVz zJegqq-JU&8gCd4R4#3mZuEpF zw$UJzh1Gz&w~Bzta6PC?)b~gO9)OhJ-gF9)YO&FEE3!Tei&O^P?^)*sp;88<;zVWB z(W3saIea_W6?l=_ZV3R?525Y$pk{|*YPVq)@7lty=M&I{3MqBiZ#r%+csBj}pLCPm z(DkPvho!X=MK~bHWpGVQz;kmgBr1Fs*X{&LD-JJi7Z>}y3u)6g8^5dV0+| z`Qy2w^4w}O$bCjUyt6ciQliR*002}DD79T3F85G5&p*O{<0@7#y`$`5#p9NP95*p=Kb9#jnA$`nj>1Glxt57 zKt&jv4OlZD0%5WveYLwb=a^d2pnprz7-C70I$$ z-~TKb@0QwF58bY?_U2vXoaaK=8k&EX?Jrhe#bh|-1xb{P!R729X(wPl54u>7lciV= zytwjbo-k(Rbs^JQoZnzT0OSI04~+->{C>&7yQSk-8yPqH1)e&_dONQRUCb&R8R-A> zNvNsm>EAzHxV44t@8*n6&sG;eTc-9kf z3PEQ}9(UcmpnD=X0P$>QQszsESgVyNL4ME=M2IkZ0`NwltKIVa0GzPti}RQXy8ZOk ze^U`|lfpRY@sN=N>W2Yy*dx5@tWZ%9bd5&w`mW|1=d66q^Pz|$#QyvVlu`8CJH49q z6PdFN1qQ>Ky45E zS!~jdFpwx1BNOqv9u$LIJ}-1fgP?f-9J|GTf|+0c0f88jpK0XXJUp%owP87SoRP6V ze;DLhPq0g^lRygw?&JS1hZtxuCoh@)>tETvCSyUx{NoTUln{m_kJpEvzJD}j!-1KX z$|ES~cQjl64@`_Yd?b*#9$vVBdl-5I!J5@}Ju2W_#P`8^YBQ5d>e$b;hjsAWc^>Et zYx!Sj_=gnp|1F&SA4%DNLYn`ts!~kTpkWy56VxnCwPka`QEO)U_?W)rTzJOuXPC+#Uz512cZ1>+6HXSaJGJU#hlK9Tl zhgw}Zdml(Dcw6I*Yt{-}H^%doV1_w4IVmfT8!(@&wA8k@`@_hK1~yT=tM2vr8#R8> z6ns=h!=X16HGH;Z7XVsI!wK>WE5UXp~ zbR^90_`lbL=nJhZ%naGKfum2^ zdWYY0ipu2)x%UD@oL@9s>9wz$r+oQvN3MXs(f9ic@)n^^csW}-a~{umiL-U|!iAVk-| zE@Z-3E1jLZ+l8`k_B@Jb)bEb^h$oSoXLZ+6K9$^zpE})XW!ZxNY^YnG#=!xac1FoZ zu7T{<@5l|&GOnQ?v-v?f6Ik?f*t5jx!vJ8xxfVg6A&e-n6A0p%zLET(Z7j^F zNy5vmt7r@0Y(ttCRv{|>@hDUT|a z@VR_5F_J$%^oggtXSIlp&_#8aRhM^lsW;geAuFnKr(y%*d)nF?`%PpA5pXs*znld- z3#XQ}CSy*e3mB|Y+|ns<;eXS*tXH4iE8pa>5f9cVhBMuu3GDsZ6D7*G+4dXq)U{iF zCH02;7+ZsXW3fzFU`Ng!?(=Q^TXlEa)wSW;rDa=I5@xc)vg#EAqMwD(#l=-!5$$6* zBAdYRJ!^2W6w`vnf*4OZIyxYZBM`W|tgN3!Y-Xa^QR2@_G;%ZaYp&kU?K z?O)hcK7SK>bAX2n-ikUn)}EZ6!jJRjaXLinPgXBEtFtDJ@%Yg9c)pCNVa3d+IdivOE0%xXG*e|>)Uj$7+=cmAVvr~c|+sEgMAq!zW! zLN}A+S&g;iZM~N5%ZJUC-U0qx4NW~qD|#XrT^D4&@jB+6rP~^Uj9Hb=n4!JZsBqk| zfu=q#={wN}RFJu5<%w_nWy0`(Q>oT0xzVk5$JECi<9nPya9O3*ht|ip-#NUytd)y9 zOPzi%f~)SWG1e)8eFGCCcDbJmaw^2jpo=L>i3b_u=;m8C>Iv^9H-UTpZs6v zxe?AXBU_)Kly*(+;ZL^d>-kGw(#q{+y1Bp5(4|<^H0OjQs6C`$0KtV6MmrlbBoy!o zAE^J>9Truz2#oJow-l<5uTpxyef@wxL`!)M*842gKi?c{9twvh?TY$gMSt6s96v>> zWMRhe>BT_zhR=j-e`ULV5|sEm8vYB}#kD(L=o?vNUOA9^8<4~U~g?lc<2gvkQH{ZIDqX5WU1hVhS= zPoh~`yt*i^z4bH)SIC?P3H4k)b2XE;pw$b+UpTLZRZ1-8!;;(bszz!2l+W5{HnT{WN+zL#WL?P z(`TcDlfcT{#IY&A@-LNBKOto`J8SDkDh+BUb~cwPr=OED2eV0?so;E!zxH;Q6^^eQ z`>NrsEfL7WQNbku#oLg0`A_XF4@M;0hOt>M^*0}look)#n@$i`_RrkC#ihMe#4l4u zuO=XIk>x$iEM2-?J8lq!Y#5LDR5O|aYTP4WORwap!AGF@VV;L8ijOh#sx!K6X8Kw6 z@_jo$juxc8cV^9W0<%$g=gX??xsSbyKKPIS8mZ#=6v|f&<=V{Mu+sJRZg4g{fb--Z z$8Z#MeAB5`8`tjLF$f2AZ>;}$jj5cwZe%=Y?siL{f8hGYo;hRq#_62gnkQg4e)43x zr0}G!*bgk2yj~F&Oa+>h&k6KDAXjPdDyzJ~CIkBXPFN74W1a8)KpRyD&mrY3@-@HH za2z&=7FV+P@lA+Q-=yWOLBU@q%b)?1B%0+CL96E!$FC&ri&V`@Ozn;)>&gYNk^$rHkuon zRH*+(iqmR;XMqQ(p4Ga2K3VpsG>}>-dA{rjhQqj=+amG5rO`*_G+Q3v>W5*E#!xe) z57N3`y8%zqM3Z}YPY^pT?;5l^1NA+2b!&)M4N4$W^z+`1Cs2IQvR?}-S`krsG zE8vVZKJO!5>G3mWZFnJQA^0?Ekv=AqJb2Or9#uQkC z3l#pntw@5;hzVPycv15W2P;XyC%Bo98+tVIxtswh>*}^C$$DZJ7bA0Lv#%2~4 zK>odTs>hcd6QfvIs#E<91y_Zee7$%j3;p)x8-U_IIQ39@PMQ-)n$KjK&F#sj1Z z#kCX9T8Y^0qT}=M_XF4nbq*FO0!=kNA4}irny^==M*1VHc96b*Tw29$xzEX0_o@)qdZhs|HjSXDhYdx$2X*xy8u z@*Vxv-4MsulDKb;(dA>wKs@`h(j@eT{G%~(gz4UM1ye!nq=2#l0GRUQuFh%QeU)07 zx9it2K?i67aV8VCh6mZ1Iji?DP0q|H5r2kD4Gj`71U3>q{<5Ue(6}xirx@Yz3R)bh z4kN<3*hatmvPzc^@=-FY&)|9m5K9xq5Nv*QQx!i@e$S9^YMd>!kcitD5Ky#HVuKck z^=@$a)FHL3Au^Cf89_)GV;3#dNv#OF6IP>v5s0sKbbJ75gPS&3TH2W?8K~j>$C-zL zNlpEf83nyNXyFpz_Y)Qvqi`0?O zPBIIvQo5sdZ!VZL{;yroSfFuwbQUXYq4gFUaq`dm7NsYj@y_y$$PAg-?kMpDL~(`e ztIlBg57bv>Tto+by>V#OJ12?{Oh(zxJ2-q9hFWh?fpSE?&6T>PF|iq|xoCi$(Z<*K zLn=*5*M^);-W|`O=@D9kE^X@TDB4>nYY}rI2=>lpzfxgDgU)hppX>F)1#9c)E6?;$lnc8#;E>;9M8Ar7D8^qQw(dPT>f$L?0P#G4b^JKzdh`+dCdJA=llTx+kSm>0uBYJ*nOTE+s)>{N^a^(#*(0Yu=Gl z|I9H|8{Ctp5%GxL#=_}OLzeeA>C0PByQY;~+;^p1ozEP!W{Lx+?yxfHzpJb~APk^V z8Jbjngv#8+AC3<1E#tZ%A|uLRkQ)};w%MBYf7cn({jla_((L_E#AC)zTUB9Qx<)U& zP|684K^VK&nW&xUvui(>UQ3BLU?Tfwy|X*SASfamRf?`bx}%x42A4c9M}#wM6Bc>> z?4+Q7&P0wRCoK{ihbS&sojk>keB>S&$Mp>^jsUBDQwRj=tDr@}t)%{?zl)77Zp=tp`{=kHl-uF-R2!>sYyU9#Hn`gC_uqVj8 zg*Fn60Ns#m1sO9u+4mRE2FC1H3~2mL&s5D)+?=B#EI?auMDk@+7aq|;aH%b7Fk;{A zJ>M!X}J}0_OEQI4E++4~5G1;Cp>> z8YP+R);0m>6UsZFcM>24cCDZ!T6~vuxL#~QsIh$DX)-W z>6a6x0s|Aak5dOHP2K$=@o_?o7r_sThJyIGq!!}YBwze=9GI;2Qi{k&^aajfQ8&4g zr)KvUFS%(}Fy*$XTzs zb#06m0~$fJq~A6(mV4Gm!9S;&f+rKFwmMI(LP<4a85U+5^e?t38CkK*v z#n(O4^V~0X0$iswQoCx?iR`3Al>H4tE1yvrFP_JyYIUQ82eB`oaVDjo{Pk9=8m06x zfPBCFu4pv=p!GkZJu)BN>hQLDa_0w(!Q0_>srbO3Xk~ieK3iLxn{etnAKHK)qmZjt zd3~xJfi^ZqvVugC@KJ31qEur7jq3kFAM)ar6Jr{k6w)dB5!kZmX<}0vyLHrX{VqX# z2gd3{4DO2}zk}}2l?Vz3>PFRvS_71?4=Erxv z6agi>Rw&{9blh4u3-_Dds!E!wu20?)laUj1D2Nik}5jFP5V0f*CgUB9jVc)2cLk6S|M~a%(cC!a`(V&rEB;-c-(b#6^C-J$vhgL{3L>BF@m9eBFY z)zkcVN2W!i23)&-8`E)VyAUCxJ7{=BHTs1IqniCLNqpP z^PBlAAgN7YWp~G!=Okqt*Evo8q=a|Y^NWybx40U7!@6=-m^3H0PP&3y_*UG~hf8Qw z4{1)Bjs7jvmZK{v%m8fVnC!@c30xbJDo38gYTB0vgtx8QFrc`Xd(h&Hv@0alE~Ezj ziUJ=+TOVP<6f)m%#i@`6b;mxRAMcE{r>#`J5d{9xC5^DBtlv_>Yu9^;67 zp|ql?$?=qL%qWGai5FW)KS*FbP&7sbp*B7x+YqGuvHDLE3oOEg5I_2(T;Kbb#e> z=xrPFG+!y>S_5mv(BAsO{O_N15}DfhZ4ZRWR~s=qV!jfGx%T!eJ6`AZbq*ASsO8Ut zZAa-2b35^;?t{Ow)d!V?gnpM?|D!|w3M^s5akn_x&AZbTK2A=~gY)kE%5Mpu>ljNz zt2I^Jt(=ohgRm7QOi!k`58B4yl~A0ycygP4a+!4(Rk!9O-q`Sn3}y&rmC8a|rW0xl zZbhv0{hOW@7Iw232wdm%sE-8)$@?YJrRiU~J&)&Mxm4(FOLxu<)!naOzofqsn%)N@ z&^^a$vJ}yOua=~Xx;y#%&dJZ=Q7U3oUd|=bfaR$qRlhqC_ONWX-tJ1d$*`Sfd9Zs< z%sv%2EU~rLQr5z<6SJ3%<{9qJUv(*fC}P7hb?aFrrp1{iV~bJ$na?rpX*r29wYIA9 zW!h)&qioGF5l>C4!Cmoqu`qO5n|b77b|AQa3S2QRJedc)&s*1(;?C OkeB`_RU>Kg`Tqi5QnTFv literal 0 HcmV?d00001 diff --git a/docs/images/summarize_plot.png b/docs/images/summarize_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..2250e37f71f3dcb6701f4a9d8525cd1e9855f311 GIT binary patch literal 65758 zcmeFZ2T)X9*DlEWngbw$phRsHkSJM+Dvcn}AUT8NoO5gyB?rkl=PaRtCL>95rh%rL zoM|%M#O~X``+ax5`_D{GP1W4FQ#DmoaX9Dfz1QA*g=al$9|AtfN)XK`=n@Lrbj@)6z&z?Aa(8CgHG_xcV~ag2a%Ec zMc+1O*Z=n5-h#w05ZS}_d3z|ezCCR$sn<0smNHoXtq1pJniU=tdEPGjg>JfI|5pHa zZ@-O+iHnKL)94Qo3E!L_NGvG~6^s+HowV5rKJziU-8j>C+eR9w)7#O=`bm6W4meF3R5e-xEXIj0_%;I`>@*4_AuG zJ+9ZV29*~~F<`DSe3k4|YPdZ~K=72{Bk-M)YtkkH?5XJDy>dz%utN>%UCgr!9Q{GG z*Gx40Lo4g6PL^*n#PxNziBF#tQUZIkma7~uU5pD*oN3Z!&uHPk%xjKvJWct z7B_!S$h1OgsK)hkvlM85NV(ltXVH8d#8)}YlM)^gchu%Tbl%!zHCYxAet+LxWO?`T znn$C+%D%7wp#C_8?w&m~3BRcX1h)GK`OS;{B_L>G_fNa{{pIgx-!AXmT~rB73r}9U zN6yLw2E@hxnw9Z_BBze}r>)r$$Dhr``;y+Z2NCv z+aKA$mZJAm*ADx)Uj%A*3Oxk3dB?;Glaw8v~wS=l9kv3e_u{v5dP= zoo%haO;%moZS?FxlR91!U5{#o>oifXr$*00RW_NeGkWi&ZYvEp(hp)YI*Sr(c&cF5 z?ts?^#^TDY+_bS}%{RzD6pR_=y%C_`tQuWM%CD$f#Q7*AEaR&ZJd$s5^cC%|o$QT) z!ZWU??AAF>bH4Gr%hwFp`gk#xXe6NjET^czdE?tHmuh#U`LF4R5EGMzu#qPqNA!BG zIYOF&Lq>d{6B3SAhBRK&t!#EH;Gk}_6~hg_a`TH7SSNbDoRO2rK^|&0pQJu>bZpDD z(Fi@1F`8zl0n79!Cvr7=Hg)R%Gg|dDYhL!2Tj^R+>6$4sZm*}9>hL6_H2979j$?ya zy4k523CWu^&ei18nSe@>byoh>Lrjc~XDwU05nyKjb>Gc%fY0IAj@f9t4e2Dy0(Dhu zwJiRkiJJ4%GR}OaNA6~)9b*g)IyP$Nh$End;ZfxW)OU$e7g|rjiJF!yekI6KVpmTR z2EU6s-laNCe?B#q6zoc}(gPyQz253Ja%Y*PpJd-7FEXX(=Z-|}JeGmWnZ?5j$XN$H zWP?RXTw=telcu*PKl8E;Z)~$wgA0dnTc*+ZBd5abg=XR2Uy+~7mB+xMTw_{>%k@o2 zEB+@3?qbmW^z)XUNOwa6P$9)CojDc4Mnj@6?n-I{NFa?vh-9 zzv*^0ugD_xltE}h&cg1TQwOGWgo<{<->a#^d{EOxf?@m>wrD6mjNQq+(gd2Bvj)^R z47x?*-kM1hfEOgxz7^1*m*24bV{p*j{ao4IYb@M#F&fqX=q7$)G_=PY?R)1E?$UVb zXFBD-D}^PhytZ(5xgYu*`%Q7%9CRQ~smeN73a3jg@eQ6SuHFhY+un9z*ZS1R%~Oed zNhC?qRqrrZkv^RUqv~}Yz`XCOzt;Z&-{zGt2_Csml-GuZc+-nZRu@ZDAF%z_E{NYKU&%yw0e|5Sg;E0hnw>=BCLCCPtA%XGhz{bC7huy+! zbbL2L;P*gWbTr|dMOQO!{vxJM&dSi0{-`aY{U0h|7+M>|Q z4=y+(RB2M7?r6N7=%b0+b|24)(lAf8*$(_(H|06j^T?=yV=DDxNdATbeLE}rnp8ou z*W+UjR>P9)JatN(Dm>Kg+|(lQ$-OMGvHUGn4|}NAiGJn&lf;bI=(NAVkTrNHBTI{hs+Lq4I z%rR_@Z-22+uL~U%!He?7{36{N!(4+3WrCv#**XQ_x)|kBrKo5p?X`66TuYIt{v~@@ zhKEW(`HNQqKe6a_g)$+EWNXdT=b2Vcuty<>S*1(%0b*Zb+cx%Brk> z6{IX52HH2ly_%|z57GTXJT>se!}iq(f*E%fNmuj0zYpdG@ujY<=}@dto;wPtN#Ym#uuI>>`03J^Z63 zkvrS!nSZ!2DX_ZV;U#Da3#)8>wd8)%(hHGOVp^xRm#Tl(|#gJua>d>Rt4o96f{EmrQ(<(`H&A| zRU87I(G)2OY#ak#C*y z)tI$IL4I$h-slyZA{rp3;u+oBfoF*VcCCAG2FP&Q6sI1mUK zxz^v=CzYS=zL}ymIe6H$;^_s|Vm}L3@2*dd1aISG(&Gh{ptK&U-!OY<5F5L4nGhB2 z34F1aepOQ^)A}`T(RcV;(G)4|iKYSga}b~q4J=*q1?1`PYd_W*U`$57$PjugNo<|1 zWG6HuTpo_CAS6%L@L)~uA;@EGHNtL z{$PeIw4Hi@UiA*EsEOMG`{~+2Tk4s4i9{jRq6i%evi;B!tX4@=v4%W#-|mpnTx(-Y zH3OqRwuCW6zsQP?))1W6qF`Pm9FyX99j{0fo_xs)=O?za;9*v2bGQV(;@%*GviibC zV+_^(?_Acx3n2k%+_c&yD{5kg%f9Hvxag?BrOBPy-^+K!r4W7}8Z#Z6g(C_@?CVw2>#JXCol}*q$B`^|>sUR{xj+Bdgs@j3`rj4&7DNo>ZDuzot z7(vuullvJK2d}%9?9bYXV+4u*acHFchS{6f(ZPiOAGM^kk_QUfxDuWxN+EZ|xO{spP4f)_g+H8Q!t#-o=ieFf4HbY}Hg`82j6!W( z*mnYS4lqc2-7w?8y^!la1NIBZTca@mHlz@NFjtFQ+BxFn0?@E zn$j2K@z!{_AtCAsp#h&cSNvY7X?zbv>z>3s;GqbW{P-KIjigXZ*0T~xK5~Ivb!KDx zYsNnBXdHHkt@#JejZMzQJ`pOS#)7qWRoN)HJv&=mRiv|hF$Mjm36mk2k@<^l{Q^Gu zGL^_IKKSK|9#21XiSCnd;zt!*gDt@$T?t~@sWa!kpziRK^bdFkUJNl_JL)$gHS1TvL?VQUUyEDA$U`UFViX$G9oLbSxm_iqkd_bIi+G>uN#vX0ij)SWoX z7$}R|t#Zt;wkF!51y`sg>!-Bzt`J(u-$NA?xQROmZ`@OY%VYy4f0f#wf?Rk0_;<}< zSBR)|j4C|dHl8TfZe6k1S~@$c~Ok6Y(h7+^PhSUY)(-<&;T zEfhZZ(BPyMnZZsKS!r@2fe1Oje-E>8gMgrB3{g&^)OPf%bl1PZthy8}Zj{hOVD7a> z)o757)?I1_nQabHbuAL$1IWsT|;kWsL~c;SBCR+l=KP zt^|<4#|=>Ep<-tMSCBC(7gi5uX)I z4iEn#AozT@dNrU10LZ8q6`uJF9i4JD>~$bl@+laJ=n9vvsN9L?uuUHKNX{gtT)QWs zpHMqxJrq#evZVB|#UOnMI7l^(Q&Q|4B~E>;Sk(t<$rBe4kdP~oxh~gPxkLoJPginu zV}&;MwKfaHRYJnjQ8=Iqad;~C0$4c_-huM)$@D1dUDGP=W{eMj%A42;1Z!kvIxM<9 zTJd79nDo#;%g+!P`&979uPc0?jN3$PC|%hLTji^>%35-_g51o4&LQCQ8Kk2_^?ij9 zp+`q1DQE=9rYJG&c;+t}bv$3u7+CQ;AN}K-$p>lw8)A2oN1%E#wsc5Q?mWF!*F^Le zB}=}bh&z5r8l6!JqLg_1fqbG|?Vuk-ei_-aol+zuiLDGP@3GvRb~QT+ZKU>x z$vbhN`phbPO2sKltc~ly)NO1|E7!4p&f;9fp^s}#WT;X!hcX*?v$d70*bDA#WKyi% z_q}O`OftS9OtlbD-d4Br5j-ZH!rTt~)m3!RF{N{GTw3#Yoe9^y%o-OysO%`eb$+b& z*!Zx_QQm-yO0ic15`8@5+ma=s2D>Xp3v>N(MIHS(tP+Rjxzudj=w^@yX%cW0 zB-$*1yZE$;LLs$yx6gW!n>M+BOD*?Aj@D8@FAvI3Ls(U%WA8fdt2uB3jx4LOFRw>+2TZ@)uIenA>*qLgJd4PkFC*Sq0$V^;_ZA_Ckq6suT)}A z&KSATh)~au8@^#(Yv9}6HGh>PI+uz}Ow@=>97Mqf;c5*Eef4yfUf9p0!wUSFiU-km zJj(SFo0cDyb`C04w-jk_S|TVUOUxeE4~!q^(&1y4an?ljV)Bn6zw+S2cWF~hT+8vK z=M+R^%5lo#QCt-pU1CH2137s}eh29EpxC{Q_pPZ7JU5R;+sUs}MCsM!VFnD+oyU|B6;GpyuI%)qke!ecS#$7P=Yt0q zWJKW|4#Y#i{lmBrLQLHrn!;CFEF&Krv)(EkN!!g;kxp2$0@6jDlN;n`L{YL~U?<<` zi5Wgh5cAi-62=rr#Cc2X-BP!uWOtJS4xnOA(HAe~8N*|QQ53gsaW1E`;vq7P_2l}i z!a#icM9QfJZNi@DImRHFiekqVZX*2a>@K{W_(ZA%_dZQ8s8uV+KjX0~w4TG6P}DFp z7y4eFSu@9dxub^Bzt__-0PQOkRKOHCH1EFm=^#>TU``{b;4zHHQ9H4+y`|yYP?eqk z;OGIoacCuTQQyN-AiLJ;h)UKsk zQmItw(U_^5{mvaGMY^9*Ew05vZ3~r0;_CW^!Vk8vUp3{m6j9|n+{PsByYoBG?AU5e zqW$}qgO(843t?R!Z-EDT*v0K2&-ZLB66k){{N=r+1Ck&{*}`M;0%hf6C#MC8#Qo^5 zk$Uw5vLUDuAr_I93cBl0J@Mqtz`cv!y5{WEVA`4*~hYXsakuJ`aVe{Sb&ZMQA z`0T!Tib^J=lGdt7!-|V_n5wrwLG(^exp=-u3gEJvW~ItOYq^mdCeo}3+($08LWqb8 zY+SIC)voeIV;9}|tK`?4vW<&YuTx0Ed-G2Uv^iIL$_^OMyA%(7`NCGBT{$IQ4Lo>< zk2eILnFBZ8^0-Z{Xk_@yLad6N&39L`(~S}`k=5-P>tqW#9kqnV#D{RJBQrw;Nw+YJ4tZWn>A8{zlWt?|-X%Msi zVJ5hKI7lB3OQvFR`_n!>^Xh6BWS%_=(c-I1&4WY*`kPYd?{Z?urF3KseNSJM7>>SR z$n3Y&Nq^4X#zmj(uK2R}=c56ai*$m3-~mZ^qv5>0{t-A|sg$9hEAP31$wGqUvNm|Z z!cI9>mcj4u9Oo*?v7;2}$7C~W;X)NF=fJ!zD_&p4K2RrVg1__2iJHmzsm_HD5+s+B zzXd+u)c`@Eo=0GYo|2zYDyKR{Yv4)iS8+)mq+8d%=CI|=lA=!{pA_p_!s~M~$5ecf zT2wsScX@17#DR#>;o}1CvH`Q<4MHl)h0t+yL#Te3C9V3;o~1zTYZoHV!v3yEySVu8 z9PB?j^xt*TI-W5LjYfyov$L>JomQ=)_J2K}GE4n6#BjdS&hx9fSf&P-#E#LIV zE*Fyj4&(e4hy7pH?>}vt;O_s-7qrVRCI6z?b{toEHtTRw1o?PQdLw^1rj7MKT+Sz@ zZB+HfVL!$Eh;ug(d7A*1b!&);>b9M;E&eOI*rFVMjzd@l2$J$DgUjX^VAG zR;eRncm3Dal0PFLR4f-_4Aclqwu({d{2@D#?Sn+1UMB0Dv>$z{0Q<2W4|gQQwQ46w zX@xQbBi%ItWYW*s4XJNUc|DRklk_?#t~Cm8#F0YQJ+Q)#mu$%t%wajn@XE*Z4;0qZ`Eb|C}=)F?GfA>H`axo;7rNcJ7O#^1Q~-ufS}6Zs{F9kT(- z$1Jp0h_yWT5>?fD91<#F~ux7An-}N;b>RQ zfUf!BmaJ04G!jXEd(%15kz1{`@7+}p${76S2VdL`HGNJkLPeAs@&R72ktmw6v{6X< z#HAubX*JuYC3vVRziQ4%7eanV4%~0ako=NYGZ+wYm-gNZ-l6getybzepw@+fG5I2i za33=s=6J@QLGW^7yx!k(SBv(Jxr{HJmKpE%e52c5&eZNHTR+jze1 zy_dXpde&hB^E}tZ<-Izb4vf3h#DDwY!1ac6=LY2Qd(W(AL@%5Z(LnkrNQs2 zG1Dc_*{4@8~I9hz_EZiiKrj?|xevD3d_OWNOd+WmVa)qv`b*LkM&>winIE~b7(g5GY zG3vv%9%M;oG&|6rd{T34$NrB~b2gd5tJI*YFv675_!C#7L}yyk?|dX@;a2yUMLR|b zFvQ-~CUi1kx&{cJ9T$a14DZVAi4y~@@*mY&mLTW(vB_$Z-DA=$cBs`->a%9T_ z1AWH{|!Iqn?z%pBTKJhno)5t^H$A#Iu3gN+jvIm-tY z30Cx4Hs=2T|MgG%e{Abz=bvJqs6c@*fwdf9c4&@j!9v~oRF3Otpp{FSoBCi~zqzhS zHGDILG-sKfFy{DVC-PY15`|48yUpQ|kcC864}dV$|AwT&M2~hcV9%v$y0fiqw*I=a^|7yC1*N6p_OIjL`J&71 zK=*D0?6laV#ieA8Lk|n?yR6ntG1{xHeZEffIBx%{(!D>TmEAa?34^yyM5<^Nf9*?~gy=+)R$ogl=-l3-U01U^tZrs|! z?MxXc>aMt9m;5m2)rG#Lsw&VXdF-Q)7@&Zl_b@%i3zJs5Uj3o2Si8;{G}(!t_tjZ| z1NxPL0lo13e%+f(ZCwE&F{M4Y!_M}+oA_DOMB~$w8~4b`>hAWAPWONFwiR&oZa({S zfO%589j4<|?3|unT#kTSy}aGg(K)%Y(=Y}Ic_Hmx9K@!s(Dfh zw#ODk;W#i)mP;rvcD&h>+XePb2RG{jru^wa&XID)8q+v(id~IPEkW+C;2O&h`b&jt z+IJ&kWpRGmURyJor;xgv-rk({wHvvx7$sp9-t#;47hQePgi|9!SJ%hF#Jwvjd1e;g z-YV&7K1_%C2KrueIY08F$(5@X_ZIqO4-=MVCEh%$hD7VKB-d$NG$z;|m=+%t+&r7;o0&WBmoWn)JtX{Q~#GwN)Cr%&R9+e1&84MQ+cco@hh_ z(3llzm_SOZG*qMDbQ8!ES>r{;_-f5+(a+TyMdOc_RA6Wy69wJM(3e+mKFu_WHzc{t zl!qK80vq~#*PWS4%qta_zZPG8l8L`Pj_~SW;oyffasVEJ^K+JODYyttd8OB#>bsmS z1mg5;G^Kz*kKC?9Tfg1O&o1>B4_4n8>f{69;f9l4qY>f$`0;^_r&e|96n)QeBCK~^E&5F?&_ z1r7~V^NqMP@+TD-GJa_2%ED-EoH?kb;@qUAT`QOZ{S5_l4p`*;Jfl0(1(>~1D++1%7!=2DdG(j0Ug=CJMOr3V3cy-$x7h`mFUr1(8$Ra zdBdO6J0n!ujYb*C)7D=7x*k>UfDiHUgFDcWyQ^p3vvEY5!Tt?7Y?H9C!%9XT2z;Kn z8oH4zr`f@-5W>&+<>6K8iXAKo@P7`NYZJGs6J!EJpkloZ-Uof?XZTGwZt3|Em?g@# z-1D-`pVj4ctiL}KU*fR>Ys#b6*?^i`)Br&I1lG@7C_5cZ2pBFUw5F#rx3{$E@i#q> zLCp1cN>pnSTm^?X#)s+EkyTdCYmc&j!<;6BYoAjcu#j(um-sFj)HcxrPUeV?$8)F5 z`Sbg7GxvV=DXbGqRIc9@cVwS|(xyrp#zH=l4#gK2j`Z1dX8q>dgN_QOFWSczTW(4G zLHS>7-)GuEg%$)n@w6dCQ>miW>@}RE*Wcd|DKc?%9+y)gXc;iuRpT$oH&j)ZzYyr} zuXXnaN07f^{|{2~Afw;U4fsfeB7dp%W;pO}^4xMBuWk_Kc~qc%*Et17rp%F{BC5?; zI?kISX$k;n%quA#j-RI|I>>4LgL+LXT@ni||H7+=VsA7uG}4Jk+|Vl$w^r*5>h}rC z616yN)XMdr_k!|bqhM|drQ6%8EQuPi{#qpJ)-v_0`OpZd=VP_1>%D;d7K?XsEPxC% z{Su*7a0dXe%m^3D27%z4peOQ<8F7|dor2ehsqp;o_B~pgLt$Nmnc@Kd^55E+4|OhM z2R~+>UXcuBT{&WFa(nEbXaxVBqgjB*DD&ScWOP<4LaJhd8=`+Mymi5St=~{$)l7s} z^Q~wb*Ef~CP~)%2XnG*qc9B5fVcS*a{)(O#GrC9()mP>0I9cARXfM%=`5%zof6cIe zqx^To5y$&rcGMBr56PLRtcXz;E9#ruKhG zi2dJ5o*moSFZ;A6M8&6iG4A3(Gr1qmr^0%19v9w{^C~U;7u`YDm5=fjXDIBmuAVF= zFGL_F?9_qJ|99XpUU$U~SvF5+NJ+w_X+p+i>sr^QKUc%~tifzK0g^ezQcY=RYd`sF zLyo-tbZ~Di3U)Gk{H|PycxI8=X0SNkJ-P@{PCO{|=oXE8)Tenqq{c%T^nt_CFD1eU z?is#0F_3*GxG|sj_mJdkPd-ZFITY?Ihpjpg$f*&Mj>cxD(X4{Ppsn{3Mk_RDH8?X~#ITsHcTEu5tf~b=L0v%;BwZCwNAArEhPnv_3 zUHQ|SQzpUx__=os!zA4kNihNZA!GA4j%})Mtkx$!RG8>y?v*1f;j3=$;Eez^^Mg^% z_QPL-c9p^}0AA@;70v?;%FBfRXm?s$M~_jwRg>wZ9&;#E9Jn{-{gYV{&AR{QZ%4arB0VIi1w2aHI)r;Cd2->9`gz~ zY!Vd>%J=)bm^c)=>=4jtAWK=jdtJHKviaoR*5Hk#`1 zWEU>!JMKiggIm+9DH*&KimjT|1P|8L?02GzY__~Dh=Q>1|83O&w)=IMeO0Z#s-1?Aie2zaGZF8rn|W@D2Pt_ECr;(w8UUjT0)h+lsU zA$agnH>MA%qY`8f@&`JrA2Jl;b58gsdQ4^Grrd_$6OwStJntV~I1d28K0mW;%FN|; zGS#LtyaQF*&O_2wsk}xJB}y~=p_*i7dvJr!6!gg3@%X<$lTe9kRQgVG$G0jn@LGd6 zGJ~PjA6tWp_O^)}5j3aJD6omPr{Yt}JAMNnG8ya7MR#uC7f3t%`7wC#W#D0>0P6Ght?t<3hq$mezYKUQ&X|z(Ion$)gg~ zG(@7iRGDu;)tBNG(%s`+VU@YEc3#Y=pFhN!S3~Q}7+RGJ%;Fez9^abGl2ywzq{m)E zY{6=4k?VKqb_*K1>OU$BeVor|+4m9qYLI*jcAZK$*xz3So~*Ma==gfjZ935nNwJ!Y zcnYQ83aQ&~MGA^w4Oc>D|Jw4hRtiSc14jV^bLyQpWuLM+1h~nLi$;V0=$ti~ah zXi68>iFN0v4g~&|5USFy^2xmhDe(6%Z&^Sh9@i`$cKj{xS8XK!%j~y`6FG)_5^JmM zSph%%0_$4 zc(T+!M{Ega8V}zAb6ay8@{uNDoFHJO?Q?4#BUSO| za2kQcha}L4p;@fxr3xzIf81wSv_OJRzO#rHY}vGwmxw=R>|{ogZ_7d5B`|}O#HWF8 z@Fb17HC`#kRmeDXMqY5Od$`3(gSFOp+n2oI-ONnsYYgNyS>#?+zO^Q3RR2}+t4Sv@ z7Or?mGbwMQ65!cbpA}zt)@rZsJy6O*7Z6~DTq#ZIQ?I#l$zL)i9hsmn{nkQlS2RcYKcERz2aJ$gGb|}?3;8IHkt2so>|s- zypQbnVp_ujHVprl3LMXzbo5KTWmDT{9(ZWKD}eI;8=U=%y_U7&7aBFwuvP#9dDtxM zQRZeyb9pW+W$BIip56jk;03@>Ow>pz<=eo6wsnDw_>k@$X0rWEY`=+>IMr{~tGe1% z(rQB0i$4p~Fr%S3XQfSH{VH%Zsj(vY!t4*)(KhxlIw$-Q%|L%Q&9u`mnf|(eZ0(8I)&@k7bonMSZ}th`%ZKl|J)EogZD@s9R3AzRjVrdo zzODBnGm{Am166RA|CV0a$p`k$Sk~HQi(3Hp#E%>=IX7PNKSp4XQKFj9Q|U?_5?j)Uv* zds6)PW8>ktNjfX(M~xFy?N@yFr{{@8FZe^;3Trjztw~7oQ8KVl_0L7Zf7BnUuYbL~}=l_jj{x28*9QHoNIIbW?&njFPt0=v3&ALKmTsTG% z?*-A+?j#8>p;XQGp*YuPOI*yADVXwL|*CkeY{RnGsUQHFSK{dg3v(Uu&caX z(GfRUhO1li!_`d4Lr`#O>5@k9Nn02ib+Q6JO--?*T+X;+gU)y;NDka}XOzR+Ef8DX z!%rOLQtwdLRSpiVdTi-F0RovDp(iCKDR1l+zr&9wU@K{t_^$bkhY`;rH57d8(sqgN z&2yMJcJUVYY^zd27r)1PJhiP{5|t_e5KRoyzsyVaN0Weqjemj2*QKR^izm&^&6QrI zx@*Uu-^N6Ntt>yYvFM)Q`MraKK5^cQ249ZN*k#*LP3}%_7gt2z9BrnGv!8p;)<#7Y zJDy?b!_Hg0e1%*dpDb~3E0q7Xg-uim68e_@Y3^LB{39c~bh$Lsfq3RrrvcAX9x4np z=h$pdm)981u84YVOoZV)b>+5^xT7{NQu?K4hy}ntSLU@v^`dO}*RNkU0Im5>s3{1& z^gybpu8Im@74Ca=g@p}Rk)0^{Kyd1$sW>{2utGB|LuM%f04m^XRB_Tz0SkgZ;J+J>u1R5tfo|(XBn9KWh>QjZ?X-W z?Gi0J1};Fwc*d=~58(hG_q@;ukP$c)FNF;lo^ww-BGDYWr{yvy4iJ2?D3l}m zOh3@wF+Oax%Yyo>+n3(-*+y#4d5V^`{mt{$%&?Nay}~A|3)!3cQ7{J>?z9u;X3U;YX_&_-<}FUc9tYNW96h@2mc z)T7SN&r|EL@iqcBr@5)#0?<~-R||(Dx`cWZ9XMfyZqvT$WULR#j@r+~Zxm1v#chTs zdO>G`NMXz(8x@}N*1G3z5}>zhif3`54!iu|T&Mgzl{HKyo|vrW{7{n135LMR@lE;xt(77 zCZ1>h6JP7Xe(oH(T~b9aDze|IDiTxYUEztMLwRiyGav*n@t3tj{2!JOkkycPG9ZCL z8Uf-sotFMr(4-%j{nQ(FBABX7Z2gPR9E1oLj+uK-F=^)1Xl#c2)u3TfsG&ijYpmh~ zPzNcprmSdUlqi=P&e69b`*z7;TGK)3pdQ5^OI_#^r(4xFM3c@ijShBI8T8$1HXDSl zy82-ovVbvXLeeaI8@O~7Q>rX7SC~{FdNKVo0ay5na8XrKK&=w~#JNWyr4A94s0P?p z&o=1Q%-QJjo;-mq-Whi++_!=Mw&~u@et&Tq*#d#wZA+74WP>edP5U{!38th2FXXT|falNHwuUE<^MIx_r;rnj!i zaA)T5+!^<3Z5UaqCr7G&qB*+?M2RV&TJYPhqd;NEnzfzi78gYp*M+<_eabwQ);q2$ zQHlIDT12rH6>!L&!}4FCM4_tO^OoR3jlSzM{&guuU5i0!`HD1p$qml&f3g!5k3$le zznQ1!qLgRk@}zrj8p%}5^VvAWuXMg?yXe@~VkEv$mr!*(NCJSb`1R+22+JY#l>^TJ z0ra#R`QhA_eV51p2yB~0Tbr5-hZmGs5T!;3R7P^NPbdF?ublSho)t)mc3Dp5WV2%XN?0;4wH2IoqnZWGHtco zJ-w;mr3H7JK1OVZfz)A)<~DQJOXGJ=vY7Spe*7^(4TY;J4Otc9>v97K>2!-%JiLg> zSam=AW{@m^6#r$0yd|gwCcz-i1|fc;(eElG4J>z46#|2t)J-&E65eZWQt{VVc5uE_ zGQn(7;j+jt)~q>1o^|ZjR3Wj9r8D*FR_Z7dfG|B>a5=%n@r4UM5AXL{y;kk-uKD!N2_Q;@EDME5s7g)R_EvvZG&|Y-FFyCNMN5ysHA;A|a&ar?RdEAz-tkq(1OqU@~yQ%t` z+2n7BOGcl7U%!CV4&nE(%Z^P0aOA1j87M$;OnTAMRxHPpeH9ou*#Ik~K9sPAcwjH9 zfXe|-BtDUJnNQuyKLD{@25?)C#P!N4*G`PUyaA(7#adf@D7w5>_#c2;^Gp#D%Jf8d z?8!PET;4`w?r^(g!TIX60u}d?!#l5ZTRoP`s><|oj&Lzwuu$@h_rbK-nU;Rf5q7aat)r*VL9#tUUN72ef7uep}g&7HT4U3C0` zZtRzuFzYLGuJtK-yfnn7OV;wD1;OX#9RDG&4k-t12sBeya)v}9AR zcw78bZ%9GVZ!KJdTowY|hh7GnYN(7toUo)2^LIU$#y%~QlQN>Eg0SyL*ou(V#SH;D zOKb&Tl+Y)a#PF;yh~!;G{*h68xfXA!Qz8t1@Bl0r(?uDQ^y5+mYUGbgZlHoT!Oi+J zlPOQkhJF{rwW`*~Ut{R67Aa4NgvU9pAM+KCD>pePmunxhpV|)OcWa{K_-u7Ck1z1< ztlJ48kW`r(Ow~9$6?kr?e9EUTdAEv)>uT;DGATDe3?*@>Dk1(x-V%od4j0Dq8+n(< zsBEda9RMXdLnr$>`;)QbjwgxQ4=#G0b>@BfZJo91QNZk4*9zP`oZsh8P~UIRRq>DC zaE~<)YMdx&*Q^Kza2hl7kb3lOc)dh<*LP?&&tG&vP#r1ckkC!RASDIW1+fcGCxFtxPEn* zl`wI=Tee+o4xu>5X3BQa>N8mTCV-xIZl=cU-^UEsEHkGywn_nzW9FBz!_( z+s7fg`7RU{MQ#hBVWLnx!<5e7TE|pvtB0Z?jJWGoF8?G*`$mnra^}XXS@A!lz*6shV{q zR^C<)2v+{WzP`gi^|-)!Le57vQFDYGdbb19c>M3*=kB##MxR~-zIMp@VI^dK>V3Wt zZz3YJ!p%K!-0QZyd?z zqpqjc;{}eGZ-Lh@+FvQ8k8phaY%W+xg?unuD0VZ41)URvs#0p{MXA#fcsJfWbHRLco9Abx%+U!!+XPbK<|K?5EhP zrp3{}22b9UPM5qyC`2q9kBO>OYFo10X|>=G1XvG*EgE(l{p&0M|3;9Bea=46Fz@lrG}xc275Rq=7(~_03e(HZ0rgY-zXg zxb7Ifm`a_R@bzbI7;O1dj^2lF9XCoplIxnCo+SkMKg%FthWTD!u}XSG@K$xs=hE}w zM}JtEcA*#l|JDC@*B})x{8!DAVfGT%13gpoRB_T0xTwTTnd-G3v!&|Zz&=}8Tz~#h zet~r1$AX*)Y#ztxlLDBIbCrIG4Co%58tGW0*U=A5*fk&?0i6z`vr) zd~EkZOx-K#+i{||A-jz{^06FWVu6t+f99MD;(6J1A&V%!T6`4|WW~t5EPB*~Gm9P< zaNEt9#8%C5wFq^qGb~5=@FTgz`i0x>hN_;mY&!J!Q`vZphrO|grEv)oUF*?u?rwza z&i9de77v^{t)WlYDvq`mH8`dv+l~Hcy;GQB>#MI}QyxFaY5Gh%Q<`vIUR1w}2GVI3 zgn9nZ6iVUbIN{Kw_l6FB!|r_qF{n?rR|TCePv>25%^3hBNUi`Ql8p$~MMwf3h{Ewf>wal6YSQ z%jK~!x12D3k6+dv@B|zkNc&2C7zOn=OHkL>7_&y(7u) z!AK_HlMu8AMWDD$`yb&Xy{zK7F4Lxof11PANi=p^Sz6mY5gN?{mbT%z;y z$!hl6rMo6*PVQu3V^T#gP0y6F$RE)0+i3((<#Qk_gjamtC{IVY5u4xe)dW$O)%xlF z*_>M5-|=o)(Q1b$Fo^X)pJRc zmh=#I11)1Zj?GIJjeuZ_T*r-qhk0Sr%#1Tr^F$5+F#5(Gakt>W{TAXr@-v?Ub!)ln zz$I`dm~9H?*BE@O-O*Z0L{d^-5R<1F<$?PMWT*&`Ot&<9_a;!S_$S9B~&>quWGID(SoT8Mg zadC0V5MR&h#)V2uQIsIKIH(SV7HIRj;jRsaHi1?5kM4NJO$-dcN*89Zr%G7t7Ob2r zKBv&_@9SH(biQ|P-?k0oR_HLmu2W)m9|p879No;EZ5v&GI_ElA9OmK9^x`3AmpQt7 z;mBElv{e5(5~Io-P06u@QJG#{fz9$Y!(i1tFZ^m$7l>kg*l*vzefMq#3y|GgD_g-# z>38-E=<{c{z@DGqrd7&HIeQDeeKMO5^eQ>|#0{=jNIxjMUDR47c#@OV1R;eIrC$w8f!#@!}3`NlS5eYm2+Pq(E^i?oiy_ zHN_#gOYmU9LI@UuT+aENGv0sT9ru3k7&l{NjP=7_du3dwU!7Xo3b{HYJAsE$#iMF94p!&|`A~tT&m^<*(+ar$|2HK>dLkq&AZw59W zDX-}6lJ9PhT9OO5N4yxNn;tUAc;3d1WhNH$L1tBBJK+{w2c>p9W_HX}7ZTDo-C<#2 zi+AcaHsui8B!a9#>xS9c25T$c)J1aWA#&s4NO~nSnNe0%l^FG|Orse}Qd++-Z7XM{ zGMJY7%J#8f+Q@vbXh$UDg~8O3y%rhyG7P`4dyNJ>Jpad$9O2kp;YET_U41)`OZMW- zveW&BJzC`YW@$$nNW+oj1y~#(|F*v&iC{jmZ^}3$N|9silSQ|`Zqz|50)W#?OM1}W zSjnYUhhW)1z9B^&9V_j3^f^I6K{{#n7R~98K;Nu+g(>5@mOO9 ztqCL2(uVn?Kz))xd3pKtNKhY&$RWIUlFh}+JGAUgss3)1c>}+0-Y4X?X}IK?P!z0* zF-bQ-));1;iT|*6p&ZFj13k>_6G&Yq`$1bc^_};5+qWG@;a1Px8G%-C2oR{Yx;Fdn zzJm1dZ2#YT${gh**(de!IWGe`m8@J{{v}beGChXT#q_>A0Y zxC)`&UdBwAs|jWtaVn6LlQ-)qyjT3)ebix{B4=tfdB-fPJqmStbF?#Qa8GUJbZ`2s|L8zxL4*V`j^FNi&R)FU`c%2{Ujz6n zX$5PGrI9nWHHX)7vdu%)x8#PNmNt0so9T?7HRf4AK{dBG>A#B_9;^`$vm*Q*drRMN zh){~ID`vnYhBSt~J@?8?J|Bt~7z^qt85bn?(07ih|M&LyrxvVoh<0^r>>-zeu6DBF z!tL|V!{et~3^B~0Ta;`#W=!u)qaZdk^kZhpLqi@t*3PYF*nNiM>O8eFYO%~s zXq0>4sJLN#MTZ}&`GUQRd-fvwsWx zd*!>(=uEx!(^>M!#4ofeGA-9VItvPj)bo2hSDIjrM za1TUGXKQqXTyD6I?0`pXhi2wplvjEx+3bUTydRliGdeRXa%o=Z9nu(NzGc>3^vNMM zm3Ho(;9Xzrn8ls5?HiMlduHn0UK6f+SRXzK*-orgcY;1`x?O+@DLZ*x{kr#i8fTC@ zD5&jdqnD?dxZ$i!qJfQWppF~z_u|YPwGRP7Ou4eBZ%T>&AD31HTfjF__=QUcje;Yr zF3vtvbMJMGE2qNc5rd)aneLo7OvPxZIp@s6Fv)PPMQSy2H^p@qf>6`IluoezbKJDXy*=5<VKW4^wkyz#Ojh&}mz!Yl|Ygp>c|TvnwR9x7!A z_q}`k5rnC7DP5MFy*!Oufq=GliCnGt2-LYEU|(*3i-S&hJFYG(g;a6u+Jw(%3aq@+ zA`9J-e+=$m%!(r^LWwQiZAibEvH3KRb;~&)C)K!5?9__+EMl`aVOdn%z{Lb)*A}~6 zvwY5Un;N6iXK3&3(+dd-+iFAleq{FDo4yLCMs0NXNrzQUxDc=G^lF=Uf9Nrq18EI} z4_)V~iy0KLdxR64d3OhRDxjQ+o@nnY?uLW%i}iOhH2;}Gg- z@HqP3$dr~wE50VlYCGvCdIamnEyNkgH1juH3efVN341t*GR zV~y54b0opbAAygx&K~ezHVp5$qs~%Xq&!eD(s|+20qwEizV9A+rktD-1ndB5gk?$g zj0o0=`J`csfw^0=J2Lu{N+_?t2bB$kp$t(CvNM9}K3k`xcnulE)Pw~i(kSH)0gk!_#wW}%Z9Jg{#sLuoi# z!yWhO%iSg-OZ%|AhNslE`C>t8C=@`c=}XZrLKBUA0wSY6xUzaJu`(1*bv_y2VU?%7 zrDEV~$ZUi2lFDv^hjXTnimFOeY6bYQWS8t5XX;F026O!GP#CLOl75e zNDOQ_LlKp7N&L(i6cQ`@II5a+A%6`?^Ap%b%&kR~Ev|BpYuO2~vkz(kQ!` z96H6r5NbQ;CYDtAQ(OrHJ2!RD5KTVWC728U+-rrm238mIg*O8@o0Zkg))ftxBc&>W zNuMr7bB6W~9-#w#idK#sqghEc1IFE%J<1tu9iMMrB()4k;_lVO)fe1YeBN*9W+8}h z^C;k07rn15H$f|#i%QK}Mbv6{g^LJAdx(DL5KcZxd_3ZS0`~4AgQQtA#3ckTVf(G# zMV`Zk?7vqvVD+&N);gd56I6Ndf!_R|DBk}Y-EY1ByZ;Sw14uU_%=Q8r@8@8;{;96X_?eV(<$0ksQhy9*?(9Co*SuX{3cEksSl$n;Bshh?dWq?Z=(^chL30Pm#ELAF16wuPVqnm*?N$mW$5zODwmRs`*{*3>6nhHs$tx?|ISSy)=`?ucWjrWgvvrW`uh5S1e)3!hy07m>IQ?# z#=|4N2_d{(%6`W0I0bI5@9Cib_4%6t!DTPXUilEAlD+p*?MbmV_wN2u@Z8J{5qXhD zT{M@a%Ug#pk2~=H9dmqejJq9p@Ai!V>5W8gGuel#fX1~BKKoH zbI3hZR8$r#*jZR6&3Ruz!>?~VyfnXjj+Ohe{=KbN0M}+7PFqc^I?2jJo{w-c zPYobnE8T_DZLI)Gc_DtdlIr{dvo~3S8uy?;uq86k4p#Y6d9rl*wThdp9HUH#{xS?%zK(_u?U^p zn-9S3MUrr+JMHs{b4$W7tF9kUU^L$+{E=0*IR5DRbqBh#M<_VKB&?$kL&0%dGQ*R% zQ)vyZ5oB+3_h^0qyeyM)N@nk>n)_XBU zm?gS)sZJJm^uoMXJ(OtnnMY;#beGD&Y~=3LIb+3Xhh|6 zw1;^%DK|7 zxZE#b{;OStlWM0lOw*$9CFu1YhiV_zugJAa7@cw0{I|mpQ(w_!r2IHg&fysKF0aO2 z{_<5Tw1gw(`~^PwM9-KcP|UykOET6*b*g=*d)*h2UdF1h^A`l8M5Kf)O{)XH$C=YV zWUkPxtJ(+$hlBU}tXl8@$m-+nX<4G&w6I zUE6xZ|Jpnas4EMs-ygnq4@*oKq!fE}8LVa5#MX20Lh~2~U#~GQ<@q`q4Zw}#o7eB? zxF-6E;T6Xxju~dB+Awly`Z9l+pGmPnRQc@%p|5vU7|v--M3v(al7>cHmEs!d6F=F> zlEv(Ldr1O<|9zRoOd&x9XNtr{k}8i$JZZs58%fR+xLmu3$W5~L*a4q`aGoE>>~?Lc zMqDGy;(2MpzEL*g9#%wsB?<{XQzHMhk!ow%DN0suFPfKTe|!9{-oU<%zX+q`SgQ9t z@;Nsi4bxprUKJG!{5=sVnt@QW{(Q(HWAe2dWFGIMc52VV za7_KfMCPqNPYfqWU5&md#EMbmE*ps;|9b0s;iP=m^I=bRv!9w1JeFn65qk{tC3WN$ zviS9jn!4!Ew?46>v;)P*J{HgKe*Ka^F`@G|e{%OS5$`w-zWE6G#Bkv)gZ%m(F`2lS z_dVt|)JqL;;~pFX{bd2CpPdjlNXv?6PNGbIiyR+KAt+_NP^AlPMk@}R%Y|>KT6ZGH zKv}-ExGwP~Bc6O|DJRHSX=SQ&6+gl;9}l2VYNhX5gWjh{}q z5#q+^`&0qPp+|%W{J5|uJowkIuk_bP#79~Nmv1YCzYYq^wE-r`USLNlm!c6L36-n( zLj(glhp83HbPjJ(&HotQeAX6 zMN+k-q!ekWNYI_~r+=nhVj=rL5W={`*+|HRHK)Zs%NbgvgNGH{lBcQK9w!=Ih%Svv+++h|w&is&%W88-*<5g}=h1)nB?^(FChwnRpG)M1WZLt|+L*n`UsS+!k89 zw8kx?jRTP#uG9c^ut8>D`^OPm%6FuO{7FOcW(>WbBDYxdonJ~)+9w3hR%$oi?3ysrR`@V`Zmy3XH?3X+R&-LGG{kvT ziN_uKsbqSM1{1c;$_H1xu7siNjI?XpPt1WdmIgE7;p%$_V3fc#x$O#s7Ksjb6NYMD)-`gusEnEIWE^y-!R9L$orZO>Eh zvlzvrOpQ5?B^?*z=|VpQ|*Q~PXsMuH0*6*UaX`71=gUqvG?lJ6wkbBIO1 z3xa*lzFRq`Ypif7CIRpiF=rZ~p29Rpy__!0nc5zeY}eG@;ug_QsCrAL#&Shs9h3ej z!s7MeUUNn8Q#u za1p$PEuX=*8e>MfVq48miQWZRojME>Z0AI3OWg!Thgs=+o_TGL-R}NMSZ4tbY1i^! z0P)BZUREL*ZZh4r%i75Za$7v@m-}#IQsBz$MB_W{JZ9>j?SD6B9+Kdl41wBH0-r9t!2MZj%@@?9m2CvX!*(p!n>ThYQ)YQq?xB{b zyW8lnh}FDA>vy4}a<;9BtYg0Wl~U@`I439iRt@U=RB{sydg_^|ZEB79MbfF>uJro- zlTp%5F_&t~L`dxp8=G2wUI9R6k|k6yiY_R|lM|fp-b;>)+jOLpatmA`W(5m7s*}aM ztW0QaQ)|gQ5%7AaEISw`unH+=Ea7CnwA^YD%TE{nGAG&VF8pLb74BLO6x%`?z>kt8 zK;#Ss09olUC9WQA!QlAsdB8qN)>YkR2hH2ieMqvnfa3D02coSuas#`_3Q#sCP8}n3 z@MX}0O&<^(6nv8!<$H3w-jmcvD)8niQYO3wJ-k<}CK^wnzB%mU70f5B;NgO3iDZbO z3z8bN>$&5cqaf%tSgg18lGnZ0BxTM-+aoX5a-u>h>fv%3h;?~)7RP5rhQsVvViaWh zqVb}M>BYObb4lqq5i=ywwmP8UJ5!uxztW0hOZfMhv$`-(;U}Wy75eOOjwFr4m~?$l zmtcil6YujhyB!jLx=lO=EOO0?AMK{LK*0hx&k`jtq z!ruv(HQUwV&KNSdG;nobFAR|zq=1$hclQqWqPQa$YHxLfOppihiMg2Tu%tQjdref3 z?a9!)+I#caR7+jCp4Qa-x*qQ-X4sII#y_M9LW#Rm!NHG#Gmem{qLH)n5}c_orHu!& z?)pz646S7G%Sf~1FmN*RT%x+vqQ>jC_(s;1i)TqzjrdgZBPtTv zw_yVEzK;_ZPzs|!M7S%1ijERb3PjhEYEuZ_>C-yKyJQ2Ug5FT#yZ4HX%^V2Xkr&)t zPmYk74~?qdSq$cVrInlr1G9|^*%kavu9GTgKaH2fL*`bc@;4~ z@i9<0HS_k{`QHtvDb}4a0%2a!%?syu z6X@5RAo{w!hVZoK#9&WB3)5A|wbOQy7n9sqSPddiUGom9;Wrb@s&fTBcz2k?%biPeB=sDp9y!%=j!iEX(kN%IC!2oAgz3?~X%k zf;+4RuG27=cafua-7*)~#`8QNjm*C+7etDuUTk1TLzg(J)ZfMPJUfR7)i1SD{I64C zjBUqh(#(C7Ll?dmHoZSbsmVA2l~)JB6Gxbgc;=CX0r&q1Lh_;Sr<47)gU`KP3@q;E zr$~_&`J!p2=z@a;?2Fhc3T@HWwGEe3<;k~ zkqFhOk<8ZRq7YJ{t$ee7`1Bpz@}PM0-n!cpw|K2|YrLCjXB^4w39Bt! zaoGoE8Jb_6Cb>IQl+|(nE}ps%g4bP`F{-`tv7@0?MK?oiAIf_Y5mY~y&|YXLqf;nv zf&bk*sQsSX_k|0n>GTG4<#T|-6*su<1KJEiMkMT25<`kay(~CH;L9_m5-9>7z4nGO zl3o#1mpeJlv&gapAO^qw02^Z9b921X>^JmWd#BYFEl*A5!ryr#sHH6FoVnNt2*{IC zNHrW=;zI`1l+}spn>D69t)_jr&2A6lJOK7-cZi$o#d!ySRXFPpQ;r+!m4Jho3xiB? zRJ%S?hlBXBTtU!)a^lS#+s&Vp@I*FGn^(F`rijF;Z2N;SPjz32~b z=K5FzG9lA1d*zb(tBe=IauN{=yJLw;=?YL`5Vv~#+?ky0emA9V#~#TXtnan;bbyiS zm0U8Kq}68v@*^wnb~z+uK#`{QXlzBT_?fE4(ZFrr?rOP<#*fq@e5Qt94hYZSrslt<(L^0?P0tUn1nRs&HaFd`#h6Bl}3Pc{95S!)qP={aRcz zr(Ic=`8`Wr6UIAHK14$u+4L)RhYn3*KlokW zEvgfcAq;YM8V=gt;!V^?0pwEObMxCQT1gX2+)ka~UWn4!KV!qx{rSSG)B-eSnUliD zJ2VcZ8Wk_n1mbRTrIG0e;m$0Lu`h!-Sgn6o`QBf1xl#zPiS&me+TzIjy<*L8<`>W(_uy)d>#ZkVlzRKt? zt%_ZAa9@`?gXydf*rj>MO#qM;TR`tInP*0eD-L0)t{ZNy$@`Qs9c;)FxxWoM)*t41 z#Gr5BD_tILMOvxQD$#4-GC!^owzX&5kSO#0b(#3xkQjD-V#jLRnRP8l@q%z<*;C>D zO7CO>0&VXC|GC2mfmhSFLXS?MVd-aD zz7`U`Bp>u4d#0nNjazBb)7*JOiB?iuyIk)R1$gt+OqQ&5P@a#1fO$(sI3>d+Gg5{8 zdE#hFR$*I!#xl5Ecs(T2LfZvenOLu$F#2sMy4;Yoqj}G_VaK|myaWVp7O|9`CXk<& z3&>F=+)lSe6OV-mwL0IH{5bCjwFvrQdyq5sMsZ5rlH)uex`=T4Lo$g@RqD z027?INH@j0=>42hSCd0#T%X-_Ac!_`hI&aEYNn_1%u1}|-nC5X>Jy!wE4&O>1X%c@ zj?x_l2OYv{4T&>FRB7iJhMsFuA6{&y8Re?e5VX|2T9p(s8#S!PqbOk?Wo|c{o$h4u z_`@&GmjP`@f2bCx=ZGJ*(`xyAe&D}gL})}b_2qLW)O+n<>*sU~^5Y8vIKXa6Huv6` zLYhT(oEKbXswR*Rfq9z{M_h_-9v8=14^u0RmB4W>07IQm`iBa6ned{4MWuw(%WjlhA2mD46~FLp?24mn+?T~l%j3tI&a`^1#?n(6Srq{)T z`T0#peQ7_!E5nr1o=3-%y+TH>5Rbgfl@BQz&`I5qBP~!JBo7xbB~F#3ot`CPy{i_m z?8`~w-hjmg6|&+A5NDR|i;LzK#)j-puAKExE8e(T*7)vM@FXQa1mNMDyg(1tSV|4+ zzPGvj8Ly0U#oii~2$_;%TDqRj;bvjrTRYwB!u9|Ua*B!B%E_1?c9xlFd$Hsz;|Oo3 z;iZAC$V6{DY+uAos-^qL2-&*x(v>gXcqqge9n-;eU?bPkVlSSazXpLONrc{>TaNCG zN}~!3%met^2?Iut1ht3-d{s)m$h>+KZ74S*k zNE>-NI(W`mlQlW?1W{Kgy*G zng4AE(tulzT8lfuRa|y`nES46AcK{Wq34>|7jk58%m(yz$uPq(E@F-CRH=xeucYEC zx(zU0A0K&D`9V^S7Pk+FehEWhMPJyVnd<$kmddYsDv-s;Aa((XkIE-Uh@Nb1=WcgI zn*zBG0eIc#OIC9n8kRwgt9E%gEo;!QzTcZts`VS>1Tb)H8#r)P7neB zKuvwyx90On&$UO~WUPwR6G~_uVjkd!YKVY4xujDVdsjG@L@d8kPLSZapd zH=L^w{`RA5%5byt9On$Hv>_`dnnXfrCPk82!E6!ii(&TKGrF)8u4t(bp0yL!BEC2- zGC%q{TjPY|^ybD@ZSqfqGkP#VDjBI7oObkE{X*wxG?v?HGvGdWHtkz~TJMe8YVo(K z21M>HoSTNXI0#3;7(oSzERmd=Fl+ zgT5h{+&61a?k!G{Jnvm3!Ab5A{s4FX3q{J562a;l;PP3jsgXy%<+M-xeFBtrp?vlr z*r(d)*7hJ!(vVu*=i?+|<)?z!1YpZ`hoZTNL`b1Aq0ddo``0x@cv zn;C6IO>WLv=S=hf%)x>S$9tdqKGTWr3_6Bw4rU%bALb$cQTb-k(S)Z z?e-|;NI29<^MWJ@i>uQe0;Tsi7P`tfqldE4FsnF`cu#PjkCoHdds3n!WjBsHVz09q zO%rCov8J+cyNivl_V{DKg{JG?ua8yEsIjyPwFTp((X^-dh}r5_lwJ+55*;5);qBRX z9arsLY8H-aCL3`t$p~Md91~}vQpHU+nj*f!Cgg{b5NzwbEt`Lw$OT?apL){sBpyy% zvS~SHYR-Y~L>}4iG<)eNG2YumopnyLd`Fv4S526>`I+0_IkX!IF>qYiHN) z#dh_EU&GAB1ngcWXH1PVXU`>4>g!dylrAFHxym`279nnliwA{n2(gLXDs-V76*(sp z?GL#v!=%{5zgO~~ldK@&jy2EcL%}H|N=t+T9ymD zc_;bBOZ|^7e>ke$pcl2;Ci3eXl3kZxM7b$lCc&?aR8p=LYnlc@cSEYmZzPS*I?6b~ zQ?)ltqT*F&x*oA5xn7hGC+(%@vzS=LrK0I)K_QPerqs<`???oEwO&aAt${V8iFboF zlJUR!J=Oegdd}sAygCGU_~rYi36x(D5Euz!&eZ#wy!4M!AbXQt2V>EnD;(?LTJ?H1X>OYu{I|mH%xQ|qH#;|qg8vm zo0$ImK=No?tp-uVC!Q(Ty7n0Ui~B|ec{5nhvudN*$E*N5cIyt%wo`!r;*J^b_e8qD zsH%c{Y&4VCQYFj1Xlq80krtxjo-R$Ewsd0RoWLQp5nRTQ#zKp279}&IK|MUUqU^p5 z|ArCeuHM36M<|YDcdI9O2^_H&SFkK#dizcusv1({Bv@G&3Xo!-v!mydc0wF};gja$ zzNP(=7OT~G*W~TKKgZ;2aNE+8JY^-2SXF)FoGoBr{_RmDlK{C?`^ks46SD-4iTbHl z4o5zZ)=|_6bkw?i!$_ie-^w6VnDsn;+HgL`tLQ+ccW`;XVa}}WSnh|tRvD`2BR~I| z`K;wFjZ(T-`9%+s&I={$Hk6Z)h;+&%O&uR3EN5Lb+PgT&9lRE8zFV@5#1qPBzcWib zs)rfQF#%d?ZVgvcNR!%DZwASVr44(FU+ zXcQh7GaSxbqRM)E`x-o*rfApx=Hk*wvaT&wyur!KqBj3>KPtcI1wX|I%4Z{CT?}37 z)A>4>d)~L?r{P{EetsKDe$S7nP@>DwrIHHTg3vj!GbDS%Xp&1fIi;GT+ktP=-sF}< zW1;fJ@qn^s?@Dh)qr&I1nqcCVQgi4egFK4&Y7gK$r0e2SiD0h*r2bC%tD8TBwrCL~lN% zWM71|vO2XE*!wWkk(Hd573$?5zE|3c-VzGTciz$N9Z;4QwmD1Mw~FO9;wZ-yy+cM* zk19B67zj5TAyd-vkPa-;0HuEfs{KlFe+KVPI-$acv<5*ZR^Ou}MDP1+kh?2PAAmsELNrY|xobCEyW47~7@1F@H zslH-ggHZ0Eoa?qvG8n5bc(zNH528 zBcIKTVGv`X?fB*}<_BM!`sr>IWdfI~nZ)=45q9S!$y~Xby#2dN@6ulXRa^6{9 zCx0BS9z$7S@)!bZ)aret8>}{G|KXz$CW4Y}zb z@QLPRD{yVbgaX9fL4;oU!tZVL90j}K;eahWeQ-PQVhLI)L7|tL1v=fVCahJVs}!k5 zg(v88>}7gziCy2?AJTvm$ zpnik5QH(*!cu~>bKm}(9q*Bqtc2O+bCOVTvtyDwilxYlGqSbzTjT|?zOS#2lj8CF_ zuGEc7@%C)y6?)_vxH-OaXXF9@oq}s7mR)Pe4U8a*bB8^(zOBEuUS(DUJhSy$%MHp4 z@&(@_STA(2)R&k@5C!V>L!(@TsopAL_{P+l397`WSAjGjH1yzsqp zo60oLGE_BmJT4t;m<8OSRt@A@QY4g_8GJfZDO4e)pwvt)!>X&PGBFbketIo-KwYM8 z`^NrSux|z_^!)jcIoUb;j&D1&F67aHVvY6&LHX?9*^9;Mwvl~T?^UN0|0o6)X3qH* z&$H~mJGbYfzuuW0^3~Fd!tQF_jvlfj?x;bHikNBZk`b)}^;GU3c@xaB(62F$gX}bf z42?^)jSBep-zfaO9=$M2X9sP_?x#d<$k&+s2n*w4@%pQq2^(Fg@}`#{7mN!Cv`}oS(XiUSAuiq7;z?1q9*utZO~s2W@f;NV;0?FPAMipyR9pSEG^JB z0O!Nl*TOa9Pag84@;!rg1u6IwORm>IDPrP&2W%4@E`WnZ0L{m%ks;#PA(Ep^jg!e< zqgKC0K-SBp=peS5-->t^+6Ioit!3aj4(hbo!@cvaxkTgM&wU+K)dTJ7IqwI%AeZXb z>o6S75TYc{7A^A9-(kINNK^Jz=d`^1?j=)v8)aIV);)*QL&wNDfzf52lN#Ov?sGoez1`nrvxCywD+utKQW$pU&$yJRLlFrKZmQR`ML%RLIg2d>~~yIh7qs zu#$SI*7UC1C%fd;t{tD_3#Yc{ZhRM4F8SqcdD&wO7BOYCL9NhlSkg&MR6?%m#y!q1 zDSPt|=WODxa*E3f9(@x{;L4O{iP%!spkDe>*(pLz6*GMI1b#{zSN(NjE3P`Le3@dz z{$W^^(3vbgA=x5Xyq z?#?!E&d3(MVsm<)ERIkQsjlll)^0VzQBX5yAsUa^Hf4f-nQ<=Rjj4g6pik(WQ^6cC z?2Q~;l?WtUSir^*Eok}YKuk15$X01z8)x^tmcG5+1z9=&wCb!YpTn{EV-e`ACg(uM zne02HkKGYE6Gx9Q6Js0QzDOmiszT#-t-XKQC9yR|n2oA5W|leic!Uu9{>-WCw_g}x z0#XrO+q3*Ut~R1Q>N1+Cj`eE|4!#p9JLA){_l0xIqC`#%LX~5~>O`qW{(SjCykgFW z4I#tCGjyVlws2n@49S9zLR<9J1eVI>_fBHpXEZO_6r{ICz3=;|VgMA(I;vkR*<$U2 zJm)N&jr{XENJ>L-wbnAZ+tgUg%q43zpCjPm|!M+F@6Uw%-*6ZUaQd7ft-o#H? z=87Beepys={;l}9pJ_A*OC=2R)ccx+W5(%Oqu zTjkvc&upQGUY}9;Xzd{+hQRBSQ_1^~L0YWLyPcNbONukpYh3#m9@>ydFpO}7k5w@ zUc0_u)+Tjb$ja5zytmU%vSDgOGjAo&GHdAEaVVMCHw>br+cIxX177^${f-xDAW!i? z`NvPiP1&-77jwaHeHgmrS32yZQECG)x}k=ApGSWl{y8l?SOWiwdOVrK%a8F~)b}I# zXkn3SrR1~h|42WrydsvkLx{e%+RLXmE$9u$2+nF9XK@++%roA%@}zPJ_?8Y!d zZI#D!e<*EU#%Cdskv{B?AMlz3kYY7)(y`J{n2}te%*_lcDcCYZGY?OIEBvpU`b|DRu? zJLTrksKe7IgAT}03pB!#Z+y}IF|F0c@U7qj;L_uV{kXhH?!h$3mFbFN?5kHVZ>tDr z#)}?yrvCX7*JGbvJMY1Z_4Fq_Z0s?Cg(CS=cPtw-eiuCE5#xS_)vr6?@`o=gR;SPW zsJc50S}xqipgv%-2Y>wbxGa}_!OE8f=*pFCu++~WMl!5p`L@qFf%TD*cw{f9pQ-LV z#Tv8pkXLi`gy+a2c9RSkuxMb_~yZ3X|B|=^y=G2}uZU zh_EXir8i6B2=jfK-KtwA-eKb`EBlxq(^uZAxH5P;+{dA}#ivmbZp|m*E&q<&E>v1y zar@Uc9q0YKdzDV#rE<*8ywWLQ&R^c#3w+3w>9h6ayp&AdMqVGP531m`I~p52K^hqm z2VyDGJw(5BlDv+#U*+pcEeZ<4p7(~w7*ay>TKTTIikR6GEb(GtAG(l+NUx84AF|14 zC>PC%8$Cwj8`Cd;l{Ov``xH(6tpY`dkvn+8}w%m@{*fGK7pRmuroh4xIS7>qP=e+_2-yfk5TUVB4MU(=;Soe zD5yfTZbU(x?}SB}jO=$JyldP?!3OnsLWmPF?}is??v%yz5%ztYcG=49azp2Vh2=#C z=z1-pfsR@3#WT4NA-i+_+z~hD-3F2lCn~_~?~z~H8COJaH}>kwlFsfql}9p9Ln~1F zDe`uGkSAp$G}8Hh`)@i(${><4fJ%F+Ta6_3*iopu?d7!q6VX(;)=0 zqe7pZ@;v*QeH)xOzNquVl;Sx2m70cnOuAd0%-495H6rGkWr_w*_g1g{{JHMiuN?0@ z!ZUZNHx=ySICjnha>B61h|+{Qo=<-Mmu?cKd=#$md{Zc^Pv`g@t{b(g{tu zS1(!!tO`b`imogrf6$PXi?}D=Dex#kuXj8w){>08sK0X0tD|TzAUY6u&ib!QV^z^z zd)Pny>y;us>E^I8^+jKkNve=bxZ3ja?bsjvvJ9$)4W^%wk@G!k*vG$&>=MY>g~i#5 z#SJK#%a6}H?KRv`u}>yA>E9GX)0*O2$9R5K&a^))50(PjIp9CU==2B3DEyS#B`RBA zlkU*nJ_~-GkNfB7v6(F(eU%!U9qWtC6->Z|1QuhX=X6-Q(%XA{&X(e8NX{Wm5^V|9k_Li5J$F68VXJVn z5B(}XUQ#GPAVEk_tJGVjiP_?x@=>R@qw@mX_7__2xw8~?+%_tZ7ysw_;0I$h9-<| zK%2-F7|2srz^_Sf8fq%5;C^nu9cbkRpX%HdQ#bI z{ECGZZ7V{_1m|~#rhi6ibtkW1W+~6(!=fKn6Nk_7T{@Nw%W>AOQ0@o4Av0DjpJ>p` z(Yh3K3vEICEg^1@-Bf#PYRltK5OI(l;VJv}OAX_(3+GOtDy}Xl!}Kt-nC#{@S}tc~ zMdyQJyH6NiC8Bt38&h^VzH)@UIgwy&PJVmqfxhSA{p**^u+hps6<;~R-dqRZsJ%p~ z_w-l(5$NIKXa%=&AS*imYfPQ3oBI;q6;t#cG;^5HmxdEuEuwEfv1i4c$rhD2j%R3& zx9f)i0O6kq6MvMIFVZMYK770Hdfx#x zy{FG7+)8TUFy>iQq|nf~L1w*W|M+*T+YL4}X-?LYN?b1rxhIKc=jt(s(Nm#k7E&#R zdRor#aZ; zX}sXDBG2bEGNzc7r+;AXJHFG?b(YK6W}f|t+^>=ymTwbuX#KqDGuwC-ZRQ-~!aLI8 zi`Hydw{r2cQRMo<52Ii-@9rQx(Ubcffxu|4veI1vRA2bfge z%7Vsu`EA(jIkNKFg%YxrPElr#P)4BW8&p5IU14I`EthqkC&BflQSqQCJNGjV2kV$I z-Ih8Hlq+CVO80Lh3IJ%(EX~fUG_)iXUx|~Ozs}IA`~9o@&w7MP?&W3FmM*lFdl;f8 zl~{J;wzkLdBeQigV(#mVYwqxmr`uT2t$s1aDK%p2MuuPBe%;U2eePl(&tEGM*<=#H?4WCCf^QT}?U+KL!{pWftT;}C!^d>3% z=&|z&>G_qUanntOcRpG!UcG*mn`Hw(CM@Jc3@7_}6_)TeA@Y&I;()cIKVQ32ZZW}J z7X=_4iunNT=V>noZ8^T;qfFQRV1S*JdzKY_?cOJ{#ZU?kXyc6s*}1ye_gA=! zmw9~6jz2R*_>u1Of9Zv8OC_gYKvoVyC5Z0c$&++5p*6qApkjRUJmK5VJgKWi3}>vJ zGqCL|MKaF(ezh1-Y!|JbXGLfkk24#JE{KndPbsV+nwTl9UYL1oN7TdGp4N+3x!aJ? zEr+QuonC)0HdEYlh~o@N?M56jfJYfk#*u-_AwVr2qgb z-4)Z5YB7rGG~Ly8y5qQ^6czsk=^E3F+qSFTbpZeXg(nRhHDkUDogfEG*@5f#pW{{N zT6-)X)l_{$IDIpQ>F12Ae5CJqx8)1R8@8kdnndsW={~p7H6+Amri&e+$>kWvWHUzp zx`+2Poc4z9ST=V|oBIJ!#@_#jc;bSgdV_s7SqtTP@Tqe1nF|+tt({~1w3)-Y6nuFK z7oHm$wq=p?Nc8>4Je@IQQTn~Yx?0}p1gYf$k7eE~rs+Ot;U#3c-n0AY*@qAK&T_QY z%x)X6M<(KX${uq?eP|7Lqng~+%!s0`fwy1brvK#52dV|Cg;RU!B2`uOuL}^zBjIb9 zW<3x=V)(I$*rdC~h>lKSLSos#xjsJL3vKa*EgWV{q6jmj_M4Xt#Q`8y7=Qlki+(c} zFI%~AJh7yWQ_b{Y6$J?Z!nmNQ`q=^NCu47)N$)s}klwyX?Ts&UBCKOyca`s_GH8j-CYog+}sdD}@_Wo1SQMRbk?(VT=Il>w)Kt#Oz2Cu8Sm&a({<)lrd3~6uYGnSo0$;)dmZ$r zi=Xup6n@7`uALeAs|)#kdd!K)gd#wunv!wS+~m9p4K(Wg-7D!LjIp^{)5GD7A9Jr2 z^_e`R{^7NFMb5ub)Mrw^()ft;iu~dAqCS)Qy}qo-0VK-2`eE=y?FUhj>^!NCk!jzi zq6d1Pd+oyj2c5@C8~~)U2BuJYDjIZIN<M8-VoW`K|L@oa5}#eK1NqB_a(sYqk3?1{heL%L>^Mxs+M%mP7zxqN!E^>pq5Q zYYfW@*^v(^&a*8^kTO60$i#j16dFc>H-7+K3Pl%IsBH3MPdp#yziyI=F07?f`H+1* zEj{;@Fz0GCx47Hb4a@{&YNJ%n)Mby|};Fk1);~eHcnS{&a$b;Wo?07_X=lG3Q8F$rwLR3q4&E{qhSZ za!7VoOb2e0Wp;+TFpQPlKhM7R0ieV=iBYM=dJe1SjvQuVuCF7< zBiWDM88`)7%V!)JEo5)seUIemG^&qGkQj09&bz^@b}gcl z45?7Yv6znx<^bL1RR?=`Y;ZEh^^xa5!eu4v&F~mb007_`imso(o?j1D7jrMhJ@{nq zzG`Cc_PoMmcF^V(jXdTMhO@XrP4WO52`9Rr^h~1Ftx=GWpy1M?dsjaUm}>ax?$u-k{x0X* zhXD?{g7b>*jj77J`hhl4J5Sl|Mfb0M7~rV)^!#bX{Xw3mrJ+VyA)J#@2?B&jGo>`y z4)XGLS_8wXE>)So&brkwe3Zs*B@O^mS%aY{xty$!9mzLaw#jE6)1nVq$)zP9A>Hon z3NSQ|XlP8)S9Vd=DF8s{-Bn$vc3l7ffN{j01Z6HQOwA{bA5x!tJzgONq=lS^-Nz29 zxO_q(HLCOC&wU={J(&sv&=L2OX0oEHM=e`0a~w@qiJz{Suwm&q6I}%tm2g?H&;*Y$ zh8Ps2i+agTzMhg%C@M*hVe>x?@YwHZP3#6M@PwzI2e@sXYyg1b_zUUM{!FKVACm7= z{FL3#cDVjqC4PsK`>5V#!%ABM1ca9Z0+Sl(b_{YY|4P&)p3H80pxYoKMv-66Z?yAY zJEr~k`}KA^g4~CYFlBN);Y_Tc=XmBY3Q?zHZYk!3{#iOMz~8=aFD0(dUDX9rl6hOx zW~9cQC>5zOd@Qkyo0zP?UuE2C7(NQhR2q+Zmvu{3Dgo)Un-B4mEIuWij8Y*X^Y=;; zQp*7ZAe=GHShu}&QM$AVj&?Kxq?8>hB@IB;G1>|Ny(a3)V!^ty0%V#LJ zBWn2J4ssyM7gW5g8tH%dSkQD5|I{YW4WUU-r2qg#^ifbu^lit5@w+yj%2e(dt&PQf zc*1**02lxO(*{ySg-;LwfHoHWKK5asBC}mqn#A03fV( zV`;YuC6tu%NVDeCH%b@AYS!odxi47)000n$ zW+E*vY-+v^*XRAYFF~0DSXT4q>dDIz0Dv@`%R@|D1H*#%hMn+Zh~n4+nzIAMVLvC? zEeSet*bT?$3&lA}iF}FN=WUM8N*4g(psC2;30_u-ax(c6nKUbo zYp`UWpS!cOyPy9QQavKNb5ofI2fAYK#Bjw*dx`Ka#E8avI2Zr`08F31crZWoC`Z)( z0^&j<_)<`o9FakCo!7Jgn;ZuK ztqoT^Na0BUK!iybv+(nSf;aj3?+x2J6eYcXA-z4fK-E6ImRk+rrWY!uQmKxO-)>); zAe@z>Y&6X&r2_*ahxV>3yqWS6e5eLE>IARg4R~fW8@lKkR|SBnlnW_}fD1Tq}@Z%(94x?&oAN+Mf008Ka`*oJ1(e2k4q|2wn24n*;)Q~M;NDr2N;@%y42Wq>|0Z&Jnwbc zs~(FwDj~I8jqA1q40rg4HiJ=2D!K|LFdwoXi11OM{5?1rHW zmN}ad2~M7mYU|d?U|&P)(mT&$@q4U80$l{X|RMvefe@ zSSc?G1;uEK1#Y&6%KToY#>CYN>D?7~z8jfXT`1~pMehj#0AL_Y;Z#}Jo9ljl#kmtOgVHlqHld8MS5Sl&0t6zFNA4NWJ(y-oe{>00sa6 zVcurNzM?n{Csmi+x|*Y9@1xA6`BxJjAoQ8jta?JA0ra$Tv@?VO05C?9bxmwKjcMDX z_$*t(7;Dy$7t5A9?pQ?5PfACI*qME!bj6$_f0Wp+_I9MGoZpeD#69}Ge_H;bFgfOS zvFMHN_@zu^GynkL2KIZ);k|#wxunP;9jN5yJ?NL_#>FiGk!e;obmNvg(=d6kSyjT} z$bz0$E#3B%14T5(mnNJDJso$2oA(yBabGx`0000ugX+v{kMb_Z#4GY{x(F|&xH$br zz7#@Lm*>TvzKwTYU`y#kZp^sZDPDK?YQsnu#$b}J4uw9(-p-_se>waln=gEvE}(k& zO&}}oFGSMU6g&b$td&v*ulAE&>fP-{;{E*eOBdKmy!(rUtlW%@;u;8&3bW3h z%QKxh*TTST=>A%Pc01Gt}x3*OBtC6p@|A(#`Zb=6*~2 zzIj;i=ngwgAQEdb<~lcZd4){|Aa}U0%kExG`6do<7;$<^<*=zuU13{8om=X=xVbVd zI?mO*D*&LUFkCVz8ksN=js!f5v?!wowqA+=n!>wcA}d(zA)%_)f?(QNGPExQ#b zok@7pf5vjBVZD_L1GP10`gnF7Y(xCxPV!f8ZiTL%GsAuB$s1298XFrM8|&XB?p(SnwL*StpK>psI=N?sDhYLg zbn}ldT_6AE^OI96I>uY3dd^zC^x*wZjg5_sZ{jz3AHR41_=?rhFFW-8H8yriit6T9 z#XrBg6~4h;P8+rP$Gumadj3fbZ!e+tQE~tHiWzg(9=|25RXe7(;?0{+pE3`)?@WAC z-`LpLSX&gmVdbeOpVjcP`|-zitzO~nz2#`)v)abS#>P+g4=mf7_@tBko#JlPS3Hbd zJ!AfFw<;Pt8tPJ}iNCDK2wy$NdFqUnM{m9S)Y#bA`0mz$WgDV}wXaf-db>`YI%mVF z%r~`-jg7Uh5_c}$#gX4|?W=^Xb7m~v74uM0KnncRyEhe|UPZ6|K=OHiug*G{y9Qj3aI3rb-%B3%lbEoTig{>qvO0Y?)UEgnQcp#9?WRngI5H_=t8p^kS-LVv@%Fy19@UA#5%wG!=g&8Z^3cM7PjEt_{$ zu8{a1{J;3uhUPzg3H)~748(Lkl>Yv>7$ca=U4$ACp2NSHZ0Q|xMcTe z`5uJ`|LSS>y*djZf~^q* zh5+)E6T{{4GD_)d_fc^;suE9sVY1{PwIg>-@eHrveFi7aJ}a)WGf?xvU_6Ng0M?Fi zYVVpgIW_~)!WX#bI5+>ZDDyNc=K@;RR3{$2A9qttoku9lH{IcXZo=5@!SleMYZub%X!XQ=g`H*wa z1bma`l=)Q3>$byubMn$+kF@05hV7hJasBn_mzGi>RY&5p`F&;PFGtn5E|dPiLGd#8Z96TON; z;@fy(kC|H;Dn4+fP>4_{#P)yqFMjU$fgi-J$@n$1X_)rB6eqcn^w!eBg7Ae`ZeemSNkU{6$-{rH!aQBY z0nPwl9DQ0aWX(oLg=TAC;1rrT@n*v)CQa#SOyv;2d?+YINaH+xU1+#(;6PM#Pax7X z9!Pwen5ofjyGY*YO#y5b`=d@O%3Q)dx;yp_aeyfa(|kl=f(c{XRA+h>FQEpq005-r#iccU82w&fU_I-I5)* zAh~@q7UjCeL3s&*zu}iY=#(dP#C5;m((2r@t9XZ9_e)%5lqQ7VB73YDLxeiOAriTs z8+jF)y;;HKx{4!j3i(B1%-|V5OKs&Br0Epzr293QoG3pft59=@o3E!;k1pWjD37Bq ziaPF=X4bamJ=&$Cdfp*-ZHcc)jZX2-NeKL{>voBx0ZcTtU<@@@Zd~*?HRth+k7c~4 zx*eGRJEwr!6aB~1M+GG{1RJ-NZWi*F?qAEt_Tin3Q6bTyOIy}Qc38Uq#m^Hz^tzyk zSX6~4;eXxpsJc=J;%di3cY2X&T;@GNddoB zE#5+VbS5G?LqeJ8<~5H=#Q^{$37glZSpI%w7EW5sjX4#OT#U1x<>fK*`ObBhsz=S6 zSd$VfKVEXtcMWf}|9tdSg?S{&o4uln8|yKBC%AddXHr{^nj|^E`_ik%kBx>C+&j#L zpb}8VE6mdt)gn<1iPV8#;Xvo5*rm~l6l)4~68f=11`x^5?tYz&&PeXx9UYhG-@9~Y zUG%%SZU?yPkO81_q-rh|7FSVBRIGH`Mf~3pop#I4#*gK$9h6WRpATqsGOX;nt-Pxw z-TCOu{NFtV{?QZqcbD#e@sGq0{3|E`P&XW=?Vg8(e>)%aCaZnl{YMNK*S*b+k>bpI zVmzgXYJbMy2`alubQOni1YK2a)Bm1hy32jvQbA@;HHo5XQKqgAb=y_P)k#Hxqr|t9 z1jBajbwcIFM4U`6K#2Wl6decvs5m+9`S1h3PLQTYpN!-b0ev%5G7bXJ+w?1sdavI( ztud=Z93UmPu4YKgrcWDZV{bnME>4L$c_Cc{8?_9o9Gi=cUCtC$h5vN=$9<+Jaq}o(gcr;f88=Fyy7!-g? zZX^~nw))#jZ+3!j@gJqYYlWGyr@|sK>&+Scdg$WhWF*SrmST*FYTBK2R*K&o(xNmr zo0~62ktrly-43LfgwIL1npIedB^eO#y8n!%I~YF{mq!CNfC;a5@*MX=MaL%7+ z-_Dm{jLi&)9hcm{E)Y>x?Ac4#a!Tt+M#iKbUzBL`_&f>D)J%RnB1$`c;KcQU3ZQS) z5e|?i=l6%QbBZOJ`X*GeZl^efq}wV{q$K&sfyg`0KWX(=;F7$HM~}t5z*!FI19$F( zuI}d!HOtB9;#HQXUB!RekQQ;{FDBfpA`davMRlSe>G%c&*JEO@@eva`rQ1JNFsP0W zNl28mH!wlNmPx|_lzhP;O4_?K`h}jQB~_`A_;5*k-)h zPkM@z=AGaBCyzANmh!hNfc?+5t9F0XNkyD}=~Bj9qxlP+#yE|oH59NTPR3?`z?l$> z6XN(av}v=a*o>QOXYwgKCL%Jq03r6p7AIX55S zx5SInqr)RPVuttTnQc$7K)Qx>J0?wX?G|>?e(!u>9KH2HC7CcK zG~`kx-Ck+!?SCdDnFrSYnkK>27jmL6J;GRxqqX)>Rh?p@?zOW?&&gwK z+a4VKrzEX9qylz`e_(h5_b&I^<(O;t#c=EDa6i5KsftQo=!QM1btGba!L@Uj@^oy+ znYJ9aA4_uIJ%n-oerI3m^udTT*=JKFG&@G?4@oK|s&2e6&fkw!@K*e>T9|$*?aLe~ zh*-ZfN${=;sxC;plnsX3H9cVY6@25iD}`_0Nh=FE>^3gBy=UX^*=29a8VAoDYog@F z|3*pwXi+U-ZQGGhK_r=&TbnEWIN2oyiIn%praiaoi25cBYcqo4k^HgTRZU3KL-#+h z@bj@DKmY&)sfHkQ3(v;)5N3+Z>=`6kEC242E=}68CGsVfOrcp>P!zBD{*@`CPNLNU z*0vq&7vgdWVf-|u_j7;xTKd0ejUVbkTxsS3pM!ZYsW-`hOd*j;l->rU-Xw}a%PO@9 zg23>PeBVQq9Iz%zi0e%v^`=mIlMKiPBr=I&Kq0lP1dSlzhyDP?F>CzeC3++hnMCPL zAsJ8%nvMbq*Sz-ncRB*q{O~n_x9Uiw-XuzIgQl$;P$(ol;aR`HTXm#f`aKQFh8^c5 z{hocuhP_*PZ+!EOL&XmueVP;*&f+|;B25bpTS9C5U}8S|ukh#$VO?LhL;GFZ`h$0t z0{{RJUEa7c$1XU~QR&eZN!p$@$<&~|9UZTNSBo;^!Xx8(A~fAMG>A$3YX0KP=8bVB zwK5FdH*_=p+}aRianyPnxg(7rvQ8|C_WeSV61e8Ffq$?E4Fe=;d%VvQc7%J$ceGMY zu~PQNt(i7~LC!`nC}nTlaEr13u&aUm_#eYmWWuEF0c;&tzh#azJV45L$>$SqXi=PYh$R?ZQsh~ z{w_!fHztl-3{32%Iop}wz&95p((KT+7w~?&-I{N%Rth*5ld|5zv@y=k))e^1Kf=}g z@HL^xvO~U>H~@eoZO_IGMsNTV-^vHW2n<)X^6xHbA$xP+6Ng~`=3a(~D4QK~Q-Jic zbe!%;!~ghSXlFy6M2$=}a?&;3_pM~W2!P?Pm+pV@gT#;25mzR8D?;#tUFMI(zI`ne z3i+J$_~H@?0syQ-BIz3#>EO&}dpY<2VQ+jOlD87ji{Uz(4$6hX(xRLK?vtm&Dj5J6 zJgGN@G2PE=^bh^2lT<9KLR0MKI8&?N3QL7Wcln$`fv5@q7>n;gqKtIg?B20{dYz3b zk*Eecz`=Dw4{2#>sjwi6ml#ot-lTo8-jc+=^M=Em|OC*s@n9Dah)8sab z>+k5hLL%5Bnm>!C@VSU|XP?DFK{&kBS>gJyvm5|W$&I*-I0h(RPXd65-olO@AFq;Q zNH+6*>t3yiH}PT;zn&wn((YCbbF>sZHuGWSroNjQJSBU6H$jbH!(=uM;P+yXKL zks?)95@{7u1(Rq7KZKtM6GLNwOVE19COyDphVy#*;OKx&VaMs_{&qS5{HrPtfE1jK z6fnFF)0@71JdH-GlPE4ouJZa5;hzoRlH9x|wCg_dvxX??uOxVSP;;M5j0w#MU0kQo zdsy+vs~a!RVF13!f$&O1rm@@MQB9c*59m(;55c!^001nJo=Ljzf%TLsd?L5`$v zEaF8em-!6$u;%Meac1b&gP9mh8xsj9BtW<(%x@I#2S38XD-oF#*XGu*)qK{4QtQ=z z_$Jes~KnN@iDBP5^~M#DJng($hrYe~IjtxzWG2%0u$lNsx1J%k^i` z#lV0|BI-y6_7N-KQPsW>SLzS`g?2X7Nwoe}bYA_~Lkt`M0RA4*{V#r$_>tO6K@{ip z9+ZOklp4D8Y!Bb{+kMB9@Ya4OBEt5qU+l`XGV2Kgv~s;D%?jUhDpMp=p6q*bAmW7X zWAP>O2&OIAJR6%Cb02Fx-OXc_|K`P(gkH?;5m8}*ev8NU5#LEt9ItMkF6FW!_JI)g zQ)x#yZiJWL1cY;0KpN}pw#?Umqbps<#C31fiI5$>^G6V0q@{Fho=$TjbDa-En2_|= z)X{a3mtTONqY0M2j(JP1<1q(`Ng*_V4(3)f~x-VZF5Ra8h2Bp)*{R9Ld!ifxTDS z#3fmG`BfQv=gpiqZ{b2uZ=X$n#D*XIo)Yb-bdjRCNFHszYs;4`%*re+PYRelbDrBm z&*eUAcl~w#n1ZyVIjk6=&GISD9~OCfeSG|OoD2*5R_Ou&0Kz}J zCp1Nfd^MMFBQGP4%ara%z|@%@4%nQ`Jn6U2{{{X(cTt&;eKM0W$E~&deo=a6)iBG} zpFq{RE@9g-_av001BpaSsHBi)=QB1pBS<3tDRj^6sUweopCrE&m6k_)<_z z9MIHqURuBk+{Yy>2s#wt>l+ZX*hr9b_v*J63`o(FVhXM46ei(?Z$HR4^*tQo@4G5! zvlEV=bE^vqgRkHnmynnfo(wxKVm3*)C@z9;I^T6548)x9WN09CH=_)J zvpHo5tU}T}VI39=!$7-(`=dfCqWmJbKdtGZ7hz&xU>xGO<518lFaMzBmSSEG=U*pX zbrPLE6ss+L`w~&+P0}rB|6TqUKWqF*zk&h)NX&JsiZ>nD!!inX!*e4OVaFgl5)qJy z6e<7!*th?WIv5K>0Nd_<`S<2Prpj(0iu3yAPd0|^O$-j243Zc*?#hz`xw$CBQzOF+lDBrPKPIi5LzHs%)_ItECySuqla zpc5`87&NSngJA&5G9#jY0O^(`hbL7~X15$HF(>jm&MhR$j)X>|VH^eq)kU1Y)bf%i?L%9kA^th72fV zP%QoUZS#MT|Ib~toX>wN5yTyj!FxDcl3-C%F! z_m<-Ka$Tt)Pf%5gg#ShHn#ZK#5dH;L=`X&1vnrF@Bjb+0|0b%b-LI5l+yiL{trlz zfXBYz#3c8!1UWHhGI4W)Hcx3;(GkMpyXj)#Pv2B9Km?M`lcaMTZ2v0mIToMd6};At zgh-_@4nSxewmY^?ZhW;=3gd84yLr@cfJmh<4%d0!&Rx}TAbG?SRuzl>WEm`TwLx~JG+LL24 z8qY6b1n+hJ`TDy{GD9|miiX;N2U5onf8`aNzhB5ioS-!qkl)I`e{O1#5otvx>^hmbzsQ2Pt3O;o=pW}L1vy1 zP#BE<^3Q!s1#t&M&hbPDj34aayVirz`V6@^^Y@*97FlfAx5QlGFsPoV^BfWJ@A4(u zCUi@x!nz1u#hd&Ah@>bl`}XDNCnNR*Pa`ROr~;m#fDew2StnM=gWF}zOhq;-y4dng4 zmWAJZc)n6Or;YQdh1qIdLNS9-cylO#FG*Ym1%49pDbQ-9kT zp8ia5J0Ui;lw@UPj6(qcfFwP1d(`9lf$lptjo0LzXXWaSA4A0eAkB-|xb^h2I+^%U zYMR`5X2h}c6?{`b1SdEhi#Lr9+Q*tjo_n^UGgWrEVZ{_^DAoBph@_VHdg+jW-H zxSRAWv+I{4MqG%kMfJf+7xqBqU74aKgyXqLe@I9lp8PyNw{$^sjhbh+&{tlf002(z=!g>fochhdHZ@Y1zj~yVWW0DzNpD*lLph`AD*itW ziLgYbtM_yK1`89-tR~ryAk~yVxE^yY?-BR%C zcuNL@Vdpf?9C}xf8h|@)aB-WFx zhx}q*d*@6lVr@T27XW~iB<n_j;O)N&Uu(#+jxrPn#y^)ic`^rFGqxCOZ%5TAOga^Hqp;if&4+*Waka)iIu{|( zcd{{rfRuM~?{)H=*;ZylMh_iiVN#REE;VwpB7e*b`87e`J9OWw1upXAC7B_=Cg?Bn z9zW2|YmsT;S92gr+PgPzfSc2(iN0$bq0Fe*H-nrkiC@Qa2d!FSGhm|UZ2bLJE+^3; z14!B!63xbb;s~Pn_PI0HOK@XW1@2fki-BZ*aeP*6#OdVc2)Q4P+#Ld_PI3U@`k33= zGtDtCx#v!vzg?zjFn~tFd<#!Kb22JAHtsT;eX|hsvo!D7l)%yif4@s&O-O6t!d>fZ zh!7A9xT)!dAFx_a!Vl+J`pjbtW;)Y*K%iR0=cZ&8BdDjR!ya{(Gd8cXrS!KQZKT`f z9AB3ea;kj%3MUIohpA?|07!+|+_c;3aboiQ|c;S1l!B!R|^jC3s=88!a zJtGUMR&FZ?5&`?fiJQez8HO@shzZHC=^jmC>e-X0;@^-%m4r&$qe5U8p%o$TdvtSi~42$ zU;O;>gS`vd8aVpm&Ca>&8oyS`W(@)2K~Z zV#KblT|^Aml*r{NIdQm>a*^vecU&IMi4;yh)b%8dG*TXxYV_bC4~;Z>w$zqvsij(F zzduUW!ziZf?mn;oyn1_ozgwU0+UNWIeBSRpQ5CwVx+f(PlxCfLU_(jv1yNb0M26DB z4j!r{dtNRZI&LBfE4j(~^ZZ+nA2LW%@LbL0OABIiQQ|4Cph8q9L$q-CAsRK$L@3e( zssZYgd}|*OqM41|JjL5u*vXR#Z?X&W3Pd{fWxP~&H+crVNIMlA*`7xqR296?9RDR% zUz(i|7GEZk)X5MXJbtiRb*Wfm^aRu4s`98pPFPyIZ*75NFrG1wsaR!_IB_Db`Dy9n zg5iV2McEv|2lEWmZV?o}8a&}kGwq5@)@@dqNFoDhEPlAon{q)NcFcq^Lpypr9*-xE zAWxp{sQAVq#x8ztMczmDu!;K|N2%Vc99emx1V_eqnQ6)%uy* z^7OU-U)m+@_4{8=9cHwafiaarT32*8m|p?t#z1r>Bp%H7_i`kn0B9L6>MP#{f~U=6 zww>r0rsn}0yO`~Mu?5X|fE`Juj`3WUyMkRT0aSd~cz~liZ#lw9{&oFPUM<2Gsk_$N#b~dr*Ei zc~s?pJyJz^oPu8$xYwq2BJa4&g?D<-o`9dk6Pk)t;J2yoI_NeA!5A|f-!0NZ@D`5D z>?`~d0#fv(O!ft36m#apDE3PU0NBEFVcC?GN4{>`Wi69Pq=WHzl#F*etmq5RBUV@d z0HP4z=4ZC91O*@K@zU#|tQyAlU*?iq&wnPFeMck%6xql5Z|SX`^wuL?hbRC*hiqjw zH1Z+Na&YmD$92{-DUKhCXMDfU%8tuA8P9plq_sbG>a9m%sq=gSr!x~HLOIt9XHwr* ziTVit1w}V54?SA5Ue9)xW?J~~A*5qIG&BH3ahD{cXM8hvh7Fyp1Edc^xBbo*=@60X z$VM>K;ox?9>xX1jX7Kg{+!`z%B@VCEX6)NeAKg1YZZsJ8S-d2oL7n7!bir3`#bP)C zJ45cu@Piv8Dx2^NPxRI^&9K1ib9haxOl78Q>GS>d^zJ0tnXaBOXPRf~y7*zB(`0D!K3nh6G&bnsy(TePX)?&^|1?fe5U zcFyW$4pS&tAYh;1fZ2gq03_E#gtjd$cO=F?Yr93 zKW@a&l!Nn5_IzyckUPW0H8I?#9l%1|HsOkr05c%R*)4)g>QsicBuC#%bXYAD1N+=s zKwcAD3NM;#{zuc#KNWPW%*C%B1!XeAUqEMds!9O#`6xl#+-o7iF51k-nUvs>D6gl- zCt*jo=)}&h$XhZ)8lYM=*?U|jHq5$n;C+d#Fd#zqWyLv!i zYCqj|j-+Z%4J=Nn;Wuv`=_jwQEm|)LDmq-5rF(wns=mqf%jtVQZO3-I2@K!(+hk#= z$TRcu3f-4-JU}25xL#TYdcn&ViS^!BC&PEV4q}Wt1TC5&atnL5={8`rS1PHkivc^o z{5Z9ErkvXkC!c-ke5D=U9rI~+{oxka0}_B96IAfkC^@d)0S>$UaSLV_4zj+Ls zzOqS(gsgIr&G3RTn)@jvn*DO)Qq_3L(}Z8WFKyYyLlUXI5%slnyUM;G+`@E%UVUTl zW$*wZ-CCPuRdT2(@(ev0xpiCw#$`HQ(}NE=inZR}!kVkqwSw!zzt*vYvt>B@Oy>ZB zeE!>V;%UUwlx}oZ0Fj*HQrX+jY-)GsXIn(ZAQ7`aJY5~j#U3|>lNUpj8kdIrYB4eA z=rc2uo&_9XJ}gO{QE{)HJ5-ZL+qOhD&w;cV-$tOwQe;Hb-4|uwCZsoYTg2r_ou3x; z)_=DejmGu(n_Sx~Yi3*TxNetHwP$FsO@nu#?$-+(k@SrJy&iJVtwqzp=F>Eutz7JV z+`hgPWbA!k177&X^{b@WKX^Afqs0T+E>*h~OGdUAHlKPw^Tkh5XjuKVY7-I8T8@Xp z&oeAmY#0e~b`OVAV-7CnSi=H~m_QB;P{*k2?YAFUdgvI`sC#m8iS;Gkx5GEx-&D3u zKUgy%RGfrX3_?>cf(nbGd!FA$*CS=(_aP9*NNTP9s`<$k&6RHQ9-N+cNWH0)n%p7y zUHM|0S7odl-2guyA9`+U^MmTv@~SETFh8Qa;eTR+L%PWwAG7&5M=w&i{A{kDNDO=h zI4-V-5aLU`y;1W!Y9N{$an7>>W3GAxfaVD}5HH6Fo(~&h<7dJ|x^g3>@9n2XXL26^ ztNwdj^8xM~Gqh6{alfDgJ#YulLq)}9oAP96m~XS?AS(sp%=Mz{qXaS8)=Vj-L&M#stB(Ytd6@>5av+7oI16oX82zl-jIQ!x3U@hM9FGYW~e| zp_ajQ6jb-PMw>4!s0TqK*V->Q1SlU7XJB05e+T)0(E^yoi?4Uz%H<=7E`B#1NpcIk zb6T7h)SGmEzjBEjO`5gj8K1?eX#Tis>;1V|=dnPDAA_`AsfOR+bZCt?Aje`zPR<6xFsL6X~%?zobvFpb6qf71=cYnaj2}WRUz#I(dC7KTB+)>hkJsWr4=C`5mmt&KiPdVj zyC&dE^B8Lm6DdMKEnsuC(uYX z;qIB^f&kCsR?6lu5AG8x0o0RRcyjGEU&&z%EUED1yeFk-3&~5YI;I)8I7a5l&cQ^J z8aj>ic+mXDm~4ki)|yCSfaV_ktCIecT*I(L_==9295N(|l0dX@vV^U5H4{T6v6Shz zY?-#chXO~NM0F&?MKmhHI6SRk`S!IpPX7q^gJ_%Ay5Z#m+DuBos3%ivghatI*Ajea zN*x@*&oJv1`dTPYLRJZyg~)P`o4Sd-RL=Npu`H36QsZAE;8H$i#5A%SO_UY;(BigL_3f_ zh&$z+I9A@$G0#Hjgeexgb*3#-c>RS!CX$$y4#NQHAkot{0D z7E@-T3^;7k?odm+j!0ZYPw~u$k+pdkQODWYN!X5!!kG2*-A+xdNRrX{le~<^f`xtp zLM)-0JSYzgA(}LKzXFZI1B~if5aDyvCW_s(jeFrhQeMxFjlYTjc*U`aZ9s4Oq||$~ z_Vd%f>tZ5svz!t9c_7I;XjT25$PEH-?x6*?_6xx5?F!L zcG(o!bLrag(7!8;+f}tPEQvw4XzpivBU}%V(8s|0$mD*$!|qglTP~1e-j}7BufJbY zo}+8kEk}Gn;cgllbD{shpRcXsMe@1t5 z^U3mdCm?XbI)QVdISs6g4&ZD?Pu6nf=5L~)WH>_^Qb^Qfk(rG|2BDSPG}Wl%H7zVZ zzUhnO8jTkHk$GUnyUi;K`2A5`B;F)$0!5f;+D}yf>cEHx65>}$d~%AjQA}ZbWe6u* zmfH7ZsIRJbCPWm*?qEqHgN#wT%?;Ueo4NmFSr5h!$HSF>I8ElvKqnV_) z_ra4tV5S8{k){*!>!Q8D_PWWxU&8DGm0Q<%GcMa`5pam<= zD*6NEhuXt`Pvt%jMW0l+*lhxQcLu4WQbfhQ!6LIosNSIx?T84{0D z>wy}%Ho1!y`sD?tNIv3Y11>b)Gv-tfGv7B+>Nc(Fm=Vbt^Y%HcAp9L6d&8bTiD z+ryc?AhLVc{q8h3mE<{3Qz+PyT~ihdBtmlnGXl3kT2DaWsRM@MggdHw?|@r4I;}3o z`EQyZ()BLI&mj}6FY0Dz-EpOG07UWpb)IkBgh~lm*aTD4Kj(YyGsGnrBQ;aY+DP(a znQ1P1zQrR&wkNUd_tP$ zI#J{;;^b)eu|RF8Th;BDpEPeJ6&JjIm^UL1~0yPNn5~pIE#FYrBHn4v)R)@9t zEt6ws;5tNqou9e?ZYA4TsO^@@(wg(Yvk%`HdRZhrp!MEZfFv=tCtHrscuMK5$4+v~ zD)okz|K;RI*FvVLhYfZK&q1G!4|u4nqlGvm#jE4bZQRh`zf~bF1j6x}QjQ=_oM8v| z);2>@?b*#T1N`o3)hw4=A6lQ28r)Dp5QB6!Zh+Orajfn`-Zc6b_dj#O9UYzan;YUg zOh8btJY!nGgQ=14G}1@IEEl`0m(U48Zm%vrULVQZoi|d^7mF2?Uau~1N$k;&H(9to zLx|hMbso-J?FY2iN5uQKE^%H=-`x#%fhO8;kP2OFP6$q(qJi-qJhhFWpWH%SIJ;-( zoemcb(J$*Ho*lpjvNtQU;Us=hTO3CVY|inc{Rw`(fF8Q!iKD4~;19C8p}z_j9@jhj zof-F+S99+)tZ5TR{Z+jkop0{yt4wKWgAN8Q!UrjOERI+fBfsCa$NV!^-ntEHdkwGy z%z%|ZpmM^erwbce+Lb9d_x8H=Jmn3DLvM%9?3<4jOT?WsO6Ss4Sw!Pw?`E3aYWq3p zNoK}e*ZsMjkFVy9i(P!y-z1hdyhnep+u-Bdsm((@u(q!4YGmem@U3-yYlW`Q^T;8Ba+|TJ?dCOf-EuQYSCfyo zX45+nT&;oL>va^z=@bswTL`v{y8doI-Egf5w^dn#jfEwk>07cNBdpOCeiRALsKXX! zq{Ct~Xy_lTsny*_GQ30Ep*wu(blnyJn+uK93e{k{xVJk*YQEs5^y1(O_?4!Y-&kKB ztMk_)dLI*pYKvar@T{`lYNYnspLV{vvey(Vv!rovqv>=XYsIyvy}8-{Ix@}Dzsk|L zis+`cgOFgqd5f`|0!er(O`?;3+QXoo{j)R+gaC?^-ODgr6)6*P6kEhOn`nBIK1*{C ziBiU*(>2ke2DJuz-6T5WJ>M$N|6$Gt?U^25vA6p>a9KVigv2hb(ofxy0mqB^vV;wW zV`xsNLfMJ#L%3KhUAfTPov(s@F}Ze+?1CKta|hE}PjNYQ2oq0*^k>d}r`{widB#DG zGT8AlzvDv-<|Yk4H0V<24R#Rk_g$?@g{X68_}k(A);(S4Qcm01F^b&qnxAQio4+W$ zCHVagA(3f{cR(1$FR!Vn(oOQG=?LQ+Au59fBv_Dcczt*>LEg4Ia(C1*7xN_94pNZ# zfIv%^pt#ct4ySIl5La3kNyv`X+8{uy?sOUyRt6E)UF)ava>!y|-9VJ_{Fty^q+7jv zgy6c^P{g;>)WGloOLkgoB%U%J#F48v-#{w2JjYcIWLOTZu9x!+rokxDIj=l8KwxI0 z9SfRo!|Yn&#DXUm=k%cSG!s(w=Ny-=MugDe45f(m^4=-v{KE=xmjmYJAsnmjY$xS6 zdV6_2Z|pjT_gems!qn7lsQGTlQ+ysZ5j>yLv`dVwr23brNriO2O!Ox4<>_Q0f|SOe<3D$|5LV>|hn=%!x2ZTUUZf>q^_xOwmy zyeh-zY0~B0jM8Pq;i&-tQo?_60Sc)fSbsFkPb?vn4tw5hoRrvOXEmgpSt?4DEvnj0 zAv|x5FitG!qAj|i(5|u9NC(|kxA$T+Qsd3zHNKH8LCE)|r#J94j=e3%+;sMljQnNL zT7f0~_nGX-*w+p=Wv9*XlyYM%%mMPw8rEVa4x019J)>pJtvaHfHw&rjg-&tC65 z;Z$06uI*p^my-0P01|;*4Q`8NG1#f^t8lN_e?yDgk-T75u6|<`^jCfmLt!PSI9Jh7 zCXV9_`)pV5a1oHO2}x-$^Ji`q3|*sHmu-A!9FRurk>bMjdc@OquS%GRtwFtrTiUp` zxyirZ4?Tr%o2C_ao|6|t%APrFq;+7pWf3Z^*O}o1 zzD+3`!0ntNl;eE!3@C|_Sir?v<~lS~WYiRoVreA2^h;Bk6^Z{!8l7A`l+BZ~{_6qN z`uS&U09Epyh37Lf$HLNF0QZk+YU;u4h$>^d`&M$Jt_SgCflm_N8PXY~VRK8GL<|Uf zw6z5}ZM7|f?}E9@_cJ7i!ehcFh=_riEavm*LX4%!mm;=?t)+2AaSNTqB#Cia>kMD~ zRE|H0rCZT-{k8OD@y~48$0b+)ZxXJLX1`F-KYqg>D-}1LnYl`tyAbfk0u{WZo2Ffq zx2g>Z>5l`?>0+L!FQ=mX{85h&td@rp87;q}5Hlgz*b5n@bzu%z*q{L~9Y&|+JZA#0 zc6g`LE#%Sb>lVM6sWgcErLu7puo#LX)w4)HD?-mXheN=oD*dRD=r52EZ8*yL%Ou=r zF(@X0oQj;0@#j#K+$hH43XDDJjFn67iLYCBsP|PkAY)G)i`G&uX=eb&EB&rBXX{N0( z56NKd)A)$T->zFWqXeNRB-jN+)(%44Pe1#7Y8(ZIl{8B_=R z&7tpxJrv`9qZnl(BEYzrO_Xry!c+a}?{BPgN%}4K8Y|F4)3qGaiU-}z&L{JmQOm#O zty1)1j?S!MIT16!fV}X`E6^5|zWURHVehFi*7GIru}%qn!zbwq{VYkdd4*>DlHdsMnQavEa8n0vMoMSPSU37_qw$e)V@7S{8B`}Ys+vt5LE z@S{~6=Em+vg{5z3sX|8CfZTexd33K7f=-d@h*Vn>_}0>0G6 zY#&=QMZ8+O94-hwjGwyY4rgO#wb8ihyH-tB1)t!ybuuvBF~_(Xc7XS5`0+3Mu5oKN zh)MFuPcszFuk<=bImlY4xKCheT+#M7J6sN4-ngQduXx?qy6*Azt9tp?80-6J-?W?b zwqKb1C(gIh@*;;q%eYzJ&rHDeS47v%6>gGI7(4!YEE54og(z^Q8*$*@zKN8rO#0_O zcfK1>oTXO=mu?gX3N+mPj%)MG(lZ9r6<50)^E{fYG=n2;PZ~DYFm*b+#~$qT2MP{B ze^T}o%k3|N(k2K)Gk)>|TZfUbf>qsF z-!1MPe_G=|fN~M|hbC<0<`v#9Te2vB%K~{$_RmIz13(5~7d`E8fqs4`;~@So)obGn zmG*Bi5Zq^Yq>sFPiM?qqo5uccFqKmraZU!W9@eqeyi(FDU%(aE(drm=3_E&^zZ(U# zQXsG)_L@85I<%cN-ST~EcvY-J&mhaG&+Ud3Ki0Y9#cjHQtLkCLs#^g(J7LT5_T3H5 z8hnarxZU76H3mHPKRx<~v0ufcA#E(Q;DijJTi z{$`sVQ(b?j@!vyLaV@#M=}iM}uVcV3^%ywbPEbQAs#4sw!z=xyTOjm3+Zxxy=itz? zbr5=Ho?hpT^QcvKP+^mS9OVY#J8FQcC$n4($GoKa{b*ZDX93e+%l%Hhjqy%BI`NNN z>_X#3^@|^cf{=u=0)+7{!M5G^oDh*5`paEcK<^)vh47?Io>1z1&kmdYX9p|*z?3fx z-Wd|#=sP**!YuV{=e_-JepVkM;^DFy6uT<9*b=2b@)+9hpnMvR^XeaaC#xEbV}WAJ z)5$G#598%~Tb>aH^&APeItro>WDs_gdpZM(y0pQmWF2C0io}e0CQHyH$yRa1OQ*?e zu^Uz)gbYFbnd^asnKiX6(XgetAk$)ka;3w{;hd#Nl4VR1n_l)iQV<=h*ZPJAtfq2W znRe+fpn6?rtY$>>g?hEC$19v-2uM7ZBE@07(02Mg)&3acv3-8=ZTY5tm)K25TEO}} z!Py9XRQPAWJeC^$*Of;4oAKk=%G>c%``qmw7RXBED?y@8+)107`SW~yM2nU?o{!e=Q6f!W-&Ecz1SQeJsGV8xGu@)!9(Ew6XT5+C`C)g>R`?7E#u^*jp9QxA&0TN5j*sX@`a9lmY{{>IA+H3lmS}wL90`Y&f)_H8svPlcJct zByD+{_Xf6k4Yw@mKPu%KoUjVurpjx(4+5Ec$rzie3#~Q^2V3)`2jlZNb05!ocw&3M zGkgN9B~4b3Q~W&XFV}dd`@wMoKa@X0655j8JCKxc*~OcyYH?r(5W(kvYU(!mtn;CRu%-dVgLJjy&nfsET>=gc+qtI7wS13!^b3(lNkm%M0~An4(H{zfQUOlzPt&kq&9JmnhTAdHY88mGJ;T zB~Q2*10Mf_*UbEQw}IJifRT7h6tCJLe4XG84ik)nV| z?aFfTh$u!IGW1bPfPyIbJIVi$(iq-Cl?cxi?$|Ka*n9<@c5Qydjea`P5t5uW)GdQ` zfmT`SyeDhNdVi`q1DTdamzAX zvfgVc5u8SvxbnD)D*dWYa+te5cLTjRve6+Unk?%M(~+Mhd9Tht98YRhPc&U0;(e2XjwrHza85 zupqJKS-4-m^E`ZXYl#opBUATr%YNc&-+%*nlSHrI3L=*eWZM#c^ zXnaC}+CyS^>R%l$^43Lnhht)?eugnh133kadR~N<$P?&jS$CgLfxG8}r5P>_dzN_z zIc}()Aug|AM+O1&c)`87f(V7y;@vl$cY_xn4a8 zce_~PIdS`j(dpr@#%p^W`Jx=d>)Oat2^X)j(#6B7-Ds8(J(2kI{S6`L?!$LP#3$}T zrEtN0UwrFSYSGssAVDxkYcc9*Px2E_xDWkNgN&92gZE8ksc0C%k6&t*dAuOAh?b|% zYTdia&qtu@bX8@iNct6)98@I!sh;c`we`owLw(<^duaZdaSZ&=a_;Ed3f6P$U4QjqjPbVm#R##;s{?ZSgVZ^ zm}O%lH5i{tB;deX{8f(TV_wc+kRg4hI$}y{*cH!i>1uVksEZc#Qs%Xx3$NdQ)hexQ z=rg;_7$HFRuCf~Wc*($AxMoE(|NgS^SM5h8oYSXI2tXY_Q`MnXb^U)^ptA5MU4WA9 zj&h-@Y66MJmll{^c^R0P&U4?DZe}y_Y?{ilx1n9uUMda!>zg7q&fxMQrE6VP=pYd_ zgn!()ht&XFc^aWAv)t;M3DD7DNCZ~e0-!l(>HO1o4C1tKg(co9>)Xq#^;EWI*#V-9 zx0L?pu`6Qg+X_JPk{ah0;wm%)%~XN0vGzWbp`iv7m9K|7u``lVJ76$N#zc1S>>Px3 zak(v@^L=~N;w4(rO{$mj(ewV~SAMigDCL``sgT76)te}ec&HlaCxTBywMdPg~aE~z=%1b6?(((zxs8bu{H+1!`#2wjF$HoNZ= z;`iVF$`%VwRi)|ny=uLCu4kTR7Uh+dC1X@GZ*QkOcllnxEX5g@rsg?!51Z-u#Gk(% z>(Z8gBQzNZN#1arw5R7I{qql9JshQ(Nk4(@kr1QhCel7tEE=D-5>t;BJwk-jYC1>7 zlRU${y^roNmt_-0p>_is?!4UM*fAE-t-qpVT1j@?xRuGvp)ldrfOG{qe6b=vS=z+= zZg)jk;W9Bj=Ba79VUF#qog`J z0Jd=PFa&;C0TrvGo|a^;|IC&%>Zq9%&9T@RkRXV#<(cnr#De=G7nBdIPABwn%bySu zhV6+t0%!Hz1fuE7^=+SL$^7AMFEI6m1ft$eAZm2{L-VnB;qTA)xMb10r=}^`h>uXB z8Trli7{5vK==`n^Y%B6c+Tbxf z><-eO;8-aBjxvg?LuCCZVv%2)pfS)1BMEAA%NI~ld)F2UW@#w&AH^Py=A(t-(2}A^$K@S4Q z(j&n8fh)YQ&X93d>GDlz{CCzJ!H&{z6Q7<(lOExP+`vCu)Fe6_C3Vt=q?xQFumI`; z%VX%v@(sUS)7&O9lK-MvnUg?4Gbv`H@TN4 ziw;QtxKD_6kNj_~4L!Y#i&w_CtnCBj2sr+-Y)|6!%rJ^(`>}{#vgv4&v_@n6pd8Jr$`O5dT(bPruh_7aCGKaFC}s8jGO)3PIHhl0DtFuzNexb@FvvbdP@b z*@^y#J=u@Y!wM~SLe|{NU=_FR67lfb{F9Eka86v>*G})B8+_M!0m9D5Vc$RdRpPso zp_4Qa@4v=SZE`to_uzi9wTt}zfD6IeHtgc4o23qaGJ+vNC;mLshx@fPc2rV<^bSLP zV}ISILDQvD#hm+np{04wL@z3;<)2Rc@gYCVBl1-Qx$@DPO_`{mHBK$KRDq&!=V{|? zrGwsjtU__AB8l&^_Ed%D4>W|eeKmHMV4qGxDA>8ZRY37qyhIq@TYcu*U@@W}z*R^V zI~;U$j9c9J&drRNXC5>F0IzZ*KDwom6~Ss}b&sEfl$;k_)6}nVLz3#p)1w=o0lW?W zD6@b4fqX=J-aMBI3|k zc~PmJ28=xoQ#QMnUVe~`783ruD`&v|SLuV+0Nh;5oAAUx%&{qwk}U&P&5;_&NH3Ou zBK%>{6DB??a$yIBHs<^^u$)?u>FIIDvlZ9eE|F*#9{EO~qoZ!P@P z)uC8EDNdF!^YPzeiEVV2n}y%V8E0166uX~CjFsCk7p{>zx@5wqC?&KFp%mFPNcRDI zRA7oF*^T$jRWYx^O}R_F(N>6PCr5g8=dp$ogh`5i!k>t3qJBi4@FpSa#P*rMc0Fm# z;z6d88U_0P?v4{Mi)Ycz)v$l_#>y|nX_gzq)C#(9<5&cU42=43&`90TYv2F~0D(3O z<{Ou>cXzv~%J9W-qfw2d(GqP%{VccC%zy}t0hN1w|67nA$CiyLHEU;A6R#1{)7fPQXBt7dn6GKRi4ZtiJq1fD1#Nr%-dK_o z@S~vi`4_(CDDFKKggIJn?u=278x%l%a8<+NWbY*3G@pG=B{^bc?mk|$y?XujS5J$m z1nyU!t0K)pulKR=tLiJOY(kuojM@w4Mic|c6W$5nhp2ZSdxj4Ct#+<~4=_Y#V-|I0 zyF$GXlc@*kI6G4l(jRtuC&cx_JjyF;Q;0>I5Yh!8{{xB-BH0%QyxQokv{8mTzbOA% z%@1Bu`mC1Z9YX9Q<=r-#6T_|@PRPXEw>xHr+AVLkypi3GXe?_M19unWnhe#w;EVH& ztju7duD9xbUuOAaf3WO&mvVAC-%~dX1S+9*La?Q1T6&Na2|aNX>0+Ml`tznLbZu{_ zi1$ZCxr_^ZJm>FMS_s#&IfrcAO?u0?BxH|c)Be9kUVF(ANwAh8JvZSJAH3mVZf5|g zl)*1qBAB$9fhYG=NJ$EkA3qn-5`L8|cRCKs{P)2kGe0cCF8pU?+S*)`hdfS{wK&#y zzy4g7IEO!U@q{ln%;#w21&xx&xrR+J?RS0B$!UxfIv5oRr%obRpZJub$Ah&nxp`>D zhYkSTV)_e@aqG8CySG<&c76yUv=*?A+M?h-4s0hK(9K@Us|^%@4l6O z!r4VIrej7uQm=tt?#-Vu=BIR`1WVcqu5?{yc^R9-MK_J?=B=?52+dMsapK5Xb~~~p z%o~Y<>bBHJcf>j!Z2r~e;^_AIo3Lu^oSdQn#KYtsoBpkJAV!0FY2qjm)6h2EVfw|# zP!Q%8txP!`zhl7G7MLI34Q!>lI-D`+;>{uSrw2iL6u>URlJ>sUWCRZb74-5zCx@^~ zjP6Gd0VxE#-=@k~wXVCY&m;r^eXmzZr`(#@hWB`|l}&%Eb+D7y0tp>Bx5q5U56nfS zWYJ!0DpjHUSKSZiUlHkNKYwm>xkvlcMEs?G?~U|ZS55{>kzeBPN8O-(mksWxk>W!H z!aL+M1>wt`_nZ#ca>$}0V5B#G;HMGra1k!@-;g0f1QX-}@?rn(i{k^2BL4RlW?s6F zp6>s9_wVN!p66rezk>hsOosFWL`(Jm{}~4AjB*zX>wjwcuYe!S|6RMP(*KqYy88r~ sTK~2CU+DxPD2Q_5f2;d{-1z>xmxBnNb-V@@L}&nHB^4xU#f*ag55`%QJOBUy literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..6054668 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,26 @@ + + + + + Document + + + + + + +
    + + + + + diff --git a/example_data/.~lock.antismash_1.csv# b/example_data/.~lock.antismash_1.csv# new file mode 100644 index 0000000..051a225 --- /dev/null +++ b/example_data/.~lock.antismash_1.csv# @@ -0,0 +1 @@ +,pavloh,pavlo-pc,22.01.2021 17:35,file:///home/pavloh/.config/libreoffice/4; \ No newline at end of file diff --git a/example_data/SEMPI.csv b/example_data/SEMPI.csv new file mode 100644 index 0000000..b0c767d --- /dev/null +++ b/example_data/SEMPI.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type" +1,265499,285807,"pks" +2,322194,323364,"nrps" +3,678973,680272,"nrps" +4,800581,817050,"nrps" +5,1077319,1078492,"nrps" +6,1120168,1273261,"nrps__pks-nrps" +7,1634731,1645837,"pks" +8,1735774,1737064,"nrps" +9,2102191,2103460,"nrps" +10,2627016,2628345,"nrps" +11,2703209,2704668,"pks" +12,2944104,2946367,"pks" +13,2987966,2989091,"nrps" +14,3123926,3125336,"nrps" +15,3677936,3678632,"nrps" +16,3939899,3941174,"nrps" +17,3974093,3997968,"nrps" +18,4357991,4359218,"nrps" +19,4511151,4550615,"nrps-pks" +20,4830004,4831306,"nrps" +21,5072759,5074112,"nrps" +22,6473671,6476491,"nrps" +23,6498100,6519166,"nrps" +24,6608007,6648672,"nrps-pks__pks-nrps" +25,6907668,6910487,"nrps" +26,7025702,7026944,"nrps" +27,7064162,7065458,"nrps" +28,7274612,7275953,"nrps" +29,7475842,7477030,"nrps" +30,7578772,7646060,"pks" +31,7719109,7790550,"pks" +32,8020281,8058514,"nrps" +33,8421143,8427440,"pks" diff --git a/example_data/antismash.csv b/example_data/antismash.csv index 5ed3489..c5bae03 100755 --- a/example_data/antismash.csv +++ b/example_data/antismash.csv @@ -1,41 +1,34 @@ -Cluster,Start,Stop,Type -1,246653,289035, PKS -2,335166,341095,Saccharide -3,738785,742279,Other -4,1016423,1017610,PKS -5,1027563,1051082,Other -6,1121707,1212402,PKS -7,1237690,1273267,NRPS -8,1473681,1476488,PKS -9,1620953,1667528,PKS -10,2301274,2304405,Other -11,2700072,2709366,PKS -12,3187463,3191286,Terpene -13,3323050,3324394,Other -14,3411660,3417647,NRPS -15,4509957,4535739,NRPS -16,4554282,4563340,Other -17,4995266,5003746,Other -18,4997513,5003746,RiPP -19,5735976,5738290,Terpene -20,6374219,6384127,Other -21,6453759,6520752,NRPS -22,6522403,6527344,RiPP -23,6552992,6560907,Terpene -24,6588268,6597540,Other -25,6606883,6632271,NRPS -26,6643964,6676435,PKS -27,6731997,6741890,Other -28,6770569,6772731,Terpene -29,6952316,6959533,Other -30,6985105,6991275,Other -31,7019743,7027247,Other -32,7293687,7298086,RiPP -33,7298435,7307214,RiPP -34,7427159,7440932,Terpene -35,7480261,7485226,RiPP -36,7571920,7665592,PKS -37,7705775,7792970,PKS -38,8000207,8077410,NRPS -39,8414168,8439406,PKS -40,8461058,8490615,Saccharide +"Cluster","Start","Stop","Type" +1,246652,307928,"t1pks__nrps-like" +2,325165,346365,"amglyccycl" +3,736284,745348,"melanin" +4,998058,1051082,"t3pks__other" +5,1121706,1292282,"oligosaccharide__pks-like__t1pks__nrps" +6,1453680,1494745,"t3pks" +7,1618485,1667940,"t1pks__hgle-ks" +8,2298100,2308505,"ectoine" +9,2669164,2740782,"t2pks" +10,3180406,3199484,"terpene" +11,3318899,3329394,"melanin" +12,3411659,3422303,"siderophore" +13,4492104,4583340,"nrps__transat-pks__other" +14,4669908,4678868,"ripp-like" +15,4990708,5013025,"lap" +16,5727277,5746817,"terpene" +17,6374218,6384127,"siderophore" +18,6453758,6538291,"nrps__lassopeptide" +19,6546409,6568422,"terpene" +20,6586783,6683387,"ripp-like__nrps__t2pks__napaa__oligosaccharide" +21,6731996,6741890,"ripp-like" +22,6761411,6782429,"terpene" +23,6951363,6964533,"siderophore" +24,6982756,6993755,"butyrolactone" +25,7009742,7037247,"betalactone" +26,7285072,7313149,"lassopeptide__rre-containing__lanthipeptide-class-i" +27,7417158,7443982,"terpene" +28,7471349,7493810,"lassopeptide" +29,7556442,7665592,"t1pks__nrps-like" +30,7699487,7810757,"t1pks" +31,8000158,8078955,"nrps__ripp-like" +32,8401116,8447860,"t1pks" +33,8452278,8498749,"oligosaccharide__rre-containing__lap" diff --git a/example_data/antismash.json.REMOVED.git-id b/example_data/antismash.json.REMOVED.git-id new file mode 100644 index 0000000..906e60a --- /dev/null +++ b/example_data/antismash.json.REMOVED.git-id @@ -0,0 +1 @@ +f698f31add3d5b13d40eb5631ccda00d8f5597ea \ No newline at end of file diff --git a/example_data/duptable.tsv b/example_data/duptable.tsv new file mode 100644 index 0000000..51250d2 --- /dev/null +++ b/example_data/duptable.tsv @@ -0,0 +1,45 @@ +#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description +TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [Unknown|dxs1|1-deoxy-D-xylulose-5-phosphate synthase|loc|6712277 6714206 1 # ID=1_5943|Type=CDS|transl_table=11; Unknown|dxs2|1-deoxy-D-xylulose-5-phosphate synthase|loc|7436822 7438721 1 # ID=1_6578|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase +TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [Unknown|rpmB1|50S ribosomal protein L28|loc|4887509 4887746 -1 # ID=1_4317|Type=CDS|transl_table=11; Unknown|rpmB2|50S ribosomal protein L28|loc|6124403 6124589 -1 # ID=1_5460|Type=CDS|transl_table=11] L28: ribosomal protein bL28 +TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [Unknown|ispG1|4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase|loc|6242068 6243226 1 # ID=1_5567|Type=CDS|transl_table=11; Unknown|ispG2|4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase|loc|7435657 7436791 1 # ID=1_6577|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase +TIGR02274 2.0 1.0 0.1643 0.9211 0.9474 [Unknown|dcd1|Deoxycytidine triphosphate deaminase|loc|4719717 4720293 1 # ID=1_4174|Type=CDS|transl_table=11; Unknown|dcd2|Deoxycytidine triphosphate deaminase|loc|8486597 8487128 1 # ID=1_7362|Type=CDS|transl_table=11] dCTP_deam: deoxycytidine triphosphate deaminase +TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [Unknown|dnaJ1|Chaperone protein DnaJ|loc|3116201 3117338 -1 # ID=1_2771|Type=CDS|transl_table=11; Unknown|dnaJ2|Chaperone protein DnaJ|loc|4733940 4735113 1 # ID=1_4187|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ +TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [Unknown|rpsR1|30S ribosomal protein S18|loc|4433682 4433919 -1 # ID=1_3932|Type=CDS|transl_table=11; Unknown|rpsR2|30S ribosomal protein S18 1|loc|4889393 4889627 1 # ID=1_4321|Type=CDS|transl_table=11] S18: ribosomal protein bS18 +TIGR00220 2.0 1.0 0.3192 0.8053 0.8684 [Unknown|mscL1|Large-conductance mechanosensitive channel|loc|3853401 3853878 1 # ID=1_3391|Type=CDS|transl_table=11; Unknown|mscL2|Large-conductance mechanosensitive channel|loc|8550888 8551332 1 # ID=1_7418|Type=CDS|transl_table=11] mscL: large conductance mechanosensitive channel protein +TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [Unknown|tal2|Transaldolase|loc|2373526 2374645 1 # ID=1_2103|Type=CDS|transl_table=11; Unknown|tal5|Transaldolase|loc|7343748 7344918 -1 # ID=1_6497|Type=CDS|transl_table=11] tal_mycobact: transaldolase +TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [Unknown|aroA1|3-phosphoshikimate 1-carboxyvinyltransferase|loc|3380360 3381596 -1 # ID=1_2990|Type=CDS|transl_table=11; Unknown|aroA2|3-phosphoshikimate 1-carboxyvinyltransferase|loc|5721614 5722931 -1 # ID=1_5094|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase +TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [Unknown|zwf1|Glucose-6-phosphate 1-dehydrogenase|loc|2374646 2376185 1 # ID=1_2104|Type=CDS|transl_table=11; Unknown|zwf2|Glucose-6-phosphate 1-dehydrogenase|loc|7342162 7343752 -1 # ID=1_6496|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase +TIGR00534 2.0 1.0 0.424 0.2526 0.3 [Unknown|-|Glucose-6-phosphate dehydrogenase subunit|loc|2376181 2377246 1 # ID=1_2105|Type=CDS|transl_table=11; Unknown|-|Glucose-6-phosphate dehydrogenase subunit|loc|7341239 7342166 -1 # ID=1_6495|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA +TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [Unknown|uppP1|Undecaprenyl-diphosphatase|loc|899428 900265 -1 # ID=1_800|Type=CDS|transl_table=11; Unknown|uppP2|Undecaprenyl-diphosphatase|loc|1657447 1658323 1 # ID=1_1454|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP +TIGR00759 2.0 1.0 0.4291 0.6895 0.8474 [Unknown|aceE1|Pyruvate dehydrogenase E1 component|loc|2686292 2688995 1 # ID=1_2377|Type=CDS|transl_table=11; Unknown|aceE2|Pyruvate dehydrogenase E1 component|loc|2931566 2934314 1 # ID=1_2613|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type +TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [Unknown|-|Adenine deaminase|loc|754475 755555 -1 # ID=1_664|Type=CDS|transl_table=11; Unknown|-|Adenine deaminase|loc|3107499 3108504 -1 # ID=1_2763|Type=CDS|transl_table=11; Unknown|-|Aminodeoxyfutalosine deaminase|loc|5163492 5164533 -1 # ID=1_4589|Type=CDS|transl_table=11; Unknown|-|Adenine deaminase|loc|5416442 5417606 1 # ID=1_4825|Type=CDS|transl_table=11; Unknown|add2|Aminodeoxyfutalosine deaminase|loc|6213032 6214100 -1 # ID=1_5544|Type=CDS|transl_table=11] aden_deam: adenosine deaminase +TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [Unknown|rsgA1|Putative ribosome biogenesis GTPase RsgA|loc|5720594 5721605 -1 # ID=1_5093|Type=CDS|transl_table=11; Unknown|rsgA2|Putative ribosome biogenesis GTPase RsgA|loc|6866049 6867126 1 # ID=1_6079|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A +TIGR01900 2.0 1.0 0.1704 0.8526 0.8789 [Unknown|dapE3|Succinyl-diaminopimelate desuccinylase|loc|3538147 3539203 -1 # ID=1_3134|Type=CDS|transl_table=11; Unknown|dapE4|Succinyl-diaminopimelate desuccinylase|loc|5627312 5628392 1 # ID=1_5013|Type=CDS|transl_table=11] dapE-gram_pos: succinyl-diaminopimelate desuccinylase +TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [Unknown|pepN5|Aminopeptidase N|loc|2487053 2489564 -1 # ID=1_2199|Type=CDS|transl_table=11; Unknown|pepN6|Aminopeptidase N|loc|3242275 3244915 1 # ID=1_2873|Type=CDS|transl_table=11; Unknown|pepN7|Aminopeptidase N|loc|3260851 3263425 -1 # ID=1_2887|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N +TIGR01311 3.0 1.0 0.7691 0.6474 0.8684 [Unknown|glpK1|Glycerol kinase|loc|659285 660800 1 # ID=1_575|Type=CDS|transl_table=11; Unknown|glpK2|Glycerol kinase|loc|1745300 1746830 1 # ID=1_1537|Type=CDS|transl_table=11; Unknown|glpK3|Glycerol kinase|loc|2063707 2065246 1 # ID=1_1817|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase +TIGR01751 2.0 1.0 0.7221 0.2158 0.3 [Unknown|ccrA2|Crotonyl-CoA reductase|loc|1109375 1110752 -1 # ID=1_981|Type=CDS|transl_table=11; Unknown|ccr2|Crotonyl-CoA reductase|loc|7200045 7201389 -1 # ID=1_6368|Type=CDS|transl_table=11] crot-CoA-red: crotonyl-CoA carboxylase/reductase +TIGR00273 2.0 1.0 0.3612 0.3842 0.3947 [Unknown|lutB1|Lactate utilization protein B|loc|2812043 2813489 1 # ID=1_2490|Type=CDS|transl_table=11; Unknown|lutB2|Lactate utilization protein B|loc|7936866 7938345 -1 # ID=1_6911|Type=CDS|transl_table=11] TIGR00273: iron-sulfur cluster-binding protein +TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [Unknown|thrS1|Threonine--tRNA ligase|loc|1908701 1910678 -1 # ID=1_1675|Type=CDS|transl_table=11; Unknown|thrS2|Threonine--tRNA ligase 1|loc|4650160 4651411 1 # ID=1_4109|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase +TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [Unknown|tsaC|Threonylcarbamoyl-AMP synthase|loc|636288 636909 1 # ID=1_552|Type=CDS|transl_table=11; Unknown|ywlC|Threonylcarbamoyl-AMP synthase|loc|5859706 5860354 1 # ID=1_5219|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family +TIGR02227 4.0 1.0 1.1572 0.5579 0.9789 [Unknown|lepB1|Signal peptidase I|loc|6169325 6170027 1 # ID=1_5499|Type=CDS|transl_table=11; Unknown|lepB2|Signal peptidase I|loc|6170019 6171111 1 # ID=1_5500|Type=CDS|transl_table=11; Unknown|lepB3|Signal peptidase I|loc|6171094 6171985 1 # ID=1_5501|Type=CDS|transl_table=11; Unknown|lepB4|Signal peptidase I|loc|6172048 6172831 1 # ID=1_5502|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I +TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [Unknown|trpS1|Tryptophan--tRNA ligase|loc|4970808 4971834 -1 # ID=1_4401|Type=CDS|transl_table=11; Unknown|trpS2|Tryptophan--tRNA ligase|loc|5353858 5354875 1 # ID=1_4763|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase +TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [Unknown|cobT|Nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase|loc|1929960 1934466 -1 # ID=1_1697|Type=CDS|transl_table=11; Unknown|cobU2|Nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase|loc|2674418 2675525 1 # ID=1_2368|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase +SHMT 4.0 1.0 0.8787 0.5842 0.9474 [Unknown|glyA1|Serine hydroxymethyltransferase|loc|4539708 4541067 1 # ID=1_4013|Type=CDS|transl_table=11; Unknown|glyA2|Serine hydroxymethyltransferase|loc|5352281 5353736 1 # ID=1_4762|Type=CDS|transl_table=11; Unknown|glyA3|Serine hydroxymethyltransferase|loc|5861127 5862366 1 # ID=1_5221|Type=CDS|transl_table=11; Unknown|glyA4|Serine hydroxymethyltransferase 2|loc|5994150 5995419 -1 # ID=1_5342|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase +TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [Unknown|glmS2|Glutamine--fructose-6-phosphate aminotransferase [isomerizing]|loc|3422349 3424167 1 # ID=1_3023|Type=CDS|transl_table=11; Unknown|glmS3|Glutamine--fructose-6-phosphate aminotransferase [isomerizing]|loc|5228530 5230378 1 # ID=1_4659|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) +GrpE 2.0 1.0 0.521 0.8368 1.0 [Unknown|-|heat shock protein GrpE|loc|4733241 4733904 1 # ID=1_4186|Type=CDS|transl_table=11; Unknown|-|heat shock protein GrpE|loc|6692583 6693033 -1 # ID=1_5928|Type=CDS|transl_table=11] PF01025.15: GrpE +Cpn10 2.0 1.0 0.519 0.6211 1.0 [Unknown|groS1|10 kDa chaperonin 1|loc|3499662 3500022 1 # ID=1_3097|Type=CDS|transl_table=11; Unknown|groS2|10 kDa chaperonin|loc|5251830 5252139 1 # ID=1_4681|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit +Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [Unknown|rpsN|30S ribosomal protein S14|loc|4887204 4887510 -1 # ID=1_4316|Type=CDS|transl_table=11; Unknown|rpsZ|30S ribosomal protein S14 type Z|loc|5207170 5207356 1 # ID=1_4633|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e +TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [Unknown|rpmE1|50S ribosomal protein L31 type B|loc|1410039 1410303 1 # ID=1_1178|Type=CDS|transl_table=11; Unknown|rpmE2|50S ribosomal protein L31 type B|loc|4887979 4888243 1 # ID=1_4319|Type=CDS|transl_table=11; Unknown|rpmE3|50S ribosomal protein L31|loc|5857375 5857600 1 # ID=1_5216|Type=CDS|transl_table=11] L31: ribosomal protein bL31 +TIGR00674 3.0 1.0 0.6145 0.7737 0.9684 [Unknown|dapA2|4-hydroxy-tetrahydrodipicolinate synthase|loc|2344992 2345892 1 # ID=1_2074|Type=CDS|transl_table=11; Unknown|dapA3|4-hydroxy-tetrahydrodipicolinate synthase|loc|4553023 4553914 -1 # ID=1_4024|Type=CDS|transl_table=11; Unknown|dapA4|4-hydroxy-tetrahydrodipicolinate synthase|loc|6293229 6294129 1 # ID=1_5605|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase +TIGR02350 2.0 1.0 0.5448 0.8579 1.0 [Unknown|dnaK1|Chaperone protein DnaK|loc|4731391 4733242 1 # ID=1_4185|Type=CDS|transl_table=11; Unknown|dnaK2|Chaperone protein DnaK|loc|6693035 6694892 -1 # ID=1_5929|Type=CDS|transl_table=11] prok_dnaK: chaperone protein DnaK +TIGR02891 5.0 1.0 0.9994 0.4474 0.8474 [Unknown|ctaD1|Cytochrome c oxidase subunit 1|loc|2175587 2177255 1 # ID=1_1922|Type=CDS|transl_table=11; Unknown|ctaD2|Cytochrome c oxidase subunit 1|loc|2652514 2654248 -1 # ID=1_2349|Type=CDS|transl_table=11; Unknown|ctaD3|Cytochrome c oxidase subunit 1|loc|2972347 2974072 -1 # ID=1_2650|Type=CDS|transl_table=11; Unknown|ctaD4|Cytochrome c oxidase subunit 1|loc|8066075 8067758 -1 # ID=1_6999|Type=CDS|transl_table=11; Unknown|ctaD5|Cytochrome c oxidase subunit 1|loc|8085187 8086780 -1 # ID=1_7016|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I +TIGR03690 2.0 1.0 0.2534 0.5684 0.6105 [Unknown|prcB1|Proteasome subunit beta precursor|loc|2041805 2042582 -1 # ID=1_1800|Type=CDS|transl_table=11; Unknown|prcB2|Proteasome subunit beta precursor|loc|8134820 8135675 1 # ID=1_7058|Type=CDS|transl_table=11] 20S_bact_beta: proteasome, beta subunit +TIGR03451 2.0 1.0 0.5052 0.5789 0.6895 [Unknown|-|S-(hydroxymethyl)mycothiol dehydrogenase|loc|1759277 1760363 1 # ID=1_1547|Type=CDS|transl_table=11; Unknown|-|S-(hydroxymethyl)mycothiol dehydrogenase|loc|8090557 8091646 1 # ID=1_7021|Type=CDS|transl_table=11] mycoS_dep_FDH: S-(hydroxymethyl)mycothiol dehydrogenase +TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [Unknown|def1|Peptide deformylase|loc|1539367 1539967 -1 # ID=1_1343|Type=CDS|transl_table=11; Unknown|def2|Peptide deformylase|loc|5087116 5087740 -1 # ID=1_4518|Type=CDS|transl_table=11; Unknown|def3|Peptide deformylase|loc|5734871 5735522 1 # ID=1_5105|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase +TIGR01023 2.0 1.0 0.6482 0.5737 0.9895 [Unknown|rpmG1|50S ribosomal protein L33 2|loc|4887807 4887972 1 # ID=1_4318|Type=CDS|transl_table=11; Unknown|rpmG2|50S ribosomal protein L33 2|loc|5157191 5157356 1 # ID=1_4581|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 +TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [Unknown|efeN|putative deferrochelatase/peroxidase EfeN precursor|loc|2795009 2796266 1 # ID=1_2474|Type=CDS|transl_table=11; Unknown|-|Dye-decolorizing peroxidase precursor|loc|4387490 4388777 1 # ID=1_3889|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme +TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [Unknown|-|putative kinase inhibitor protein|loc|931745 932255 1 # ID=1_839|Type=CDS|transl_table=11; Unknown|-|putative kinase inhibitor|loc|2224435 2224975 1 # ID=1_1963|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family +TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [Unknown|tuf1|Elongation factor Tu|loc|1653344 1654514 -1 # ID=1_1449|Type=CDS|transl_table=11; Unknown|tuf2|Elongation factor Tu|loc|5185979 5187173 1 # ID=1_4606|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu +TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [Unknown|fusA1|Elongation factor G|loc|5183696 5185823 1 # ID=1_4605|Type=CDS|transl_table=11; Unknown|fusA2|Elongation factor G|loc|7308115 7310167 1 # ID=1_6466|Type=CDS|transl_table=11] EF-G: translation elongation factor G +TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [Unknown|pyk1|Pyruvate kinase|loc|2479597 2481034 -1 # ID=1_2194|Type=CDS|transl_table=11; Unknown|pyk2|Pyruvate kinase|loc|5919317 5920742 -1 # ID=1_5280|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase +TIGR01534 4.0 1.0 0.6895 0.6737 1.0 [Unknown|gap1|Glyceraldehyde-3-phosphate dehydrogenase 1|loc|435560 436559 1 # ID=1_372|Type=CDS|transl_table=11; Unknown|gap2|Glyceraldehyde-3-phosphate dehydrogenase|loc|612650 614096 1 # ID=1_529|Type=CDS|transl_table=11; Unknown|gap3|Glyceraldehyde-3-phosphate dehydrogenase 2|loc|2394674 2395682 -1 # ID=1_2121|Type=CDS|transl_table=11; Unknown|gap4|Glyceraldehyde-3-phosphate dehydrogenase 2|loc|7122022 7123036 1 # ID=1_6299|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/example_data/knownhits.tsv b/example_data/knownhits.tsv new file mode 100644 index 0000000..bab4341 --- /dev/null +++ b/example_data/knownhits.tsv @@ -0,0 +1,41 @@ +#Model Description Sequence id evalue bitscore Sequence description +RF0002 AAC3 2095 4.6e-56 188.6 lcl|2095|scaffold_1|source|scaffold_1|loc|2364003_2364819_1 +RF0007 ABC_efflux 2995 7.5e-171 568.0 lcl|2995|scaffold_1|source|scaffold_1|loc|3386420_3390140_-1 +RF0007 ABC_efflux 2683 2.6e-97 325.3 lcl|2683|scaffold_1|source|scaffold_1|loc|3018957_3020886_1 +RF0007 ABC_efflux 6764 4.2e-90 301.6 lcl|6764|scaffold_1|source|scaffold_1|loc|7715152_7717075_-1 +RF0007 ABC_efflux 1730 3.3e-89 298.6 lcl|1730|scaffold_1|source|scaffold_1|loc|1968904_1970719_1 +RF0007 ABC_efflux 1169 2.3e-80 269.4 lcl|1169|scaffold_1|source|scaffold_1|loc|1396252_1398055_-1 +RF0007 ABC_efflux 6690 2.6e-79 266.0 lcl|6690|scaffold_1|source|scaffold_1|loc|7561437_7563333_1 +RF0053 ClassA 7133 6.8e-96 319.4 lcl|7133|scaffold_1|source|scaffold_1|loc|8228981_8229911_1 +RF0054 ClassB 1106 1.1e-24 85.9 lcl|1106|scaffold_1|source|scaffold_1|loc|1332261_1332990_1 +PF00044.19 Gp_dh_N 2121 2.1e-61 205.3 lcl|2121|scaffold_1|source|scaffold_1|loc|2394674_2395682_-1 +PF00044.19 Gp_dh_N 372 1.9e-53 179.5 lcl|372|scaffold_1|source|scaffold_1|loc|435560_436559_1 +PF00044.19 Gp_dh_N 6299 1e-51 173.9 lcl|6299|scaffold_1|source|scaffold_1|loc|7122022_7123036_1 +PF00044.19 Gp_dh_N 529 3.1e-39 133.3 lcl|529|scaffold_1|source|scaffold_1|loc|612650_614096_1 +PF00183.13 HSP90 7231 3.2e-119 397.7 lcl|7231|scaffold_1|source|scaffold_1|loc|8332332_8334360_1 +PF00185.19 OTCace 5850 6.6e-48 161.6 lcl|5850|scaffold_1|source|scaffold_1|loc|6600464_6601487_1 +PF00185.19 OTCace 6291 5e-46 155.5 lcl|6291|scaffold_1|source|scaffold_1|loc|7114838_7115840_1 +PF00185.19 OTCace 1633 3.9e-37 126.6 lcl|1633|scaffold_1|source|scaffold_1|loc|1861580_1862558_-1 +PF00204.20 DNA_gyraseB 3964 7.8e-61 203.3 lcl|3964|scaffold_1|source|scaffold_1|loc|4472253_4474323_1 +PF00204.20 DNA_gyraseB 5696 1e-51 173.6 lcl|5696|scaffold_1|source|scaffold_1|loc|6412139_6414263_1 +PF00227.21 Proteasome 1800 2.4e-38 130.3 lcl|1800|scaffold_1|source|scaffold_1|loc|2041805_2042582_-1 +PF00227.21 Proteasome 7058 1e-36 125.1 lcl|7058|scaffold_1|source|scaffold_1|loc|8134820_8135675_1 +PF00227.21 Proteasome 1799 7.6e-27 92.8 lcl|1799|scaffold_1|source|scaffold_1|loc|2040988_2041744_-1 +PF00364.17 Biotin_lipoyl 2375 1.1e-46 155.4 lcl|2375|scaffold_1|source|scaffold_1|loc|2683419_2685207_1 +PF00364.17 Biotin_lipoyl 4071 1.1e-22 78.5 lcl|4071|scaffold_1|source|scaffold_1|loc|4605059_4606457_1 +PF00364.17 Biotin_lipoyl 3010 3.1e-19 67.4 lcl|3010|scaffold_1|source|scaffold_1|loc|3406308_3408225_1 +PF00364.17 Biotin_lipoyl 4060 2.6e-18 64.5 lcl|4060|scaffold_1|source|scaffold_1|loc|4591182_4592532_1 +PF00364.17 Biotin_lipoyl 4843 3.4e-17 60.9 lcl|4843|scaffold_1|source|scaffold_1|loc|5436153_5437926_-1 +PF00364.17 Biotin_lipoyl 3531 3.9e-16 57.5 lcl|3531|scaffold_1|source|scaffold_1|loc|3999303_4001145_-1 +PF00364.17 Biotin_lipoyl 7094 1.4e-14 52.5 lcl|7094|scaffold_1|source|scaffold_1|loc|8179287_8182713_1 +PF00521.15 DNA_topoisoIV 3965 4.3e-150 499.3 lcl|3965|scaffold_1|source|scaffold_1|loc|4474365_4476960_1 +PF00521.15 DNA_topoisoIV 5712 1.8e-148 493.9 lcl|5712|scaffold_1|source|scaffold_1|loc|6430333_6432793_-1 +PF01039.17 Carboxyl_trans 4847 4.6e-204 677.3 lcl|4847|scaffold_1|source|scaffold_1|loc|5439951_5441547_-1 +PF01039.17 Carboxyl_trans 5426 6.3e-202 670.3 lcl|5426|scaffold_1|source|scaffold_1|loc|6086740_6088336_1 +PF01039.17 Carboxyl_trans 5896 4.8e-191 634.4 lcl|5896|scaffold_1|source|scaffold_1|loc|6653508_6655083_1 +PF01039.17 Carboxyl_trans 3009 7.3e-164 544.7 lcl|3009|scaffold_1|source|scaffold_1|loc|3404680_3406297_1 +PF01039.17 Carboxyl_trans 3532 2.1e-139 464.1 lcl|3532|scaffold_1|source|scaffold_1|loc|4001153_4002752_-1 +PF01039.17 Carboxyl_trans 2664 1.6e-27 95.1 lcl|2664|scaffold_1|source|scaffold_1|loc|2989365_2990754_1 +PF13599.1 Pentapeptide_4 3624 9.4e-20 69.2 lcl|3624|scaffold_1|source|scaffold_1|loc|4096654_4097275_-1 +TIGR02013 TIGR02013 4599 0 1805.2 lcl|4599|scaffold_1|source|scaffold_1|loc|5173119_5176605_1 +TIGR00663 TIGR00663 3960 5.8e-89 297.3 lcl|3960|scaffold_1|source|scaffold_1|loc|4467911_4469042_1 diff --git a/example_data/prism.csv b/example_data/prism.csv index 3b671b1..a35433b 100755 --- a/example_data/prism.csv +++ b/example_data/prism.csv @@ -1,21 +1,21 @@ -Cluster,Start,Stop,Type -1,260780,289035,PKS-NRPS -2,740318,741556,Other -3,1112782,1275331,PKS-NRPS -4,1633484,1647940,PKS -5,2303100,2303505,Other -6,2701203,2707506,Other -7,2935789,2947755,PKS -8,3323049,3324394,Other -9,3415877,3417647,Other -10,4502785,4535739,PKS-NRPS -11,6473614,6480794,NRPS -12,6498082,6525437,NRPS -13,6623240,6677166,PKS-NRPS -14,6982007,6996654,Other -15,7292045,7301944,RiPP -16,7470952,7483810,RiPP -17,7575697,7648356,PKS-NRPS -18,7705774,7792970,PKS -19,8020158,8058955,NRPS -20,8414751,8433666,PKS +"Cluster","Start","Stop","Type" +1,260780,289035,"pks__nrps" +2,740318,741556,"melanin" +3,1112782,1275331,"pks__nrps" +4,1633484,1647940,"pks" +5,2303100,2303505,"ectoine" +6,2701203,2707506,"pentangular_polyphenol" +7,2935789,2947755,"pks" +8,3323049,3324394,"melanin" +9,3415877,3417647,"nis_synthase" +10,4502785,4535739,"pks__nrps" +11,6473614,6480794,"nrps" +12,6498082,6525437,"lasso_peptide__nrps" +13,6623240,6677166,"pks__nrps__angucycline" +14,6982007,6996654,"butyrolactone" +15,7292045,7303149,"class_i_lantipeptide__lasso_peptide" +16,7470952,7483810,"lasso_peptide" +17,7575697,7648356,"pks__nrps" +18,7705774,7792970,"pks" +19,8020158,8058955,"nrps" +20,8414751,8433666,"pks" diff --git a/example_data/prism.json.REMOVED.git-id b/example_data/prism.json.REMOVED.git-id new file mode 100644 index 0000000..754c304 --- /dev/null +++ b/example_data/prism.json.REMOVED.git-id @@ -0,0 +1 @@ +0f4d7d8aedaa814360cc432b23d42c9858ccf50d \ No newline at end of file diff --git a/scripts/.Rhistory b/scripts/.Rhistory new file mode 100644 index 0000000..e69de29 diff --git a/scripts/SEMPI.csv b/scripts/SEMPI.csv new file mode 100644 index 0000000..b0c767d --- /dev/null +++ b/scripts/SEMPI.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type" +1,265499,285807,"pks" +2,322194,323364,"nrps" +3,678973,680272,"nrps" +4,800581,817050,"nrps" +5,1077319,1078492,"nrps" +6,1120168,1273261,"nrps__pks-nrps" +7,1634731,1645837,"pks" +8,1735774,1737064,"nrps" +9,2102191,2103460,"nrps" +10,2627016,2628345,"nrps" +11,2703209,2704668,"pks" +12,2944104,2946367,"pks" +13,2987966,2989091,"nrps" +14,3123926,3125336,"nrps" +15,3677936,3678632,"nrps" +16,3939899,3941174,"nrps" +17,3974093,3997968,"nrps" +18,4357991,4359218,"nrps" +19,4511151,4550615,"nrps-pks" +20,4830004,4831306,"nrps" +21,5072759,5074112,"nrps" +22,6473671,6476491,"nrps" +23,6498100,6519166,"nrps" +24,6608007,6648672,"nrps-pks__pks-nrps" +25,6907668,6910487,"nrps" +26,7025702,7026944,"nrps" +27,7064162,7065458,"nrps" +28,7274612,7275953,"nrps" +29,7475842,7477030,"nrps" +30,7578772,7646060,"pks" +31,7719109,7790550,"pks" +32,8020281,8058514,"nrps" +33,8421143,8427440,"pks" diff --git a/scripts/antismash.csv b/scripts/antismash.csv new file mode 100644 index 0000000..c5bae03 --- /dev/null +++ b/scripts/antismash.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type" +1,246652,307928,"t1pks__nrps-like" +2,325165,346365,"amglyccycl" +3,736284,745348,"melanin" +4,998058,1051082,"t3pks__other" +5,1121706,1292282,"oligosaccharide__pks-like__t1pks__nrps" +6,1453680,1494745,"t3pks" +7,1618485,1667940,"t1pks__hgle-ks" +8,2298100,2308505,"ectoine" +9,2669164,2740782,"t2pks" +10,3180406,3199484,"terpene" +11,3318899,3329394,"melanin" +12,3411659,3422303,"siderophore" +13,4492104,4583340,"nrps__transat-pks__other" +14,4669908,4678868,"ripp-like" +15,4990708,5013025,"lap" +16,5727277,5746817,"terpene" +17,6374218,6384127,"siderophore" +18,6453758,6538291,"nrps__lassopeptide" +19,6546409,6568422,"terpene" +20,6586783,6683387,"ripp-like__nrps__t2pks__napaa__oligosaccharide" +21,6731996,6741890,"ripp-like" +22,6761411,6782429,"terpene" +23,6951363,6964533,"siderophore" +24,6982756,6993755,"butyrolactone" +25,7009742,7037247,"betalactone" +26,7285072,7313149,"lassopeptide__rre-containing__lanthipeptide-class-i" +27,7417158,7443982,"terpene" +28,7471349,7493810,"lassopeptide" +29,7556442,7665592,"t1pks__nrps-like" +30,7699487,7810757,"t1pks" +31,8000158,8078955,"nrps__ripp-like" +32,8401116,8447860,"t1pks" +33,8452278,8498749,"oligosaccharide__rre-containing__lap" diff --git a/scripts/prism.R b/scripts/prism.R index 78a926d..421b51c 100644 --- a/scripts/prism.R +++ b/scripts/prism.R @@ -1,5 +1,6 @@ library(stringr) library(dplyr) +library(tidyr) library(rjson) args = commandArgs(trailingOnly=TRUE) diff --git a/scripts/prism.csv b/scripts/prism.csv new file mode 100644 index 0000000..a35433b --- /dev/null +++ b/scripts/prism.csv @@ -0,0 +1,21 @@ +"Cluster","Start","Stop","Type" +1,260780,289035,"pks__nrps" +2,740318,741556,"melanin" +3,1112782,1275331,"pks__nrps" +4,1633484,1647940,"pks" +5,2303100,2303505,"ectoine" +6,2701203,2707506,"pentangular_polyphenol" +7,2935789,2947755,"pks" +8,3323049,3324394,"melanin" +9,3415877,3417647,"nis_synthase" +10,4502785,4535739,"pks__nrps" +11,6473614,6480794,"nrps" +12,6498082,6525437,"lasso_peptide__nrps" +13,6623240,6677166,"pks__nrps__angucycline" +14,6982007,6996654,"butyrolactone" +15,7292045,7303149,"class_i_lantipeptide__lasso_peptide" +16,7470952,7483810,"lasso_peptide" +17,7575697,7648356,"pks__nrps" +18,7705774,7792970,"pks" +19,8020158,8058955,"nrps" +20,8414751,8433666,"pks" From b4ed28c421cc1a02db61cd51c402840befcfa2e5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Jan 2021 14:15:26 +0200 Subject: [PATCH 002/199] Added upload example data buttons Former-commit-id: 6fe6109d1aa186138b8d71fb45e7a07e893034b3 --- app.R | 420 +++++++++++++++++- example_data/RREFinder.txt | 19 - example_data/SEMPI.csv | 34 -- example_data/antismash.csv | 34 -- example_data/antismash.json.REMOVED.git-id | 1 - example_data/deepbgc.tsv | 103 ----- example_data/duptable.tsv | 45 -- example_data/knownhits.tsv | 41 -- example_data/prism.csv | 21 - example_data/prism.json.REMOVED.git-id | 1 - example_data/sco_antismash.csv | 28 ++ .../sco_antismash.json.REMOVED.git-id | 1 + example_data/sco_deep.tsv | 173 ++++++++ example_data/sco_duptable.tsv | 73 +++ example_data/sco_knownhits.tsv | 48 ++ example_data/sco_prism.json.REMOVED.git-id | 1 + example_data/sco_rre.txt | 3 + example_data/sco_sempi.csv | 34 ++ 18 files changed, 774 insertions(+), 306 deletions(-) delete mode 100755 example_data/RREFinder.txt delete mode 100644 example_data/SEMPI.csv delete mode 100755 example_data/antismash.csv delete mode 100644 example_data/antismash.json.REMOVED.git-id delete mode 100755 example_data/deepbgc.tsv delete mode 100644 example_data/duptable.tsv delete mode 100644 example_data/knownhits.tsv delete mode 100755 example_data/prism.csv delete mode 100644 example_data/prism.json.REMOVED.git-id create mode 100644 example_data/sco_antismash.csv create mode 100644 example_data/sco_antismash.json.REMOVED.git-id create mode 100644 example_data/sco_deep.tsv create mode 100644 example_data/sco_duptable.tsv create mode 100644 example_data/sco_knownhits.tsv create mode 100644 example_data/sco_prism.json.REMOVED.git-id create mode 100644 example_data/sco_rre.txt create mode 100644 example_data/sco_sempi.csv diff --git a/app.R b/app.R index c8246ef..01725fe 100755 --- a/app.R +++ b/app.R @@ -40,24 +40,30 @@ ui <- fluidPage( checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), fileInput("anti_data", "Upload antismash data"), + actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), h5(id = "prism_header_upload","PRISM:"), checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), fileInput("prism_data", "Upload PRISM data"), + actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), h5(id = "sempi_header_upload","SEMPI:"), fileInput("sempi_data", "Upload SEMPI 2.0 data"), + actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), h5(id = "deep_header_upload","DEEPBGC:"), fileInput("deep_data", "Upload DeepBGC data"), + actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), h5(id = "rre_header_upload","RRE-FINDER:"), fileInput("rre_data", "Upload RRE-Finder data"), + actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), h5(id = "arts_header_upload","ARTS:"), fileInput("known_data", "Upload ARTS knownhits data"), fileInput("dup_data", "Upload ARTS duptable data"), + actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), # Numeric input of chromosome length of analyzed sequence numericInput("chr_len", "Please type chr len of an organism", value = 8773899), h3("Antismash, SEMPI and PRISM data options"), @@ -193,11 +199,346 @@ server <- function(input, output, session) { sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL + df_ps = NULL, arts_interact = NULL, rre_more = FALSE ) vals$rename_data <- read.csv("rename.csv") + observeEvent(input$anti_sco,{ + anti_data <- read.csv("example_data/sco_antismash.csv") + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "Antismash" ) + updateSelectInput(session, "group_by", + selected = "A" ) + updateSelectInput(session, "ref_comparison", + selected = "A") + updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + } + + }) + + observeEvent(input$prism_sco,{ + # Read data + data <- fromJSON(file = "example_data/sco_prism.json") + + + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(cbind(start, end, types)) + prism_data <- prism_data %>% + transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + vals$biocircos_color = F + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(regul_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(resist_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + + final_reg <- rbind(res_genes, reg_genes) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + vals$prism_supp <- final_reg + vals$prism_json = T + + prism_data$Type <- str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism$Cluster + # Save file + write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "PRISM" ) + updateSelectInput(session, "group_by", + selected = "P" ) + updateSelectInput(session, "ref_comparison", + selected = "P") + updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + } + }) + + observeEvent(input$sempi_sco,{ + + sempi_data <- read.csv("example_data/sco_sempi.csv") + sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "SEMPI" ) + updateSelectInput(session, "group_by", + selected = "S" ) + updateSelectInput(session, "ref_comparison", + selected = "S") + updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + } + + }) + + observeEvent(input$arts_sco, { + + data <- read.delim("example_data/sco_duptable.tsv") + + get_location_duptable <- function(x, y){ + test <- str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + + data <- read.delim("sco_knownhits.tsv") + locations <- sapply(data$Sequence.description, function(x){ + tail(str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + }) + + observeEvent(input$deep_sco, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + # Read data + vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% + mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + select(-one_of(drop_cols)) + # Add chromosome info column + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "DeepBGC" ) + updateSelectInput(session, "group_by", + selected = "D" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + }) + + observeEvent(input$rre_sco, { + # Read data + vals$rre_data <- read.delim("example_data/sco_rre.txt") + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- vals$rre_data %>% + separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + updateSelectInput(session, "group_by", + selected = "R" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "RRE-Finder", + selected = "RRE") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + }) + # Observe antismash data input and save as reactive value observeEvent(input$anti_data,{ # Read data @@ -612,6 +953,11 @@ server <- function(input, output, session) { selected = "RRE") } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } }) # Observe input of chromosome length observeEvent(input$chr_len,{ @@ -1353,6 +1699,12 @@ server <- function(input, output, session) { hideElement(selector = "#arts_header_upload") hideElement(selector = "#known_data") hideElement(selector = "#dup_data") + hideElement(selector = "#anti_sco") + hideElement(selector = "#prism_sco") + hideElement(selector = "#arts_sco") + hideElement(selector = "#rre_sco") + hideElement(selector = "#sempi_sco") + hideElement(selector = "#deep_sco") }else { showElement(selector = "#anti_input_options") showElement(selector = "#anti_data") @@ -1370,6 +1722,12 @@ server <- function(input, output, session) { showElement(selector = "#arts_header_upload") showElement(selector = "#known_data") showElement(selector = "#dup_data") + showElement(selector = "#anti_sco") + showElement(selector = "#prism_sco") + showElement(selector = "#arts_sco") + showElement(selector = "#rre_sco") + showElement(selector = "#sempi_sco") + showElement(selector = "#deep_sco") } }) @@ -1551,8 +1909,6 @@ server <- function(input, output, session) { # Render barplot output$deep_barplot <- renderPlot({ - # Require deepBGC data and sntismash data to visualize plot - req(input$deep_data) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -1674,8 +2030,6 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$deep_rate <- renderPlotly({ - # Require DeepBGC and antismash data to begin plotting - req(input$deep_data) # Store scores columns in vectors for DeepBGC data score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") @@ -1930,8 +2284,8 @@ server <- function(input, output, session) { } else{ Stop_vals_RRE_in <- as.numeric(data$Stop) } - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - seg_df_2 <- data.frame(x=data$Start, + if (vals$rre_more == T){ + seg_df_2 <- data.frame(x=data$Start, y=rep(letter, length(data$Locus_tag)), xend=Stop_vals_RRE_in, yend=rep(letter, length(data$Locus_tag)), @@ -1946,6 +2300,21 @@ server <- function(input, output, session) { RRE_start = data$RRE.start, RRE_stop = data$RRE.end, Probability = data$Probability) + } else { + seg_df_2 <- data.frame(x=data$Start, + y=rep(letter, length(data$Locus_tag)), + xend=Stop_vals_RRE_in, + yend=rep(letter, length(data$Locus_tag)), + Type = rep("ripp", length(data$Locus_tag)), + Software = rep("RREFinder", length(data$Locus_tag)), + ID = data$Locus_tag, + Start = data$Start, + Stop = data$Stop, + E_value = data$E.value) + } + + # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover + return(seg_df_2) } get_prism_supp_inter <- function(x,prism_supp_inter,prism_supp, letter ){ @@ -2018,10 +2387,16 @@ server <- function(input, output, session) { deepbgc_score = deepbgc_score,activity = activity ),size =3) } geom_rre <- function(data){ + if (vals$rre_more == T){ geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, Probability = Probability),size = 3) + } else { + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } } geom_sempi <- function(data){ geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) @@ -2183,6 +2558,7 @@ server <- function(input, output, session) { activity = deep_data_chromo$product_activity) } if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ seg_ref_r <- data.frame(x=vals$rre_data$Start, y=rep("Z", length(vals$rre_data$Locus_tag)), xend=Stop_vals_RRE, @@ -2198,6 +2574,18 @@ server <- function(input, output, session) { RRE_start = vals$rre_data$RRE.start, RRE_stop = vals$rre_data$RRE.end, Probability = vals$rre_data$Probability) + } else { + seg_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Z", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Z", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value) + } seg_ref <- seg_ref_r if (input$ref == "RRE-Finder") { plot <- ggplot(rre_data, aes(x = vals$chr_len, y = Chr)) + geom_rre(seg_ref) @@ -2250,6 +2638,7 @@ server <- function(input, output, session) { ) } + if (vals$rre_more == T){ vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, y=rep("Y", length(vals$rre_data$Locus_tag)), xend=Stop_vals_RRE, @@ -2265,6 +2654,18 @@ server <- function(input, output, session) { RRE_start = vals$rre_data$RRE.start, RRE_stop = vals$rre_data$RRE.end, Probability = vals$rre_data$Probability) + } else { + vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Y", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Y", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value) + } } if (vals$prism_data_input == TRUE){ # Create a dataframe with PRISM data with all the additional info to visualize on hover @@ -2632,10 +3033,15 @@ server <- function(input, output, session) { deepbgc_score = deepbgc_score,activity = activity ),size =3) } if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, Probability = Probability),size = 3) + } else { + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + } } if (vals$prism_data_input == TRUE){ plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, diff --git a/example_data/RREFinder.txt b/example_data/RREFinder.txt deleted file mode 100755 index 7501bd4..0000000 --- a/example_data/RREFinder.txt +++ /dev/null @@ -1,19 +0,0 @@ -Gene name BGC ID BGC product Model name Probability E-value P-value Score SS Columns RRE start RRE end -S136_genome__994964-995552__S136_04530 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 95.4 5.6e-08 1.9e-08 34.1 0.0 52 10 61 -S136_genome__1303534-1303909__S136_05445 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 95.5 4e-08 1.3e-08 37.7 0.0 61 39 100 -S136_genome__1417751-1418165__S136_06025 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 97.5 2.4e-11 7.9e-12 53.4 0.0 55 60 115 -S136_genome__1751199-1751595__S136_07815 N\A N\A 5SXY:A|PDBID|CHAIN|SEQUENCE 97.0 3.5e-10 1.2e-10 48.1 0.0 52 54 106 -S136_genome__1833054-1833396__S136_08175 N\A N\A 5SXY:A|PDBID|CHAIN|SEQUENCE 96.7 1.2e-09 3.9e-10 45.8 0.0 55 29 85 -S136_genome__2025387-2025837__S136_09095 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 97.0 3.2e-10 1.1e-10 47.9 0.0 56 73 128 -S136_genome__3718935-3719745__S136_16700 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 94.2 3.4e-07 1.1e-07 35.8 0.0 54 186 239 -S136_genome__4179747-4180281__S136_18955 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 93.3 8.4e-07 2.8e-07 31.4 0.0 64 22 88 -S136_genome__5001713-5002748__S136_22670 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 97.8 2.8e-12 9.2e-13 52.2 0.0 79 5 90 -S136_genome__5798613-5799021__S136_26425 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 96.6 1.9e-09 6.3e-10 44.3 0.0 53 59 111 -S136_genome__6097646-6098045__S136_27800 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 98.0 5e-13 1.7e-13 58.7 0.0 56 52 107 -S136_genome__6524640-6524910__S136_29610 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 98.9 6.4e-17 2.1e-17 63.1 0.0 85 4 88 -S136_genome__6591003-6592851__S136_29895 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 97.6 1.1e-11 3.8e-12 57.8 0.0 73 520 595 -S136_genome__6592847-6593387__S136_29900 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 93.4 7.7e-07 2.6e-07 35.8 0.0 62 94 159 -S136_genome__7295647-7295899__S136_32985 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 98.8 3e-16 1e-16 59.7 0.0 82 1 82 -S136_genome__7300083-7303149__S136_33010 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 96.0 1.3e-08 4.3e-09 44.4 0.0 60 178 237 -S136_genome__7454655-7455027__S136_33675 N\A N\A 5V1V:B|PDBID|CHAIN|SEQUENCE 95.3 7.2e-08 2.4e-08 34.5 0.0 53 47 99 -S136_genome__8473829-8475794__S136_37625 N\A N\A 3G2B:A|PDBID|CHAIN|SEQUENCE 98.0 4.3e-13 1.4e-13 57.0 0.0 84 1 89 \ No newline at end of file diff --git a/example_data/SEMPI.csv b/example_data/SEMPI.csv deleted file mode 100644 index b0c767d..0000000 --- a/example_data/SEMPI.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,265499,285807,"pks" -2,322194,323364,"nrps" -3,678973,680272,"nrps" -4,800581,817050,"nrps" -5,1077319,1078492,"nrps" -6,1120168,1273261,"nrps__pks-nrps" -7,1634731,1645837,"pks" -8,1735774,1737064,"nrps" -9,2102191,2103460,"nrps" -10,2627016,2628345,"nrps" -11,2703209,2704668,"pks" -12,2944104,2946367,"pks" -13,2987966,2989091,"nrps" -14,3123926,3125336,"nrps" -15,3677936,3678632,"nrps" -16,3939899,3941174,"nrps" -17,3974093,3997968,"nrps" -18,4357991,4359218,"nrps" -19,4511151,4550615,"nrps-pks" -20,4830004,4831306,"nrps" -21,5072759,5074112,"nrps" -22,6473671,6476491,"nrps" -23,6498100,6519166,"nrps" -24,6608007,6648672,"nrps-pks__pks-nrps" -25,6907668,6910487,"nrps" -26,7025702,7026944,"nrps" -27,7064162,7065458,"nrps" -28,7274612,7275953,"nrps" -29,7475842,7477030,"nrps" -30,7578772,7646060,"pks" -31,7719109,7790550,"pks" -32,8020281,8058514,"nrps" -33,8421143,8427440,"pks" diff --git a/example_data/antismash.csv b/example_data/antismash.csv deleted file mode 100755 index c5bae03..0000000 --- a/example_data/antismash.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,246652,307928,"t1pks__nrps-like" -2,325165,346365,"amglyccycl" -3,736284,745348,"melanin" -4,998058,1051082,"t3pks__other" -5,1121706,1292282,"oligosaccharide__pks-like__t1pks__nrps" -6,1453680,1494745,"t3pks" -7,1618485,1667940,"t1pks__hgle-ks" -8,2298100,2308505,"ectoine" -9,2669164,2740782,"t2pks" -10,3180406,3199484,"terpene" -11,3318899,3329394,"melanin" -12,3411659,3422303,"siderophore" -13,4492104,4583340,"nrps__transat-pks__other" -14,4669908,4678868,"ripp-like" -15,4990708,5013025,"lap" -16,5727277,5746817,"terpene" -17,6374218,6384127,"siderophore" -18,6453758,6538291,"nrps__lassopeptide" -19,6546409,6568422,"terpene" -20,6586783,6683387,"ripp-like__nrps__t2pks__napaa__oligosaccharide" -21,6731996,6741890,"ripp-like" -22,6761411,6782429,"terpene" -23,6951363,6964533,"siderophore" -24,6982756,6993755,"butyrolactone" -25,7009742,7037247,"betalactone" -26,7285072,7313149,"lassopeptide__rre-containing__lanthipeptide-class-i" -27,7417158,7443982,"terpene" -28,7471349,7493810,"lassopeptide" -29,7556442,7665592,"t1pks__nrps-like" -30,7699487,7810757,"t1pks" -31,8000158,8078955,"nrps__ripp-like" -32,8401116,8447860,"t1pks" -33,8452278,8498749,"oligosaccharide__rre-containing__lap" diff --git a/example_data/antismash.json.REMOVED.git-id b/example_data/antismash.json.REMOVED.git-id deleted file mode 100644 index 906e60a..0000000 --- a/example_data/antismash.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -f698f31add3d5b13d40eb5631ccda00d8f5597ea \ No newline at end of file diff --git a/example_data/deepbgc.tsv b/example_data/deepbgc.tsv deleted file mode 100755 index 622bba4..0000000 --- a/example_data/deepbgc.tsv +++ /dev/null @@ -1,103 +0,0 @@ -sequence_id detector detector_version detector_label bgc_candidate_id nucl_start nucl_end nucl_length num_proteins num_domains num_bio_domains deepbgc_score product_activity antibacterial cytotoxic inhibitor antifungal product_class Alkaloid NRP Other Polyketide RiPP Saccharide Terpene protein_ids bio_pfam_ids pfam_ids -S136_genome deepbgc 0.1.0 deepbgc S136_genome_31749-193133.1 31749 193133 161384 143 140 6 0.89251 0.45 0.32 0.20 0.23 0.07 0.07 0.29 0.16 0.34 0.04 0.06 S136_genome_S136_genome_23;S136_genome_S136_genome_24;S136_genome_S136_genome_25;S136_genome_S136_genome_26;S136_genome_S136_genome_27;S136_genome_S136_genome_28;S136_genome_S136_genome_29;S136_genome_S136_genome_30;S136_genome_S136_genome_31;S136_genome_S136_genome_32;S136_genome_S136_genome_33;S136_genome_S136_genome_34;S136_genome_S136_genome_35;S136_genome_S136_genome_36;S136_genome_S136_genome_37;S136_genome_S136_genome_38;S136_genome_S136_genome_39;S136_genome_S136_genome_40;S136_genome_S136_genome_41;S136_genome_S136_genome_42;S136_genome_S136_genome_43;S136_genome_S136_genome_44;S136_genome_S136_genome_45;S136_genome_S136_genome_46;S136_genome_S136_genome_47;S136_genome_S136_genome_48;S136_genome_S136_genome_49;S136_genome_S136_genome_50;S136_genome_S136_genome_51;S136_genome_S136_genome_52;S136_genome_S136_genome_53;S136_genome_S136_genome_54;S136_genome_S136_genome_55;S136_genome_S136_genome_56;S136_genome_S136_genome_57;S136_genome_S136_genome_58;S136_genome_S136_genome_59;S136_genome_S136_genome_60;S136_genome_S136_genome_61;S136_genome_S136_genome_62;S136_genome_S136_genome_63;S136_genome_S136_genome_64;S136_genome_S136_genome_65;S136_genome_S136_genome_66;S136_genome_S136_genome_67;S136_genome_S136_genome_68;S136_genome_S136_genome_69;S136_genome_S136_genome_70;S136_genome_S136_genome_71;S136_genome_S136_genome_72;S136_genome_S136_genome_73;S136_genome_S136_genome_74;S136_genome_S136_genome_75;S136_genome_S136_genome_76;S136_genome_S136_genome_77;S136_genome_S136_genome_78;S136_genome_S136_genome_79;S136_genome_S136_genome_80;S136_genome_S136_genome_81;S136_genome_S136_genome_82;S136_genome_S136_genome_83;S136_genome_S136_genome_84;S136_genome_S136_genome_85;S136_genome_S136_genome_86;S136_genome_S136_genome_87;S136_genome_S136_genome_88;S136_genome_S136_genome_89;S136_genome_S136_genome_90;S136_genome_S136_genome_91;S136_genome_S136_genome_92;S136_genome_S136_genome_93;S136_genome_S136_genome_94;S136_genome_S136_genome_95;S136_genome_S136_genome_96;S136_genome_S136_genome_97;S136_genome_S136_genome_98;S136_genome_S136_genome_99;S136_genome_S136_genome_100;S136_genome_S136_genome_101;S136_genome_S136_genome_102;S136_genome_S136_genome_103;S136_genome_S136_genome_104;S136_genome_S136_genome_105;S136_genome_S136_genome_106;S136_genome_S136_genome_107;S136_genome_S136_genome_108;S136_genome_S136_genome_109;S136_genome_S136_genome_110;S136_genome_S136_genome_111;S136_genome_S136_genome_112;S136_genome_S136_genome_113;S136_genome_S136_genome_114;S136_genome_S136_genome_115;S136_genome_S136_genome_116;S136_genome_S136_genome_117;S136_genome_S136_genome_118;S136_genome_S136_genome_119;S136_genome_S136_genome_120;S136_genome_S136_genome_121;S136_genome_S136_genome_122;S136_genome_S136_genome_123;S136_genome_S136_genome_124;S136_genome_S136_genome_125;S136_genome_S136_genome_126;S136_genome_S136_genome_127;S136_genome_S136_genome_128;S136_genome_S136_genome_129;S136_genome_S136_genome_130;S136_genome_S136_genome_131;S136_genome_S136_genome_132;S136_genome_S136_genome_133;S136_genome_S136_genome_134;S136_genome_S136_genome_135;S136_genome_S136_genome_136;S136_genome_S136_genome_137;S136_genome_S136_genome_138;S136_genome_S136_genome_139;S136_genome_S136_genome_140;S136_genome_S136_genome_141;S136_genome_S136_genome_142;S136_genome_S136_genome_143;S136_genome_S136_genome_144;S136_genome_S136_genome_145;S136_genome_S136_genome_146;S136_genome_S136_genome_147;S136_genome_S136_genome_148;S136_genome_S136_genome_149;S136_genome_S136_genome_150;S136_genome_S136_genome_151;S136_genome_S136_genome_152;S136_genome_S136_genome_153;S136_genome_S136_genome_154;S136_genome_S136_genome_155;S136_genome_S136_genome_156;S136_genome_S136_genome_157;S136_genome_S136_genome_158;S136_genome_S136_genome_159;S136_genome_S136_genome_160;S136_genome_S136_genome_161;S136_genome_S136_genome_162;S136_genome_S136_genome_163;S136_genome_S136_genome_164;S136_genome_S136_genome_165 PF00561;PF04738;PF00583;PF01266;PF01494;PF08242 PF15644;PF03534;PF13385;PF07690;PF07510;PF07510;PF00932;PF00293;PF03995;PF14040;PF13338;PF16656;PF00239;PF14040;PF01223;PF05990;PF12770;PF13360;PF14568;PF09346;PF14567;PF13930;PF05593;PF13361;PF13538;PF13604;PF00580;PF13245;PF13191;PF12844;PF01381;PF13443;PF13560;PF13413;PF03965;PF04672;PF08242;PF13560;PF01381;PF12844;PF13413;PF04149;PF13673;PF13508;PF00583;PF13936;PF12728;PF07505;PF01844;PF06527;PF13560;PF00665;PF13191;PF05621;PF13401;PF00170;PF13646;PF13191;PF12770;PF03747;PF14487;PF13361;PF13538;PF00580;PF13245;PF13565;PF00665;PF09299;PF05621;PF13401;PF13604;PF09848;PF00004;PF06527;PF07927;PF04851;PF00270;PF00271;PF03457;PF03457;PF07691;PF04978;PF11716;PF12867;PF09976;PF13424;PF13432;PF07721;PF13586;PF12802;PF01047;PF13463;PF04738;PF03457;PF00459;PF01609;PF13586;PF07739;PF13845;PF13359;PF13586;PF01609;PF01740;PF13466;PF13340;PF01433;PF13808;PF04655;PF00313;PF08206;PF00313;PF08206;PF12697;PF00561;PF06821;PF12146;PF13384;PF13814;PF03995;PF13581;PF01740;PF13466;PF13360;PF09278;PF13411;PF00376;PF10101;PF14108;PF13340;PF00665;PF13683;PF13333;PF13359;PF13613;PF13471;PF01494;PF01266;PF00890;PF13450;PF01609 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_225310-372893.1 225310 372893 147583 119 249 29 0.81483 antibacterial-cytotoxic 0.50 0.52 0.22 0.10 Polyketide 0.00 0.29 0.05 0.82 0.01 0.11 0.02 S136_genome_S136_genome_199;S136_genome_S136_genome_200;S136_genome_S136_genome_201;S136_genome_S136_genome_202;S136_genome_S136_genome_203;S136_genome_S136_genome_204;S136_genome_S136_genome_205;S136_genome_S136_genome_206;S136_genome_S136_genome_207;S136_genome_S136_genome_208;S136_genome_S136_genome_209;S136_genome_S136_genome_210;S136_genome_S136_genome_211;S136_genome_S136_genome_212;S136_genome_S136_genome_213;S136_genome_S136_genome_214;S136_genome_S136_genome_215;S136_genome_S136_genome_216;S136_genome_S136_genome_217;S136_genome_S136_genome_218;S136_genome_S136_genome_219;S136_genome_S136_genome_220;S136_genome_S136_genome_221;S136_genome_S136_genome_222;S136_genome_S136_genome_223;S136_genome_S136_genome_224;S136_genome_S136_genome_225;S136_genome_S136_genome_226;S136_genome_S136_genome_227;S136_genome_S136_genome_228;S136_genome_S136_genome_229;S136_genome_S136_genome_230;S136_genome_S136_genome_231;S136_genome_S136_genome_232;S136_genome_S136_genome_233;S136_genome_S136_genome_234;S136_genome_S136_genome_235;S136_genome_S136_genome_236;S136_genome_S136_genome_237;S136_genome_S136_genome_238;S136_genome_S136_genome_239;S136_genome_S136_genome_240;S136_genome_S136_genome_241;S136_genome_S136_genome_242;S136_genome_S136_genome_243;S136_genome_S136_genome_244;S136_genome_S136_genome_245;S136_genome_S136_genome_246;S136_genome_S136_genome_247;S136_genome_S136_genome_248;S136_genome_S136_genome_249;S136_genome_S136_genome_250;S136_genome_S136_genome_251;S136_genome_S136_genome_252;S136_genome_S136_genome_253;S136_genome_S136_genome_254;S136_genome_S136_genome_255;S136_genome_S136_genome_256;S136_genome_S136_genome_257;S136_genome_S136_genome_258;S136_genome_S136_genome_259;S136_genome_S136_genome_260;S136_genome_S136_genome_261;S136_genome_S136_genome_262;S136_genome_S136_genome_263;S136_genome_S136_genome_264;S136_genome_S136_genome_265;S136_genome_S136_genome_266;S136_genome_S136_genome_267;S136_genome_S136_genome_268;S136_genome_S136_genome_269;S136_genome_S136_genome_270;S136_genome_S136_genome_271;S136_genome_S136_genome_272;S136_genome_S136_genome_273;S136_genome_S136_genome_274;S136_genome_S136_genome_275;S136_genome_S136_genome_276;S136_genome_S136_genome_277;S136_genome_S136_genome_278;S136_genome_S136_genome_279;S136_genome_S136_genome_280;S136_genome_S136_genome_281;S136_genome_S136_genome_282;S136_genome_S136_genome_283;S136_genome_S136_genome_284;S136_genome_S136_genome_285;S136_genome_S136_genome_286;S136_genome_S136_genome_287;S136_genome_S136_genome_288;S136_genome_S136_genome_289;S136_genome_S136_genome_290;S136_genome_S136_genome_291;S136_genome_S136_genome_292;S136_genome_S136_genome_293;S136_genome_S136_genome_294;S136_genome_S136_genome_295;S136_genome_S136_genome_296;S136_genome_S136_genome_297;S136_genome_S136_genome_298;S136_genome_S136_genome_299;S136_genome_S136_genome_300;S136_genome_S136_genome_301;S136_genome_S136_genome_302;S136_genome_S136_genome_303;S136_genome_S136_genome_304;S136_genome_S136_genome_305;S136_genome_S136_genome_306;S136_genome_S136_genome_307;S136_genome_S136_genome_308;S136_genome_S136_genome_309;S136_genome_S136_genome_310;S136_genome_S136_genome_311;S136_genome_S136_genome_312;S136_genome_S136_genome_313;S136_genome_S136_genome_314;S136_genome_S136_genome_315;S136_genome_S136_genome_316;S136_genome_S136_genome_317 PF01041;PF00108;PF08659;PF08242;PF02894;PF00891;PF00501;PF00067;PF08241;PF00561;PF01408;PF01266;PF08240;PF02801;PF00857;PF00106;PF08990;PF00171;PF02737;PF00583;PF00109;PF01494;PF00698;PF02803;PF00702;PF01370;PF00155;PF00107;PF01488 PF02868;PF02128;PF07714;PF00069;PF06293;PF14087;PF12802;PF01047;PF00857;PF01474;PF00196;PF08281;PF13604;PF13191;PF13401;PF00486;PF03704;PF13191;PF00480;PF00465;PF01761;PF13685;PF13242;PF13419;PF00702;PF12710;PF13344;PF02894;PF01408;PF01041;PF00155;PF01053;PF01220;PF00067;PF08031;PF01565;PF11611;PF07690;PF06609;PF00083;PF12802;PF13463;PF01047;PF09339;PF13412;PF01494;PF00797;PF00550;PF00698;PF16197;PF02801;PF00109;PF00108;PF00550;PF08659;PF00106;PF13561;PF01370;PF03435;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00550;PF08659;PF00106;PF01370;PF00698;PF16197;PF13561;PF13602;PF00107;PF08240;PF14765;PF02801;PF00109;PF00108;PF13193;PF00501;PF08450;PF10518;PF12802;PF01047;PF12840;PF13412;PF13545;PF07690;PF13347;PF10797;PF13367;PF09278;PF13411;PF00376;PF08659;PF00106;PF13561;PF01661;PF01129;PF13620;PF13463;PF01047;PF12802;PF09339;PF13412;PF13577;PF13474;PF14534;PF12680;PF00196;PF08281;PF04545;PF00072;PF02518;PF13581;PF07730;PF00561;PF08386;PF00230;PF14833;PF03446;PF07991;PF01488;PF02558;PF02826;PF03807;PF03435;PF02737;PF02254;PF01210;PF13560;PF01381;PF12844;PF00459;PF13586;PF01609;PF03995;PF13340;PF01609;PF13586;PF10025;PF13340;PF12746;PF08445;PF13302;PF00583;PF00440;PF13193;PF00501;PF13242;PF13419;PF00702;PF02803;PF00108;PF00109;PF00561;PF12697;PF12146;PF00857;PF00392;PF12840;PF13545;PF09339;PF07729;PF01565;PF02913;PF12051;PF09843;PF01609;PF13685;PF01761;PF00106;PF08659;PF01370;PF13561;PF00732;PF01266;PF00890;PF05834;PF13450;PF05199;PF01408;PF02894;PF00083;PF07690;PF06609;PF00702;PF13419;PF12710;PF13242;PF10647;PF00930;PF07676;PF13424;PF00656;PF09471;PF09278;PF13411;PF00376;PF02353;PF01209;PF13489;PF07021;PF13847;PF05175;PF00891;PF13649;PF08241;PF08242;PF14568;PF07690;PF00083;PF05977;PF13404;PF13542;PF12802;PF13412;PF12840;PF09339;PF13545;PF01037;PF04978;PF05163;PF12867;PF03453;PF01695;PF01695;PF00665;PF09346;PF14567;PF14568;PF16925;PF00440;PF00561;PF13302;PF08445;PF00583;PF13673;PF13556;PF05199;PF00732;PF01266;PF05834;PF00890;PF13450;PF01946;PF00171 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_380176-380863.1 380176 380863 687 1 3 1 0.50857 antibacterial 0.70 0.05 0.11 0.35 NRP 0.00 0.54 0.11 0.20 0.07 0.02 0.07 S136_genome_S136_genome_326 PF00561 PF12697;PF12146;PF00561 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_385153-386635.1 385153 386635 1482 2 2 0 0.61072 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 S136_genome_S136_genome_332;S136_genome_S136_genome_333 PF13160;PF00440 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_571425-573288.1 571425 573288 1863 2 4 1 0.63467 antibacterial 0.81 0.19 0.17 0.23 0.00 0.08 0.12 0.43 0.17 0.01 0.21 S136_genome_S136_genome_493;S136_genome_S136_genome_494 PF03364 PF03055;PF10604;PF08327;PF03364 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_619133-649506.1 619133 649506 30373 29 37 7 0.80683 antibacterial 0.53 0.20 0.17 0.09 0.03 0.13 0.32 0.12 0.10 0.04 0.32 S136_genome_S136_genome_536;S136_genome_S136_genome_537;S136_genome_S136_genome_538;S136_genome_S136_genome_539;S136_genome_S136_genome_540;S136_genome_S136_genome_541;S136_genome_S136_genome_542;S136_genome_S136_genome_543;S136_genome_S136_genome_544;S136_genome_S136_genome_545;S136_genome_S136_genome_546;S136_genome_S136_genome_547;S136_genome_S136_genome_548;S136_genome_S136_genome_549;S136_genome_S136_genome_550;S136_genome_S136_genome_551;S136_genome_S136_genome_552;S136_genome_S136_genome_553;S136_genome_S136_genome_554;S136_genome_S136_genome_555;S136_genome_S136_genome_556;S136_genome_S136_genome_557;S136_genome_S136_genome_558;S136_genome_S136_genome_559;S136_genome_S136_genome_560;S136_genome_S136_genome_561;S136_genome_S136_genome_562;S136_genome_S136_genome_563;S136_genome_S136_genome_564 PF00561;PF02668;PF00583;PF01408;PF00202;PF00067;PF01636 PF00440;PF13305;PF14606;PF13472;PF04203;PF01636;PF03881;PF14404;PF01408;PF00583;PF07228;PF01037;PF13412;PF13404;PF00202;PF00144;PF00067;PF01300;PF01738;PF00561;PF02230;PF00326;PF16483;PF05547;PF05345;PF02868;PF01447;PF03413;PF07504;PF04672;PF13847;PF00149;PF00296;PF02668;PF01547;PF13416;PF00528 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_655798-656557.1 655798 656557 759 1 5 0 0.51800 antibacterial 0.85 0.09 0.18 0.24 0.00 0.06 0.33 0.24 0.20 0.02 0.19 S136_genome_S136_genome_573 PF09339;PF12802;PF13412;PF01978;PF01614 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_702047-703139.1 702047 703139 1092 1 1 0 0.50529 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_617 PF16670 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_709916-719523.1 709916 719523 9607 6 10 0 0.52686 antibacterial 0.72 0.08 0.15 0.22 0.00 0.11 0.17 0.23 0.23 0.00 0.26 S136_genome_S136_genome_623;S136_genome_S136_genome_624;S136_genome_S136_genome_625;S136_genome_S136_genome_626;S136_genome_S136_genome_627;S136_genome_S136_genome_628 PF02148;PF13191;PF00196;PF00657;PF13472;PF02868;PF01447;PF03413;PF07504;PF00144 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_721886-766814.1 721886 766814 44928 50 76 8 0.80497 0.46 0.16 0.24 0.18 0.04 0.04 0.37 0.17 0.09 0.01 0.38 S136_genome_S136_genome_631;S136_genome_S136_genome_632;S136_genome_S136_genome_633;S136_genome_S136_genome_634;S136_genome_S136_genome_635;S136_genome_S136_genome_636;S136_genome_S136_genome_637;S136_genome_S136_genome_638;S136_genome_S136_genome_639;S136_genome_S136_genome_640;S136_genome_S136_genome_641;S136_genome_S136_genome_642;S136_genome_S136_genome_643;S136_genome_S136_genome_644;S136_genome_S136_genome_645;S136_genome_S136_genome_646;S136_genome_S136_genome_647;S136_genome_S136_genome_648;S136_genome_S136_genome_649;S136_genome_S136_genome_650;S136_genome_S136_genome_651;S136_genome_S136_genome_652;S136_genome_S136_genome_653;S136_genome_S136_genome_654;S136_genome_S136_genome_655;S136_genome_S136_genome_656;S136_genome_S136_genome_657;S136_genome_S136_genome_658;S136_genome_S136_genome_659;S136_genome_S136_genome_660;S136_genome_S136_genome_661;S136_genome_S136_genome_662;S136_genome_S136_genome_663;S136_genome_S136_genome_664;S136_genome_S136_genome_665;S136_genome_S136_genome_666;S136_genome_S136_genome_667;S136_genome_S136_genome_668;S136_genome_S136_genome_669;S136_genome_S136_genome_670;S136_genome_S136_genome_671;S136_genome_S136_genome_672;S136_genome_S136_genome_673;S136_genome_S136_genome_674;S136_genome_S136_genome_675;S136_genome_S136_genome_676;S136_genome_S136_genome_677;S136_genome_S136_genome_678;S136_genome_S136_genome_679;S136_genome_S136_genome_680 PF00583;PF00903;PF00248;PF02771;PF01494;PF00171;PF00348;PF01636 PF13424;PF14938;PF07719;PF13432;PF00348;PF00291;PF07714;PF00069;PF14531;PF00296;PF04686;PF09997;PF05975;PF00248;PF00440;PF07690;PF06779;PF00083;PF03403;PF01814;PF06908;PF11241;PF10027;PF01494;PF07992;PF13450;PF06236;PF00264;PF00075;PF00903;PF01636;PF06983;PF12844;PF01381;PF13560;PF13413;PF04542;PF04539;PF16509;PF04545;PF08281;PF13936;PF13384;PF13581;PF07714;PF00069;PF01636;PF12680;PF00248;PF00126;PF03466;PF13531;PF12867;PF04978;PF00962;PF01979;PF00903;PF13468;PF13669;PF05569;PF01435;PF03965;PF01978;PF12840;PF12802;PF00248;PF00182;PF00171;PF08281;PF04542;PF03795;PF02771;PF14568;PF14567;PF03779;PF00583 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_768440-820147.1 768440 820147 51707 39 86 10 0.89429 0.39 0.30 0.18 0.33 0.02 0.30 0.31 0.31 0.11 0.03 0.02 S136_genome_S136_genome_682;S136_genome_S136_genome_683;S136_genome_S136_genome_684;S136_genome_S136_genome_685;S136_genome_S136_genome_686;S136_genome_S136_genome_687;S136_genome_S136_genome_688;S136_genome_S136_genome_689;S136_genome_S136_genome_690;S136_genome_S136_genome_691;S136_genome_S136_genome_692;S136_genome_S136_genome_693;S136_genome_S136_genome_694;S136_genome_S136_genome_695;S136_genome_S136_genome_696;S136_genome_S136_genome_697;S136_genome_S136_genome_698;S136_genome_S136_genome_699;S136_genome_S136_genome_700;S136_genome_S136_genome_701;S136_genome_S136_genome_702;S136_genome_S136_genome_703;S136_genome_S136_genome_704;S136_genome_S136_genome_705;S136_genome_S136_genome_706;S136_genome_S136_genome_707;S136_genome_S136_genome_708;S136_genome_S136_genome_709;S136_genome_S136_genome_710;S136_genome_S136_genome_711;S136_genome_S136_genome_712;S136_genome_S136_genome_713;S136_genome_S136_genome_714;S136_genome_S136_genome_715;S136_genome_S136_genome_716;S136_genome_S136_genome_717;S136_genome_S136_genome_718;S136_genome_S136_genome_719;S136_genome_S136_genome_720 PF00561;PF00583;PF01408;PF00501;PF00108;PF02803;PF02894;PF00378;PF00975;PF01636 PF13463;PF12802;PF01047;PF12840;PF09339;PF01978;PF01325;PF03428;PF13545;PF13412;PF13730;PF01022;PF00480;PF02837;PF00703;PF05547;PF09822;PF13673;PF00583;PF13480;PF00583;PF03777;PF00561;PF08386;PF14016;PF00733;PF12697;PF03959;PF12146;PF10230;PF00561;PF03096;PF00756;PF05057;PF00975;PF07819;PF01408;PF02894;PF04686;PF08447;PF07228;PF01636;PF01633;PF01510;PF10605;PF00326;PF07519;PF10503;PF00756;PF00326;PF07859;PF00561;PF12146;PF00135;PF00582;PF04149;PF00108;PF02803;PF12172;PF01796;PF00378;PF16113;PF00501;PF13193;PF12697;PF00561;PF12146;PF03096;PF00501;PF14535;PF13365;PF13191;PF01637;PF13424;PF13374;PF13193;PF00501;PF01804;PF13193;PF00501;PF03060;PF00478;PF01070;PF05690;PF00144;PF05547 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_821815-822682.1 821815 822682 867 1 1 0 0.64582 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_722 PF09995 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_824345-860846.1 824345 860846 36501 40 93 15 0.80868 0.42 0.17 0.26 0.09 Saccharide 0.01 0.06 0.18 0.13 0.00 0.68 0.00 S136_genome_S136_genome_725;S136_genome_S136_genome_726;S136_genome_S136_genome_727;S136_genome_S136_genome_728;S136_genome_S136_genome_729;S136_genome_S136_genome_730;S136_genome_S136_genome_731;S136_genome_S136_genome_732;S136_genome_S136_genome_733;S136_genome_S136_genome_734;S136_genome_S136_genome_735;S136_genome_S136_genome_736;S136_genome_S136_genome_737;S136_genome_S136_genome_738;S136_genome_S136_genome_739;S136_genome_S136_genome_740;S136_genome_S136_genome_741;S136_genome_S136_genome_742;S136_genome_S136_genome_743;S136_genome_S136_genome_744;S136_genome_S136_genome_745;S136_genome_S136_genome_746;S136_genome_S136_genome_747;S136_genome_S136_genome_748;S136_genome_S136_genome_749;S136_genome_S136_genome_750;S136_genome_S136_genome_751;S136_genome_S136_genome_752;S136_genome_S136_genome_753;S136_genome_S136_genome_754;S136_genome_S136_genome_755;S136_genome_S136_genome_756;S136_genome_S136_genome_757;S136_genome_S136_genome_758;S136_genome_S136_genome_759;S136_genome_S136_genome_760;S136_genome_S136_genome_761;S136_genome_S136_genome_762;S136_genome_S136_genome_763;S136_genome_S136_genome_764 PF01243;PF00441;PF02771;PF02719;PF02770;PF04321;PF08240;PF07993;PF00702;PF01075;PF01370;PF00535;PF00107;PF00534;PF00106 PF13581;PF02518;PF07730;PF13492;PF13185;PF01590;PF12900;PF12900;PF13560;PF01381;PF13602;PF16912;PF00107;PF01262;PF08240;PF00582;PF00582;PF00571;PF04972;PF00582;PF13602;PF16912;PF00107;PF08240;PF13823;PF08940;PF13560;PF13413;PF01381;PF12900;PF01243;PF00582;PF03636;PF00441;PF02770;PF14749;PF02771;PF03860;PF02502;PF01590;PF03861;PF13466;PF01740;PF13466;PF13641;PF13632;PF00535;PF13632;PF13641;PF00535;PF01075;PF01467;PF00294;PF08543;PF01380;PF13580;PF13524;PF00534;PF13692;PF13439;PF13579;PF08323;PF13477;PF13524;PF00534;PF13692;PF01075;PF13242;PF13419;PF00702;PF08645;PF13344;PF13641;PF13506;PF13632;PF00535;PF16861;PF02543;PF04321;PF16363;PF02719;PF01370;PF01073;PF13460;PF00106;PF07993;PF04230;PF01814;PF11239;PF02733;PF02734;PF03610;PF07335 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_946650-947892.1 946650 947892 1242 1 1 1 0.58726 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 S136_genome_S136_genome_857 PF00067 PF00067 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1030735-1065734.1 1030735 1065734 34999 26 66 18 0.90599 0.46 0.29 0.33 0.24 Saccharide 0.01 0.04 0.13 0.09 0.00 0.74 0.03 S136_genome_S136_genome_921;S136_genome_S136_genome_922;S136_genome_S136_genome_923;S136_genome_S136_genome_924;S136_genome_S136_genome_925;S136_genome_S136_genome_926;S136_genome_S136_genome_927;S136_genome_S136_genome_928;S136_genome_S136_genome_929;S136_genome_S136_genome_930;S136_genome_S136_genome_931;S136_genome_S136_genome_932;S136_genome_S136_genome_933;S136_genome_S136_genome_934;S136_genome_S136_genome_935;S136_genome_S136_genome_936;S136_genome_S136_genome_937;S136_genome_S136_genome_938;S136_genome_S136_genome_939;S136_genome_S136_genome_940;S136_genome_S136_genome_941;S136_genome_S136_genome_942;S136_genome_S136_genome_943;S136_genome_S136_genome_944;S136_genome_S136_genome_945;S136_genome_S136_genome_946 PF08241;PF08421;PF01408;PF00908;PF08484;PF00984;PF02397;PF03721;PF04321;PF08242;PF03720;PF01370;PF00535;PF00202;PF02706;PF00107;PF00534;PF02585 PF15632;PF13535;PF01326;PF07690;PF13727;PF02397;PF03721;PF02558;PF00984;PF03720;PF13477;PF13439;PF13579;PF00534;PF13692;PF13524;PF02706;PF05615;PF02706;PF13522;PF13537;PF00733;PF03054;PF02826;PF02254;PF03446;PF00107;PF13602;PF01408;PF03447;PF16889;PF05426;PF07940;PF13229;PF05048;PF13579;PF13439;PF13477;PF13692;PF00534;PF13524;PF08421;PF13489;PF08242;PF08241;PF08484;PF12804;PF02585;PF04321;PF01370;PF16363;PF13460;PF01073;PF16254;PF09940;PF04389;PF16221;PF13641;PF00535;PF04230;PF00908;PF00202;PF01569;PF14378;PF14360;PF03631 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1075958-1077176.1 1075958 1077176 1218 1 1 0 0.51826 antibacterial 0.86 0.06 0.19 0.25 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_957 PF13556 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1100009-1317746.1 1100009 1317746 217737 117 378 42 0.91605 antibacterial 0.57 0.46 0.10 0.16 Polyketide 0.00 0.32 0.05 0.89 0.01 0.12 0.01 S136_genome_S136_genome_975;S136_genome_S136_genome_976;S136_genome_S136_genome_977;S136_genome_S136_genome_978;S136_genome_S136_genome_979;S136_genome_S136_genome_980;S136_genome_S136_genome_981;S136_genome_S136_genome_982;S136_genome_S136_genome_983;S136_genome_S136_genome_984;S136_genome_S136_genome_985;S136_genome_S136_genome_986;S136_genome_S136_genome_987;S136_genome_S136_genome_988;S136_genome_S136_genome_989;S136_genome_S136_genome_990;S136_genome_S136_genome_991;S136_genome_S136_genome_992;S136_genome_S136_genome_993;S136_genome_S136_genome_994;S136_genome_S136_genome_995;S136_genome_S136_genome_996;S136_genome_S136_genome_997;S136_genome_S136_genome_998;S136_genome_S136_genome_999;S136_genome_S136_genome_1000;S136_genome_S136_genome_1001;S136_genome_S136_genome_1002;S136_genome_S136_genome_1003;S136_genome_S136_genome_1004;S136_genome_S136_genome_1005;S136_genome_S136_genome_1006;S136_genome_S136_genome_1007;S136_genome_S136_genome_1008;S136_genome_S136_genome_1009;S136_genome_S136_genome_1010;S136_genome_S136_genome_1011;S136_genome_S136_genome_1012;S136_genome_S136_genome_1013;S136_genome_S136_genome_1014;S136_genome_S136_genome_1015;S136_genome_S136_genome_1016;S136_genome_S136_genome_1017;S136_genome_S136_genome_1018;S136_genome_S136_genome_1019;S136_genome_S136_genome_1020;S136_genome_S136_genome_1021;S136_genome_S136_genome_1022;S136_genome_S136_genome_1023;S136_genome_S136_genome_1024;S136_genome_S136_genome_1025;S136_genome_S136_genome_1026;S136_genome_S136_genome_1027;S136_genome_S136_genome_1028;S136_genome_S136_genome_1029;S136_genome_S136_genome_1030;S136_genome_S136_genome_1031;S136_genome_S136_genome_1032;S136_genome_S136_genome_1033;S136_genome_S136_genome_1034;S136_genome_S136_genome_1035;S136_genome_S136_genome_1036;S136_genome_S136_genome_1037;S136_genome_S136_genome_1038;S136_genome_S136_genome_1039;S136_genome_S136_genome_1040;S136_genome_S136_genome_1041;S136_genome_S136_genome_1042;S136_genome_S136_genome_1043;S136_genome_S136_genome_1044;S136_genome_S136_genome_1045;S136_genome_S136_genome_1046;S136_genome_S136_genome_1047;S136_genome_S136_genome_1048;S136_genome_S136_genome_1049;S136_genome_S136_genome_1050;S136_genome_S136_genome_1051;S136_genome_S136_genome_1052;S136_genome_S136_genome_1053;S136_genome_S136_genome_1054;S136_genome_S136_genome_1055;S136_genome_S136_genome_1056;S136_genome_S136_genome_1057;S136_genome_S136_genome_1058;S136_genome_S136_genome_1059;S136_genome_S136_genome_1060;S136_genome_S136_genome_1061;S136_genome_S136_genome_1062;S136_genome_S136_genome_1063;S136_genome_S136_genome_1064;S136_genome_S136_genome_1065;S136_genome_S136_genome_1066;S136_genome_S136_genome_1067;S136_genome_S136_genome_1068;S136_genome_S136_genome_1069;S136_genome_S136_genome_1070;S136_genome_S136_genome_1071;S136_genome_S136_genome_1072;S136_genome_S136_genome_1073;S136_genome_S136_genome_1074;S136_genome_S136_genome_1075;S136_genome_S136_genome_1076;S136_genome_S136_genome_1077;S136_genome_S136_genome_1078;S136_genome_S136_genome_1079;S136_genome_S136_genome_1080;S136_genome_S136_genome_1081;S136_genome_S136_genome_1082;S136_genome_S136_genome_1083;S136_genome_S136_genome_1084;S136_genome_S136_genome_1085;S136_genome_S136_genome_1086;S136_genome_S136_genome_1087;S136_genome_S136_genome_1088;S136_genome_S136_genome_1089;S136_genome_S136_genome_1090;S136_genome_S136_genome_1091 PF08545;PF04932;PF01243;PF01041;PF02719;PF00108;PF02770;PF08659;PF00668;PF08242;PF02894;PF00535;PF00501;PF00067;PF03364;PF08241;PF02668;PF01408;PF01266;PF02771;PF00483;PF08240;PF02801;PF00106;PF08990;PF04101;PF00378;PF00975;PF02737;PF00441;PF00109;PF01494;PF08541;PF00698;PF04321;PF07993;PF08028;PF04820;PF01370;PF00155;PF00725;PF00107 PF07228;PF08310;PF12697;PF12146;PF01243;PF02687;PF12704;PF00005;PF03193;PF13191;PF13555;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13384;PF13602;PF00107;PF08240;PF13384;PF08281;PF13518;PF00196;PF08541;PF00195;PF08545;PF00108;PF00196;PF08281;PF13466;PF13191;PF08545;PF08541;PF03446;PF03807;PF02254;PF02737;PF00725;PF00501;PF13193;PF00550;PF02771;PF02770;PF00441;PF08028;PF01041;PF16363;PF01370;PF01073;PF04321;PF13460;PF02894;PF01408;PF00483;PF12804;PF04321;PF02719;PF01370;PF16363;PF01073;PF07993;PF13460;PF03559;PF06722;PF04101;PF00201;PF01041;PF00155;PF06609;PF12832;PF07690;PF00083;PF03704;PF13432;PF00486;PF00975;PF12697;PF07859;PF10230;PF00999;PF16475;PF00108;PF00195;PF08392;PF00109;PF08545;PF08541;PF00550;PF00198;PF06500;PF00201;PF06722;PF00201;PF06722;PF08541;PF04820;PF01494;PF12831;PF07992;PF00070;PF01946;PF01266;PF00890;PF03486;PF13450;PF01134;PF16197;PF00698;PF14765;PF08659;PF00106;PF01370;PF13561;PF00550;PF00109;PF00108;PF02801;PF08990;PF00109;PF00108;PF02801;PF16197;PF00698;PF14765;PF08240;PF00107;PF13602;PF08659;PF00106;PF01370;PF02719;PF00550;PF08990;PF00109;PF00108;PF02801;PF16197;PF00698;PF08659;PF00106;PF01370;PF02719;PF16363;PF13561;PF00550;PF08990;PF00109;PF02801;PF16197;PF00698;PF14765;PF08659;PF00106;PF01370;PF02719;PF16363;PF00108;PF00550;PF00067;PF00109;PF00108;PF02801;PF16197;PF00698;PF14765;PF08659;PF00106;PF01370;PF13561;PF00550;PF08990;PF00109;PF08240;PF00107;PF13602;PF02719;PF16363;PF00550;PF00108;PF02801;PF16197;PF00698;PF14765;PF08659;PF00106;PF01370;PF08990;PF00109;PF00108;PF02801;PF16197;PF00698;PF08659;PF00106;PF00550;PF01494;PF12831;PF00070;PF13738;PF13450;PF04820;PF07992;PF01266;PF02861;PF04820;PF01494;PF01266;PF12831;PF07992;PF01134;PF01946;PF03486;PF00890;PF13450;PF02353;PF01209;PF13847;PF13489;PF07021;PF13649;PF08241;PF08242;PF05141;PF00067;PF00733;PF13537;PF13522;PF12481;PF07690;PF02463;PF00005;PF13191;PF00004;PF06414;PF13604;PF13671;PF13304;PF13555;PF13476;PF01032;PF01497;PF07638;PF08281;PF04545;PF04542;PF00155;PF00668;PF00550;PF00501;PF13193;PF00291;PF02668;PF00550;PF13193;PF00501;PF03621;PF05175;PF13847;PF13489;PF08241;PF08242;PF13649;PF13193;PF00668;PF05401;PF00501;PF00550;PF01209;PF00975;PF12697;PF00550;PF05401;PF00501;PF13193;PF00668;PF05175;PF13489;PF08241;PF08242;PF13649;PF04820;PF01494;PF12831;PF01134;PF07992;PF01266;PF00890;PF03486;PF01946;PF13450;PF00067;PF00083;PF07690;PF13347;PF13556;PF13185;PF13492;PF01590;PF13561;PF00106;PF08659;PF13460;PF01370;PF00293;PF00795;PF04932;PF01177;PF13641;PF00535;PF13704;PF13506;PF13632;PF02342;PF03476;PF03473;PF13229;PF05048;PF01078;PF13604;PF13401;PF00004;PF10101;PF12840;PF13384;PF08220;PF01022;PF08279;PF12802;PF01047;PF13412;PF00392;PF00455;PF10604;PF03364;PF08327;PF00378;PF16113;PF00067;PF03029;PF00009;PF00071;PF08477;PF01926;PF05331;PF03259;PF02518;PF13581;PF00291;PF13581;PF01042;PF01738;PF12146;PF00440;PF16925;PF16859;PF13977;PF07883;PF12973;PF02311;PF05899;PF16157;PF02126;PF02016;PF02016;PF02016;PF00480;PF12802;PF05175;PF13489;PF13847;PF03602;PF06325;PF12847;PF13649;PF08241;PF08242 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1325968-1329471.1 1325968 1329471 3503 5 10 0 0.62114 antibacterial 0.69 0.08 0.05 0.14 0.00 0.03 0.22 0.35 0.30 0.01 0.11 S136_genome_S136_genome_1101;S136_genome_S136_genome_1102;S136_genome_S136_genome_1103;S136_genome_S136_genome_1104;S136_genome_S136_genome_1105 PF13160;PF00196;PF08281;PF04545;PF00072;PF02518;PF13581;PF07730;PF00440;PF04075 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1398169-1425073.1 1398169 1425073 26904 24 45 4 0.77669 0.45 0.33 0.24 0.03 0.02 0.15 0.25 0.22 0.34 0.02 0.05 S136_genome_S136_genome_1172;S136_genome_S136_genome_1173;S136_genome_S136_genome_1174;S136_genome_S136_genome_1175;S136_genome_S136_genome_1176;S136_genome_S136_genome_1177;S136_genome_S136_genome_1178;S136_genome_S136_genome_1179;S136_genome_S136_genome_1180;S136_genome_S136_genome_1181;S136_genome_S136_genome_1182;S136_genome_S136_genome_1183;S136_genome_S136_genome_1184;S136_genome_S136_genome_1185;S136_genome_S136_genome_1186;S136_genome_S136_genome_1187;S136_genome_S136_genome_1188;S136_genome_S136_genome_1189;S136_genome_S136_genome_1190;S136_genome_S136_genome_1191;S136_genome_S136_genome_1192;S136_genome_S136_genome_1193;S136_genome_S136_genome_1194;S136_genome_S136_genome_1195 PF00561;PF08242;PF08241;PF01243 PF12802;PF01047;PF13463;PF12222;PF01433;PF01510;PF03734;PF00664;PF00005;PF13304;PF00664;PF00005;PF13191;PF01197;PF04307;PF04851;PF00270;PF00271;PF12029;PF13622;PF02551;PF03259;PF01243;PF12900;PF16242;PF03029;PF05331;PF03259;PF02518;PF08376;PF03707;PF01135;PF13489;PF01209;PF13847;PF08003;PF13649;PF08241;PF08242;PF12697;PF00561;PF12146;PF03551;PF10400;PF09995 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1431275-1432616.1 1431275 1432616 1341 1 1 0 0.50521 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_1201 PF13449 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1435497-1438438.1 1435497 1438438 2941 3 4 0 0.57209 antibacterial 0.85 0.08 0.17 0.25 0.00 0.22 0.19 0.36 0.15 0.07 0.20 S136_genome_S136_genome_1204;S136_genome_S136_genome_1205;S136_genome_S136_genome_1206 PF12802;PF09339;PF00480;PF01510 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1439902-1441426.1 1439902 1441426 1524 1 1 1 0.51821 antibacterial 0.83 0.06 0.17 0.30 0.00 0.11 0.08 0.32 0.20 0.03 0.31 S136_genome_S136_genome_1208 PF00171 PF00171 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1453744-1476488.1 1453744 1476488 22744 23 58 11 0.62282 antibacterial 0.62 0.36 0.16 0.11 0.03 0.09 0.35 0.34 0.06 0.03 0.19 S136_genome_S136_genome_1218;S136_genome_S136_genome_1219;S136_genome_S136_genome_1220;S136_genome_S136_genome_1221;S136_genome_S136_genome_1222;S136_genome_S136_genome_1223;S136_genome_S136_genome_1224;S136_genome_S136_genome_1225;S136_genome_S136_genome_1226;S136_genome_S136_genome_1227;S136_genome_S136_genome_1228;S136_genome_S136_genome_1229;S136_genome_S136_genome_1230;S136_genome_S136_genome_1231;S136_genome_S136_genome_1232;S136_genome_S136_genome_1233;S136_genome_S136_genome_1234;S136_genome_S136_genome_1235;S136_genome_S136_genome_1236;S136_genome_S136_genome_1237;S136_genome_S136_genome_1238;S136_genome_S136_genome_1239;S136_genome_S136_genome_1240 PF08545;PF00441;PF01266;PF02771;PF01494;PF08541;PF02770;PF08028;PF00171;PF00067;PF00107 PF02518;PF13581;PF07730;PF13492;PF13185;PF01590;PF00196;PF08281;PF04545;PF13412;PF13936;PF00072;PF12900;PF09335;PF05731;PF05610;PF09992;PF13653;PF00441;PF08028;PF02771;PF00441;PF02770;PF02771;PF13602;PF00107;PF00190;PF07883;PF02311;PF12844;PF13443;PF13560;PF01381;PF13413;PF07992;PF01494;PF03486;PF01266;PF00890;PF13450;PF13454;PF04675;PF01068;PF09414;PF04679;PF00293;PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067;PF00190;PF14499;PF07883;PF02311;PF12852 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1631985-1685184.1 1631985 1685184 53199 46 97 19 0.83799 0.49 0.40 0.15 0.25 Polyketide 0.01 0.12 0.11 0.85 0.01 0.02 0.02 S136_genome_S136_genome_1442;S136_genome_S136_genome_1443;S136_genome_S136_genome_1444;S136_genome_S136_genome_1445;S136_genome_S136_genome_1446;S136_genome_S136_genome_1447;S136_genome_S136_genome_1448;S136_genome_S136_genome_1449;S136_genome_S136_genome_1450;S136_genome_S136_genome_1451;S136_genome_S136_genome_1452;S136_genome_S136_genome_1453;S136_genome_S136_genome_1454;S136_genome_S136_genome_1455;S136_genome_S136_genome_1456;S136_genome_S136_genome_1457;S136_genome_S136_genome_1458;S136_genome_S136_genome_1459;S136_genome_S136_genome_1460;S136_genome_S136_genome_1461;S136_genome_S136_genome_1462;S136_genome_S136_genome_1463;S136_genome_S136_genome_1464;S136_genome_S136_genome_1465;S136_genome_S136_genome_1466;S136_genome_S136_genome_1467;S136_genome_S136_genome_1468;S136_genome_S136_genome_1469;S136_genome_S136_genome_1470;S136_genome_S136_genome_1471;S136_genome_S136_genome_1472;S136_genome_S136_genome_1473;S136_genome_S136_genome_1474;S136_genome_S136_genome_1475;S136_genome_S136_genome_1476;S136_genome_S136_genome_1477;S136_genome_S136_genome_1478;S136_genome_S136_genome_1479;S136_genome_S136_genome_1480;S136_genome_S136_genome_1481;S136_genome_S136_genome_1482;S136_genome_S136_genome_1483;S136_genome_S136_genome_1484;S136_genome_S136_genome_1485;S136_genome_S136_genome_1486;S136_genome_S136_genome_1487 PF01243;PF00108;PF08659;PF08242;PF00355;PF03033;PF00561;PF01408;PF02801;PF00857;PF00106;PF04101;PF00975;PF00109;PF00698;PF02803;PF01370;PF00155;PF08241 PF13489;PF13847;PF08241;PF08242;PF13649;PF04101;PF00201;PF13579;PF03033;PF12697;PF12146;PF02129;PF00561;PF00975;PF00550;PF01648;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08659;PF13561;PF00106;PF00550;PF00698;PF16197;PF02801;PF00109;PF03060;PF00652;PF14200;PF14539;PF09500;PF03143;PF03144;PF00009;PF01926;PF09335;PF02803;PF00108;PF00109;PF01638;PF02673;PF01925;PF14124;PF13577;PF12680;PF00795;PF01408;PF13424;PF07721;PF03167;PF00496;PF13561;PF00106;PF08659;PF13561;PF00106;PF08659;PF01370;PF11236;PF00355;PF14518;PF00701;PF00155;PF00892;PF00291;PF00196;PF05331;PF04545;PF08281;PF13412;PF00072;PF00355;PF00857;PF01243;PF12900;PF03466;PF00126;PF13518;PF13556;PF12802;PF14549;PF00892;PF00155;PF00392;PF13412;PF12900;PF11188;PF13314;PF13443;PF13560;PF01381;PF12844;PF01609 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1688104-1698060.1 1688104 1698060 9956 11 15 1 0.61822 antibacterial 0.74 0.24 0.13 0.18 0.00 0.06 0.34 0.32 0.18 0.03 0.10 S136_genome_S136_genome_1490;S136_genome_S136_genome_1491;S136_genome_S136_genome_1492;S136_genome_S136_genome_1493;S136_genome_S136_genome_1494;S136_genome_S136_genome_1495;S136_genome_S136_genome_1496;S136_genome_S136_genome_1497;S136_genome_S136_genome_1498;S136_genome_S136_genome_1499;S136_genome_S136_genome_1500 PF03364 PF13808;PF01609;PF00892;PF00892;PF10604;PF03364;PF08327;PF03551;PF09278;PF13411;PF13560;PF00376;PF02567;PF02517;PF04107 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_1765843-1786372.1 1765843 1786372 20529 15 33 2 0.69855 0.24 0.12 0.36 0.21 Saccharide 0.04 0.05 0.11 0.07 0.03 0.62 0.11 S136_genome_S136_genome_1553;S136_genome_S136_genome_1554;S136_genome_S136_genome_1555;S136_genome_S136_genome_1556;S136_genome_S136_genome_1557;S136_genome_S136_genome_1558;S136_genome_S136_genome_1559;S136_genome_S136_genome_1560;S136_genome_S136_genome_1561;S136_genome_S136_genome_1562;S136_genome_S136_genome_1563;S136_genome_S136_genome_1564;S136_genome_S136_genome_1565;S136_genome_S136_genome_1566;S136_genome_S136_genome_1567 PF00171;PF00534 PF00171;PF13520;PF00324;PF00732;PF00890;PF05834;PF13450;PF05199;PF07729;PF00392;PF07690;PF06609;PF01306;PF05631;PF00083;PF13347;PF12832;PF07286;PF03746;PF02682;PF02626;PF00657;PF13472;PF13524;PF00534;PF13692;PF13439;PF13579;PF13524;PF00534;PF13692;PF13439;PF13579 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2097213-2104338.1 2097213 2104338 7125 7 15 9 0.62814 0.45 0.05 0.38 0.06 Polyketide 0.04 0.22 0.17 0.50 0.07 0.02 0.09 S136_genome_S136_genome_1853;S136_genome_S136_genome_1854;S136_genome_S136_genome_1855;S136_genome_S136_genome_1856;S136_genome_S136_genome_1857;S136_genome_S136_genome_1858;S136_genome_S136_genome_1859 PF00441;PF02771;PF02770;PF08240;PF08028;PF00501;PF00107;PF01636;PF00106 PF13602;PF00107;PF08240;PF01636;PF02771;PF02770;PF00441;PF08028;PF08376;PF00440;PF13193;PF00501;PF13561;PF00106;PF03807 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2107354-2114284.1 2107354 2114284 6930 6 7 0 0.58543 antibacterial 0.85 0.07 0.13 0.26 0.00 0.05 0.06 0.24 0.17 0.28 0.27 S136_genome_S136_genome_1862;S136_genome_S136_genome_1863;S136_genome_S136_genome_1864;S136_genome_S136_genome_1865;S136_genome_S136_genome_1866;S136_genome_S136_genome_1867 PF01804;PF05853;PF13579;PF09414;PF09278;PF13411;PF00376 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2114858-2115482.1 2114858 2115482 624 1 1 0 0.51460 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 S136_genome_S136_genome_1869 PF00440 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2117145-2117796.1 2117145 2117796 651 1 2 0 0.59317 antibacterial 0.63 0.08 0.14 0.19 0.00 0.05 0.39 0.19 0.17 0.02 0.21 S136_genome_S136_genome_1872 PF00440;PF02909 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2119219-2121705.1 2119219 2121705 2486 2 6 3 0.51710 inhibitor 0.30 0.05 0.65 0.06 Polyketide 0.00 0.21 0.08 0.73 0.02 0.02 0.01 S136_genome_S136_genome_1875;S136_genome_S136_genome_1876 PF08240;PF00171;PF00107 PF13602;PF16912;PF00107;PF02826;PF08240;PF00171 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2133637-2136584.1 2133637 2136584 2947 4 12 0 0.59173 0.38 0.19 0.31 0.10 RiPP 0.00 0.03 0.12 0.02 0.77 0.03 0.03 S136_genome_S136_genome_1888;S136_genome_S136_genome_1889;S136_genome_S136_genome_1890;S136_genome_S136_genome_1891 PF14907;PF10706;PF02909;PF00440;PF00005;PF13191;PF00448;PF02702;PF13304;PF01061;PF12698;PF12679 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2351277-2369550.1 2351277 2369550 18273 21 54 5 0.87270 antibacterial 0.53 0.42 0.19 0.04 RiPP 0.01 0.05 0.16 0.16 0.50 0.10 0.04 S136_genome_S136_genome_2082;S136_genome_S136_genome_2083;S136_genome_S136_genome_2084;S136_genome_S136_genome_2085;S136_genome_S136_genome_2086;S136_genome_S136_genome_2087;S136_genome_S136_genome_2088;S136_genome_S136_genome_2089;S136_genome_S136_genome_2090;S136_genome_S136_genome_2091;S136_genome_S136_genome_2092;S136_genome_S136_genome_2093;S136_genome_S136_genome_2094;S136_genome_S136_genome_2095;S136_genome_S136_genome_2096;S136_genome_S136_genome_2097;S136_genome_S136_genome_2098;S136_genome_S136_genome_2099;S136_genome_S136_genome_2100;S136_genome_S136_genome_2101;S136_genome_S136_genome_2102 PF01041;PF02522;PF08242;PF00355;PF08241 PF13489;PF13847;PF05401;PF01135;PF08241;PF01209;PF08242;PF13649;PF02353;PF05724;PF05175;PF09445;PF03848;PF10604;PF14602;PF14789;PF13977;PF00440;PF00892;PF00893;PF05270;PF01883;PF01592;PF00266;PF01053;PF01041;PF00005;PF13481;PF13555;PF13806;PF00355;PF01458;PF01458;PF13814;PF06224;PF01978;PF12840;PF12802;PF01022;PF01047;PF13412;PF09339;PF02522;PF13476;PF00005;PF03029;PF13304;PF01061;PF12730;PF12698;PF12679;PF02628;PF01909;PF04909 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2431289-2432084.1 2431289 2432084 795 1 6 2 0.60755 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 S136_genome_S136_genome_2153 PF08242;PF08241 PF13489;PF13847;PF01209;PF08241;PF08242;PF13649 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2433497-2436193.1 2433497 2436193 2696 4 4 1 0.55481 antibacterial 0.86 0.08 0.16 0.27 0.00 0.07 0.13 0.32 0.19 0.03 0.32 S136_genome_S136_genome_2155;S136_genome_S136_genome_2156;S136_genome_S136_genome_2157;S136_genome_S136_genome_2158 PF01243 PF12900;PF01243;PF10056;PF08592 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2440186-2440441.1 2440186 2440441 255 1 1 0 0.64335 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_2162 PF04149 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2451162-2451843.1 2451162 2451843 681 1 7 2 0.53764 0.49 0.30 0.18 0.09 0.01 0.00 0.20 0.05 0.34 0.00 0.40 S136_genome_S136_genome_2173 PF08242;PF08241 PF13489;PF05891;PF03848;PF08241;PF08242;PF13649;PF13847 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2700071-2715482.1 2700071 2715482 15411 16 28 8 0.87203 antibacterial 0.64 0.47 0.12 0.22 Polyketide 0.02 0.03 0.00 0.96 0.00 0.03 0.01 S136_genome_S136_genome_2392;S136_genome_S136_genome_2393;S136_genome_S136_genome_2394;S136_genome_S136_genome_2395;S136_genome_S136_genome_2396;S136_genome_S136_genome_2397;S136_genome_S136_genome_2398;S136_genome_S136_genome_2399;S136_genome_S136_genome_2400;S136_genome_S136_genome_2401;S136_genome_S136_genome_2402;S136_genome_S136_genome_2403;S136_genome_S136_genome_2404;S136_genome_S136_genome_2405;S136_genome_S136_genome_2406;S136_genome_S136_genome_2407 PF03992;PF00109;PF01494;PF00108;PF02801;PF00891;PF03364;PF01050 PF07602;PF13229;PF05048;PF16864;PF00891;PF04673;PF10604;PF08327;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF06271;PF03951;PF00120;PF07228;PF12833;PF00165;PF13646 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2717559-2731749.1 2717559 2731749 14190 15 21 2 0.64199 antibacterial 0.73 0.10 0.09 0.30 0.00 0.22 0.18 0.41 0.12 0.04 0.05 S136_genome_S136_genome_2411;S136_genome_S136_genome_2412;S136_genome_S136_genome_2413;S136_genome_S136_genome_2414;S136_genome_S136_genome_2415;S136_genome_S136_genome_2416;S136_genome_S136_genome_2417;S136_genome_S136_genome_2418;S136_genome_S136_genome_2419;S136_genome_S136_genome_2420;S136_genome_S136_genome_2421;S136_genome_S136_genome_2422;S136_genome_S136_genome_2423;S136_genome_S136_genome_2424;S136_genome_S136_genome_2425 PF00561;PF01370 PF12146;PF00561;PF12697;PF03960;PF03951;PF00120;PF00486;PF00196;PF01370;PF13460;PF13796;PF07730;PF13581;PF02518;PF00072;PF08281;PF04545;PF00196;PF09362;PF12688;PF10118 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2854421-2897176.1 2854421 2897176 42755 43 78 12 0.77790 0.45 0.35 0.26 0.14 0.02 0.16 0.16 0.18 0.13 0.33 0.07 S136_genome_S136_genome_2538;S136_genome_S136_genome_2539;S136_genome_S136_genome_2540;S136_genome_S136_genome_2541;S136_genome_S136_genome_2542;S136_genome_S136_genome_2543;S136_genome_S136_genome_2544;S136_genome_S136_genome_2545;S136_genome_S136_genome_2546;S136_genome_S136_genome_2547;S136_genome_S136_genome_2548;S136_genome_S136_genome_2549;S136_genome_S136_genome_2550;S136_genome_S136_genome_2551;S136_genome_S136_genome_2552;S136_genome_S136_genome_2553;S136_genome_S136_genome_2554;S136_genome_S136_genome_2555;S136_genome_S136_genome_2556;S136_genome_S136_genome_2557;S136_genome_S136_genome_2558;S136_genome_S136_genome_2559;S136_genome_S136_genome_2560;S136_genome_S136_genome_2561;S136_genome_S136_genome_2562;S136_genome_S136_genome_2563;S136_genome_S136_genome_2564;S136_genome_S136_genome_2565;S136_genome_S136_genome_2566;S136_genome_S136_genome_2567;S136_genome_S136_genome_2568;S136_genome_S136_genome_2569;S136_genome_S136_genome_2570;S136_genome_S136_genome_2571;S136_genome_S136_genome_2572;S136_genome_S136_genome_2573;S136_genome_S136_genome_2574;S136_genome_S136_genome_2575;S136_genome_S136_genome_2576;S136_genome_S136_genome_2577;S136_genome_S136_genome_2578;S136_genome_S136_genome_2579;S136_genome_S136_genome_2580 PF01266;PF01494;PF00432;PF00108;PF08541;PF08242;PF00171;PF04820;PF02803;PF00067;PF08241;PF00534 PF07690;PF06609;PF06779;PF13347;PF00083;PF12832;PF13715;PF13620;PF13578;PF01520;PF00296;PF13243;PF00432;PF13489;PF07021;PF13847;PF01209;PF03141;PF08241;PF08242;PF13649;PF05175;PF03602;PF02353;PF03848;PF13524;PF00534;PF13692;PF13439;PF13579;PF00440;PF13429;PF13432;PF06902;PF13459;PF13370;PF00171;PF05893;PF12680;PF04545;PF08281;PF04542;PF02627;PF00704;PF00293;PF01548;PF02371;PF13643;PF00753;PF12706;PF01494;PF01266;PF12831;PF04820;PF01381;PF13243;PF13249;PF00432;PF02361;PF00005;PF13481;PF13191;PF03193;PF13555;PF13604;PF13304;PF12822;PF06737;PF01464;PF06912;PF12146;PF00067;PF00108;PF02803;PF08541;PF04149;PF13560;PF01381 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2935268-2954785.1 2935268 2954785 19517 19 38 6 0.75829 0.46 0.10 0.14 0.22 Polyketide 0.00 0.20 0.10 0.79 0.02 0.02 0.05 S136_genome_S136_genome_2619;S136_genome_S136_genome_2620;S136_genome_S136_genome_2621;S136_genome_S136_genome_2622;S136_genome_S136_genome_2623;S136_genome_S136_genome_2624;S136_genome_S136_genome_2625;S136_genome_S136_genome_2626;S136_genome_S136_genome_2627;S136_genome_S136_genome_2628;S136_genome_S136_genome_2629;S136_genome_S136_genome_2630;S136_genome_S136_genome_2631;S136_genome_S136_genome_2632;S136_genome_S136_genome_2633;S136_genome_S136_genome_2634;S136_genome_S136_genome_2635;S136_genome_S136_genome_2636;S136_genome_S136_genome_2637 PF08545;PF00109;PF08541;PF00108;PF00698;PF02801 PF13828;PF07690;PF05977;PF00083;PF00440;PF13022;PF06259;PF14472;PF09851;PF09278;PF13411;PF00376;PF00144;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF14310;PF01915;PF07691;PF00933;PF00440;PF16859;PF13977;PF08361 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2957007-2960303.1 2957007 2960303 3296 4 10 1 0.55348 antibacterial 0.56 0.15 0.33 0.14 0.00 0.14 0.27 0.48 0.08 0.03 0.07 S136_genome_S136_genome_2640;S136_genome_S136_genome_2641;S136_genome_S136_genome_2642;S136_genome_S136_genome_2643 PF00107 PF13463;PF01047;PF12802;PF01978;PF01325;PF16884;PF00107;PF13602;PF02566;PF00144 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_2984771-2987833.1 2984771 2987833 3062 4 6 0 0.56537 antibacterial 0.86 0.07 0.20 0.23 0.00 0.08 0.27 0.25 0.19 0.02 0.24 S136_genome_S136_genome_2663;S136_genome_S136_genome_2664;S136_genome_S136_genome_2665;S136_genome_S136_genome_2666 PF01614;PF13185;PF02082;PF12802;PF09339;PF13578 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_3322305-3355144.1 3322305 3355144 32839 29 49 7 0.86943 0.24 0.20 0.24 0.23 Saccharide 0.03 0.12 0.14 0.05 0.10 0.55 0.03 S136_genome_S136_genome_2943;S136_genome_S136_genome_2944;S136_genome_S136_genome_2945;S136_genome_S136_genome_2946;S136_genome_S136_genome_2947;S136_genome_S136_genome_2948;S136_genome_S136_genome_2949;S136_genome_S136_genome_2950;S136_genome_S136_genome_2951;S136_genome_S136_genome_2952;S136_genome_S136_genome_2953;S136_genome_S136_genome_2954;S136_genome_S136_genome_2955;S136_genome_S136_genome_2956;S136_genome_S136_genome_2957;S136_genome_S136_genome_2958;S136_genome_S136_genome_2959;S136_genome_S136_genome_2960;S136_genome_S136_genome_2961;S136_genome_S136_genome_2962;S136_genome_S136_genome_2963;S136_genome_S136_genome_2964;S136_genome_S136_genome_2965;S136_genome_S136_genome_2966;S136_genome_S136_genome_2967;S136_genome_S136_genome_2968;S136_genome_S136_genome_2969;S136_genome_S136_genome_2970;S136_genome_S136_genome_2971 PF00561;PF02397;PF01494;PF00171;PF04932;PF02706;PF00534 PF02559;PF00264;PF06236;PF11824;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF13549;PF13434;PF07992;PF13738;PF13241;PF01494;PF00070;PF00746;PF12679;PF12730;PF13304;PF00005;PF08530;PF12697;PF02129;PF12146;PF01738;PF00561;PF13520;PF00324;PF00171;PF02775;PF00205;PF02776 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_3586417-3614568.1 3586417 3614568 28151 18 55 6 0.80003 antibacterial 0.52 0.28 0.23 0.13 0.03 0.09 0.18 0.13 0.10 0.48 0.00 S136_genome_S136_genome_3180;S136_genome_S136_genome_3181;S136_genome_S136_genome_3182;S136_genome_S136_genome_3183;S136_genome_S136_genome_3184;S136_genome_S136_genome_3185;S136_genome_S136_genome_3186;S136_genome_S136_genome_3187;S136_genome_S136_genome_3188;S136_genome_S136_genome_3189;S136_genome_S136_genome_3190;S136_genome_S136_genome_3191;S136_genome_S136_genome_3192;S136_genome_S136_genome_3193;S136_genome_S136_genome_3194;S136_genome_S136_genome_3195;S136_genome_S136_genome_3196;S136_genome_S136_genome_3197 PF02719;PF08659;PF04321;PF07993;PF01370;PF00535 PF16697;PF00498;PF01580;PF13191;PF13531;PF01547;PF13416;PF00528;PF00528;PF13641;PF00535;PF10111;PF04464;PF13641;PF00535;PF04464;PF13641;PF00535;PF10111;PF04464;PF02566;PF01978;PF12802;PF12840;PF13463;PF01047;PF02002;PF13601;PF13231;PF09594;PF00535;PF13641;PF10111;PF04321;PF08659;PF01370;PF16363;PF01073;PF02719;PF05368;PF13460;PF07993;PF16859;PF00440;PF01061;PF00005;PF13555;PF13304;PF00004;PF00535;PF04464;PF13641;PF00535;PF13704;PF10111 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_3663129-3681953.1 3663129 3681953 18824 14 18 2 0.68537 antibacterial 0.75 0.03 0.22 0.08 0.00 0.14 0.17 0.10 0.14 0.46 0.04 S136_genome_S136_genome_3230;S136_genome_S136_genome_3231;S136_genome_S136_genome_3232;S136_genome_S136_genome_3233;S136_genome_S136_genome_3234;S136_genome_S136_genome_3235;S136_genome_S136_genome_3236;S136_genome_S136_genome_3237;S136_genome_S136_genome_3238;S136_genome_S136_genome_3239;S136_genome_S136_genome_3240;S136_genome_S136_genome_3241;S136_genome_S136_genome_3242;S136_genome_S136_genome_3243 PF00483;PF00501 PF12005;PF06262;PF13632;PF13641;PF02467;PF05995;PF07883;PF01933;PF01996;PF00881;PF14602;PF00483;PF12804;PF01510;PF00501;PF03816;PF03816;PF13399 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_3689130-3691822.1 3689130 3691822 2692 2 9 8 0.54415 antibacterial 0.86 0.07 0.10 0.20 0.01 0.05 0.12 0.27 0.19 0.26 0.17 S136_genome_S136_genome_3250;S136_genome_S136_genome_3251 PF00441;PF00984;PF02771;PF03721;PF02770;PF08028;PF03720;PF02737 PF00441;PF08028;PF02770;PF02771;PF03721;PF03446;PF02737;PF00984;PF03720 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_3918062-3982552.1 3918062 3982552 64490 59 122 19 0.88073 0.47 0.42 0.17 0.17 0.04 0.25 0.24 0.34 0.03 0.06 0.14 S136_genome_S136_genome_3464;S136_genome_S136_genome_3465;S136_genome_S136_genome_3466;S136_genome_S136_genome_3467;S136_genome_S136_genome_3468;S136_genome_S136_genome_3469;S136_genome_S136_genome_3470;S136_genome_S136_genome_3471;S136_genome_S136_genome_3472;S136_genome_S136_genome_3473;S136_genome_S136_genome_3474;S136_genome_S136_genome_3475;S136_genome_S136_genome_3476;S136_genome_S136_genome_3477;S136_genome_S136_genome_3478;S136_genome_S136_genome_3479;S136_genome_S136_genome_3480;S136_genome_S136_genome_3481;S136_genome_S136_genome_3482;S136_genome_S136_genome_3483;S136_genome_S136_genome_3484;S136_genome_S136_genome_3485;S136_genome_S136_genome_3486;S136_genome_S136_genome_3487;S136_genome_S136_genome_3488;S136_genome_S136_genome_3489;S136_genome_S136_genome_3490;S136_genome_S136_genome_3491;S136_genome_S136_genome_3492;S136_genome_S136_genome_3493;S136_genome_S136_genome_3494;S136_genome_S136_genome_3495;S136_genome_S136_genome_3496;S136_genome_S136_genome_3497;S136_genome_S136_genome_3498;S136_genome_S136_genome_3499;S136_genome_S136_genome_3500;S136_genome_S136_genome_3501;S136_genome_S136_genome_3502;S136_genome_S136_genome_3503;S136_genome_S136_genome_3504;S136_genome_S136_genome_3505;S136_genome_S136_genome_3506;S136_genome_S136_genome_3507;S136_genome_S136_genome_3508;S136_genome_S136_genome_3509;S136_genome_S136_genome_3510;S136_genome_S136_genome_3511;S136_genome_S136_genome_3512;S136_genome_S136_genome_3513;S136_genome_S136_genome_3514;S136_genome_S136_genome_3515;S136_genome_S136_genome_3516;S136_genome_S136_genome_3517;S136_genome_S136_genome_3518;S136_genome_S136_genome_3519;S136_genome_S136_genome_3520;S136_genome_S136_genome_3521;S136_genome_S136_genome_3522 PF01243;PF08659;PF00108;PF02770;PF00501;PF01266;PF02771;PF08240;PF00106;PF00903;PF00171;PF00378;PF04055;PF00441;PF01494;PF08028;PF02803;PF00107;PF01636 PF03747;PF09933;PF04055;PF00296;PF13263;PF10400;PF03551;PF07690;PF03055;PF04075;PF00171;PF07969;PF01979;PF00449;PF00296;PF13561;PF00106;PF08659;PF00296;PF04909;PF00486;PF03704;PF00931;PF13401;PF13424;PF07719;PF13193;PF00501;PF00108;PF12172;PF01796;PF00378;PF16113;PF07233;PF13360;PF13570;PF01011;PF07714;PF00069;PF01636;PF00440;PF01037;PF13545;PF12840;PF01047;PF09339;PF13412;PF12802;PF08279;PF13404;PF01810;PF00903;PF04075;PF00441;PF08028;PF02771;PF02803;PF12766;PF01243;PF10590;PF01796;PF12172;PF07681;PF01946;PF01494;PF00743;PF07992;PF01266;PF03486;PF01134;PF12831;PF13738;PF13450;PF00890;PF13434;PF13380;PF13607;PF13549;PF08442;PF00378;PF16113;PF01613;PF07690;PF01965;PF00165;PF12833;PF13602;PF16912;PF00107;PF08240;PF00441;PF02770;PF02771;PF13561;PF00106;PF08659;PF04199;PF13581;PF00441;PF08028;PF02771;PF00441;PF02770;PF02771;PF04909;PF00501;PF13193;PF13499;PF00036;PF13405;PF13833;PF13202;PF01740;PF13466;PF04542;PF08281;PF13490;PF11716;PF00551;PF01842;PF13740;PF13458 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4226453-4228973.1 4226453 4228973 2520 2 4 1 0.57008 antibacterial 0.51 0.19 0.14 0.12 0.06 0.02 0.43 0.26 0.09 0.04 0.17 S136_genome_S136_genome_3757;S136_genome_S136_genome_3758 PF01266 PF07992;PF00070;PF01266;PF00440 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4231409-4237357.1 4231409 4237357 5948 2 8 0 0.63002 antibacterial 0.63 0.06 0.30 0.34 Other 0.00 0.00 0.61 0.07 0.22 0.02 0.08 S136_genome_S136_genome_3760;S136_genome_S136_genome_3761 PF14559;PF13424;PF07719;PF13191;PF13401;PF03704;PF00486;PF00733 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4481919-4491968.1 4481919 4491968 10049 8 10 1 0.53731 0.29 0.02 0.29 0.11 0.01 0.05 0.12 0.13 0.14 0.44 0.13 S136_genome_S136_genome_3977;S136_genome_S136_genome_3978;S136_genome_S136_genome_3979;S136_genome_S136_genome_3980;S136_genome_S136_genome_3981;S136_genome_S136_genome_3982;S136_genome_S136_genome_3983;S136_genome_S136_genome_3984 PF00535 PF00400;PF16529;PF13191;PF06902;PF13459;PF13370;PF13641;PF00535;PF00069;PF07714 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4499783-4563340.1 4499783 4563340 63557 43 100 16 0.89821 0.41 0.16 0.19 0.30 NRP-Polyketide 0.01 0.72 0.09 0.59 0.01 0.03 0.00 S136_genome_S136_genome_3995;S136_genome_S136_genome_3996;S136_genome_S136_genome_3997;S136_genome_S136_genome_3998;S136_genome_S136_genome_3999;S136_genome_S136_genome_4000;S136_genome_S136_genome_4001;S136_genome_S136_genome_4002;S136_genome_S136_genome_4003;S136_genome_S136_genome_4004;S136_genome_S136_genome_4005;S136_genome_S136_genome_4006;S136_genome_S136_genome_4007;S136_genome_S136_genome_4008;S136_genome_S136_genome_4009;S136_genome_S136_genome_4010;S136_genome_S136_genome_4011;S136_genome_S136_genome_4012;S136_genome_S136_genome_4013;S136_genome_S136_genome_4014;S136_genome_S136_genome_4015;S136_genome_S136_genome_4016;S136_genome_S136_genome_4017;S136_genome_S136_genome_4018;S136_genome_S136_genome_4019;S136_genome_S136_genome_4020;S136_genome_S136_genome_4021;S136_genome_S136_genome_4022;S136_genome_S136_genome_4023;S136_genome_S136_genome_4024;S136_genome_S136_genome_4025;S136_genome_S136_genome_4026;S136_genome_S136_genome_4027;S136_genome_S136_genome_4028;S136_genome_S136_genome_4029;S136_genome_S136_genome_4030;S136_genome_S136_genome_4031;S136_genome_S136_genome_4032;S136_genome_S136_genome_4033;S136_genome_S136_genome_4034;S136_genome_S136_genome_4035;S136_genome_S136_genome_4036;S136_genome_S136_genome_4037 PF00441;PF02786;PF00109;PF01041;PF00501;PF00108;PF00698;PF00668;PF02770;PF08028;PF02801;PF02348;PF00975;PF00155;PF01636;PF02585 PF04203;PF03793;PF00069;PF07714;PF01636;PF00905;PF01098;PF14351;PF07228;PF00481;PF13672;PF16697;PF00498;PF16697;PF00498;PF12401;PF05721;PF13193;PF00501;PF00668;PF13193;PF00501;PF00550;PF00550;PF01554;PF14667;PF00975;PF12697;PF12146;PF00698;PF00550;PF13193;PF00501;PF00668;PF16197;PF02801;PF00109;PF00108;PF00550;PF13193;PF00501;PF00668;PF00550;PF16197;PF02801;PF00109;PF00108;PF00550;PF13193;PF00501;PF00668;PF02585;PF02348;PF02770;PF08028;PF00441;PF00464;PF01979;PF07969;PF00155;PF01053;PF00266;PF01041;PF02775;PF00205;PF02776;PF13535;PF02655;PF02786;PF15632;PF12697;PF00975;PF00550;PF07690;PF13347;PF13193;PF00501;PF01613;PF05163;PF12867;PF04978;PF01619;PF00701;PF00487;PF00278;PF02784;PF05118;PF04339;PF13480;PF05977;PF07690;PF02655;PF02786;PF07478;PF13535;PF01071;PF15632;PF00196;PF13384;PF06250 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4565537-4566227.1 4565537 4566227 690 1 1 0 0.52322 antibacterial 0.85 0.07 0.16 0.24 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_4040 PF10014 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4758742-4775533.1 4758742 4775533 16791 12 27 3 0.76903 antibacterial 0.55 0.10 0.07 0.21 0.01 0.14 0.20 0.32 0.22 0.01 0.20 S136_genome_S136_genome_4216;S136_genome_S136_genome_4217;S136_genome_S136_genome_4218;S136_genome_S136_genome_4219;S136_genome_S136_genome_4220;S136_genome_S136_genome_4221;S136_genome_S136_genome_4222;S136_genome_S136_genome_4223;S136_genome_S136_genome_4224;S136_genome_S136_genome_4225;S136_genome_S136_genome_4226;S136_genome_S136_genome_4227 PF00561;PF00067;PF01757 PF00756;PF00561;PF12146;PF12697;PF07859;PF00326;PF06259;PF12697;PF01757;PF10101;PF07730;PF00072;PF08281;PF04545;PF00196;PF13936;PF07730;PF00072;PF08281;PF04545;PF00196;PF13936;PF05593;PF03527;PF00067;PF13520;PF00324 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4878427-4886194.1 4878427 4886194 7767 5 14 0 0.65352 antibacterial 0.54 0.10 0.33 0.28 Other 0.00 0.02 0.56 0.13 0.18 0.02 0.10 S136_genome_S136_genome_4315;S136_genome_S136_genome_4316;S136_genome_S136_genome_4317;S136_genome_S136_genome_4318;S136_genome_S136_genome_4319 PF00486;PF03704;PF13191;PF00931;PF13401;PF05729;PF13424;PF07721;PF00515;PF07719;PF00476;PF02861;PF10979;PF14016 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4891047-4894643.1 4891047 4894643 3596 4 5 1 0.55475 antibacterial 0.80 0.11 0.15 0.33 0.00 0.08 0.10 0.31 0.28 0.02 0.24 S136_genome_S136_genome_4331;S136_genome_S136_genome_4332;S136_genome_S136_genome_4333;S136_genome_S136_genome_4334 PF00171 PF04149;PF13581;PF13560;PF12844;PF00171 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_4995265-5010680.1 4995265 5010680 15415 15 22 2 0.83567 0.42 0.26 0.22 0.16 RiPP 0.07 0.04 0.13 0.12 0.55 0.00 0.10 S136_genome_S136_genome_4425;S136_genome_S136_genome_4426;S136_genome_S136_genome_4427;S136_genome_S136_genome_4428;S136_genome_S136_genome_4429;S136_genome_S136_genome_4430;S136_genome_S136_genome_4431;S136_genome_S136_genome_4432;S136_genome_S136_genome_4433;S136_genome_S136_genome_4434;S136_genome_S136_genome_4435;S136_genome_S136_genome_4436;S136_genome_S136_genome_4437;S136_genome_S136_genome_4438;S136_genome_S136_genome_4439 PF00891;PF00067 PF16864;PF00891;PF13649;PF02909;PF00440;PF00296;PF02517;PF02517;PF02624;PF00881;PF00067;PF07690;PF06609;PF00083;PF13347;PF03209;PF00490;PF14016;PF13560;PF13412;PF08279;PF01381 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5016739-5029277.1 5016739 5029277 12538 15 21 3 0.71166 antibacterial 0.72 0.17 0.16 0.28 Polyketide 0.04 0.06 0.19 0.60 0.01 0.07 0.07 S136_genome_S136_genome_4445;S136_genome_S136_genome_4446;S136_genome_S136_genome_4447;S136_genome_S136_genome_4448;S136_genome_S136_genome_4449;S136_genome_S136_genome_4450;S136_genome_S136_genome_4451;S136_genome_S136_genome_4452;S136_genome_S136_genome_4453;S136_genome_S136_genome_4454;S136_genome_S136_genome_4455;S136_genome_S136_genome_4456;S136_genome_S136_genome_4457;S136_genome_S136_genome_4458;S136_genome_S136_genome_4459 PF01370;PF08659;PF00106 PF10935;PF12079;PF12079;PF01139;PF00440;PF13561;PF00106;PF08659;PF01370;PF13460;PF16363;PF03435;PF02694;PF01638;PF01047;PF13602;PF00296;PF03358;PF02525;PF00072;PF00486 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5033853-5034684.1 5033853 5034684 831 1 1 0 0.51336 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_4464 PF04951 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5037506-5054799.1 5037506 5054799 17293 18 22 6 0.67727 0.48 0.35 0.14 0.14 0.01 0.08 0.32 0.26 0.10 0.10 0.19 S136_genome_S136_genome_4467;S136_genome_S136_genome_4468;S136_genome_S136_genome_4469;S136_genome_S136_genome_4470;S136_genome_S136_genome_4471;S136_genome_S136_genome_4472;S136_genome_S136_genome_4473;S136_genome_S136_genome_4474;S136_genome_S136_genome_4475;S136_genome_S136_genome_4476;S136_genome_S136_genome_4477;S136_genome_S136_genome_4478;S136_genome_S136_genome_4479;S136_genome_S136_genome_4480;S136_genome_S136_genome_4481;S136_genome_S136_genome_4482;S136_genome_S136_genome_4483;S136_genome_S136_genome_4484 PF04321;PF08242;PF01370;PF00202;PF08241;PF01636 PF03466;PF00126;PF00892;PF04321;PF01370;PF05368;PF13460;PF02441;PF08241;PF01758;PF00293;PF14815;PF01381;PF01636;PF13489;PF13847;PF02353;PF08241;PF08242;PF13649;PF00202;PF00300 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5057737-5077195.1 5057737 5077195 19458 22 42 7 0.74927 0.33 0.31 0.23 0.14 0.01 0.15 0.41 0.19 0.14 0.04 0.09 S136_genome_S136_genome_4488;S136_genome_S136_genome_4489;S136_genome_S136_genome_4490;S136_genome_S136_genome_4491;S136_genome_S136_genome_4492;S136_genome_S136_genome_4493;S136_genome_S136_genome_4494;S136_genome_S136_genome_4495;S136_genome_S136_genome_4496;S136_genome_S136_genome_4497;S136_genome_S136_genome_4498;S136_genome_S136_genome_4499;S136_genome_S136_genome_4500;S136_genome_S136_genome_4501;S136_genome_S136_genome_4502;S136_genome_S136_genome_4503;S136_genome_S136_genome_4504;S136_genome_S136_genome_4505;S136_genome_S136_genome_4506;S136_genome_S136_genome_4507;S136_genome_S136_genome_4508;S136_genome_S136_genome_4509 PF00583;PF08242;PF04055;PF00891;PF00501;PF08241;PF01636 PF05140;PF01578;PF10604;PF08327;PF03171;PF14226;PF01977;PF01040;PF02441;PF13412;PF13404;PF12840;PF12802;PF13518;PF01047;PF13545;PF01037;PF04055;PF03167;PF13673;PF00583;PF13508;PF14542;PF14012;PF00440;PF01575;PF00501;PF13489;PF00891;PF05148;PF02353;PF13847;PF08241;PF08242;PF13649;PF01728;PF05175;PF07021;PF00069;PF07714;PF01636;PF05437 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5081047-5085218.1 5081047 5085218 4171 5 9 3 0.61125 0.45 0.36 0.20 0.03 0.02 0.02 0.46 0.03 0.29 0.01 0.17 S136_genome_S136_genome_4515;S136_genome_S136_genome_4516;S136_genome_S136_genome_4517;S136_genome_S136_genome_4518;S136_genome_S136_genome_4519 PF04055;PF08242;PF08241 PF04055;PF01209;PF13489;PF13847;PF13649;PF08241;PF08242;PF05148;PF03793 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5195209-5195461.1 5195209 5195461 252 1 1 0 0.55827 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_4618 PF04149 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5349718-5350842.1 5349718 5350842 1124 2 5 0 0.51073 antibacterial 0.61 0.06 0.10 0.18 0.00 0.04 0.46 0.19 0.15 0.02 0.18 S136_genome_S136_genome_4764;S136_genome_S136_genome_4765 PF00440;PF07080;PF12680;PF14534;PF07366 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_5766591-5769082.1 5766591 5769082 2491 3 14 3 0.57746 antibacterial 0.57 0.26 0.14 0.09 RiPP 0.00 0.03 0.06 0.14 0.72 0.00 0.05 S136_genome_S136_genome_5144;S136_genome_S136_genome_5145;S136_genome_S136_genome_5146 PF00891;PF08241;PF08242 PF13489;PF05175;PF00891;PF13847;PF01728;PF13649;PF08241;PF08242;PF02463;PF13304;PF00005;PF13191;PF13476;PF13555 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6084270-6104104.1 6084270 6104104 19834 14 22 1 0.68531 antibacterial 0.72 0.06 0.25 0.25 0.00 0.07 0.20 0.28 0.27 0.03 0.20 S136_genome_S136_genome_5433;S136_genome_S136_genome_5434;S136_genome_S136_genome_5435;S136_genome_S136_genome_5436;S136_genome_S136_genome_5437;S136_genome_S136_genome_5438;S136_genome_S136_genome_5439;S136_genome_S136_genome_5440;S136_genome_S136_genome_5441;S136_genome_S136_genome_5442;S136_genome_S136_genome_5443;S136_genome_S136_genome_5444;S136_genome_S136_genome_5445;S136_genome_S136_genome_5446 PF01039 PF08124;PF02278;PF02884;PF01039;PF13822;PF05729;PF13401;PF03029;PF05331;PF03259;PF02518;PF13589;PF00672;PF08376;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF10370;PF01557 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6269680-6277518.1 6269680 6277518 7838 6 4 0 0.66864 antibacterial 0.87 0.06 0.17 0.26 RiPP 0.00 0.01 0.02 0.04 0.89 0.02 0.04 S136_genome_S136_genome_5595;S136_genome_S136_genome_5596;S136_genome_S136_genome_5597;S136_genome_S136_genome_5598;S136_genome_S136_genome_5599;S136_genome_S136_genome_5600 PF00082;PF00082;PF00082;PF06013 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6472088-6534573.1 6472088 6534573 62485 43 96 8 0.90837 antibacterial 0.59 0.16 0.09 0.31 NRP 0.00 0.73 0.02 0.10 0.17 0.02 0.01 S136_genome_S136_genome_5757;S136_genome_S136_genome_5758;S136_genome_S136_genome_5759;S136_genome_S136_genome_5760;S136_genome_S136_genome_5761;S136_genome_S136_genome_5762;S136_genome_S136_genome_5763;S136_genome_S136_genome_5764;S136_genome_S136_genome_5765;S136_genome_S136_genome_5766;S136_genome_S136_genome_5767;S136_genome_S136_genome_5768;S136_genome_S136_genome_5769;S136_genome_S136_genome_5770;S136_genome_S136_genome_5771;S136_genome_S136_genome_5772;S136_genome_S136_genome_5773;S136_genome_S136_genome_5774;S136_genome_S136_genome_5775;S136_genome_S136_genome_5776;S136_genome_S136_genome_5777;S136_genome_S136_genome_5778;S136_genome_S136_genome_5779;S136_genome_S136_genome_5780;S136_genome_S136_genome_5781;S136_genome_S136_genome_5782;S136_genome_S136_genome_5783;S136_genome_S136_genome_5784;S136_genome_S136_genome_5785;S136_genome_S136_genome_5786;S136_genome_S136_genome_5787;S136_genome_S136_genome_5788;S136_genome_S136_genome_5789;S136_genome_S136_genome_5790;S136_genome_S136_genome_5791;S136_genome_S136_genome_5792;S136_genome_S136_genome_5793;S136_genome_S136_genome_5794;S136_genome_S136_genome_5795;S136_genome_S136_genome_5796;S136_genome_S136_genome_5797;S136_genome_S136_genome_5798;S136_genome_S136_genome_5799 PF02668;PF00561;PF00441;PF00975;PF02770;PF00668;PF08028;PF00501 PF01063;PF02136;PF12680;PF14534;PF07366;PF13577;PF00550;PF13193;PF00501;PF00668;PF01070;PF03060;PF01645;PF00152;PF06368;PF02310;PF05977;PF07690;PF12840;PF01610;PF13333;PF13683;PF02371;PF01548;PF13613;PF01609;PF13359;PF13276;PF01527;PF13518;PF00440;PF01756;PF00441;PF08028;PF02770;PF09339;PF12840;PF13412;PF01978;PF02668;PF00501;PF13193;PF00550;PF00975;PF12697;PF12146;PF05118;PF03621;PF00668;PF13193;PF00550;PF00501;PF00501;PF13193;PF00668;PF00550;PF12146;PF00975;PF12697;PF00561;PF01527;PF13518;PF13276;PF00665;PF13610;PF13683;PF13333;PF00331;PF00733;PF05402;PF13471;PF00664;PF13481;PF00005;PF13555;PF13476;PF13191;PF13401;PF02463;PF02687;PF12704;PF02463;PF13191;PF00005;PF03193;PF00437;PF13401;PF13555;PF07730;PF13581;PF00072;PF00196;PF08281;PF13412;PF00383;PF14437 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6554550-6565555.1 6554550 6565555 11005 10 28 8 0.69713 cytotoxic 0.24 0.72 0.08 0.06 Terpene 0.04 0.02 0.10 0.04 0.01 0.08 0.78 S136_genome_S136_genome_5818;S136_genome_S136_genome_5819;S136_genome_S136_genome_5820;S136_genome_S136_genome_5821;S136_genome_S136_genome_5822;S136_genome_S136_genome_5823;S136_genome_S136_genome_5824;S136_genome_S136_genome_5825;S136_genome_S136_genome_5826;S136_genome_S136_genome_5827 PF01593;PF01266;PF01494;PF08242;PF00494;PF00355;PF08241;PF01488 PF01209;PF13489;PF13847;PF13578;PF05175;PF08241;PF08242;PF13649;PF05834;PF01266;PF07992;PF00890;PF01266;PF01946;PF03486;PF01494;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF00291;PF02423;PF01488;PF13454 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6617709-6678601.1 6617709 6678601 60892 55 135 32 0.95296 antibacterial-cytotoxic 0.73 0.74 0.09 0.08 Polyketide 0.00 0.22 0.05 0.91 0.01 0.33 0.00 S136_genome_S136_genome_5871;S136_genome_S136_genome_5872;S136_genome_S136_genome_5873;S136_genome_S136_genome_5874;S136_genome_S136_genome_5875;S136_genome_S136_genome_5876;S136_genome_S136_genome_5877;S136_genome_S136_genome_5878;S136_genome_S136_genome_5879;S136_genome_S136_genome_5880;S136_genome_S136_genome_5881;S136_genome_S136_genome_5882;S136_genome_S136_genome_5883;S136_genome_S136_genome_5884;S136_genome_S136_genome_5885;S136_genome_S136_genome_5886;S136_genome_S136_genome_5887;S136_genome_S136_genome_5888;S136_genome_S136_genome_5889;S136_genome_S136_genome_5890;S136_genome_S136_genome_5891;S136_genome_S136_genome_5892;S136_genome_S136_genome_5893;S136_genome_S136_genome_5894;S136_genome_S136_genome_5895;S136_genome_S136_genome_5896;S136_genome_S136_genome_5897;S136_genome_S136_genome_5898;S136_genome_S136_genome_5899;S136_genome_S136_genome_5900;S136_genome_S136_genome_5901;S136_genome_S136_genome_5902;S136_genome_S136_genome_5903;S136_genome_S136_genome_5904;S136_genome_S136_genome_5905;S136_genome_S136_genome_5906;S136_genome_S136_genome_5907;S136_genome_S136_genome_5908;S136_genome_S136_genome_5909;S136_genome_S136_genome_5910;S136_genome_S136_genome_5911;S136_genome_S136_genome_5912;S136_genome_S136_genome_5913;S136_genome_S136_genome_5914;S136_genome_S136_genome_5915;S136_genome_S136_genome_5916;S136_genome_S136_genome_5917;S136_genome_S136_genome_5918;S136_genome_S136_genome_5919;S136_genome_S136_genome_5920;S136_genome_S136_genome_5921;S136_genome_S136_genome_5922;S136_genome_S136_genome_5923;S136_genome_S136_genome_5924;S136_genome_S136_genome_5925 PF08545;PF01041;PF02719;PF00108;PF00668;PF08659;PF02770;PF00355;PF03364;PF00501;PF02668;PF01408;PF01266;PF00483;PF08240;PF02801;PF00106;PF00908;PF04101;PF00975;PF00583;PF01039;PF00441;PF00109;PF01494;PF08541;PF00698;PF04321;PF07993;PF08028;PF01370;PF00107 PF05721;PF07350;PF01168;PF02784;PF00278;PF13527;PF00583;PF13508;PF13673;PF14542;PF08445;PF07690;PF13347;PF00291;PF02423;PF02668;PF12697;PF00975;PF07859;PF12146;PF00550;PF13193;PF00501;PF00668;PF14602;PF00550;PF00698;PF00698;PF00698;PF00109;PF00108;PF08392;PF08545;PF08541;PF13823;PF08240;PF01262;PF00107;PF13602;PF09990;PF13806;PF00355;PF07098;PF03631;PF01594;PF14351;PF13796;PF01569;PF14378;PF14360;PF01494;PF03486;PF00890;PF13738;PF04673;PF00109;PF02801;PF00109;PF02801;PF00550;PF00106;PF08659;PF01370;PF05368;PF13561;PF10604;PF03364;PF07992;PF01494;PF03486;PF01266;PF00070;PF00890;PF00106;PF13561;PF03358;PF02525;PF12724;PF01039;PF13822;PF00483;PF01128;PF12804;PF07959;PF00106;PF04321;PF02719;PF01370;PF16363;PF01073;PF07993;PF13460;PF01041;PF01370;PF13460;PF04321;PF16363;PF03559;PF01408;PF00106;PF08659;PF13561;PF13579;PF06722;PF00201;PF02310;PF06722;PF00201;PF04101;PF00440;PF13022;PF06609;PF07690;PF13347;PF00083;PF00908;PF06722;PF04101;PF00201;PF00483;PF12804;PF07959;PF04321;PF01370;PF16363;PF06722;PF00201;PF04101;PF03358;PF02525;PF02770;PF08028;PF00441;PF00486;PF00072 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6756978-6772731.1 6756978 6772731 15753 14 16 3 0.76543 antibacterial 0.57 0.07 0.06 0.12 0.00 0.11 0.17 0.16 0.10 0.01 0.48 S136_genome_S136_genome_5991;S136_genome_S136_genome_5992;S136_genome_S136_genome_5993;S136_genome_S136_genome_5994;S136_genome_S136_genome_5995;S136_genome_S136_genome_5996;S136_genome_S136_genome_5997;S136_genome_S136_genome_5998;S136_genome_S136_genome_5999;S136_genome_S136_genome_6000;S136_genome_S136_genome_6001;S136_genome_S136_genome_6002;S136_genome_S136_genome_6003;S136_genome_S136_genome_6004 PF03936;PF00561;PF00067 PF03029;PF05331;PF03259;PF02518;PF13581;PF00672;PF04069;PF03067;PF00440;PF01937;PF00067;PF12697;PF12146;PF00561;PF07819;PF03936 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6987756-6991275.1 6987756 6991275 3519 3 8 1 0.53763 inhibitor 0.13 0.03 0.61 0.08 0.01 0.14 0.47 0.19 0.15 0.01 0.04 S136_genome_S136_genome_6186;S136_genome_S136_genome_6187;S136_genome_S136_genome_6188 PF03756 PF03756;PF00440;PF07690;PF06779;PF01306;PF06609;PF12832;PF00083 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6992283-6993543.1 6992283 6993543 1260 1 1 0 0.52464 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.34 0.20 0.03 0.32 S136_genome_S136_genome_6192 PF07730 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_6994412-6995597.1 6994412 6995597 1185 1 1 1 0.64333 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 S136_genome_S136_genome_6194 PF00067 PF00067 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7063401-7080676.1 7063401 7080676 17275 15 31 7 0.72869 0.35 0.32 0.25 0.12 0.07 0.20 0.26 0.31 0.03 0.07 0.24 S136_genome_S136_genome_6254;S136_genome_S136_genome_6255;S136_genome_S136_genome_6256;S136_genome_S136_genome_6257;S136_genome_S136_genome_6258;S136_genome_S136_genome_6259;S136_genome_S136_genome_6260;S136_genome_S136_genome_6261;S136_genome_S136_genome_6262;S136_genome_S136_genome_6263;S136_genome_S136_genome_6264;S136_genome_S136_genome_6265;S136_genome_S136_genome_6266;S136_genome_S136_genome_6267;S136_genome_S136_genome_6268 PF00903;PF01266;PF01494;PF08240;PF00067;PF00501;PF00107 PF13564;PF13193;PF00501;PF16177;PF01494;PF13450;PF01266;PF13738;PF01557;PF00903;PF00440;PF00440;PF13602;PF00107;PF08240;PF00175;PF13580;PF00667;PF00258;PF00067;PF00440;PF07690;PF13459;PF06902;PF13370;PF07992;PF01262;PF13738;PF00070;PF14759;PF00067 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7257449-7337807.1 7257449 7337807 80358 69 152 23 0.87020 cytotoxic 0.47 0.53 0.18 0.12 0.05 0.18 0.19 0.28 0.15 0.21 0.04 S136_genome_S136_genome_6432;S136_genome_S136_genome_6433;S136_genome_S136_genome_6434;S136_genome_S136_genome_6435;S136_genome_S136_genome_6436;S136_genome_S136_genome_6437;S136_genome_S136_genome_6438;S136_genome_S136_genome_6439;S136_genome_S136_genome_6440;S136_genome_S136_genome_6441;S136_genome_S136_genome_6442;S136_genome_S136_genome_6443;S136_genome_S136_genome_6444;S136_genome_S136_genome_6445;S136_genome_S136_genome_6446;S136_genome_S136_genome_6447;S136_genome_S136_genome_6448;S136_genome_S136_genome_6449;S136_genome_S136_genome_6450;S136_genome_S136_genome_6451;S136_genome_S136_genome_6452;S136_genome_S136_genome_6453;S136_genome_S136_genome_6454;S136_genome_S136_genome_6455;S136_genome_S136_genome_6456;S136_genome_S136_genome_6457;S136_genome_S136_genome_6458;S136_genome_S136_genome_6459;S136_genome_S136_genome_6460;S136_genome_S136_genome_6461;S136_genome_S136_genome_6462;S136_genome_S136_genome_6463;S136_genome_S136_genome_6464;S136_genome_S136_genome_6465;S136_genome_S136_genome_6466;S136_genome_S136_genome_6467;S136_genome_S136_genome_6468;S136_genome_S136_genome_6469;S136_genome_S136_genome_6470;S136_genome_S136_genome_6471;S136_genome_S136_genome_6472;S136_genome_S136_genome_6473;S136_genome_S136_genome_6474;S136_genome_S136_genome_6475;S136_genome_S136_genome_6476;S136_genome_S136_genome_6477;S136_genome_S136_genome_6478;S136_genome_S136_genome_6479;S136_genome_S136_genome_6480;S136_genome_S136_genome_6481;S136_genome_S136_genome_6482;S136_genome_S136_genome_6483;S136_genome_S136_genome_6484;S136_genome_S136_genome_6485;S136_genome_S136_genome_6486;S136_genome_S136_genome_6487;S136_genome_S136_genome_6488;S136_genome_S136_genome_6489;S136_genome_S136_genome_6490;S136_genome_S136_genome_6491;S136_genome_S136_genome_6492;S136_genome_S136_genome_6493;S136_genome_S136_genome_6494;S136_genome_S136_genome_6495;S136_genome_S136_genome_6496;S136_genome_S136_genome_6497;S136_genome_S136_genome_6498;S136_genome_S136_genome_6499;S136_genome_S136_genome_6500 PF08545;PF01243;PF00248;PF02719;PF08659;PF00108;PF08242;PF00891;PF00501;PF00067;PF08241;PF01266;PF08240;PF00106;PF05147;PF02737;PF04738;PF01494;PF08541;PF01370;PF00107;PF00534;PF01488 PF13489;PF05175;PF01209;PF05401;PF13847;PF00891;PF03141;PF08241;PF08242;PF13649;PF02011;PF16640;PF00553;PF00150;PF00553;PF01341;PF13679;PF13489;PF05175;PF13847;PF13649;PF08241;PF08242;PF13578;PF00106;PF08659;PF01370;PF02719;PF13460;PF13561;PF07335;PF00248;PF13424;PF00931;PF03704;PF00486;PF13365;PF00089;PF00501;PF03466;PF00126;PF13556;PF12840;PF12802;PF13412;PF13404;PF13593;PF01758;PF13385;PF02210;PF00054;PF13088;PF13859;PF13602;PF00107;PF16884;PF08240;PF12802;PF01047;PF13463;PF02634;PF00108;PF08545;PF08541;PF00665;PF01609;PF00067;PF06114;PF13443;PF00392;PF13730;PF02082;PF13545;PF00733;PF05402;PF13471;PF00664;PF00005;PF06414;PF02463;PF05147;PF04738;PF14028;PF00005;PF13191;PF02463;PF00296;PF05139;PF00009;PF01926;PF03144;PF14492;PF03764;PF00679;PF13531;PF01547;PF13416;PF13343;PF00528;PF00528;PF00232;PF00150;PF03747;PF02384;PF01066;PF02826;PF07992;PF16912;PF00107;PF01242;PF13579;PF13439;PF00534;PF13692;PF13524;PF13847;PF13649;PF03706;PF02633;PF00925;PF07992;PF01494;PF01488;PF00899;PF01266;PF00890;PF00070;PF02737;PF13738;PF02558;PF13450;PF05222;PF01262;PF03435;PF16653;PF00144;PF07690;PF13305;PF00440;PF12900;PF01243;PF14833;PF03446;PF02826;PF03807;PF02558;PF01488;PF02737;PF00440;PF16925;PF08362;PF00440 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7424123-7455027.1 7424123 7455027 30904 28 67 10 0.68644 antibacterial 0.51 0.29 0.13 0.04 Terpene 0.01 0.07 0.14 0.05 0.14 0.09 0.55 S136_genome_S136_genome_6575;S136_genome_S136_genome_6576;S136_genome_S136_genome_6577;S136_genome_S136_genome_6578;S136_genome_S136_genome_6579;S136_genome_S136_genome_6580;S136_genome_S136_genome_6581;S136_genome_S136_genome_6582;S136_genome_S136_genome_6583;S136_genome_S136_genome_6584;S136_genome_S136_genome_6585;S136_genome_S136_genome_6586;S136_genome_S136_genome_6587;S136_genome_S136_genome_6588;S136_genome_S136_genome_6589;S136_genome_S136_genome_6590;S136_genome_S136_genome_6591;S136_genome_S136_genome_6592;S136_genome_S136_genome_6593;S136_genome_S136_genome_6594;S136_genome_S136_genome_6595;S136_genome_S136_genome_6596;S136_genome_S136_genome_6597;S136_genome_S136_genome_6598;S136_genome_S136_genome_6599;S136_genome_S136_genome_6600;S136_genome_S136_genome_6601;S136_genome_S136_genome_6602 PF01593;PF01266;PF01494;PF00432;PF00494;PF00348;PF00535;PF04055;PF00202;PF04551 PF13641;PF00535;PF13632;PF01061;PF12698;PF08510;PF00005;PF13555;PF13401;PF13304;PF13476;PF00494;PF00494;PF07992;PF01266;PF00890;PF03486;PF00070;PF01494;PF12831;PF01134;PF13450;PF01593;PF00348;PF13249;PF13243;PF00432;PF01048;PF04055;PF13394;PF13353;PF11946;PF04551;PF13292;PF00676;PF02775;PF02779;PF02780;PF00202;PF13560;PF13413;PF12844;PF13443;PF01381;PF07883;PF02311;PF13350;PF16875;PF02065;PF01055;PF16499;PF16874;PF01476;PF01551;PF00657;PF13472;PF13977;PF16859;PF00440;PF13483;PF12706;PF00440;PF02909;PF00246;PF02518;PF03259;PF05331 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7532958-7544119.1 7532958 7544119 11161 8 13 0 0.77889 antibacterial 0.66 0.10 0.12 0.28 RiPP 0.00 0.07 0.09 0.09 0.68 0.00 0.08 S136_genome_S136_genome_6678;S136_genome_S136_genome_6679;S136_genome_S136_genome_6680;S136_genome_S136_genome_6681;S136_genome_S136_genome_6682;S136_genome_S136_genome_6683;S136_genome_S136_genome_6684;S136_genome_S136_genome_6685 PF00296;PF01400;PF13191;PF04545;PF08281;PF00196;PF13384;PF12770;PF13424;PF13432;PF00082;PF04542;PF05013 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7563606-7563927.1 7563606 7563927 321 1 2 0 0.56357 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_6700 PF14200;PF00652 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7565572-7650953.1 7565572 7650953 85381 15 91 14 0.82211 cytotoxic 0.33 0.60 0.07 0.21 Polyketide 0.00 0.18 0.04 0.93 0.03 0.03 0.02 S136_genome_S136_genome_6703;S136_genome_S136_genome_6704;S136_genome_S136_genome_6705;S136_genome_S136_genome_6706;S136_genome_S136_genome_6707;S136_genome_S136_genome_6708;S136_genome_S136_genome_6709;S136_genome_S136_genome_6710;S136_genome_S136_genome_6711;S136_genome_S136_genome_6712;S136_genome_S136_genome_6713;S136_genome_S136_genome_6714;S136_genome_S136_genome_6715;S136_genome_S136_genome_6716;S136_genome_S136_genome_6717 PF00109;PF08990;PF01266;PF02719;PF01494;PF08659;PF00108;PF00698;PF04820;PF02801;PF01370;PF00501;PF00067;PF00106 PF01315;PF02738;PF03636;PF03632;PF03633;PF00072;PF04397;PF00196;PF02525;PF03358;PF00067;PF00501;PF13193;PF00109;PF14765;PF08659;PF00106;PF01370;PF13561;PF00108;PF02801;PF16197;PF00550;PF00698;PF00108;PF00698;PF14765;PF08659;PF00106;PF13561;PF02801;PF16197;PF00550;PF00109;PF01370;PF16363;PF08990;PF00108;PF08659;PF00106;PF05368;PF13561;PF00109;PF02801;PF00698;PF14765;PF00550;PF16197;PF01370;PF02719;PF16363;PF08990;PF16197;PF00698;PF00106;PF13561;PF00550;PF00109;PF00108;PF02801;PF14765;PF08659;PF01370;PF02719;PF00109;PF00108;PF02801;PF16197;PF08659;PF00106;PF13561;PF00550;PF00698;PF14765;PF00797;PF01494;PF13738;PF01946;PF12831;PF00890;PF07992;PF01266;PF03486;PF01134;PF00070;PF13450;PF04820;PF00465;PF13685;PF01761;PF01474 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7660361-7666682.1 7660361 7666682 6321 7 16 4 0.60044 0.45 0.24 0.08 0.32 Polyketide 0.01 0.22 0.18 0.52 0.04 0.02 0.02 S136_genome_S136_genome_6728;S136_genome_S136_genome_6729;S136_genome_S136_genome_6730;S136_genome_S136_genome_6731;S136_genome_S136_genome_6732;S136_genome_S136_genome_6733;S136_genome_S136_genome_6734 PF00561;PF00975;PF01266;PF01494 PF01494;PF07992;PF01266;PF00975;PF12697;PF07859;PF00561;PF12146;PF00999;PF01220;PF12146;PF00561;PF12697;PF10604;PF08327;PF07045 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7705774-7817958.1 7705774 7817958 112184 42 160 24 0.92451 antibacterial-cytotoxic 0.59 0.50 0.10 0.35 Polyketide 0.00 0.03 0.05 0.81 0.00 0.18 0.02 S136_genome_S136_genome_6768;S136_genome_S136_genome_6769;S136_genome_S136_genome_6770;S136_genome_S136_genome_6771;S136_genome_S136_genome_6772;S136_genome_S136_genome_6773;S136_genome_S136_genome_6774;S136_genome_S136_genome_6775;S136_genome_S136_genome_6776;S136_genome_S136_genome_6777;S136_genome_S136_genome_6778;S136_genome_S136_genome_6779;S136_genome_S136_genome_6780;S136_genome_S136_genome_6781;S136_genome_S136_genome_6782;S136_genome_S136_genome_6783;S136_genome_S136_genome_6784;S136_genome_S136_genome_6785;S136_genome_S136_genome_6786;S136_genome_S136_genome_6787;S136_genome_S136_genome_6788;S136_genome_S136_genome_6789;S136_genome_S136_genome_6790;S136_genome_S136_genome_6791;S136_genome_S136_genome_6792;S136_genome_S136_genome_6793;S136_genome_S136_genome_6794;S136_genome_S136_genome_6795;S136_genome_S136_genome_6796;S136_genome_S136_genome_6797;S136_genome_S136_genome_6798;S136_genome_S136_genome_6799;S136_genome_S136_genome_6800;S136_genome_S136_genome_6801;S136_genome_S136_genome_6802;S136_genome_S136_genome_6803;S136_genome_S136_genome_6804;S136_genome_S136_genome_6805;S136_genome_S136_genome_6806;S136_genome_S136_genome_6807;S136_genome_S136_genome_6808;S136_genome_S136_genome_6809 PF01041;PF00248;PF02719;PF00108;PF08659;PF00067;PF00561;PF01266;PF00107;PF08240;PF02801;PF00106;PF01596;PF08990;PF00975;PF02737;PF00109;PF00698;PF04321;PF01370;PF00155;PF08241;PF00534;PF01488 PF13401;PF13191;PF03704;PF00486;PF06039;PF05199;PF08448;PF00196;PF00196;PF00989;PF13426;PF00067;PF13191;PF00005;PF13401;PF00664;PF00005;PF00437;PF00664;PF08990;PF14765;PF00550;PF02801;PF16197;PF01370;PF02719;PF16363;PF00698;PF13561;PF00109;PF00108;PF08659;PF00106;PF00109;PF00108;PF02801;PF16197;PF00698;PF14765;PF08659;PF00106;PF01370;PF02719;PF01073;PF16363;PF13561;PF00550;PF08990;PF00109;PF00108;PF02801;PF16197;PF00698;PF14765;PF08659;PF00106;PF04321;PF01370;PF02719;PF16363;PF13561;PF00550;PF00975;PF12697;PF11187;PF06902;PF13459;PF13370;PF00067;PF01041;PF00266;PF00155;PF01053;PF00201;PF00109;PF00698;PF00550;PF00108;PF02801;PF16197;PF14765;PF08240;PF00107;PF13602;PF08659;PF00106;PF01370;PF02719;PF16363;PF08990;PF00109;PF02801;PF16197;PF14765;PF08659;PF00106;PF13561;PF01370;PF02719;PF00108;PF00698;PF00550;PF00975;PF12697;PF00561;PF12146;PF04321;PF01370;PF16363;PF05368;PF13460;PF00491;PF13432;PF13374;PF14667;PF01554;PF13570;PF13360;PF01432;PF01596;PF01135;PF13847;PF13649;PF13578;PF08241;PF05711;PF00106;PF01370;PF04321;PF08659;PF13561;PF13460;PF00248;PF08007;PF13621;PF01266;PF07992;PF13450;PF12318;PF05729;PF02261;PF14542;PF00393;PF03446;PF03807;PF02558;PF01488;PF02737;PF06737;PF01476;PF01551;PF05653;PF06276;PF11575;PF13439;PF13579;PF08323;PF00534;PF13692;PF13524 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7819743-7825600.1 7819743 7825600 5857 3 5 1 0.65008 antibacterial 0.58 0.03 0.42 0.11 0.08 0.20 0.03 0.07 0.19 0.00 0.43 S136_genome_S136_genome_6812;S136_genome_S136_genome_6813;S136_genome_S136_genome_6814 PF00106 PF07971;PF03007;PF06974;PF00106;PF13561 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7881147-7882107.1 7881147 7882107 960 1 3 1 0.64730 antibacterial 0.63 0.24 0.19 0.15 0.07 0.06 0.17 0.19 0.42 0.01 0.10 S136_genome_S136_genome_6865 PF08242 PF10017;PF13649;PF08242 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7882882-7886705.1 7882882 7886705 3823 3 4 0 0.56692 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_6867;S136_genome_S136_genome_6868;S136_genome_S136_genome_6869 PF03781;PF12867;PF04107;PF10021 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7897625-7898303.1 7897625 7898303 678 1 1 0 0.57834 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 S136_genome_S136_genome_6881 PF00440 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7910732-7911506.1 7910732 7911506 774 1 8 2 0.52037 0.45 0.33 0.17 0.05 0.01 0.02 0.22 0.08 0.23 0.00 0.45 S136_genome_S136_genome_6895 PF08242;PF08241 PF13489;PF08241;PF08242;PF13649;PF07021;PF05724;PF05175;PF13847 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7917417-7918632.1 7917417 7918632 1215 1 1 1 0.52695 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 S136_genome_S136_genome_6902 PF00067 PF00067 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7943951-7945532.1 7943951 7945532 1581 1 1 1 0.58164 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 S136_genome_S136_genome_6929 PF00067 PF00067 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_7974931-8061213.1 7974931 8061213 86282 43 104 12 0.82115 0.37 0.29 0.26 0.18 NRP 0.01 0.75 0.04 0.27 0.06 0.06 0.01 S136_genome_S136_genome_6963;S136_genome_S136_genome_6964;S136_genome_S136_genome_6965;S136_genome_S136_genome_6966;S136_genome_S136_genome_6967;S136_genome_S136_genome_6968;S136_genome_S136_genome_6969;S136_genome_S136_genome_6970;S136_genome_S136_genome_6971;S136_genome_S136_genome_6972;S136_genome_S136_genome_6973;S136_genome_S136_genome_6974;S136_genome_S136_genome_6975;S136_genome_S136_genome_6976;S136_genome_S136_genome_6977;S136_genome_S136_genome_6978;S136_genome_S136_genome_6979;S136_genome_S136_genome_6980;S136_genome_S136_genome_6981;S136_genome_S136_genome_6982;S136_genome_S136_genome_6983;S136_genome_S136_genome_6984;S136_genome_S136_genome_6985;S136_genome_S136_genome_6986;S136_genome_S136_genome_6987;S136_genome_S136_genome_6988;S136_genome_S136_genome_6989;S136_genome_S136_genome_6990;S136_genome_S136_genome_6991;S136_genome_S136_genome_6992;S136_genome_S136_genome_6993;S136_genome_S136_genome_6994;S136_genome_S136_genome_6995;S136_genome_S136_genome_6996;S136_genome_S136_genome_6997;S136_genome_S136_genome_6998;S136_genome_S136_genome_6999;S136_genome_S136_genome_7000;S136_genome_S136_genome_7001;S136_genome_S136_genome_7002;S136_genome_S136_genome_7003;S136_genome_S136_genome_7004;S136_genome_S136_genome_7005 PF00583;PF00248;PF00501;PF08659;PF03061;PF00668;PF08242;PF00067;PF00975;PF08241;PF01636;PF00106 PF04075;PF00067;PF06902;PF13459;PF13370;PF03537;PF00248;PF07409;PF00652;PF14200;PF00582;PF02040;PF03600;PF01522;PF10518;PF14016;PF07714;PF00069;PF14531;PF06293;PF01636;PF07638;PF04542;PF04545;PF08281;PF13581;PF07228;PF13185;PF01590;PF08448;PF01402;PF07704;PF00652;PF14200;PF01070;PF01645;PF03060;PF00478;PF00720;PF09360;PF13847;PF05175;PF03602;PF01170;PF06325;PF13489;PF13649;PF08241;PF08242;PF02353;PF14518;PF08659;PF00106;PF13561;PF13460;PF00892;PF01522;PF13692;PF13439;PF06925;PF03631;PF01738;PF12697;PF00975;PF13191;PF00005;PF00664;PF02463;PF13191;PF00005;PF00664;PF03412;PF12385;PF13437;PF16576;PF03061;PF02983;PF00089;PF13365;PF07228;PF13492;PF13185;PF01590;PF08448;PF13188;PF00989;PF00067;PF00144;PF00550;PF13193;PF00668;PF00501;PF00550;PF13193;PF00668;PF00501;PF03621;PF13302;PF13673;PF00583;PF08445;PF13347;PF05977;PF07690 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8149600-8156736.1 8149600 8156736 7136 3 4 0 0.59400 antibacterial 0.72 0.16 0.17 0.15 Other 0.01 0.00 0.68 0.19 0.05 0.02 0.08 S136_genome_S136_genome_7081;S136_genome_S136_genome_7082;S136_genome_S136_genome_7083 PF06626;PF07992;PF13450;PF13454 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8162685-8175552.1 8162685 8175552 12867 14 30 5 0.86389 0.23 0.45 0.28 0.11 Polyketide 0.00 0.26 0.20 0.70 0.03 0.02 0.08 S136_genome_S136_genome_7088;S136_genome_S136_genome_7089;S136_genome_S136_genome_7090;S136_genome_S136_genome_7091;S136_genome_S136_genome_7092;S136_genome_S136_genome_7093;S136_genome_S136_genome_7094;S136_genome_S136_genome_7095;S136_genome_S136_genome_7096;S136_genome_S136_genome_7097;S136_genome_S136_genome_7098;S136_genome_S136_genome_7099;S136_genome_S136_genome_7100;S136_genome_S136_genome_7101 PF00109;PF00108;PF08242;PF02801;PF08241 PF13489;PF13847;PF02353;PF01209;PF08241;PF08242;PF13649;PF01728;PF01135;PF03358;PF00109;PF00108;PF02801;PF10101;PF00487;PF13302;PF13744;PF13560;PF13936;PF01381;PF04545;PF13384;PF04672;PF13407;PF03009;PF13653;PF05630;PF07228;PF14907;PF04972 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8239679-8242008.1 8239679 8242008 2329 2 4 0 0.57051 antibacterial 0.87 0.06 0.18 0.26 0.00 0.08 0.07 0.38 0.20 0.03 0.29 S136_genome_S136_genome_7156;S136_genome_S136_genome_7157 PF00657;PF13472;PF13499;PF09995 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8242991-8245771.1 8242991 8245771 2780 2 3 1 0.66650 antibacterial 0.77 0.05 0.15 0.29 0.00 0.41 0.07 0.20 0.16 0.03 0.17 S136_genome_S136_genome_7159;S136_genome_S136_genome_7160 PF00561 PF00144;PF00561;PF08386 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8249193-8276815.1 8249193 8276815 27622 31 50 4 0.81821 0.49 0.42 0.18 0.06 0.03 0.09 0.22 0.16 0.29 0.03 0.23 S136_genome_S136_genome_7163;S136_genome_S136_genome_7164;S136_genome_S136_genome_7165;S136_genome_S136_genome_7166;S136_genome_S136_genome_7167;S136_genome_S136_genome_7168;S136_genome_S136_genome_7169;S136_genome_S136_genome_7170;S136_genome_S136_genome_7171;S136_genome_S136_genome_7172;S136_genome_S136_genome_7173;S136_genome_S136_genome_7174;S136_genome_S136_genome_7175;S136_genome_S136_genome_7176;S136_genome_S136_genome_7177;S136_genome_S136_genome_7178;S136_genome_S136_genome_7179;S136_genome_S136_genome_7180;S136_genome_S136_genome_7181;S136_genome_S136_genome_7182;S136_genome_S136_genome_7183;S136_genome_S136_genome_7184;S136_genome_S136_genome_7185;S136_genome_S136_genome_7186;S136_genome_S136_genome_7187;S136_genome_S136_genome_7188;S136_genome_S136_genome_7189;S136_genome_S136_genome_7190;S136_genome_S136_genome_7191;S136_genome_S136_genome_7192;S136_genome_S136_genome_7193 PF00067;PF08242;PF08241;PF00248 PF13489;PF13847;PF05148;PF01209;PF08241;PF08242;PF13649;PF05175;PF08003;PF07681;PF13564;PF12840;PF01022;PF05036;PF09992;PF14435;PF00248;PF06013;PF12468;PF02627;PF01042;PF00067;PF09844;PF06314;PF13828;PF01032;PF11716;PF00528;PF00528;PF13416;PF13343;PF13531;PF01547;PF08402;PF13191;PF00005;PF00392;PF08279;PF02082;PF13545;PF07729;PF02743;PF02525;PF03358;PF01638;PF12840;PF04107;PF05257;PF04672;PF03795 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8336907-8375439.1 8336907 8375439 38532 31 50 9 0.69767 cytotoxic 0.29 0.54 0.20 0.07 0.09 0.15 0.16 0.32 0.07 0.04 0.21 S136_genome_S136_genome_7246;S136_genome_S136_genome_7247;S136_genome_S136_genome_7248;S136_genome_S136_genome_7249;S136_genome_S136_genome_7250;S136_genome_S136_genome_7251;S136_genome_S136_genome_7252;S136_genome_S136_genome_7253;S136_genome_S136_genome_7254;S136_genome_S136_genome_7255;S136_genome_S136_genome_7256;S136_genome_S136_genome_7257;S136_genome_S136_genome_7258;S136_genome_S136_genome_7259;S136_genome_S136_genome_7260;S136_genome_S136_genome_7261;S136_genome_S136_genome_7262;S136_genome_S136_genome_7263;S136_genome_S136_genome_7264;S136_genome_S136_genome_7265;S136_genome_S136_genome_7266;S136_genome_S136_genome_7267;S136_genome_S136_genome_7268;S136_genome_S136_genome_7269;S136_genome_S136_genome_7270;S136_genome_S136_genome_7271;S136_genome_S136_genome_7272;S136_genome_S136_genome_7273;S136_genome_S136_genome_7274;S136_genome_S136_genome_7275;S136_genome_S136_genome_7276 PF00561;PF01243;PF00903;PF01266;PF01494;PF08242;PF00067;PF00891;PF08241 PF13489;PF00891;PF13847;PF08241;PF08242;PF13649;PF02983;PF00089;PF02837;PF00703;PF02836;PF05270;PF10027;PF12770;PF13432;PF13360;PF12894;PF16529;PF00400;PF13569;PF07728;PF05762;PF13519;PF04434;PF12900;PF01243;PF07690;PF06609;PF06779;PF00083;PF05977;PF00722;PF12831;PF00890;PF01266;PF13450;PF07992;PF01494;PF03486;PF01134;PF04230;PF12697;PF00561;PF12146;PF05239;PF00457;PF03702;PF00474;PF00067;PF00903 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8392195-8394064.1 8392195 8394064 1869 2 5 2 0.61096 0.47 0.10 0.33 0.26 0.04 0.01 0.22 0.50 0.17 0.00 0.11 S136_genome_S136_genome_7295;S136_genome_S136_genome_7296 PF01266;PF01494 PF02909;PF00440;PF01494;PF01266;PF13450 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8401121-8401919.1 8401121 8401919 798 1 5 0 0.52555 antibacterial 0.85 0.11 0.18 0.22 0.00 0.06 0.34 0.28 0.17 0.03 0.17 S136_genome_S136_genome_7305 PF12840;PF09339;PF12802;PF13412;PF01614 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8407019-8529012.1 8407019 8529012 121993 101 188 29 0.81468 antibacterial 0.55 0.41 0.18 0.21 Polyketide 0.02 0.11 0.05 0.80 0.02 0.21 0.00 S136_genome_S136_genome_7310;S136_genome_S136_genome_7311;S136_genome_S136_genome_7312;S136_genome_S136_genome_7313;S136_genome_S136_genome_7314;S136_genome_S136_genome_7315;S136_genome_S136_genome_7316;S136_genome_S136_genome_7317;S136_genome_S136_genome_7318;S136_genome_S136_genome_7319;S136_genome_S136_genome_7320;S136_genome_S136_genome_7321;S136_genome_S136_genome_7322;S136_genome_S136_genome_7323;S136_genome_S136_genome_7324;S136_genome_S136_genome_7325;S136_genome_S136_genome_7326;S136_genome_S136_genome_7327;S136_genome_S136_genome_7328;S136_genome_S136_genome_7329;S136_genome_S136_genome_7330;S136_genome_S136_genome_7331;S136_genome_S136_genome_7332;S136_genome_S136_genome_7333;S136_genome_S136_genome_7334;S136_genome_S136_genome_7335;S136_genome_S136_genome_7336;S136_genome_S136_genome_7337;S136_genome_S136_genome_7338;S136_genome_S136_genome_7339;S136_genome_S136_genome_7340;S136_genome_S136_genome_7341;S136_genome_S136_genome_7342;S136_genome_S136_genome_7343;S136_genome_S136_genome_7344;S136_genome_S136_genome_7345;S136_genome_S136_genome_7346;S136_genome_S136_genome_7347;S136_genome_S136_genome_7348;S136_genome_S136_genome_7349;S136_genome_S136_genome_7350;S136_genome_S136_genome_7351;S136_genome_S136_genome_7352;S136_genome_S136_genome_7353;S136_genome_S136_genome_7354;S136_genome_S136_genome_7355;S136_genome_S136_genome_7356;S136_genome_S136_genome_7357;S136_genome_S136_genome_7358;S136_genome_S136_genome_7359;S136_genome_S136_genome_7360;S136_genome_S136_genome_7361;S136_genome_S136_genome_7362;S136_genome_S136_genome_7363;S136_genome_S136_genome_7364;S136_genome_S136_genome_7365;S136_genome_S136_genome_7366;S136_genome_S136_genome_7367;S136_genome_S136_genome_7368;S136_genome_S136_genome_7369;S136_genome_S136_genome_7370;S136_genome_S136_genome_7371;S136_genome_S136_genome_7372;S136_genome_S136_genome_7373;S136_genome_S136_genome_7374;S136_genome_S136_genome_7375;S136_genome_S136_genome_7376;S136_genome_S136_genome_7377;S136_genome_S136_genome_7378;S136_genome_S136_genome_7379;S136_genome_S136_genome_7380;S136_genome_S136_genome_7381;S136_genome_S136_genome_7382;S136_genome_S136_genome_7383;S136_genome_S136_genome_7384;S136_genome_S136_genome_7385;S136_genome_S136_genome_7386;S136_genome_S136_genome_7387;S136_genome_S136_genome_7388;S136_genome_S136_genome_7389;S136_genome_S136_genome_7390;S136_genome_S136_genome_7391;S136_genome_S136_genome_7392;S136_genome_S136_genome_7393;S136_genome_S136_genome_7394;S136_genome_S136_genome_7395;S136_genome_S136_genome_7396;S136_genome_S136_genome_7397;S136_genome_S136_genome_7398;S136_genome_S136_genome_7399;S136_genome_S136_genome_7400;S136_genome_S136_genome_7401;S136_genome_S136_genome_7402;S136_genome_S136_genome_7403;S136_genome_S136_genome_7404;S136_genome_S136_genome_7405;S136_genome_S136_genome_7406;S136_genome_S136_genome_7407;S136_genome_S136_genome_7408;S136_genome_S136_genome_7409;S136_genome_S136_genome_7410 PF02719;PF08659;PF00108;PF00891;PF00501;PF00067;PF03033;PF00561;PF01408;PF01266;PF00483;PF08240;PF02801;PF00106;PF00903;PF04101;PF00975;PF00583;PF00109;PF01494;PF00698;PF04321;PF07993;PF04820;PF00702;PF01370;PF00107;PF00534;PF01636 PF00582;PF17260;PF09851;PF06525;PF00127;PF01471;PF09374;PF13560;PF14200;PF02469;PF01638;PF13463;PF12802;PF01978;PF01047;PF12840;PF13545;PF08240;PF00107;PF13602;PF09348;PF13384;PF13518;PF13551;PF00975;PF08659;PF00106;PF13561;PF00698;PF16197;PF02801;PF00109;PF00108;PF00550;PF14535;PF00501;PF07690;PF00083;PF05977;PF00756;PF12146;PF00201;PF04101;PF03033;PF04266;PF03372;PF13414;PF07719;PF13411;PF00376;PF09278;PF06445;PF13560;PF06864;PF13360;PF00400;PF12894;PF00069;PF07714;PF01636;PF06293;PF14435;PF03747;PF07786;PF04235;PF03713;PF13628;PF12681;PF00903;PF02868;PF01447;PF07504;PF03466;PF00126;PF16363;PF01370;PF04321;PF04101;PF00201;PF13579;PF13439;PF02441;PF13579;PF13439;PF00201;PF04101;PF03033;PF13579;PF13439;PF00201;PF04101;PF00067;PF00005;PF13304;PF13732;PF01061;PF12698;PF12679;PF00483;PF12804;PF04321;PF16363;PF01370;PF02719;PF01073;PF07993;PF13460;PF06722;PF00201;PF04101;PF02624;PF00881;PF00881;PF01494;PF07992;PF12831;PF01134;PF13450;PF04820;PF01266;PF00196;PF08281;PF00072;PF13977;PF00067;PF16864;PF00392;PF02082;PF09339;PF00891;PF11583;PF13439;PF13579;PF00534;PF13692;PF00702;PF12710;PF13419;PF13242;PF03932;PF11969;PF01230;PF07638;PF04545;PF08281;PF04542;PF13673;PF08445;PF13527;PF13508;PF00583;PF02474;PF00756;PF00561;PF01804;PF13810;PF08310;PF00877;PF08310;PF05729;PF13401;PF13560;PF13443;PF01381;PF12844;PF13413;PF00196;PF00486;PF03704;PF14559;PF13191;PF03193;PF13365;PF13586;PF16653;PF03435;PF01408;PF01113;PF00106;PF00440;PF02909;PF13365;PF05729;PF05368;PF13460;PF01370;PF04321;PF02322 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8530403-8550534.1 8530403 8550534 20131 17 27 1 0.71418 antibacterial 0.60 0.08 0.14 0.29 0.01 0.26 0.40 0.16 0.14 0.01 0.02 S136_genome_S136_genome_7412;S136_genome_S136_genome_7413;S136_genome_S136_genome_7414;S136_genome_S136_genome_7415;S136_genome_S136_genome_7416;S136_genome_S136_genome_7417;S136_genome_S136_genome_7418;S136_genome_S136_genome_7419;S136_genome_S136_genome_7420;S136_genome_S136_genome_7421;S136_genome_S136_genome_7422;S136_genome_S136_genome_7423;S136_genome_S136_genome_7424;S136_genome_S136_genome_7425;S136_genome_S136_genome_7426;S136_genome_S136_genome_7427;S136_genome_S136_genome_7428 PF00561 PF13787;PF03096;PF12697;PF08386;PF00561;PF12146;PF00756;PF04072;PF12706;PF13483;PF07336;PF11706;PF00196;PF14559;PF13191;PF13401;PF14099;PF00754;PF03704;PF03176;PF00722;PF03935;PF00652;PF14200;PF16483;PF04228;PF05076 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8556035-8747922.1 8556035 8747922 191887 170 168 8 0.93171 0.40 0.29 0.17 0.32 0.01 0.22 0.25 0.24 0.25 0.10 0.03 S136_genome_S136_genome_7436;S136_genome_S136_genome_7437;S136_genome_S136_genome_7438;S136_genome_S136_genome_7439;S136_genome_S136_genome_7440;S136_genome_S136_genome_7441;S136_genome_S136_genome_7442;S136_genome_S136_genome_7443;S136_genome_S136_genome_7444;S136_genome_S136_genome_7445;S136_genome_S136_genome_7446;S136_genome_S136_genome_7447;S136_genome_S136_genome_7448;S136_genome_S136_genome_7449;S136_genome_S136_genome_7450;S136_genome_S136_genome_7451;S136_genome_S136_genome_7452;S136_genome_S136_genome_7453;S136_genome_S136_genome_7454;S136_genome_S136_genome_7455;S136_genome_S136_genome_7456;S136_genome_S136_genome_7457;S136_genome_S136_genome_7458;S136_genome_S136_genome_7459;S136_genome_S136_genome_7460;S136_genome_S136_genome_7461;S136_genome_S136_genome_7462;S136_genome_S136_genome_7463;S136_genome_S136_genome_7464;S136_genome_S136_genome_7465;S136_genome_S136_genome_7466;S136_genome_S136_genome_7467;S136_genome_S136_genome_7468;S136_genome_S136_genome_7469;S136_genome_S136_genome_7470;S136_genome_S136_genome_7471;S136_genome_S136_genome_7472;S136_genome_S136_genome_7473;S136_genome_S136_genome_7474;S136_genome_S136_genome_7475;S136_genome_S136_genome_7476;S136_genome_S136_genome_7477;S136_genome_S136_genome_7478;S136_genome_S136_genome_7479;S136_genome_S136_genome_7480;S136_genome_S136_genome_7481;S136_genome_S136_genome_7482;S136_genome_S136_genome_7483;S136_genome_S136_genome_7484;S136_genome_S136_genome_7485;S136_genome_S136_genome_7486;S136_genome_S136_genome_7487;S136_genome_S136_genome_7488;S136_genome_S136_genome_7489;S136_genome_S136_genome_7490;S136_genome_S136_genome_7491;S136_genome_S136_genome_7492;S136_genome_S136_genome_7493;S136_genome_S136_genome_7494;S136_genome_S136_genome_7495;S136_genome_S136_genome_7496;S136_genome_S136_genome_7497;S136_genome_S136_genome_7498;S136_genome_S136_genome_7499;S136_genome_S136_genome_7500;S136_genome_S136_genome_7501;S136_genome_S136_genome_7502;S136_genome_S136_genome_7503;S136_genome_S136_genome_7504;S136_genome_S136_genome_7505;S136_genome_S136_genome_7506;S136_genome_S136_genome_7507;S136_genome_S136_genome_7508;S136_genome_S136_genome_7509;S136_genome_S136_genome_7510;S136_genome_S136_genome_7511;S136_genome_S136_genome_7512;S136_genome_S136_genome_7513;S136_genome_S136_genome_7514;S136_genome_S136_genome_7515;S136_genome_S136_genome_7516;S136_genome_S136_genome_7517;S136_genome_S136_genome_7518;S136_genome_S136_genome_7519;S136_genome_S136_genome_7520;S136_genome_S136_genome_7521;S136_genome_S136_genome_7522;S136_genome_S136_genome_7523;S136_genome_S136_genome_7524;S136_genome_S136_genome_7525;S136_genome_S136_genome_7526;S136_genome_S136_genome_7527;S136_genome_S136_genome_7528;S136_genome_S136_genome_7529;S136_genome_S136_genome_7530;S136_genome_S136_genome_7531;S136_genome_S136_genome_7532;S136_genome_S136_genome_7533;S136_genome_S136_genome_7534;S136_genome_S136_genome_7535;S136_genome_S136_genome_7536;S136_genome_S136_genome_7537;S136_genome_S136_genome_7538;S136_genome_S136_genome_7539;S136_genome_S136_genome_7540;S136_genome_S136_genome_7541;S136_genome_S136_genome_7542;S136_genome_S136_genome_7543;S136_genome_S136_genome_7544;S136_genome_S136_genome_7545;S136_genome_S136_genome_7546;S136_genome_S136_genome_7547;S136_genome_S136_genome_7548;S136_genome_S136_genome_7549;S136_genome_S136_genome_7550;S136_genome_S136_genome_7551;S136_genome_S136_genome_7552;S136_genome_S136_genome_7553;S136_genome_S136_genome_7554;S136_genome_S136_genome_7555;S136_genome_S136_genome_7556;S136_genome_S136_genome_7557;S136_genome_S136_genome_7558;S136_genome_S136_genome_7559;S136_genome_S136_genome_7560;S136_genome_S136_genome_7561;S136_genome_S136_genome_7562;S136_genome_S136_genome_7563;S136_genome_S136_genome_7564;S136_genome_S136_genome_7565;S136_genome_S136_genome_7566;S136_genome_S136_genome_7567;S136_genome_S136_genome_7568;S136_genome_S136_genome_7569;S136_genome_S136_genome_7570;S136_genome_S136_genome_7571;S136_genome_S136_genome_7572;S136_genome_S136_genome_7573;S136_genome_S136_genome_7574;S136_genome_S136_genome_7575;S136_genome_S136_genome_7576;S136_genome_S136_genome_7577;S136_genome_S136_genome_7578;S136_genome_S136_genome_7579;S136_genome_S136_genome_7580;S136_genome_S136_genome_7581;S136_genome_S136_genome_7582;S136_genome_S136_genome_7583;S136_genome_S136_genome_7584;S136_genome_S136_genome_7585;S136_genome_S136_genome_7586;S136_genome_S136_genome_7587;S136_genome_S136_genome_7588;S136_genome_S136_genome_7589;S136_genome_S136_genome_7590;S136_genome_S136_genome_7591;S136_genome_S136_genome_7592;S136_genome_S136_genome_7593;S136_genome_S136_genome_7594;S136_genome_S136_genome_7595;S136_genome_S136_genome_7596;S136_genome_S136_genome_7597;S136_genome_S136_genome_7598;S136_genome_S136_genome_7599;S136_genome_S136_genome_7600;S136_genome_S136_genome_7601;S136_genome_S136_genome_7602;S136_genome_S136_genome_7603;S136_genome_S136_genome_7604;S136_genome_S136_genome_7605 PF00561;PF00583;PF01243;PF00903;PF04321;PF08242;PF01370;PF01636 PF12697;PF12146;PF00561;PF12900;PF16242;PF01243;PF13460;PF01370;PF05368;PF04321;PF00440;PF13560;PF13191;PF13360;PF13613;PF01817;PF13340;PF10946;PF00293;PF13476;PF00005;PF13555;PF13481;PF13401;PF13191;PF02687;PF13796;PF07730;PF00196;PF07638;PF08281;PF00072;PF13458;PF01636;PF04655;PF13428;PF12895;PF02955;PF08443;PF14397;PF12770;PF00903;PF13613;PF12681;PF00903;PF13578;PF00440;PF11066;PF12697;PF00561;PF02129;PF08840;PF13340;PF14329;PF00440;PF02909;PF01609;PF13359;PF13613;PF13340;PF13340;PF01609;PF13546;PF13646;PF00872;PF12833;PF00165;PF13542;PF14525;PF00665;PF13586;PF00929;PF13359;PF01609;PF13613;PF13546;PF00293;PF00069;PF04678;PF05593;PF07591;PF13558;PF11716;PF12867;PF04978;PF07691;PF03457;PF03457;PF00271;PF04851;PF00270;PF07927;PF06527;PF05621;PF13401;PF09848;PF13604;PF00004;PF09299;PF00665;PF13565;PF13245;PF00580;PF13361;PF13538;PF14487;PF03747;PF12770;PF13191;PF13646;PF00170;PF05621;PF13401;PF13191;PF00665;PF13560;PF06527;PF01844;PF07505;PF12728;PF13936;PF00583;PF13508;PF13673;PF04149;PF13560;PF12844;PF13413;PF01381;PF04672;PF08242;PF03965;PF13560;PF12844;PF01381;PF13443;PF13413;PF13604;PF13245;PF13191;PF00580;PF13361;PF13538;PF05593;PF13930;PF14567;PF09346;PF14568;PF13360;PF12770;PF05990;PF01223;PF14040;PF00239;PF16656;PF13338;PF14040;PF03995;PF00293;PF00932;PF07510;PF07510;PF07690;PF13385;PF03534;PF15644;PF15567;PF13560 -S136_genome deepbgc 0.1.0 deepbgc S136_genome_8760145-8762950.1 8760145 8762950 2805 1 1 0 0.55987 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 S136_genome_S136_genome_7614 PF13032 diff --git a/example_data/duptable.tsv b/example_data/duptable.tsv deleted file mode 100644 index 51250d2..0000000 --- a/example_data/duptable.tsv +++ /dev/null @@ -1,45 +0,0 @@ -#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description -TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [Unknown|dxs1|1-deoxy-D-xylulose-5-phosphate synthase|loc|6712277 6714206 1 # ID=1_5943|Type=CDS|transl_table=11; Unknown|dxs2|1-deoxy-D-xylulose-5-phosphate synthase|loc|7436822 7438721 1 # ID=1_6578|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase -TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [Unknown|rpmB1|50S ribosomal protein L28|loc|4887509 4887746 -1 # ID=1_4317|Type=CDS|transl_table=11; Unknown|rpmB2|50S ribosomal protein L28|loc|6124403 6124589 -1 # ID=1_5460|Type=CDS|transl_table=11] L28: ribosomal protein bL28 -TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [Unknown|ispG1|4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase|loc|6242068 6243226 1 # ID=1_5567|Type=CDS|transl_table=11; Unknown|ispG2|4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase|loc|7435657 7436791 1 # ID=1_6577|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase -TIGR02274 2.0 1.0 0.1643 0.9211 0.9474 [Unknown|dcd1|Deoxycytidine triphosphate deaminase|loc|4719717 4720293 1 # ID=1_4174|Type=CDS|transl_table=11; Unknown|dcd2|Deoxycytidine triphosphate deaminase|loc|8486597 8487128 1 # ID=1_7362|Type=CDS|transl_table=11] dCTP_deam: deoxycytidine triphosphate deaminase -TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [Unknown|dnaJ1|Chaperone protein DnaJ|loc|3116201 3117338 -1 # ID=1_2771|Type=CDS|transl_table=11; Unknown|dnaJ2|Chaperone protein DnaJ|loc|4733940 4735113 1 # ID=1_4187|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ -TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [Unknown|rpsR1|30S ribosomal protein S18|loc|4433682 4433919 -1 # ID=1_3932|Type=CDS|transl_table=11; Unknown|rpsR2|30S ribosomal protein S18 1|loc|4889393 4889627 1 # ID=1_4321|Type=CDS|transl_table=11] S18: ribosomal protein bS18 -TIGR00220 2.0 1.0 0.3192 0.8053 0.8684 [Unknown|mscL1|Large-conductance mechanosensitive channel|loc|3853401 3853878 1 # ID=1_3391|Type=CDS|transl_table=11; Unknown|mscL2|Large-conductance mechanosensitive channel|loc|8550888 8551332 1 # ID=1_7418|Type=CDS|transl_table=11] mscL: large conductance mechanosensitive channel protein -TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [Unknown|tal2|Transaldolase|loc|2373526 2374645 1 # ID=1_2103|Type=CDS|transl_table=11; Unknown|tal5|Transaldolase|loc|7343748 7344918 -1 # ID=1_6497|Type=CDS|transl_table=11] tal_mycobact: transaldolase -TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [Unknown|aroA1|3-phosphoshikimate 1-carboxyvinyltransferase|loc|3380360 3381596 -1 # ID=1_2990|Type=CDS|transl_table=11; Unknown|aroA2|3-phosphoshikimate 1-carboxyvinyltransferase|loc|5721614 5722931 -1 # ID=1_5094|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase -TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [Unknown|zwf1|Glucose-6-phosphate 1-dehydrogenase|loc|2374646 2376185 1 # ID=1_2104|Type=CDS|transl_table=11; Unknown|zwf2|Glucose-6-phosphate 1-dehydrogenase|loc|7342162 7343752 -1 # ID=1_6496|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase -TIGR00534 2.0 1.0 0.424 0.2526 0.3 [Unknown|-|Glucose-6-phosphate dehydrogenase subunit|loc|2376181 2377246 1 # ID=1_2105|Type=CDS|transl_table=11; Unknown|-|Glucose-6-phosphate dehydrogenase subunit|loc|7341239 7342166 -1 # ID=1_6495|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA -TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [Unknown|uppP1|Undecaprenyl-diphosphatase|loc|899428 900265 -1 # ID=1_800|Type=CDS|transl_table=11; Unknown|uppP2|Undecaprenyl-diphosphatase|loc|1657447 1658323 1 # ID=1_1454|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP -TIGR00759 2.0 1.0 0.4291 0.6895 0.8474 [Unknown|aceE1|Pyruvate dehydrogenase E1 component|loc|2686292 2688995 1 # ID=1_2377|Type=CDS|transl_table=11; Unknown|aceE2|Pyruvate dehydrogenase E1 component|loc|2931566 2934314 1 # ID=1_2613|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type -TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [Unknown|-|Adenine deaminase|loc|754475 755555 -1 # ID=1_664|Type=CDS|transl_table=11; Unknown|-|Adenine deaminase|loc|3107499 3108504 -1 # ID=1_2763|Type=CDS|transl_table=11; Unknown|-|Aminodeoxyfutalosine deaminase|loc|5163492 5164533 -1 # ID=1_4589|Type=CDS|transl_table=11; Unknown|-|Adenine deaminase|loc|5416442 5417606 1 # ID=1_4825|Type=CDS|transl_table=11; Unknown|add2|Aminodeoxyfutalosine deaminase|loc|6213032 6214100 -1 # ID=1_5544|Type=CDS|transl_table=11] aden_deam: adenosine deaminase -TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [Unknown|rsgA1|Putative ribosome biogenesis GTPase RsgA|loc|5720594 5721605 -1 # ID=1_5093|Type=CDS|transl_table=11; Unknown|rsgA2|Putative ribosome biogenesis GTPase RsgA|loc|6866049 6867126 1 # ID=1_6079|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A -TIGR01900 2.0 1.0 0.1704 0.8526 0.8789 [Unknown|dapE3|Succinyl-diaminopimelate desuccinylase|loc|3538147 3539203 -1 # ID=1_3134|Type=CDS|transl_table=11; Unknown|dapE4|Succinyl-diaminopimelate desuccinylase|loc|5627312 5628392 1 # ID=1_5013|Type=CDS|transl_table=11] dapE-gram_pos: succinyl-diaminopimelate desuccinylase -TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [Unknown|pepN5|Aminopeptidase N|loc|2487053 2489564 -1 # ID=1_2199|Type=CDS|transl_table=11; Unknown|pepN6|Aminopeptidase N|loc|3242275 3244915 1 # ID=1_2873|Type=CDS|transl_table=11; Unknown|pepN7|Aminopeptidase N|loc|3260851 3263425 -1 # ID=1_2887|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N -TIGR01311 3.0 1.0 0.7691 0.6474 0.8684 [Unknown|glpK1|Glycerol kinase|loc|659285 660800 1 # ID=1_575|Type=CDS|transl_table=11; Unknown|glpK2|Glycerol kinase|loc|1745300 1746830 1 # ID=1_1537|Type=CDS|transl_table=11; Unknown|glpK3|Glycerol kinase|loc|2063707 2065246 1 # ID=1_1817|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase -TIGR01751 2.0 1.0 0.7221 0.2158 0.3 [Unknown|ccrA2|Crotonyl-CoA reductase|loc|1109375 1110752 -1 # ID=1_981|Type=CDS|transl_table=11; Unknown|ccr2|Crotonyl-CoA reductase|loc|7200045 7201389 -1 # ID=1_6368|Type=CDS|transl_table=11] crot-CoA-red: crotonyl-CoA carboxylase/reductase -TIGR00273 2.0 1.0 0.3612 0.3842 0.3947 [Unknown|lutB1|Lactate utilization protein B|loc|2812043 2813489 1 # ID=1_2490|Type=CDS|transl_table=11; Unknown|lutB2|Lactate utilization protein B|loc|7936866 7938345 -1 # ID=1_6911|Type=CDS|transl_table=11] TIGR00273: iron-sulfur cluster-binding protein -TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [Unknown|thrS1|Threonine--tRNA ligase|loc|1908701 1910678 -1 # ID=1_1675|Type=CDS|transl_table=11; Unknown|thrS2|Threonine--tRNA ligase 1|loc|4650160 4651411 1 # ID=1_4109|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase -TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [Unknown|tsaC|Threonylcarbamoyl-AMP synthase|loc|636288 636909 1 # ID=1_552|Type=CDS|transl_table=11; Unknown|ywlC|Threonylcarbamoyl-AMP synthase|loc|5859706 5860354 1 # ID=1_5219|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family -TIGR02227 4.0 1.0 1.1572 0.5579 0.9789 [Unknown|lepB1|Signal peptidase I|loc|6169325 6170027 1 # ID=1_5499|Type=CDS|transl_table=11; Unknown|lepB2|Signal peptidase I|loc|6170019 6171111 1 # ID=1_5500|Type=CDS|transl_table=11; Unknown|lepB3|Signal peptidase I|loc|6171094 6171985 1 # ID=1_5501|Type=CDS|transl_table=11; Unknown|lepB4|Signal peptidase I|loc|6172048 6172831 1 # ID=1_5502|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I -TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [Unknown|trpS1|Tryptophan--tRNA ligase|loc|4970808 4971834 -1 # ID=1_4401|Type=CDS|transl_table=11; Unknown|trpS2|Tryptophan--tRNA ligase|loc|5353858 5354875 1 # ID=1_4763|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase -TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [Unknown|cobT|Nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase|loc|1929960 1934466 -1 # ID=1_1697|Type=CDS|transl_table=11; Unknown|cobU2|Nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase|loc|2674418 2675525 1 # ID=1_2368|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase -SHMT 4.0 1.0 0.8787 0.5842 0.9474 [Unknown|glyA1|Serine hydroxymethyltransferase|loc|4539708 4541067 1 # ID=1_4013|Type=CDS|transl_table=11; Unknown|glyA2|Serine hydroxymethyltransferase|loc|5352281 5353736 1 # ID=1_4762|Type=CDS|transl_table=11; Unknown|glyA3|Serine hydroxymethyltransferase|loc|5861127 5862366 1 # ID=1_5221|Type=CDS|transl_table=11; Unknown|glyA4|Serine hydroxymethyltransferase 2|loc|5994150 5995419 -1 # ID=1_5342|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase -TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [Unknown|glmS2|Glutamine--fructose-6-phosphate aminotransferase [isomerizing]|loc|3422349 3424167 1 # ID=1_3023|Type=CDS|transl_table=11; Unknown|glmS3|Glutamine--fructose-6-phosphate aminotransferase [isomerizing]|loc|5228530 5230378 1 # ID=1_4659|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) -GrpE 2.0 1.0 0.521 0.8368 1.0 [Unknown|-|heat shock protein GrpE|loc|4733241 4733904 1 # ID=1_4186|Type=CDS|transl_table=11; Unknown|-|heat shock protein GrpE|loc|6692583 6693033 -1 # ID=1_5928|Type=CDS|transl_table=11] PF01025.15: GrpE -Cpn10 2.0 1.0 0.519 0.6211 1.0 [Unknown|groS1|10 kDa chaperonin 1|loc|3499662 3500022 1 # ID=1_3097|Type=CDS|transl_table=11; Unknown|groS2|10 kDa chaperonin|loc|5251830 5252139 1 # ID=1_4681|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit -Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [Unknown|rpsN|30S ribosomal protein S14|loc|4887204 4887510 -1 # ID=1_4316|Type=CDS|transl_table=11; Unknown|rpsZ|30S ribosomal protein S14 type Z|loc|5207170 5207356 1 # ID=1_4633|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e -TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [Unknown|rpmE1|50S ribosomal protein L31 type B|loc|1410039 1410303 1 # ID=1_1178|Type=CDS|transl_table=11; Unknown|rpmE2|50S ribosomal protein L31 type B|loc|4887979 4888243 1 # ID=1_4319|Type=CDS|transl_table=11; Unknown|rpmE3|50S ribosomal protein L31|loc|5857375 5857600 1 # ID=1_5216|Type=CDS|transl_table=11] L31: ribosomal protein bL31 -TIGR00674 3.0 1.0 0.6145 0.7737 0.9684 [Unknown|dapA2|4-hydroxy-tetrahydrodipicolinate synthase|loc|2344992 2345892 1 # ID=1_2074|Type=CDS|transl_table=11; Unknown|dapA3|4-hydroxy-tetrahydrodipicolinate synthase|loc|4553023 4553914 -1 # ID=1_4024|Type=CDS|transl_table=11; Unknown|dapA4|4-hydroxy-tetrahydrodipicolinate synthase|loc|6293229 6294129 1 # ID=1_5605|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase -TIGR02350 2.0 1.0 0.5448 0.8579 1.0 [Unknown|dnaK1|Chaperone protein DnaK|loc|4731391 4733242 1 # ID=1_4185|Type=CDS|transl_table=11; Unknown|dnaK2|Chaperone protein DnaK|loc|6693035 6694892 -1 # ID=1_5929|Type=CDS|transl_table=11] prok_dnaK: chaperone protein DnaK -TIGR02891 5.0 1.0 0.9994 0.4474 0.8474 [Unknown|ctaD1|Cytochrome c oxidase subunit 1|loc|2175587 2177255 1 # ID=1_1922|Type=CDS|transl_table=11; Unknown|ctaD2|Cytochrome c oxidase subunit 1|loc|2652514 2654248 -1 # ID=1_2349|Type=CDS|transl_table=11; Unknown|ctaD3|Cytochrome c oxidase subunit 1|loc|2972347 2974072 -1 # ID=1_2650|Type=CDS|transl_table=11; Unknown|ctaD4|Cytochrome c oxidase subunit 1|loc|8066075 8067758 -1 # ID=1_6999|Type=CDS|transl_table=11; Unknown|ctaD5|Cytochrome c oxidase subunit 1|loc|8085187 8086780 -1 # ID=1_7016|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I -TIGR03690 2.0 1.0 0.2534 0.5684 0.6105 [Unknown|prcB1|Proteasome subunit beta precursor|loc|2041805 2042582 -1 # ID=1_1800|Type=CDS|transl_table=11; Unknown|prcB2|Proteasome subunit beta precursor|loc|8134820 8135675 1 # ID=1_7058|Type=CDS|transl_table=11] 20S_bact_beta: proteasome, beta subunit -TIGR03451 2.0 1.0 0.5052 0.5789 0.6895 [Unknown|-|S-(hydroxymethyl)mycothiol dehydrogenase|loc|1759277 1760363 1 # ID=1_1547|Type=CDS|transl_table=11; Unknown|-|S-(hydroxymethyl)mycothiol dehydrogenase|loc|8090557 8091646 1 # ID=1_7021|Type=CDS|transl_table=11] mycoS_dep_FDH: S-(hydroxymethyl)mycothiol dehydrogenase -TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [Unknown|def1|Peptide deformylase|loc|1539367 1539967 -1 # ID=1_1343|Type=CDS|transl_table=11; Unknown|def2|Peptide deformylase|loc|5087116 5087740 -1 # ID=1_4518|Type=CDS|transl_table=11; Unknown|def3|Peptide deformylase|loc|5734871 5735522 1 # ID=1_5105|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase -TIGR01023 2.0 1.0 0.6482 0.5737 0.9895 [Unknown|rpmG1|50S ribosomal protein L33 2|loc|4887807 4887972 1 # ID=1_4318|Type=CDS|transl_table=11; Unknown|rpmG2|50S ribosomal protein L33 2|loc|5157191 5157356 1 # ID=1_4581|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 -TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [Unknown|efeN|putative deferrochelatase/peroxidase EfeN precursor|loc|2795009 2796266 1 # ID=1_2474|Type=CDS|transl_table=11; Unknown|-|Dye-decolorizing peroxidase precursor|loc|4387490 4388777 1 # ID=1_3889|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme -TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [Unknown|-|putative kinase inhibitor protein|loc|931745 932255 1 # ID=1_839|Type=CDS|transl_table=11; Unknown|-|putative kinase inhibitor|loc|2224435 2224975 1 # ID=1_1963|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family -TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [Unknown|tuf1|Elongation factor Tu|loc|1653344 1654514 -1 # ID=1_1449|Type=CDS|transl_table=11; Unknown|tuf2|Elongation factor Tu|loc|5185979 5187173 1 # ID=1_4606|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu -TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [Unknown|fusA1|Elongation factor G|loc|5183696 5185823 1 # ID=1_4605|Type=CDS|transl_table=11; Unknown|fusA2|Elongation factor G|loc|7308115 7310167 1 # ID=1_6466|Type=CDS|transl_table=11] EF-G: translation elongation factor G -TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [Unknown|pyk1|Pyruvate kinase|loc|2479597 2481034 -1 # ID=1_2194|Type=CDS|transl_table=11; Unknown|pyk2|Pyruvate kinase|loc|5919317 5920742 -1 # ID=1_5280|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase -TIGR01534 4.0 1.0 0.6895 0.6737 1.0 [Unknown|gap1|Glyceraldehyde-3-phosphate dehydrogenase 1|loc|435560 436559 1 # ID=1_372|Type=CDS|transl_table=11; Unknown|gap2|Glyceraldehyde-3-phosphate dehydrogenase|loc|612650 614096 1 # ID=1_529|Type=CDS|transl_table=11; Unknown|gap3|Glyceraldehyde-3-phosphate dehydrogenase 2|loc|2394674 2395682 -1 # ID=1_2121|Type=CDS|transl_table=11; Unknown|gap4|Glyceraldehyde-3-phosphate dehydrogenase 2|loc|7122022 7123036 1 # ID=1_6299|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/example_data/knownhits.tsv b/example_data/knownhits.tsv deleted file mode 100644 index bab4341..0000000 --- a/example_data/knownhits.tsv +++ /dev/null @@ -1,41 +0,0 @@ -#Model Description Sequence id evalue bitscore Sequence description -RF0002 AAC3 2095 4.6e-56 188.6 lcl|2095|scaffold_1|source|scaffold_1|loc|2364003_2364819_1 -RF0007 ABC_efflux 2995 7.5e-171 568.0 lcl|2995|scaffold_1|source|scaffold_1|loc|3386420_3390140_-1 -RF0007 ABC_efflux 2683 2.6e-97 325.3 lcl|2683|scaffold_1|source|scaffold_1|loc|3018957_3020886_1 -RF0007 ABC_efflux 6764 4.2e-90 301.6 lcl|6764|scaffold_1|source|scaffold_1|loc|7715152_7717075_-1 -RF0007 ABC_efflux 1730 3.3e-89 298.6 lcl|1730|scaffold_1|source|scaffold_1|loc|1968904_1970719_1 -RF0007 ABC_efflux 1169 2.3e-80 269.4 lcl|1169|scaffold_1|source|scaffold_1|loc|1396252_1398055_-1 -RF0007 ABC_efflux 6690 2.6e-79 266.0 lcl|6690|scaffold_1|source|scaffold_1|loc|7561437_7563333_1 -RF0053 ClassA 7133 6.8e-96 319.4 lcl|7133|scaffold_1|source|scaffold_1|loc|8228981_8229911_1 -RF0054 ClassB 1106 1.1e-24 85.9 lcl|1106|scaffold_1|source|scaffold_1|loc|1332261_1332990_1 -PF00044.19 Gp_dh_N 2121 2.1e-61 205.3 lcl|2121|scaffold_1|source|scaffold_1|loc|2394674_2395682_-1 -PF00044.19 Gp_dh_N 372 1.9e-53 179.5 lcl|372|scaffold_1|source|scaffold_1|loc|435560_436559_1 -PF00044.19 Gp_dh_N 6299 1e-51 173.9 lcl|6299|scaffold_1|source|scaffold_1|loc|7122022_7123036_1 -PF00044.19 Gp_dh_N 529 3.1e-39 133.3 lcl|529|scaffold_1|source|scaffold_1|loc|612650_614096_1 -PF00183.13 HSP90 7231 3.2e-119 397.7 lcl|7231|scaffold_1|source|scaffold_1|loc|8332332_8334360_1 -PF00185.19 OTCace 5850 6.6e-48 161.6 lcl|5850|scaffold_1|source|scaffold_1|loc|6600464_6601487_1 -PF00185.19 OTCace 6291 5e-46 155.5 lcl|6291|scaffold_1|source|scaffold_1|loc|7114838_7115840_1 -PF00185.19 OTCace 1633 3.9e-37 126.6 lcl|1633|scaffold_1|source|scaffold_1|loc|1861580_1862558_-1 -PF00204.20 DNA_gyraseB 3964 7.8e-61 203.3 lcl|3964|scaffold_1|source|scaffold_1|loc|4472253_4474323_1 -PF00204.20 DNA_gyraseB 5696 1e-51 173.6 lcl|5696|scaffold_1|source|scaffold_1|loc|6412139_6414263_1 -PF00227.21 Proteasome 1800 2.4e-38 130.3 lcl|1800|scaffold_1|source|scaffold_1|loc|2041805_2042582_-1 -PF00227.21 Proteasome 7058 1e-36 125.1 lcl|7058|scaffold_1|source|scaffold_1|loc|8134820_8135675_1 -PF00227.21 Proteasome 1799 7.6e-27 92.8 lcl|1799|scaffold_1|source|scaffold_1|loc|2040988_2041744_-1 -PF00364.17 Biotin_lipoyl 2375 1.1e-46 155.4 lcl|2375|scaffold_1|source|scaffold_1|loc|2683419_2685207_1 -PF00364.17 Biotin_lipoyl 4071 1.1e-22 78.5 lcl|4071|scaffold_1|source|scaffold_1|loc|4605059_4606457_1 -PF00364.17 Biotin_lipoyl 3010 3.1e-19 67.4 lcl|3010|scaffold_1|source|scaffold_1|loc|3406308_3408225_1 -PF00364.17 Biotin_lipoyl 4060 2.6e-18 64.5 lcl|4060|scaffold_1|source|scaffold_1|loc|4591182_4592532_1 -PF00364.17 Biotin_lipoyl 4843 3.4e-17 60.9 lcl|4843|scaffold_1|source|scaffold_1|loc|5436153_5437926_-1 -PF00364.17 Biotin_lipoyl 3531 3.9e-16 57.5 lcl|3531|scaffold_1|source|scaffold_1|loc|3999303_4001145_-1 -PF00364.17 Biotin_lipoyl 7094 1.4e-14 52.5 lcl|7094|scaffold_1|source|scaffold_1|loc|8179287_8182713_1 -PF00521.15 DNA_topoisoIV 3965 4.3e-150 499.3 lcl|3965|scaffold_1|source|scaffold_1|loc|4474365_4476960_1 -PF00521.15 DNA_topoisoIV 5712 1.8e-148 493.9 lcl|5712|scaffold_1|source|scaffold_1|loc|6430333_6432793_-1 -PF01039.17 Carboxyl_trans 4847 4.6e-204 677.3 lcl|4847|scaffold_1|source|scaffold_1|loc|5439951_5441547_-1 -PF01039.17 Carboxyl_trans 5426 6.3e-202 670.3 lcl|5426|scaffold_1|source|scaffold_1|loc|6086740_6088336_1 -PF01039.17 Carboxyl_trans 5896 4.8e-191 634.4 lcl|5896|scaffold_1|source|scaffold_1|loc|6653508_6655083_1 -PF01039.17 Carboxyl_trans 3009 7.3e-164 544.7 lcl|3009|scaffold_1|source|scaffold_1|loc|3404680_3406297_1 -PF01039.17 Carboxyl_trans 3532 2.1e-139 464.1 lcl|3532|scaffold_1|source|scaffold_1|loc|4001153_4002752_-1 -PF01039.17 Carboxyl_trans 2664 1.6e-27 95.1 lcl|2664|scaffold_1|source|scaffold_1|loc|2989365_2990754_1 -PF13599.1 Pentapeptide_4 3624 9.4e-20 69.2 lcl|3624|scaffold_1|source|scaffold_1|loc|4096654_4097275_-1 -TIGR02013 TIGR02013 4599 0 1805.2 lcl|4599|scaffold_1|source|scaffold_1|loc|5173119_5176605_1 -TIGR00663 TIGR00663 3960 5.8e-89 297.3 lcl|3960|scaffold_1|source|scaffold_1|loc|4467911_4469042_1 diff --git a/example_data/prism.csv b/example_data/prism.csv deleted file mode 100755 index a35433b..0000000 --- a/example_data/prism.csv +++ /dev/null @@ -1,21 +0,0 @@ -"Cluster","Start","Stop","Type" -1,260780,289035,"pks__nrps" -2,740318,741556,"melanin" -3,1112782,1275331,"pks__nrps" -4,1633484,1647940,"pks" -5,2303100,2303505,"ectoine" -6,2701203,2707506,"pentangular_polyphenol" -7,2935789,2947755,"pks" -8,3323049,3324394,"melanin" -9,3415877,3417647,"nis_synthase" -10,4502785,4535739,"pks__nrps" -11,6473614,6480794,"nrps" -12,6498082,6525437,"lasso_peptide__nrps" -13,6623240,6677166,"pks__nrps__angucycline" -14,6982007,6996654,"butyrolactone" -15,7292045,7303149,"class_i_lantipeptide__lasso_peptide" -16,7470952,7483810,"lasso_peptide" -17,7575697,7648356,"pks__nrps" -18,7705774,7792970,"pks" -19,8020158,8058955,"nrps" -20,8414751,8433666,"pks" diff --git a/example_data/prism.json.REMOVED.git-id b/example_data/prism.json.REMOVED.git-id deleted file mode 100644 index 754c304..0000000 --- a/example_data/prism.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -0f4d7d8aedaa814360cc432b23d42c9858ccf50d \ No newline at end of file diff --git a/example_data/sco_antismash.csv b/example_data/sco_antismash.csv new file mode 100644 index 0000000..4ade4cd --- /dev/null +++ b/example_data/sco_antismash.csv @@ -0,0 +1,28 @@ +"Cluster","Start","Stop","Type" +1,86693,139654,"hgle-ks__t1pks" +2,166700,191657,"terpene" +3,246867,270397,"lanthipeptide-class-i" +4,494259,544087,"nrps" +5,791700,799942,"ripp-like" +6,1258217,1297040,"t3pks" +7,1995499,2005898,"ectoine" +8,2939305,2949875,"melanin" +9,3034430,3045603,"siderophore" +10,3524827,3603907,"nrps" +11,5496473,5567376,"t2pks" +12,5671274,5691836,"terpene" +13,5751944,5824487,"t2pks" +14,6336090,6346443,"siderophore" +15,6429574,6475291,"nrps-like__t1pks__prodigiosin" +16,6632342,6643659,"ripp-like" +17,6656903,6676224,"terpene" +18,6842314,6855522,"siderophore" +19,6881334,6951537,"t1pks__butyrolactone" +20,7088263,7142447,"thioamide-nrp__nrps" +21,7409741,7432456,"lanthipeptide-class-iii" +22,7506307,7532117,"terpene" +23,7570411,7618555,"pks-like__t1pks" +24,7682906,7709360,"lanthipeptide-class-i" +25,7973469,8047403,"other__t3pks" +26,8269636,8290764,"indole" +27,8475101,8548352,"t3pks__nrps__terpene" diff --git a/example_data/sco_antismash.json.REMOVED.git-id b/example_data/sco_antismash.json.REMOVED.git-id new file mode 100644 index 0000000..710b80c --- /dev/null +++ b/example_data/sco_antismash.json.REMOVED.git-id @@ -0,0 +1 @@ +ed38ed0a829ca3d7134cb1ac60d1c93a8d4a5f62 \ No newline at end of file diff --git a/example_data/sco_deep.tsv b/example_data/sco_deep.tsv new file mode 100644 index 0000000..37bcee4 --- /dev/null +++ b/example_data/sco_deep.tsv @@ -0,0 +1,173 @@ +sequence_id detector detector_version detector_label bgc_candidate_id nucl_start nucl_end nucl_length num_proteins num_domains num_bio_domains deepbgc_score product_activity antibacterial cytotoxic inhibitor antifungal product_class Alkaloid NRP Other Polyketide RiPP Saccharide Terpene protein_ids bio_pfam_ids pfam_ids +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1143-9307.1 1143 9307 8164 4 8 0 0.55675 antibacterial 0.85 0.09 0.16 0.28 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_2;NC_003888.3_NC_003888.3_3;NC_003888.3_NC_003888.3_4;NC_003888.3_NC_003888.3_5 PF00270;PF04851;PF03457;PF06527;PF03457;PF13565;PF00665;PF09299 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_10406-33357.1 10406 33357 22951 24 27 1 0.69541 antibacterial 0.74 0.14 0.06 0.10 0.01 0.04 0.19 0.08 0.40 0.21 0.07 NC_003888.3_NC_003888.3_7;NC_003888.3_NC_003888.3_8;NC_003888.3_NC_003888.3_9;NC_003888.3_NC_003888.3_10;NC_003888.3_NC_003888.3_11;NC_003888.3_NC_003888.3_12;NC_003888.3_NC_003888.3_13;NC_003888.3_NC_003888.3_14;NC_003888.3_NC_003888.3_15;NC_003888.3_NC_003888.3_16;NC_003888.3_NC_003888.3_17;NC_003888.3_NC_003888.3_18;NC_003888.3_NC_003888.3_19;NC_003888.3_NC_003888.3_20;NC_003888.3_NC_003888.3_21;NC_003888.3_NC_003888.3_22;NC_003888.3_NC_003888.3_23;NC_003888.3_NC_003888.3_24;NC_003888.3_NC_003888.3_25;NC_003888.3_NC_003888.3_26;NC_003888.3_NC_003888.3_27;NC_003888.3_NC_003888.3_28;NC_003888.3_NC_003888.3_29;NC_003888.3_NC_003888.3_30 PF04101 PF06527;PF06965;PF00999;PF01590;PF13492;PF03861;PF14690;PF01610;PF01695;PF01695;PF13555;PF13191;PF13304;PF12079;PF00932;PF03984;PF13088;PF03457;PF12680;PF08281;PF04545;PF04542;PF01734;PF13579;PF13439;PF00201;PF04101 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_37613-39812.1 37613 39812 2199 3 6 0 0.54026 antibacterial 0.73 0.15 0.13 0.28 0.00 0.18 0.27 0.31 0.15 0.01 0.10 NC_003888.3_NC_003888.3_36;NC_003888.3_NC_003888.3_37;NC_003888.3_NC_003888.3_38 PF13463;PF12802;PF01047;PF01978;PF12697;PF03861 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_45266-121371.1 45266 121371 76105 55 118 11 0.83590 0.49 0.32 0.22 0.19 Polyketide 0.05 0.14 0.15 0.67 0.08 0.02 0.05 NC_003888.3_NC_003888.3_46;NC_003888.3_NC_003888.3_47;NC_003888.3_NC_003888.3_48;NC_003888.3_NC_003888.3_49;NC_003888.3_NC_003888.3_50;NC_003888.3_NC_003888.3_51;NC_003888.3_NC_003888.3_52;NC_003888.3_NC_003888.3_53;NC_003888.3_NC_003888.3_54;NC_003888.3_NC_003888.3_55;NC_003888.3_NC_003888.3_56;NC_003888.3_NC_003888.3_57;NC_003888.3_NC_003888.3_58;NC_003888.3_NC_003888.3_59;NC_003888.3_NC_003888.3_60;NC_003888.3_NC_003888.3_61;NC_003888.3_NC_003888.3_62;NC_003888.3_NC_003888.3_63;NC_003888.3_NC_003888.3_64;NC_003888.3_NC_003888.3_65;NC_003888.3_NC_003888.3_66;NC_003888.3_NC_003888.3_67;NC_003888.3_NC_003888.3_68;NC_003888.3_NC_003888.3_69;NC_003888.3_NC_003888.3_70;NC_003888.3_NC_003888.3_71;NC_003888.3_NC_003888.3_72;NC_003888.3_NC_003888.3_73;NC_003888.3_NC_003888.3_74;NC_003888.3_NC_003888.3_75;NC_003888.3_NC_003888.3_76;NC_003888.3_NC_003888.3_77;NC_003888.3_NC_003888.3_78;NC_003888.3_NC_003888.3_79;NC_003888.3_NC_003888.3_80;NC_003888.3_NC_003888.3_81;NC_003888.3_NC_003888.3_82;NC_003888.3_NC_003888.3_83;NC_003888.3_NC_003888.3_84;NC_003888.3_NC_003888.3_85;NC_003888.3_NC_003888.3_86;NC_003888.3_NC_003888.3_87;NC_003888.3_NC_003888.3_88;NC_003888.3_NC_003888.3_89;NC_003888.3_NC_003888.3_90;NC_003888.3_NC_003888.3_91;NC_003888.3_NC_003888.3_92;NC_003888.3_NC_003888.3_93;NC_003888.3_NC_003888.3_94;NC_003888.3_NC_003888.3_95;NC_003888.3_NC_003888.3_96;NC_003888.3_NC_003888.3_97;NC_003888.3_NC_003888.3_98;NC_003888.3_NC_003888.3_99;NC_003888.3_NC_003888.3_100 PF01266;PF02801;PF00106;PF08240;PF08659;PF00698;PF00109;PF01243;PF07993;PF00107;PF01370 PF08240;PF00208;PF00107;PF13602;PF13602;PF06824;PF13377;PF00532;PF13407;PF00356;PF00480;PF01547;PF13416;PF00528;PF00528;PF03663;PF01074;PF07748;PF05593;PF12802;PF13340;PF06779;PF07690;PF00083;PF12832;PF08974;PF13586;PF01609;PF13340;PF01609;PF13586;PF01068;PF03747;PF12706;PF13483;PF00753;PF13354;PF00144;PF00126;PF03466;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF13683;PF00665;PF13276;PF13565;PF01527;PF13011;PF13551;PF13518;PF13384;PF13586;PF01609;PF13340;PF13340;PF10946;PF00042;PF00970;PF00175;PF01243;PF00457;PF13340;PF13560;PF00106;PF01370;PF08659;PF13561;PF13340;PF00440;PF00106;PF01370;PF13561;PF13460;PF04616;PF14028;PF12698;PF00005;PF13191;PF13304;PF13476;PF00743;PF07992;PF13738;PF13450;PF01266;PF13434;PF06974;PF03007;PF01370;PF07993;PF16363;PF01073;PF03060;PF01645;PF00109;PF02801;PF16197;PF00698;PF00550;PF08659;PF00106;PF13561;PF01073;PF14765;PF00109;PF02801;PF16197;PF00698;PF07977;PF00753;PF12706 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_122742-128290.1 122742 128290 5548 4 8 1 0.53313 antibacterial 0.58 0.05 0.07 0.34 0.00 0.38 0.29 0.15 0.12 0.01 0.06 NC_003888.3_NC_003888.3_102;NC_003888.3_NC_003888.3_103;NC_003888.3_NC_003888.3_104;NC_003888.3_NC_003888.3_105 PF00561 PF13191;PF13401;PF00196;PF13384;PF12146;PF00561;PF12697;PF12695 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_170910-191657.1 170910 191657 20747 19 75 11 0.66526 cytotoxic 0.23 0.63 0.12 0.08 Terpene 0.09 0.02 0.05 0.11 0.01 0.09 0.71 NC_003888.3_NC_003888.3_149;NC_003888.3_NC_003888.3_150;NC_003888.3_NC_003888.3_151;NC_003888.3_NC_003888.3_152;NC_003888.3_NC_003888.3_153;NC_003888.3_NC_003888.3_154;NC_003888.3_NC_003888.3_155;NC_003888.3_NC_003888.3_156;NC_003888.3_NC_003888.3_157;NC_003888.3_NC_003888.3_158;NC_003888.3_NC_003888.3_159;NC_003888.3_NC_003888.3_160;NC_003888.3_NC_003888.3_161;NC_003888.3_NC_003888.3_162;NC_003888.3_NC_003888.3_163;NC_003888.3_NC_003888.3_164;NC_003888.3_NC_003888.3_165;NC_003888.3_NC_003888.3_166;NC_003888.3_NC_003888.3_167 PF01266;PF08242;PF00494;PF08240;PF01494;PF08241;PF00348;PF02737;PF00107;PF00355;PF01593 PF11066;PF03441;PF04244;PF00348;PF13738;PF01266;PF01946;PF03486;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF01593;PF01266;PF13450;PF12831;PF00890;PF03486;PF00070;PF01946;PF07992;PF01262;PF01134;PF02737;PF01494;PF01209;PF13489;PF13847;PF13578;PF08241;PF08242;PF13649;PF05175;PF05834;PF07992;PF01266;PF00890;PF13450;PF01593;PF01266;PF13450;PF01946;PF12831;PF03486;PF00890;PF05834;PF07992;PF01494;PF01134;PF02310;PF02607;PF13411;PF12728;PF13518;PF00376;PF13384;PF01527;PF04542;PF08281;PF04545;PF13412;PF14344;PF10099;PF12900;PF00582;PF13602;PF00107;PF01262;PF08240;PF00582;PF07681 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_194759-195461.1 194759 195461 702 1 6 0 0.50176 antibacterial 0.81 0.07 0.10 0.20 0.00 0.06 0.15 0.31 0.35 0.01 0.17 NC_003888.3_NC_003888.3_170 PF00196;PF08281;PF04545;PF13412;PF13936;PF00072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_211747-220764.1 211747 220764 9017 10 16 4 0.74452 antibacterial 0.67 0.13 0.25 0.24 Polyketide 0.02 0.05 0.12 0.61 0.05 0.04 0.16 NC_003888.3_NC_003888.3_183;NC_003888.3_NC_003888.3_184;NC_003888.3_NC_003888.3_185;NC_003888.3_NC_003888.3_186;NC_003888.3_NC_003888.3_187;NC_003888.3_NC_003888.3_188;NC_003888.3_NC_003888.3_189;NC_003888.3_NC_003888.3_190;NC_003888.3_NC_003888.3_191;NC_003888.3_NC_003888.3_192 PF00583;PF00106;PF01370;PF08659 PF02613;PF02665;PF12680;PF14534;PF07366;PF13586;PF13302;PF00583;PF14027;PF02909;PF08659;PF01370;PF00106;PF13561;PF13460;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_245985-247869.1 245985 247869 1884 2 4 2 0.52321 antibacterial 0.82 0.07 0.18 0.12 Terpene 0.01 0.03 0.01 0.06 0.38 0.00 0.51 NC_003888.3_NC_003888.3_217;NC_003888.3_NC_003888.3_218 PF00106;PF08659 PF00106;PF08659;PF13561;PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_248676-249702.1 248676 249702 1026 1 3 2 0.53282 inhibitor 0.29 0.05 0.66 0.06 Polyketide 0.00 0.20 0.05 0.80 0.01 0.00 0.01 NC_003888.3_NC_003888.3_220 PF00107;PF08240 PF08240;PF00107;PF13602 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_251763-262319.1 251763 262319 10556 9 20 6 0.71258 antibacterial 0.78 0.11 0.08 0.15 RiPP 0.01 0.15 0.12 0.17 0.53 0.04 0.01 NC_003888.3_NC_003888.3_224;NC_003888.3_NC_003888.3_225;NC_003888.3_NC_003888.3_226;NC_003888.3_NC_003888.3_227;NC_003888.3_NC_003888.3_228;NC_003888.3_NC_003888.3_229;NC_003888.3_NC_003888.3_230;NC_003888.3_NC_003888.3_231;NC_003888.3_NC_003888.3_232 PF00903;PF00975;PF01408;PF05147;PF00561;PF04738 PF01408;PF01978;PF12802;PF01047;PF13412;PF09339;PF00392;PF13545;PF00903;PF12833;PF00561;PF00975;PF12697;PF12146;PF12695;PF07819;PF04738;PF14028;PF05147;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_297514-309131.1 297514 309131 11617 9 13 2 0.61725 antibacterial 0.60 0.06 0.04 0.18 0.00 0.35 0.24 0.32 0.09 0.01 0.02 NC_003888.3_NC_003888.3_263;NC_003888.3_NC_003888.3_264;NC_003888.3_NC_003888.3_265;NC_003888.3_NC_003888.3_266;NC_003888.3_NC_003888.3_267;NC_003888.3_NC_003888.3_268;NC_003888.3_NC_003888.3_269;NC_003888.3_NC_003888.3_270;NC_003888.3_NC_003888.3_271 PF00501;PF00903 PF00440;PF12681;PF00903;PF08937;PF13676;PF12697;PF13560;PF01381;PF00144;PF14278;PF00440;PF00501;PF13193 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_320109-322255.1 320109 322255 2146 2 5 1 0.56163 antibacterial 0.54 0.10 0.38 0.14 Polyketide 0.04 0.14 0.12 0.57 0.12 0.00 0.08 NC_003888.3_NC_003888.3_279;NC_003888.3_NC_003888.3_280 PF00107 PF00107;PF13602;PF00135;PF07859;PF00326 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_329437-331365.1 329437 331365 1928 3 6 0 0.55903 antibacterial 0.75 0.05 0.15 0.31 0.00 0.13 0.08 0.31 0.20 0.03 0.30 NC_003888.3_NC_003888.3_286;NC_003888.3_NC_003888.3_287;NC_003888.3_NC_003888.3_288 PF13340;PF01609;PF13359;PF13612;PF13586;PF00144 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_332310-341318.1 332310 341318 9008 7 15 3 0.58710 antibacterial 0.81 0.07 0.15 0.33 Polyketide 0.01 0.03 0.06 0.76 0.02 0.00 0.14 NC_003888.3_NC_003888.3_290;NC_003888.3_NC_003888.3_291;NC_003888.3_NC_003888.3_292;NC_003888.3_NC_003888.3_293;NC_003888.3_NC_003888.3_294;NC_003888.3_NC_003888.3_295;NC_003888.3_NC_003888.3_296 PF00106;PF01370;PF08659 PF00106;PF08659;PF01370;PF13561;PF13460;PF00440;PF13022;PF16859;PF03055;PF10518;PF14200;PF00754;PF03435;PF13460;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_345816-347706.1 345816 347706 1890 1 2 0 0.60335 antibacterial 0.87 0.06 0.17 0.26 0.00 0.08 0.04 0.28 0.19 0.18 0.28 NC_003888.3_NC_003888.3_301 PF13229;PF05048 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_349418-351352.1 349418 351352 1934 2 5 0 0.52089 antibacterial 0.85 0.09 0.17 0.24 0.00 0.09 0.19 0.28 0.20 0.02 0.27 NC_003888.3_NC_003888.3_303;NC_003888.3_NC_003888.3_304 PF01614;PF12802;PF09339;PF07436;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_353791-355686.1 353791 355686 1895 2 2 1 0.52221 antibacterial 0.92 0.10 0.05 0.21 Terpene 0.05 0.09 0.04 0.15 0.06 0.02 0.61 NC_003888.3_NC_003888.3_307;NC_003888.3_NC_003888.3_308 PF00248 PF00248;PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_364558-366795.1 364558 366795 2237 2 4 0 0.52680 antibacterial 0.81 0.07 0.22 0.24 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_318;NC_003888.3_NC_003888.3_319 PF13377;PF00532;PF00356;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_370065-372478.1 370065 372478 2413 3 9 4 0.57281 antibacterial 0.76 0.04 0.19 0.36 Polyketide 0.01 0.03 0.01 0.92 0.02 0.03 0.02 NC_003888.3_NC_003888.3_323;NC_003888.3_NC_003888.3_324;NC_003888.3_NC_003888.3_325 PF02737;PF00106;PF01370;PF08659 PF00106;PF01370;PF08659;PF03435;PF05368;PF02737;PF13561;PF14486;PF06912 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_395938-429403.1 395938 429403 33465 28 74 19 0.94701 0.48 0.29 0.29 0.22 Saccharide 0.02 0.03 0.20 0.06 0.00 0.69 0.01 NC_003888.3_NC_003888.3_339;NC_003888.3_NC_003888.3_340;NC_003888.3_NC_003888.3_341;NC_003888.3_NC_003888.3_342;NC_003888.3_NC_003888.3_343;NC_003888.3_NC_003888.3_344;NC_003888.3_NC_003888.3_345;NC_003888.3_NC_003888.3_346;NC_003888.3_NC_003888.3_347;NC_003888.3_NC_003888.3_348;NC_003888.3_NC_003888.3_349;NC_003888.3_NC_003888.3_350;NC_003888.3_NC_003888.3_351;NC_003888.3_NC_003888.3_352;NC_003888.3_NC_003888.3_353;NC_003888.3_NC_003888.3_354;NC_003888.3_NC_003888.3_355;NC_003888.3_NC_003888.3_356;NC_003888.3_NC_003888.3_357;NC_003888.3_NC_003888.3_358;NC_003888.3_NC_003888.3_359;NC_003888.3_NC_003888.3_360;NC_003888.3_NC_003888.3_361;NC_003888.3_NC_003888.3_362;NC_003888.3_NC_003888.3_363;NC_003888.3_NC_003888.3_364;NC_003888.3_NC_003888.3_365;NC_003888.3_NC_003888.3_366 PF08242;PF02585;PF00107;PF01370;PF00202;PF01408;PF03720;PF03721;PF00535;PF08241;PF00534;PF08421;PF00908;PF04321;PF00984;PF02706;PF00702;PF02397;PF08484 PF13727;PF02397;PF03721;PF01262;PF00984;PF03720;PF13477;PF13579;PF13439;PF00534;PF13692;PF13524;PF02706;PF02706;PF13522;PF13537;PF12481;PF00733;PF03054;PF02826;PF02254;PF00107;PF01408;PF03447;PF16889;PF05426;PF07940;PF13229;PF05048;PF13439;PF13579;PF00534;PF13692;PF13524;PF08421;PF13489;PF08242;PF08241;PF08484;PF12804;PF02585;PF04321;PF01370;PF16363;PF13460;PF01073;PF16254;PF09940;PF04389;PF16221;PF13641;PF00535;PF10111;PF13704;PF04230;PF00908;PF00202;PF01569;PF14378;PF11706;PF07336;PF00702;PF13419;PF13242;PF04672;PF13646;PF00376;PF13411;PF09278;PF13646;PF13489;PF08241;PF08242;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_431961-437224.1 431961 437224 5263 7 11 2 0.66524 inhibitor 0.31 0.09 0.53 0.10 Polyketide 0.00 0.18 0.17 0.69 0.02 0.00 0.01 NC_003888.3_NC_003888.3_371;NC_003888.3_NC_003888.3_372;NC_003888.3_NC_003888.3_373;NC_003888.3_NC_003888.3_374;NC_003888.3_NC_003888.3_375;NC_003888.3_NC_003888.3_376;NC_003888.3_NC_003888.3_377 PF00107;PF08240 PF05719;PF12680;PF14534;PF08281;PF04542;PF06197;PF08894;PF01872;PF08240;PF00107;PF13602 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_438996-446144.1 438996 446144 7148 6 13 1 0.58250 antibacterial 0.63 0.07 0.09 0.28 0.00 0.35 0.23 0.27 0.10 0.01 0.04 NC_003888.3_NC_003888.3_380;NC_003888.3_NC_003888.3_381;NC_003888.3_NC_003888.3_382;NC_003888.3_NC_003888.3_383;NC_003888.3_NC_003888.3_384;NC_003888.3_NC_003888.3_385 PF00561 PF02518;PF13581;PF07730;PF03176;PF00873;PF12349;PF14100;PF03403;PF00561;PF12146;PF12697;PF00440;PF13305 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_466428-467909.1 466428 467909 1481 2 4 0 0.51567 antibacterial-antifungal 0.78 0.02 0.18 0.60 Polyketide 0.02 0.01 0.04 0.90 0.03 0.00 0.01 NC_003888.3_NC_003888.3_405;NC_003888.3_NC_003888.3_406 PF07690;PF00083;PF07690;PF05977 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_490450-492881.1 490450 492881 2431 3 8 2 0.60069 antibacterial 0.52 0.16 0.10 0.38 0.00 0.40 0.16 0.36 0.05 0.02 0.03 NC_003888.3_NC_003888.3_428;NC_003888.3_NC_003888.3_429;NC_003888.3_NC_003888.3_430 PF00975;PF00561 PF02627;PF00561;PF00975;PF12697;PF12146;PF00756;PF12833;PF00165 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_497374-537512.1 497374 537512 40138 29 71 6 0.82418 0.45 0.46 0.14 0.14 NRP 0.03 0.84 0.07 0.03 0.02 0.02 0.01 NC_003888.3_NC_003888.3_435;NC_003888.3_NC_003888.3_436;NC_003888.3_NC_003888.3_437;NC_003888.3_NC_003888.3_438;NC_003888.3_NC_003888.3_439;NC_003888.3_NC_003888.3_440;NC_003888.3_NC_003888.3_441;NC_003888.3_NC_003888.3_442;NC_003888.3_NC_003888.3_443;NC_003888.3_NC_003888.3_444;NC_003888.3_NC_003888.3_445;NC_003888.3_NC_003888.3_446;NC_003888.3_NC_003888.3_447;NC_003888.3_NC_003888.3_448;NC_003888.3_NC_003888.3_449;NC_003888.3_NC_003888.3_450;NC_003888.3_NC_003888.3_451;NC_003888.3_NC_003888.3_452;NC_003888.3_NC_003888.3_453;NC_003888.3_NC_003888.3_454;NC_003888.3_NC_003888.3_455;NC_003888.3_NC_003888.3_456;NC_003888.3_NC_003888.3_457;NC_003888.3_NC_003888.3_458;NC_003888.3_NC_003888.3_459;NC_003888.3_NC_003888.3_460;NC_003888.3_NC_003888.3_461;NC_003888.3_NC_003888.3_462;NC_003888.3_NC_003888.3_463 PF01266;PF00903;PF01494;PF00668;PF00501;PF00561 PF00005;PF13175;PF13555;PF13476;PF13304;PF00903;PF13669;PF12902;PF00459;PF03067;PF00182;PF01494;PF01266;PF01262;PF03486;PF13450;PF07992;PF13738;PF00440;PF01494;PF12802;PF13463;PF09339;PF01047;PF02082;PF08531;PF05592;PF17389;PF17390;PF03621;PF11806;PF00756;PF00561;PF00005;PF00664;PF00550;PF00668;PF13193;PF00501;PF00005;PF00664;PF01497;PF13191;PF13604;PF00005;PF13238;PF13175;PF13401;PF02456;PF13555;PF13304;PF09818;PF13476;PF01032;PF01032;PF07992;PF13434;PF13454;PF00551;PF00148;PF13439;PF02911;PF17227;PF08530;PF02129;PF04123;PF09656;PF12740;PF07224;PF12697;PF03403 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_539122-542131.1 539122 542131 3009 1 4 0 0.59738 antibacterial 0.86 0.06 0.16 0.27 0.00 0.09 0.07 0.32 0.21 0.04 0.31 NC_003888.3_NC_003888.3_465 PF07691;PF16990;PF03422;PF06439 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_543544-544087.1 543544 544087 543 1 1 0 0.54283 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_468 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_548967-549621.1 548967 549621 654 1 2 0 0.52716 antibacterial 0.87 0.07 0.17 0.26 0.00 0.10 0.07 0.33 0.21 0.03 0.31 NC_003888.3_NC_003888.3_474 PF12867;PF11716 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_586986-589546.1 586986 589546 2560 3 5 4 0.65291 antibacterial 0.60 0.07 0.26 0.20 Polyketide 0.00 0.35 0.03 0.77 0.00 0.00 0.17 NC_003888.3_NC_003888.3_506;NC_003888.3_NC_003888.3_507;NC_003888.3_NC_003888.3_508 PF00698;PF02801;PF00108;PF00109 PF00698;PF02801;PF00109;PF00108;PF00550 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_605121-610356.1 605121 610356 5235 5 8 1 0.58996 0.49 0.02 0.40 0.20 Polyketide-Terpene 0.00 0.03 0.00 0.79 0.00 0.02 0.91 NC_003888.3_NC_003888.3_522;NC_003888.3_NC_003888.3_523;NC_003888.3_NC_003888.3_524;NC_003888.3_NC_003888.3_525;NC_003888.3_NC_003888.3_526 PF00348 PF13360;PF13570;PF05406;PF09995;PF00348;PF13340;PF01609;PF13586 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_618787-637824.1 618787 637824 19037 20 39 3 0.75081 0.40 0.37 0.23 0.09 0.01 0.05 0.43 0.12 0.14 0.03 0.26 NC_003888.3_NC_003888.3_536;NC_003888.3_NC_003888.3_537;NC_003888.3_NC_003888.3_538;NC_003888.3_NC_003888.3_539;NC_003888.3_NC_003888.3_540;NC_003888.3_NC_003888.3_541;NC_003888.3_NC_003888.3_542;NC_003888.3_NC_003888.3_543;NC_003888.3_NC_003888.3_544;NC_003888.3_NC_003888.3_545;NC_003888.3_NC_003888.3_546;NC_003888.3_NC_003888.3_547;NC_003888.3_NC_003888.3_548;NC_003888.3_NC_003888.3_549;NC_003888.3_NC_003888.3_550;NC_003888.3_NC_003888.3_551;NC_003888.3_NC_003888.3_552;NC_003888.3_NC_003888.3_553;NC_003888.3_NC_003888.3_554;NC_003888.3_NC_003888.3_555 PF08241;PF08242;PF00067 PF01261;PF00121;PF02502;PF02734;PF02733;PF00083;PF07690;PF03825;PF00392;PF13545;PF09339;PF07729;PF00067;PF00067;PF03029;PF00071;PF00025;PF00009;PF08477;PF05331;PF03259;PF02518;PF03466;PF00126;PF02567;PF05544;PF01183;PF00941;PF13489;PF13847;PF05401;PF01209;PF08241;PF05175;PF08242;PF13649;PF03358;PF02525;PF00210 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_680495-696168.1 680495 696168 15673 20 43 8 0.78120 0.44 0.38 0.24 0.14 Polyketide 0.02 0.17 0.12 0.70 0.04 0.02 0.07 NC_003888.3_NC_003888.3_597;NC_003888.3_NC_003888.3_598;NC_003888.3_NC_003888.3_599;NC_003888.3_NC_003888.3_600;NC_003888.3_NC_003888.3_601;NC_003888.3_NC_003888.3_602;NC_003888.3_NC_003888.3_603;NC_003888.3_NC_003888.3_604;NC_003888.3_NC_003888.3_605;NC_003888.3_NC_003888.3_606;NC_003888.3_NC_003888.3_607;NC_003888.3_NC_003888.3_608;NC_003888.3_NC_003888.3_609;NC_003888.3_NC_003888.3_610;NC_003888.3_NC_003888.3_611;NC_003888.3_NC_003888.3_612;NC_003888.3_NC_003888.3_613;NC_003888.3_NC_003888.3_614;NC_003888.3_NC_003888.3_615;NC_003888.3_NC_003888.3_616 PF08242;PF00106;PF08240;PF08659;PF08241;PF00107;PF01370;PF03364 PF01435;PF03965;PF01978;PF12802;PF02342;PF13424;PF07719;PF03067;PF09362;PF13602;PF00107;PF08240;PF00440;PF16859;PF00106;PF01370;PF08659;PF13561;PF13460;PF01135;PF02353;PF06325;PF13489;PF05724;PF01728;PF01209;PF13847;PF05401;PF13649;PF08241;PF08242;PF05148;PF05800;PF00741;PF06386;PF05120;PF10604;PF03364;PF08327;PF00741;PF06386;PF00741;PF05121 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_720031-722964.1 720031 722964 2933 4 7 0 0.56907 inhibitor 0.24 0.02 0.70 0.14 0.02 0.22 0.06 0.34 0.27 0.01 0.09 NC_003888.3_NC_003888.3_635;NC_003888.3_NC_003888.3_636;NC_003888.3_NC_003888.3_637;NC_003888.3_NC_003888.3_638 PF01374;PF05532;PF07690;PF06609;PF00083;PF06779;PF05977 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_736311-749279.1 736311 749279 12968 16 19 0 0.69926 antibacterial 0.63 0.14 0.08 0.10 RiPP 0.00 0.01 0.10 0.04 0.85 0.00 0.00 NC_003888.3_NC_003888.3_652;NC_003888.3_NC_003888.3_653;NC_003888.3_NC_003888.3_654;NC_003888.3_NC_003888.3_655;NC_003888.3_NC_003888.3_656;NC_003888.3_NC_003888.3_657;NC_003888.3_NC_003888.3_658;NC_003888.3_NC_003888.3_659;NC_003888.3_NC_003888.3_660;NC_003888.3_NC_003888.3_661;NC_003888.3_NC_003888.3_662;NC_003888.3_NC_003888.3_663;NC_003888.3_NC_003888.3_664;NC_003888.3_NC_003888.3_665;NC_003888.3_NC_003888.3_666;NC_003888.3_NC_003888.3_667 PF14404;PF10027;PF01965;PF00165;PF17196;PF02463;PF13191;PF00005;PF13555;PF03193;PF00664;PF02518;PF13581;PF04149;PF04672;PF13458;PF13433;PF02653;PF02653 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_753317-757246.1 753317 757246 3929 2 9 0 0.50999 antibacterial 0.69 0.07 0.13 0.31 0.00 0.23 0.13 0.43 0.15 0.02 0.07 NC_003888.3_NC_003888.3_672;NC_003888.3_NC_003888.3_673 PF00196;PF13384;PF13936;PF13424;PF12697;PF12695;PF01738;PF03403;PF12146 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_797776-809813.1 797776 809813 12037 10 28 2 0.70473 0.47 0.32 0.32 0.05 RiPP 0.00 0.07 0.13 0.02 0.71 0.01 0.06 NC_003888.3_NC_003888.3_716;NC_003888.3_NC_003888.3_717;NC_003888.3_NC_003888.3_718;NC_003888.3_NC_003888.3_719;NC_003888.3_NC_003888.3_720;NC_003888.3_NC_003888.3_721;NC_003888.3_NC_003888.3_722;NC_003888.3_NC_003888.3_723;NC_003888.3_NC_003888.3_724;NC_003888.3_NC_003888.3_725 PF08241;PF08242 PF12385;PF03412;PF00664;PF00005;PF02463;PF00664;PF00005;PF13191;PF02463;PF02541;PF14518;PF05175;PF06325;PF13489;PF12847;PF03602;PF13847;PF13649;PF08241;PF08242;PF01170;PF09360;PF00720;PF01070;PF00478;PF01645;PF00652;PF14200 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_815933-824058.1 815933 824058 8125 9 20 2 0.76996 antibacterial 0.66 0.05 0.06 0.08 Polyketide 0.12 0.00 0.12 0.51 0.10 0.02 0.31 NC_003888.3_NC_003888.3_728;NC_003888.3_NC_003888.3_729;NC_003888.3_NC_003888.3_730;NC_003888.3_NC_003888.3_731;NC_003888.3_NC_003888.3_732;NC_003888.3_NC_003888.3_733;NC_003888.3_NC_003888.3_734;NC_003888.3_NC_003888.3_735;NC_003888.3_NC_003888.3_736 PF00067;PF00248 PF00989;PF13188;PF08448;PF13426;PF13185;PF01590;PF07228;PF13581;PF14016;PF00248;PF02441;PF07080;PF12680;PF14534;PF00440;PF06902;PF13459;PF13370;PF00067;PF04075 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_847648-849232.1 847648 849232 1584 1 1 1 0.68118 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 NC_003888.3_NC_003888.3_762 PF00067 PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_943850-964941.1 943850 964941 21091 21 45 5 0.76853 0.49 0.13 0.13 0.31 0.03 0.12 0.21 0.17 0.24 0.21 0.02 NC_003888.3_NC_003888.3_861;NC_003888.3_NC_003888.3_862;NC_003888.3_NC_003888.3_863;NC_003888.3_NC_003888.3_864;NC_003888.3_NC_003888.3_865;NC_003888.3_NC_003888.3_866;NC_003888.3_NC_003888.3_867;NC_003888.3_NC_003888.3_868;NC_003888.3_NC_003888.3_869;NC_003888.3_NC_003888.3_870;NC_003888.3_NC_003888.3_871;NC_003888.3_NC_003888.3_872;NC_003888.3_NC_003888.3_873;NC_003888.3_NC_003888.3_874;NC_003888.3_NC_003888.3_875;NC_003888.3_NC_003888.3_876;NC_003888.3_NC_003888.3_877;NC_003888.3_NC_003888.3_878;NC_003888.3_NC_003888.3_879;NC_003888.3_NC_003888.3_880;NC_003888.3_NC_003888.3_881 PF00903;PF01488;PF01243;PF02737;PF00561 PF03704;PF13424;PF13432;PF14559;PF00486;PF00561;PF12697;PF12146;PF05977;PF07690;PF13347;PF00903;PF03551;PF10070;PF03176;PF12900;PF01243;PF14833;PF03446;PF13579;PF07991;PF02826;PF02423;PF03807;PF02558;PF01488;PF01210;PF02737;PF02452;PF10021;PF04107;PF12867;PF03781;PF13230;PF13522;PF10017;PF13416;PF01547;PF07311;PF03767;PF12710;PF00296;PF00005;PF13555;PF13191 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1048129-1049368.1 1048129 1049368 1239 1 2 0 0.53429 antibacterial 0.87 0.06 0.16 0.25 0.00 0.08 0.24 0.23 0.20 0.04 0.27 NC_003888.3_NC_003888.3_954 PF02655;PF13535 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1050594-1054583.1 1050594 1054583 3989 4 26 2 0.68095 antibacterial 0.54 0.42 0.15 0.02 RiPP 0.01 0.07 0.15 0.07 0.66 0.01 0.04 NC_003888.3_NC_003888.3_956;NC_003888.3_NC_003888.3_957;NC_003888.3_NC_003888.3_958;NC_003888.3_NC_003888.3_959 PF08241;PF08242 PF02475;PF05401;PF02353;PF13489;PF05724;PF01135;PF01728;PF05175;PF01209;PF13847;PF03848;PF00398;PF13649;PF08241;PF08242;PF01497;PF01032;PF00950;PF00005;PF13604;PF13191;PF13555;PF02463;PF13175;PF13304;PF13476 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1058376-1058961.1 1058376 1058961 585 1 2 0 0.53564 antibacterial 0.59 0.05 0.12 0.19 0.00 0.05 0.46 0.17 0.14 0.03 0.19 NC_003888.3_NC_003888.3_963 PF00440;PF16859 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1222187-1222787.1 1222187 1222787 600 1 8 2 0.57647 0.43 0.38 0.24 0.03 Other 0.00 0.00 0.56 0.04 0.14 0.00 0.26 NC_003888.3_NC_003888.3_1119 PF08241;PF08242 PF01135;PF13489;PF01209;PF13847;PF08003;PF13649;PF08241;PF08242 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1275829-1279960.1 1275829 1279960 4131 4 7 4 0.63375 antibacterial 0.61 0.02 0.04 0.21 Terpene 0.00 0.04 0.15 0.10 0.00 0.01 0.77 NC_003888.3_NC_003888.3_1162;NC_003888.3_NC_003888.3_1163;NC_003888.3_NC_003888.3_1164;NC_003888.3_NC_003888.3_1165 PF08545;PF00171;PF00067;PF08541 PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1281883-1282540.1 1281883 1282540 657 1 1 0 0.50955 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1168 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1314725-1314968.1 1314725 1314968 243 1 1 0 0.66569 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_1201 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1319886-1320564.1 1319886 1320564 678 1 6 2 0.62377 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_1206 PF08241;PF08242 PF13489;PF13847;PF13649;PF08241;PF08242;PF01209 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1324335-1326727.1 1324335 1326727 2392 2 4 0 0.51368 antibacterial 0.87 0.06 0.18 0.25 0.00 0.06 0.12 0.36 0.20 0.02 0.28 NC_003888.3_NC_003888.3_1212;NC_003888.3_NC_003888.3_1213 PF00657;PF13472;PF00206;PF10397 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1327990-1363153.1 1327990 1363153 35163 34 86 17 0.83900 antibacterial 0.66 0.40 0.12 0.04 Polyketide 0.00 0.23 0.12 0.57 0.09 0.10 0.05 NC_003888.3_NC_003888.3_1216;NC_003888.3_NC_003888.3_1217;NC_003888.3_NC_003888.3_1218;NC_003888.3_NC_003888.3_1219;NC_003888.3_NC_003888.3_1220;NC_003888.3_NC_003888.3_1221;NC_003888.3_NC_003888.3_1222;NC_003888.3_NC_003888.3_1223;NC_003888.3_NC_003888.3_1224;NC_003888.3_NC_003888.3_1225;NC_003888.3_NC_003888.3_1226;NC_003888.3_NC_003888.3_1227;NC_003888.3_NC_003888.3_1228;NC_003888.3_NC_003888.3_1229;NC_003888.3_NC_003888.3_1230;NC_003888.3_NC_003888.3_1231;NC_003888.3_NC_003888.3_1232;NC_003888.3_NC_003888.3_1233;NC_003888.3_NC_003888.3_1234;NC_003888.3_NC_003888.3_1235;NC_003888.3_NC_003888.3_1236;NC_003888.3_NC_003888.3_1237;NC_003888.3_NC_003888.3_1238;NC_003888.3_NC_003888.3_1239;NC_003888.3_NC_003888.3_1240;NC_003888.3_NC_003888.3_1241;NC_003888.3_NC_003888.3_1242;NC_003888.3_NC_003888.3_1243;NC_003888.3_NC_003888.3_1244;NC_003888.3_NC_003888.3_1245;NC_003888.3_NC_003888.3_1246;NC_003888.3_NC_003888.3_1247;NC_003888.3_NC_003888.3_1248;NC_003888.3_NC_003888.3_1249 PF01266;PF02801;PF01636;PF08545;PF00202;PF04321;PF02770;PF00155;PF01494;PF00108;PF08541;PF00109;PF07993;PF04820;PF01370;PF03364;PF00561 PF12679;PF12730;PF13304;PF00005;PF13555;PF07730;PF00072;PF04545;PF08281;PF00196;PF01047;PF13463;PF12802;PF09339;PF01978;PF00480;PF07702;PF00392;PF13545;PF12680;PF14534;PF08281;PF04545;PF04542;PF00561;PF12697;PF12146;PF12697;PF12146;PF01674;PF00561;PF05057;PF02801;PF00109;PF00108;PF00550;PF00198;PF00364;PF02780;PF02779;PF00676;PF00456;PF02775;PF13292;PF08541;PF08545;PF00108;PF10501;PF00550;PF07993;PF01370;PF01966;PF07992;PF01494;PF13450;PF04820;PF01266;PF04542;PF08281;PF03109;PF01636;PF01163;PF04072;PF03007;PF01266;PF00890;PF01946;PF13450;PF13454;PF05834;PF07992;PF01613;PF10604;PF03364;PF00202;PF07993;PF01370;PF13460;PF04321;PF02770;PF09924;PF14079;PF00392;PF00155;PF16655;PF09423 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1405030-1412625.1 1405030 1412625 7595 6 13 4 0.56512 antibacterial 0.61 0.11 0.19 0.16 Polyketide 0.01 0.13 0.22 0.60 0.04 0.01 0.03 NC_003888.3_NC_003888.3_1290;NC_003888.3_NC_003888.3_1291;NC_003888.3_NC_003888.3_1292;NC_003888.3_NC_003888.3_1293;NC_003888.3_NC_003888.3_1294;NC_003888.3_NC_003888.3_1295 PF00106;PF00501;PF01370;PF08659 PF00501;PF13191;PF00931;PF13401;PF00196;PF08281;PF08281;PF10101;PF10935;PF13561;PF00106;PF08659;PF01370 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1988459-1989701.1 1988459 1989701 1242 1 3 1 0.51579 antibacterial 0.64 0.14 0.11 0.14 0.00 0.03 0.15 0.19 0.36 0.00 0.26 NC_003888.3_NC_003888.3_1819 PF08241 PF00590;PF13649;PF08241 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1991526-2027953.1 1991526 2027953 36427 36 54 7 0.73986 0.42 0.20 0.30 0.13 Other 0.05 0.07 0.67 0.05 0.06 0.12 0.02 NC_003888.3_NC_003888.3_1821;NC_003888.3_NC_003888.3_1822;NC_003888.3_NC_003888.3_1823;NC_003888.3_NC_003888.3_1824;NC_003888.3_NC_003888.3_1825;NC_003888.3_NC_003888.3_1826;NC_003888.3_NC_003888.3_1827;NC_003888.3_NC_003888.3_1828;NC_003888.3_NC_003888.3_1829;NC_003888.3_NC_003888.3_1830;NC_003888.3_NC_003888.3_1831;NC_003888.3_NC_003888.3_1832;NC_003888.3_NC_003888.3_1833;NC_003888.3_NC_003888.3_1834;NC_003888.3_NC_003888.3_1835;NC_003888.3_NC_003888.3_1836;NC_003888.3_NC_003888.3_1837;NC_003888.3_NC_003888.3_1838;NC_003888.3_NC_003888.3_1839;NC_003888.3_NC_003888.3_1840;NC_003888.3_NC_003888.3_1841;NC_003888.3_NC_003888.3_1842;NC_003888.3_NC_003888.3_1843;NC_003888.3_NC_003888.3_1844;NC_003888.3_NC_003888.3_1845;NC_003888.3_NC_003888.3_1846;NC_003888.3_NC_003888.3_1847;NC_003888.3_NC_003888.3_1848;NC_003888.3_NC_003888.3_1849;NC_003888.3_NC_003888.3_1850;NC_003888.3_NC_003888.3_1851;NC_003888.3_NC_003888.3_1852;NC_003888.3_NC_003888.3_1853;NC_003888.3_NC_003888.3_1854;NC_003888.3_NC_003888.3_1855;NC_003888.3_NC_003888.3_1856 PF00155;PF00171;PF00903;PF01408;PF06339;PF00583;PF00202 PF01903;PF00155;PF01979;PF07969;PF00266;PF13302;PF00583;PF13508;PF13673;PF14542;PF08445;PF00202;PF06339;PF12852;PF05721;PF00266;PF01323;PF13462;PF07081;PF00171;PF09339;PF01978;PF01614;PF13302;PF13420;PF00583;PF12746;PF00905;PF04542;PF08281;PF04545;PF03767;PF01095;PF00544;PF13229;PF00657;PF13472;PF13416;PF01547;PF04616;PF14100;PF01408;PF00528;PF00528;PF00920;PF00701;PF07729;PF00392;PF01325;PF11716;PF07690;PF13347;PF12681;PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2038268-2038841.1 2038268 2038841 573 1 2 0 0.50377 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1867 PF00440;PF02796 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2058373-2060092.1 2058373 2060092 1719 2 10 1 0.62310 antibacterial 0.83 0.14 0.16 0.20 0.00 0.05 0.45 0.26 0.14 0.06 0.11 NC_003888.3_NC_003888.3_1889;NC_003888.3_NC_003888.3_1890 PF02522 PF13814;PF06224;PF01978;PF12840;PF12802;PF01022;PF13412;PF09339;PF01047;PF02522 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2061088-2061898.1 2061088 2061898 810 1 4 0 0.50115 antibacterial 0.61 0.10 0.29 0.14 0.00 0.06 0.10 0.23 0.42 0.02 0.22 NC_003888.3_NC_003888.3_1892 PF01061;PF12730;PF12698;PF12679 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2412354-2454993.1 2412354 2454993 42639 41 81 2 0.82982 0.43 0.17 0.30 0.10 0.01 0.16 0.15 0.14 0.45 0.11 0.02 NC_003888.3_NC_003888.3_2204;NC_003888.3_NC_003888.3_2205;NC_003888.3_NC_003888.3_2206;NC_003888.3_NC_003888.3_2207;NC_003888.3_NC_003888.3_2208;NC_003888.3_NC_003888.3_2209;NC_003888.3_NC_003888.3_2210;NC_003888.3_NC_003888.3_2211;NC_003888.3_NC_003888.3_2212;NC_003888.3_NC_003888.3_2213;NC_003888.3_NC_003888.3_2214;NC_003888.3_NC_003888.3_2215;NC_003888.3_NC_003888.3_2216;NC_003888.3_NC_003888.3_2217;NC_003888.3_NC_003888.3_2218;NC_003888.3_NC_003888.3_2219;NC_003888.3_NC_003888.3_2220;NC_003888.3_NC_003888.3_2221;NC_003888.3_NC_003888.3_2222;NC_003888.3_NC_003888.3_2223;NC_003888.3_NC_003888.3_2224;NC_003888.3_NC_003888.3_2225;NC_003888.3_NC_003888.3_2226;NC_003888.3_NC_003888.3_2227;NC_003888.3_NC_003888.3_2228;NC_003888.3_NC_003888.3_2229;NC_003888.3_NC_003888.3_2230;NC_003888.3_NC_003888.3_2231;NC_003888.3_NC_003888.3_2232;NC_003888.3_NC_003888.3_2233;NC_003888.3_NC_003888.3_2234;NC_003888.3_NC_003888.3_2235;NC_003888.3_NC_003888.3_2236;NC_003888.3_NC_003888.3_2237;NC_003888.3_NC_003888.3_2238;NC_003888.3_NC_003888.3_2239;NC_003888.3_NC_003888.3_2240;NC_003888.3_NC_003888.3_2241;NC_003888.3_NC_003888.3_2242;NC_003888.3_NC_003888.3_2243;NC_003888.3_NC_003888.3_2244 PF01636;PF00106 PF00440;PF13305;PF08450;PF00400;PF07714;PF00069;PF01636;PF04149;PF13560;PF16571;PF00753;PF04149;PF13560;PF06779;PF07690;PF00083;PF03372;PF02548;PF13714;PF00005;PF13555;PF13191;PF13304;PF02702;PF13732;PF01061;PF12730;PF12698;PF12679;PF00931;PF13191;PF13401;PF03704;PF00486;PF02163;PF03807;PF03446;PF02153;PF07991;PF10727;PF02826;PF00106;PF05977;PF07690;PF00557;PF01126;PF02567;PF04213;PF04213;PF01497;PF01032;PF10003;PF00950;PF00005;PF13555;PF13191;PF13481;PF03193;PF13476;PF13521;PF13304;PF02463;PF13473;PF09375;PF04261;PF03239;PF09250;PF16859;PF00440;PF13022;PF00196;PF08281;PF00072;PF09243;PF13649;PF00144;PF07690;PF03137;PF06609;PF13347;PF00083 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2457953-2460026.1 2457953 2460026 2073 3 8 2 0.59109 antibacterial 0.75 0.07 0.17 0.16 0.02 0.01 0.06 0.24 0.28 0.02 0.38 NC_003888.3_NC_003888.3_2247;NC_003888.3_NC_003888.3_2248;NC_003888.3_NC_003888.3_2249 PF00106;PF08659 PF00106;PF08659;PF13561;PF13460;PF08643;PF12680;PF14534;PF07681 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2477018-2499570.1 2477018 2499570 22552 21 54 5 0.77903 antibacterial 0.50 0.32 0.29 0.16 0.03 0.07 0.16 0.06 0.21 0.42 0.07 NC_003888.3_NC_003888.3_2268;NC_003888.3_NC_003888.3_2269;NC_003888.3_NC_003888.3_2270;NC_003888.3_NC_003888.3_2271;NC_003888.3_NC_003888.3_2272;NC_003888.3_NC_003888.3_2273;NC_003888.3_NC_003888.3_2274;NC_003888.3_NC_003888.3_2275;NC_003888.3_NC_003888.3_2276;NC_003888.3_NC_003888.3_2277;NC_003888.3_NC_003888.3_2278;NC_003888.3_NC_003888.3_2279;NC_003888.3_NC_003888.3_2280;NC_003888.3_NC_003888.3_2281;NC_003888.3_NC_003888.3_2282;NC_003888.3_NC_003888.3_2283;NC_003888.3_NC_003888.3_2284;NC_003888.3_NC_003888.3_2285;NC_003888.3_NC_003888.3_2286;NC_003888.3_NC_003888.3_2287;NC_003888.3_NC_003888.3_2288 PF01636;PF08242;PF00432;PF08241;PF00534 PF00072;PF00196;PF04545;PF13551;PF13542;PF13384;PF08281;PF07690;PF00083;PF06609;PF07690;PF13347;PF00083;PF06779;PF12832;PF10670;PF13620;PF13578;PF01520;PF13243;PF13489;PF07021;PF13847;PF01135;PF03141;PF01209;PF08241;PF08242;PF13649;PF05175;PF03602;PF02353;PF03848;PF13524;PF00534;PF13692;PF13439;PF13579;PF00440;PF01636;PF13243;PF00432;PF02361;PF13481;PF13191;PF03193;PF00005;PF13555;PF01926;PF13304;PF12822;PF01464;PF01427;PF02557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2500696-2501287.1 2500696 2501287 591 1 1 1 0.50136 antibacterial 0.86 0.07 0.17 0.28 0.00 0.09 0.11 0.31 0.21 0.01 0.30 NC_003888.3_NC_003888.3_2290 PF00857 PF00857 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2501756-2502536.1 2501756 2502536 780 1 5 2 0.51687 antibacterial 0.56 0.07 0.07 0.44 0.00 0.39 0.15 0.40 0.02 0.02 0.03 NC_003888.3_NC_003888.3_2292 PF00975;PF00561 PF12697;PF00975;PF12146;PF00561;PF08386 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2520563-2524270.1 2520563 2524270 3707 6 6 1 0.61421 antibacterial 0.71 0.06 0.27 0.20 0.03 0.02 0.35 0.21 0.17 0.03 0.24 NC_003888.3_NC_003888.3_2309;NC_003888.3_NC_003888.3_2310;NC_003888.3_NC_003888.3_2311;NC_003888.3_NC_003888.3_2312;NC_003888.3_NC_003888.3_2313;NC_003888.3_NC_003888.3_2314 PF00583 PF07681;PF09335;PF10041;PF13302;PF00583;PF13349 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2538716-2546691.1 2538716 2546691 7975 6 8 0 0.67281 inhibitor 0.20 0.04 0.67 0.14 0.03 0.23 0.10 0.34 0.27 0.00 0.05 NC_003888.3_NC_003888.3_2328;NC_003888.3_NC_003888.3_2329;NC_003888.3_NC_003888.3_2330;NC_003888.3_NC_003888.3_2331;NC_003888.3_NC_003888.3_2332;NC_003888.3_NC_003888.3_2333 PF11253;PF00456;PF07690;PF06609;PF00083;PF00440;PF13022;PF06259 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2549403-2569910.1 2549403 2569910 20507 19 36 8 0.83648 antibacterial 0.52 0.24 0.19 0.25 Polyketide 0.00 0.23 0.14 0.69 0.02 0.01 0.09 NC_003888.3_NC_003888.3_2337;NC_003888.3_NC_003888.3_2338;NC_003888.3_NC_003888.3_2339;NC_003888.3_NC_003888.3_2340;NC_003888.3_NC_003888.3_2341;NC_003888.3_NC_003888.3_2342;NC_003888.3_NC_003888.3_2343;NC_003888.3_NC_003888.3_2344;NC_003888.3_NC_003888.3_2345;NC_003888.3_NC_003888.3_2346;NC_003888.3_NC_003888.3_2347;NC_003888.3_NC_003888.3_2348;NC_003888.3_NC_003888.3_2349;NC_003888.3_NC_003888.3_2350;NC_003888.3_NC_003888.3_2351;NC_003888.3_NC_003888.3_2352;NC_003888.3_NC_003888.3_2353;NC_003888.3_NC_003888.3_2354;NC_003888.3_NC_003888.3_2355 PF02801;PF08545;PF00108;PF08541;PF00107;PF00698;PF00109;PF00583 PF13302;PF00583;PF13508;PF13527;PF08445;PF13673;PF00144;PF13560;PF04149;PF00652;PF14200;PF03498;PF14440;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08392;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF07264;PF02566;PF13602;PF00107;PF16884 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2790361-2791648.1 2790361 2791648 1287 1 1 1 0.60537 antibacterial 0.83 0.06 0.17 0.30 0.00 0.11 0.08 0.32 0.20 0.03 0.31 NC_003888.3_NC_003888.3_2543 PF00171 PF00171 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2934113-2967589.1 2934113 2967589 33476 32 50 6 0.94003 antibacterial 0.55 0.04 0.18 0.17 Saccharide 0.02 0.08 0.17 0.02 0.04 0.66 0.01 NC_003888.3_NC_003888.3_2652;NC_003888.3_NC_003888.3_2653;NC_003888.3_NC_003888.3_2654;NC_003888.3_NC_003888.3_2655;NC_003888.3_NC_003888.3_2656;NC_003888.3_NC_003888.3_2657;NC_003888.3_NC_003888.3_2658;NC_003888.3_NC_003888.3_2659;NC_003888.3_NC_003888.3_2660;NC_003888.3_NC_003888.3_2661;NC_003888.3_NC_003888.3_2662;NC_003888.3_NC_003888.3_2663;NC_003888.3_NC_003888.3_2664;NC_003888.3_NC_003888.3_2665;NC_003888.3_NC_003888.3_2666;NC_003888.3_NC_003888.3_2667;NC_003888.3_NC_003888.3_2668;NC_003888.3_NC_003888.3_2669;NC_003888.3_NC_003888.3_2670;NC_003888.3_NC_003888.3_2671;NC_003888.3_NC_003888.3_2672;NC_003888.3_NC_003888.3_2673;NC_003888.3_NC_003888.3_2674;NC_003888.3_NC_003888.3_2675;NC_003888.3_NC_003888.3_2676;NC_003888.3_NC_003888.3_2677;NC_003888.3_NC_003888.3_2678;NC_003888.3_NC_003888.3_2679;NC_003888.3_NC_003888.3_2680;NC_003888.3_NC_003888.3_2681;NC_003888.3_NC_003888.3_2682;NC_003888.3_NC_003888.3_2683 PF02706;PF04932;PF02397;PF02668;PF00534;PF00501 PF07690;PF12832;PF06813;PF13360;PF00400;PF12894;PF02668;PF03781;PF00389;PF02826;PF03446;PF09860;PF08843;PF03777;PF00264;PF06236;PF03205;PF03777;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF09849;PF03777;PF03777;PF00501;PF12034;PF00092;PF13768;PF13519;PF12450;PF12679;PF12730 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3073684-3086671.1 3073684 3086671 12987 11 16 0 0.65922 antibacterial 0.61 0.07 0.11 0.17 0.00 0.07 0.40 0.19 0.16 0.03 0.19 NC_003888.3_NC_003888.3_2775;NC_003888.3_NC_003888.3_2776;NC_003888.3_NC_003888.3_2777;NC_003888.3_NC_003888.3_2778;NC_003888.3_NC_003888.3_2779;NC_003888.3_NC_003888.3_2780;NC_003888.3_NC_003888.3_2781;NC_003888.3_NC_003888.3_2782;NC_003888.3_NC_003888.3_2783;NC_003888.3_NC_003888.3_2784;NC_003888.3_NC_003888.3_2785 PF00440;PF00296;PF00563;PF00990;PF08448;PF00989;PF13426;PF13188;PF09250;PF14592;PF00544;PF01177;PF01177;PF00389;PF02826;PF01425 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3130824-3150744.1 3130824 3150744 19920 20 31 3 0.67402 antibacterial 0.62 0.12 0.23 0.13 0.00 0.10 0.20 0.16 0.47 0.05 0.04 NC_003888.3_NC_003888.3_2837;NC_003888.3_NC_003888.3_2838;NC_003888.3_NC_003888.3_2839;NC_003888.3_NC_003888.3_2840;NC_003888.3_NC_003888.3_2841;NC_003888.3_NC_003888.3_2842;NC_003888.3_NC_003888.3_2843;NC_003888.3_NC_003888.3_2844;NC_003888.3_NC_003888.3_2845;NC_003888.3_NC_003888.3_2846;NC_003888.3_NC_003888.3_2847;NC_003888.3_NC_003888.3_2848;NC_003888.3_NC_003888.3_2849;NC_003888.3_NC_003888.3_2850;NC_003888.3_NC_003888.3_2851;NC_003888.3_NC_003888.3_2852;NC_003888.3_NC_003888.3_2853;NC_003888.3_NC_003888.3_2854;NC_003888.3_NC_003888.3_2855;NC_003888.3_NC_003888.3_2856 PF00903;PF00067;PF00561 PF12158;PF03259;PF05331;PF08784;PF12802;PF09339;PF03029;PF00067;PF02627;PF03096;PF12697;PF00561;PF12146;PF12681;PF00903;PF00083;PF07690;PF06779;PF12832;PF04286;PF00657;PF13472;PF17182;PF09922;PF08044;PF13304;PF00005;PF03308;PF13555;PF06182;PF06182 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3316757-3320498.1 3316757 3320498 3741 1 3 0 0.50004 antibacterial 0.81 0.06 0.21 0.24 0.00 0.07 0.07 0.21 0.13 0.33 0.23 NC_003888.3_NC_003888.3_2989 PF13632;PF13641;PF13506 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3526136-3603907.1 3526136 3603907 77771 35 87 19 0.94701 antibacterial 0.74 0.25 0.08 0.10 NRP 0.00 0.90 0.04 0.14 0.00 0.00 0.01 NC_003888.3_NC_003888.3_3169;NC_003888.3_NC_003888.3_3170;NC_003888.3_NC_003888.3_3171;NC_003888.3_NC_003888.3_3172;NC_003888.3_NC_003888.3_3173;NC_003888.3_NC_003888.3_3174;NC_003888.3_NC_003888.3_3175;NC_003888.3_NC_003888.3_3176;NC_003888.3_NC_003888.3_3177;NC_003888.3_NC_003888.3_3178;NC_003888.3_NC_003888.3_3179;NC_003888.3_NC_003888.3_3180;NC_003888.3_NC_003888.3_3181;NC_003888.3_NC_003888.3_3182;NC_003888.3_NC_003888.3_3183;NC_003888.3_NC_003888.3_3184;NC_003888.3_NC_003888.3_3185;NC_003888.3_NC_003888.3_3186;NC_003888.3_NC_003888.3_3187;NC_003888.3_NC_003888.3_3188;NC_003888.3_NC_003888.3_3189;NC_003888.3_NC_003888.3_3190;NC_003888.3_NC_003888.3_3191;NC_003888.3_NC_003888.3_3192;NC_003888.3_NC_003888.3_3193;NC_003888.3_NC_003888.3_3194;NC_003888.3_NC_003888.3_3195;NC_003888.3_NC_003888.3_3196;NC_003888.3_NC_003888.3_3197;NC_003888.3_NC_003888.3_3198;NC_003888.3_NC_003888.3_3199;NC_003888.3_NC_003888.3_3200;NC_003888.3_NC_003888.3_3201;NC_003888.3_NC_003888.3_3202;NC_003888.3_NC_003888.3_3203 PF02770;PF00441;PF00501;PF00155;PF08545;PF08028;PF00903;PF00975;PF01494;PF00668;PF01266;PF01636;PF02801;PF00702;PF08541;PF02668;PF00109;PF04820;PF00561 PF00122;PF00702;PF08282;PF00689;PF00486;PF03704;PF13191;PF00931;PF13401;PF03621;PF03403;PF02153;PF01266;PF09056;PF12679;PF12730;PF13304;PF00005;PF13476;PF13555;PF07730;PF00072;PF00196;PF08281;PF14493;PF00155;PF12897;PF01070;PF01645;PF00977;PF00478;PF03060;PF00903;PF13669;PF14696;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00668;PF00501;PF13193;PF00550;PF00975;PF12697;PF00561;PF00561;PF12146;PF12697;PF01636;PF02463;PF00005;PF13555;PF00664;PF02668;PF01663;PF01261;PF02126;PF01026;PF01261;PF01040;PF07994;PF01658;PF01494;PF05834;PF04820;PF00070;PF07992;PF00890;PF01266;PF12831;PF13450;PF01134;PF08541;PF08545;PF00441;PF08028;PF02770;PF02801;PF00109;PF00550;PF00589;PF14659 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3661247-3661991.1 3661247 3661991 744 1 1 0 0.53431 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_3260 PF14016 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3782902-3788943.1 3782902 3788943 6041 7 14 1 0.63217 antibacterial 0.55 0.17 0.20 0.16 RiPP 0.00 0.01 0.03 0.04 0.92 0.00 0.00 NC_003888.3_NC_003888.3_3369;NC_003888.3_NC_003888.3_3370;NC_003888.3_NC_003888.3_3371;NC_003888.3_NC_003888.3_3372;NC_003888.3_NC_003888.3_3373;NC_003888.3_NC_003888.3_3374;NC_003888.3_NC_003888.3_3375 PF00171 PF12698;PF01061;PF13732;PF02702;PF13304;PF00005;PF13191;PF13555;PF03551;PF00171;PF13560;PF12844;PF13581;PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3812960-3814873.1 3812960 3814873 1913 2 7 0 0.58767 antibacterial 0.78 0.05 0.11 0.17 RiPP 0.00 0.02 0.13 0.05 0.76 0.01 0.03 NC_003888.3_NC_003888.3_3403;NC_003888.3_NC_003888.3_3404 PF08402;PF13304;PF13191;PF00005;PF01078;PF03215;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3818490-3826210.1 3818490 3826210 7720 8 31 5 0.63426 cytotoxic 0.27 0.60 0.15 0.04 0.05 0.08 0.16 0.07 0.05 0.31 0.38 NC_003888.3_NC_003888.3_3409;NC_003888.3_NC_003888.3_3410;NC_003888.3_NC_003888.3_3411;NC_003888.3_NC_003888.3_3412;NC_003888.3_NC_003888.3_3413;NC_003888.3_NC_003888.3_3414;NC_003888.3_NC_003888.3_3415;NC_003888.3_NC_003888.3_3416 PF01266;PF08242;PF08241;PF04055;PF00535 PF13489;PF01209;PF13847;PF08241;PF08242;PF13649;PF07992;PF01946;PF03486;PF01134;PF12831;PF01266;PF00890;PF01262;PF13450;PF00070;PF02852;PF07291;PF04055;PF01048;PF01983;PF12804;PF09837;PF13641;PF00535;PF10111;PF13506;PF13632;PF13340;PF01609;PF13586 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4013072-4023169.1 4013072 4023169 10097 11 28 3 0.73000 antibacterial 0.63 0.09 0.09 0.13 0.02 0.11 0.24 0.30 0.20 0.01 0.22 NC_003888.3_NC_003888.3_3579;NC_003888.3_NC_003888.3_3580;NC_003888.3_NC_003888.3_3581;NC_003888.3_NC_003888.3_3582;NC_003888.3_NC_003888.3_3583;NC_003888.3_NC_003888.3_3584;NC_003888.3_NC_003888.3_3585;NC_003888.3_NC_003888.3_3586;NC_003888.3_NC_003888.3_3587;NC_003888.3_NC_003888.3_3588;NC_003888.3_NC_003888.3_3589 PF01757;PF00067;PF00561 PF07883;PF00067;PF01925;PF02956;PF00196;PF04545;PF08281;PF13936;PF00072;PF07730;PF00196;PF08281;PF04545;PF14493;PF13936;PF00072;PF07730;PF01757;PF12697;PF06259;PF12697;PF07859;PF00561;PF00756;PF12146;PF00326;PF01764;PF00135 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4024590-4025406.1 4024590 4025406 816 1 1 0 0.53602 antibacterial 0.83 0.07 0.19 0.27 0.05 0.09 0.07 0.32 0.20 0.03 0.29 NC_003888.3_NC_003888.3_3591 PF03301 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4026216-4027671.1 4026216 4027671 1455 1 5 0 0.51398 inhibitor 0.27 0.05 0.59 0.11 0.02 0.19 0.25 0.29 0.22 0.00 0.03 NC_003888.3_NC_003888.3_3593 PF13347;PF07690;PF05977;PF00083;PF06609 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4115027-4137513.1 4115027 4137513 22486 20 36 3 0.90015 antibacterial 0.62 0.15 0.09 0.11 RiPP 0.00 0.08 0.14 0.14 0.58 0.02 0.09 NC_003888.3_NC_003888.3_3686;NC_003888.3_NC_003888.3_3687;NC_003888.3_NC_003888.3_3688;NC_003888.3_NC_003888.3_3689;NC_003888.3_NC_003888.3_3690;NC_003888.3_NC_003888.3_3691;NC_003888.3_NC_003888.3_3692;NC_003888.3_NC_003888.3_3693;NC_003888.3_NC_003888.3_3694;NC_003888.3_NC_003888.3_3695;NC_003888.3_NC_003888.3_3696;NC_003888.3_NC_003888.3_3697;NC_003888.3_NC_003888.3_3698;NC_003888.3_NC_003888.3_3699;NC_003888.3_NC_003888.3_3700;NC_003888.3_NC_003888.3_3701;NC_003888.3_NC_003888.3_3702;NC_003888.3_NC_003888.3_3703;NC_003888.3_NC_003888.3_3704;NC_003888.3_NC_003888.3_3705 PF08241;PF08242;PF01757 PF05175;PF13489;PF07021;PF13847;PF13649;PF08241;PF08242;PF05724;PF00174;PF13231;PF00313;PF02518;PF07730;PF13796;PF00005;PF13555;PF13191;PF13401;PF13304;PF02687;PF12704;PF02687;PF12704;PF00005;PF13304;PF13555;PF00196;PF08281;PF04545;PF00072;PF07730;PF00487;PF01757;PF06259;PF10756;PF02342 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4142256-4144254.1 4142256 4144254 1998 2 2 1 0.55784 antibacterial 0.75 0.00 0.03 0.00 Polyketide-Terpene 0.00 0.00 0.18 0.56 0.01 0.02 0.64 NC_003888.3_NC_003888.3_3711;NC_003888.3_NC_003888.3_3712 PF00067 PF00440;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4584105-4584870.1 4584105 4584870 765 1 3 2 0.51264 antibacterial 0.81 0.01 0.18 0.07 0.01 0.01 0.02 0.06 0.41 0.00 0.49 NC_003888.3_NC_003888.3_4107 PF00106;PF08659 PF00106;PF08659;PF13561 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4589507-4589801.1 4589507 4589801 294 1 1 0 0.50763 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4115 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4628356-4628737.1 4628356 4628737 381 1 1 1 0.53370 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_4161 PF00903 PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4629723-4630965.1 4629723 4630965 1242 1 1 1 0.59882 antibacterial 0.78 0.02 0.27 0.18 0.00 0.07 0.04 0.22 0.49 0.02 0.19 NC_003888.3_NC_003888.3_4163 PF05147 PF05147 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4670419-4671589.1 4670419 4671589 1170 1 3 0 0.52337 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4197 PF00652;PF14200;PF03498 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4769019-4804183.1 4769019 4804183 35164 34 81 13 0.83564 antibacterial 0.52 0.26 0.18 0.19 0.01 0.27 0.19 0.13 0.42 0.04 0.02 NC_003888.3_NC_003888.3_4291;NC_003888.3_NC_003888.3_4292;NC_003888.3_NC_003888.3_4293;NC_003888.3_NC_003888.3_4294;NC_003888.3_NC_003888.3_4295;NC_003888.3_NC_003888.3_4296;NC_003888.3_NC_003888.3_4297;NC_003888.3_NC_003888.3_4298;NC_003888.3_NC_003888.3_4299;NC_003888.3_NC_003888.3_4300;NC_003888.3_NC_003888.3_4301;NC_003888.3_NC_003888.3_4302;NC_003888.3_NC_003888.3_4303;NC_003888.3_NC_003888.3_4304;NC_003888.3_NC_003888.3_4305;NC_003888.3_NC_003888.3_4306;NC_003888.3_NC_003888.3_4307;NC_003888.3_NC_003888.3_4308;NC_003888.3_NC_003888.3_4309;NC_003888.3_NC_003888.3_4310;NC_003888.3_NC_003888.3_4311;NC_003888.3_NC_003888.3_4312;NC_003888.3_NC_003888.3_4313;NC_003888.3_NC_003888.3_4314;NC_003888.3_NC_003888.3_4315;NC_003888.3_NC_003888.3_4316;NC_003888.3_NC_003888.3_4317;NC_003888.3_NC_003888.3_4318;NC_003888.3_NC_003888.3_4319;NC_003888.3_NC_003888.3_4320;NC_003888.3_NC_003888.3_4321;NC_003888.3_NC_003888.3_4322;NC_003888.3_NC_003888.3_4323;NC_003888.3_NC_003888.3_4324 PF01636;PF00378;PF02770;PF02786;PF00289;PF01039;PF08028;PF00441;PF02771;PF01243;PF02785;PF00501;PF04738 PF05685;PF01909;PF13427;PF14606;PF00657;PF13472;PF02909;PF00440;PF00005;PF13604;PF02702;PF13304;PF13732;PF01061;PF12698;PF07730;PF13581;PF00072;PF04545;PF00196;PF08281;PF13412;PF14534;PF12680;PF07366;PF00266;PF01565;PF02913;PF13183;PF13534;PF03403;PF12740;PF13517;PF01839;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF04978;PF12867;PF14435;PF00293;PF00892;PF12802;PF01047;PF13463;PF13545;PF01638;PF04738;PF00069;PF07714;PF01636;PF11716;PF04978;PF12867;PF08608;PF07287;PF01039;PF00289;PF02786;PF02655;PF07478;PF02222;PF02785;PF00364;PF02771;PF02770;PF00441;PF08028;PF00501;PF13193;PF00378;PF16113;PF00440;PF10590;PF01243 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4869136-4875516.1 4869136 4875516 6380 6 5 0 0.58407 antibacterial 0.60 0.05 0.09 0.31 Polyketide 0.00 0.00 0.20 0.67 0.08 0.00 0.04 NC_003888.3_NC_003888.3_4384;NC_003888.3_NC_003888.3_4385;NC_003888.3_NC_003888.3_4386;NC_003888.3_NC_003888.3_4387;NC_003888.3_NC_003888.3_4388;NC_003888.3_NC_003888.3_4389 PF07228;PF00440;PF07690;PF08281;PF04542 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4876022-4876625.1 4876022 4876625 603 1 1 0 0.57178 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_4391 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4882031-4884893.1 4882031 4884893 2862 4 5 1 0.57462 antibacterial 0.55 0.08 0.11 0.30 0.00 0.02 0.45 0.48 0.02 0.02 0.03 NC_003888.3_NC_003888.3_4398;NC_003888.3_NC_003888.3_4399;NC_003888.3_NC_003888.3_4400;NC_003888.3_NC_003888.3_4401 PF00857 PF13977;PF00440;PF07690;PF13347;PF00857 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4895197-4896619.1 4895197 4896619 1422 1 1 1 0.63385 antibacterial 0.63 0.07 0.40 0.23 0.00 0.46 0.09 0.23 0.06 0.03 0.18 NC_003888.3_NC_003888.3_4412 PF00668 PF00668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4897543-4901975.1 4897543 4901975 4432 4 17 3 0.53438 0.19 0.07 0.13 0.29 0.00 0.23 0.40 0.22 0.14 0.00 0.02 NC_003888.3_NC_003888.3_4414;NC_003888.3_NC_003888.3_4415;NC_003888.3_NC_003888.3_4416;NC_003888.3_NC_003888.3_4417 PF01636;PF00975;PF00561 PF01135;PF13847;PF13578;PF12697;PF00975;PF00561;PF10230;PF03096;PF12695;PF12146;PF16859;PF00440;PF00069;PF07714;PF01636;PF14200;PF00652 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4903478-4914412.1 4903478 4914412 10934 11 35 3 0.57988 antibacterial 0.53 0.12 0.11 0.19 0.02 0.05 0.41 0.07 0.33 0.04 0.11 NC_003888.3_NC_003888.3_4420;NC_003888.3_NC_003888.3_4421;NC_003888.3_NC_003888.3_4422;NC_003888.3_NC_003888.3_4423;NC_003888.3_NC_003888.3_4424;NC_003888.3_NC_003888.3_4425;NC_003888.3_NC_003888.3_4426;NC_003888.3_NC_003888.3_4427;NC_003888.3_NC_003888.3_4428;NC_003888.3_NC_003888.3_4429;NC_003888.3_NC_003888.3_4430 PF01636;PF04055;PF00903 PF13564;PF13280;PF02082;PF08279;PF12840;PF08220;PF09339;PF13412;PF12802;PF13542;PF13551;PF13384;PF13518;PF13404;PF00903;PF12681;PF00069;PF07714;PF01636;PF13385;PF00069;PF07714;PF01636;PF00652;PF13396;PF01977;PF01040;PF02441;PF12802;PF01047;PF13412;PF13404;PF13545;PF01037;PF04055 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4915291-4973632.1 4915291 4973632 58341 57 75 13 0.85901 0.40 0.27 0.26 0.18 0.00 0.22 0.18 0.42 0.04 0.32 0.02 NC_003888.3_NC_003888.3_4432;NC_003888.3_NC_003888.3_4433;NC_003888.3_NC_003888.3_4434;NC_003888.3_NC_003888.3_4435;NC_003888.3_NC_003888.3_4436;NC_003888.3_NC_003888.3_4437;NC_003888.3_NC_003888.3_4438;NC_003888.3_NC_003888.3_4439;NC_003888.3_NC_003888.3_4440;NC_003888.3_NC_003888.3_4441;NC_003888.3_NC_003888.3_4442;NC_003888.3_NC_003888.3_4443;NC_003888.3_NC_003888.3_4444;NC_003888.3_NC_003888.3_4445;NC_003888.3_NC_003888.3_4446;NC_003888.3_NC_003888.3_4447;NC_003888.3_NC_003888.3_4448;NC_003888.3_NC_003888.3_4449;NC_003888.3_NC_003888.3_4450;NC_003888.3_NC_003888.3_4451;NC_003888.3_NC_003888.3_4452;NC_003888.3_NC_003888.3_4453;NC_003888.3_NC_003888.3_4454;NC_003888.3_NC_003888.3_4455;NC_003888.3_NC_003888.3_4456;NC_003888.3_NC_003888.3_4457;NC_003888.3_NC_003888.3_4458;NC_003888.3_NC_003888.3_4459;NC_003888.3_NC_003888.3_4460;NC_003888.3_NC_003888.3_4461;NC_003888.3_NC_003888.3_4462;NC_003888.3_NC_003888.3_4463;NC_003888.3_NC_003888.3_4464;NC_003888.3_NC_003888.3_4465;NC_003888.3_NC_003888.3_4466;NC_003888.3_NC_003888.3_4467;NC_003888.3_NC_003888.3_4468;NC_003888.3_NC_003888.3_4469;NC_003888.3_NC_003888.3_4470;NC_003888.3_NC_003888.3_4471;NC_003888.3_NC_003888.3_4472;NC_003888.3_NC_003888.3_4473;NC_003888.3_NC_003888.3_4474;NC_003888.3_NC_003888.3_4475;NC_003888.3_NC_003888.3_4476;NC_003888.3_NC_003888.3_4477;NC_003888.3_NC_003888.3_4478;NC_003888.3_NC_003888.3_4479;NC_003888.3_NC_003888.3_4480;NC_003888.3_NC_003888.3_4481;NC_003888.3_NC_003888.3_4482;NC_003888.3_NC_003888.3_4483;NC_003888.3_NC_003888.3_4484;NC_003888.3_NC_003888.3_4485;NC_003888.3_NC_003888.3_4486;NC_003888.3_NC_003888.3_4487;NC_003888.3_NC_003888.3_4488 PF01636;PF02803;PF08242;PF00106;PF00108;PF08659;PF08241;PF00109;PF04055;PF00583;PF00501;PF01370;PF00535 PF13420;PF13673;PF00583;PF13508;PF13527;PF08445;PF14542;PF14012;PF00375;PF00440;PF01575;PF13561;PF00106;PF08659;PF01370;PF03435;PF00108;PF00109;PF02803;PF00501;PF13489;PF13847;PF08241;PF08242;PF13649;PF05175;PF00313;PF08206;PF02621;PF00069;PF07714;PF01636;PF01580;PF13401;PF02456;PF13555;PF16697;PF10224;PF06013;PF10824;PF14256;PF10099;PF16976;PF00437;PF01580;PF00005;PF06414;PF01926;PF13238;PF00482;PF00482;PF07811;PF13400;PF07811;PF13400;PF06013;PF06013;PF04149;PF13560;PF12844;PF13581;PF03704;PF13428;PF01478;PF04055;PF00704;PF01522;PF13641;PF00535;PF10111;PF13704;PF12804;PF13506;PF03142;PF13632 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4974811-4975796.1 4974811 4975796 985 2 7 2 0.72112 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_4490;NC_003888.3_NC_003888.3_4491 PF08241;PF08242 PF01209;PF13489;PF13847;PF13649;PF08241;PF08242;PF03793 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5055827-5059681.1 5055827 5059681 3854 2 10 2 0.66280 antibacterial 0.59 0.18 0.32 0.32 Polyketide 0.01 0.36 0.20 0.53 0.05 0.02 0.04 NC_003888.3_NC_003888.3_4566;NC_003888.3_NC_003888.3_4567 PF00107;PF01370 PF13676;PF00931;PF13401;PF13424;PF13374;PF13460;PF05368;PF01073;PF01370;PF00107 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5061858-5063669.1 5061858 5063669 1811 3 9 2 0.55600 0.40 0.25 0.23 0.05 0.01 0.09 0.26 0.05 0.21 0.00 0.38 NC_003888.3_NC_003888.3_4570;NC_003888.3_NC_003888.3_4571;NC_003888.3_NC_003888.3_4572 PF08241;PF08242 PF13452;PF01575;PF13452;PF01575;PF13847;PF13489;PF08241;PF08242;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5297580-5307574.1 5297580 5307574 9994 7 20 4 0.74276 0.26 0.39 0.16 0.11 0.04 0.00 0.15 0.12 0.03 0.33 0.41 NC_003888.3_NC_003888.3_4799;NC_003888.3_NC_003888.3_4800;NC_003888.3_NC_003888.3_4801;NC_003888.3_NC_003888.3_4802;NC_003888.3_NC_003888.3_4803;NC_003888.3_NC_003888.3_4804;NC_003888.3_NC_003888.3_4805 PF01266;PF01494;PF01593;PF00535 PF01642;PF01494;PF05834;PF03486;PF01593;PF07992;PF01266;PF00890;PF13450;PF01946;PF13738;PF00440;PF02909;PF13489;PF13578;PF13578;PF09586;PF13641;PF00535;PF10111 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5510515-5536994.1 5510515 5536994 26479 28 70 17 0.86345 antibacterial 0.56 0.41 0.15 0.20 Polyketide 0.02 0.09 0.05 0.90 0.00 0.05 0.01 NC_003888.3_NC_003888.3_4999;NC_003888.3_NC_003888.3_5000;NC_003888.3_NC_003888.3_5001;NC_003888.3_NC_003888.3_5002;NC_003888.3_NC_003888.3_5003;NC_003888.3_NC_003888.3_5004;NC_003888.3_NC_003888.3_5005;NC_003888.3_NC_003888.3_5006;NC_003888.3_NC_003888.3_5007;NC_003888.3_NC_003888.3_5008;NC_003888.3_NC_003888.3_5009;NC_003888.3_NC_003888.3_5010;NC_003888.3_NC_003888.3_5011;NC_003888.3_NC_003888.3_5012;NC_003888.3_NC_003888.3_5013;NC_003888.3_NC_003888.3_5014;NC_003888.3_NC_003888.3_5015;NC_003888.3_NC_003888.3_5016;NC_003888.3_NC_003888.3_5017;NC_003888.3_NC_003888.3_5018;NC_003888.3_NC_003888.3_5019;NC_003888.3_NC_003888.3_5020;NC_003888.3_NC_003888.3_5021;NC_003888.3_NC_003888.3_5022;NC_003888.3_NC_003888.3_5023;NC_003888.3_NC_003888.3_5024;NC_003888.3_NC_003888.3_5025;NC_003888.3_NC_003888.3_5026 PF02801;PF08242;PF00106;PF02770;PF08240;PF00725;PF08659;PF08028;PF00109;PF00441;PF08241;PF01243;PF03992;PF02737;PF00107;PF01370;PF03364 PF00440;PF16884;PF08240;PF00107;PF13602;PF00246;PF13577;PF12680;PF02737;PF00725;PF08240;PF00107;PF13602;PF08240;PF00107;PF13602;PF07690;PF00083;PF05977;PF13347;PF01243;PF12900;PF05368;PF01370;PF16363;PF13460;PF02770;PF08028;PF00441;PF03992;PF02909;PF00440;PF07690;PF06779;PF00083;PF03176;PF12349;PF00486;PF03704;PF13561;PF00106;PF08659;PF01370;PF00109;PF02801;PF00109;PF02801;PF00550;PF10604;PF03364;PF00753;PF01613;PF04978;PF12867;PF13489;PF13847;PF01209;PF05175;PF08241;PF13578;PF08242;PF13649;PF03848;PF05724;PF13560;PF12844;PF13443;PF13413;PF01381;PF07883 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5577211-5580068.1 5577211 5580068 2857 3 12 0 0.54923 antibacterial 0.59 0.10 0.23 0.07 RiPP 0.00 0.01 0.04 0.03 0.91 0.00 0.01 NC_003888.3_NC_003888.3_5060;NC_003888.3_NC_003888.3_5061;NC_003888.3_NC_003888.3_5062 PF00005;PF13555;PF13304;PF12679;PF01061;PF12730;PF12698;PF13346;PF03379;PF06182;PF07730;PF13581 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5715871-5718468.1 5715871 5718468 2597 3 17 3 0.71334 0.48 0.36 0.17 0.07 RiPP 0.02 0.06 0.10 0.12 0.66 0.02 0.04 NC_003888.3_NC_003888.3_5189;NC_003888.3_NC_003888.3_5190;NC_003888.3_NC_003888.3_5191 PF08241;PF08242;PF00891 PF13489;PF05175;PF02353;PF00891;PF13847;PF00398;PF01209;PF13649;PF08241;PF08242;PF02463;PF13304;PF00005;PF13191;PF13476;PF13555;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5765662-5797479.1 5765662 5797479 31817 37 60 9 0.74897 antibacterial 0.58 0.46 0.18 0.14 Polyketide 0.02 0.07 0.07 0.84 0.04 0.02 0.02 NC_003888.3_NC_003888.3_5224;NC_003888.3_NC_003888.3_5225;NC_003888.3_NC_003888.3_5226;NC_003888.3_NC_003888.3_5227;NC_003888.3_NC_003888.3_5228;NC_003888.3_NC_003888.3_5229;NC_003888.3_NC_003888.3_5230;NC_003888.3_NC_003888.3_5231;NC_003888.3_NC_003888.3_5232;NC_003888.3_NC_003888.3_5233;NC_003888.3_NC_003888.3_5234;NC_003888.3_NC_003888.3_5235;NC_003888.3_NC_003888.3_5236;NC_003888.3_NC_003888.3_5237;NC_003888.3_NC_003888.3_5238;NC_003888.3_NC_003888.3_5239;NC_003888.3_NC_003888.3_5240;NC_003888.3_NC_003888.3_5241;NC_003888.3_NC_003888.3_5242;NC_003888.3_NC_003888.3_5243;NC_003888.3_NC_003888.3_5244;NC_003888.3_NC_003888.3_5245;NC_003888.3_NC_003888.3_5246;NC_003888.3_NC_003888.3_5247;NC_003888.3_NC_003888.3_5248;NC_003888.3_NC_003888.3_5249;NC_003888.3_NC_003888.3_5250;NC_003888.3_NC_003888.3_5251;NC_003888.3_NC_003888.3_5252;NC_003888.3_NC_003888.3_5253;NC_003888.3_NC_003888.3_5254;NC_003888.3_NC_003888.3_5255;NC_003888.3_NC_003888.3_5256;NC_003888.3_NC_003888.3_5257;NC_003888.3_NC_003888.3_5258;NC_003888.3_NC_003888.3_5259;NC_003888.3_NC_003888.3_5260 PF01266;PF02801;PF01494;PF00108;PF00109;PF01243;PF03992;PF01050;PF03364 PF05331;PF03029;PF07992;PF01494;PF00070;PF00877;PF07813;PF13560;PF00440;PF09339;PF13340;PF01609;PF13359;PF13612;PF13586;PF11583;PF11695;PF00905;PF01098;PF08239;PF02518;PF00512;PF00672;PF00782;PF05706;PF08378;PF02735;PF13628;PF01243;PF16242;PF11350;PF04673;PF10604;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF12852;PF11699;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF01266;PF01734;PF01037;PF13412;PF12802;PF09339;PF13404;PF00881;PF13613;PF04545;PF01609;PF13359 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5852345-5852987.1 5852345 5852987 642 1 1 0 0.57111 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5315 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5933595-5938532.1 5933595 5938532 4937 3 17 0 0.55002 antibacterial 0.74 0.10 0.12 0.11 RiPP 0.00 0.04 0.08 0.03 0.85 0.00 0.00 NC_003888.3_NC_003888.3_5381;NC_003888.3_NC_003888.3_5382;NC_003888.3_NC_003888.3_5383 PF13401;PF00005;PF13191;PF06414;PF01935;PF00664;PF02463;PF00005;PF13191;PF00664;PF00005;PF13481;PF13604;PF13476;PF13191;PF02702;PF13304 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5970587-5971837.1 5970587 5971837 1250 3 3 0 0.59048 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5414;NC_003888.3_NC_003888.3_5415;NC_003888.3_NC_003888.3_5416 PF00440;PF14012;PF13828 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6027788-6046270.1 6027788 6046270 18482 15 22 1 0.74782 antibacterial 0.64 0.07 0.12 0.18 0.00 0.05 0.38 0.21 0.18 0.02 0.19 NC_003888.3_NC_003888.3_5463;NC_003888.3_NC_003888.3_5464;NC_003888.3_NC_003888.3_5465;NC_003888.3_NC_003888.3_5466;NC_003888.3_NC_003888.3_5467;NC_003888.3_NC_003888.3_5468;NC_003888.3_NC_003888.3_5469;NC_003888.3_NC_003888.3_5470;NC_003888.3_NC_003888.3_5471;NC_003888.3_NC_003888.3_5472;NC_003888.3_NC_003888.3_5473;NC_003888.3_NC_003888.3_5474;NC_003888.3_NC_003888.3_5475;NC_003888.3_NC_003888.3_5476;NC_003888.3_NC_003888.3_5477 PF01039 PF00440;PF04264;PF08124;PF02278;PF02884;PF01039;PF06833;PF13822;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF10370;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6242667-6244234.1 6242667 6244234 1567 2 2 0 0.63827 antibacterial 0.87 0.09 0.17 0.29 RiPP 0.00 0.01 0.02 0.04 0.89 0.02 0.04 NC_003888.3_NC_003888.3_5653;NC_003888.3_NC_003888.3_5654 PF00082;PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6432592-6469131.1 6432592 6469131 36539 26 87 23 0.94502 0.48 0.43 0.14 0.24 NRP-Polyketide 0.01 0.69 0.02 0.94 0.00 0.02 0.00 NC_003888.3_NC_003888.3_5808;NC_003888.3_NC_003888.3_5809;NC_003888.3_NC_003888.3_5810;NC_003888.3_NC_003888.3_5811;NC_003888.3_NC_003888.3_5812;NC_003888.3_NC_003888.3_5813;NC_003888.3_NC_003888.3_5814;NC_003888.3_NC_003888.3_5815;NC_003888.3_NC_003888.3_5816;NC_003888.3_NC_003888.3_5817;NC_003888.3_NC_003888.3_5818;NC_003888.3_NC_003888.3_5819;NC_003888.3_NC_003888.3_5820;NC_003888.3_NC_003888.3_5821;NC_003888.3_NC_003888.3_5822;NC_003888.3_NC_003888.3_5823;NC_003888.3_NC_003888.3_5824;NC_003888.3_NC_003888.3_5825;NC_003888.3_NC_003888.3_5826;NC_003888.3_NC_003888.3_5827;NC_003888.3_NC_003888.3_5828;NC_003888.3_NC_003888.3_5829;NC_003888.3_NC_003888.3_5830;NC_003888.3_NC_003888.3_5831;NC_003888.3_NC_003888.3_5832;NC_003888.3_NC_003888.3_5833 PF08242;PF00106;PF02770;PF00108;PF00891;PF00698;PF00441;PF00501;PF01370;PF00155;PF08545;PF08028;PF07993;PF00355;PF02719;PF00975;PF01553;PF08241;PF02771;PF04321;PF02801;PF08541;PF00109 PF00486;PF03704;PF00109;PF00108;PF02801;PF16197;PF02771;PF02770;PF00441;PF08028;PF11639;PF00196;PF08281;PF04545;PF13936;PF00072;PF01648;PF09534;PF02801;PF00109;PF00108;PF00550;PF00108;PF08545;PF08541;PF00550;PF00550;PF00155;PF01053;PF01212;PF00501;PF13193;PF00501;PF00550;PF00109;PF00108;PF02801;PF16197;PF00698;PF00155;PF01053;PF04321;PF01370;PF02719;PF05368;PF00106;PF16363;PF01073;PF13460;PF07993;PF00975;PF12697;PF12147;PF00891;PF13489;PF06080;PF05175;PF12847;PF01209;PF02353;PF13847;PF08003;PF05401;PF02390;PF08241;PF13578;PF08242;PF13649;PF01739;PF01326;PF00391;PF00355;PF00848;PF01222;PF06966;PF02544;PF04191;PF01553;PF13520;PF02705;PF01938;PF01135;PF05175;PF13847;PF13649;PF02254;PF05958 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6514552-6529472.1 6514552 6529472 14920 11 23 1 0.59311 0.36 0.15 0.42 0.16 0.07 0.10 0.32 0.29 0.18 0.02 0.07 NC_003888.3_NC_003888.3_5876;NC_003888.3_NC_003888.3_5877;NC_003888.3_NC_003888.3_5878;NC_003888.3_NC_003888.3_5879;NC_003888.3_NC_003888.3_5880;NC_003888.3_NC_003888.3_5881;NC_003888.3_NC_003888.3_5882;NC_003888.3_NC_003888.3_5883;NC_003888.3_NC_003888.3_5884;NC_003888.3_NC_003888.3_5885;NC_003888.3_NC_003888.3_5886 PF01494 PF07690;PF00083;PF13347;PF01494;PF00070;PF06353;PF07690;PF00083;PF06609;PF00440;PF16859;PF01925;PF08937;PF13676;PF01582;PF00400;PF00553;PF00041;PF00704;PF00440;PF07690;PF05977;PF13347 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6552934-6557688.1 6552934 6557688 4754 4 9 2 0.58364 antibacterial 0.67 0.16 0.20 0.24 Polyketide 0.01 0.02 0.30 0.61 0.06 0.01 0.03 NC_003888.3_NC_003888.3_5907;NC_003888.3_NC_003888.3_5908;NC_003888.3_NC_003888.3_5909;NC_003888.3_NC_003888.3_5910 PF00378;PF01494 PF13581;PF00378;PF16113;PF01494;PF07992;PF13450;PF00724;PF00685;PF13469 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6558618-6560310.1 6558618 6560310 1692 1 2 1 0.54471 antibacterial 0.92 0.01 0.04 0.07 Polyketide 0.00 0.23 0.23 0.54 0.00 0.00 0.00 NC_003888.3_NC_003888.3_5912 PF00501 PF13193;PF00501 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6730692-6730926.1 6730692 6730926 234 1 1 0 0.67083 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6060 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6731916-6732270.1 6731916 6732270 354 1 1 0 0.53821 antibacterial 0.87 0.07 0.17 0.26 0.00 0.07 0.06 0.37 0.24 0.02 0.28 NC_003888.3_NC_003888.3_6062 PF13581 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6740465-6743446.1 6740465 6743446 2981 4 9 0 0.64534 antibacterial 0.79 0.07 0.07 0.27 0.00 0.11 0.09 0.31 0.32 0.02 0.19 NC_003888.3_NC_003888.3_6071;NC_003888.3_NC_003888.3_6072;NC_003888.3_NC_003888.3_6073;NC_003888.3_NC_003888.3_6074 PF07730;PF00072;PF00196;PF08281;PF04545;PF13384;PF14351;PF11716;PF12867 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6780614-6817281.1 6780614 6817281 36667 27 75 10 0.91087 0.39 0.22 0.18 0.24 Saccharide 0.01 0.22 0.17 0.10 0.01 0.52 0.01 NC_003888.3_NC_003888.3_6107;NC_003888.3_NC_003888.3_6108;NC_003888.3_NC_003888.3_6109;NC_003888.3_NC_003888.3_6110;NC_003888.3_NC_003888.3_6111;NC_003888.3_NC_003888.3_6112;NC_003888.3_NC_003888.3_6113;NC_003888.3_NC_003888.3_6114;NC_003888.3_NC_003888.3_6115;NC_003888.3_NC_003888.3_6116;NC_003888.3_NC_003888.3_6117;NC_003888.3_NC_003888.3_6118;NC_003888.3_NC_003888.3_6119;NC_003888.3_NC_003888.3_6120;NC_003888.3_NC_003888.3_6121;NC_003888.3_NC_003888.3_6122;NC_003888.3_NC_003888.3_6123;NC_003888.3_NC_003888.3_6124;NC_003888.3_NC_003888.3_6125;NC_003888.3_NC_003888.3_6126;NC_003888.3_NC_003888.3_6127;NC_003888.3_NC_003888.3_6128;NC_003888.3_NC_003888.3_6129;NC_003888.3_NC_003888.3_6130;NC_003888.3_NC_003888.3_6131;NC_003888.3_NC_003888.3_6132;NC_003888.3_NC_003888.3_6133 PF00106;PF02719;PF00702;PF00535;PF01075;PF00534;PF00501;PF01370;PF04321;PF00561 PF12697;PF12146;PF00561;PF03372;PF10604;PF01522;PF04321;PF01370;PF00106;PF16363;PF01073;PF13460;PF02254;PF02719;PF02543;PF16861;PF13641;PF00535;PF13506;PF13632;PF02709;PF13344;PF13419;PF00702;PF13242;PF01075;PF00534;PF13692;PF13524;PF13439;PF13579;PF13477;PF08323;PF13692;PF00534;PF13524;PF13580;PF01380;PF00294;PF01467;PF01075;PF13641;PF00535;PF13506;PF13632;PF13641;PF00535;PF04230;PF06224;PF00196;PF08281;PF14559;PF13401;PF13191;PF13481;PF05729;PF13604;PF00005;PF00196;PF04545;PF13185;PF01590;PF13492;PF00501;PF13193;PF00501;PF13193;PF03752;PF00089;PF13365;PF13517;PF01839;PF02776;PF00205;PF02775 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6821468-6822308.1 6821468 6822308 840 1 1 0 0.55098 antibacterial 0.80 0.06 0.16 0.25 0.00 0.09 0.11 0.30 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6138 PF01261 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6831345-6850522.1 6831345 6850522 19177 10 14 3 0.68857 0.36 0.21 0.17 0.11 Other 0.01 0.31 0.53 0.20 0.01 0.06 0.03 NC_003888.3_NC_003888.3_6150;NC_003888.3_NC_003888.3_6151;NC_003888.3_NC_003888.3_6152;NC_003888.3_NC_003888.3_6153;NC_003888.3_NC_003888.3_6154;NC_003888.3_NC_003888.3_6155;NC_003888.3_NC_003888.3_6156;NC_003888.3_NC_003888.3_6157;NC_003888.3_NC_003888.3_6158;NC_003888.3_NC_003888.3_6159 PF04183;PF00155;PF01041 PF00300;PF13385;PF05593;PF00155;PF00266;PF01041;PF01638;PF02036;PF00092;PF13519;PF06276;PF04183;PF04183;PF06276 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6859657-6862082.1 6859657 6862082 2425 4 7 0 0.61623 antibacterial 0.81 0.12 0.15 0.30 0.00 0.06 0.09 0.29 0.35 0.02 0.22 NC_003888.3_NC_003888.3_6167;NC_003888.3_NC_003888.3_6168;NC_003888.3_NC_003888.3_6169;NC_003888.3_NC_003888.3_6170 PF04149;PF13560;PF01381;PF12844;PF13581;PF11716;PF07398 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6889623-6949758.1 6889623 6949758 60135 26 107 23 0.84593 antibacterial 0.67 0.30 0.06 0.09 Polyketide 0.00 0.08 0.01 0.97 0.02 0.04 0.01 NC_003888.3_NC_003888.3_6196;NC_003888.3_NC_003888.3_6197;NC_003888.3_NC_003888.3_6198;NC_003888.3_NC_003888.3_6199;NC_003888.3_NC_003888.3_6200;NC_003888.3_NC_003888.3_6201;NC_003888.3_NC_003888.3_6202;NC_003888.3_NC_003888.3_6203;NC_003888.3_NC_003888.3_6204;NC_003888.3_NC_003888.3_6205;NC_003888.3_NC_003888.3_6206;NC_003888.3_NC_003888.3_6207;NC_003888.3_NC_003888.3_6208;NC_003888.3_NC_003888.3_6209;NC_003888.3_NC_003888.3_6210;NC_003888.3_NC_003888.3_6211;NC_003888.3_NC_003888.3_6212;NC_003888.3_NC_003888.3_6213;NC_003888.3_NC_003888.3_6214;NC_003888.3_NC_003888.3_6215;NC_003888.3_NC_003888.3_6216;NC_003888.3_NC_003888.3_6217;NC_003888.3_NC_003888.3_6218;NC_003888.3_NC_003888.3_6219;NC_003888.3_NC_003888.3_6220;NC_003888.3_NC_003888.3_6221 PF00106;PF02786;PF00108;PF00289;PF00698;PF08990;PF01370;PF00202;PF03756;PF01039;PF07993;PF02719;PF00975;PF01494;PF02737;PF02785;PF04321;PF01266;PF02801;PF08659;PF00109;PF04820;PF00561 PF00106;PF08659;PF13561;PF00440;PF03756;PF05368;PF03435;PF01370;PF13460;PF02518;PF13581;PF07730;PF02775;PF17147;PF01855;PF02776;PF01558;PF00364;PF13533;PF02785;PF02786;PF15632;PF02222;PF07478;PF00289;PF10518;PF01565;PF08031;PF07993;PF01370;PF16363;PF04321;PF01073;PF00550;PF08659;PF00106;PF13561;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00698;PF00109;PF00108;PF00550;PF08659;PF00106;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF08990;PF00550;PF08659;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF00109;PF00108;PF00106;PF00698;PF01494;PF12831;PF00890;PF00561;PF12697;PF12146;PF07690;PF12832;PF03209;PF05977;PF00083;PF13347;PF00202;PF00486;PF03704;PF10518;PF01565;PF08031;PF13561;PF00106;PF08659;PF13460;PF05368;PF01039;PF13822;PF00440;PF00975;PF12697;PF03959;PF00486;PF03704;PF01266;PF01262;PF07992;PF02737;PF00890;PF13450;PF04820 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6962348-6966485.1 6962348 6966485 4137 4 9 3 0.54483 antibacterial 0.64 0.28 0.06 0.23 0.05 0.03 0.22 0.23 0.03 0.07 0.44 NC_003888.3_NC_003888.3_6234;NC_003888.3_NC_003888.3_6235;NC_003888.3_NC_003888.3_6236;NC_003888.3_NC_003888.3_6237 PF01593;PF01494;PF00903 PF01557;PF00903;PF13468;PF04909;PF01494;PF01593;PF07992;PF00890;PF13450 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7078584-7118257.1 7078584 7118257 39673 25 58 6 0.86082 antibacterial 0.66 0.24 0.15 0.14 NRP 0.02 0.81 0.14 0.05 0.01 0.03 0.00 NC_003888.3_NC_003888.3_6336;NC_003888.3_NC_003888.3_6337;NC_003888.3_NC_003888.3_6338;NC_003888.3_NC_003888.3_6339;NC_003888.3_NC_003888.3_6340;NC_003888.3_NC_003888.3_6341;NC_003888.3_NC_003888.3_6342;NC_003888.3_NC_003888.3_6343;NC_003888.3_NC_003888.3_6344;NC_003888.3_NC_003888.3_6345;NC_003888.3_NC_003888.3_6346;NC_003888.3_NC_003888.3_6347;NC_003888.3_NC_003888.3_6348;NC_003888.3_NC_003888.3_6349;NC_003888.3_NC_003888.3_6350;NC_003888.3_NC_003888.3_6351;NC_003888.3_NC_003888.3_6352;NC_003888.3_NC_003888.3_6353;NC_003888.3_NC_003888.3_6354;NC_003888.3_NC_003888.3_6355;NC_003888.3_NC_003888.3_6356;NC_003888.3_NC_003888.3_6357;NC_003888.3_NC_003888.3_6358;NC_003888.3_NC_003888.3_6359;NC_003888.3_NC_003888.3_6360 PF00975;PF06339;PF00668;PF01050;PF00501;PF00202 PF00202;PF07905;PF13556;PF00795;PF01979;PF07969;PF00296;PF02133;PF13229;PF05048;PF12708;PF12218;PF12079;PF02627;PF07730;PF13581;PF00072;PF08281;PF04545;PF00196;PF03099;PF13581;PF07730;PF00672;PF12833;PF00165;PF05977;PF07690;PF01569;PF00041;PF03422;PF07971;PF14403;PF04174;PF05977;PF07690;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00975;PF05899;PF07883;PF13434;PF07992;PF07883;PF06339;PF01050;PF11699;PF00190;PF02311;PF05899;PF12852;PF14525 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7126476-7127388.1 7126476 7127388 912 1 1 0 0.53113 antibacterial 0.88 0.06 0.16 0.24 0.00 0.08 0.07 0.34 0.22 0.03 0.31 NC_003888.3_NC_003888.3_6368 PF04072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7233668-7252420.1 7233668 7252420 18752 13 37 8 0.82411 0.29 0.34 0.32 0.12 0.04 0.24 0.20 0.40 0.06 0.06 0.12 NC_003888.3_NC_003888.3_6465;NC_003888.3_NC_003888.3_6466;NC_003888.3_NC_003888.3_6467;NC_003888.3_NC_003888.3_6468;NC_003888.3_NC_003888.3_6469;NC_003888.3_NC_003888.3_6470;NC_003888.3_NC_003888.3_6471;NC_003888.3_NC_003888.3_6472;NC_003888.3_NC_003888.3_6473;NC_003888.3_NC_003888.3_6474;NC_003888.3_NC_003888.3_6475;NC_003888.3_NC_003888.3_6476;NC_003888.3_NC_003888.3_6477 PF08242;PF00106;PF02719;PF00248;PF08659;PF08241;PF00501;PF01370 PF01329;PF13489;PF05401;PF01209;PF13847;PF02353;PF08241;PF05148;PF08242;PF13649;PF13517;PF01839;PF10099;PF00553;PF15902;PF02011;PF16640;PF00553;PF00553;PF01341;PF13489;PF13847;PF13649;PF08241;PF08242;PF00106;PF08659;PF02719;PF01370;PF03807;PF13460;PF13561;PF00248;PF00501;PF07690;PF00083;PF06609 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7385659-7388675.1 7385659 7388675 3016 3 7 1 0.64353 antibacterial 0.51 0.16 0.12 0.15 Saccharide 0.00 0.01 0.02 0.01 0.21 0.71 0.04 NC_003888.3_NC_003888.3_6571;NC_003888.3_NC_003888.3_6572;NC_003888.3_NC_003888.3_6573 PF00534 PF01242;PF13579;PF13439;PF00534;PF13692;PF13847;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7422738-7424568.1 7422738 7424568 1830 1 3 0 0.50924 antibacterial 0.71 0.03 0.12 0.16 RiPP 0.00 0.02 0.09 0.02 0.84 0.00 0.03 NC_003888.3_NC_003888.3_6604 PF00664;PF00005;PF13191 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7426395-7426995.1 7426395 7426995 600 1 10 0 0.50130 antibacterial 0.80 0.11 0.10 0.26 0.00 0.08 0.21 0.23 0.36 0.01 0.16 NC_003888.3_NC_003888.3_6606 PF00196;PF08279;PF04545;PF08281;PF14493;PF09339;PF13384;PF13412;PF13518;PF00072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7513979-7524428.1 7513979 7524428 10449 10 28 7 0.71486 0.33 0.43 0.12 0.05 Terpene 0.04 0.04 0.10 0.03 0.25 0.04 0.55 NC_003888.3_NC_003888.3_6677;NC_003888.3_NC_003888.3_6678;NC_003888.3_NC_003888.3_6679;NC_003888.3_NC_003888.3_6680;NC_003888.3_NC_003888.3_6681;NC_003888.3_NC_003888.3_6682;NC_003888.3_NC_003888.3_6683;NC_003888.3_NC_003888.3_6684;NC_003888.3_NC_003888.3_6685;NC_003888.3_NC_003888.3_6686 PF01266;PF00494;PF01494;PF00432;PF00348;PF04055;PF01593 PF01061;PF12698;PF00005;PF13555;PF13401;PF13304;PF13476;PF00494;PF00494;PF07992;PF01266;PF00070;PF00890;PF03486;PF12831;PF01494;PF01134;PF13450;PF01593;PF00348;PF13249;PF13243;PF00432;PF01048;PF04055;PF13394;PF13353;PF11946 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7527583-7528969.1 7527583 7528969 1386 1 1 1 0.51596 antibacterial 0.85 0.06 0.20 0.27 0.00 0.01 0.50 0.02 0.02 0.00 0.45 NC_003888.3_NC_003888.3_6689 PF00202 PF00202 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7529794-7530592.1 7529794 7530592 798 1 1 0 0.51222 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6692 PF13350 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7532360-7533986.1 7532360 7533986 1626 2 6 0 0.52073 antibacterial 0.59 0.05 0.13 0.19 Other 0.00 0.05 0.52 0.18 0.09 0.03 0.17 NC_003888.3_NC_003888.3_6694;NC_003888.3_NC_003888.3_6695 PF00657;PF13472;PF13977;PF16859;PF13305;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7536361-7558856.1 7536361 7558856 22495 19 43 14 0.71909 0.36 0.20 0.27 0.26 Polyketide 0.00 0.31 0.15 0.61 0.05 0.02 0.05 NC_003888.3_NC_003888.3_6698;NC_003888.3_NC_003888.3_6699;NC_003888.3_NC_003888.3_6700;NC_003888.3_NC_003888.3_6701;NC_003888.3_NC_003888.3_6702;NC_003888.3_NC_003888.3_6703;NC_003888.3_NC_003888.3_6704;NC_003888.3_NC_003888.3_6705;NC_003888.3_NC_003888.3_6706;NC_003888.3_NC_003888.3_6707;NC_003888.3_NC_003888.3_6708;NC_003888.3_NC_003888.3_6709;NC_003888.3_NC_003888.3_6710;NC_003888.3_NC_003888.3_6711;NC_003888.3_NC_003888.3_6712;NC_003888.3_NC_003888.3_6713;NC_003888.3_NC_003888.3_6714;NC_003888.3_NC_003888.3_6715;NC_003888.3_NC_003888.3_6716 PF02803;PF00378;PF00171;PF02770;PF08240;PF00725;PF00108;PF08028;PF00109;PF00441;PF02771;PF02737;PF00107;PF00501 PF14246;PF00440;PF08279;PF13384;PF09995;PF00440;PF13602;PF00107;PF16912;PF00291;PF08240;PF14232;PF14231;PF00440;PF02515;PF00296;PF02771;PF14749;PF02770;PF00441;PF08028;PF00108;PF00109;PF02803;PF00378;PF16113;PF02737;PF03446;PF00725;PF00501;PF00441;PF08028;PF02770;PF02771;PF00440;PF13309;PF00356;PF00171;PF02518;PF03259;PF05331;PF09339;PF03029 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7614563-7615928.1 7614563 7615928 1365 1 1 0 0.59332 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6760 PF03771 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7623284-7715706.1 7623284 7715706 92422 100 87 10 0.84839 antibacterial 0.52 0.14 0.13 0.20 RiPP 0.00 0.07 0.26 0.10 0.51 0.10 0.01 NC_003888.3_NC_003888.3_6768;NC_003888.3_NC_003888.3_6769;NC_003888.3_NC_003888.3_6770;NC_003888.3_NC_003888.3_6771;NC_003888.3_NC_003888.3_6772;NC_003888.3_NC_003888.3_6773;NC_003888.3_NC_003888.3_6774;NC_003888.3_NC_003888.3_6775;NC_003888.3_NC_003888.3_6776;NC_003888.3_NC_003888.3_6777;NC_003888.3_NC_003888.3_6778;NC_003888.3_NC_003888.3_6779;NC_003888.3_NC_003888.3_6780;NC_003888.3_NC_003888.3_6781;NC_003888.3_NC_003888.3_6782;NC_003888.3_NC_003888.3_6783;NC_003888.3_NC_003888.3_6784;NC_003888.3_NC_003888.3_6785;NC_003888.3_NC_003888.3_6786;NC_003888.3_NC_003888.3_6787;NC_003888.3_NC_003888.3_6788;NC_003888.3_NC_003888.3_6789;NC_003888.3_NC_003888.3_6790;NC_003888.3_NC_003888.3_6791;NC_003888.3_NC_003888.3_6792;NC_003888.3_NC_003888.3_6793;NC_003888.3_NC_003888.3_6794;NC_003888.3_NC_003888.3_6795;NC_003888.3_NC_003888.3_6796;NC_003888.3_NC_003888.3_6797;NC_003888.3_NC_003888.3_6798;NC_003888.3_NC_003888.3_6799;NC_003888.3_NC_003888.3_6800;NC_003888.3_NC_003888.3_6801;NC_003888.3_NC_003888.3_6802;NC_003888.3_NC_003888.3_6803;NC_003888.3_NC_003888.3_6804;NC_003888.3_NC_003888.3_6805;NC_003888.3_NC_003888.3_6806;NC_003888.3_NC_003888.3_6807;NC_003888.3_NC_003888.3_6808;NC_003888.3_NC_003888.3_6809;NC_003888.3_NC_003888.3_6810;NC_003888.3_NC_003888.3_6811;NC_003888.3_NC_003888.3_6812;NC_003888.3_NC_003888.3_6813;NC_003888.3_NC_003888.3_6814;NC_003888.3_NC_003888.3_6815;NC_003888.3_NC_003888.3_6816;NC_003888.3_NC_003888.3_6817;NC_003888.3_NC_003888.3_6818;NC_003888.3_NC_003888.3_6819;NC_003888.3_NC_003888.3_6820;NC_003888.3_NC_003888.3_6821;NC_003888.3_NC_003888.3_6822;NC_003888.3_NC_003888.3_6823;NC_003888.3_NC_003888.3_6824;NC_003888.3_NC_003888.3_6825;NC_003888.3_NC_003888.3_6826;NC_003888.3_NC_003888.3_6827;NC_003888.3_NC_003888.3_6828;NC_003888.3_NC_003888.3_6829;NC_003888.3_NC_003888.3_6830;NC_003888.3_NC_003888.3_6831;NC_003888.3_NC_003888.3_6832;NC_003888.3_NC_003888.3_6833;NC_003888.3_NC_003888.3_6834;NC_003888.3_NC_003888.3_6835;NC_003888.3_NC_003888.3_6836;NC_003888.3_NC_003888.3_6837;NC_003888.3_NC_003888.3_6838;NC_003888.3_NC_003888.3_6839;NC_003888.3_NC_003888.3_6840;NC_003888.3_NC_003888.3_6841;NC_003888.3_NC_003888.3_6842;NC_003888.3_NC_003888.3_6843;NC_003888.3_NC_003888.3_6844;NC_003888.3_NC_003888.3_6845;NC_003888.3_NC_003888.3_6846;NC_003888.3_NC_003888.3_6847;NC_003888.3_NC_003888.3_6848;NC_003888.3_NC_003888.3_6849;NC_003888.3_NC_003888.3_6850;NC_003888.3_NC_003888.3_6851;NC_003888.3_NC_003888.3_6852;NC_003888.3_NC_003888.3_6853;NC_003888.3_NC_003888.3_6854;NC_003888.3_NC_003888.3_6855;NC_003888.3_NC_003888.3_6856;NC_003888.3_NC_003888.3_6857;NC_003888.3_NC_003888.3_6858;NC_003888.3_NC_003888.3_6859;NC_003888.3_NC_003888.3_6860;NC_003888.3_NC_003888.3_6861;NC_003888.3_NC_003888.3_6862;NC_003888.3_NC_003888.3_6863;NC_003888.3_NC_003888.3_6864;NC_003888.3_NC_003888.3_6865;NC_003888.3_NC_003888.3_6866;NC_003888.3_NC_003888.3_6867 PF01636;PF02770;PF02786;PF00702;PF08028;PF00441;PF02771;PF05147;PF00535;PF04738 PF03771;PF03771;PF03771;PF00069;PF07714;PF01636;PF01163;PF00656;PF05762;PF13519;PF05496;PF07728;PF07726;PF00004;PF13191;PF00535;PF02195;PF12846;PF11203;PF00877;PF01555;PF16259;PF08239;PF01638;PF07690;PF15632;PF01071;PF13549;PF02786;PF02655;PF02222;PF07478;PF13535;PF07690;PF13419;PF00702;PF13242;PF03771;PF03771;PF13620;PF14686;PF13634;PF01068;PF13586;PF01609;PF13340;PF13340;PF01609;PF13586;PF03771;PF03771;PF03432;PF05713;PF02467;PF13730;PF13560;PF01135;PF13649;PF01209;PF00398;PF05175;PF13847;PF14028;PF05147;PF14028;PF04738;PF00196;PF13556;PF08279;PF08281;PF00441;PF08028;PF02770;PF02771;PF01590;PF03029;PF00009;PF05331;PF03259;PF02518;PF13581;PF00723;PF13424;PF01980;PF13581;PF01636;PF03881 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7725809-7731922.1 7725809 7731922 6113 8 8 0 0.55681 antibacterial 0.98 0.12 0.02 0.15 Terpene 0.00 0.09 0.06 0.15 0.06 0.03 0.64 NC_003888.3_NC_003888.3_6874;NC_003888.3_NC_003888.3_6875;NC_003888.3_NC_003888.3_6876;NC_003888.3_NC_003888.3_6877;NC_003888.3_NC_003888.3_6878;NC_003888.3_NC_003888.3_6879;NC_003888.3_NC_003888.3_6880;NC_003888.3_NC_003888.3_6881 PF04066;PF03334;PF16262;PF00293;PF04909;PF00120;PF16952;PF11338 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7733253-7734441.1 7733253 7734441 1188 1 3 3 0.50221 antibacterial 0.60 0.05 0.20 0.33 Polyketide 0.00 0.39 0.12 0.67 0.06 0.01 0.09 NC_003888.3_NC_003888.3_6884 PF02803;PF00109;PF00108 PF00108;PF00109;PF02803 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7759824-7770083.1 7759824 7770083 10259 7 11 1 0.67889 antibacterial 0.68 0.07 0.07 0.17 0.00 0.04 0.09 0.26 0.43 0.00 0.34 NC_003888.3_NC_003888.3_6909;NC_003888.3_NC_003888.3_6910;NC_003888.3_NC_003888.3_6911;NC_003888.3_NC_003888.3_6912;NC_003888.3_NC_003888.3_6913;NC_003888.3_NC_003888.3_6914;NC_003888.3_NC_003888.3_6915 PF00067 PF01400;PF13191;PF08281;PF00196;PF13384;PF12770;PF13424;PF13432;PF00082;PF04542;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7845510-7847365.1 7845510 7847365 1855 2 8 0 0.60306 antibacterial 0.82 0.06 0.17 0.25 0.00 0.06 0.16 0.21 0.33 0.00 0.26 NC_003888.3_NC_003888.3_6974;NC_003888.3_NC_003888.3_6975 PF00392;PF14502;PF13545;PF13518;PF08220;PF08279;PF05448;PF00326 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7902487-7918281.1 7902487 7918281 15794 13 35 9 0.71780 0.41 0.48 0.26 0.05 0.09 0.26 0.28 0.16 0.07 0.08 0.12 NC_003888.3_NC_003888.3_7027;NC_003888.3_NC_003888.3_7028;NC_003888.3_NC_003888.3_7029;NC_003888.3_NC_003888.3_7030;NC_003888.3_NC_003888.3_7031;NC_003888.3_NC_003888.3_7032;NC_003888.3_NC_003888.3_7033;NC_003888.3_NC_003888.3_7034;NC_003888.3_NC_003888.3_7035;NC_003888.3_NC_003888.3_7036;NC_003888.3_NC_003888.3_7037;NC_003888.3_NC_003888.3_7038;NC_003888.3_NC_003888.3_7039 PF01266;PF08242;PF02585;PF00171;PF08241;PF00583;PF00501;PF01370;PF04321 PF17197;PF00171;PF00501;PF02585;PF14759;PF07992;PF13738;PF00070;PF03486;PF01266;PF13450;PF01262;PF13489;PF08241;PF08242;PF13649;PF05891;PF02826;PF00033;PF14358;PF13631;PF12697;PF12695;PF12146;PF13673;PF00583;PF13508;PF00198;PF00364;PF00456;PF05368;PF13460;PF10021;PF01370;PF04321 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7919132-7921208.1 7919132 7921208 2076 2 10 1 0.50408 0.32 0.04 0.47 0.08 0.04 0.10 0.39 0.23 0.15 0.06 0.07 NC_003888.3_NC_003888.3_7041;NC_003888.3_NC_003888.3_7042 PF01050 PF02311;PF00190;PF07883;PF01050;PF13347;PF07690;PF00083;PF05977;PF06609;PF12832 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7922096-7922885.1 7922096 7922885 789 1 1 0 0.50917 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7044 PF04248 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7928147-7929485.1 7928147 7929485 1338 2 4 1 0.53907 antibacterial 0.83 0.13 0.15 0.41 Polyketide 0.01 0.17 0.04 0.56 0.17 0.03 0.12 NC_003888.3_NC_003888.3_7049;NC_003888.3_NC_003888.3_7050 PF01370 PF02566;PF05368;PF01370;PF13460 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7955999-7956833.1 7955999 7956833 834 1 1 0 0.58086 antibacterial 0.98 0.11 0.04 0.17 Terpene 0.00 0.10 0.04 0.15 0.06 0.02 0.65 NC_003888.3_NC_003888.3_7074 PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7966014-7973441.1 7966014 7973441 7427 5 12 1 0.58093 antibacterial 0.68 0.06 0.10 0.30 0.00 0.08 0.26 0.15 0.22 0.12 0.18 NC_003888.3_NC_003888.3_7083;NC_003888.3_NC_003888.3_7084;NC_003888.3_NC_003888.3_7085;NC_003888.3_NC_003888.3_7086;NC_003888.3_NC_003888.3_7087 PF00903 PF07602;PF05048;PF13229;PF03422;PF00903;PF13191;PF13401;PF08281;PF13936;PF00196;PF13384;PF04686 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7977962-7981423.1 7977962 7981423 3461 3 7 1 0.59622 antibacterial 0.81 0.10 0.13 0.29 0.00 0.28 0.13 0.39 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7089;NC_003888.3_NC_003888.3_7090;NC_003888.3_NC_003888.3_7091 PF03992 PF13384;PF00196;PF13518;PF08279;PF13542;PF01510;PF03992 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8003570-8072654.1 8003570 8072654 69084 63 123 12 0.74116 cytotoxic 0.29 0.51 0.17 0.10 0.06 0.33 0.16 0.24 0.08 0.09 0.12 NC_003888.3_NC_003888.3_7110;NC_003888.3_NC_003888.3_7111;NC_003888.3_NC_003888.3_7112;NC_003888.3_NC_003888.3_7113;NC_003888.3_NC_003888.3_7114;NC_003888.3_NC_003888.3_7115;NC_003888.3_NC_003888.3_7116;NC_003888.3_NC_003888.3_7117;NC_003888.3_NC_003888.3_7118;NC_003888.3_NC_003888.3_7119;NC_003888.3_NC_003888.3_7120;NC_003888.3_NC_003888.3_7121;NC_003888.3_NC_003888.3_7122;NC_003888.3_NC_003888.3_7123;NC_003888.3_NC_003888.3_7124;NC_003888.3_NC_003888.3_7125;NC_003888.3_NC_003888.3_7126;NC_003888.3_NC_003888.3_7127;NC_003888.3_NC_003888.3_7128;NC_003888.3_NC_003888.3_7129;NC_003888.3_NC_003888.3_7130;NC_003888.3_NC_003888.3_7131;NC_003888.3_NC_003888.3_7132;NC_003888.3_NC_003888.3_7133;NC_003888.3_NC_003888.3_7134;NC_003888.3_NC_003888.3_7135;NC_003888.3_NC_003888.3_7136;NC_003888.3_NC_003888.3_7137;NC_003888.3_NC_003888.3_7138;NC_003888.3_NC_003888.3_7139;NC_003888.3_NC_003888.3_7140;NC_003888.3_NC_003888.3_7141;NC_003888.3_NC_003888.3_7142;NC_003888.3_NC_003888.3_7143;NC_003888.3_NC_003888.3_7144;NC_003888.3_NC_003888.3_7145;NC_003888.3_NC_003888.3_7146;NC_003888.3_NC_003888.3_7147;NC_003888.3_NC_003888.3_7148;NC_003888.3_NC_003888.3_7149;NC_003888.3_NC_003888.3_7150;NC_003888.3_NC_003888.3_7151;NC_003888.3_NC_003888.3_7152;NC_003888.3_NC_003888.3_7153;NC_003888.3_NC_003888.3_7154;NC_003888.3_NC_003888.3_7155;NC_003888.3_NC_003888.3_7156;NC_003888.3_NC_003888.3_7157;NC_003888.3_NC_003888.3_7158;NC_003888.3_NC_003888.3_7159;NC_003888.3_NC_003888.3_7160;NC_003888.3_NC_003888.3_7161;NC_003888.3_NC_003888.3_7162;NC_003888.3_NC_003888.3_7163;NC_003888.3_NC_003888.3_7164;NC_003888.3_NC_003888.3_7165;NC_003888.3_NC_003888.3_7166;NC_003888.3_NC_003888.3_7167;NC_003888.3_NC_003888.3_7168;NC_003888.3_NC_003888.3_7169;NC_003888.3_NC_003888.3_7170;NC_003888.3_NC_003888.3_7171;NC_003888.3_NC_003888.3_7172 PF01636;PF01266;PF08545;PF02894;PF01408;PF01494;PF08241;PF00501;PF01593;PF01370;PF03364;PF00561 PF04075;PF12802;PF01047;PF13463;PF09339;PF01325;PF14342;PF00561;PF12697;PF12146;PF12158;PF10604;PF03364;PF00652;PF14200;PF06439;PF06283;PF00652;PF14200;PF03422;PF00801;PF07995;PF01135;PF13489;PF01209;PF13847;PF13649;PF08241;PF13578;PF12698;PF12051;PF04229;PF01032;PF13476;PF00005;PF13555;PF13191;PF13304;PF06414;PF13671;PF01497;PF00300;PF13581;PF02518;PF07228;PF08448;PF08545;PF08392;PF00195;PF02909;PF00440;PF01494;PF07681;PF03067;PF02839;PF01957;PF01145;PF13229;PF07602;PF16990;PF03422;PF11350;PF00072;PF00486;PF00672;PF00512;PF02518;PF00115;PF12270;PF13631;PF00033;PF01292;PF03860;PF09995;PF00069;PF07714;PF01163;PF06293;PF01636;PF13374;PF13424;PF01946;PF01494;PF01266;PF12831;PF00890;PF07992;PF03486;PF01134;PF00070;PF13450;PF01593;PF05547;PF00144;PF00501;PF13193;PF00561;PF12697;PF12146;PF03096;PF04149;PF00582;PF07336;PF11706;PF01510;PF01636;PF01633;PF07228;PF08448;PF08447;PF02894;PF01408;PF08386;PF00561;PF03777;PF14437;PF00383;PF07992;PF01494;PF03807;PF01370;PF13460;PF03779 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8074200-8075100.1 8074200 8075100 900 1 1 1 0.50574 antibacterial 0.83 0.05 0.16 0.29 0.05 0.08 0.07 0.30 0.21 0.03 0.31 NC_003888.3_NC_003888.3_7175 PF00248 PF00248 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8078531-8079047.1 8078531 8079047 516 1 3 0 0.57140 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7180 PF04978;PF05163;PF12867 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8080100-8081558.1 8080100 8081558 1458 2 2 1 0.63624 antibacterial 0.82 0.05 0.14 0.27 0.05 0.07 0.13 0.29 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7182;NC_003888.3_NC_003888.3_7183 PF00248 PF00248;PF12680 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8088495-8089903.1 8088495 8089903 1408 2 2 1 0.57086 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7193;NC_003888.3_NC_003888.3_7194 PF00903 PF06983;PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8090750-8092010.1 8090750 8092010 1260 1 3 1 0.53063 antibacterial 0.72 0.12 0.25 0.34 0.11 0.01 0.14 0.46 0.26 0.00 0.08 NC_003888.3_NC_003888.3_7196 PF01494 PF13450;PF01494;PF08491 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8094133-8097306.1 8094133 8097306 3173 3 4 0 0.62085 0.40 0.04 0.30 0.15 0.00 0.11 0.07 0.32 0.25 0.03 0.29 NC_003888.3_NC_003888.3_7200;NC_003888.3_NC_003888.3_7201;NC_003888.3_NC_003888.3_7202 PF04686;PF00296;PF07714;PF00069 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8168061-8170689.1 8168061 8170689 2628 3 3 2 0.59075 antibacterial 0.83 0.05 0.17 0.28 0.05 0.07 0.26 0.21 0.17 0.02 0.25 NC_003888.3_NC_003888.3_7264;NC_003888.3_NC_003888.3_7265;NC_003888.3_NC_003888.3_7266 PF02668;PF00248 PF13298;PF00248;PF02668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8172313-8173069.1 8172313 8173069 756 1 6 2 0.63484 antibacterial 0.52 0.07 0.10 0.44 0.00 0.38 0.18 0.38 0.02 0.02 0.03 NC_003888.3_NC_003888.3_7268 PF00975;PF00561 PF01738;PF12697;PF02230;PF12146;PF00561;PF00975 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8173886-8184384.1 8173886 8184384 10498 10 19 5 0.61466 0.46 0.10 0.39 0.11 Polyketide 0.03 0.20 0.11 0.65 0.00 0.03 0.03 NC_003888.3_NC_003888.3_7270;NC_003888.3_NC_003888.3_7271;NC_003888.3_NC_003888.3_7272;NC_003888.3_NC_003888.3_7273;NC_003888.3_NC_003888.3_7274;NC_003888.3_NC_003888.3_7275;NC_003888.3_NC_003888.3_7276;NC_003888.3_NC_003888.3_7277;NC_003888.3_NC_003888.3_7278;NC_003888.3_NC_003888.3_7279 PF00106;PF08240;PF08659;PF00107;PF01370 PF13556;PF13602;PF00107;PF16912;PF02254;PF08240;PF13561;PF00106;PF08659;PF00440;PF11716;PF07398;PF03600;PF02040;PF05977;PF07690;PF01370;PF16363;PF01073 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8190449-8218007.1 8190449 8218007 27558 29 63 9 0.75172 0.45 0.44 0.19 0.08 0.02 0.09 0.27 0.31 0.17 0.11 0.13 NC_003888.3_NC_003888.3_7286;NC_003888.3_NC_003888.3_7287;NC_003888.3_NC_003888.3_7288;NC_003888.3_NC_003888.3_7289;NC_003888.3_NC_003888.3_7290;NC_003888.3_NC_003888.3_7291;NC_003888.3_NC_003888.3_7292;NC_003888.3_NC_003888.3_7293;NC_003888.3_NC_003888.3_7294;NC_003888.3_NC_003888.3_7295;NC_003888.3_NC_003888.3_7296;NC_003888.3_NC_003888.3_7297;NC_003888.3_NC_003888.3_7298;NC_003888.3_NC_003888.3_7299;NC_003888.3_NC_003888.3_7300;NC_003888.3_NC_003888.3_7301;NC_003888.3_NC_003888.3_7302;NC_003888.3_NC_003888.3_7303;NC_003888.3_NC_003888.3_7304;NC_003888.3_NC_003888.3_7305;NC_003888.3_NC_003888.3_7306;NC_003888.3_NC_003888.3_7307;NC_003888.3_NC_003888.3_7308;NC_003888.3_NC_003888.3_7309;NC_003888.3_NC_003888.3_7310;NC_003888.3_NC_003888.3_7311;NC_003888.3_NC_003888.3_7312;NC_003888.3_NC_003888.3_7313;NC_003888.3_NC_003888.3_7314 PF01266;PF00106;PF01494;PF08659;PF01243;PF04055;PF01593;PF03364;PF00561 PF04972;PF14907;PF07228;PF10604;PF09297;PF00999;PF13493;PF00089;PF02983;PF10604;PF03364;PF01266;PF01946;PF03486;PF12831;PF00890;PF01494;PF00070;PF13450;PF01593;PF00106;PF08659;PF13561;PF01593;PF01266;PF01946;PF00070;PF07992;PF01494;PF12831;PF00890;PF13450;PF01593;PF00892;PF00083;PF13347;PF07690;PF03583;PF12697;PF00561;PF12146;PF05448;PF00326;PF00929;PF01032;PF01497;PF13401;PF00005;PF13191;PF13604;PF13304;PF13671;PF02492;PF13555;PF02463;PF13175;PF13476;PF01243;PF04055;PF04672;PF14602;PF00132;PF12464 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8228870-8235982.1 8228870 8235982 7112 8 11 3 0.67244 antibacterial 0.80 0.06 0.19 0.16 Terpene 0.10 0.02 0.04 0.20 0.14 0.01 0.55 NC_003888.3_NC_003888.3_7322;NC_003888.3_NC_003888.3_7323;NC_003888.3_NC_003888.3_7324;NC_003888.3_NC_003888.3_7325;NC_003888.3_NC_003888.3_7326;NC_003888.3_NC_003888.3_7327;NC_003888.3_NC_003888.3_7328;NC_003888.3_NC_003888.3_7329 PF00106;PF00067;PF08659 PF00106;PF08659;PF13561;PF13460;PF03631;PF02746;PF13378;PF00067;PF03029;PF13479;PF05331 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8241247-8241685.1 8241247 8241685 438 1 1 0 0.52761 antibacterial 0.89 0.01 0.03 0.09 0.00 0.01 0.05 0.02 0.46 0.01 0.46 NC_003888.3_NC_003888.3_7335 PF07883 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8242354-8286428.1 8242354 8286428 44074 46 107 13 0.73889 0.29 0.47 0.33 0.14 0.06 0.36 0.31 0.20 0.11 0.01 0.04 NC_003888.3_NC_003888.3_7337;NC_003888.3_NC_003888.3_7338;NC_003888.3_NC_003888.3_7339;NC_003888.3_NC_003888.3_7340;NC_003888.3_NC_003888.3_7341;NC_003888.3_NC_003888.3_7342;NC_003888.3_NC_003888.3_7343;NC_003888.3_NC_003888.3_7344;NC_003888.3_NC_003888.3_7345;NC_003888.3_NC_003888.3_7346;NC_003888.3_NC_003888.3_7347;NC_003888.3_NC_003888.3_7348;NC_003888.3_NC_003888.3_7349;NC_003888.3_NC_003888.3_7350;NC_003888.3_NC_003888.3_7351;NC_003888.3_NC_003888.3_7352;NC_003888.3_NC_003888.3_7353;NC_003888.3_NC_003888.3_7354;NC_003888.3_NC_003888.3_7355;NC_003888.3_NC_003888.3_7356;NC_003888.3_NC_003888.3_7357;NC_003888.3_NC_003888.3_7358;NC_003888.3_NC_003888.3_7359;NC_003888.3_NC_003888.3_7360;NC_003888.3_NC_003888.3_7361;NC_003888.3_NC_003888.3_7362;NC_003888.3_NC_003888.3_7363;NC_003888.3_NC_003888.3_7364;NC_003888.3_NC_003888.3_7365;NC_003888.3_NC_003888.3_7366;NC_003888.3_NC_003888.3_7367;NC_003888.3_NC_003888.3_7368;NC_003888.3_NC_003888.3_7369;NC_003888.3_NC_003888.3_7370;NC_003888.3_NC_003888.3_7371;NC_003888.3_NC_003888.3_7372;NC_003888.3_NC_003888.3_7373;NC_003888.3_NC_003888.3_7374;NC_003888.3_NC_003888.3_7375;NC_003888.3_NC_003888.3_7376;NC_003888.3_NC_003888.3_7377;NC_003888.3_NC_003888.3_7378;NC_003888.3_NC_003888.3_7379;NC_003888.3_NC_003888.3_7380;NC_003888.3_NC_003888.3_7381;NC_003888.3_NC_003888.3_7382 PF08242;PF00171;PF00857;PF00975;PF01494;PF00891;PF03061;PF08241;PF03992;PF00583;PF00501;PF00067;PF00561 PF11563;PF00042;PF00970;PF08030;PF00175;PF01955;PF06532;PF02031;PF05547;PF00413;PF00126;PF13556;PF03466;PF03413;PF06779;PF07690;PF00083;PF06609;PF13347;PF00171;PF02775;PF00205;PF02776;PF00126;PF13556;PF03466;PF03575;PF12697;PF12146;PF00561;PF03096;PF00975;PF00440;PF02878;PF02879;PF02880;PF00408;PF00067;PF05175;PF13489;PF02353;PF13847;PF07021;PF13649;PF08241;PF08242;PF13578;PF13581;PF13302;PF00583;PF00989;PF13188;PF08448;PF13426;PF01590;PF13185;PF13492;PF07228;PF04203;PF03992;PF04486;PF04673;PF00891;PF13649;PF16864;PF08100;PF13229;PF07602;PF12708;PF05048;PF02659;PF04471;PF13156;PF00857;PF06737;PF00005;PF13555;PF13304;PF12128;PF00089;PF13365;PF09342;PF01925;PF13581;PF13589;PF02518;PF03259;PF05331;PF00009;PF08477;PF00071;PF01926;PF03029;PF11991;PF00743;PF07992;PF13738;PF13434;PF13450;PF00890;PF01494;PF14535;PF00501;PF03061;PF05138;PF06243;PF05138 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8288250-8293976.1 8288250 8293976 5726 5 6 1 0.61630 antibacterial 0.66 0.04 0.13 0.40 Polyketide 0.01 0.00 0.17 0.69 0.05 0.06 0.03 NC_003888.3_NC_003888.3_7385;NC_003888.3_NC_003888.3_7386;NC_003888.3_NC_003888.3_7387;NC_003888.3_NC_003888.3_7388;NC_003888.3_NC_003888.3_7389 PF01636 PF05426;PF01636;PF05977;PF09835;PF07690;PF11706 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8311491-8314671.1 8311491 8314671 3180 2 2 0 0.52537 antibacterial 0.86 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7409;NC_003888.3_NC_003888.3_7410 PF02133;PF04616 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8319173-8321994.1 8319173 8321994 2821 2 4 1 0.61003 antibacterial 0.87 0.06 0.18 0.25 0.00 0.07 0.27 0.23 0.17 0.02 0.27 NC_003888.3_NC_003888.3_7415;NC_003888.3_NC_003888.3_7416 PF02668 PF02837;PF00703;PF02836;PF02668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8438150-8466318.1 8438150 8466318 28168 27 48 3 0.69385 0.44 0.44 0.18 0.13 0.08 0.01 0.40 0.20 0.10 0.14 0.25 NC_003888.3_NC_003888.3_7519;NC_003888.3_NC_003888.3_7520;NC_003888.3_NC_003888.3_7521;NC_003888.3_NC_003888.3_7522;NC_003888.3_NC_003888.3_7523;NC_003888.3_NC_003888.3_7524;NC_003888.3_NC_003888.3_7525;NC_003888.3_NC_003888.3_7526;NC_003888.3_NC_003888.3_7527;NC_003888.3_NC_003888.3_7528;NC_003888.3_NC_003888.3_7529;NC_003888.3_NC_003888.3_7530;NC_003888.3_NC_003888.3_7531;NC_003888.3_NC_003888.3_7532;NC_003888.3_NC_003888.3_7533;NC_003888.3_NC_003888.3_7534;NC_003888.3_NC_003888.3_7535;NC_003888.3_NC_003888.3_7536;NC_003888.3_NC_003888.3_7537;NC_003888.3_NC_003888.3_7538;NC_003888.3_NC_003888.3_7539;NC_003888.3_NC_003888.3_7540;NC_003888.3_NC_003888.3_7541;NC_003888.3_NC_003888.3_7542;NC_003888.3_NC_003888.3_7543;NC_003888.3_NC_003888.3_7544;NC_003888.3_NC_003888.3_7545 PF01266;PF02585;PF01494 PF04029;PF04264;PF13581;PF13560;PF13413;PF01381;PF04149;PF04672;PF09339;PF12802;PF13412;PF01614;PF01740;PF13466;PF04343;PF14534;PF12680;PF02233;PF12769;PF01262;PF05222;PF02909;PF00440;PF00070;PF03486;PF07992;PF01494;PF01266;PF13450;PF13738;PF01494;PF03486;PF01872;PF07995;PF02746;PF13378;PF00300;PF13385;PF02210;PF00149;PF02585;PF00704;PF09346;PF14568;PF02031;PF00413;PF00150;PF00553 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8468384-8563058.1 8468384 8563058 94674 88 209 23 0.91964 cytotoxic 0.48 0.54 0.21 0.15 NRP 0.01 0.64 0.08 0.42 0.00 0.04 0.02 NC_003888.3_NC_003888.3_7547;NC_003888.3_NC_003888.3_7548;NC_003888.3_NC_003888.3_7549;NC_003888.3_NC_003888.3_7550;NC_003888.3_NC_003888.3_7551;NC_003888.3_NC_003888.3_7552;NC_003888.3_NC_003888.3_7553;NC_003888.3_NC_003888.3_7554;NC_003888.3_NC_003888.3_7555;NC_003888.3_NC_003888.3_7556;NC_003888.3_NC_003888.3_7557;NC_003888.3_NC_003888.3_7558;NC_003888.3_NC_003888.3_7559;NC_003888.3_NC_003888.3_7560;NC_003888.3_NC_003888.3_7561;NC_003888.3_NC_003888.3_7562;NC_003888.3_NC_003888.3_7563;NC_003888.3_NC_003888.3_7564;NC_003888.3_NC_003888.3_7565;NC_003888.3_NC_003888.3_7566;NC_003888.3_NC_003888.3_7567;NC_003888.3_NC_003888.3_7568;NC_003888.3_NC_003888.3_7569;NC_003888.3_NC_003888.3_7570;NC_003888.3_NC_003888.3_7571;NC_003888.3_NC_003888.3_7572;NC_003888.3_NC_003888.3_7573;NC_003888.3_NC_003888.3_7574;NC_003888.3_NC_003888.3_7575;NC_003888.3_NC_003888.3_7576;NC_003888.3_NC_003888.3_7577;NC_003888.3_NC_003888.3_7578;NC_003888.3_NC_003888.3_7579;NC_003888.3_NC_003888.3_7580;NC_003888.3_NC_003888.3_7581;NC_003888.3_NC_003888.3_7582;NC_003888.3_NC_003888.3_7583;NC_003888.3_NC_003888.3_7584;NC_003888.3_NC_003888.3_7585;NC_003888.3_NC_003888.3_7586;NC_003888.3_NC_003888.3_7587;NC_003888.3_NC_003888.3_7588;NC_003888.3_NC_003888.3_7589;NC_003888.3_NC_003888.3_7590;NC_003888.3_NC_003888.3_7591;NC_003888.3_NC_003888.3_7592;NC_003888.3_NC_003888.3_7593;NC_003888.3_NC_003888.3_7594;NC_003888.3_NC_003888.3_7595;NC_003888.3_NC_003888.3_7596;NC_003888.3_NC_003888.3_7597;NC_003888.3_NC_003888.3_7598;NC_003888.3_NC_003888.3_7599;NC_003888.3_NC_003888.3_7600;NC_003888.3_NC_003888.3_7601;NC_003888.3_NC_003888.3_7602;NC_003888.3_NC_003888.3_7603;NC_003888.3_NC_003888.3_7604;NC_003888.3_NC_003888.3_7605;NC_003888.3_NC_003888.3_7606;NC_003888.3_NC_003888.3_7607;NC_003888.3_NC_003888.3_7608;NC_003888.3_NC_003888.3_7609;NC_003888.3_NC_003888.3_7610;NC_003888.3_NC_003888.3_7611;NC_003888.3_NC_003888.3_7612;NC_003888.3_NC_003888.3_7613;NC_003888.3_NC_003888.3_7614;NC_003888.3_NC_003888.3_7615;NC_003888.3_NC_003888.3_7616;NC_003888.3_NC_003888.3_7617;NC_003888.3_NC_003888.3_7618;NC_003888.3_NC_003888.3_7619;NC_003888.3_NC_003888.3_7620;NC_003888.3_NC_003888.3_7621;NC_003888.3_NC_003888.3_7622;NC_003888.3_NC_003888.3_7623;NC_003888.3_NC_003888.3_7624;NC_003888.3_NC_003888.3_7625;NC_003888.3_NC_003888.3_7626;NC_003888.3_NC_003888.3_7627;NC_003888.3_NC_003888.3_7628;NC_003888.3_NC_003888.3_7629;NC_003888.3_NC_003888.3_7630;NC_003888.3_NC_003888.3_7631;NC_003888.3_NC_003888.3_7632;NC_003888.3_NC_003888.3_7633;NC_003888.3_NC_003888.3_7634 PF08242;PF00106;PF00891;PF00107;PF00583;PF00501;PF01370;PF03364;PF01408;PF00903;PF00975;PF01494;PF00248;PF08241;PF00668;PF00067;PF01266;PF01636;PF00857;PF08240;PF08541;PF08659;PF00561 PF12802;PF01047;PF13463;PF12840;PF03466;PF00126;PF03446;PF12893;PF00903;PF08922;PF16653;PF03435;PF01113;PF02254;PF00440;PF02909;PF13828;PF13499;PF13833;PF13405;PF00036;PF13202;PF00196;PF08281;PF00072;PF07730;PF00561;PF08386;PF13977;PF16859;PF00440;PF13302;PF13420;PF00583;PF00903;PF00248;PF00248;PF13563;PF01186;PF01494;PF01266;PF13450;PF07885;PF00520;PF01872;PF07690;PF06779;PF01035;PF04343;PF11160;PF08240;PF00107;PF13602;PF01966;PF01494;PF05834;PF03486;PF07992;PF01946;PF01266;PF12831;PF00890;PF13450;PF01134;PF13738;PF04191;PF04140;PF08541;PF02797;PF00195;PF08392;PF01040;PF03640;PF13473;PF00127;PF06902;PF13459;PF13370;PF00496;PF00528;PF00528;PF13304;PF00005;PF13481;PF13191;PF13401;PF00004;PF02463;PF13193;PF00501;PF00550;PF00668;PF00501;PF13193;PF00668;PF00501;PF13489;PF01209;PF13847;PF13649;PF08242;PF08241;PF13193;PF00550;PF12697;PF00975;PF00561;PF01738;PF03435;PF01370;PF13460;PF01408;PF00891;PF13489;PF13649;PF08241;PF08242;PF00067;PF00975;PF12697;PF12146;PF13489;PF05219;PF13649;PF08242;PF08241;PF00664;PF00005;PF13555;PF13191;PF13401;PF13479;PF02463;PF00664;PF00005;PF13555;PF13191;PF02463;PF00425;PF13561;PF00106;PF01370;PF08659;PF00440;PF00903;PF12802;PF01047;PF09339;PF13412;PF13545;PF02333;PF01209;PF13649;PF08241;PF08242;PF09278;PF13411;PF00376;PF00027;PF02353;PF08241;PF13649;PF00392;PF07729;PF07690;PF00440;PF02909;PF07992;PF13450;PF01494;PF13560;PF01381;PF11512;PF13483;PF12706;PF12802;PF13463;PF01047;PF12840;PF13412;PF13545;PF01636;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13302;PF00583;PF04672;PF08327;PF10604;PF03364;PF00440;PF13384;PF11716;PF12867;PF07398;PF04978;PF12867;PF13560;PF09339;PF13404;PF00857;PF01978;PF13463;PF12802;PF01047 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8563624-8572470.1 8563624 8572470 8846 7 12 0 0.52668 antibacterial 0.78 0.07 0.13 0.33 0.00 0.07 0.16 0.22 0.31 0.04 0.24 NC_003888.3_NC_003888.3_7636;NC_003888.3_NC_003888.3_7637;NC_003888.3_NC_003888.3_7638;NC_003888.3_NC_003888.3_7639;NC_003888.3_NC_003888.3_7640;NC_003888.3_NC_003888.3_7641;NC_003888.3_NC_003888.3_7642 PF02678;PF05726;PF14542;PF03795;PF12844;PF13560;PF01381;PF01381;PF13384;PF13542;PF04632;PF13515 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8577480-8584200.1 8577480 8584200 6720 6 9 0 0.54096 antibacterial 0.76 0.13 0.17 0.23 0.00 0.05 0.33 0.25 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7648;NC_003888.3_NC_003888.3_7649;NC_003888.3_NC_003888.3_7650;NC_003888.3_NC_003888.3_7651;NC_003888.3_NC_003888.3_7652;NC_003888.3_NC_003888.3_7653 PF01978;PF12802;PF13463;PF01047;PF13340;PF07228;PF07228;PF02607;PF02310 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8584660-8586017.1 8584660 8586017 1357 2 6 0 0.52045 antibacterial 0.81 0.10 0.17 0.22 0.00 0.07 0.40 0.19 0.20 0.02 0.16 NC_003888.3_NC_003888.3_7655;NC_003888.3_NC_003888.3_7656 PF12802;PF01047;PF13412;PF01325;PF09339;PF08570 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8607538-8608480.1 8607538 8608480 942 1 4 0 0.53548 antibacterial 0.81 0.06 0.16 0.29 0.00 0.11 0.11 0.29 0.21 0.04 0.29 NC_003888.3_NC_003888.3_7680 PF14525;PF13384;PF12833;PF00165 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8610787-8635487.1 8610787 8635487 24700 30 42 5 0.83777 antibacterial 0.54 0.26 0.20 0.31 Polyketide 0.01 0.08 0.12 0.68 0.08 0.03 0.08 NC_003888.3_NC_003888.3_7682;NC_003888.3_NC_003888.3_7683;NC_003888.3_NC_003888.3_7684;NC_003888.3_NC_003888.3_7685;NC_003888.3_NC_003888.3_7686;NC_003888.3_NC_003888.3_7687;NC_003888.3_NC_003888.3_7688;NC_003888.3_NC_003888.3_7689;NC_003888.3_NC_003888.3_7690;NC_003888.3_NC_003888.3_7691;NC_003888.3_NC_003888.3_7692;NC_003888.3_NC_003888.3_7693;NC_003888.3_NC_003888.3_7694;NC_003888.3_NC_003888.3_7695;NC_003888.3_NC_003888.3_7696;NC_003888.3_NC_003888.3_7697;NC_003888.3_NC_003888.3_7698;NC_003888.3_NC_003888.3_7699;NC_003888.3_NC_003888.3_7700;NC_003888.3_NC_003888.3_7701;NC_003888.3_NC_003888.3_7702;NC_003888.3_NC_003888.3_7703;NC_003888.3_NC_003888.3_7704;NC_003888.3_NC_003888.3_7705;NC_003888.3_NC_003888.3_7706;NC_003888.3_NC_003888.3_7707;NC_003888.3_NC_003888.3_7708;NC_003888.3_NC_003888.3_7709;NC_003888.3_NC_003888.3_7710;NC_003888.3_NC_003888.3_7711 PF00106;PF01494;PF08659;PF00107;PF01370 PF00881;PF02909;PF13358;PF09076;PF01494;PF07992;PF00890;PF01494;PF00890;PF07992;PF00107;PF00440;PF02909;PF13586;PF01609;PF10756;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF14145;PF01548;PF13022;PF00440;PF00356;PF00106;PF08659;PF01370;PF13561;PF06197;PF13359;PF01609;PF13613;PF04072;PF13561;PF00106;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8642713-8643713.1 8642713 8643713 1000 2 3 0 0.54261 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_7719;NC_003888.3_NC_003888.3_7720 PF14079;PF13305;PF00440 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_31460-41750.1 31460 41750 10290 13 23 4 0.61532 antibacterial 0.76 0.13 0.12 0.31 Polyketide 0.02 0.07 0.15 0.58 0.01 0.08 0.12 NC_003903.1_NC_003903.1_34;NC_003903.1_NC_003903.1_35;NC_003903.1_NC_003903.1_36;NC_003903.1_NC_003903.1_37;NC_003903.1_NC_003903.1_38;NC_003903.1_NC_003903.1_39;NC_003903.1_NC_003903.1_40;NC_003903.1_NC_003903.1_41;NC_003903.1_NC_003903.1_42;NC_003903.1_NC_003903.1_43;NC_003903.1_NC_003903.1_44;NC_003903.1_NC_003903.1_45;NC_003903.1_NC_003903.1_46 PF02585;PF00106;PF01370;PF08659 PF07228;PF02585;PF12833;PF00165;PF12852;PF00106;PF01370;PF08659;PF13561;PF13460;PF13586;PF01609;PF13340;PF07228;PF16859;PF16925;PF00440;PF00106;PF08659;PF01370;PF16363;PF13460;PF13561 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_60518-60743.1 60518 60743 225 1 1 0 0.60639 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003903.1_NC_003903.1_70 PF04149 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_63898-66577.1 63898 66577 2679 1 1 0 0.52239 antibacterial 0.76 0.06 0.17 0.24 0.00 0.08 0.23 0.20 0.20 0.00 0.31 NC_003903.1_NC_003903.1_75 PF13191 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_159898-165658.1 159898 165658 5760 6 5 1 0.55200 antibacterial 0.76 0.06 0.18 0.24 0.00 0.07 0.26 0.20 0.20 0.00 0.28 NC_003903.1_NC_003903.1_184;NC_003903.1_NC_003903.1_185;NC_003903.1_NC_003903.1_186;NC_003903.1_NC_003903.1_187;NC_003903.1_NC_003903.1_188;NC_003903.1_NC_003903.1_189 PF00903 PF00903;PF13144;PF08666;PF00437;PF13191 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_230262-324563.1 230262 324563 94301 108 113 20 0.85951 antibacterial 0.59 0.48 0.14 0.14 0.10 0.22 0.34 0.36 0.01 0.09 0.05 NC_003903.1_NC_003903.1_253;NC_003903.1_NC_003903.1_254;NC_003903.1_NC_003903.1_255;NC_003903.1_NC_003903.1_256;NC_003903.1_NC_003903.1_257;NC_003903.1_NC_003903.1_258;NC_003903.1_NC_003903.1_259;NC_003903.1_NC_003903.1_260;NC_003903.1_NC_003903.1_261;NC_003903.1_NC_003903.1_262;NC_003903.1_NC_003903.1_263;NC_003903.1_NC_003903.1_264;NC_003903.1_NC_003903.1_265;NC_003903.1_NC_003903.1_266;NC_003903.1_NC_003903.1_267;NC_003903.1_NC_003903.1_268;NC_003903.1_NC_003903.1_269;NC_003903.1_NC_003903.1_270;NC_003903.1_NC_003903.1_271;NC_003903.1_NC_003903.1_272;NC_003903.1_NC_003903.1_273;NC_003903.1_NC_003903.1_274;NC_003903.1_NC_003903.1_275;NC_003903.1_NC_003903.1_276;NC_003903.1_NC_003903.1_277;NC_003903.1_NC_003903.1_278;NC_003903.1_NC_003903.1_279;NC_003903.1_NC_003903.1_280;NC_003903.1_NC_003903.1_281;NC_003903.1_NC_003903.1_282;NC_003903.1_NC_003903.1_283;NC_003903.1_NC_003903.1_284;NC_003903.1_NC_003903.1_285;NC_003903.1_NC_003903.1_286;NC_003903.1_NC_003903.1_287;NC_003903.1_NC_003903.1_288;NC_003903.1_NC_003903.1_289;NC_003903.1_NC_003903.1_290;NC_003903.1_NC_003903.1_291;NC_003903.1_NC_003903.1_292;NC_003903.1_NC_003903.1_293;NC_003903.1_NC_003903.1_294;NC_003903.1_NC_003903.1_295;NC_003903.1_NC_003903.1_296;NC_003903.1_NC_003903.1_297;NC_003903.1_NC_003903.1_298;NC_003903.1_NC_003903.1_299;NC_003903.1_NC_003903.1_300;NC_003903.1_NC_003903.1_301;NC_003903.1_NC_003903.1_302;NC_003903.1_NC_003903.1_303;NC_003903.1_NC_003903.1_304;NC_003903.1_NC_003903.1_305;NC_003903.1_NC_003903.1_306;NC_003903.1_NC_003903.1_307;NC_003903.1_NC_003903.1_308;NC_003903.1_NC_003903.1_309;NC_003903.1_NC_003903.1_310;NC_003903.1_NC_003903.1_311;NC_003903.1_NC_003903.1_312;NC_003903.1_NC_003903.1_313;NC_003903.1_NC_003903.1_314;NC_003903.1_NC_003903.1_315;NC_003903.1_NC_003903.1_316;NC_003903.1_NC_003903.1_317;NC_003903.1_NC_003903.1_318;NC_003903.1_NC_003903.1_319;NC_003903.1_NC_003903.1_320;NC_003903.1_NC_003903.1_321;NC_003903.1_NC_003903.1_322;NC_003903.1_NC_003903.1_323;NC_003903.1_NC_003903.1_324;NC_003903.1_NC_003903.1_325;NC_003903.1_NC_003903.1_326;NC_003903.1_NC_003903.1_327;NC_003903.1_NC_003903.1_328;NC_003903.1_NC_003903.1_329;NC_003903.1_NC_003903.1_330;NC_003903.1_NC_003903.1_331;NC_003903.1_NC_003903.1_332;NC_003903.1_NC_003903.1_333;NC_003903.1_NC_003903.1_334;NC_003903.1_NC_003903.1_335;NC_003903.1_NC_003903.1_336;NC_003903.1_NC_003903.1_337;NC_003903.1_NC_003903.1_338;NC_003903.1_NC_003903.1_339;NC_003903.1_NC_003903.1_340;NC_003903.1_NC_003903.1_341;NC_003903.1_NC_003903.1_342;NC_003903.1_NC_003903.1_343;NC_003903.1_NC_003903.1_344;NC_003903.1_NC_003903.1_345;NC_003903.1_NC_003903.1_346;NC_003903.1_NC_003903.1_347;NC_003903.1_NC_003903.1_348;NC_003903.1_NC_003903.1_349;NC_003903.1_NC_003903.1_350;NC_003903.1_NC_003903.1_351;NC_003903.1_NC_003903.1_352;NC_003903.1_NC_003903.1_353;NC_003903.1_NC_003903.1_354;NC_003903.1_NC_003903.1_355;NC_003903.1_NC_003903.1_356;NC_003903.1_NC_003903.1_357;NC_003903.1_NC_003903.1_358;NC_003903.1_NC_003903.1_359;NC_003903.1_NC_003903.1_360 PF02585;PF00106;PF02770;PF00441;PF00583;PF01370;PF08545;PF01408;PF03756;PF08028;PF01118;PF00975;PF02771;PF02737;PF01636;PF01266;PF02894;PF00702;PF08541;PF08659 PF01370;PF01613;PF13577;PF13560;PF10727;PF02826;PF03807;PF03446;PF02558;PF02737;PF00724;PF05655;PF13521;PF08545;PF08541;PF00550;PF12710;PF08282;PF13521;PF13238;PF13347;PF07690;PF12840;PF01022;PF02894;PF01408;PF13380;PF00296;PF00975;PF12697;PF00440;PF03756;PF02771;PF02770;PF00441;PF08028;PF12710;PF00702;PF08282;PF00440;PF13646;PF00932;PF00872;PF10551;PF00932;PF07510;PF00583;PF13302;PF13517;PF05593;PF14690;PF13005;PF01610;PF05534;PF08681;PF08239;PF02735;PF01402;PF13191;PF06414;PF13671;PF13191;PF14267;PF04149;PF12844;PF13560;PF01381;PF13443;PF13744;PF13581;PF01557;PF01118;PF09290;PF00682;PF07836;PF03328;PF15617;PF01575;PF13527;PF13530;PF01636;PF02585;PF07690;PF05977;PF00083;PF07992;PF00890;PF01266;PF03486;PF13450;PF13460;PF13561;PF00106;PF08659;PF01370;PF16363;PF00440;PF16925;PF16859;PF07228;PF13340;PF01609;PF13586;PF13561;PF00106;PF01370;PF08659;PF13460;PF12852;PF00165;PF12833;PF02585;PF07228 diff --git a/example_data/sco_duptable.tsv b/example_data/sco_duptable.tsv new file mode 100644 index 0000000..81ca146 --- /dev/null +++ b/example_data/sco_duptable.tsv @@ -0,0 +1,73 @@ +#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description +TIGR01358 2.0 1.0 0.134 0.8474 0.8632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2272072 2273419 -1 # ID=1_2079|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3519448 3520903 -1 # ID=1_3163|Type=CDS|transl_table=11] DAHP_synth_II: 3-deoxy-7-phosphoheptulonate synthase +TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791175 3791412 1 # ID=1_3380|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6062058 6062244 -1 # ID=1_5496|Type=CDS|transl_table=11] L28: ribosomal protein bL28 +TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6206674 6207832 1 # ID=1_5627|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7524432 7525587 1 # ID=1_6687|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase +TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2753869 2755006 -1 # ID=1_2512|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4048920 4050120 -1 # ID=1_3613|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ +TIGR02200 2.0 1.0 0.0 0.6737 0.6737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3804031 3804376 1 # ID=1_3393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5644428 5644671 -1 # ID=1_5118|Type=CDS|transl_table=11] GlrX_actino: glutaredoxin-like protein +TIGR00663 2.0 1.0 0.333 0.8684 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4268712 4269843 -1 # ID=1_3822|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|112311 113430 1 # ID=2_7877|Type=CDS|transl_table=11] TIGR00663: dnan: DNA polymerase III, beta subunit +TIGR01048 2.0 1.0 0.4252 0.7263 0.8895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5820661 5822053 1 # ID=1_5284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7121124 7122447 1 # ID=1_6363|Type=CDS|transl_table=11] lysA: diaminopimelate decarboxylase +TIGR00546 2.0 1.0 0.5356 0.5368 0.7579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1069701 1071315 -1 # ID=1_974|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1412773 1414348 1 # ID=1_1296|Type=CDS|transl_table=11] lnt: apolipoprotein N-acyltransferase +TIGR00544 2.0 1.0 0.401 0.8947 0.9632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2185227 2186259 -1 # ID=1_1997|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8641684 8642638 -1 # ID=1_7718|Type=CDS|transl_table=11] lgt: prolipoprotein diacylglyceryl transferase +TIGR00260 2.0 1.0 0.4739 0.6421 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4708600 4709893 1 # ID=1_4231|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5823510 5824569 1 # ID=1_5286|Type=CDS|transl_table=11] thrC: threonine synthase +TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2068834 2069953 1 # ID=1_1899|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7399382 7400528 -1 # ID=1_6583|Type=CDS|transl_table=11] tal_mycobact: transaldolase +TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3789247 3789487 -1 # ID=1_3376|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4304257 4304494 1 # ID=1_3851|Type=CDS|transl_table=11] S18: ribosomal protein bS18 +TIGR00494 2.0 1.0 0.4687 0.3579 0.4842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7835927 7836392 1 # ID=1_6962|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7836729 7837104 1 # ID=1_6964|Type=CDS|transl_table=11] crcB: protein CrcB +TIGR00193 2.0 1.0 0.5356 0.4737 0.5737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1310292 1310595 -1 # ID=1_1194|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6019303 6019987 1 # ID=1_5456|Type=CDS|transl_table=11] urease_gam: urease, gamma subunit +TIGR00872 2.0 1.0 0.4307 0.5684 0.6421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4267593 4268469 -1 # ID=1_3821|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7394147 7395029 -1 # ID=1_6579|Type=CDS|transl_table=11] gnd_rel: 6-phosphogluconate dehydrogenase (decarboxylating) +TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5671274 5672591 -1 # ID=1_5144|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7580931 7582254 -1 # ID=1_6738|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase +TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2069956 2071480 1 # ID=1_1900|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7397607 7399386 -1 # ID=1_6582|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase +TIGR03954 3.0 2.0 0.4551 0.2421 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5880227 5880572 1 # ID=1_5340|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5883320 5883662 1 # ID=1_5345|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6470908 6473461 -1 # ID=1_5836|Type=CDS|transl_table=11] integ_memb_HG: integral membrane protein +TIGR00534 2.0 1.0 0.424 0.2526 0.3 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2071476 2072532 1 # ID=1_1901|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7396675 7397611 -1 # ID=1_6581|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA +TIGR01129 2.0 1.0 0.3282 0.7895 0.9 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1621003 1622815 -1 # ID=1_1476|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6762661 6765049 -1 # ID=1_6092|Type=CDS|transl_table=11] secD: protein-export membrane protein SecD +TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1401206 1402082 1 # ID=1_1285|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7837143 7837980 1 # ID=1_6965|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP +TIGR00759 3.0 1.0 0.4291 0.6895 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2348739 2351439 1 # ID=1_2146|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2539575 2542332 1 # ID=1_2329|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7914736 7917424 -1 # ID=1_7038|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type +TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5670248 5671262 -1 # ID=1_5143|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6750130 6751231 1 # ID=1_6081|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A +TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2162745 2165244 -1 # ID=1_1981|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2861629 2864203 1 # ID=1_2596|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2873769 2876343 1 # ID=1_2604|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N +TIGR03181 2.0 1.0 0.5945 0.3368 0.6105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4195942 4197196 -1 # ID=1_3760|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4213271 4214438 -1 # ID=1_3775|Type=CDS|transl_table=11] PDH_E1_alph_x: pyruvate dehydrogenase (acetyl-transferring) E1 component, alpha subunit +TIGR01311 2.0 1.0 0.7691 0.6474 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|544193 545717 1 # ID=1_469|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1778725 1780264 1 # ID=1_1621|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase +TIGR00575 2.0 1.0 0.3226 0.8263 0.9368 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5978784 5980992 1 # ID=1_5425|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8337388 8339491 -1 # ID=1_7431|Type=CDS|transl_table=11] dnlj: DNA ligase, NAD-dependent +TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1636965 1638942 -1 # ID=1_1491|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4153188 4154442 1 # ID=1_3721|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase +TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5832393 5833041 1 # ID=1_5293|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8173118 8173739 -1 # ID=1_7269|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family +TIGR01263 2.0 1.0 0.609 0.2579 0.3579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3178619 3179765 -1 # ID=1_2885|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3541950 3543027 -1 # ID=1_3182|Type=CDS|transl_table=11] 4HPPD: 4-hydroxyphenylpyruvate dioxygenase +TIGR00465 2.0 1.0 0.1928 0.9158 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6005642 6006641 1 # ID=1_5445|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7947902 7948901 -1 # ID=1_7068|Type=CDS|transl_table=11] ilvC: ketol-acid reductoisomerase +TIGR01828 2.0 1.0 0.2247 0.3737 0.3947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|197220 199917 1 # ID=1_173|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2684903 2687633 -1 # ID=1_2452|Type=CDS|transl_table=11] pyru_phos_dikin: pyruvate, phosphate dikinase +TIGR01292 2.0 1.0 0.4096 0.8684 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4280582 4281551 -1 # ID=1_3833|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7605260 7606241 -1 # ID=1_6752|Type=CDS|transl_table=11] TRX_reduct: thioredoxin-disulfide reductase +TIGR00180 3.0 1.0 0.4697 0.8579 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4278314 4279181 1 # ID=1_3830|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|130086 131214 1 # ID=2_7896|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|222644 223790 1 # ID=2_7984|Type=CDS|transl_table=11] parB_part: ParB/RepB/Spo0J family partition protein +TIGR01296 2.0 1.0 0.4279 0.7211 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2870835 2871858 1 # ID=1_2601|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3993329 3994418 -1 # ID=1_3558|Type=CDS|transl_table=11] asd_B: aspartate-semialdehyde dehydrogenase +TIGR02227 3.0 1.0 1.1572 0.5579 0.9789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6099895 6100675 1 # ID=1_5529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6101640 6102651 1 # ID=1_5531|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6102755 6103532 1 # ID=1_5532|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I +TIGR00232 2.0 1.0 0.3575 0.8263 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2066712 2068800 1 # ID=1_1898|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7400591 7402688 -1 # ID=1_6584|Type=CDS|transl_table=11] tktlase_bact: transketolase +TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3691373 3692384 1 # ID=1_3284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5271518 5272538 1 # ID=1_4770|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase +TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1662891 1666530 -1 # ID=1_1516|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2338273 2339347 1 # ID=1_2138|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase +SHMT 4.0 1.0 0.8787 0.5842 0.9474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5269285 5270731 1 # ID=1_4768|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5833805 5835062 1 # ID=1_5295|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5955946 5957209 -1 # ID=1_5401|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7560697 7561891 1 # ID=1_6719|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase +TIGR02133 2.0 1.0 0.6088 0.6895 0.8526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|620366 620879 -1 # ID=1_538|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2854111 2854597 -1 # ID=1_2588|Type=CDS|transl_table=11] RPI_actino: ribose 5-phosphate isomerase +TIGR02138 2.0 1.0 0.3956 0.7895 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4555527 4556538 -1 # ID=1_4078|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7576035 7577847 -1 # ID=1_6734|Type=CDS|transl_table=11] phosphate_pstC: phosphate ABC transporter, permease protein PstC +TIGR00247 2.0 1.0 0.3281 0.7526 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1201485 1202247 -1 # ID=1_1100|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1600713 1602462 -1 # ID=1_1459|Type=CDS|transl_table=11] TIGR00247: conserved hypothetical protein, YceG family +TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3043785 3045603 1 # ID=1_2749|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5153333 5155181 1 # ID=1_4673|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) +Cpn10 2.0 1.0 0.519 0.6211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3153869 3154226 -1 # ID=1_2859|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5172736 5173045 1 # ID=1_4694|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit +TIGR01428 2.0 1.0 0.5276 0.2105 0.2789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|425290 425983 1 # ID=1_362|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3808428 3809106 -1 # ID=1_3396|Type=CDS|transl_table=11] HAD_type_II: haloacid dehalogenase, type II +Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791411 3791717 1 # ID=1_3381|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5134359 5134545 1 # ID=1_4648|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e +TIGR01490 4.0 2.0 0.9067 0.2526 0.8316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3673972 3674866 1 # ID=1_3272|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3933751 3934558 1 # ID=1_3504|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|239675 240374 1 # ID=2_8002|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|249460 250255 1 # ID=2_8012|Type=CDS|transl_table=11] HAD-SF-IB-hyp1: HAD hydrolase, family IB +TIGR03356 5.0 2.0 1.4956 0.2105 0.4526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1116446 1117826 1 # ID=1_1017|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2728979 2730326 1 # ID=1_2489|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3054669 3056109 1 # ID=1_2758|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7324810 7326169 1 # ID=1_6529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8380678 8382118 1 # ID=1_7467|Type=CDS|transl_table=11] BGL: beta-galactosidase +TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6594925 6596854 1 # ID=1_5942|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7525612 7527583 1 # ID=1_6688|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase +TIGR01179 2.0 1.0 0.6237 0.6947 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3257699 3258680 1 # ID=1_2945|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3437661 3438627 -1 # ID=1_3092|Type=CDS|transl_table=11] galE: UDP-glucose 4-epimerase GalE +TIGR01031 2.0 1.0 0.4408 0.7316 0.9579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|457483 457654 1 # ID=1_393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6069793 6069967 1 # ID=1_5503|Type=CDS|transl_table=11] rpmF_bact: ribosomal protein bL32 +TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1210321 1210594 1 # ID=1_1107|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790677 3790932 -1 # ID=1_3378|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5830019 5830244 1 # ID=1_5290|Type=CDS|transl_table=11] L31: ribosomal protein bL31 +TIGR00674 2.0 1.0 0.6145 0.7737 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2048211 2049129 1 # ID=1_1875|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6266752 6267652 1 # ID=1_5674|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase +TIGR01515 2.0 1.0 0.2643 0.8105 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5914594 5916919 -1 # ID=1_5371|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8143093 8145319 -1 # ID=1_7243|Type=CDS|transl_table=11] branching_enzym: 1,4-alpha-glucan branching enzyme +TIGR01513 2.0 1.0 0.2556 0.9053 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|161236 162553 1 # ID=1_137|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3166795 3168142 1 # ID=1_2875|Type=CDS|transl_table=11] NAPRTase_put: nicotinate phosphoribosyltransferase +TIGR00773 3.0 1.0 0.6807 0.4263 0.6895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|16069 17302 -1 # ID=1_13|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3943389 3944814 1 # ID=1_3510|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8650205 8651438 1 # ID=1_7726|Type=CDS|transl_table=11] NhaA: Na+/H+ antiporter NhaA +TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2745001 2746024 -1 # ID=1_2504|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5068591 5069623 -1 # ID=1_4578|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5334545 5335736 1 # ID=1_4831|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6161551 6162613 -1 # ID=1_5593|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8077470 8078550 1 # ID=1_7179|Type=CDS|transl_table=11] aden_deam: adenosine deaminase +TIGR02891 2.0 1.0 0.9994 0.4474 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2316757 2318494 -1 # ID=1_2119|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8041765 8043442 1 # ID=1_7145|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I +TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1282581 1283121 -1 # ID=1_1169|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4977868 4978495 -1 # ID=1_4494|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5680106 5680757 1 # ID=1_5153|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase +TIGR01023 3.0 1.0 0.6482 0.5737 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|612155 612320 -1 # ID=1_529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790938 3791103 -1 # ID=1_3379|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5061598 5061763 1 # ID=1_4569|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 +TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2445704 2446967 1 # ID=1_2236|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4363347 4364685 -1 # ID=1_3906|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme +TIGR01245 2.0 1.0 0.1699 0.8579 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2308850 2309915 -1 # ID=1_2111|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3521672 3522704 -1 # ID=1_3165|Type=CDS|transl_table=11] trpD: anthranilate phosphoribosyltransferase +TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1923749 1924289 1 # ID=1_1756|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4413741 4414275 -1 # ID=1_3955|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family +TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1396237 1397416 -1 # ID=1_1280|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5092129 5093323 1 # ID=1_4596|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu +TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5089829 5091956 1 # ID=1_4595|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7301062 7303123 1 # ID=1_6514|Type=CDS|transl_table=11] EF-G: translation elongation factor G +TIGR01701 2.0 1.0 0.6849 0.3526 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2144638 2146918 1 # ID=1_1967|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8342695 8344990 1 # ID=1_7434|Type=CDS|transl_table=11] Fdhalpha-like: oxidoreductase alpha (molybdopterin) subunit +TIGR00212 2.0 1.0 0.3216 0.7947 0.8789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3669716 3670676 -1 # ID=1_3268|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8156603 8157545 -1 # ID=1_7254|Type=CDS|transl_table=11] hemC: hydroxymethylbilane synthase +TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2156336 2157773 -1 # ID=1_1977|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5892974 5894405 -1 # ID=1_5354|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase +TIGR01060 2.0 1.0 0.3455 0.9 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3390540 3391821 -1 # ID=1_3053|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8466853 8468158 -1 # ID=1_7546|Type=CDS|transl_table=11] eno: phosphopyruvate hydratase +TIGR01344 2.0 1.0 0.5307 0.2684 0.4 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1035207 1036800 1 # ID=1_944|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6865735 6867358 -1 # ID=1_6175|Type=CDS|transl_table=11] malate_syn_A: malate synthase A +TIGR01534 3.0 1.0 0.6895 0.6737 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2080142 2081153 -1 # ID=1_1910|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7832789 7834235 -1 # ID=1_6958|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8325356 8326355 -1 # ID=1_7420|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/example_data/sco_knownhits.tsv b/example_data/sco_knownhits.tsv new file mode 100644 index 0000000..422e5f6 --- /dev/null +++ b/example_data/sco_knownhits.tsv @@ -0,0 +1,48 @@ +#Model Description Sequence id evalue bitscore Sequence description +RF0002 AAC3 1890 3.6e-54 182.5 lcl|1890|scaffold_1|source|scaffold_1|loc|2059303_2060092_1 +RF0007 ABC_efflux 2723 4.8e-170 565.4 lcl|2723|scaffold_1|source|scaffold_1|loc|3010976_3014708_-1 +RF0007 ABC_efflux 2422 4.8e-95 318.0 lcl|2422|scaffold_1|source|scaffold_1|loc|2651102_2653031_1 +RF0007 ABC_efflux 1101 8.7e-81 270.9 lcl|1101|scaffold_1|source|scaffold_1|loc|1202479_1204282_-1 +RF0007 ABC_efflux 6925 2e-80 269.8 lcl|6925|scaffold_1|source|scaffold_1|loc|7782654_7784535_1 +RF0007 ABC_efflux 659 4.1e-74 248.9 lcl|659|scaffold_1|source|scaffold_1|loc|740313_742083_-1 +RF0051 Chlor_Efflux_Pump 7569 1.3e-124 415.2 lcl|7569|scaffold_1|source|scaffold_1|loc|8488517_8489696_1 +RF0051 Chlor_Efflux_Pump 7435 5.2e-112 373.7 lcl|7435|scaffold_1|source|scaffold_1|loc|8345037_8346285_1 +RF0054 ClassB 5022 7.4e-26 89.8 lcl|5022|scaffold_1|source|scaffold_1|loc|5533652_5534546_1 +RF0154 vanR 3534 6e-82 273.4 lcl|3534|scaffold_1|source|scaffold_1|loc|3967921_3968617_-1 +RF0155 vanS 3533 3e-88 295.1 lcl|3533|scaffold_1|source|scaffold_1|loc|3966834_3967929_-1 +RF0158 vanX 3540 4e-98 325.8 lcl|3540|scaffold_1|source|scaffold_1|loc|3973353_3973962_1 +PF00044.19 Gp_dh_N 1910 2.1e-61 205.4 lcl|1910|scaffold_1|source|scaffold_1|loc|2080142_2081153_-1 +PF00044.19 Gp_dh_N 7420 1.6e-53 179.9 lcl|7420|scaffold_1|source|scaffold_1|loc|8325356_8326355_-1 +PF00044.19 Gp_dh_N 6958 4.2e-39 133.0 lcl|6958|scaffold_1|source|scaffold_1|loc|7832789_7834235_-1 +PF00183.13 HSP90 7425 1e-116 389.6 lcl|7425|scaffold_1|source|scaffold_1|loc|8329971_8331888_1 +PF00183.13 HSP90 1365 3.8e-07 28.0 lcl|1365|scaffold_1|source|scaffold_1|loc|1494023_1495871_-1 +PF00185.19 OTCace 5905 3.9e-47 159.2 lcl|5905|scaffold_1|source|scaffold_1|loc|6550398_6551406_1 +PF00185.19 OTCace 1447 5.1e-37 126.3 lcl|1447|scaffold_1|source|scaffold_1|loc|1590406_1591387_-1 +PF00204.20 DNA_gyraseB 3818 2.4e-61 205.0 lcl|3818|scaffold_1|source|scaffold_1|loc|4263377_4265462_-1 +PF00204.20 DNA_gyraseB 5753 1.3e-50 170.1 lcl|5753|scaffold_1|source|scaffold_1|loc|6371005_6373129_1 +PF00227.21 Proteasome 1605 2e-38 130.7 lcl|1605|scaffold_1|source|scaffold_1|loc|1758474_1759251_-1 +PF00227.21 Proteasome 1604 1.7e-26 91.8 lcl|1604|scaffold_1|source|scaffold_1|loc|1757648_1758377_-1 +PF00364.17 Biotin_lipoyl 2144 9.1e-46 152.5 lcl|2144|scaffold_1|source|scaffold_1|loc|2345795_2347568_1 +PF00364.17 Biotin_lipoyl 3758 3.8e-23 80.0 lcl|3758|scaffold_1|source|scaffold_1|loc|4193531_4194941_-1 +PF00364.17 Biotin_lipoyl 7037 8.6e-23 78.9 lcl|7037|scaffold_1|source|scaffold_1|loc|7913373_7914627_-1 +PF00364.17 Biotin_lipoyl 2737 8.4e-20 69.3 lcl|2737|scaffold_1|source|scaffold_1|loc|3029141_3031109_1 +PF00364.17 Biotin_lipoyl 3773 5.7e-18 63.4 lcl|3773|scaffold_1|source|scaffold_1|loc|4210795_4212271_-1 +PF00364.17 Biotin_lipoyl 4851 7.4e-17 59.9 lcl|4851|scaffold_1|source|scaffold_1|loc|5355282_5357055_-1 +PF00364.17 Biotin_lipoyl 6203 7.4e-17 59.9 lcl|6203|scaffold_1|source|scaffold_1|loc|6897088_6898861_-1 +PF00364.17 Biotin_lipoyl 505 4.9e-15 54.0 lcl|505|scaffold_1|source|scaffold_1|loc|583522_586897_-1 +PF00364.17 Biotin_lipoyl 4318 1.6e-14 52.4 lcl|4318|scaffold_1|source|scaffold_1|loc|4796696_4798541_1 +PF00364.17 Biotin_lipoyl 1227 7.8e-09 34.2 lcl|1227|scaffold_1|source|scaffold_1|loc|1338247_1339366_-1 +PF00364.17 Biotin_lipoyl 715 4.1e-06 25.4 lcl|715|scaffold_1|source|scaffold_1|loc|796916_797723_1 +PF00364.17 Biotin_lipoyl 5402 2.1e-05 23.2 lcl|5402|scaffold_1|source|scaffold_1|loc|5957223_5957601_-1 +PF00521.15 DNA_topoisoIV 3817 3e-148 493.3 lcl|3817|scaffold_1|source|scaffold_1|loc|4260740_4263335_-1 +PF00521.15 DNA_topoisoIV 5767 7.4e-147 488.7 lcl|5767|scaffold_1|source|scaffold_1|loc|6386423_6388880_-1 +PF01039.17 Carboxyl_trans 5466 1.6e-201 669.0 lcl|5466|scaffold_1|source|scaffold_1|loc|6031664_6033248_1 +PF01039.17 Carboxyl_trans 4856 1.2e-199 662.9 lcl|4856|scaffold_1|source|scaffold_1|loc|5359017_5360610_-1 +PF01039.17 Carboxyl_trans 6216 2e-191 635.7 lcl|6216|scaffold_1|source|scaffold_1|loc|6943672_6945265_1 +PF01039.17 Carboxyl_trans 2736 3.3e-164 546.0 lcl|2736|scaffold_1|source|scaffold_1|loc|3027513_3029130_1 +PF01039.17 Carboxyl_trans 4317 6.6e-139 462.5 lcl|4317|scaffold_1|source|scaffold_1|loc|4795084_4796683_1 +PF01039.17 Carboxyl_trans 2403 2.8e-27 94.4 lcl|2403|scaffold_1|source|scaffold_1|loc|2624025_2625402_1 +PF13599.1 Pentapeptide_4 4206 2.2e-18 64.9 lcl|4206|scaffold_1|source|scaffold_1|loc|4684242_4684947_1 +TIGR02013 TIGR02013 4588 0 1814.6 lcl|4588|scaffold_1|source|scaffold_1|loc|5078060_5081546_1 +TIGR00663 TIGR00663 3822 9e-90 300.1 lcl|3822|scaffold_1|source|scaffold_1|loc|4268712_4269843_-1 +TIGR00663 TIGR00663 7877 6.8e-75 251.1 lcl|7877|scaffold_2|source|scaffold_2|loc|112311_113430_1 diff --git a/example_data/sco_prism.json.REMOVED.git-id b/example_data/sco_prism.json.REMOVED.git-id new file mode 100644 index 0000000..5ddd7e1 --- /dev/null +++ b/example_data/sco_prism.json.REMOVED.git-id @@ -0,0 +1 @@ +ebe4530db1e6b558531c87481cc34f3348903515 \ No newline at end of file diff --git a/example_data/sco_rre.txt b/example_data/sco_rre.txt new file mode 100644 index 0000000..496d413 --- /dev/null +++ b/example_data/sco_rre.txt @@ -0,0 +1,3 @@ +Gene name BGC ID BGC product Domain name E-value Bitscore Start End +NC_003888.3__256525-259687__SCO0269 N\A N\A Lanthipeptide_RRE 1.1999999999999999e-11 43.9 159 240 +NC_003888.3__7696261-7699360__SCO6930 N\A N\A Lanthipeptide_RRE 2.7e-20 71.5 160 253 diff --git a/example_data/sco_sempi.csv b/example_data/sco_sempi.csv new file mode 100644 index 0000000..4da5344 --- /dev/null +++ b/example_data/sco_sempi.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type" +1,106723,110434,"pks" +2,307598,308816,"nrps" +3,513997,524488,"nrps" +4,1405117,1405750,"nrps" +5,1477976,1479275,"nrps" +6,2290771,2292100,"nrps" +7,2559357,2561673,"pks" +8,2622623,2623751,"nrps" +9,2762807,2764220,"nrps" +10,2963180,2964527,"nrps" +11,3328396,3329098,"nrps" +12,3543364,3584771,"nrps" +13,3797561,3798752,"nrps" +14,3941523,3942822,"nrps" +15,4398632,4399859,"nrps" +16,4799973,4801182,"nrps" +17,4923207,4924557,"nrps" +18,5531212,5532682,"pks" +19,5786632,5788168,"pks" +20,6447994,6454855,"nrps-pks" +21,6558978,6560136,"nrps" +22,6804366,6807194,"nrps" +23,6901254,6931905,"pks" +24,7004464,7004725,"nrps" +25,7108290,7116050,"nrps" +26,7249252,7250602,"nrps" +27,7549538,7550897,"nrps" +28,7591514,7598516,"pks" +29,7734541,7735729,"nrps" +30,8053551,8054721,"nrps" +31,8140076,8141438,"nrps" +32,8282564,8283500,"nrps" +33,8504751,8523677,"nrps" From 522bf96b1055f7d0779abba8809340a510a8f739 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Jan 2021 15:34:30 +0200 Subject: [PATCH 003/199] Deleted arbitrary files Former-commit-id: ba5176c0e50a177fbff914bb43e24138d20c5336 --- scripts/SEMPI.csv | 34 ---------------------------------- scripts/antismash.csv | 34 ---------------------------------- scripts/prism.csv | 21 --------------------- 3 files changed, 89 deletions(-) delete mode 100644 scripts/SEMPI.csv delete mode 100644 scripts/antismash.csv delete mode 100644 scripts/prism.csv diff --git a/scripts/SEMPI.csv b/scripts/SEMPI.csv deleted file mode 100644 index b0c767d..0000000 --- a/scripts/SEMPI.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,265499,285807,"pks" -2,322194,323364,"nrps" -3,678973,680272,"nrps" -4,800581,817050,"nrps" -5,1077319,1078492,"nrps" -6,1120168,1273261,"nrps__pks-nrps" -7,1634731,1645837,"pks" -8,1735774,1737064,"nrps" -9,2102191,2103460,"nrps" -10,2627016,2628345,"nrps" -11,2703209,2704668,"pks" -12,2944104,2946367,"pks" -13,2987966,2989091,"nrps" -14,3123926,3125336,"nrps" -15,3677936,3678632,"nrps" -16,3939899,3941174,"nrps" -17,3974093,3997968,"nrps" -18,4357991,4359218,"nrps" -19,4511151,4550615,"nrps-pks" -20,4830004,4831306,"nrps" -21,5072759,5074112,"nrps" -22,6473671,6476491,"nrps" -23,6498100,6519166,"nrps" -24,6608007,6648672,"nrps-pks__pks-nrps" -25,6907668,6910487,"nrps" -26,7025702,7026944,"nrps" -27,7064162,7065458,"nrps" -28,7274612,7275953,"nrps" -29,7475842,7477030,"nrps" -30,7578772,7646060,"pks" -31,7719109,7790550,"pks" -32,8020281,8058514,"nrps" -33,8421143,8427440,"pks" diff --git a/scripts/antismash.csv b/scripts/antismash.csv deleted file mode 100644 index c5bae03..0000000 --- a/scripts/antismash.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,246652,307928,"t1pks__nrps-like" -2,325165,346365,"amglyccycl" -3,736284,745348,"melanin" -4,998058,1051082,"t3pks__other" -5,1121706,1292282,"oligosaccharide__pks-like__t1pks__nrps" -6,1453680,1494745,"t3pks" -7,1618485,1667940,"t1pks__hgle-ks" -8,2298100,2308505,"ectoine" -9,2669164,2740782,"t2pks" -10,3180406,3199484,"terpene" -11,3318899,3329394,"melanin" -12,3411659,3422303,"siderophore" -13,4492104,4583340,"nrps__transat-pks__other" -14,4669908,4678868,"ripp-like" -15,4990708,5013025,"lap" -16,5727277,5746817,"terpene" -17,6374218,6384127,"siderophore" -18,6453758,6538291,"nrps__lassopeptide" -19,6546409,6568422,"terpene" -20,6586783,6683387,"ripp-like__nrps__t2pks__napaa__oligosaccharide" -21,6731996,6741890,"ripp-like" -22,6761411,6782429,"terpene" -23,6951363,6964533,"siderophore" -24,6982756,6993755,"butyrolactone" -25,7009742,7037247,"betalactone" -26,7285072,7313149,"lassopeptide__rre-containing__lanthipeptide-class-i" -27,7417158,7443982,"terpene" -28,7471349,7493810,"lassopeptide" -29,7556442,7665592,"t1pks__nrps-like" -30,7699487,7810757,"t1pks" -31,8000158,8078955,"nrps__ripp-like" -32,8401116,8447860,"t1pks" -33,8452278,8498749,"oligosaccharide__rre-containing__lap" diff --git a/scripts/prism.csv b/scripts/prism.csv deleted file mode 100644 index a35433b..0000000 --- a/scripts/prism.csv +++ /dev/null @@ -1,21 +0,0 @@ -"Cluster","Start","Stop","Type" -1,260780,289035,"pks__nrps" -2,740318,741556,"melanin" -3,1112782,1275331,"pks__nrps" -4,1633484,1647940,"pks" -5,2303100,2303505,"ectoine" -6,2701203,2707506,"pentangular_polyphenol" -7,2935789,2947755,"pks" -8,3323049,3324394,"melanin" -9,3415877,3417647,"nis_synthase" -10,4502785,4535739,"pks__nrps" -11,6473614,6480794,"nrps" -12,6498082,6525437,"lasso_peptide__nrps" -13,6623240,6677166,"pks__nrps__angucycline" -14,6982007,6996654,"butyrolactone" -15,7292045,7303149,"class_i_lantipeptide__lasso_peptide" -16,7470952,7483810,"lasso_peptide" -17,7575697,7648356,"pks__nrps" -18,7705774,7792970,"pks" -19,8020158,8058955,"nrps" -20,8414751,8433666,"pks" From bf288c9e3ebd8d6c4e0340108e223e4a51065ca0 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Jan 2021 15:37:35 +0200 Subject: [PATCH 004/199] Simplified README Former-commit-id: 231eb7fcdedf30d2f28c554cc5947c576af9dc0a --- README.md | 160 ++++++++++++++++++++---------------------------------- 1 file changed, 59 insertions(+), 101 deletions(-) diff --git a/README.md b/README.md index 0c24d38..fe2a5c2 100644 --- a/README.md +++ b/README.md @@ -1,101 +1,59 @@ -# BGCViz -![Biocircos](images/BioCircos.png) -BGCViz is a[shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from PRISM, Antismash, DeepBGC and RREFinder to visualize interception between them in one sequence (genome). This integrative approach could point to both: - - "regions of interest", annotated with more that one tool. - - novel regions, annotated only by one of the methods. - -This app is written as a part of **Cambridge Bioinformatics Hackaton 2020** ([link](https://cambiohack.uk)). - -## Table of Contents -- [Introduction](#introduction) -- [Prerequisites](#prerequisites) -- [Installation](#installation) -- [Usage](#usage) - - [Input files](#input-files) - - [Controls](#controls) - - [Result plots](#result-plots) -- [Citation](#citation) - -## Introduction -BGCViz is an app for a simple visual comparison of BGC annotations in one genome. For basic functionality is depends on two files - antismash.csv and deepbgc.tsv files **(** see [input files](#input-files) for more information about input formats **)**
    -This basic functionality allows to: -- explore deepbgc and antismash bgc annotations with different deepbgc filters -- filter deepbgc data on various score simultaneously in a simple GUI (with sliders). - -For extended functionality, as BioCircos plot and bgc on chromosome plots , RREFinder and PRISM data should be also uploaded **(** see [input files](#input-files) **)**.
    -Extended functionality consists of: -- "BGC on chromosomes" plot, which uses antismash as a reference annotation, and plot only intercepted antismash bgc with another app. On hover additional info is available -- BioCircos plot, which demonstrated links between clusters, annotated with different tools. (all-vs-all comparison) -- Barplot which on y-axis holds info how many times cluster was annotated and on x-axis - cluster-ID. So that, clusters which were annotated by multiple tools can be named as "regions of interest" - -## Prerequisites -App is written entirely in R.
    - **Note:** the [web version](https://biopavlohrab.shinyapps.io/BGCViz/) is also available, with no installation needed.
    -Needed for a local run: -- R ( v. 4.0.2 ) [site](https://www.r-project.org) -- Rstudio ( v. 1.3.959 ) [site](https://rstudio.com) -- shiny ( v. 1.5.0 ) -- tidyverse ( v. 1.3.0 ) -- plyr ( v. 1.8.6 ) -- IntervalSurgeon ( v. 1.0 ) -- plotly ( v. 4.9.2.1 ) -- BioCircos ( v. 0.3.4 ) -- ggplot2 ( v. 3.3.2 ) - - - -## Installation -All packages can be installed via R console in Rstudio via: -```R -install.packages(c("BioCircos", "ggplot2", "plotly", "IntervalSurgeon", "plyr", "tidyverse", "shiny" )) -``` -If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: - -`conda install r-base rstudio` - -## Usage -Local run: -1. Open app.R in Rstudio -2. Press "Run app" button on the upper right corner of the script window. - -The app should open in a viewer panel in Rstudio, or a default web browser. The plots will be visible as soon as input files are uploaded. -### Input files -- Antismash and PRISM are comma-separated files, with 4 columns -> "Cluster", "Start", "Stop", "Type", where "Cluster" column holds clusted IDs as numbers.
    Example: (for data see example_data folder)
    -![antismash](images/antismash.png)
    -- deepbgc.tsv file is an standart tsv file output from DeepBGC.
    -Example: (data in in example_data folder)
    -![deepbgc](images/deepbgc.png)
    -- RREFinder.txt file is standart txt output file from RREFinder tool. But as a delimiter double underscore is used "__". So for proper parsing of this file, expected sequence name is: "Sequence-name__Coordinates__Gene-ID", possible "__Coordinates__product-description__Gene-ID" is reformated with product-decription deleted.
    -Example: (data example is in example_data folder)
    -![rrefinder](images/rrefinder.png)
    -### Controls -The app consist of three input categories: -1. Files upload and chromosome length input (mandatory inputs)
    -![files](images/upload.png)
    -2. DeepBGC and antismash data comparison plots controls. Those used for the first two result plots
    -![comp](images/deepbgc_expl.png)
    -3. DeepBGC filtering controls. Applied globally + download datasets button is available
    -![deep_filt](images/deepbgc_filt.png)
    -### Result plots -1. Barplot with a comparison of DeepBGC and antismash data. Have three categories -> "Annotated only by antismash", "Annotated by antismash and deepbgc", "Annotated only by deepbgc" -![deepbgc](images/barplot1.png) -2. Connected scatterplot with Novelty, Annotation and Skip rates, where: - - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how much clusters are annotated only by DeepBGC. - - Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash. - - Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how much clusters DeepBGC missed, assuming, that antismash is a reference annotation
    - -![rates](images/rates.png)
    -3. "BGC on chromosome" plots. On hover additional data is available - - First row is antismash BGC data plotted - - Rows under have the following structure: Reference_data_with_only_intercepted_results, data_with_which_the_interception_was_performed. The example can be "A_vs_D" and "D" rows. So "A_vs_D" holds antismash clusters (we use this annotation as a reference), which intercepts with the DeepBGC data (the row below). "D" row is all DeepBGC data plotted (not only intercepted. - -![ref](images/reference.png) -4. BioCircos plot. Here the all-vs-all comparison is performed. Hover on links gives a little bit of additional info, as IDs of the cluster of connected annotation tools, names of those tools and types of clusters. -
    - -![biocirc](images/biocircos.png) -5. Barplot, which shows how many times the given cluster is annotated by other tools. -![barplot2](images/barplot2.png) -## Citation -This project is still a work in progress, so there is no official publication. If it was useful you can cite it as:
    -P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/pavlohrab/BGCViz, doi: 10.13140/RG.2.2.23431.01444 +# BGCViz + +BGCViz is a shiny application (can be run locally, or via [website](https://pavloh.shinyapps.io/BGCViz_dev/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: + + - "regions of interest", annotated with more than one tool. + + - novel regions, annotated only by one of the methods. + + + +This app is written as a part of **Cambridge Bioinformatics Hackathon 2020** ([link](https://cambiohack.uk)).  + + +**All the documentation is available on out [site](https://ostash-group.github.io/BGCViz/#/)** + + +![Biocircos](images/biocircos.png) + + + +Currently, the app supports annotations from such sources: + +1. Antismash (both json and csv) + +2. PRISM (both json and csv) + +3. SEMPI (only csv) + +4. DeepBGC (raw tsv file) + +5. RRE-Finder (modified txt file) + +6. ARTS (raw tsv files) + + + +# Contributing + +There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement smth from out TO-DO list.  + +If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) + +# TO-DO list + +1. Write all group information in one GenBank file (for know separate files are generated. More info [here](Additional_analysis.md)) + +2. Add BigFAM information parsing + +3. Add generation of json files for an input to `--sideload` flag on antismash v. 6.0.  Then the data can be analyzed in details using antismash interface. + +4. Provide parsing of SQLite file from SEMPI (raw output). This is possible locally, but the web version crashes. + + + +# Citation + +This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: + +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 \ No newline at end of file From 85906f4ba25f3062e652eee0cf30e1369e82bf02 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Jan 2021 15:38:18 +0200 Subject: [PATCH 005/199] Added biocircos image Former-commit-id: eadc2594c957c632c766681f7244338770e43d05 --- images/biocircos.png | Bin 347385 -> 421179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/biocircos.png b/images/biocircos.png index 1a228b4c73ca1224e15ed0523ae309d4ece2b30d..8a7ca4034e410c30fa7f81e77d811bf0408796ba 100644 GIT binary patch literal 421179 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 z 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 z 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%0A_k|Tc%o8ghI&#DkX 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

    iK^v%v8qK(vFLhlasQF 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

    x5(AxoAPwc40>G#cF_lV|I3k6OAzX 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Ν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

    HDG}Zi`k*qoeh1*)`$n+kH#? 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ᧃ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

    ^tUGU~C(YH}X!_gqc*e`phYj>JxIz)fA;i!~; z!t-c6KL}7o#;W(uahuKlNXt*y92CNlH?IUfzfb%u@#om1q^5-r?;P=hs@4AaXn(VC{DcQk4T76#v|GCteXhEx;+g^ zVB^G&vJRaRMNXv&=1Ys>AXNae*N`ewOdb^=Ww1XTK@{CEIyGr7#FC=f+9g#~CF;7@ zH}Bne71lC;kbHKh;G40-ES{T7;yxQodTCg0BQAbj{CK%}9pF^wf5dzNl^Yk!P}V*& z`fc}yGlk>IAE$W&`jy?Y58~4!AB=KA+6vw)GADs#M_Jp-w&&jiLfV^DXB)5jNAA+c z7T7DZ!^VltlD8W6L?uF>+n%R=|B*jBn<80JQl0wKxtj~Dl$xykBY#xJ{P*eqJMz%~ z1kCsUVk7;PKF>_r7>0x$W$8#xOSmr#gaLYJ?&cT0-*e)B zcr)9%vmUL9s0*41=W_}!@4y5Yi)m#BQbE4Qr5Zffx{2mzGDY!oiDNpH*@GzJs_dZ1!M~bciW+nnSz{4s|&H3!_~5azW-bj=PhS zEvyx0i?hQ+40-_YE99|`}dU2FW_pAG8EEmI)+xBTu$ zH`$;#QZM*wKRmDaje~L!zNS3Bqx4@`+k%k5ufq(1z4$0g6i>lK^tkGy@g*!jaBdNu z<{2ohj3jTWoh@57GOuz1Cc`@|9RTD}su{{=1%U6sj#MQDyB*R^y=IIms&}^rQaB0# z&amV~#yp4oIo4 zDb`w6G6WT6ayKkFR=H@CiU#lGGJkU}TO&dNW@n*}m?uB_@YGeWuNy0IS1;>-8fz>^& z*g&t7k>|#3nJ+n0vQ#_}biyqMT=;d2q2Ykecsl7~u-6vBPbc}yhRR%<~hLUi?!U$av8`Ka57?MD)?js^QnL%*r)$9@sR92r)N6RGbLw zBmBsh-E@t~8{IX+)!6l(%w}R-@>thtqwLhwDY!1UMAF!FNeuc5_LRySzVM_&d`ArE z11z;6J&j$y!W<=^dL)i@f!4xQh<7Uo^E=$gYh z<7-$MUbF_S6_G~ezd2rCcUJRlfJE_=s~OHP5hIn-ehN+pQE77|)h9dWVTkvJSk}ma z@i^29L*7sgPP}+u+jt#f`FR=MG4jezsutjdyliIHn<`yels z`mlCS6H>bRo324!x7F2S4YJlcN3Ik~3+(#YrRdJZH7iNjt>wY&51$?Ao=v=}1|E?U z!*OHT2N3znNj1_$BN zL)d|@RwQD34Dc>f%4EMiuj!ktb5;-kqW|^?3#w@xXJhSeYap$tf{xs__6)axkCtRs$8l?g^X5H_(`>!-OUML=TE>6 zIS}xChsE3dP8dF+y>CHEed=vTie(>Mq#Ep~v)$Kl7QxQGXjq41^PScLo}|R;0RUKy zm%B6`(YSe2v#e5BWbFBt425{u|J_=ae9ja|w(Gv36m`hyJ*EtEX8QbgH*HE7*j?Zn z-F+=6T8=pgJ9Iv^8;&{*G2>r3<0lNO8(}NwfGi%loVZ4k>1PkXg91t&uitjb|0$jHq5u&j0^5~Pt*S!wtDlh#6;v%FsIuTv0pIdE#z@c z4GhFas?pSqpuDr&l!G<)5vTj72;(D8zr5w&`A`|EhNtMx=+*lf&HGUbXX*u+EBr`y zG_i%7d|!K3Y-mBx2pcG2uOEN1<$3?sIH#URXJnA;OJ>d?fb<*ZAy~Dq37_j(M%;*Y5@oUT%9+q{$zRHrYqwf=S+7Oq)rM{nm7K zyC!F29f|*W>r{3aQf8l~7aHNpZCxBv;A${7avbfLR94x>WAxscg5&NEJ#NAUQM9NC z^=Q7qW@k7RZmNX1V_|LS6cygW-ZAoWXG3?pt z0{2ZFogL}M@^`#)Lp;OCw)8bEP-=h3*Sg98+8h3<&^zV6nkEx8eCwY z5kV?(ysSKrej5CXfu~vWUD<`JTlh>Ofy?{nFYRHhulLYr5WLtb;M0@pCSwW+ zj$Q4*D+$#U#zATDD@Jd_ZGgEcI*4C?J&Q^04>@e{BpJ3)M zY*mVD98Ues@dvx~|FrPLLN#`2Zk@Clo_uliMZGwr zuB*Sa?3ER)B*LZ#^bKC-tkxiVhd-%En9V8JkJ%nqbzCebjW=%<5#d+0w9FlTNFh3q zZ`OJFTiwQegalkQF}Il}*4fsgZnP3(fnXXdC|$T5X+X?k1xArM6Y2%<|3Df-8IHBf zs!j(f%UONrpZl{|a}h8ny+ylY;L5DMbSphxDFXji{<+Gk6K|uh3T;!~{m@$zy5XA& z$2(b^9b~zqRwCTXjJd=L2f6J=B@55{p%9E|!a2G`vE??m>BBi0j{C9!4MGU<0A5wt zaA5nzj5_~JQX+L9$+Gl=%@WUAeYv6FVIeSgSRVF4b>@j~-s6P>`V+mK~EcCU6l!JS6 z$kp88`K!E-ma%~+S2!{vv9!H=k1DfklKUXFO?rz?8bF7v*MC9(NUGhDRyiQa%Z)dj zDpm8ufwO@OQj2EH$p2Yw>EFwN_WV8%M&Zu+Ur%%hNM7lnPMjfS8qM9te+~lR==YHO zCQTtAaXM>V9OwOWr)8(rQtz8Gw;)Lw5$5L3#u-v%Qsri6bw);kq!2W+*{rLG>dLQ* zRnWp051|h6yXQlKB`#wU_e*+kHhoKRML~Mgw%L)<;haS>ZELIf04~^wkQr z)YHLspa@pA!mhlg9C>f#&9Ulit6wR06OL(sM2E^)%~Gx72POx_A_j zl6_JhY~{2WNW8yxK59&149Z^+(>ExI4NQT8?8QLmcnBxTG<%Nh!I&}e7W?y#Oxlw~ z(oUo3qec(8&}H;z(!9bszJX1Q??I2I0@{ zVf^}8k4q;<(sIg*vqy1zms?990If3jerXYmA3K9+=G=w3LP3Ee4*2@ByQc*yi|^&- zn2kl&vFI;mep5A0{>-J{xqu1sQ{9^q+NwFshgM?HdeevC&s+CodWi*@DV~ehN`9=LoK6i?L>D!E9gM{F6m8LRLVL?%8 z>0)Xgd-H7s0;->1%whf{>@IC;Udy3dY7RKU{B+wI&zzif!vQ?r^bRu~RFS#<-^e&* zpHkUXHZTe4GCs=kBVi{;eCp_c)IRkM(KO?vN%$nFRXC@7S_a#3TVR9nDSm`$dh*nV z*&jDt7Yb=cFwqkUZY&=5ixUI$tDY~xCfbQ7zlu1xv z_0W+17#<^IWL;~6hNM9JzI@)Lz$P}+wA$}!rJz9rhpo2XrtccFXHsU8g97Wf&6&}S zP)`SLIdTpYId0p=c3yX{Ouw7gG$X#h{{CLrY^Mt38BN#=l$x5}N+V0cs&WwHsogDIJF&*5Q zx$=D5JUfW_;1v^nm0Z)n$X#ayotQu!l=wS{PH39(fxTY$DQj%LY?`6u_DZoKf`Fmz z*23W`+Xe@=`Q>J+M#H=l$YexEw^;AI9nBi@7+O0UBLBr3yDB!EDaq?*|4rLImU+bV zDye}zMJQFkyt6d;X4)-lW;J>vTL;D2ed~fm z2_7Io@T9Te7Tl81xCL#T;I55p60C7|3+^tBHtrVO-QC^h{eCld?x}muskw9N&Ob9l zb!{4|Wxw5f@3q#mp7kvLt;0HKm}SocG#egwq^iSAcH&&&5@gQ#&ae>HW7*f%!3ySR zSY)*Iw4G=y_f$yFpfs+evW=Zfkg3y&!VQBZupGHqgNTTU=F1(^G}@wS()IzrcWU$R z$jDc4u53yozsu>0Y}yKS#H8qRdE5 zB@=uK)v^TgP&Vf0=jWRB_5uAHyxiRA2OBsM-rg_#+gXW1N=izc8XM<2jZ$AA{S>IP z--*;Ny#n$jGjmQ%*$oYMfUD;2?!NzF9VmeZY79$-FahZ?L-ckVZW1gkEH17&r>^aW z)g;)ttA~b0Qm3A-+9jrna}W<7Ur^_2gBE}#%{vMR2ykM_UhYZNs(9}l=}eLfjxCyf z*07xC26W7pw@lXGXm8hIGYjG`)7IYlL?V3p=iTj=yqFe4W`W|qM~w(vfr{9dS`*Vw z)h$jk@YNiEp^4~j#It?xK4&~EJ1|JE!W39(|lta%5B(`c* zRcQn@9OyC|>79qNl)R+cMWR|#)L-X7qlex|CUh9~M(h%?T{;fB+pY3Lf+G426N%Xb zt&{308PXdr-tou~8RqA4G`QAF<5ZR0{OR@D39hv|pv4{5=_vlhhsd;M%N5&{(OfrW zwX4f2@epR`mEiq-{kZFuO3;B`WgJZ`?c`qh>>gd09P`H;G7b`z(i!*0>19%({3D%T zqsJ$TNfY!zVWkY_ZY+I}-HzDf`1>+V1yx*grw z`gFSuh&v@1AeM7T0a%oHk^IuEVZ0)q(}s$@$9#|MLnqUsHl`07we z=XzsKc6WJ=sdo>}Oph*)(iE20J1=XT_7|sGvG7=n)n8z%1#bnrGjnyvS_KXL_z0TR zdmQ;IvtTqSNkI}&KUlAVhF$K8i^3!%Hnq^(uMggZ9)d$lVh{ZuDGG$=ER$7U+bn%; zYxO9avo8tZ>m3eAY=DtGybvub-ckdta^Hl3%pA{8)@!B`#lhf(Ep`BnVi0Q1b``-C$WW&B@0FmWw;Cxh~J>tVHR zf>1F*AvFhE`@w;7^EhWS4Yle{dZz99uA@dp9rT1bql}V6@;mk+`}E@_il=by8x(qf zqFpw#D&LBLnSfMLrZ^>sSC*e0YDepf*Y}zoX}t!-XX}e6*7u~qIrTXqSTY0Jo2L7l zY_ppjd>X``=ker1tv{L0PIKlpWxtq$KmYzDAY)W=dus)Getgz)AuV@Nd^2}K>U3s- z(JdD1H(119wMluHj%<^O7)o_fMjQJ43<>FO9FBG6JlTpFbzwyS9DT=%!H)WZE{x{| zT?mg_(>2=$pv=4$;(HzPes2Gy5)Vm(~OZK$A-xR|_;w$9xm$mw@OCg}~hlh(c$ zJ@18Y=8`T4y+p^BD*083Pt_@QdlF!>RFKD2==;s{36RY&+89#F?!e;=bcM84tP|FJ z7Pzo&o~x+?PRi6)(sT9qXSZE=U%}vUHI4YlSh%&m<2uLO(x(G+cnJCXxJu8RuKZN%eaH245ZkVO$r$cqG}(bHxP$yWh7_=O{w4QhO!{kq zA3!N~6ZELIWndfcgBSLF9KCz8@z=7I3WAawbGKwx;?LUR@yh#z@JU?#2uDT026;*o zfrk0+Adt~$#qYvqe+s+ARE21s6k$IKm);{3gRjq%&H%>IL)WCdq^|ugdx@bJt!dSw z>fJJSY24v-O{V=C9*weg_luw?V=jD)Vp3PiQ5*G$GwqA@Tz#wcyu2S~3KdETmFe|P zWKpulEmOe4zhW&JR9RWeN4dj=*7y|bxP~~UtUh&;ZZBP|!t~fqakGT7-}H{<>$*kZ zc^paS!n3=*THlthzvJG^zQ2Yc7T7MYktL)8@8a}+N1?`Iq>8e5sGX(~KvCP#ATNop z?sn4?tarr^7U_; zCc9wxCkCCzu4w;mP< z4yG9m<%-+@j~^<#Pe!6a7LdF`)wr|NZ`rz9ow_KchD_l^@FzjeC8DGjT4r1I^q$Z| zse&4B-$JNlLC80kqQ*+E6>ndjS98iT3>2~5*~UzUl4&wb52@S5)7NOe#A)MNBX_~l zHYv?0z_#X@dLRp3fr>*D_3WIYjikBu=|9~oaQ!v?G(7z2dmS^=w2I1G=AuUvewE}w_ zgPmASrYL_nM*qE_f1Y}_8+XHYv8sGj#c`C`99|9W*<|c4*$`x(Rw^!)$r-9&T0e1rCLWY&`m=4$vo zJli)Qve2!$d2tCaPV-qSmn+k)*8I5xkqx+mZ=zWH%p7oEX&!zj=gl!*59^flalbVT z-hU9D5R)4_`-O95x1ke-$wHkHldVEA0hw}St?<{s_i=BgX`A#&C#e@)D>>iRYGNj| zHL%+p!vPJ3RO9+))7$C4_x@FlgH2&W1Ijp(irR|4#0aO3Ly$u|Z^`1xNU3o~?GwtB zMhYsm($%xsB5lp>256f4$5RgU26(&Y;8dVTgzhzoMiUnL83ZuKLcJS4`Y%gJ*s6A=!R{clu^m-A2V5LN zz_umAn2s22E#$`Ks%djosU((E-wDsfb#GLTJL$cG4rXgoDA>jIiEB0PTE?&##Df3A z>&@X;gFAFM-}P-Jzpa>ps2M65QefimQc|($H{W8j%7TUqC%bjuV@Aa2zV;x|z+=Pq z`feb0aa2tB4!llj)3hl1!HmJJVHt@g-x>NFFo5wKxz;%ZzzOrKUySzE>5d&_4e@)v zcmtXKov#;@N`#4u!4K=)lR1GtYOMpS>_9_Gg_D-i(Xw8vqTT)q^^}rJcHh8@WPZlK z;}Z=}#(9gy79c%7HPrAM)*`d!jLUDCr1RLLq$VJy zqrdRNq6wB5mPIuV^@vVD&>gX-P##{~uP-AskE81gCc9`#OYudssfBpAm9SfjqN{uD zv?Na3rq>zkcls+8K`&2lP;?Iq8n3hT)RTE3Su>HbQ}1FL`M>??lk@y2w!w%CRmJ6- zXSUZp4>Z&zQC`u3n-@))agou96Nam}MlwhDt=rY{Pg}<;s+CBX6n?wf9vAA6NJNdo z@7hXvD|%07QG3Q>C>5oj?N=d0onxVEz~)y}6hIN=!uxGrDLFbi(}jWK&$N+XwP|KPe zc--=$j|ZT^TP7#|??woXrkvccRz9#Pmvc0^%3dEz1TpY}QKjOS z^GKf=&qm$3i@P(n8dLsx=Qx_>R|8UROy~QXRZd|i^U2Iyu0BFf72pTl}y(#!3 zc@OO=E!Y~ zY;;kTvbq3X;&BHhJz=D#reuYR)J`!z{b`4~eW#;S-h*`kK2^0U{gT_ooT-;b@7)1v~x+~u&eZL?S!dbn}f zl}FqfZFOtA@OC8RSxv=y57tK=S*!_gTqa#1FeE)Tbm2q#B6Uw>@a=Ru!v(cPe~sig zK~h&5H~~_Nz$!IP=tIf!O|1;LNJUr?vgwZoV*sa^xjN7Jz4?_7qOY?vYekmowvnM( zR8PDZrX{A9>nSZt&qJX>uuCVHaC`c-J;;*q5b%dJvo{+_I@)FkB@iK|U1Y^}y$n4B zKe`G37LxCujEkJ|YT$qpJzaWi(kF0;(QzO?A|OX;7*n45BoevMpvMJ%uF?I0M>mnP zeV6)_C$qGK%iI}lm5|d?^WnDaqlerFz7%w)sH3 zo`?E48}N^%4CvH2!^#`hJS1;R78iK#d}nZd^$qWw0#n_1$1h2N#_xwtLOY+bziOSU zOXmDgJj`@o75Daj1-3toPDJrELyv=9<9?$y={Ni27&u%*fkDkXy5GDFIY^?@klr8h z3s`A=CK$%DV@f|P;^#k{EWqquIogL^nk@;g7v6orII6FjVj1#&E43r%()6^Ia=LJS zcIJs&;n*JA*U}MgUX?@#FB+QWJT?_xeX2dqnOq}bvrgRwVC1|;ei6jt;<(H@(e3$| zG1ogI2+!GoN@+q+yUXWr+r-n1#vn9koTLZM%jBg9#rRL6fWF!P&IK61*emy^_c{?)8prz3erTDX@ ztfUrEsg+?@f#}?G-t15NG!`Tz8K?? zGzOYttX8axJ75sHH5du<*rpbC_H3{XVi2amWwdZ&|1P)&CR2x0D2*p-320HHs86~7 zU2nD*)r4P02W&B~szj46jc_H5QJhf&Qe^MzG!>>0>4Yhiq+i{E?J$g{_j;DS4cz?lM99L#rN;|F zgUzGOtC6OtP~E=1^CYY#8{o=pZBR>)0E6b&32v&uo8xml z+FSMyj8`fC1!L%fiX!5Y^rhe;#$|7@%~_vJwsWl5&9kvX0q;ty&=;oK6!5YUF*Bdi z$S;~DxFx&3ZMI{zEtJ7qwa{g1h;&6tNiyGEFS9jU8+D(YR~OVXBJ|_soNFo-C^YKn zQ-%>RKP$K5005EmD4AGY+xTYiff$gT>Xc`X4!Ir=Me+00qr*;cUab*qh=tv3db;% zlv>Wd-ZY*xh#|H(3^tDEAcimXc$w_$x#GNj7NtxeHZ?%f;24lw6QiurxcYm@@_vZ# zqBFeCl6rUdv0P|PngI1l;1nw$Dy_^eFP$k5AP``K0`uAHza9IAsa;k~nU>m>mDOL{wNBQr{UUQhEWKwncx^oBkuH|T z3^of&j~uCxgs}d})GQ@7lP=kE4Nuy*8<cAruVe= zxg?WTv+DRW9{p$1lLegY6yKQdB;9z6)YR?cC{<_~l_akY)I)jys$Q&*1fm|R zmOnmw{8`i8;Nh75Em8J6JY*SRy#tuv!hRcfz8ns8F;mfQs~3<#i+q0Ak_*hJc6K8( zT1HZ2t!My?%j(`_tt*Vvia{Ey@IgACkUx@HEs<9$Md!P2nZVd9kxeLVXYO67OybZK zr588inC_niI(layHtfqje+3c;P{x3~^ zFwrDixk(y;=Wk~b@JVmAFfnj3ExhS(uY+xbyc)9SD5~80U|4dJvaLg$_Tn%*b92`-VT>oNUDEkgmeV6BQ@=XA+I*_W87Y&u4;YZP)1exAOe zPfYqS2hl|6#PB=ZZor^;uX;B?AkfLp@Vleb5`p2c*gi1WkNRVT{JT$auduNvJar8M zPTarj)8JnRR7!eDJa&o_grrmOvZf>0%OVwIao<1`7it}8wsRG;<+ zprJPeD)T~SBKM1o4Vv~w+!JDI%Nql5-`}ZU2HF@6r>)u9OLWdi%euEp(5JXNA~v5K zDb>&b^;C$5HKp!yQTC4M8Py9sI4Of>ilTz$yFUGmlsK-7-pFLQB<2Ks^pnee-vAy^ zNaJlJ<%p=@x;KtI1lRzB4$c1h*CeCKIq~zP*@R;lcc`e%;~4fteP`^bN{2ycH8FS{ zXoW)RG4SCpX4&6lfRqXClGYdCVOK=r@Z4psY%2vjUHO{E!hDCGGlatv6Qn!?R%a`} zl3I+6na7KKp%zdC_M1JmPJ*FCJI|FU;NTH&PAc8n4a`&Zk1fvUDZvvhf=6STW7Lix z&d>Mp?4Gr6y;Ux>$1)~p!lO4+!1q*;$x>W5z)y=U`b0;6*Z-V1Jng1cLIUQKFQjJ4 zrc7Rp_Zo&lqZFbdQ?0&5$PmZP>TbSQ9#tZ7^e#u%P?zs_GN`-vfC%Z%jGczjt z={qLLk9Uki9*n^&FR9;=bq_`cAiHB(`*AFR^v8nZ^)g8vZ_}~6z6`=59PyxM@ z^dzLv4+eniD5pOi3pUH85-8?^<`ot7{}#E<*rsXYFV&7Kac>Uv_`u8i{X?3-!k8*z zYkNcIax&_b6tG+=Kzfm<=AGqUs@MYaE44pg)g?)t>Byk%m|bod zdK92&M!#dMpFeLo-)4zmF{zgpuU8>;D8M8$7BKDr2l=)w$D0tE%I2Z7)x{SJXgMi3 zM6Szq!IG3{I3^}8f*B}bFxdN{6 zuqejcUle#dP==|8pEvAZbl#L>y;ok!vxkJ(rIFxny4p#dv_9%Qk@&5=l|M=oKKEP% zXd>Sgn@Tk&sH21!(ijQ^YK0wU=@Q5WjuwdA{p7&t#>ZQ0XDKk4*Pta;d`x*cx0}eh zGs4JA_ZBT7P*;|E2l`e1xF*9v-ONx7aJko`9eynow}jCfVtnyp?-Gw9o;1KwCal@oQ<6?uFe zQ>-5k9s;reITysf8QQsg@;Uq>8ML~3)ZfVll#UcQCD!en0{G+Qfj#lE$J=xEN|VH| zh$p!6G_tuNcHDpTKn3)*oF4OXf{DSSFQ^KDylKe?Ab@u^Q)GLXOeb=O* zW=dJuJI!NKBUSUyYOsC~qxEIonUPo-C=X*BgKT)@M0GT!rjg7$Ee|N}7N`@aH6qmC z$0Xiw|Is=4tww7ewNW3r?pxlgVLujUoC|)leumpNuk3On(OJdqP$FJQ#aK#9=i=h? zB_{3uTWFsK^=27$jga2wjXT*$ZfYh;5K6T8b3@j%41osB7%!+u>`C@XzFZ(j+U7g5 z@&w!8+Yo3J#d~FWqtny%stf=4p6LC!94vteA0aww7l}WIV-Ca`jeG+p1ft~zS{rIz~FNrStLrp?{5Z0BcD)X?-s_54w*lgxW@MY0DgQaPOtaN z>L>BQfZ)(Osp|Ee=+3V%+713k@PFsmb|>_O1E0d`RGtAdRc{LBdeP$ItdPc8QF_zV zA`L)7bo&RtnA!!5ePWWf0Q}E6yn;^|XyMSp_|pv#F8=9JzbFV4u(ULx-2ErSjS|^f zKs={G0SM$4?8ui60QN5R>LWd}T4nDw2)6&v%Y5RnE-M&Pswgg-e)M zW@l&jKP=wX)z)%zbI%_D%#!8H-JKoQ_vi%7+9aGSuCA^?!X( zQ&VoP@ph?)7|71X=7(C669}l7xxNAZu(7xQoHWRJWoAbm1V zp$}Y@YwZ*{n@?{Z2lw4|Ev_0uox_^O>-F4^#HecOMq4eF5&76*u7r7ViC*WvaJb1; zaPf@1yEn*EHuVD}f^cZ+P_wRa<;Fc9=_53Vt2S(a+wGO-ipB0m@#%lVGaFemNxrSOjm?V7wFO$2Az(&lN>f>^8=KW5tH9B+52cf8I+|71sf5%N(IFsiXrF0obWvfBk);H;%I_@((pGWHhNQBF7esCUZF>XZx6 zHPUz>#?eb5lO`fRM~yo)AL2AB?Xf^uikz8}pD?s1!rb_IDrP*1-Lar5{TZ0xyp2FR zVN18Vk5Sq>KA!AP^gi_7*xA&b7i2!nZ_wlz7uU{&P`_ zCKPCE1*BRFlg6@TgX(Suc&u-njX|I=TU^n7!Min8wV#NLA(Gkr&DUZf4<)Aq+5Yyq zF1V?u8B7@wYwlVBuw<>2fjHg(SYx&V7HGB3C78v@5tFgSQV({82;uSlXqUiXAPOTe z-hR9I^2SFiZN1S+9pKFS$l{%FH+~;lq8}b4-m|Y&U{2zC_6!-xhEZroQ}UPn5c>8v}hVjd#3glN@QNQsHu+Z9;-Pmmep4(B#$V5-=0*PdKZS?-oQGd^22CAgQVi!`?!2^? zk?|Nz7_wzMLM*16LR0QfQXl$ugMIwF71joBzlG0#!-bT(?v$epZS_APYPQQ# z!5^bi3PMvSJab2%rVrtnFPAdNHedgze?wK8?7Yl|IB)+`%< zBhI7Ntd?{)3QZCX4@iiN=Sl3bGkB;7^Ol-qCMtd~I~Wbr@rt>tT{#WXutyqGt3OT% zPtI6vN1zDbHX1RzWH_H`@N6)RORTM?V%bt>peSgc$WA4!ad!|4g>oL?P=z+^INVD3 z21X_i#&)P#8FOxU%EF2}V;h~j< z1;A-X_ILaU*tHhHk1PMtxV+f4b^=&OzZyOqc{w?(G_Sd%NPsYIV-BRs|8KL^|ECfR zTuCo(ORlLwP1;M7lSbvLsN7Pdk%Q-X@2gRQsxzPjGSgKHLq)F zx58G7&J}_GLVjU#{$Kfpp}YT{U#P3>1PuE;Td^o{*j)$S5>QBR-7^ZDxeM2Ffou02 zgga~2CvverM0+-MW&}0RkzhTWw3Oo9wP8HA3+!Oh5Hi+>bjbJ5 zGI2;6sKL4^tSb|^ov z*=l)c%3u&Q_!kfUe?7r~*&Kz81i9sP+f-)c{uixPaY=A~O%0h(da^+a$g#G_vCf9v ztXKa95|5WFIU(H#KtQvsjkn6BXQIE9KwZke(tWVQTlBahCcp&rD*fr!CC>F2-4fAH zPRv(jz6>M|fz-lFIoW`POTl32u~-&3xFt{w?~y+?LM)VklU_rn0R{Xs`4&1 z`X={PTUSQ6d^NvmJF<@5?^5opDUr%q5*MBZeX^bfFt>+N%trSWT1tIfL& zqEK$$HkI8f((h!tB2Zj|yTJad!pL0NW)jf9LVWj$iF}x&e%KPTExqUSk8)(739-7^Wuw4k+NH)<560Y z%v>+0XNUM)4H*?Y7%2DB_eplM+5f_x(DLRsmbW2uENx#|2unO`;#wLdh}zBZQKW-7bfp=YVkjlVl_O*mb6 zRaN@Oru3J+8|tF+E;SVazF~huqIxl;RQT%14v#)Co|pjdaK?4{X94tkT1=0mK_25% zO+fsY0QdnNm3+Cbl}t8s_kdOf|G{90q{AK_GHofO1xc_SPGo*ju|Jqy*Q}>Rz7bO% z1l2*)=l+EvlD(to;O`i-*MZ`jMnC$(Txu#t=}Oj6KuZeEZfQ8sK}hWuzPkJMY|5&y zPl!_eWQ45qR`vEXjrDNLFY&QoZONoE8OCUwn@m4;lWx`hEt+=n>uj;!;wI!fyZzE_ zURBLyaHzD?&p7@o<`Q`1|MUS^XiY0Pp``a+&_0GbJ``i0-uE>s3!nd{3))K$_mBt0 zyz!0H>FRl}e=#z)PWs7~i{#o|p)GMZv8bqILi}Q)S}S;e<-Jh)r`rIQ;linG`lV7m za#$$lyB=e?tIx4VJU}ytA{w+Z>ZwiBwKj5)jC*oyHDN>S5a+;O&m`#zf4j-<<~H zzJH*v+y1pP!roz@p6|H4ghVtEK+Q(h7Z4Wcl3q63$C*Ml?JBdYPC;WcnTeAwPIgvS zTk5bqxyI&>iOu>P6CfXdD>Pf6N1-Jy>@^$TDLs<_(yhk-5wvRdFKD&Fysd61xIl)d zlTP>BS5s5ZZy)?&w>buW8q42qeyuTZ;L(VPf^%uri@UtXXLl@uHOJ7>tGEqL>=Ul87u|>}m~5@|P*ZVBm%rKgNSS4lCEoBGCyaGqK!?RRLg{aqz?UL+!b*hS|dhr;ElIIvW<4bP~#1iCE77q}a z3+#CvdJE#l0_D&tV^!&Ft5cbtD%7tYS}VM+4(4X2U7I*|K8IKmU}%9!K*E`N)*MpQ znYy*OqCi>p@~3PTY5_jlWS&cTquYYUVf)D1sk12WJK4#9$8JXXudHiIX;b0lD1JaO%`>}>w`_nSfd;;Tc2{d zZ8JT)q<)6?>%diinqp_o@hVm-&k3@xHUI}jueWQGj|tO_`>(QAcw;^F`pz3$MOy`h z(9QC3pD&quGAcJL30O!-{|-`};%PLZku3>wtCPO$N(EYsX#oWp_f9r)|Ds1s&G`eA z=~^zJl=MF=&Ka9PnHn2|LUsYKq?UFHqv)40+V;imKRV+RW^4=XPJK3jl=;ri&hBpg zoG;-19CWUo)M}Ra`}-#)B@I6FK*^oj3lYsMEiEl9EF84G3e@io#UAO2pg3~;_)id) zFt|B6sRF7XwDUlj0wOi!lgZ)E&Q73Tx79xt2ylp;Tv+RmTIZA1vVUfxU#_}Oz3BQ+ zn0bf{Xubj+)c|x?*z17rUxm(m>tFxH@_=GuVgkD7MwK(0+88DHz~t|Ie1Hr64@UcT z6gUkd|LRFDzTkz@yyBUjR}`S#Zo}7KuXqlK`CH^StgH;i#B5n!B|ktMYra86#=HXA zPp|e$1$2!)4685wAi(F&wL*Ql68|KzSaz@$CMC3Z^OfJD(bM?spm5iC_aCY=Biz2L zs}zsspBhB?D11i@Q$8)_yaaLLbM)pT?|gU|p1no$MGj)mX)aFHyW(Y`*lUDdrv& zfFd!ViGAqMFSPxGfF9o1e1!gf=saeV-T9*5ZJ&p|C48~+E@Wcm<#Bn zE+M1eoIUNywSN;8gVi9XJmN&oU;EJ}MR~3UlFF6p(XHQ0&(2%pQLAXVc`~s1w6wU; zEuu{AiuA<#!WjIXP#Y|!q>Tzr*=D2F+s)$0YE}7RRja+CGA&b8Tc%N=-D)WUFH`9` z-B|oXV1qUvJs@(XfFHXu_YG9?llcX0D7N>D_MhwnEe|igzoTTAN%33~x<(&{Zn~sG z1<5zNp+nFibd`aCi$-JHo+`dkcE@PBz`aFpKW3q8yJP*{UMIdk8!cVU z?)G2GS+WZITd#bCSnBuBDVX_Jr>gie2cSa*F2Bk+qw&(LFyb?M=F}WLZ|x!OSHlYZ z&7EwEFqmfnP%_)r%;;)-u%>|I*S8;sqnMqfB1HL%o8^-@>hgZMNkU5_DtcB{hWQDKPHDCHO-QVG7KijwE$?6NBlTsW^R+u7b z7W2%GHnlb-7j4Tb^hj=Dtf+PGf6fngr=M%S05lX1a^)tshb+~g3NMi?_0qrkBhq)- zn4GT(>UPvxC4E8Hk3Yh`zL8%)WH3*B{GzBv_$`&#gW@U;wmr21w8{8J#J%TvHRw-w z@)jwe3Y!kU25A zSk20RA#?$~J}1z|1d1*4KFuY_JO4Nwop$@?eJ03cer!%h%)fK9B2*&`B$&G$78rlz z&$;Cd^&5kaDzNom3>x}>#z)FI6;`JB{X6S8@vX)5UF*k>pTu{`K5yP1%J^sDQj5zd z&rNz|L@Wx}s#uuaKQJmQNB(i+4|R9x0o2nQxJs5D1dxOm0(iY&A)y;{IQaEz-%Ga( zkjkdrV9HJO>k`GbbF zxi9{@?*5ISmV#)j6Uio<0gXz>a_2U*1qkLyL|=uD#>Q|w`(nNk+U!+a{hT1NYAbQ} zSqq{mlk`jbFH0S>59GKwmvc1VD3?;KUN;K=*64S9M{bLPQdb9|3V>OR%Qa$h8RH_U zuCUV5I)oB@hnB0bQ3-B{tIt-tQQ<`OKEU&XJf6LjMJ>8tK8_0F|H0fe1wXZ>(Thd* zHYhs^FRC&Yj1+&_a#0Sh{`@`p@(8E`c6S|n8}EZ+o8OMq--rr$o=c?d?a8Fxm}r57oTuV!U<%B1a2%#i=~@ zzAXllqn`yOi~KpmZu<@MT#!Skok_QeL$D@#^7M(y;_{XP8TkS3wsw5n<1ebiXK_(L znhZk>`OEvWYxeeM!I&s)CAV!Ghr~;Ya`>&M9)b09QP4-hYb_nbeI*Y!x4om|B_qMJ?fv~|anJIG;s6-TDi}z)q7g7n&&|!v z%v=;#BmXcqroj)=P*+b*LH0cEO37N{rvZU9>{i-*b8@I5kSR~|hAD+UgNjPy;n4T2 zZLhx#0jg;^Ih);Z3Qz`L!iP6{<!;OM$Rt^ldr@t>8nueG0 ztqc(}Ht+ucm?l>7U9p!4-^R5hlOGw#TT9LE_tj6?Fwoke9OCZvlcB^B*5k6gXBf_i za<=Q(?|Q0yu&5RXTRpsNU55#DQ*M6SVL%`D_rY1TCbWles0@cTJ=gi z6PDXfA|-vu@^j$Ht?$n!lYlmP$l!Aa>>~1|g+PJsY&Nk`o%^3y$$4suY8g!?nrRZfKZZ^9%87-eF;Gql2S*)?t0SLgxOAZ%Cd8 zSZ^#1Nl-AwFw=9!d!Dq5+7qvmgyvx(n_w!HTrb;%>N*cJEj+z?EnDZdy3^;A+>Y|< zwtQFqSLkJ4p-jJEa`=_E7|cC*tjr{vXD_9_pL5F8^+`>FpFp~O)2R<BQcuU1zuOlSOc+)HbCI*vXTU!M8Z48zU)JecUcI(FiO48U-Tp_T0^+1m38 z8h}1t{~C$Z_#*bBtkw#MXvN5@rXB-n2+qOH8}`M2c_-%ca3$f;VTKVm8kwb~@!YS_ zn)*%5r63teQh@=jjjj}(_f#M4(#uK>nD$jk#qUAS zd1oC$@R2sDakDTNihD@}H2oW2qsQ^J?O0^${Pk1aH?>6KT|2W#CGUfKCDOHdK|7aU2O)}gPDtM7ryCvXz z@mrNY@8%8y|D3q|+T0(~Q>$zyrn92ig&p)635o71m7AOE$H5prIu7am`F6xvdqGa9 zHpg&r`iQ3K35?8(^J;EIV)&K+o{Y)f_5W7ebw)MSb?HP96$Aw-Qbj2Op(sTZL{OR% zkWL^psgWYmn}jHe2;vKfNR=o}LI_1lAQBJ+BK-vuBB2*)K_VRkf$zRE^J8Y#_ixtx zIrsj#>)dnJ+0WX0Kl?m;+PyP-xu#i!Nov@Ws80HDt-8GIJoIvaSDxcbqK=7qIn`r^ z@_g8>LvGS`L&inF`cI+J_fkuc=|$fVhA@8J0sofg(TC~HqzA767H#I@>hK(8e)&-b zRX7R-;Z^>p<7hV(A1!TwKlTVeS7d4HcM25)f%(0V$UCQ1=RcWL81r0Wu#Or1lMFFw z7G=y62ohhNo++usJ6ZnFNyrV=JeR3wU=UGu4}BiV^%<7a z^!r5$5;z#$4AlJ@Tmb+Wq_fKxvZr*_52go^SY;%e0>C{hO`DwgpD_C0A@%>~UFQTs z>8>RjEx!}*On$G!nx~hTT(9NYGA1I=E*QxzTXJhqQRgzsRz?& z>5Qfkq~SO#<4Q=2rP74GW;CE*7NEOLLra|b2Q|#NJK1Ym=g8o;* z>lOUHq!jeBEd@>tvvu-pfQw7K+qJ9ad2H*rZ{!}@059fAajdSRv463sz9yq=h0FQC zgHn+BNCtuG421`b6R?!!Yimo|zNSK=Vyq4BuVhy|Ow+;-WU3Kg*=gKwgYh;ZRmv}8&Y0#jy~zsP>iyQf z133vYQM-UJD0y%@29q8u?VNJupu}7uxk%7@aPGv#yXK_#+<6Z9@As->t$Rdb3=Y zqX^C}fz$*K{gZ!&cYL^_i3joN2#$u_OUdn+n2=J*fIT$n8N2AZKY@rBEvVAbnN?#` zc*zO*0C%z29QKc?zCjOR3pI2Q-M+KnB@p{MS4-dO(Od(V)%Zlp%)h$Zvq4e|GT-UC6^sx#-WwLji!u*-k5VQE*sA9+A) z;-pg?*~&DFOBkvN#MkJXCd}i)wNPe;io=9j1LlsYKmrwBjvFiZYOYpj1|>o{Mw1oZ1H`f9;=k$DZNriQ2+?;_%z#RiMMT*x3YxB#2}ozcC05Q%K}PU8GT{mB z@AaY9g^k#lxw$HfMr~Qh*anyAqrNma6v~r3-X_)7H2&npB||&!C?8zdbT*d_FYS?{&T4o^orw4W6PSW^bS|xgjH5^(RQgNDnhhsD*0%7f!gFG~yzG-*Gn(>96N1qge!r1+{- z=8-R6h+?CD=fjD($E)VyZ<=|ttwmDva>bwE)&{e^vm`AQUC_n*zOFt|K0X1ytq879 z!{5LS@s$U=GBO-x}Lo-bkw)&S|9jrMCifRxzkO z^*A3W&c4A$={dQvCGxY0kcJ2-^*BiSwCgW3A>%<*Pl*m)wVrJ1lAWt%m@9ynTo}5? ze)FXLQMakLkHo>4np#+}iSlT9b0AAJ{#6=%0}T^HDygp3xQse`?XMfd7MMap3?&`7 zT~@W1-%|IO&CW{_&hP>U`^_VIC#Spdd;mTu>q3_lVeB02yAdQum0+(_&3=BNjOEab zDER@EE_uyt8bP(gqPnJ3@De`9((z4NzAIh4da9UQ6!>r>8;&cy#Ve;Sp`fVcQ96<@ zahMP$L%axf2iv{dPVVqg{@W= z#t~ImUsP&?g$%&?1?oIU1%&D<`li6g#!f|em9|(oIyJzs-{11bSVDFo8Tl-KM1Wc@ z_)EFAy?rppeT~}vZ@1s1XWW|AjF0~qN?4C8@JKa3zSXRV9%I`d4=ia2MB6#SEket& zqBUKd;7e$E1qHt+6!MT(pyu--Gaq5sd+UtXZxvIx!vd~5?nuo7u7I@@ofQb)us(x0 zZYXa#*rIa(MDlS_6-%Se=iMf1?t*jo0<0RG_NHGaN5==3)=w3eRtZ}|n}buBthg@s zC^EE*S06IuQ6T7FwiYFKYs7D)$a8T2;1{-ce0uK0 zC^S|X3g@22o~^2Te0bX|U!K3%z?f(w-D`R`ABm*1A6qVPz0u;BEwm43#+JnQn!0hSke{q{wks&kaEVu?u~+=vW3>_9aNOxS3Tlw)>BrHoRsV> z0l|&>@R@>+lt82m@5piO!of%^3G~IYlxi1~^_HMdkkby?z6~lJ;TOtPGE@GRT-EsK zL;%0Omt|}0yF-0I<7#r*5F>MDi0k00!}=^k>H^cY>Tu007Cc<&pdu|;AFcb_HL=F{ zV0WHus6`$LRKKVcf#k{~UhFKn(Gw|kfiQO^`zvtOX#8G`vJ4Qu%F2rUudxJjrlO{1 z<8AU&AO!p7g6arKq16aWQrT0$?zu<4S<%^UaHxEWXB|J^`HKnz5xN@ zAt525q5ED5#(-DH0;+&FqjerPpQpYHj3&nZsB%-y?(Oei&6E)5l+4*Hz+oz(Jl*YT}L(FarNFIv*I`hB9r-uR|&S9co)IN*_ou-yO}{ zs4O3`odkobMCiEmgW4CFtmW(srA!=E=h;PPdD-EeIC3Y7Aziv>5h~{WPUFUVT*?v62=>kHMyhI z_@hw<>hcaX$@m zxLx|t)*=4S0t3R!%gS-0i}i0zBP5&}Xa2CmM&dWx^i@h;tzxS3N9u5~%UtQveO0{z z=#{pwP&SS&{=BiAb!PZ0%1)xt;UYwEN@|ojz+$G}QAHYNciungf7G+>eGdUk74};F zR6&h1m0cXbA2|Z#6DlZm{nP44AIAR5_&rS9Os<1I?Xg)&2WXHZS^xA1(45=u#q=5< zu4T~6k0tETYX5wx2%gMN_sTR`%^?PV{Y>YJ*=eZ@YT<3RJkiox0Rx0TBU|9}bWWFh zKq4h~3Vxf%Jv6JiX1X`}MGBSD&>6Ye&BO#?Hk&)4aNJqlo0Cq)k_G^pc zNtmA#2I;XdA~g$v=Af!!TXdjE2-V9^Po1Qmf8Y__FDJ6|a3U+>%W=?xg2HCLOa9*s zhurnpc;QRb6`FHpo>o12)$=B&!ylM{5r|p2|#%x?wk90 zmj^iemz3RtVKZbZ-7BeQ{$3~Z9L;NI%QOE+MEHL1D~GOuhesr>dtG!vDX#m75n z?(tu_G{vh|?WJe9rvO7vSXx|^gFr;Jx4W(5lGXoxNOu7Q7&u?zoLveKPA+QQk$w$i z#vq)AAOH^9-GiV|=p<0}TQKT?Kp>#dm-dSFH8r0L%JyQfW}AkujseQL+6csgYfK~n zO;k*Au_2a1AP}~3%gyI_^nk7bE|qwDMQ=6qERddx0R0Da0rwmdP6`jSyg1ZNIcL?ro!QaWu+<)%<=gz!& zw_eq&qPou6#o4v#KK-q4NfRpnSsW1_2Oabvpo;a5ZI^-&L>};k7JLR*2uH^ZPK32&F#Lv$ur2;W79F*3%dr{H(2*b+ z%^L!jwt8V41{qC)SSZWrxSg4qo0%I?qF7woH&q~CTB)xR~ znsJK>vopnuBjTNJ2*T-nbNcL902ZF|PFW3?REDIt=9hB$%>*<&g;?2!0&K_f@M|15 z^~AJ9yjJ7ZB(*4dote>jx;&S3!>jK;0InR9W8%*?qo&rcH_oV9c)<^5U)m5e2M>dS zWaHChe|z{1;f%KREKZ$MQh3JezWY*kyI+Cn3E4y!UQ@bEaSuW9RbouJ9d-!-hyY0u zLFF$QCu_dSXl@<+uM1}J=}Yy{4})|BXb)a!1+rmQ%cs!IBgKUAR~CjZ3>tEXt_Zi< z-Mm&eUV$E#M=!AJc?at_=Ow>1LV4k{qzxJ=Y;6u)5%(>#=c*fJZGC?tQdGocO#cjj zkBJ}7!&ktRPf4S-6{k~etO_)UV82~w*$1j&N)Bj~;F$Bw^qRbHLn%`&S0m5E z|3n^BnnWc5R5G62H{pA>p?n={an#2lR#Ady27m#`Pi8uZS`Z5}Hl}RM*6!o&ZtV}| zDKQF!k^lGRL(;idf~|w&M~CNzf>Cjn zTP8}Hkp}KwX5W(y@M@#klXMD_Q91sOZVlD+sw)NJPow zzB-CGSEh|KYlJTadB3+q8cb3>Sv8HRWuI{j=YdA9KDfp!+|#@~_88F!ENO10!_6L1 zsa^0`MLXFHc?YF(!{dZ4x?Wo9Dw=QG$ui5BGq0k?d%D&>wtR;uk)*2LfV(5)XTEq_ z*tfg|clV7`+C*JVLxBh?L}?!Y`(bt@<9WI+O{8I2V@(@}cKP`5qp)P;wLT0L9AKi~ z?Z>ZMS;Ewn1Os3t#>AvW$Gf~T+~gDvW0_tIfZ1N3id?~EH0ZCxb&U;V2tb#zyqXKE z5WM<({p@PRRMu6|nVj2UYhZl)>Ie46!&`aIA^hf@oC&8Gm6|6c3B?%ifB!2v%3pV7ti5!f7n4wjyoTvIWX!+}?|mJc9#|k#zR^KmyemVl_sVcEy}A z@P-2ITK}Yu*2X~F(Q4hYJequ}tNd4J+?TQ2L%9#SO9u01U|#Aa zOFQToX$#>Qh!tSaWV30drE{g|aP+`IUWI4oW=e`jpCz>_DgbC-m?u8i>@7bqB^Qw` z)0B*Tc2rSukP|*lg_^6()Fj@vEw3ghfLMDWQ7oKJO!X~FM9s6-z34EYdLhm8F3`NH zp1ahGeSN2LX*G9T63R0m*VDxEwCT`-gf5+gjae3&vfyH9K7oc3fSf&I>YlDp^-(d^ zI(yF0o#WlsY8;{_HDG*5+fcbMj-#v5WTB-JFJ5PEqcWE?UG!*v%&)dYBCHZ20uUSKRXfv9L|V~O>E+OX9}A0~h^|O@Dxrm;XH*zr$+z34 zKd99lo7v2@S{ne!$iU=`<~cf6YGYDq5tPnTX?YepwqkVh5Sqqil)l{4EQ-(l}4jrXrMOyYD+W4=dk6ZvO0Qe>1yqcIvV*c0y z+Wqf5AXaJU>qVHoI}tuAKMI9G_IsDrn3FB`b<5>9H8d!-= zl{0;L$7bdqP*|9&j)VE-ooD-30c2;I*xbRk3W=;DwK4Fk@=U(HTj-|TQH5h;(XMAyveCiI-eASd{zNa)I2(i7dUMLG zysf3@+|g@Z^GK|(s`mw1@dd|1%|&O zED3-)y9c2%%j(Ccwi^qG%kS~3K%?ph?r7#LEm=C*iCKU^HC}t5lFbhf_$kSap@?h^E3}~E-+*V{M1P@-`ltIzm7u# zLIoWHN1R8c+MCOn1&X^0L5ZSLh6j`6It&v45Jv{*cQ|ZK4aC$+fd4x8#sgvwGw$t$ z*E&`7q8;#H01@A}6qi!ReJ~*A+}r(EzK?9$hxP$Z~AvzxLpF^VDo}maa9*tT(8zwC6w>u9MD}6*uS34aP%5r8X5Fe zPeCZQEDIU{P<*qI1PbNzA%HH{Kt<^B3E}R_YBgpxW~N2zq)}q99+?2J4^P9IiexS4 z!7D3mcwK?ec`XLTbiY1rGL8^%4>#2ZJ!vL#x=F|Lo;PiypT3Mr6W&grH_IT7nbh!D zec+^_w0!~f&$+tCNtWUwr5l#?N}=sA(q&pt=Xv8f@coQXkkhN*ps)df{Me6)ckVBz ztxAy7alKJtczy!jmzGx9;fLP|_RUg>RG>slzmWj?{8bwFt%U-$W7jodIBDhTLXx=n zH_TXQ#It48%n{<;5CBk;uS!*d0dzg!(hlD>MPgp&J5VvFy^7 z3{2)2+jtb9***-<;5|kh0Q`{e!C@1RkruNa%X)9C2cA*~970^{pv&#j#qlcd2hPHd zyQiXkLJ+;#px>><_Vi`@{^l^bLNk+O0X)E8^_9!e!Kvm~_;vZeY|EQ3dXXrs>JFUg zctwxlwjTRZNPSC1w|zq5fH4ddE5rLuAnITAc7&K^|FA%lXhesAd`!rNifPh|^{w1X zBd`z_=!q;4eQK+t{FIWPcYF&&0vuZQUeh!)ot$AW4~NdCqR-5dufQBD@0xr6|ry^$ibK=UkuZ{EU~Z-Yf~YArLuSur0YY zGxz6dzlU`GlKW`^*l&L6HK=}dKXP?v)M>4pCNGpyV@#)Q*?Z$06%6|H^vWKrPJ;q* z<8dOM(QO-?mrh26_j_{l#dkVQ21#rGCvkCo!EC5yOTk_R#?dWT?_IRJrAkX8--`Z6 zkK&?TLw)}@QO_qL;i3ur4lFnoWuKr^b)-)fIi_F{!ranx&2iqJA5+{-1TxcQQN2+n zu-%YCoDirSe?5CHs-F^l?P;n%xzpeO&EbeAGb!HdZK|VocA%D=lBHJI*K^~JS-3l% z2oS4MLo%FWTit?*p*V1P{sdlxA)EkUy>~B7SL&vEtq(l5Y9Y@5@Lh70mTSoERmipk zGUT+`n;iUFgVat^hh;V`{+T!VBWB`}FUrY6=2v+nn1DJzP5XPWYt~Zpg0@p8o!Y*h zS3=4BQ+h0fD-|(WZe*@Y_H%vu1^)7~WkTiK<|AG_wCik%92cSoR&K7wEAjL`$9fRT>wj%Bq&_*at)GJ=?c)_co6+Bx>Jb^ud#0TKn|+3?zEw)L83z&(TOh z3%1N{niur)D;z9nzPFxPcc&65#@Y`9Q4%;`xp~e zyV+sUciunGh^1+K$ie(p%xJ+=4cIU&O6*=!VoRk<8*yy$-H;y`u|j#rf-{M~3Uykz zJ?4t=-mZrT|PBcfiXa`HXgI*$}WfjHnOtY@SJ*$s}n>#OO!@aqZ9;mRJ#fy$v zcB!9NbA!pGDW1$llz&2UFO>+g86L=jMOXr}pwSmpaH?Xz}ei8n<$yYgV zW3SElW3npRT^c-Wq;o^vku#;W&)xU!mFwa6g&RAF%SHwqMj#7$1(4#x68{wca`Klq zf4%fiM)do0YiC#2&&E8+Lgr!VJZ@(fjeq;x8x9n4z;D>-OcbGzXr}+eF)n8OWQpP$ zUaEb*pG;ScMymQWo@DJ|bGoE|dD(ybnj;89_mj)-F1>MaJ1mh-K8GI-cYaP^u!V%1 zejGiP|V*B z3^TksP%Z*}$_KTIC63`CJJJ^$a+sN%bspdmMJ*!Ij}G%pElnc%;U`r~G%Tv|*$qw3O^6f%J?r?OqKL*rMM8eP%Lf4{;t6U-js% zV{x5O`w=60A|m5jC-vekr%7FHEXq_>?f7?>h4)t*?vp)8P`d^O#!HzQaoNR#Xd(y9 zC|cO=C7oL2Sg6fFH$UC)Jx2X@frkqTJgJcPn4I$H>7ZXRTCzooo`w!>C>Hn}p~VWJ ziy@+vuJ5`|VzN|L1Vz9d%HhFn)OIt;xTPE(2Y7Gz_DO*sp=(k#z35Gs zC3g0Dwtn72%Ma>TPsRKmqe&n)IY6B#P&CjB4q!RA?KksTr!q#(wPFJd2b_*qkMTHc z*qw-YBhDpn0o0K2scsi&6ZN%RsA`ODB14KdcS@AE6%-^f-O9D%r7KZZ^D;YPoDwfp> z`B`<6-mV_8RI=R8n6aAMN*m1X&txB$byN7n+pSv*WWWH!v1P}FhW5ab3gf~adF^8E z?af>W4J!8rqOlG^wM&pJaDAh~6PACOj?AZNyU61l=}^`UN5oKWvm!=bo%~x{Fkq4l zeV3C6mKYFds;)Z_Zae!r5j9LCm^je`e|5a3jmn3%0Op z&50SK&t*~;#pbN}`lo#VlUn`H zt|ypt*P7WRS|Q>{Rp{o@u4{|CQ5L9__#ZpYTeH5m{Z4;tySMHHrBxc9TpaoI(m0a) z&bv#yJZ~1gKugI6!5(dPOX1o6P}#`lRB-|^E@uG~l+cgp$QZ7V}j8KDlgv?bKqye ztw~>Dfo5E{AkL zWsa#RY|wNly%%0cteTWh=x-{?;5e%T~%O`41M#`0CWW;W*v zP-l{l>8P~GpmMFm?g-EPoOV~OG)PosfCPTEtl8Cj47F)P@$Ee&X)K579M>QEpQjK& ze`R19u)nt+O*Q%)xMy}D`c$Om(=@PC=A);! z{Assbrf-{tbl*#jqRktLB=PZM-;c^P{IT-N`OB{}kKilLi(_yiAUg!y<1;t*_E$HY z;VhuAV0v|weq}~zrm_&x@%~(#w+#ao8DU8)=O#PvHo#k}VW4J>Z&>ZKN?WaEqT|I_ zBy8{JhPG1vTr$$hElTh9E~Qbvu#q5_ewu0sTn4X-JefMnR^%3(aERsy4-Ry#-YvR2MZUV zvDPobnOx^SzB($M73?pJaw^243Xfr(rt+565=1zj)uDoa$Gf7Zf5bZl9UqB;4jF7~ z4kun=66|Lon35m^M{PDX2d7R9NePcts9KASE6+*$IQULKg*iH; zDch*bV!%DpL@oByQZMvSu^d&>@K425ZPAbY8|+*Q7Sd!!jI1sJ8&&0tSosZeYO7pz zpP;KtcM!!T2}i!Ef1+QlYxp|q9@96lWE9qi!1L;SHN)x{h= zH%O2luwb1Xf9UVX2!(2c+jPTrbr~R{y|#Q;9)cwngw5ga2MYo7GxDfh)1^QSvyTx5 z0B7+Y0i2Ip9N(@vY}QXk*Ht@rzrJrJ5D+58-NH-EAL;P?K0;`af~?cIffB25v@~S7 zva@hp>i$yaWfRDkY0`pSm~POb@gB$(9Kgj~0lgp^MwBt+IygUub7Ohe3kED0thDz{ z-*EMcwaIo?U4Oc)xjYnKNo|dpFjp4(&U3Mb1OOY}b109o*00Z_*oQ38diRp}>re974yWCs5DM`tGiB-jI1Ax#Ks8unhHw^D01t`*d{Tv+( z1p@Og6HeZXANBCc+*knZNr#=CTS~U0-_6IqWy_DJAFnN;-ucvHQ!H_)kh9k?kNj|A zY;A3rzu9M^9gHbURyn6u+Tz7+{G#J5htxW9(4s;z$ku5`FBSb|!-;9BFc%8aOT$ic z1{sfY^LN{-J*0r@^39#c?)6^jHIJ3v)WVI~;B`1%RWg~kGOa<+5<)Ufr^f&mlwTQ` zUceyx;2Gy7*056zAxZGwm~>A;L!WPB_)Z2-uy?E8d=fT(B974O9`eM?7^{abFqV*|Gr(gJhOJU zBtrD0i*7-LmDLon?Yo;kYEKO6CqR}~X(`QQj2vORwy!POkv(6_Th8s98`oLBm~BFcoU1 zQ=QJ4i>Yhlr4_wPzVTX>XC_ zv&ZE=eK-nmrTE>2!UYV#jaKea8`;Lokc zA0AjlvS0GT9UkpTe<8f6$2Q8x&SSuOaa7v~8|fdkTw&mZO@H8+n-L$I9merR&#q9c zoi^mLo~CD>cL9K7TUIQ_1$p!W4U3vK!X1FoUckE43B|j;?HosIa+1!-5n+VtUH8?f^L}yFt3#u3y2PN7{ zm04&Pen`<`fdlqyXN{We#=4b;SA5XCeJv0QDGvx^6Tiam1R>G%HcF} zS2tN#X5qj3;_2iq{>&W+`BUglm5TSkoY!C@>9pFqF?f4ib`T-#om@B=kZb*8ZhpQf z*N5S=EhF0J{gAx9=!+`~e`i!*=>d)6jub_ukujT847Mu8c%Ns=f)>)0%tnc&dyCfl zBc1rl-{U%I55J#N0T%S(Q9Fo^A)di34{q~Pu$cctS$vHRq zm|rP=-%>zD3&)Gg(CuuR@pQC^v4^VRs2QKOhpv%!ifEUjjAcpV+C*_JKo8_=yTO7q zo3X=({55{VgRNXfdvc|c6p-v+C_mb9bRYRqD3StwWlVb_Mgp28Reoo*-8+FvmSh4F z@G~bv1q;>w$oe%wN@TQeuz2B2LULYS7TXw_NoL{$eU7e04Tn~l54q)D?sV=}kgS|LMoQY5VJJK2X@XWIxXqudq3bE>irK|}?P ziZp6eo6;|5Mp-p@M;(~0{GoU}PG|EC_Jg+5R;)OYrn17>6QF)rrGdiT-0RA4r8Kh4 zs;x1q3HmPL>1o!Ts;`A*^bg;?UJSgGd*$K&QrDAtuM;wq^t`tlmkguF$dLGge5KRH zBjzrcL5z7Tmh$@5O`B-aJsL@jDpr~ZHR4^nS&!a*JSsLZ87%S50Ce(y&|F)5EjJLn zN^R@NhCimyV~-64Wpcv(J2MPcyMl{^ge-_@_cs&{dgQdpcack#pgDP5gt&3=zxv2iCJR~Ax_vg=64<4 zKlZjXcqFwXZ6Vju>*&*}uafaKZ=rkJy=5%@biQiD;OMSmGjX<-epBDhtOqL`c>ek_pUdl6UFv6@{shzp@rg^Y*XYNZ5D$5-t8n@ zh%$JunTQ}Z+}m7+xIE3V_6|lnxpq@sKx~%+eXK2kWWNB!WCI2(7Iih-8>c51Aq-2T z)atJb9GaczR;_8=XFTtV8_XT*oswPKU>yEmQspn)EN8-|c~Oc=IKABAwX|?HQuzGZ z+;bq3JL&$~|Dz|o=sn@@k%xoRZwCvM@8{4WYA@c3l~Bm3y{jUgUm;c%AoA`)y!!!vO*U6!Mgp-z} zD1wC9fUlu8qt5lp^rLR*a}>Wq?{rnNR$JV(H+#{VW*SEEn&S3ef5l;l_=kaYQ(tRs z0_GHTZt?azQr;2v^jj`6E@_L!dFzcF%J|tDW#WwMYqJo6CvmK8$mK{s#v3Eibs4uuRBoijFVmoBW|di}H@quc#}@=Ea zs+(95JDpG#{X4DQfBZ*UORTdlQGG_H&^S_K>!kHr<&=B3DMAD!SL?T?9%G{p=~JNn z;kk`>tf8OKK)!IS1SFZ`&?KZH4GJ?BXT!8vzlrh@o!sKFm`c^FNgOOULRk* zQOxq;W`6Qxd!!S``lX*jbvd=PekxRN`>`!o^ckjBxp6qRyYr!{?{S>B)oI*z)pB_4g%J>6Z&`z?$Y(MoyyK2j6_s(;5r=DpHIF+&o!w3kKIzyl%B z>34NfzG_wY6D;{Zr!@)_!cW!#HP&zdX!;NaD}kE#ux|RP{x|mbikEnqrC(zE<4+7f zjir5RmHF!Uz5h;CpZPDOK(kRkqEKIws=gwxMddv!E9w2unCsx=6v@9uT$t zp3@bs?Ev7#n~svzf{$Gjcb*n)WOfr3cPT{-`@5Xgiq`3YehNd&8PY)2E@Pg36FtGd zAuGeY`(hdA7HsmNkZ1JfRyZQknMHG4| zk)~BUeHXa>rmEF-a*a?Xs$YUs_RO{cm>&Z7`n5J;!zk9k(b_wZW{tR3zbCNQ#@HE>ac|ppN+KN_SrAz1b4w6A#I$29F zyYxpf{$9|pF6z_$-5^q+X1cI(f!4FV;@o{EOxkgV*sE^!hugvMw5mUvfVTR|9lWsT zqW!3~d2>Cu&=a=}b;>VYS?t5dEBf_PZ<9yi8IuRbDqn?N_k9AV*pV_zPuKJH{HoKy zL#Nr12CZRqfM~v)-pyu3t7%orl;&MuU?~d$19wbdoEgIO39d87hW2+pIlcNksx$YP z7~}~O+ep1oQKGaYV)FP;*?|)nBIYs~R$3UXQ-)o_NUtG|c*p_B0MV+t=1tDJE0s^m zdh~zQzn^(KMu&5^vy+pIL06)HNpudkv(-(zOCPg;mlppcX_h(}QgN;?TCnD#BXPhiO1k4U~jWh{`Dtuh9<1NlaHY0P#2#vIc?c1Sqyb%3jBc5WCF17O|!a+L1$Sz;f zczQ)k^3ys}7@l1Z7r$>1Y@M$&v&Z=%2YAP1G=@6@hK0`8E;qE52AD*Uz~cC!rP3=f zD3`Tg_Vz}BrM{-05X!u4w!CifeY&%BgbO~<)q*?LH^PQ4YN47&cMih^gghRrD(nsf zjXyxRhz;)?K72qkgvy_?I@`p+_zS z=pQr1VZ1On4Y(|A^@aGK_Y^p248AS7hbMS{Z}6;IXFCi#UoA+Dp7;*OB%Cw)%>L`x z2lCVt`HxbU@9(;i9j00)K`f|P824#PzZuAuE2WJ!FolD(AK@Zus=w<=IJeZD}g1o>0hfddYY6 z?9Dxvn3g)R09jJOCOpp|oLG%Gxh%Yt9d~-1Q=9sNoN}jAo3&^^-t{eH<|VwND^aGv z5E>9j6JmZU-B`ddoAu-Pqm4uVSDri0_uuneIH|w;t6Sq~txN06*3`7}LnczEEk`v_ zDB>d@rrxsSm=#fPx#gIeaaq6o`ov8lodjlEh^0TDXDii1phTy;cv+-WlW7%+*CeY-L|8I1ERmo^M7?v$#(;NqA?*32W0D#pGjKopk~BPZ8Z zs4SfC)ZIC+ywLo-_72T{{>-IIF^}EE7Mk+=RB-^G+pkta0O)usCA}eCdVWY{nKpaZ z;lr)RCO0|9>^SNd{b#MdS}HI!or=HE0m51~S+AaBB8n4A3!29^V3>XgjhgA52^dES zK)y0~CIJ!xNbkMO+JF3E(!r^EZu*DT4h|j5SN`EW`~m=y+pb*}zkm*1M6U+f_VcetdZTFg;i3+*&ouT@XY`bwJ7ZeMam$oU@l zW!Z&AT(dv&A2M$10Z7J8yZh^QjRE<)H4!|Dg?hQPzR`3Z3N91=s()x}^z$Vj-y0GPQY7>IRv+i2W|}uiu0cfu?S0_`hLXLPLI~r-F(}EUPU-$Z8~;%0v0f z9LdX7?yzc)ehIx2S@VB#ccE>W-~V@<)w@RcE@yKCB&y1?XS6P7(|ga1*>|~c;YL9j zE87Z9jY@M8d__*P4p|L5EtvD9MU3PnN-A|$;n9nW9`NWHD~#i4cZ;?R$5aDFAqJkn znWLka>7&IVQ1?5@1Ru|iO|q=dX> zi~iQxO;IzE=D;%Y@v}Px?sc)&?W9kWb7^(MUH0{Jq(LB-96sMg^7YgT)Krxm9!R?V zg{Rxk4{}a#LhSeP=O7M?XxTYDmW&s^t8>>@u2pH0zNy>1bqROsSsgT{y2)%^NOrWr zKRtckpDZ&lvK5Qs=6F$Pq#*_;aebXlt^93)f#?Dmc;y})==BxX!E7rS1dVC-bT&)M z1M-Qo?~82GlXz5(jwP;eP^I^?^e7F+`~ z8cIa?nhEP@|4u`_M*pv4Sd{a>z%aI7BJs3k<(9IQ31kJz8mHAkH5p|0%+=0W!U{Fn zWqo7zfc3?f*6*W53GqDM{c!s>KU%J7hA|`Vjl2f5&`n>3u33KPzRb|_uNqycbXL*Y zWI3u9Ze6CvI(5*Zt#`ouaX1YBC*d81_jdoST07>>e;xnP-j;e^0lmJh>8jYbj?R}V zw4heL*+&g($#PoBvcBKkAT;cZn*_zRUSBWwf#UIzjBTID(*o#k^6_i5{8NZrpSFSAawai_n2_`}d;U%pe zRK=h5(o07E25-j-jiefXmuk11-~LgmEgb>n0FtTwPfaV$B*^?zWvCqY*7+ziDPqmQ z0RdLjP(Kj{>@)!>a*{nm<5@^@at&cNlNjtSCf>{aNXOi^xGV7H6yy;X4089;Av7bA zH-9Pf58s{^&-Ah8o|PD=A&EdT2Ig`Yz72{nNUJp|iYZ=j|2DLiEg1^2FZgffivkJ% zly6bGSF-M6|KM*^#~5p`U&J+_03bF=Eac}_PGTrIHVEA)9x5Y$LWddw%m#{I<& z)d~ZpdnJN|_(1i6^l;FOl_qBb|MwXT;CJ3}1p6Yv?(4G`af9t&^?h7z49(dk0*~ca z9;mZZ&i=m;S8{o7OXRnccVRpIBoK_GCQ{FMO2} zd~{x1WN(j6zD)GP${;};8alw+Vs4%UN+-T`IRJkZV|n#l2SPjll35Z3WtOJu&ISK; zC4SD{4@oAgu^(Shbsjv8r@~7;v!-G|)GfR(O4cK6I*FYr?KJ5l6cEB@HS!()j9%N8 zsj~JC3%wMw3sF}w=95;8=|*;59l6U|cqvVIeqNoRqH=qYh?k}Kl%xNlJyLyzsdvqJ zaqm7nNdQF-)c}|vEZAQn--Jgt!D5Ir%(vV!Bk7o|iwm@IGhILbC8$w<>4-#@a`;E@ zacIDZchgj9D1E(Eyk0cCEVH$4+xzQ>zlN3U|C(Hy`3pwKP1 za&G)b(BxYnmWBf|8o4JnKB#`VoZW=*};z@g>@DMeR!W2^9suLXJ+W1J#79>GSV}1{61KBfG(&!V)c`W<3g-Dx2Hvm zo>GHCRfedP)4QsQF~kPE`)z}Mdfx6|F3qY%B!Ph8ZjD(YGCUOJ{T<5RjmQ><|GyFG zDgURM1?L?t8LcYI5wa=KT0JZHHAsy~g`fVAZ2YOd00xw|PHDGk3o9g;77Sha z#6b8JciLj8_(b5BQ~k3j5i*AqM2K@-2HS5#tz)^71vT@ZL#IZd%>2Yx0Ji%V&n2DW zjVuuT(Kh`bq3((K;D7Hz5{S^;nuHnXu<@j6=u~V&6x~8K9R5g03jqK~$eRr3kNptm ztO>keGSUUjsag$1frUDBl@<3)Eypm^F<;hl1kAa8C`^(I&0DUi^`VuCt4w z$s9O?J2$5dpum%0C5;#d{$(vNd2I8zJ(NW?Qe(uxZUQ=>;ieK(LBU&~Y89c{FW(+3 zbv1EJO7ySnNWPBf+9J@Vj(flC?N6gwK@tclnJRT9;=lWU6b{-LNMs#fTl`ft98nX% z8LnT~wp4#DN$q%1s4V{O%V$;<3C)p4?z7{C zl>Pq!!l5=6%Ek|}fB{4}p&|k#$?s%|3Q$p;m_II?L;WYUv^s5i#ncW1TUFtwItyQb zh+J&})ZX4V$A(6|1O|!&%SwowQh#ehazo7SOF@;PWn0wo@EkHu5)qZ zYW3d<1Bp6VZh~6B5oMHcen}?F&ruF1RDb1d1}P2OH+1ci4tgy7#h}SS@LUnj^^!{c z4A`$n^DbcYm0tcvNzFI>56DY_|7S2~j`W*v_H{qn3#;jb(!E3OPeq1w2vVQLHF$&p zk3fLr=2B;Jq{tCr_}ZWksjn}P0_VFXS85y(1Co*mw}GEP7c=hy$jF8h~FH#Eg-w;p--u)YqF?YYM_{>g#Gu6%Q9d<6rkllWAsiK`8t5mz@kRv5;)1(T`6(!#I`L zDUR9x<($R!e@@|?BV3tekV0k#Xm2i>zrp56QVlx@APWJ0IS5e=|B(f-H?o)t_E^bb z?sZmfe?N0o2!(ieyUh~vjC^qpVqFxt<2p8zNgao#oWEK!5C_0N(s1OM?-k5)jfug^ zV*Df4MUMQkYg$siD!e~au$kJj+-ErbqDR#K|1f8RI-Sb9Vyr7zvap=OgFvfxOcj<3 zFHIZ$*!)wCh06g<{Fd84NKpx@|LTR6CN zZ|JDmE~3`f9Cg;g*1b|!uihx~C-l3vd2zp1Z=8^WloIZeke2IgRciA!r@eLJe9`11 z2xJSG%S-AqP0n>KGG4wSG^oqaviaj)M0(nE>DtZAD`o~MGEQOGSzN8(n%nP*6fpep zGka~`-TcZmSm7j>pc685kEfrPhd&&6CUS&5c+v(qRTE;zE zuCI2-k?yKA9#^A~D#@F2B@dT}DkgS2Z>k0+Uha48yv}W3Zl~E~GoxE%;hOIU@V%_Y zw)WZCGtQpRM>31EZ-@>ue1dHm=7R<#l;FHtx@e_|~G^P&MLf@YZ}DyjP9R0J@)Y#QqFV62qFu zRcp7~!fTDY#nkE8N9?uh?T)+e!40p+ms;4a9#7NH3!f?6`DI()UU$|Sv{QJn_f&xPuTKtEssBrX}u-9O?T(qJio5KVkOzS>bAPqUaw_pAvFg-zT9eA zUFmV(%w>l6FA-L{M|bXiab5$!9rd-nHxst&6`!Zmbt3b!y4v8c zE~i^<_8q7yl;_stYxmu*O5WRN)Oi@rnYkN#U_9Zye;G@!tdQ1Q^v*X}a|%~GyI*T_ zzh0(%>v$;G2mS6oqqo7@S*P>s3ux^&zOU#dbY5oWOe}W#n!L8Sb+)@-U&XqF>n)#i z);$#T>}Tmbu8#1mBStk~eShwJkZwfsmH~b0>G;{@ZX|E?4H*@GNge~UWLg{(8X_|{ zqi9Fi_w93R-U0tP(&wPsHL~M<0U$vCBJ&F-^&Q-A#rq+${M44I2 znNO(5$MtC1&$H#)y)>s?48tz18 z?uJY~=Tany;q-DOz;P#tnaNM*p;==?=}UB+y-JYaA}4GtU2v%>UG;gpup`A@`S`_z zuj-QUpmup}qRRW+jK9^~z-w>@riG*3dx6&`-9Kr8xB5g+O?7(fSL-_Qdp~gwZ?Mmw z%LY&M^rB!K)M5xfM^z?E6h_PCN|1cceHU+UwVvd-%X!>}w+9emJ9c;*agI4ywU8LL zW3C{t)k#+`V{2p(i$hf8x}`jFe5k0Jh6HfLo*CO;zj;_iZ@7J?eCV?Fp#9{AU;3=^ zae8G}4gd&`&#&HJkPdBf>1_%%D4k=TO|x8&8zbDo%o=6WDzka&{0z@Dy3Wqd8u)v3hGiL@&vObJaMKZ~3>87)q2Q;C{>+ zD#93|Qm`mj_fQLE={O@~KtRNlMdQyWube;*ZQYe(br^uGJ)W4~0INw!q*RNiG;f|; ztRUA)=4BSl$>=aF(GJ|lbX$;wtuSvztOXZ4tyGe?wey+Ou-fS38>V$d zfkjLI?`=a(aulo(Gfc|or1s#)5lxt~Mh9cc z?ZUm206G>%6d4K0UpAe~$)zPE-a8#O!-R<}eHmWi>~|oF zEf43qcaAlQ?~d)MwS*0=MpfQ!U^;KTbd!Jc{d;sMQif%Y;+Nh;*>P=lzq?w-bx1afoKE0wFsZ&R9 zT0os>51xWdFX2pu}&c&6+wA(H$L*SSR07?5OKt0|A{&12JB($z7={zyF;U82|KMFgUMk$DnPp8 z!xIfks;4e3e)PwxT6f#I?UQfq`f#%nq=x``hBJwE<}uKGDz~;$!LS4h{8hXp)> z(19pWWM5wVTk@qT+YUJ$dI_RPSh~4JJvR$#51{?ctPZ6D>e(}LI0Oke%ael=xG}K+ z-Ou%#qXH-Ze**h#4nqguz()7}`ykr8k>uL3Hv+>x%h(E7aA@7eWTfP#LHFZm;dSgV zF?IYO>g7rJ>$N329iC5p7Jq%<<*1qjO)$nf9 z9V3h0jqBTFnoB@s7R!wC8B{5q4Hmuk=6uVe_5&ASczmKyHI*#x$;~^tYcIwD;F~pb z^HJ0+RRztNpoD`6zy+KsoN{+gXdHSkZ$c3Q_zv2bgxoShJVXODD^kdVgj<>wABioS&Nc@Xq$T&qiY&KNA&Qtli_sQUl2A529uO z-|sejJ9{0>G;|88#}=$JJ5IdD7Pi}DktfGZm-&uueKW$m%geNAx3QPPMZwRcy=bUP zB{mOgkt*+%5*#|N8&@9fCZ;zNN=E0KlgYvKzn6HB<+n}GG&*c_5IH-yzYi%01D0R+ zcFC|nfA@f&F?Ai?W>9d+s8e=Y4Pc!mmh!`a*LVacIH_`WeH3y)AWf)lo^TcrLUwXX zgX37F9ZmoB=$0+3wH=adr-m$e)h{bVC+2!qJwm|t8T7-N+N^WY#vhaA^sM|C3_6M2 z+9P4AXLXbDiCtfsPC<;eIk|#=UDm|ZU~)b zbm=b++&F-0tb3DMM@4yGw)-iim36Va)UTu0Cx@@-{x)B&qpPW4 zXo{xe)r|n*X&54i_Dx^4M3bY20@K4s@r&hZI#S2^ee6ES;WVn1d%(u0j>E%)(1git ztJB#J_}oUANq&uAySx`iR1D}rEP9`k>5Q@McijxDDQx5W%T zdz!>%UfWKPWa5oA$L;ZMi}W@4GOgK=Evw9wb9u$KWQtzhGOb3^PW|2?X0xD3X9D~_N7(^cuV3&Ekq{)2h z8qQ1i>imb8*Ko6DP{r37cyh6rA@!&p+sNp9x&0KFy8E4tLntkI?5bU9cuP%@se|N^ zlm0=1ZVf*(qu5+ExZacLq!Cg^rpzF38&5B7O25w`JB`;*$v|H~9N#4vq}tp%4_Po+ z!#!(&Nmt_RV4}~`19)r`N5fI?dx9zSqQs<5ooo-kQVZVg#hS9)3_c!Qc2#YsvZ1@9 z>7n&mnQ8uuI)V#SmdsXVGCWw$XtzbbvV*epOTh``D3ba;yuPBf1R3!#Fk$IFm9;Cd zK}1d&8--@;7hMd$)-!hQ$f7Q1t>kSDhpWD%Bof-Kf>96pUEQPExH1<%udlTkC_PE4 z66&rK4KjuJp)V;dH7saNh8CRWu{xFoYFC7#E=R+m7ETRqz%qMs%8||~(LPSz$ThNz zDqq033%yo8>roD6Ts~ELRy|Y)0I2HAx9ar^NHmZo1~6LinbCg2EJak~kDH04XjN zm2b~8*_^>L|I)2xZ}W?p*V?nB4U4i8DJAuqO&LA3r`>RLdHBjACjE*}#i4m(tv;s; znRG}UmMas>h&dwHJT-aqD7Gy4RRe#bB&N4E+Pdk^(1IX{H z*Qw1hJMa&mudQ88e=A_?V-iq4XJ9#AT#9vVTjOT_Nf+1Xk)%M=C{I!}4z;cCtIzW3 zv;7yu4eh*|>Uv!b7Iq2YnWNkRZOCma;h+bw5K)L8lQDTE6;k^6qLaY9AKCEzinyU+ z3XayNkc{~L9fy~%+R`0gy~iu5N74EmHi02S)AFUJuIAT$%LWJl|3?q=;@X5mHuF-8 zw28gwN5fm(97?)(&>bF?sygMfM{EnL9Tes_OE%{=y*gMG_~>4(`FZQ&k_v?>C8Cl< z7-Dvav`$u&B@dQi>OwhK936ElJwWa@{_};7F;04jyElvg0Wh#Gc5iX76HB!zcChRE z6z!+__%@nDx0Ad#b}6{v3k{US`v1z`3ze*jPaH^w=hMxk5{1OEXzeVWZtn>Ad^tFq zb%|4>^n_!DGlV@DT}Q2r+U`S`#&dI2s62}}wI@s$iS7;yQR(R*Z1HS(JSq-dY#fS} z)=q=~=9uRlR}ZiU<-ERYoS9qTHT&iFx3ca?7*XIVbDk%HMF!Nn&p8vWR;o~PVk;Q) zX1cb+$8US!od_w@nq=wdG_wZ}WviVC;? z{sa;TmFi$%05LNfwz}hQp9TZCQnqhgqSt zYXZ+_=%4qfsIMwh_?qNIq>hmW$==1;nQo8yPccPfCKe^CiUnaMZ99du4tA%*jALug z&G9OWmYvzz7g)&xc|D5z#?s_lCh4ZKU;Yt?r)s4B#NiAlk^-EfdSz*JaKVMm@(Z+@ zmyUN@Ru*X$j4zETsuJDrHp?y>n&!m}||mZSv^T{yKHa zsZrxgDw0%oMu{c1t0Is{sTjK-YRczLO_M~ueb24Lj{t~Cd+3e^j~MetCHMVq#krrE zb+~(q(Bq$g_9v)H$QJf(GJZ%xAG5&j*8Rp|YP*rUx1!(};LJptFVyK5Z~02dKhwXXh#i1Z5Q4rB-(zzDJ6yF6$x=06BdyvSOu87&={=d6i> z`_uF&w94zcU()u;bc3Hc%r3kqZkT+-zknp-ebuL0GeRIshwlWonWs)fz5GRF%IimW81 zrK{0J4mG;f>DEzyZZyW{SzE88=JHEV)ExDnuZLHpsi6xfCxugvqXb%$v+f9FNDmpC zggq2SA3k09zR~(8%Ixg~NZ1vLJ>Z@|L4NOhII577w3>kdD3X8a)Q$s1*SwN#Rv9+s^tl7a1VCSSR z5U{8%ZY`|XJ39QVn0cvKBRC&?2p(JI>)DK5@EyKU4%h8UOtgpW!iL|R_2}ybA(t5~ z0>(*|D~S5Ci+(x)LD*NTCseLgXHAC!!$o7ZY;BA=JCHEL)dd!5NIdpmp(e6_^n)6germU$IQO}+WLU}yJD zVX0$qsfNSUa4Q5}yQ(MCqJ7TEdkVT+M6#SSiJAH~auO2IOSxfdDhi4}5D%Sy6lmk{qVdwG#%kW9} zBb*l8>e}q!af5l1!`szA7}F{1Bqatx-4Amz!y4u8^~U4pBoE?SqBkiVMs0eV?ehGu z6IWysp4Z$NTFpEopHl^XT#jPaL*WjQZx5QlN97U(l8%+D(`@^7ie`QAn-*dwV6ZB2 z-USbVe5t4`rBIYi-bGD&2OSNf#vy*~aRa_%(^I$r;X>s@nMW(fOx$4>*Qlne$X%h^ zQOj^WhQ}xs-n|9!KOu9>8ibJ0$p0-MCR}%@A^tx>PIMnUA+=)jx>@@{0;%2hZ12PZ z-(mPfs^f*TgKeu+CXAvn%VMKFn6w38!V_GCHqULx z>F`16zMh_6P0eM-=_tvvU)9lF%4)VS)G7;$Hg;(L<%dBC zt;(+HuL^3+2P>whlx z`8_F6y!tt{qFB5)=~G@22s&<0JMN8wdOBd&+FM>IMFt@5v;9b3hL$=!_U^l?H=br) zF^W#EUb@X*`F2||f5LVH0Po(yt(_4aH@FO)X)wirsY?Z%$9Y z__~edt}VZ8@2=fl7IlD~xilGe*^x9jr3iGZ&I54n;wsk4Nk!gD9O6)S$M3%b7*&@9 zQH3QS5pSKsR;aPFCP@IGu=1vCLvQa-oK)2Q(Nb#Ep3R+h5+TgSPmy588n?ZbcQg*w zO1%Q)F>9Nqv_Ae_C8`lN47GP$5z>Dn`xkGwwY$yZ${%;(bJNa?n~Wkw zDtuRlF0O$uv*IoD^1}_{We$=*(pFivs35NcDmo(CXZ{(HK$i5$!uu(FNodS&nP#*a z?Z^Ooti4#jQ{O$?A;7)R17p7DO_(@z#8=Yq-DjL5Ii%uYv-DP4h^9xl98+I;ce44! zkcs`zl@C51LBD^4dZUL(BuE^K1W>p!ZN1_&(H$}Nc}~S>f3DMOyRCVZmdjGQ<8JU{ z)z!S`*R}MvxHvuS(0b_0S?U-JH&dA9lc*BTh{zjA`5{IefQ2neT9A(vEz2M6Z`dIl zJE^y;ZAWl5}RDwkL3&I{sDGY#n*BeKdD*w z#y>&AfB|z0;2-U|1|2o3xx0xk1^@%uux*^YHA7|C2&R7m9wbOYMN3!701R1oNTjgf zWq!xN?DEQm)?vk+o1GFCs|rT<_!>o+gx;(QQObXFPTOl!ZJa~u{OE~u(`cDKE6OEK zx`V+M*+(OI$8{-VkAhHP+rv`92<)~RJNoPE_nW%}94j4W>p2PZCbGfR4W zb(^mq23y&y4-NcNt=e@CvgzFq^f%r&&YR(DO}jv}qxJA>4b3rk5^aP1+2pir*p!Mv zyb9AE8RkoD=R3{)fuv2r6$)AH69P%W_4pDSFBwr$2!MC@%Hj@G1fQsFj1~5lwO34& zWhI6O=zD&;6x(^9_GW70N0B8$ZNqGW>6pJ%5hw31eqMfkO-E#q^RQjbyjQ>kJuFDX z6?VyN54FW~pQ3d$&>$9g;Dd-6fOI%J)A5TQ=!Z-KBr1J_ourbBG#KPwH`YKBiDvB# ztfo-XjnCix=jlVUCvkzZhir~UOrRfUqyZ)yhJvlPjv3!d?mqr6HD!D3e*S6sAmm>m zVL+3o=F=~WBY$N9{R$ePm0WqQOuNRAQwbyA4u63W)$~q!4NBjSRU=P$p;B|vOULlX z+2Pp4sv-kK`Cf>@Y4{|Hxjo!ALvxiS0HsIM}-d~0FS(YeHf{pYZ?Z1V8*sTY z$rM{HWW~k`dgIEj(K1OW3wEB+5&H1i)ddw-uo}jU=4>LI@v9*2tb01~^QGYvns8{; zDkf6jPwm)xDQT={Ojk|B_DLK-$I+xd#q*TtkQ+VQL+ds_`|q2iQ4vu#H&rR(HYM8d zkdsQhHGvNzx!x`yrL3Hs11f^&*kk{@sdBQrL&<=XiQoBYk++$VMQ-ND*n1-;S=TF? z7(q(u8U69GaqV&a>7t-ld}M%bXiZ^b0oXJ>|98veN+l@VbP^*`BO)q^mZrvXVa(yo zF6A)G(!B`Bjg@9v3yF7x_Fl&fz6k6=D}^ikF;`aySO@w-!q{VDJ<>N%Gd;LUvQoeY zOd2fFdG1*98BR@l+MxiNt`p%wL*#%T^D0cITSiuM-XRYD?e);m(5j?qrbxuW`qJ1S zQl!9qklCDc@}0yBm{{dYiY9|6W?86v79~$imMD4o^GQX~glATpRRxzNLO(#6>a)4A zy!OrT6_lVZx!el0*gJl;_#6viav%&v zo}YByu$~*>4cimR8$k0x;?@NJ$HFZ(-$t!A_RP^tzyI&L@31x=vIvR;3bfx*tGV)h zjd6a%P&NQm8d=-M`zaRJCABg*IERT*o$1+NpPc34{Q065jO~m}r$b933@UDxT~#`h z`+sJP)LgVvuWvJ*h=3<&s&YQ_)(3Y-o4u=UT`g&7h{ksJ;jk^52p#bBnYGgiWv;qO zpJ5l_#2)*7*p$A!B}6PVcFgzgDSNH0t4p#)3oX#X!Ak7b`c_K~n)y~0xaN2!tS?pS zQ%Q_i(X5L7OAIAAS0h7tERb*9Ojo-oT7o7}=Wm{Kh?f@pMK_o7X+B-~&YQ|E=gZ!24uPjGgxqM*R*YXk5n)HZp=>kbI#uX>H;TCk zxfj2CNyC!oTQkvXG3tzEw!)D&hzjh#s-+}oM?)V22X828N&c=Z639cNlkJ*;rYVMEVoP;$V8{_B{B#FY16IDJ($4*0 z49q=UqDhW*G#fE&xm=8^^1b`omKR*iuTH;>{7dK79hvW0N)Njaz%Xc8c7Uv49vX+t{!Lh4!qfYN%z`^Q(}*VS&v$(}fBwlqZE-CQ4`6NDG`N&PSQ!q2{uW~6V?gcD$AnDfT z8rkP;_(ocn`3xD8vp783v`1bNRg-jT%8lYwLQ3@CuoEmY-L%g}_x4K;DJmauv3}0j z*ckNUESK9vecvvDxAMRbj9p!!DOj=_-Ro$tmSI7aVvO`j9dyJ5&MTuZ9TG{z+P8B zmel)1Ot|2Q7F)eA3ZVlgm$_ z8>3`_MfuO_eCbL5L7i{P?SEY7qpyVfe<59bRE0p&Wqeq+t$@BcNpIDcKlQL^F1He- zS6iYF+%6o1{-vr9w zRBn92SyM}Sx%%l;FHNeGS?0?NhN2(1kJD6(Tj?%5W^^mWrHpH|1voT96%(AEJ>%{P zXi8g0YS!lj3o^&gaY3@Ttd%|l*XIuLo3kX?+01ieBeI*(ZzfkVPjs_u+Q_drXJ;Go zN|SneHid4UcV1jH!-sagF3*_H>879wk{fzLo23h1Ni4XIuXXAU^9i_DuZRFYML9mR zUEg`nk-u`)OYKyq8kbk@;Yv`l?y6aG+%$Hg#2t(_`rxf(IR<9k+1_CCLEFm%@>4i%KFeeQW0}hd9sAq*COsq_+^Ie^)<8 z%7Gz{D@5_8;UMwDQfa<5V83TOE18~-g^dRw5%6VP{tjBWWO>$_Z$( zJq}}DEZ>MgOTs2$rD&n?6C2UUD0dDA_AZ0oJ@W(OEP1?p`jshrTvirHI^~1 z4wUsnh|)P~0{90lI{S79!wMR1(Mn_$bW^si58Jdu2)rVRe?cbNdSlwJfn4q+f7W z9KHBal24Pz^pyN1OCtJ83i)#k-r@`v?La~!f@6=aneo&k;04tfF@3_C^ zFjzHPgS=DM1ry!i_tHx~J7W&`nb!o=XztD}VZ_K-TRhotU2OB(vY%Rg5cQ{@egi;7 zV({(?M#yf_q@#WFOPqb2+F$KuawzMVnm2Tm&)TswUHH?T&97Zi%@WnO4O}&gxl}P) zO=~K$t0zG^s>xR@Dq=c!pn+6D%cjdskB4pGP;^s&FyuAn9*oL}F2=cGkw#mb&MnbT z64{{wg%RBm=e3cVjjskQ=ts{2C4N)8x304hUYd(5i~w6)al^OuESVfjE{@T}o)hMd zv_45eunV$nT8&a;s3Q{X4U_2EIyVuSiR`SZ(vcpMM2E7PDnLd=o+-}~jjAgJ)v`H5 zoZNI*O7d!S&nawWtn@6Mm#40y$#Q8{I{kmi34%ZTmpQ@PrV#o{8|5-^K-}s;O!hbH zo%FZi@u2I|DtPFq@b-F?&S4uwP~raK+?z0r1mVu-InU{snR40WDc_WjD-cR@M=#V+ z5E!-lw_c==)`elI0i0uD%%k85vnN){Nl0&j){8|NuL}I(0*Wi^$1W}`<6$ESj={jZ z9G1z)lc&&-FJylY2Ab-Pn3dIvtmm!fJ=}0dY^y&HqZWy;I`{6k>RV7jr`&3ROSN2f z|3fMf079hAZZF3!KF@_J58Zv$uh?a=Z#7(5a=^)#J3y*s5a^PHS$D*BcYmiHUxg)d>vtL)Ml)kr7cs zOW3H2H_5jR;k>LmiV7g=9chN2ODEVmVeXE^?Wj4B_8f{Fl10n;&?HF`eJ2CkNs?$* zfEZZs3Fdo=T5=wbUG%6vG}%59Pp+Fh35VrGz&&`bl*u$ZL_0L4CnUw8>=BhbrzO_3 zx@cWfZa0d}L93#GKmOSB$*G(b2h?kW=aO|4|NLE{ZkcG+N2+1kvbEzkO2Y-+Vv&cL zna+Tu;j{4}gw(ZumYb-->opQFDGD?gl8IffRJIb#i{|Y*bcV$^{-s=Y7c}yBcdEKH zPEDF=JGMoRk<^NXJ_B9!BIS>vT{-(&hS~5vu;Oun=GikFFfz$xzmQz#==(-R!}Ztj z`6-iZFKN?X|ER7}pb)e)%S#a8JtYq4t#xZ_QGDe~xYMQVE&rtQ_(cO zkqmM$3e>iX!|cT3@!_LfdK);@iiyqZ*-8JbjWcr0yS<n8LlB2=F>)24_7ZmSP~ zkVl)o%ul2Mz}bJw-Bgec-m{Vc&eL9l8(Hp?EF*G${H$!aQiOr-0H_X=`d8O*4Y&swgjnqHaXpif@5125O8XGoHj5(?(&st$=f!YR#IHnaClF&u=0UFOtN_(~u$v7lJ<5o?0mcJ$dzW*!KvnT%@>an^|RQfc+Iiw2Es&+cqa=_b1 zHKF0=Yw6uY%qq1&-gWY=-h{f{$bh3mX4|PaC#m|9Mfz=5KZ6|V(Efu@VId5P|0RA| z6}ra5(w;S*oQFi7m)8j`SkvmJWf~s)vlv#(^vOaIX!qB@oH|@ni1y~5Gf|w9=wb`7 z)nv=YCOvy`)?uU?+NYnizdNg(*t1gGrlrn(?V6L6LqKShzYTq#{1_Z3f0u8$q#GX_ z3wpsF8tOUUHWPj~tr9KJ&kVc^{gcr`zPE^77U7N12YRgmsfayD zq5&srPQUN3pCfq`=(;5&{`Hul8}OR>rXwDw>)TV;JG`AK+nZ4aabw9kP`HwOZlLzB zvkT8*hhmTRL+@pdmswp8eTq+C3I5d)-k)V%Gd70*I#Bqh%pH8Nf(i%-Kx8HWT~VSN zWzyM3UP7|nekTwARKfqlK;fS;#3oU*mx{4wy`ga`m4fE=5E6g#sV1$_q!r7w!hKDh zp~N#sJ*;+g`-Y6d%v#H6oRtv$6JDi9bWn~;ZFA=|-k`Q1s{N5tsd>DeYV?@8#X2+g3=e$N9yk@njsF?r zDS^ZPzQ+lf@fh1>MUISX34?9-91vF;XW3U6Ehsm~60 z)Oxv%Y~|d236<}xz6U=)!WTqj`ntS%Io0dxM@Jqe)Um)(a5Hd$mC|6mE&NQfGs`?mpblR=5R0~rc!X5Vm zXc_Bs|L$+q6^5VFCU{k6X16arjvhvkAJ^X>%`@G`XgSLgf3RY}1=7=#Nq8i-%O+w& zeVOvF@LC`)H$aq$B~@9lUVce=#k-k+8~f{oz)Ta~Qf~J?Eprg^`J^8$zM#qAADRAM zK0iXHi_Crh2D~uYq9ibXZ>Lw%VM{d-QeZCgB~qrGK6yx7QIy@~#+fy7WKG{PVmjlf z`U#ILD>JQpa(1Moq6Ob<%VU%Je(L>OKowh;Y)~QA@kdCn9^pBSE(`w`^up1N_F^?P zOB>LVx_8Yo@Z6Ybg{fR^+nNcG{?7CD;aN?s|7kd|)9U5#CyugimVQj3z6o+qW(i3& zR(RHeyotRtrlAxqXF4DgzEuTP+EZW!OAv<{gJAyxG!6nY{GRv4owD51FttFts^znHw?z|6$wFx?7=H$?4t**X|8G^x zn`X3Y-RN7&Tfx|ta;UYcHdF?BrvJv$B%B^DuY{j*V&-G%f4YxL;1))dM`zxxYDHRmE}`e5^Lh zQq}l5bLUY#b#M5c&BHVP0AD)r4I%(^Q7tzkzWPKi;@i99F+vM6!8grZ*ycT^l1*LH z6Y|*mKI|E5$&%XhCgyx&9nO>5%!~+Yr@2JH{ON{K8YCW9M6v z)iugZ7a-5_LjS3rEjGzTSqBCHOrE>r=1*T4^HIi!O_-g(lPdxF-sz;U0Yd?Ek9ZVf zk14F8%g+TsQvFpscp5k3<~NzduH`-Me>!qZEXFz^yMj z%V94kO01GfOs=}m+R2jp&9~m|%7RA{LSFI?Keeq!dP7kSpFIV6oH#$kqGLpnC(C!2 zC9-W@`sR+~#+zs$4jJ-1=6-&MSo--3`kN559jsr}iX0c2U`SGMhmKs%>al7^wN{mJ zmwY&nb)6o`ChJsa<=XIv^A%?P!}&V$aDjqK_Yb+}?Ma$J2AG96EJJGt( z$V_Z*wPThJUkZasC(KdBDN`#)M*eciMMBH~@hy{rJn$T#hB#_;bQ}&kH%4sLBss;!`Os4K^`t2?VR~arTp3iB;-IS#m#uDGjn%i)674TfYD%- z)VhYF8@fuFs~%oTLH>K@Z?6^i!%l?I zUx7jITwmdB&*ZVgb9Xuqo@5>!ufb3z9kT`zlBYgkHLDv~vjMYK#TO$ek+lX5I+E>C zY|A=kFFmX@2>-v~A-+r!;{Z6IPA9MR@Q9q)0T^N_vyVtx*TzW z03#?~NRmwgiY8{)O_B=}8#qvcj$|0P{~Ll>wvz{h(>|jPF&puW2?8PDF;v@!f>Bcl zHwc2E-_}fT{ebx@Lm3?X$0I7gP|(MT?hIy7X71>k)E<-y?8AGGRd5LPUP9D_=f1eU zQIq}McOo+?Nhy!*)r@V17o{DYvx9xyCZ7%I_NAJQ9i!d4uJI}7Ed`~*WJ^RaPJ&=| z|KKFcpcMAXl9S!^&^5l=`*;4I5r!<-z08zpRBV^#3`>&01j@A3*79n-A|#Pdxs_)o z`Mu!8{_w}veNcei6}>4H%UgV9zHg2d8dZE!hgf!j)HEv(ikD7cQz}heGi8kyrn&(L zdepog`@R2v+CnHtvcQsMojga|Ab&>$;h|?;7k8c+n1(v^rU)_k+d^Zg*~M4A%E|df#Fx1|7_O z=kNSAlnS^B1b9HAREIZKvDy20MRR1%iyf2vZFi06V@+vhs2I|JP<+oIHlp*{ydQ6? zS=_)FZZ}dv^sGn!Gn)5*-xP8=`u_;tOp}DYMt(=~?4w%x-Ii&KEGWtsH?x50f7#!L z@92RW(b<0ED+~99r=!U=DEyB45yrE}1!5R9stkXWfy)}V!TjhaE#gY(J7CfKReQ}SYsAwRA ztpmc|aBBE5i8AqcT2YkzFYP&vA*y_ z5z`KOrWD9Krj-^t`u_nx0OAr;44I8vAMg)Whl#iKNbF274tC+Pd8X6cF0?B(7 z@N0LlI~`qpr_Ya|^_T|dr#~7_EBquCsz1K$u7$i_+}PoJz9bpaCT=5l{m+30v%g&i z8EjK1i*LMb|G4GEVhOjl^(2%w2GT;shgHNFYUDd2M;SpsJij|%AN2-W3w6I(Mv_!s zS{wF)q>aPzM(-z5QGKbY&>9_z+Yh-Ik>qO5bwB)jX2_+_FHFB~1^&j8|b*R>%)TBJ$I-Z)*ltNxu>3 z$INt<0zr?ad)IbdWS9#;V3Hf_;(d}%ZzCnhAYBdm>X!}L{Dh-M%WV28)3HXfV8*Pn zHT1M^8K>;#?xlkVUu(!*uxxN({vq;z_*ue+iSb4+-jEf`sjnLgY(4=%3j z{%pKAqH;j*ZuI->!_T6L$ie+u=PQi$*z+pHme=*J&_MpkXg>$9z5B@Y9*ufpI4dAc zbl7h<)*2jdL2QVAE`3S&E&Ls6D>?>CrcNqlpmrYf0XvRO#*VaF9*>=^b$K&Lbp@2b z!4HN~g^T71%x*2QJkMo&tS>dJoIYC%?Hl*r{}rHXmy)>-hQMMMijc+4}sO8qJ^znJ6d8%~G(iqZ}K8Kt`fjY0cMW^o{zyafpS z%F`*e)<)zYdRr5tE{@ED0Td~tf`z2*TY9|my|H?R&r{+5Rze2F@Ii%TPz_rA@;w3P zpUFA%&co2U@V_HOiEsZK=PuKFZP-4fuy(r|ZPCF@)@e&Kmw|peX32?TfvsD=w}886 zKRCGO7x#`(?iGQYpuo~fr*a{E?3Jr$ z{@8kyJ;1wc?BpT8R<#^JXrhP-2f+!F@vCm1^J-@A8~cz20N&GH_q}@!m@{vt!2SgU zF1*n7D(9RAHk-E28;4oRdWIE>jIx;?Rng;?{Ast$f`glkG+&)1KQ`^BwY@k6zie0R zbr*DsL5!IA|84;w9t#TQl&YESV0VvyPjJ+X=lbC{6Ot9?vAbgB z4^s=%V80Y-=~=#bnVeY$*~M~eatF(0aHvnE{%-ixZD1Jy6Zmn&c()`wck(SBJ{H9C52xX1KtPhoIR_RqN^Vf?L_a$2G!UW}M#* zm;d+TrSmYvK`N7`ifp%t&Z1+ z_``kAMece-lk0tNXWYbIu8JyOu7!_bU5;0y`Jcz=AzrV4tadCuT<|08)aJFa?k(s& zwzY{NPTSfvKlMmoV4Su;u-66C`{6!rgugaAGy`2bcBf{BHgioZPWZpb&e{5$cgyiV zAISMV9L$~KKQEQjw^QEjyma+ryx#X*t@XV&-rBvK!Up)=O=bH&p5$~qoaln)zI5Cf zo>7?Ty_~Goz8V|XU4}tV+WC1t6m)o0UGEKPy%s*}6)AOi-p-V}yk44R%idPdC$0H8 z;&4+SC$M5hO(!SE<+n=e6-mMe{;&`)SF(&wlc|%`fR<2Uv7qjr;6BfAO=#d?v^l9~ zPedD)z`JO_zBGdqJ4{rJTh=yd{drtA6pR65W?_3G`_|?|WqAxTpu0ECW-K)LMEDEe z7OF%)isMBzR16r-6h6V0geR}-Of|fBCyz)5oVcBg_j+p)r3(lv+WJ7dDwi8YH zgYIQbCFU3Ju|>aqq(b{-EG3ht$$0)l(|PFlSzKFo$Z1hwRdIHfI(&!1kslF0G0AZS z!iH6b8T;8mPkOHt4p7bB@E`VK>T-G)58)Rxu-OoS2BBf0Ci4o(JUi#LN@q2{kAm^b z-BI}82MyF=scjB~#;+^iq(+oW>mF&_zX&~jRz0d9ByiBAi?n=sy*c4;45gMsx@%CS zav?--%++ln{sO98wuH1D~A6>pacqk`*K{W&Jf;n zM5yo{7RJ~X?~z=c6rWLwc<%FXV90`Snssg&9wmPaRa7^27IWAV;}kySGQl0jTk0zK zMiW2&g51eUzqTS2uy%KjyOCm za(Ev-t#Z410`a`tPUfn>8I@9#hzu-c8lwtEs3>SMY!{PHqVC6VN}_YOFG-k|rD~yI zA5tp{4PB~-Fh<)AY&7aD83E(NqIk~|gaXy{FL)LR=o8;V*`M-iwi6*p(7qji8@t;% zyb(5Io3>uuM?N*LN0)Kl+~0VpzhRrB!?R%3;;zvNM8}T80UL;~)51zkL7|S^kr{M% zBV?Padsw&STGp;y@+SQ86weMCx5#A^?X7Iam&J^cE?z`&VP4>{pgjjJ1Gyv@M5?%N zE?t;Vnk2VeN}EIl13GGCN|S#qiHREdYNCkTlrX%QSWqz3TThxpCeZ(##fn^c2LI9% zK||8FOz}hN0R%Ji(WP#R!RWqvn7%S*lErB(%s=5B_X(p@MB=POe?t&h`uFbq{skc^v% zj|dl~U(I!+N}$S*iHM9ABMhY%H3w#(C?+6@GUZv>8|&K}W*U39+O1?u18C!=YfORq zOE0EtcYKw-o5>=RpRvdvOgT-vPUl~v3`+}0v&o(Vuij6NIRZ*%!aCV?Zj{#F5``ji z9UUup!q+g!IV2%XW)pUi#2CaItsy=&mMP*}zIbSHNc2P6M9pm+DC!`EF0(keuVQ55$toOa_9?cQhJHXLOUC#Ls{8Y#Jr+OzV?ZA{ zgG*aUFI}yeYWvwjv`ss%Dc3?}K{sjPR{zi?f!+<{;!t<(k!J{&wYl$K-hCt^Lxo&S zn@KyP=%2q)rb9R7;7-jE(@Bz$|;h z$<1+zn@#g8xR=lMu=%b(d;=S6=3Z10;VIZikd11%ECfKiHm|)C54Sm(P9D27;ZtwS z3A|dtxD}O+QmZ*>WgGUL;|DvDfy>BivI`*fxULb8dl$2)LuyUSr%(AE_ZW1iEmdGh z)V_vgJ_E|t*0Q0x&EPY@i&|mgd& zw07YZ;Dh*Gi-yevSGryHi)>LVL(T7%+Mwnb(3;JN-+M?fGm(Go=;r#hI@92fm79CN zM%l7#yYGf$(65eof~H5lY4EMUs{XG^JRO|+==l;)rFmU4co$^4>?i^Y4_vVs6 zeiP^es+~PnRU_DE&Te#;u$)^({6Tqa9f#qFpO z6Fk2ZJNj%p7p~|Bz7{Uv+2s9Z@auKWmGH-haL}lk(XRFZlPBiv#m_r1$!D+CqH4z9 z+Ps7uHX^!|D~!T0SIC{5^mjV#TqjatTU-~LG1TUleA@F`@FnWi)4h-K@2lS5M73)i z6V3I=rj_2l6^8M=pzc@JT4|qZuZk|xrBHYhrp~P4k`4DC^mcs_T$`St!aI$GMx#E7 zycMpLZ9?K7E~@|9LWgG0qqZq4fyVw)MSPNHI`s0*Q7rt{Ir!2~aV1#ua~Jb+*HNxh z*!L2u%M;1+jKV}ur6$vSc3dp}g?PNES1~O1lGCdeo=uktn5Pm6FS% ztjwsoHb>RwneLEN-9%Fg_}gdUTeY+GrrVB(8}yovsH-bljT|Z(`Io)+tv+78mFowY zK5xsRH(d{Sk;i47`_GwU*Ua_D?lHfo>Y~DBT*roW+0{<-L2W5#)@3f)|5PUYX}6RE z^|E|$lIfW)2*czchcS(N?V5ScQU?JCtHYf?JVNpb$JbMT=8h1DkvA?riUS?>q1AJ3F(P{F!9t zmziJA^L@_A=X|W-(p7&$gFia_szR}n&DM9Koj1xXaU6x=yEP68oH@~si>#e8q2Y7p z??d~89nbm%`7Qnk+6|IH!jtqSi%DCbh|H}BmB{bcx$uvRr-+cY>%r0rAIVm~h1dtJ zcTI~mb$<5Ps@>3zfyLIe49OGz%nH#S82>9)Fr8LfCQy3$0I!)!cTaNTrY`0-%Wzfy zn%Y2i2%wHrtUAYf^hNAzg=)AW0igXhZCLKNLpVp&z!cNG&tnEo{*Q%Mj5B_6?AO*i zSXg@*k+beikYd&gogn1~Qh;f=ruPjpK9ft|IN-gSlRocc03TDlvVsL)ff3yA(FoTs za6k#ke%_z|$dx@s(C`^BIoe4{1{fF@w4v*S9jFC0j8c9A*ZXqSd6J;gPSMwhD4q*# zj}tMr5hb;to+V%Np^w9-_Xrk*krRGdD_xS@W93+uL<5Nh%dSqjZ}Tbg$3pmHt=QxO ziyJDcZv-Z`sPT}kTS&eXPKkYZzwUu}gJ9NlmAYkNCi7QnPwXjc%y%qAV3@JxOsih= zyEokyDat{zkAj%`F~2cU4ho4SI;Rz+2tKec){WVbq&xBGP5^E74FUktp{w=kAvrVd zvpOk^%Otx*2hMEVNL&0LjSu*1j^aIHkKNOKE2JfTh+MLc{W9Y#ZkkxXRO>@xvV2je z5?OAX^h@U+K9X>&XT-p+T{n0YG7bUjuoHP=rOn1FRPmOvrpLVf-m&EnvbOg73f0D!S~B~bBE%A!Sqe$3QQ z@sqZ^NqhEQ8zrfSXg;V;S9h>K^_F;ma6msZVPyvPI?>hR&PH)LDa^q~tY3fLv7B5v z-m`Jk6`;P?OD1|%HWa%t){$v?lm^BCw4T=pUsD`}(R1siwz(f2Cf_Xq-MR1q4^sUc zM&DsF*)K~%vVT|x-(tW3DcG*);tzk*`evHk#Mp=VDx4d1$$G%|7B3K{v}n%Og^4cx z*FpjUb{TiY=bmA;R5=rEbT6!~eRpw{K^>g7f8gV?kz(sE^oByP7TC^ZAh3L8y zetx&1i2}?!C=kip)ao`#Pf2Nds&m!@#5UNn1ECk%nsBjI-oZAv%X$6KQ*;EQXViLc zogV|FT8xiv53~WoNdbB?^02QPM%MYCHLOZy0)626eF_fUvgW$# zBG%)t%lfy=e|G%#+Yx7CK2KLJrETcS^?SW98qX1St|T=!*rTdDDy|K=ZN| z$$@Ue%-Ej@({gco4Bt|=&`G(Fc?UF!4H;pLOn&W2$z?*cTE0b2mo9 zV%Fja<6VFH9AQ-b>twg=-hfYy!GVrC;m3jAUl=!kwxE-KX_MAOve_O2q;uhg2RjKd z7E^CFPJ!O41x_V~PiLTYMQ^IZ&@(R&lN{=^2R>AYk}%P}@^6I=en=l)TUkCXb#>;Y zkg@%oR|89SaKzb)D#K!c6%!u&W@*fZqnM^u#}zsj2J9mzru;6Cyu==d|54t*{l2B; z*OLC%%ACjEBW}|Cdf#~hy+)h7eziYYEwgL?kNsqSEaCp01^)WRe+mz&PVQ?LelZzj zV)A+V;1AO~LUs6i^=JZwt5n0rO#ctVjKRECMEMJjX7}r}MF@&Z zLL=^a39aD{KY?AT)GFyc#+(FW9_%KkVxjU@(Y39Nk5`WRi@KTQirUXM=EL2gY|(b+ ztG3c%GAhTt80aTS{=9~J783lO0|;(0H#6i5!_y@^-zJ2YJCd=N+#xac7J#AkOY&2y zOxQ!HL)=BoW;o04)Zt-bhyU<8V+v>Xp9Ig*>J^gnf!BRn()T!K5 zWu6qU!CO{gFS%N)OGVf%)=8cwoO#UkU@hN}sBU{0cqFVWPgVesoEMe217Rt&n#{#<<4)D^hqo@gupuDPownU}6_Da#?Pz zkS$%r3LL`^Pt$hOs>MnM~7HSbACARycD zoLV0!WnjXFJ%=u9li%Vt%>+!Rgd7Vn;5as%g^kH{xugZ`5sSI?z`NE!A~K+FCw$QH z!&J>EA?;Hxy9VjFOcVX>g}fRypf%=%sTeAMPUzJq z)BO>8>UnaM|G+yvEMrJ!dH$_q;;5aE#AiGvyn)*@K?YFb4loXhW5=;$xPzZkLGS2G z@k5(&H-?_O12T#KE{QmA@RR}oq&7;j&$NH15}JV~rW5i?((Zqp4W4kJVy#1cXDQ*+dbw%P7+N}8RAHDY0+$+O1deK*oAv)9moIls-DjE z5L%E#Wduk^{l9|9PFhL5WY$*T%w-rQXB-<++u&vC_z1D6WvR33>?fn$mi+TtGqiCK ztiK|u-qTy1yhJukvKO@+m%XCLKgWyyY&ln)yxIZmnv4}oP2UNMyV2UOG3g3x6QsQ)i=LI5(cE=y0^X?sB8>bf@X&wQ!0B>SoWKX<<pXbMn-rw(z72xrZ4n8BUgcb$O#sy-_e&4Ad%`(Ek`lf@_mHLD*XR#MzqCylTE+=J3OHMZ7&n~l z_0&oEC7H>o@9qPSmun_?|IvK2|cAXH}Y&-k0*f?&^7qEJvO9g(+nDFZD{;;MmlMO<4(PV(aRpc!BI! z1UEFlK>0=Uk5#vZOvLs)iMbpHvFi4LpB{aT!GeSbhA;myfku$=cGeWi! zk>F;G++!q-&B_%Z+ZA~x)T~}cj7e~pkUN*`R81@heI5P2|1JvAHn~Iyfp}TKc!BQk zCqRN(u7)L1q2?K8kpnb{i#*!@Mj^b>URyueNCtP#%gFXkwI$7Qq*%9*bM zH%UU=BM6Au;*?nzMhY#QD$=3Of=}>|C)AB~iwD~p)Junpr`n4Taf#6P;rY$;uG0RH z5>U=Wy;21+Cg2zT+22gCf4k{}>Q$hdzbk7XFIq&FLC!t9gh#G#57Ghvw!afIwRi~1 zza9KkSy(QpxYii3POjIMSD7Iw($aR=5b&jz?yf85JwRaKo1kh*O_#H1*fdU1`p4>8 zHyWaJJnSncanjFOhI1`iU@gUGEV~iBCgJ`K7hqerl}UfWoj0bt;$19ef>Q z9Nx8-2opE=X*+9-%0yVJjLYQ?yJEC|QZXq24Vfz|UK!^whfZ(mm;;mxON#X}whuz8 z!FqWlc|99@Y~8{RtBUzCfjE34@K zgad|tibnS#j;t3Qa!ZK*9q-KwVX#cliy21x@swDFwMI>;Ni67zr&>Rc>L!8?CVz7_ z1w>bPcwK|%hGNOobV?cGGiUq@wUuGz<*H#Nm;IM}#V0K~QT7Eg#`bfD%(0n1oC%qu z9Jza@m%VYa9CXpWNv`7u;f9D`A!?+Osz!z5QF4NQHQ6r^b9>@%A{OrV&ILFJliyoBaV27zz&UcVWj^6`;h05A8y(ZH7 zboNJE({VA-z*MeYQBk^}^-yePjRwIRY1gd`t^H;`^9UdA>y{_F@oA4>nA%;7c|O12 zGLG7`=zZjxiuI=cn^IAkXSFGSN5f|j>nS<%u007>KF2ccRV?)yAFZ9lH_l+wP@5sg zJpPSZ{Z#$s9CCcO!vQXDVbWxWnvm+*PQN4!03}u05+5KXTxs6C$%)L6c5(lcFPe{} z|LFF-P7Wr)w3I(vpaldX7I2MppQMH_pyP?nz;|Qon8_nC9vAGd#oBa{RI)*t@>r=T zqF*-4#pP1tDvA#75H1x5IHMJiwLNzT{pqFoJ4sZhWATRsE>AoBH_ zzz{-6tmrBRwZ~R#pnRY|qNa#;G}~uL(r9_vgYe6UknsOjGLxry21NtDr#h!i=zlmR z1l11mwuEXNNMgSO6&Ltt7CygLOo)5kj*1Xww-GpfYY#X7shW(^7I~()^p?oiSAaDY z3*ab_n#4wyczbLJ)3tWWT8d7In8defD&WlrVHnppmy71YU-iv8ECb`;A*Z|QBCw&-Dz`S`koQ}Wf1q#r3x9n_xN*(_8O1*14;JF#Z)HHAov`Ej>AeoL~&?O7+EYBIk~m@4Kteho(T3xoine^EnYl_Gxr>u{T}&j+jO^AQOb zU;4OuBwa=vpNgDBxx^0RFmSth3iFO%?!0ZYo!7Oe?|XNkYs-0x1P#_iM*M5E8cbWv z{wJNBovWsv-jHnunLDcTe*;#TM1L_n{$c;GV1;hswYK=R?jZNv`bIVrppjqjcrv7R zQ9g4MH?6LYGaEdEw0qmVY`{8LsnKh2-=ohKo=vR8G$g&cVBVcd7+2aB^?+V`A;0fb zFZ2BhQ-s8}0-fsMNqY~jE`tU+Rb5+s20Qk;LkYWAF#r9?C%%mtG^}m=lEWvZ!~4U8 zX$eV9jh+rc*mG^K+>PGdwUn*GNx?fT-=vSk7_czvxKVD|k(GgbC~37VaBdapKcr>;8=6rtl7DiO4$V;+I1Cj`9puqj1$LnQ!b2H23`;g~ytI&5w2h$U!y2 z@ecj#qbD3byQj$`b(xSqi=k4lWUUc1M0gM(k3LX$*gdCja%i`AZioON^Tb#&HsHgn z9^9(M5PP|pdBVRFNPy1gZzFBHQAe+V-3#7uR;bjIUk6HbH1~OoXJcXg?x0K>l~g!IBUHKD1Kf28#&nY zxYtElmzTc859r)($T)juPgszJ47WkF$TY_1dBfMrF&q1_=1rT zAXDH>NVjnyuL-ady0T_qv8g#|8hsxUb}UXkqyKjFQao$R#&Kq!ft45oaEFajWQ&n3 zY{9nJpZIIBn1guTVtcW4`$FyWdshwPbK=KBA*7Z|ncN>lH+RIA?ewUs+P0NcT0|6& zq1|}OuPn@N19tC4Qz*lRQuL0hscH{upOTTzn$+kDUR^i*L@uNp>mYiP_b!J!PcgW3 zKH^JO+8?; zWiKXI7;4}VGq3m41kCUnT0EOu7(zPm{$u2q19i+mvy@ilitO&BxU(i1AOU>5qzjOw z0@A7!n_9)US@=|2Y5=DM*jnesTr&}W^>k^4`oTSKd6&%5ECWPHp3dJ>i6s_tp!c({ zv-@_t;4BS(m!R2;+f{3GNmK2p1QY7Y4rnJSIJo{z6lz&YujQd#2hWT~8FxOLfpJr3 z{mR>2J9_YSxVz7zSY2wj)BUyjKbfikOa|`xEs60~^oUiN_6J~@Z^_EA7Ff>NyRWcO z!uZiLi}m(N&>6LtcNg5rMkXh)VwLJuo9SWEuDKyONo^K^QvS&Bdlh!jp;mQF){NkS^`nf40grM@FnH3=@V(7%WX2b+ohv^x#hvx_v^=!SKgaq3qc9g%lez zo-S>mhTZ*nlPm~pt%}4;SPaU>l9%5v=NLp$PGQtqz9E)gD=^zK+8{B$vL{!?QA#qYQ_CG;Dv<%WMvvZBz} z;EeWFqukQsS_v;Mk=(*fTEND;)6FfxN4HWT#}nUE2~}c4&tVUsLfVni#WAY2lZI4AVixqnw4c}`p zeM+N`DdI0I>Ez`OFfgnkkY>R4G<3{v2 ze}JT$FTLTNJ;)XAcoFz0ALIL$ty+SCUD85a7x6E>Hqi(90hG#3qZ(P2O`eoaDNk1$ z4SoO{p5_t(0AB$?esB?FmKPcI=>yBO^cSOBzZH60p-G~#kHLWMrgSW#%X^8H@njSq zQ_2R7SNQ;e+Vxv?i_ALX7RybzRDgZL=Q(75!(PhZN*i~YmE`wcVOw{{VYK~;=rB~2 zoyU5#A(ve8gg8!W>Pt44!rw=Dl6T{2+|_wsCS7u zlkRqZ@^f!aF4D%3?=ai4V!x*RWxZO{3zX(dExVaba)jsVDUYw$_k}6xbsY4v@FdOX zoD|l-^!x@n1P(RJ7qTC@gWeqCUu z-Ywm|`;6{$&L0M&#;O`sOP={$bIvLD*M*-A;NYuVeH0|3JZ{|_KV7zxb5KzNA#}P15)_OECtNjq`KV5Yrxk5#8kB&Rr*m&7^QKZTyWxe;rl-tsr zs+>b-z5DuBm@>o)v1@G%(OK#F7h2L(`25=~ajUn*BOb4%L=LWRrd>dT^WjC0=V>=4 zo$J?cK?&>|9C+Ose*CehfsrUjb8Xq*$3pQ*w0~7K2rA|%_#3>dR{xoTO``EZrKN<> zwL0d4$V)#pE0v_U^K|@5NonIEFPUz`;lTA?HRe^VE@O)uEv&1x1F40}X&;`qnX@d|K z0e}Kfke1MXmvguh=z=}}$bUDXwKr7?OK95EjDWPp9E{Ca%3#a%)A`l9Y;^vI$dmbY z5#DxFw^ZCAq;wj)W;0L{`4mF^7DOoF3!|Ss4QZm8%WQw$VlAS*;*!2AjVdQ$ zges1reycM7{ZqX6TbWM5eshB1f;fHMbQTI{8=!Ua!uxC z&jYRyJ54kKdpGA2eNcg}C^v65 zHY^udh!&|Qj)tl?=-P~d(WQegzJ~fWks>2Ju%7Yew6oho&s|{6aRyWCY6m*P&XFEF zG>6McJ5tW_(ss$0A%*5gZCvt+`v&Nmy4fxj6ZqVd3Gid1DaaUje(xxxnAufUOLCz- zRZW-xHxkS*X;hIo#}}q(D&I0iMO$eZy4ESGb`sn2UCjgjU&sh)RJ)vVdh4vmbFvnD za-2RLp3_cKq*XQ3!p@T;fp$D|P`(Dv+A)tkisWW;kQP4LywZQACFS{f^#V-8TvcK@ z0`hvcP~D)hG3Y{kDMqS)g|^Qj?KJv)#c^e$;G>eED>JaHEK z(IH3O3E`7QXN4LjYHbpe%5>XnjDbwu>yE-zem%#}ui2^iYcThUK~H0~R#EVeGLD za_^Z>UXX_Z5am}q<@|>hJdJkEtj3~XA5Cz0v;vGYIfXKS;3c1LuZ&>yJdUtYAOkWQ0_virP+w%>EAhhOQrA+4k_G+>8>S@36DniwKp{(8;N(O zpr~-<&vxtZ)pOnNm|8Qru+Z9#&9{z|&CBNOClTgFUD*)WM>isQ4TlwG4FYfZ_`mpM z?9mQtIvlK7CA9+(5Bc?lBfxbt@eR`V)>>NHjw?zshAWrpeJJ@npw4+~7U*|%60Lpo zm7iv#{c2V;;ETVj5fSrO-70^6vE=bBT|TBF-8h~J7YgXBHsxS0d(JM>{ac{VMhF!ZBIV2ONTAz_8bHKLVqtyU-c$yCCkn6tTMSb^AkiXLs5kr$J;X-U|b?s znr-nPpTQI=Y1zD3d~-)Gpb_YohplmOgL?X=YHZNE)R~ob#(zaoWEdvt7zqkM|Q|5%wj~gA; zS7IN-?BcKrpSU@Jb+Ic1{j(W6+UI8cWEv=!u&W2budx77P`R|T;9NELV?O<|m#Iy< z;D+yIG)U}=*4ByDl^WV+^YiEyxp(_r>c9Z2y>zeV@_5?9CH5Uvkb4t|wREw4`Re5S z=Y`XKfEP3X3k#rnw%&YAZ87G}g5!MtDXW(_FLvhrd=CSRjLoU=6Du+B35n1fUdLHg zMPfp6fNDq;O3vVFa6W(g(0aeTUR2<2Tfw8%)fpN4-P;CfS}aOfUdfBME$oZt4a}) z8cxZ124zM!;p8-SmT)rA*q>kNGZ7x_tS@ubjK5)_imj?3(q&0jt|onDy`*FMDkJD) z#hzd6B=4-=5Z3#Td+H2CalsO-nz~DnXH79~Uy@?NcXwQ!VOR%G*^rKT8Z>241uJXI z3nGgQFZ@AAc;Y`3bvNio?~7%NiC={y`4Ng@Y|?oliGMJOoc?7sZ+ex}ii&k*<5lMd z^240&qoJfxv38)E6rpnIG$WX0(k`a+h$r_Z%HkBXPEk;j_hQP}Z{D=J(P>@|;}+y= z-+AB9RpL`3+tKw!d5E4VNwvv&u1W3q8*Gr@Fx%5mN3+(2luZSg@l(E*;Je1G?rfuN4L5V7A6{UOo`29SY&&LK$L@FRr zZ>fb47dVGna%Z?a-b+*|@?YS$gU)^p4;5*VYR94tznjMA8_5?hDs58Ko zd0pIX9`gM1gMqPPCZBF)WK_IFmn0<=kVJzN6jo_L2qcElK%I8W2>=uqZIfqn+onqq zGbDph0H=`81lR1+7623*)nh_mm#^~o`5Zir3Ey&=+CNt01rY#%OTF9E!dD^-tCGzf zkGsNU6bfAfBjeIZ!oc;qg2};PGrh>;{Zl88W+#n=z|v6HN1<2uNLi|t$u`)brQuiz zPV8X_p%z7b_eP;&QV35($o?dk%~M_2tBP_}aajxNX@XiG41~6%0w)w#)B2$^-x|jG zl(J<(_c-KdeeN*NXU~KOBtaz=UD|b8o=ti7TDW)F) zLXDW+zMEkOp>=Z(;HWs_LyZUh;-%GLK90s%Pt|sWr7Kaj8AW}rLcCOnjr_))2qDt(z zh8-%hMcdI+=00;Oj4;3zNz+)jf~^V`xY{hOd7dIWazQZF)WWVxJz#j1oql}DtsvQ$ ziPfhZ$_N07Om-pBO8{V0T(jyburB(uRnsoWcQkWVjuxrkE>{zkg5n$*H;XITM6hq3 z)B5^*EX_nd2JJNPGBN@Ptz4o$E_*%%=c9x_5nXmE_;wW4t}QzqpeB@_$j_fu1Zl{t z`SA`Y|ETIIF?ZkR55w4?%7iuJAc`uvWTFgem~*T3d?<~-NjZ`(j2%>2^FK2t%IMk@ z-v(A;sHZOSq0ql7=9=(c)vNWdKD#k^E|D)5YOYwC23_tRH3~5Dz2zKWnwvjhf})tx z)$$gQM!??eFwx=tXkW9Su~l{2yAWr)JdyQ^<@# zb^e{VDr)YzY|c^+g1>TH58bR@Pie&wX;^ z_?8SX@+$*>UbungZS#xtbaFh6smK~TNRO(O8>baWWQaaF0b!36TLcw++zDmpTL+^j z!qOC;cuPI&nRI}&(=tV2n@hrl9LqYg0vaW>47s-Ynv9CZy{2{yYqlxCv683`huyoA zi1MhiN8b~2)KzNIJ_{rKBqY^A56iQ{`_f_`xxn9~@j{Xv<>8g|X`uZP@>EI-*b&($m8rkk& z$Yx&N!}kM4*p1o{nci$ErBrku-?RzVcl@5bX^yP7`t}f)7+2vWiU9HT#50D;i8xIY zZ(YVNyz{zCbG=f{lQ_~bf*>eQX;svodO0aHDN(+;YgDLI9cOgf|^D18UbOlcsdNX`Q8^gl2ro5nJ8n9t*ZF)28kE&o`AKx@d zPLwq;_I*ynaiEGg|FQX_^G&%;s4Lv&D%TeLQN{Qo+Hz-~75W|6*Mup5hRQjkDq*lm z*#G+agsIWa>1o+76f?`_4^R~tmHUmZ6aSn}{{*uk2sf>_>1@VXZ9WvClO#>fVm>70{Y3s0Tne(_<>*r&p5fY_J*sZZNjqhfpq^!>+&zy2656#c-NRrI;_%cuUG zJIdt%ksc&zh&coezXs;qrYl(E}Mv@;CT~T)% zUG`sU>=4*p*i=x~La69!P?i{#O@cNFf_Mu>3FtpQGVxa_P)cad?Q2fmxI*B6WanqpW2>%^U`3pj|g z@ioGITj#wk``(JBHXGK;!-Oq5C&F((Pk;wfiA1ew<0WQlJ)tjyxryl4_?l zmT7E~rXVE^B4upp;PrY&??LiC%_hHZEzA&XBG(XV^Sb$1&#Yg#IXu?rH-_THUqBz~ zrN{h0+stn$@_453j0{ENJIUN?-n;iErUhryeUI#Q3w7?*!UVe=*`>8p0SJUE?iwb-$?|AE_WOl>Z@Y1$Y zbJ{ngU8`2HVBTQ0_FezihbR8u%$iPYy1M)(#isV9T-@FyYkK2X-0{4X@5+2WSYj~9 zlwXr^2B9Pnp#UsL-qaJq6=&UHveF*Py5>%QtEw{HAvHJ~obgPm(3>8(LpuMlDWDH( z{>1($c9`)9y~Rf%iU1e z?70^3$nvCRMzT!}@wHqs68_G*`p0J(=7){X-gHT36@nz}LhhCXHoot3>RPI{ii|7pRYlBcV-X$~ zq@_|~_an8%?c-Z#w+5y&T%;{9tKOveBAb%6M^|}p)^ZUOUWd(P$u%u7T`XdYzI2F@ zmtovC_uLUmOsn|VOljg|7;?_9f4p(}R?;F8oiQHXzNr8nVO?cwwJf?>d4xR0horeD z99uNs)rg7h!Ay(_cn7SwM3MbTH`D<$m@u?D9>UDcu1VVaHN?C{{srG20s=#oy02MY z96hePhFkxL4Bt#(RMKO-xGS2fYcOm@NL6yoghO31YL$@F5W0xRyDN@cTEJ0&y5!mA z6Z$b&6YjCSEe4puIJQ)}lFDeb$LS6(bD{&9AGTGrjd!HGss5w2%&)!6+Eu!G&8~`F zYY5qDNrm^IWaz?w@nGbPv^30Mh7Kf&2=t)A2F#FBDK#tl!S1Vs-Q7Jl-#wh^jZ(nC zY3@P3yXL2x`}UJB^dNHM$2+#FI+-tz-Xl6;aKrR?^x|lyV?K{$(rnGN2mk#AamJG@ z47PYPE+`$+6)(U`>j@QjAbxwdv`{<8w_(}rx4Ilf|gq_@MyrS&$nc4tZSwE9*{ z-ut^!z4BLnH~U5dGRvghy$n3C1>!fYsz(50U&AVBei(Z-u=Ek*QGgrO_O%IHG6F@tj%kYu2ofoA9cq?;mqj?# zMwz~pBy$LGvwTn-q)t&!W66%K|L1EpNLgAjhE6dl5z8#2*HW`h9FEuO9R6*EL;UZu zq<(x2H!ulkK6w5luvV_k`Z?j~w$Cl2LG&tXb7Nr62dv*~={)n;373FcI%u*snuXq~ z%k1XxWH~ispO4nzE6$Rb5Lo#c>;rmW#sht5_rJpjO&{9(-eQPJqIKXz-ZKWW94U=d)6o?;ceUsI04);rbzJY%BhU! zEb_}Y!}QIPSET5=yTNm!*k`B!k;u64oPcV$aqYO(c~wn5fOPNsrd!5ZB&p`jC(uKo?9@`hqsxHvQ=eT z>90X5;*nnS?Ob+eJs3tfcAQfGvvy-ZLSG>)Q17Ia8+ct1?TY{EBae91cYQI1 zeD;wG2k!5If}JjH^>3Z6wozK5C`h;1WNUDb`0*9^+S|SCyqyn>e{z3>XpO>K63kFc z;5W(M=1o0r^DKIihj-4MU!~UM8PJO3=4jkFLsZ3Y9ojRwYx_;m&!B_rW>49z6wjx% zt82goHXd^Wrl4j`%ToNinH@1~y|Uw*AJ>-s$|Uqt<~3qO?QXKVO>@V~b@}~O!GG+7 z*E#;Ok^P61=1)==g7A6ba=Ju`TMq-Wiw;R+HT29k-0=U)KKKu%{L{hzN&<9)KBHZ3 z8)D65m;Su!E2_BgcZxUa8AgVO{cgsZPn}57W@-NvJmKllRbN+^V+#?tTecq=4X5Xs zn{rR?l)P;e;Ql>J)twh>->u$^%hNtY9E`#%YANpV=^y2Oa1fKrz0PACiI;n2+!6AGh$4P2r%-F9Ut@OzWM4YFSLU}ob)!P+y0?Y$K}8UW zwT%aTpidq7Ch7X1CK99eIm=f72|P0}U;t87OzQVh3WK+(|MhV6t5`A*JLJH$nNUf- zLEUO;<>#V3jZKFphQ#Mf-wCX#RSY&80b2gTpEs7n(>lYQPj4=(4(A-n%yzfi(S)L> zGrgK7=^eihl*%K2ER$%R`YGnbTg}aX4FwRtY1Dz3J<-#SO+u^jZ-K;U9_PY+p~bWJ zg=5yk`=rojKju7i#*A58n34;WZ5AA^2g>&BU8U<6uPz1@fXJ_m_`COi=%cOSdPl6HXG!@mR9x7_11_l$jm%lIY#%eJFxm^j^JP= z#{0GxY-hCIH`#c-ova^B{`Q%-fT4;c@x0YM;fHQyXfTvUx&37eJ z{NUofnZh2?>^C`3fxTCCJJHkS@CLmu3%q`@Htqv8QQlfNiQhpH41f9Xn4PA4VoGzn zHcyukz(F;mw})GtfywoBY?jxnX-oxA@w%PpV)%6{JCA?wQncMHG(b^-CUnl7)us3G z#%qt~xwOiOjHmOsoMofH>N@I#BUM+Zqq9a>#h^s8pu)j#HpOf1U~uAxW7^+{>%=B` zHV*Xv(yGkcI$M)j5k4@uYw$v{vzE({{$KQnD^Fpy5N_G*4VCj>;b^&bWcD}U6kZ)i$H?6s? ze-cl6oguJt9?s8L#-n82VX(FUJ^UbPGC|qVnqYpnw{6<(<`4E^3T(0OM>&6$Ye0Z5 z-F-&{tXECkZ>%NN>1%vq2%NfE^U^I(N4dLq%13?YUNQfMa$S(n9ExCR3q5|-kvhpI zxP5hHBfbGJDqNmD%k2E}5t_nE^D_==10*!;bcTy4JG@Y^Q3`@uw^+qKK^HHXc|D9> zAo=)<;jy$xl)y4W`qxouS|gQRu2A3H!=`TrdrcGhYtje|eIa=BU}a-#x321m)vczs zy2+*!Oy8cprYFi?WE$i#pL>ZIyC;(|1j!Ci1?Q2ABlqGAN~%5UxZV!9MnelJz1l|= zd|Tmy4Ajc>DHJZybX!TYYp39duM(nTh=Q2-1H{QRyXu{6%FjOa-)u|X?x)+CY9pwv zSTQ$rP6@tS??EqeL&Rg7tzO&w!~pfOdRcR4&A+_xhYTKriVp66qXZjon%eZv$hpWe zD%cdA-N?z|hauyLK8z%&rtJj@Ye!{vI3yMN?(8*}Zp9vON~n%VnO7`;jtHTJ#5YwH zeiOR^Zdr#N7*Zzo-uJ`0YBfpu$m0wTt+$AjVlGe}3Z`y6JuW@qdjsJjSH*jE1);Uk z%@=f%Z_p{5z`k~e5k$(4Arxs9XmR%e)frKnG(y$0a#CL7-=gQ1{O`ey@8b<1Y-G2i zj)^L?>XdPIzZlx)ybXZYwgv4t9*pS?9S`XF@)-DG9+Q5)V2wXMXuRnp3i!3Ohlja` zVl#dUd#B{+Ch|)rzS?vY>kc{$#(C9Nm%Zye+CmVy(fH&^=L@t!a;>yl&26w; zk*QUy(*+>KKkqoHkuu&{6eea{#K$M235cS#$Dv=ptuoJTYr_B*US`)+8p&y-I2FyF zdB(y7X%~BA>&y?uo^beML=fz!st0HCC$dbmn}SxbaFA>JBD0(gP%; zZ1#Z*-Rb2^!*{k33VaE^E?(bqXIS+$+huvrHJo>sNULhY#X$`>QMfTsc#Jx5&ynE> z)&&7>dgP>^C3Kv0lO^95SI?GUlS=*fEV_0DZ#MU8#`20*5pIrgWp2(EBs4 z?<#*ok0iw`iA<2%8bzuyokV4#YBgkCd*LQ1cr=-tf~S%~LrL4i5kknnb!UKn$#l>% zHlA=ddKs@txn?Wdp~C-s&nRN)n`QJ^3ge3dxm+e&KlTEQ+B|jEPR2XQnKjpp(xM+( zT}4G*TaM;!2Js%4bDw+#x=PChmbKj6bc8OLdYh8PuL%-j=+@S4(V>6}{rg_0#lWUr zn?0=E(a^pA>pkX5yRptZv1}xxj~(C<@fJ?e#Er0c0WyN}ON zqq)~f1l;+VGolxzA1ABnb=QRd-D7$OF+LmTtw_v?A3y~sMk!8UbnWA(7 zeeZkO-#R5)Pt&uI>PdIj&rp$uE%_ev%bP41Oc>zbv`WoYT@nCLX|P{raT(i3c5fai z(FEGgJz@c7?x9Rn5Aosf^8pf{4U%bhL{7UoshdO{mL_P1e5MpwxDQy4b9p z?2Sx0@{@V=)c9|!RY@PED3~667y&=9x9NkS>t^(OndFsX-2E-`t`+>-{faX3e30EZ z007QJsUoPH+hOjJAxLn3ganDAujGvr&= zJ&NCA6Cg-JmX&)qCioi@58ANtHie{C3}0`>>~{pz4xP)|q%L&y$!pwY>B_banrlD@ z>9>{~?=3(WG1##CG`RD7m1mP3Jgvu%QElr`o?=xQl!&?3sZpm+hZp=N zSX$P)uI&B9Z`Yfq|LsdmNgzntP-V+k_BuPW@gxA%yJqW%*-*4uF@Q;+=yVO@T>b|x zXtKQ}cj)9H#Xks)2(?$u9|BY4#e!ece1COd^L8Bd4{i7t0PhsI&NOLvx82?k#*}oM zY_J+Rc2ny7BVXx*1TX(ZAMnr8@<)B}If2!Dq60%fcvlU(2s+Bo!|G@RuQKsEWYn-i zJ-MwE6zB?N?lK9{LA`>A3y9zxb>By7rRfpJbc@#iCc{;G`_>2Xer)pE@Azd2Ug0yt z=d1%8ZTC4jMs_1b(MOdtM-t{i!^{qH^DV#YNulc(i~l zPKZ-8^V}bI%@r_B<`LKeTu zU~+cU;mpGiam&eM=3k}h+d6u$@VpQR)lY(8q39@iY=1bePe>LHbfnHfzMg~#nbMhG zqBqM}J^y*JE1~xV)Y`@?KWGB>KiQ!(e$+(q;-xIcC8GxkvfaZ@D`eVi%~p6E?rtma zq%wP>!Uns^e0G*vG;otMAD4Gs$Xki#GPCc2Ahf2%%3%*2nLR!OQs+SdKwc(`U&AB! z@SVhzHMbQQ9g4&0puKXt7SAwsNWGNXp~ZLe2M?~-J@Z+g5k*h(0@ zN7r!81OUD(Rp(G6l?oRDckGddy{R`5HI-jJGV>c=cTgXKyt0=6_ngrGNVs0F`lXPD zL3R6AEvj2{IJWS1^N+PWYzixfRW3b(U$@T6+wurC#&9mSYF+q~jFf4p(m;7a=>(q2 zACNWD{AxM|b2b`RM9}@0f`;+i5i<67Ux(Led!>Sml+>V`9zBqb0?59;V* z@Yqh-!O(fk35OL-yk6EKa(V(fyjttLQpbU(cjMgw$DjgpuJP(zE?tdg!K5}{m))@N z0eGj!E9p-}=l}Oa=kjcn4~8UwuU`oFpehwlpCQtw(2mg2fBNTC$9F1kJ0-1vr3sD7 zo$*%ds4DLmJ)%UpCb8<$@F*=+!FgUZDN9Zyp{LD_jJ>0DFVIeb5-8w$Z2Drnb)=A0 zS#rI4{X!aNh!)c<9N2zF!$@GBuid|2$-K6d+0P!)tnZeoEt4B>dAvJZcpq3Y6NoW5 zkAoY-mBRJ=QE8yh^-eWgLV1xH3$!`Q`S= z_pg$$kfKWd{4HOGDIa4fy zVg5}K&vBWN@wV8Bp6|zz!LAa4Yez7n$ z#g^98>PL;WDdkJy?}q-xNj)J!09;s!RI&P*f3?QG4~tIP7-Wy=lWNrJM)&|Rexv;? zSH{6VkYe8E796uSoXdcXJ3?Q37d0v#u9z1y_^U7%E&mn6uH6sSW!i>1XL${D3-ADb zF-lhdE|!VLv6p*Q*$8tyeA>fYb3v0%&UQv)J|-1BX?lF_*mMyyg*j2BtEB&)6>@so z+Z5K6o{JXUkJ&byi2b`tz8d}NjQZ>-CK-ug)Z;WgPlCol;_}!vH(s7IEvB6`&MyEh zhj6s#-5znH^#FW$wljXuV4-j@Q`B}Cm>v~KiFsdU+g>m0Q#T9KEbJkSiWq=Dlf#Kw}$gNyk5-< zmCE54#5<)`J$s&kA4<;X4G0y68Dbh6XEnJl#_}M#8t+O0NOC+W8p%g@#cnv? z6tlzRe{xlrwypUKe1bB`GLD!;Njzjqgr4VQB*Wff%Z!igtd^RcU3;vBsriVv-+_&F zO(A@9kyeF_lA^|<8bH*Q1-=`zt?ssUMzDABdERh)Omq|{TZg5BjN(9roZJyye9)>% zqYvJ*`{dzrfZ;jS)a{>5b&6s*!jmgU3AOjRjMy&TyF<;_6CZ)pS0pOd(5;|bR$lPN zQ|` zR4tcgKF#Oe_60YneJXa3v-?%FI@v6&Ym64?V|9kjj0eM_S&97g0&U`gTrv+l6-=zX zWzEY-BR_0l%tU0$1`vGMtGYziR7NBW^x~K>t6+NpgUMwa=WW%njGxtI<|xx_2L&X4 zhbO%y%)J#t9Wf$Q@w`v6x>vpPKU&tAlByF7S&Y$wI2JsMo;BU8x-~@%c3N7lTSO&^ zm`KNhQ`_VgTSg zWteuJ>Zh%>9=YJ(@MI2`DTNLW0K8<%RDQ2bnX4}`Tuim?>blfJT_S@`t00fWF>1E$ zsFhRR)LyGhN%s|5%HM9yaktC79ll8nq3H0PvYa4Ot#5*?s)g<>iu1-|;F2%CF5e%wx$L z3xlp>xd}!(v9aga>!+U~r!uuSj1PV=KqRfjlzI{&DGDwd5$J30@G?J^BCh6c6fJ!_ zhVn*?h9)b0C@f{@6vVEE2jU4k#oE-k@_v1UNIHQ$T@a4~m#)MsD)IpK6rctb2vVSn z7}{FA_dF9F#YeqMSR`6I9VDQe+Y~t+e0F>|^BIj+Kw-E*@fM9ZTonu7E6Wai90$)H zRNVe>vmp#8l;@x>O0-UfLFMjoWsLtzfVpMn{+ffcheMf<9p*IDPqz#&9A>Jn3m&-H zzv#MY{l%<{!!m5j^K_jHLDTn7UCZ<^WXAs!3Y-ZebM{_gWv%N3G1n|ZUQg@5yP~&z z{4?*`&2c93>>S8r^a*BmE2L1e`6-pU#ls>G17emf9jV0GM%ZT$<(ZTl*}v@)%6E=a zoKj(*^NtuW`D{0AOrbt6%wu9`@8BSP^)`18HmI}o@w&Ov+tc6l^Xpl+$_ceFt$&kg zx?5IipMt{To3nA3ce{H!7q>f!{Qu)wXNg0WkUaAd!mGgoQ0icWj3)SQMWy*wCogh7 zR2b%lLiA=31>|Z+wPX!n#~$;Sjdl4Fog0iS>$UjUr9No8$o}je`>n+&3o3V6MNr`| zwQKWBgsECf5sK5d)_G_k2yEi~|3B=srcqwJIBG#lv5v{kG#cn{Kh!zk+2*I>e*4us zRP@AY!D3p2$S$|Q&IU!4V;R?nz|>T5X4{?Y!uT_%)z2;N!GwoBNjq1G{g|1-oN?-| zijnO+2*pw}O+8_cIil7fGf`ZjsP(~T)lAeP8~AeLsW@dV4_R-48>=D7_ zE$#Ez@vTx~z_Klo$MTix<4|V8Uqj74+P?`k|6o@Mt_#ZilcT6^)rboDLRKBCqf^L+ zgSqg~kxgmn%a9Bsp6>Tnl6uXH8>BN4!he9;?6q8ypVKFzO47dKpK}Tb|31JxlGuXO z$)Nr>eAaOlEhwsd8kE83h2ykq+-9)Q*=VaT$+LN7ZMpW&TDyEXhf|@vA0`vP@()cpK2FcVm0+_hh9nUe@9r>*qpTqG# zHYk->u9&KM8pfr_7IAkFB>M}eg7P8tw*M4SckW2uLOMnrce_1km9C9hI9N1RHEg(X z?D#_{VajIvZ9EnGlv%ch@~e7>7Mb_IO6(^?x%gL-yAL1Mt<(jLZ`aE0AA*4w*4}o z5gCj9^&=6o`KS7uRMCX;)j!qA_5$I=f3H}cn&=SjpSi~7G|zdk9tQ4@0>N* zXFZjr;Xq?D&8RW|&{@qZt}yU9@!$FUucn57?&?${m9p#c+`_B5MKWgOdF@IT>3EwG zUm*7JbW8)b1fW|k-g*vvmOt66YPf&0SJz4c2YjDTC2pwn9=?-w*HQl$g`6Sff5Bp< znb8YH%R~9F*2?hCe(^CYxatVKeAYJC@@SfNiN#H9CHT*><+vvju_@tiKA{74?2eVy0<3i`M1OuJ3-jT5hf?E{g8=a)eNf=ZB57 z-=H#tVybD9Aiz?>0`g6>+Fds8-QE+2*>j1I3Ts!xtX4J{Y0?>}`%jElVQS^jNe8Nb zV!UFf|9$(^1nsN2*zf7-e<7L^>G3c9hkp7A_wUKyW}oY$+C==XQSnS5mz87E)j7*W{s1p|Jm;g{yD z{We|&bLIT-w=V@JAT`kjO{C|aLXE-GDVptQx^gx&*%K){;>wov2bEq^RB+xSefk?m zE&1MU4J${+T~{mZQ?&yF*hs4wq8Oh7?mgwCojh{S+c5NE)c6;KEE&S-kBp#5{Apw1OTlBjuc+L?0I579lz(H^yBk#i3L?hsQWIl)7hF$d*LrYhB zaoH#>DXf)+WWAWZ)8QVegnJ}FKQnKco7I_umA}Gb}B;9v5m{L-e;{7zNg$|-nid%xF^9;_l_6;~AFWrw;^msZ#=`Tt17mmZ8@VCkc)~L`HikWzk z!&^jx7=#(yjfJ07$X;~OnehL*&`t128GwZpar_2}ZJ-3UbJ%;B7}18jgt@cAP}HN? zez_9ju{+u+ z)*2PzU{UpguCosi`!VKNNFP4&yDl$Wy9)R;zbr9=1rp1&+1l`s)VQf3Ga8U(H_6JA z0Pxi>mojtFi3JZPsQSC6@qYcY;F}rsnUjI^>M%xP0i)K|1fh3LSL1}Ua){}O-~pK` zMjbJzp0IJah*X_@l1vekKXGI})1Nrf;AZ083Aq@e>96SgtWC#p$Q6y!r@}*{&77)N z|5-StL{i=9PhFr*8J4GyW#+(?tl-C~Sh*FNND<1BwGDg)dN@Po>8}+Al1Wl90pRy! z1)V}TQLz9UTw>NVu1bO=-XJ=+3va%8MldWl7qTs%U=Ifj3qlW^@x4&gFlnl0yg599 zb&z>DS%1te1;HhGBX8Hw1Wx7ZLGSg1=jEGC@M1P)zU{9@p=OAe9{}bBdi3(I`@3mP z>kG{^o(j*pPpZ|~@h`7e#Del-ez$`QOp3ySc3y|VnY~FD7Vv3}li!Ei_wkAm9)@;_ za?%^LIY$mb4oXq@smbvT8Zx8-2{H2;Cg^inq2PmJywy5|A5z#hX=w{AR2T`59KhFZ zK#$*#W5HJS4%J+9`=_%NZk4|SL9dp|wIXbXFJSDVgY7iMsYL^-0sBf1bP z*X^_?m{fKLlf|g=Rrg=B&hhShh?g6~qMr2>cy%mZT65t?@KmyRZmX4Z8p>U`Fvcug z(5QrGbD%usgT>P!Pq+1GafX^)GbtZ-`8XGaGh^p*&X8Cku$L^LWm$+@rl?G&(OBY% z_qyFd*4e(HRCRXAd0vRSxr3)=_%QO2&P_07_g$&)Gk_%-6n;g((I&P*etdDzHQ_(* zaZHY&YMi>SnK%+VNI#Uk#k|ttq4G>Hw5&cgZNQvsUbo3G>tu+sa46i&N=?C}&M`s0 zV%X(!jUVur@e|ZRC>bQk_(?8W^NH?f)v*`%#}dPq)$UIFE+?9&$-UKI{*6`jFPFmS zVM1Y?dX}e1Q#onZ7?ZZM!g3%W%WA5vFf)RdW;u2@PKl|c)1DThW@AObK4n!MDC&M4 zS^cJ}-&ejPvN3o8ax`Q>jsGvj+}^*8sr?6kITEgw>r6mdAV0`}8dg)l#l=pk zK@L={*-1aXBq{PQd2Q{!j-`-8hu>7j&8_OI;zWQB?N%%1IqW<#YmZAjpVxC^xL*v$ z?=^>~rJNIHGeKd@mV<|SGKfK0pCAT35tR(S$-fms&pgCdp5QCbdJwO zU*;Pa1mJHzP70b2T);5aZNUvrVk6{`C0yw3|FWk$=s2|4axt;4Jx(~)uwiMJXWt=ldl0bd|qzL=xv>3 zJHgY%k1|z(P|nm(A&krxEV)+$8=VzVd$>$}0Wocgw8l~+O2lX-g$t=PClTXF+a97nHz@vyQl&t86q>1xG0=eoJFW>Gy{>H3whpH-=&nWdYS?U{<<>mwPH+UMJk z%Q4a1bU4jK%VS*ZSgk3=lGZsJsMzk%U358HDf3{mJT3QdRBDIT_Xd?+=)q=8IgT|6 zYS(`5yS{N*TsxPPuQ+6CPu0!1B;1@pC2q<`Yyj#d-E>zjr-z!!`IIM&DApq4^}9M6XV$mBo=-J#n5Xrq>Wv7HGV2BQPyrd00n*Bk zW?SD<-&h2@@tN8yUM@Fp>hz$&ukNBvmC!~<5m7?+h%Ey~9jZ+kf<_zq`8CZkv(4U5 z8_mx-9(m|4&@X_Xp!Wq{onKuxjN~>kf-ZToJ3c$g`91{XyS0j(MlVi@-;0Ie#P+X% zCS9gy?py9(YE0fW_+Ftfj>SRIW>r&Ds?6-|LYsJ@2tmoTt0-5rZ``u&@A1XNn|zaE zcl@Dl_qs&iuWD9mD@KMf37d6>knwx=`TJV__bk9CJ(2NMnnCo&wo`|o&qeVX+^O4L zU+9+WGR}z1?;Wm+S09>4vP<0dt`VHLnuWES5(^0}{r6t0V*{~@%^n7Vtfiq}=ZTFf z?5o-FVAM5LLd>-q=I_x!X-SnnTgbr2Ogps4%r)_YkIkLG6w_M;I&!W+MANohUhLpBv4sYpPJq=nZhI+5&P^Cq)0ahF)XQ zxDNe-Heh=3!G1^(;k)fn`;aK^B;3nyhd(vIIsG?*aE6rx;T3Q0w4jRcVqj6`GcyLo zBesJx(qe4AKWKglx9br3@Vr!Fw6Mvpqb(7z>Jse&V5=11DC~^%$K+IqZ55e8tg1fulN^-iVyHC%|xo7UTzWMY1 zgjx&U+RuJ$k1VrtnF!T&tl|V>kSR~K?G@k~sv(A`5T|f*?yULmgVD(jFxfN@+w?l` z-wHs3b&v1*vpdm7qEk(bY4~PqZrBNC%Tm}8-3@*g^so+mMS>PW;gk66n|;tzNWxRx zais>!X_29!|7P9Ug=6C|jKm#S#Do^~LNx&ElLAZAv!;yaQ zS8WFOc>$5WY55fO(1do7W~j@Oj>wQmkY$RYALHu>TZ!Xi7vpgw<76&F{$6xVKcR+7 zoVR_$ru+sT^k!8Hm+3A|D?DKkR9SGVBVeaN$ZG^@ss%3AHHei?1O zyy_`Zlk)=nsOk-x&&^@!_s}qsWY=KKBggv8ABu5}vnOfMI0cwV!Hd$DKNaH!Ln#BL=tJ=}6EGFP39Op^gich-9U_K#@>hNsfZxKfQUwfv0Tfv%4shWAs-7TK?pyFn?1^3J=e8!^KJUTB= z2;_!J@;kn1udM?Qa`^ZVG@siNHVCea`nO{C8O33)f$mv{s-0YygO9G;jY-Y&rit+R*QMPsU zqYIl`mC3p<46w;ngSJb|m4sYZ}&4sruj>u0qY3l;`l1XIG=^v)MuML zVFq&8G{Md_B?f3q^-%(YzzKdv%g_UBdiu1 zBZ~}@PqVwS@d_`nLAs1;X2(gD%hswCC)6$)myF}eoa7TlP!ivWhS*j^%bgwtjohw| ziLB?=t$pnC+Bv?Yl2T3KLzDd6>KjqFWb6x$u+qki21Y)k*$bYik5jy34~RSsCu3n{ z#;Om7#9ZZezIIX>Yf)2uG99dFT;Au^n!#1Mf^Aw<=->bw-;bO3g&71Yq6&3oZYsvRLDkL0gcIe&%< zd>u1J{@f7?!vxk94kiWHk=y;Y%n@g)AT-sA!Fg$9UHVf^jz(-2zSb*G*O^RgP!6`t z%V6EiN9ncUYFp;&LFn;`873;(QNI49WKKg_dEXV4kr_;E%Xgcwy)c=vkoY>1(iQyr zzR4rmG5%nq(94{dw{GA*as{>0RC!&okvDF>RE}YnU3viVLQ{GR@hdk0`{VlTLhS}{ zfJv^pfcMt*NF8A}5}NXOow^JEsrb9d$rDYW2Nev8WY;DXH@6nlK89hGrjjX-Dp?4q zZLG3$`)y@#^s~c2hXB6zXUY8=Z5R=26iU=006>`%#k?)l56bR47Y%TYOVj+&&bir4 z(bLM@>{6=164{$)JwbUl?qP(18u@?#lOj@-l%G6@T-*Czu9}~S?ghX{k|F6u(8F{h zBTd}r-kOaREob#gD?1rT2QWm2P64Z`cd}J%2>}MFDDnc=n+{Kw2o$wE%g^^A$6eC} zRyl@x-XX9NVcL5ShdHNy&!J(Dj5sTmrJ_s&+VP==@;Di)l*kf>cBoRYBkV0B=KDR? z5A`$WN%G#JjlFXk{oO`7#EFbf&|B)S2pT;r25mpHZ%pW6kW%=ZcAEx}P#|uXJt*HN z4}e2XsFn>$Rp&MaMcu1XzjT1~Y~$Tfv0T1WopoI8;GgSE`d;eCiyssBcxHUo7jnFE z3ghj<`@pVpu``~2-g~%K?in92u@)arI^}ZIb9~a*l;D9FIxtCMjz(eMz^6%omJ?0P zji*>|azP0N%q=4ZL4i?pkR2={KC%km04K&{c*}~QGhpB4*GW|*!9!RwE;FOT4}!y^Xd6xSRve}k59WT+a#0; zA#Z7w#a=Fogx?d1@vnLHn5Sij%9W+6g3yg11AFTmX7s6eq*wJLAfwn?UDK!CB<0Mc zyu?-QK&l^vgSPvOaV2Fcl25$&ce7uFLo+H)QsofYQaAvVS4VQIds=3x6&Uxlb@Js>26-$^8)a#CgNH0_S$|G7T|#iM^-@8au7~iE~~A1 zA?wVRGXHS1bSz5E-k_PneCOLU`_|I3o0s?(5U{JZweyQ5A#RZurfb-`h>q6Lokurg zUskoH{DlKDUZ(+dX&NhYEO&aN(5dF-Bd^Qd76zt;ApxJ6Ii*@5dI~8I9WwZJRB{?o zHW=1V#m)?F#jmZjCVo!->gws?H*848Qg`|>6KeOD+5lT6jTJEAr_iZy>WA(Z@j%xz zGP4r8{i-*fC)hs%KL%{@;f&yGdDXWchPv(nk?A^Cp*frL-#utum)|8SaR&agD& z5#ZQBEQcTEhf*|@HKt$R;~?^X#{WAYpicZ(ARzGWe+v-!D=8pIiY+n>SCxVkROLm5y(u(k@RUvFGgl6j*`6suKdoIunwFh+LYjnCon9Y8u-NwS92zm&A z&i#6a04ydH>#$9jv9wl2w_GrWF*vtN3Wu4yR=rckDAv+G?rQ=vs>X=xsoc_GRZs2qQ!T0TQpL8bwiZ5_xzZN?r z^QuMUAqz$s4~*Gqb1moN9E2h1GCp!YD;El=ZezF+Nu7ytiFDCWM8KC>y<9tG(-$+u&2Kd=Ce&T)v*i;%|%t$593(E4>s_@ z-5{1}`QQ~FRhF?iSbE1GcVXwC?noxmHNQP1wJE-fW!iTYU>Uu!=>?7%X(kDE&B`Fe zL?fp>snjd1SCIip6>+kP&nqlM*X(T>Z{x-YGPHjo_tdPgBfxqzYp;x>0{sstmgr)H ztqKJ`7bg`|2r&RWhmx_1_N(Poj7*N904$@XrA3qUuvrD~)JH&G_FlpHI>y|iK5fzJ zrLP#=6o55`_^Fy}wn0ZXtp?$`jOctX?sqw7pCzHTS?|vaQsvEW^--5zI8Gk?yjXnxDv?=2lc4a)w7~B1$v14T z51Bm{2Wf1aorvLh+5`xHI4+GA2>XUSR@9Gx){?8fOz(`b%?~!01gWojPk9R0Vy-mh zX45FT+%>vJ4^cenu!h7O0QkVPYJVTiAl%|a7!0Zu#8iDm9zs}+fx%z8aSQ0u5&i~2 z#Y#SdLW!rA3QBqDx1Yr!|6g+^{Vov(X#B6c*N(JJ*mie47d*d^n|RJ~w?r^bN!A6` zE0(DkG%390^%{Ak3TrOY@LFS-k6zsbLRaSg^Y`LvgQUW?7_%-x6f65UaK zBy=ZzM&@48Ewg7H<n@*5sc>xK? zlDAA%mJXpHJiUCWvWK+~>S~NtocJ&sdvF=BwQMV<)M5t-7?rFEcp5w=voC8kK_gGJ zdxW1Ddv)H%{q$jU#d6N0Va~zrDhZ8A$CqdSobD2}u9~|{GxmxH+k*ATHpICOD3Qkk zHY=K7IBEz^@N9m*MqddjQCJcm z=zK!M#KUfxyj_r3hknMyzBguTHPn);4P3M9nmq`4Vb8OchoCL>w$by`Hd`lBxoo=y zEPw!x-b=pWozFW_y3vY+8ZeoG5Ut7K@LI}U*0L1H?2+-w;k^jwNvhmsdW-M%1vTmH zcXy>tP@`lvZ?+}qTtnd5uB3w6#UflIR2*lubwF-@@He44G%%J^TO|?xTIf8~u~LhK zi*YC0`jwSBPm(-pgWf%K537$S+nQrp*W2Hp9e!~(yQg13Q8pF!Std`C3_;qDtspt5 zd01>MgsCK2jz1WQ-!1e^ zm8KJ~jaDuCr6%4jD$5=NxtF>Vp9r0|>e4vWrH*le~l`!~yV)&v?yZ zf?A>hJ<;#^ORK1}8x%jmB7Fnr`{p={rUaDCnY_X4cCNIM=UG_2-rxjMp3U{amg4}> ztMLzV&2)<6Y>*p>3U*0?n{_Lm&4I3g;H37_s(>Kz3Zf0RtrH#4M_V(mySFODxYT2+ z-|b64s%St% zMl(3_eKY|MfYpOLiRtfLRT8&JQqP*bHn~||xWtWE7d=N9dFU!Nmo0pfn`qCt zaIE6)v(_{tMsIT6>eS9NufqwY-Ur<_Yt0o{-z=rZl)lbtDw13FE)s;^u5w%0_m@WXQeIUFODl`4%pUTC1Ff~Z=~a{j65O(OPO(F9EAQ*e6a7B8HNEYp@%1NESc3(b`|)#_Q8Q$NdnWII>)2 z{2w@-a*fTBNE<^h%L0$^qEIbsTo6prZCMa~e}==Geucw-_4@z))7SOE^f})=6b(4Qm8A9VR9_+w8&6H_z(aw)8X&?w9UB>HlE-$^ zEuFju!TVWgSKVvgD->3F(399Qt+5+SnkSwH+h`4o3!UIfHbiw z>GG@@f)Q-iG=Il%Tl1M%w|x>%^%yenyyj^s*ZU7`i}`Q0EsbjG<)*npcliUUBJ&Sp zcGrhC3AoeCs}wZ?%_VdVJr^P)E-kq3N;(d+&koxv#qZ77wl34sA9ic^W>8~eDZ!9R zbyypOYoIuqwd2f#Kwj=Z+^)io4WUZ$+An+Hic?&tM7`5GWk`c` zjcYGz#v%rqRADWR^{H{Lx=ooRW0%NsfEH&PO@sE(+WQK}Xu9|x+w{M#5Y648>CURdU}PkpGN;~_V^eX6!f>DXbp%bLA# z`+tdu$zeuZT77r1EGIIw<{yGqdJ#YJ2MNCVDTr-pM8F7D5P6ay4Me3;w<-SM&US;= zq);z8HeE&uf7j3`JmUB8o`>8A+ou!FXM)gZ+|SY7tA^s*1{AezsQe$z$!TLMQb`5a zJ4`ORJC-|f>dwFPY~`lSW#xhKksH>|#214Be8&7n4kh|AF6XJyKfI~n(J)6ZGCzOl zGJj^@=feFJ?|>9Ib_rVTYzXhh2ke@%INL6SU)?+@{V2ST9Xr&Xjg_isECYpchCjhb_K0WKB=ft+k3h*o zcvPBflWq{!yhTL)uar0JWcMBtrOSR)03YKN)*WNpa}(^>s*Ed@=ajmo{Dz|U=b#FZ z#L9N3b-X$k=cWe5lpFzSUI*8ZssYoLBEnQs`)f^v?>Re`_dBAQbz?ov;h9rOWD3JBXzts;dvI$7D+nNjC$sdu=Fh4TPd2P5{W5UE-q0Nxw11{DMn?Q^G zKp^;>z2QVJ?Ka3PydBr414#t<-YUSRy4DG)Cr2qpTB;68pl}GdE09M?5MVYrQvBre zh<@>Tvz=%-m{_eXQVd>2n;eOf02&$}SL~DO=2@Y`gK}e@qv{7Xc z8Tp?7r5e1?^bT|Jf?GfSTjJ>%qkYd08gMZZhiFgbev$1jFr_*$fGJ$O{ZePEymKYo z87~NfBDAJU$sb?DKp+4yi!@aA4$j;bt*$Za?n9gOjiHqmN2g7vBwAg)Ljv`#+?%&a z&knfEA{9als?3i^I#03+)z!)$QH{yPdV8c7lIjcP-$MFimpzs<(qkHcI=TcW7;a+& zN(6IM-`L^U-;^OTV4T)0c(N*mx+SqlfbsoB1_b*zWI%Q!WVU!%B)e2Y!l4`_gGfX) z08(j3ZT`FgWe#bX{5PZ3De~6inaB}drcOMD8>^gG;)C0VHPueX@9Z{g%pZ5(jA3=v z>dZ;9PeE-+{p1T7ZK39|DGv!`nH`-c&DH0<3@te=3%NT#sg_c*E?mWKe1%S~Y24L# z=Zh4=M-X59hVFDtRxi0RZWpK*<)f}98bSe(Wx=a04?HCGrFs0Ksij|IkpK?J=5Mj~ zSDv0qkd!n;WO%XmP*5Si>@wMpYi?~>j$o_!@lye>S*g~zOzbgf+qY`ENxSBXHN~`p zAY-RTepD{j4s{1ZiG|Uqw{*(YIRwYLm$eBcVXpy*=1$2TP~l2S^Sk{1t)=3Q6unZR zIihLQI=jmy=65}!%K^dh)APG@xl&PV=HvLll;QcZYw*uS^LN?=PXs^=#(j6I5>Zox z`;tvAG(12XnEz;9*DZW?xqI;)j{6}IkO2n@1r#tAbzqrn)mY_VRynvgqKK#%Zz$+! zp+eV2=>)lqb~JP!pJMs_qb|^BKa81UYa<}S*MnJ$I4gF?dgO^Fo5w$upf<6Cl9ak zE2z-v;0EzD8Gfma86dUMemX8b;Ky&1@3(d@ZI6oXJ-*3%3q4Z?)XbWPz|}5Wu%Zs0 zzs5U_IPxxZf&uVC5Cq4nB23*EXbRmyGZpPgx*j&HQC4?Su;e3KeJ}K=PWt{ z1=JxvHw#izSOH@g+734($w^om#1Nx1#RV0O(%6oM0asq2R@~IBMsc_f`edxEOAk<4 zkz}?fr~Y1=g|pBCT=P9jQ8N&6!v_#)3PaGn9T4_LB!AO+)JZ4d%G;m`KYhO%x`7&fLN0cn=dz$`Mcg0#iR#VQ@cEE>9fZfw*NmwHsM^N z)is-T;x@*avi%liG-{x`8d=ck3kk9B_G(sY>YWGHUZDI&ZAEx<0uQU^V%*Lr&Qi>r zXi_wJc>imauwAHk#e+JplDhaWJXS6Ai~lPg>)GiXIw`UwSuSCh<`Jl&y_7TfP2{Kw zRdVh_lWl}XbJLP07?(x9s@%rDjN2ff6a)w#dX?`XG~rC8j5;8j#cn<~m=deDN#xaP|k4SD2wU^M|cKO5q{oaWZ3>tVUDhhG zQg*`97z|o}NC@5@e4qjlKm9f?Am_*X|9(Ry@ycI4oK-ocKZg5suv91i)3%XnNU4P> zHiz9tS8y%L26yrDRb`DF7(j1GI_CImMWHySR{rRWQUNVw!=Q^tG?!ZIc#Fo&MMP9H z94bvo&G=kZ& zD#tOOc833`S~y;Vzg?(<`Q~MK&r#6k$w=X7V<3bW%8nt2n!`}1T!1bFe#Qt1&NphX|w1Zhzr(d=g z0)L;56p}jQUJ+Wj^%Q%ykY;X^O?-y=y!&duu5AmyZ(b$y20oVpyvs4yvxbBrS=l6v zdC$R{JQ@t+4@RDb8zq;tKlpeWjID(`PN7h8BB+$%1+#Q$ES9%SYxlz4mv8osCZ5#e z{BlF8rSiBenb}WM`wbPDLq7gn!`Qy54(mT-C>Ax@F*b=gr5z4t#9uhmt%H+Uysyb1 zO24*~`TpAgP93DhB$6eMdIdK7C+E(&lk>?_%)emVp_g#1@`md&WT>4mAUDPcTXvZR zCZ40IGQ`VGQFBcjn;+^qTBfzR9P%2c=0T+Jy#Nq=`LKga_b!EPX6y!nfO}|*)@or4 zuWe;}kp`hz&*@^MRfZ5!-`1IqDdpm#^^ivvrMmSXttjH{*mV3r0VWZJ%_IDRkpFI5 zok5vMN*6Ra?Ot^n<`{2T0(iMTpF&4@!D+8Ku81?Gejad8tKtCHtq=LXk(BtKTKx;A zqyk=D7xa+j*ErrclVNqD(}1GZA*t=|)v!fIA2049Sd->)Db+>CLMvJonW8`i6LDty z)pqKV&_QLa_3|^SI@B+}WGBDu$TcWqWx5WRDBO#q0{9peGG7>bJ=d9hHq;x=!rS#` zHLaSa_CJ7BV41aATt_>$VoeAJ8Nj=@9nyc-`F z$kU9NG_BT*2I>h@q*Mk26f2TXdtpM4yz{G5lq|9emk?-=3FE{pNJOH#$UO{pN#`}j zOB*OMLxcU(6vyk+AdCW8toTSlWfOw5Nt%2TBt&*J?8a^W@x{PJ1u!juAM6mPbr7$r z)|ytXxZASEa1YlL`$daHinSF7o<2NVa$=G_of?_{>X^X{a)R@UZ#3i0~dmKG@Up#YkrqUfOm4J0TXii!;<+3ccr1ey*BRvL&Z4XHvXOoYAnBJMlPK?TRiW!4V zXkod0Vh{l07-(`?)D3w@y1+uU5C6G5^w1!Iq?2tL7m6ewi#V>213Fp9#=zv^4m9BE zd;bm+Ko45~OXw1Hx_gDnyy;QqGb$he*%Q=Ibf%wV)VS}(TMgxm+wUz}N1SfBZ-;Y( zJwW^L4`t|YJw1`<9tSvr|AME7dpJigelGxDX{!IzVHul%7(b8G{BWmITyjd{a2w4` zkiXFCmaz7dsjRg*yP)il;yIQT|&oHP`fgFoXC=UkoMJN9# z-2aQNA~t*}(i){aE2=1{(Kqg5(4h7C(>VIG5HRY+oo`{m_jNGizM+oED6E!OOG zdJ)8{-M1*+`LPH zZGPOJc3f@|s!qNi3I}AE$cPC^7UA|P%YFK!<@M%F8YmDXmAWe>#Kg=+5{GL<(Y-j8 znfj1OAD8ZLJ!a(ZgVkhrI_`7O=UAmFndIUvNxpKz2MPeIRiC!|4=p`_HnYV9ko=K0 z?E|{SD=8_qISVwsop91f^;ml+dKpma-dqVOnRc8d^=vUc z3I*`nV!jl`!NKrAK%*luVNUAR8FHgre*1>!VZA4R$N#!)=&ZO66I3WH8_QFw%8nT3 zRa5Q?ECVeYLVW+GuNOPyU-I=96dcgQ=oM&kxZ007D63O?Kus{u=L$4c-y*j~5rX?8 z1tHG11*|b(E|@aJGKLCUa~((xx=P2tQ&K9Sd@faVa(NM*w)L__I;+Ua7fpqH7X!z$iIXtMkzWfi+y66wAU)X1@oQP(P?Jan--N1xA4WQ2tZL2#W@0&iN*U zLX6#a<9%{%PocAWlWuuW1OH zR?NfVHLOsD-3hjkWHXv59MZstX`=N|B?tDhIg>oxCKewg@B&i={r})5k?`=c1bv8) zpJ6&P6{E9zd|!i7K${;XF5>)<8eZIiF6o>ap^14!X1nj(k$iNr5@8y8Yb(qV@wT5c*O> z0eA}w;~*DwYy+bGJPxW;gNi7bueTj|Bwk@kMvgIsR`m6q3&8Yp9-{5vihhcmZ91H0 z4JvHpZ=F?3WxabBCjNVyf7>-`f}Z4WUVxr9vW5Bz8>Oehp!8#FMN3533z=g+Iw25E z2qW-E3E+cUZk)*$g;D*?YVePC|C!~>q+;>B7a%#R9_wejKbJM6NUp`XSlwGbPMYO%0X1o)^{O>A)56c>(5 zqf=fuDiun+x6;Fq{U=wjtv>N^@ekS1SFEQzxya+rPHKSU8ULz~8P+C!yKIyH!Hoo->yx!PifuhS-h{X4~9|Car<&rt&*Z;{*Aw}ykYa728 z-m;MJAg85JBQ8GCZ#PkTrYj?}1H7)i@k4mNc}MBC`eojIT@Q|f05zDv z0PAr6J&f|su?m?JbU5;F(?_T59o^()bGDiKZOTN6$^Ew@^+IhXrsKV)>V@-Gj%}v2 zYVF>qxA3{<)lz{@rsrf{Zv|ewCP5h@0VvFBZHn*P`=hAFG)+v6|9cP<-F;_KqE%cv zbdFy3xLthi@aysr3T(?dNdWRT2bMP=J8y2W%aU_`{rWzoY4fAXVEEJAHAVIZ>Z2q7 zfS9!9x+SRKPtyrY_FAGymX-}ENQ+5{K>>F{XHXFF#*VNZJGDSu{3=H4rzHbh@Zb=R z5@X?uk^LM%dFgbe464aAqZzY;Wl$_0y~_9;r^7IzfZzS(I`ZUvqvtX*+*%0QId)Xn z@Z^JJiIu;bg7)a8FzB}DRdCN7aAQ`Ng;f|6(p;jBT!gm~@$Rfti1k~#w$5X3_Y|NA zrT?3^P={|wWLr+rpA$=&K@R^VtXUZ~rzj{?DFpzM3#LcYZ@0O>vkOPhh&*_|F1Sj) zd~7R)kj&IC>q@voBYAi^_d3_2e5t;NW_ihq78L?8b4-sLM*qC9j_~qvDSjvcD3xbV zt!jYUlaukiuRAqVQ8EbCZNf>Yc_dxHw|}A#NV(u{b1xnt)5DbgD}hC5ri1cFk}tg}&Twzb`8TcqwO ztCL>U^`6Y`|Z_!NO3FxL6Rij$3g=1 z%#pzK{lKIp}}Wc>7>S5JWd#EiMdAA^vLj9XuZ_ z;2*9EP^D)gH~>SE)MpxfkkOdmpC3$Xm3#+umwVU1PE=8r;3;=#E9`pCBmMBi{VY`q z^_Ciw_=n3P9zxcNrtkhcTo05V#P?_~W9QFapX4_9%fI9P5hp?X4VGf3Pvw<}HD zo7dY9k5v5T{cTUO(EM4Vb=EbN>@NW7??4kiY`yoNIG2=)3PDDhcO5P8DnIV*wp^8t z7$|X&0BGXAPW`&G>q^DOUs<_#41QHx z&gBnzUe3i@o8R^6HG?CrE32v`mz@<-18wg{;B22LBkLP;k$#`e;J1c2;mH0@1SN4D z_Z@9Mvs)tbv+yf21>_EQGrK%XD?Hl{1KYqARt_1GS7I*^T-_4luqGc?z;DBi$3B=C z_;G)LmCo5Pv9PX}+IMbps;!5|a!fb=?iExxJ6)+|Pq#c;l@V`T@)R^|?d%9@)>Ev} zvQ$FKx&7kHy;F;&!Eik=g(}_CO@b(4Ok+*2gS z_7a8vGnraAL@*Mlzki`f>Uf7UVhHu#iuSNB)^(=()(k`t*=Vo+B8a}h`V$ z$$K)ql@)25-f0r}h5eDS)uVv;j=TL*bijAg_X z_wwk=EEby)7Je;@Q?Kk)TC)|Yf7gtz_QU$ys%;KzE!>QVXp3-FIfMK;r4E$PJa=rM z_HGOPYdwFbsv+$R&4aGguv(0w7J&(9#UMrpKB%uGjatK3b(sRx8v|1$XbbSED1rBC z)%6A^6%U+4@BF_r9;>AjSV!;7rGU<(*m-(dTH<2W|vdCJm9nG;e2Xa8(UKA(Btyg zt`G=o{N=Na2{>yV^_}MBLGRX?lZy#=h;(W6&K&Df?UuVCe5`>PC8itRhl?_Fs3#kX z1qIM?l97-8!&J##3CGOVZg=eW%QWWcRyQ4rd#nk$bfqEbPZ_rjdCm_!eb3#uR$F<{ zD9WH~g-jsbYKIzB)$h#|@88MUQjo4ZZ6zyas;*{HLeaW$9KP&f$tzeKXyDBHqZ3- zE_vSg2&NTJ51pfm^<8&`${8`kuHySqqSpY10mbeXc#Q^eb-sa+!EPemH4n3l^G4Aq z*&;{Zc-`u5bgqmTmfTE|c*vcS31v3U2o3RRY>j&`AGo>&%7JRw4ihTsVOAs@fPsDq zHm3Q^20M~9GXt78mXCw_v`Vd$yG2|;w4P<3QJ{Au@GXQ*Qj7)9c&!RqUjs`Vl2n{2 z82YYDNMSLv=*@~J2r+*wz2Xa_^rmAEEN=nH} zeshF}9e9GrLo;WlE9guo;atk6Kbs!|0|3;oo=|biHHu~-@)7Y6P=m z2OWSLU7(dybH)cb&r%LZR2vEpd>qDr0T8HXl~E?`WD#t0JmSA%9+b!Ed_2 z2pV{H`ua#U?anp03A$5mM~=acO8|zAo#$~`^mf>@wP7tl(3mn_fxSxF*nO#_V0=F8eB7HQ0^v)2{mkuNzAo_n z>o2lpePIr*NV;G?+{f2f*=$!xO}%BM{$JBh9kf|g(=yOG-qz`lD)i+iF=!m0&BtrO zLN1EBG06}o7pf`T66q#WUnQFcAP0Zc>Yil5HC-@95z&ed03@Y|HWo`pskfE*x(#oV ztI6ls&s+q4Q^A-pLZ$g)(k-tpw6{_H87cCE3~^bfrV=^$m+X17^<+hv z@1$XhQm%1!n1Ip2mo$&IHfPB(%J8kRytfG^X> z%WdyQtfv@Y6`uCX?NZIcn|ipZZ>Nh0O&i`fRHs>U>Df8m%xhQX(^gNiyg0s5)cJrE zQ?#%GN(adGZkokB3JEN$dE2ylqAq;HbxW#gYK2Sdk^i~f z6zNKS5qIo|J?@%8#a5x@!=tnkYT%n-LB)geHzpJ<)%@LB^cW}J#Y{Mnv<^I0F?_^v zLD>uq!KB^WEgvm8guIS&m{tMZbl@yf47X<_W7hBd)d`UW60^ZThsXE?2ZX9UYUIBO zOW{7v(wWE4!X49M06pc0QyALkkHD(LF(zT9~1{UTXHp}OO-$WS|@ySRvyx>t(XM%m4$ zoj=%_$061*+mI-mAy0j@({Xv9D)m$lu4QFH4_&PYyDAXZ4bfguh)e>&7%)I1j|oW< zrAEqCFjyP4IlcJ`dnxr1l(JIP+k?gv^NP+OVG!q&1Mdx$qHd3hl9(9Cewk-h+EH-I z-+(-4vLW+@LVjuNTbl=$T1||FkqbFT;&;r z-syg+c}cTxj|T$+Fc*#LZbwulAJA?GpcQ!%T&lXputMRGkr3*WA5XI7M11YS9>#%I z#?DM)qG!I+#v&=&1Jq~O9p7ZRGd`9d8-zj<5IP$hbaTQFadl{d%7?qv0JL-KM>nd< z+L=FSF^tckKFaS%Pcv_`W~k3~6UZb1^?uKtyJP7lQ}&bJKn@z@Gxh=g012`_`lO@6 zXKFkNiH-AHC(aczAtnqgOkD&FUj+(wtOabVm_d`3I2#=1eS}Y{8O*H5EYzuY=;@U| z(bUBa`XA5~-~)8uM&FJQoZ&XQ@P!}{g9f<&=^IAIw@SkZGr4%?$yd z=NIE1Xf94+yX^p;r1cpknazAh_EzDksAN$K8QdI*juU>C*b9TOU zAKuS*hU%LB`fg&Qyase`b<@I|ildXiRZ~l^;&4`Y3$uI6KL!Vcl;_H^Ks4*T}E6jeQNx7;0EE*8F#_y!(^Ba1C% z;JJ?(5J9_pEsVQ5*%(NYKfcqiJ}SK{`1~xTvpJJs-EuP-qoJ9{E3VyqlQ1##T)CEV9o=d3E{WdPx~zwUg{vcK9djOATT146&DN`i?rWaM zt-UF09#`{Y-eS+A&5w|S8zspl^<~-~1KM&{RxV@JwQD*&>N}dt$?vl+stlo~k>E*7^;Vvklx% zp2aa)@{KH{^KubDC1WTH{BbhwkAWf~~ektaxA#z8&g zdM~b%9}NSD2i?17+Bok{&-e7&lA@y|o-|wfVu(?43MsRb9adlxWC-TAUyV9EydEEY z**y)i6L%ce_A}6Q(9gdPIS+dQ1(;La7w(>C#za~x5$;}-frykIxa*&`iYOVEl`p25 zJ2*iYc2(2dA_hiOA5Mwcm5L4KuK8kaD&&a2@$pgS&Wh0yBM!Lzh3UG><;c(h0Gp0g z6}L=>C}Bb$K@UFFn?#Swr9yH=gW(<|wKUdN;{1N8!Ut?*A+wTTIL9{N2B1EJ@8tPa zlB2};wWN~z_XIQ620J;UQt!eH=PD$dJCxP5Gieyr;T^hjkFSVF4|J(4a#6nliw$O1 z*0NX*=|=&PVIuebXZIc9G$gPcu@=>?Jc(IPUxgMHS2NYmllMcoe*=+Q8A|<(EVJXI z?eX;w)=-OWdM!O2n&F55g1}Ev6JUB=XX?P)9=^tX3tUZ81!r=U3#)`cZ~b$SBT5k3G)bGm|evOQOf^p@NAoKCBf}ycZ)ZG?2Ts z{ejB|>q3#iEO&6askzn=T>y+V8gB?$YGtRuBZ^+?XefDiP&pCDU2&BI0uZuWB+uP-*_+nkv>>M&(86F;R=K4b%Um5Wt&Ma=RN{F zM0rNMfUQy9?G}RML`y4PhVJ_0Au+^P3Mwq0hy6ZW)G2*TJngZWWOA;pET3oYaO~LrhlMB6f?A&a*OdSlXIEJ7L{9j zSd=hjaO|CB>f4wIX@o=e~Kj?yKtBf9$I6+JEfYz4mXd zZ+&ZL)bU#Z%AY_-0wWKjdOz3mH}uz!eSTW-bZp5>9{=t&9mi?!xY%+`n=J^bB;ra7 z&1zx6yjOaqw=wgDT5%MtU{DV)8p6r5fh!zqi$HI^y)1fMc`bcu`e0mRX~`DDd`D1N_tCYE`veRIAr`ij`bHb7uBQSo##*}lQBs9fjZmQh(+OOI(sv`NR@h#4`7U_@TYsALB}VD);a- z@?HmI9W`B%aH5|_H^aV{^^uy#%e)&`K3u$ePF7SV+=BUnfF~pYFVTM z*ZgzfcK}Rp;f8iFrSZ!-424zs13U2J+?5@y0CAO=My>ksSfjAT96Loxw^wjlE&Co| zYx|Z>nJI)izDQaQLt1q1*hiqIUYY;U@h$@+{kKj8F&Wu`M~r}IX5|TXQK*kmqAmm< zz!w1t0845cNj~%*xEJJ?yww-nL!2;>I0pPK@Hn-m2@x^(ApNx8#nN5~E?ybgF4$x2 zmcICWeCGV!QgYbBi^<}vEGu-I)F-2=uFH)hJ|U>_>oQLL>=@_S!*eF@3gM9^Xc2N^ zY(dw@H`q4TG;U3)GT-~??Ubo3Kw1Z}Q)OL2D9Urw=x&tm>ZX#`rfe>1BLwS_xZfWr zvo-A8NTFQMu3rgcD8@Sw4>;#cWU(KBq{gUewlHNAZ_en$5?Tw#AbuTt4SlV0XNFj zE!#RhoAf6NZCxvSN}R~}cvkcchE_L~oUbD%RU*cG*wTiETT*(z&yOrSc(#}lW_7x# zu2>(?N*#3$nH|BGzO!PxaO` z%r}=M!~}fvh6s_Y*hjh#@R7YWL!u;xyxSUs$MBp_asi8UGz_;smDUC(-~~D_cd+dS z*=`UZ-GN{kYq=}wU!cE0PQ17&pIC!5F-q8BcnBF^tVdG|@7dg!e?=FE8^h!+QdX?O zMF#lA9E=`&V{lp9RZQWnZms}-Y|wkHSxc3!Sl`}2UUqLMdo6$Wk1XgX^Oik4pY{}T z0s?Rw425hc6zu)FNJMST*$v;k3|ta*2!$Ls7h6E<8t4Es&TUooDucYyjomALj9nPg zf>W*Wbslvj9Fa|w6j4$H(xP0u=+{(>&+@NHD&(AC)%Yxo7Tg)n2hVv0;66W)UxnJdqqKhmYZ zhx_=6osp*m>s4BhIQ6f$@+V*Tn=PDPbJ>Avi}QoI-d-#dHiLV8;=)^~8359RcNj~t zzId%Q2p-1;xlPZCHjkGeG}yKlxgVhVHnwy9voY`Y-SwByxT){lOsWZR|I#udH0{nX zmL9pTGkh9h4sgzOX4lMm5y!l;**Q`@3<{u?Ch%dWc&=@=YhpTIANBIS{uriq+4P!% zs98iU;B(HIudf!hZ-fc^qKoSz&-(dU(XVMj?Bpy?OcBxQlVUZsC^igSq}-A6 zkZ$M`bkAj#V71aIw&VD{i6s4}sTcqlXmp$|T&8JWZbaW!FTP3i8kaDT@yBZR4^UX` zbyLy?YntRA@ZM&j?+Q+sVW%&uPrOrikXPlRrstb`1=T@y)a=JzSfA*}=Pz1RRSEsO zx-AbpG>%}L9NNR95hh~P6;yN1^& z++YcqO!fO#;@a%IZOmJ$A@OOIS<~>hu0Xe)0EvJ!#0k-Y>|c-|*R8cXgj|S9(!ycO zIwO`Fs)$C94x;EwrInY-x3*lkj@rWF2%^HYxdY(-0hZwNf$`CKcz0t50?*a6Xm29) zBwla@n-B0ZOi)@XnjqoT1qv**9vIO6kDn?FokDUV-TW;`XbhY*g@~f zF0*T!tFTbGst#E#dkH4`a=)s@yXm!(8{e?j!kDLwlHm4Ifu}mGy!Kpl2>AV$SM}%5 zRdsgMk)hcmKu6?RaT)yXtUH%aP`mRfmWjXrc0Vm@c$ea=;D4I|j#EsDGI)>M+2r_T zHB1u$h?3iUb}6j-Z!7LvFG3vBuhw_0skxq4TzIj^noBc;cqOb0=k?|8|36!-$IvI+ zTCO$EArEDagU2Tkl^z1q6mu`6nRJt9&ZLBRZbSzNf$*^{PhX4BUFsmL);oTcG?~AZ z8vPxj=eQ~{5fl`3F^D5`k4uI_zq-9w)EdE(?$0hHK}yvOy^{eG#jWei9av?L85v#SP-H z*J(#Pt%-HTe0)coy)fq1?3DZaa&J37kw#wq9RE8;ZrdAVk2abwHOhx%a)1X zVe#w{zny~p!ZVtr^IlJ0RUB%u#iz;eeLUgMC7;-G+3> zwi~&GO;sLT<4I`GSliIn-aTy7r5l3^*wo`!udkcE6{eCU8JG0f4}nXPGx2n|Cy^?09>;tln0o4tR__dFv{waG%%L#(w2G9p_0b8V0tD=HtKi9YJ); z_;1Dx9({cZW?Qyd{DzLDb##;<)34sugr`UgWEVH{|4ZM~hXXtAdT&$bdZ-gD2o#1A zA5gWcYo0VeablxIT_QFdaOv~)cJFfa*u?O7$*?-8$OAd?MvY3VoIPlpl0FJGBC!Be zj!n8LwiIDwdInieOz29>K0_hCspFI{|a=Tmp;`_1*Y2 zqx;LEd8#=M~ur;h63c|H*S1S5?4Ej`Lf~_nec>TzrTAr3a2d_TUYmEWW-JZGGQuy z!3hbC8(>9+r50$!i_if%Z&TJly-)=+-2!SJGneWKRFFmwXK2s}!~Y*SWL0n^%>P$l zmRYD&S+U@>T$Xk2!Yn^yJkayxT>K#rNP2%v&ZpxI>_|s^7;IwsXIa$3V8hauT@@Vd zZI^qXYrL@Q=RR2rqrcdve}S=(mBMt+|kl+*g&%;;@8?9X?yu6k0g z!jwFqEAUM6fB-b1s{{xP$@oa{aDAB3<0jI3c26tbudo`a@vi)Al5h3&xpG#n?^D(0 z0Y0kLw_bvM_b&QN&J5b@j`qW&$N-(!6UYWm{@BgdRXd#22KGinjl zyC(|L;>H35`Wa%UDpI~`cge6+qLjPvZmO-G?{S4C?Yln~YLY8OOs|I9;sa)WGT6&X zO}L$y#ufdi9jmH1V0_vra)Ug#O%BpbGzznQYvBKc< z>ZkPsEsoGNJ8#5+VQQq9o*f6>X`mY^$BH?DLvN(gY*Vm5Iik0}jGy>->_y7|NAVT^ z7x7hX8&dka`N}k^b-0)Q{ml}&8UDxWGl5^Pi-<#aMdy=K{XB??5@lS%zSddY?aE6= zR>36O(I?ww5c#3&!)C1%GkT8*7WvzQg8~(vG$v}a7{ez?=wKb`cB@_g?t4_#aOvl< zB8(5A22?$_d6|1`fL>-&FbyAfHM8xF@rOl?f_kfr89Pr(=4WYCi4(5#CT1U&PV+^f zmYiuWHw}~Xc&JgAM(9PPsBx)tq52neCbzF{gGq8b{dF4Ht;X%jIQ2D%zlPaW5|%_(&>!lC6=T+S;_WsO`$m*+B@&+Jy1={5cc%$T`o#_;~4kRIh)a0x+xH<^bb?^Z^YG{ zsSeT!|5sU(?@WS|6nOf|3A{mSse1`OQ)dZ4BHp6(cN=e;;E6_q0WLdU`panrpvr(# z=yPY~ulWs^v-a973ar^`?`imS8dz(LcEaL~X9IQ3$XgxDK+2xHYn(Z8)XUWW<>l6G z-=IZ+b)^&-fQQ;N^Gvv-?<0M92w+`QQnO_B~-CRdI@X@h)5kB|0U4+Qim+B4GBlli`W$4Y^ zmtUD(f7^L+kn3GSS5jcOOqEjZR8D&p1+{~nlBc;;vev%cp`yCn7d+^p9B6QT|LMvM zPo-DOan!z2oj3G2WmAM%&Cq_H-(GKGve;e=2igcmMm0|QnrVH$P}{88_oyqVa(Nq9 z-6y{&Mh(4R36W*pEO5ZtYgDlHOf*eG12dnQ$eX29($VGZ^9Fd!b&)@GYfhf0j3bE@L}*epQIWlt>?Hd%1G$>Q=1A z1$ak>%=ck$PG77Ob^S=kj#x1vI+$M zU5sT=)=~IT%v4o$R>}IVyRRPxbC`lxYuIoEDVN zS*CO@Q>bta4KLFCkBwPxAU6fnzzbPcpEdQgulVG#+K!Lq&7reiav*3T|GNSu)07EA|Ib-qgvYcq z-)Wu0dfqzV&+vZ=P}Rksq@j^R7X~YrJ~Cmj&(5QDFas^)H!~o6e^y)o?_Izdt}BZ* z@#dI$#Q8;A9S2@8L8E|MEi*T29^^`E3BfQXC&KhnD@8FOeJ zt1K%#Do4Zg_Bee@e>wd`e)&bN)JfqBI!rH(eB)cob|*9al`%*LUItU(g1 z+wGuQaem)6-pnoWM?N56vfV?R3X3L)`-f-h*(*Q{@-tC0n&%*X#ULuBxQz%oZJe}k z8#zI}w|v zyKnYdB~$lPU;zbCcg%u|7w3Duj(&OK#1m!dcM|dK#ICye_W~2_Dr4-mB!adUIHvx< z?AG*LWM#q^7(!brwh$&%$4G(P|6VjwWfY5j59j=cjry#gbD+tTKxvTR+iY9Ie`e~& zkll54g!V8^N9{yev)WPb7R!H%)mC_G^oG2ddiaF#$ArP8RtLi4jHFJn`}9In^8yi% zR(--QYBn05g`txXV^X1Q=6k#pWI!eoh9oW0>MTO@L8ha1G;3Ea)}oJBKUEsjiumA{ zl5tEZ3)EAoR#J%y`VgOK845fBWevLO~!?CQ!G*oRfLg!y1;m337bu$))LE3T<6S3)D(cd$FX{-4JNkIIS}8X^x@Q^&|O+V^^MHTpYBOI*Yb@2REbZKl#Zc zYXxx6zIoNJL~92oPs8Qca%#l69Gv#jewEz=^ds@Ozo{b6VZ7#ic_(J^yl zHdNiivR-eLmMe99nX?@nS9NuPMLv9eSTh@u2FpHZ<7F{I#bs6qs`};lYa#bvEr-%M z&RZ*xFX8!DTTHrUzy3WSm|iH88l!NFo$&;|=gLVh==XJQbVPv0L^(d`MAXjcWlw(N z02&q2^XOQuXlEB0?-{F;505eoE_@|RaoMh{D*EJ5S zB>1Y#PIp)X6_br21pp^POSvIsx57CG_$vP z&-@m=ns4eO3pe&(17`n0;-;rt75opZTBKvu3oq-~p#-Ldv>6%l7zFTUOzJ?WFg2I*KU|9z_a$Ad~kmJLuBAH;bgu;-}`^IghiK%(zpqgA%(q? z8z*~wA}@(*tnk%RUt$1AA?9G+U82Y36J0)*%F?Ey(Ye17%qRXrQ*H({z3cKrO8RO4IJR*ba)dTH-raEuo~h_E}NRnp&(`?u|yarEu*l2JUtu&JvT zCLj@EH@f5z%RHc}tL{6Y?Lb1A$0n>zOq@-e2@*x(()^qdMfc>VO6K8dpZjdN2>p$q zIyT0ktR+8o;o_!(7Hs$UjBN8p9Sw!JPaYnpZQ2JHf^y%klODC(HXm%;qv^L9&^l8* z*do4qhrpiAH>b~z2cY99?v~bYNMwk6s=Ji^+)6;fk&BgX$j7uR3%|i~R!vMx#A!8b zO;U-X)tVWbr^$6p*T2s80=OIh44PVfZyk^|aDtyqT-x9=hmL}Rq~p`1AKiS0 zvBuhZ7N;)A$=u_$zq*v(9h9TFgE!HH*OV-iJ%Eww-ll8IuUEcR@{IqaiU&o}Vs^QRA*3v~+=A5{fA6$P0Od=h>E6_d z^9ElAzKs6h)6_KRr084j)fjiD@&3tyt8v_c$%f|xE&-Gu!RWJfV=M6ah7X`nCW7)) z4ALj{BM>wCmx51c$Ci7|)NUX!5Z@|hc6KBoUFq08GC`S6%X!Ponqw}wP^KOKVi<~css*zHRl4PX= zH7EvG;UKb&bGJ>*E|EIsHKsbH${W%L^D69yEM8@n?*`@Q*Pa^Yoi+Rc3iMy=tm&S2 zIg^`^?>o=Jqh_*%Oz(|kxtgEfQL-frfe=U3vk8*56_mA1|LkyUXMrTu<$WThmsUA! zA617H7)O*>)ssMv3#)q%Bh-p%jcC{Qdo30lV${b>a;ElYVfoO!pRSeoRMi;gU9EM7 z>ET|FAbW%A^t0h9$)eJawt=DS^`V)7t-TVKt&=l!F-C0OJt-JU~6*8%T#3P2` zik!qNOP`Hdg&$DgM7U@3+*%5){1(l`y3NXm?Jp`;FuPy2cu}mikK$-qIgEgTll}7i zfc_9`cN;Epke{DTA7fyU!<;i@GCa1c$QmtfBk0Ozy2 z>aV}vNl|3-r;VVx$btn#*wV_iK`AFum3eDcPVHfIB-l<FBX;% zd#}2LlcWSz7;pZL=K7?7;)yz5%#^i>{M4^!Mpr`Bn%*@? zS>eKKj4A$-M)7{oZi6aGgo?;y$kYO=#!?Ft-OI^H6EPY%V}0}j1s=^#7ynsQ1d zMlVn!NVfV`K%dJXAFY7wYb4S$g=DP~c5%~CDuK`n8#r1p!TCyDW*0qGG6>EpfFRmi zcp3_AvOze`i4U?T|6U>FDTPMj2$$#7ieaZ2rWe#M^?lx{rL)&!H(kyA~2qrqvxxhI(x^!B!Y zv)hx-wqKMT{2YqvAC{|uy^&JeX56dzh4gCf@4D%kQ)&XOYo~7GT4G~9YY*hr=f1`( z+Cx!;{s%ibD#$cn?=fJw>~61=4~D*p8Ilywh%s!fIQWGI$%qi^utRA7nSU9BYnHZB zD+7}Sdu}^KJ;v%je&9H`|f^^1O)7FIguv8 zXl3>sQ?3Y@k@b`vE;7Mv?8eve8J)a9mTGen6CW?qE%22z(5oB!d>769wMWSmBI{S(FlV$mCFO%x&3xg}XNT z$AzW)NHW$jEXH@%{xFR;aIaly`uISsc7x5KRjrX9+NSnjqo39bBI)I(?JTo&GSIkA z?INpw<~C&8r5V+l?59n>mpPxdwO-&&=Op%=a{snjLZ5bmyZy<`Q|u|?TG)?@4+}@0 zmMx!1d*RZxgr5!S=Qh0aE5mZdv|wQ!vuWSHz4#tC?QObv)rzfI+a5jc0VRHBC8wC~ zbg``5vc4lL3?Xm^q7(;^C)~)VEXv6MgJ09s+|{RZS9y$E=*$*G*zo>swfB;kZpcF9 z!#yaC>Xn3@ZO^G~vxrX-MlYWzR|y~@=MEcXD^?sVf`;zvg?rFx&&B0^1%MSJ#^L>Y zLd6v*KzDG7WnaU@$~u8-tMo zKCgI@Qs6PehA>73YODx97k*Qn^KYj$7DlQWFD}U2O zvbR;Tu}C4n?>f1iOy0L5hAJ{xJ6!DzDLv(m&X%*LtU(_uSpRFp(EtuUX849#MJQ8> z%x_lpx3$=k@^=Bs#NrX>!dQGC4NU4f zQNu;2SoBp<{z64zdt-VvG66e;0x)3JqxSTXa~sQ zmm*-kF?ttSX_bvJW_x9Q=~9FXTynYZ!On>Qm=t7nM6VFT(_ugqL%2>joOn7aJxmHI z!}wYV0lZNDoo1&SaW#SRG1BAfh%k77;X zxM_CX#o&Y8X5)EOAb8n}HZbK_x8jl2n5WHdYDGSN=9-0Tps%ts75&Tj`z~j~aQivq zLOCbPu8hrS)|pfQ7_kC?;p)Amr%T6}1PUy94*al}OTBW)uba0&b@Q-(GG3}g=eyh_ zQvNd;dvm-sPhZrR-d1EKTD%VtcE&$Y{KFn=0+#i_sWG1Ay73k2d_+olbDtL z`92BWEuQ7URiMbaVNEB+9XWs-0LZl2{k9G_^NXiL$2P`F`R?~0->;>;253AMN0`wT50`Q?m6ARg8vaX$?P`qaB>3uh1YY=<6WTQV-SsJ>R z=57dddA5#e07JNE#)Bi=$v9U|%cmXYpkhM}#I&{1srg~8Ho#Ed&gp94DC0VMdxn%R zNZ0Ob+1nV+6bYC6RmJvV`ti#s8}`GUR+el;__Lq^kmA?kyswhA3xf$5c7zljSi5Jr z&R};|Yu2zh50e6ymDP`$%dV_;C0v&uRE9)=?~bwc5vgTI!s=pP5)koawR`N3Ngr8pXRlGUlirKr>nsC_tzz>xgsoeSXrrmHI(_=myWY z?qah$pa3M;I!?-irttjwHO#r8Kz>KyAiQl~J6@VTnd%!8QoQ)nDI~H4r3kNWnQQ-G zMJcCbS=-pjXz<_j#Qqiybusxn$>K{#A}5ykaf7g6uKo2ll5=Kr$iY7gZTC9%`V}^NP z!WCAfan9WjYFQ$f+aPVc|5|lS67MIT9v1<8#^<93na}yT88NQ6&*%4@7Y zyW#PFLztxhm5hDFnuW*}jEhyg>?KdwVGb9l9xO$|Ud(jSWLj!oK0#Z?G?@`C>7*dR zICRg!?PuY6qJK4|8?y3gdn3`%O{{xO1!GpsXbmn;7Ah~+TAfpI@6XrV-=6R4zljEn zHd1sR)St(pxBJSD(&KxUuC-9zTy35>NB}_0e6ix)iDrk!kQQW{wy#R4_2@r8WlsAx z5+`)Qa;hMBwHO)M6y4gpP!q>l@2WFZGGdYUphQ1jr4}n(V0G?Npr+JLfy!$;u;<1$ zv2Po=UXrdc%{wXbthF8<`i}|8dm5%&q2uQGyX-_p?4#w~zsS5OAT!uzbrD!vT-+A$ zQ?6md;in_)OvmZ>TZ!cd6Z)^DOz|8>Ge|FM&==SaW`4a5%Q*10@|v8)z`S==ps7RA zz^g;pUd2ut7<{mRw&Gr0TwqaAS6DlH4rr=_#=;!@uuhDL5EaBLL83?=;GA zgj~0>_Ucg3A38fK( zn*KXKRYE8nbJ*x0qtf<$hJIAewG3xa*{xbR3ols2{z*)X?@=>a&>{Wi2CkOMb-x6U?$r9LcY(H8t()@f>wK8LpO-% z+N90*AqWz$mzaEYtA8n(iT9AZe<&LVD*CT)F4j41q4T%jVVq9WRK2sfIa^unKlCVe zE_fv*AKZJ0iMJHSr=xL1C#wM;kfe4TL#&qP4VbUlti4aXAF8%^!nNeO8-A4P?Zp0P zCC#M;+eb}!CtT+T54Qny@b1|pMCd4iy2Bk8PKAn5-LZ#aL$x{*AM34ol!&_%b{hKm z4D;4gXgN_Lfj?R=rA{TKOjt)tffA*p&Xp)sUVPY@vVmu6I68(hcm#xM|Ec}U@?i)^z zjZ$O?k`%>|iTc2maiSD>$;)j3)Nl1U0+hwhs!`*BEiUN+PDWsJMQnS(+pqwQoVIz; zA|VvSr)i@JH)Zh=l^s;Qy}>rCRU<|9Rn)Uu=Rm1<<%LaABmzMc--8g{ zY^Q_6nj&^?VBv+-!I!GuIARz>C=Hb5v9zXL-P4E~-x*mdT-O&A31J5|$yHggoqyiG zW)Xei`ttKT`k-g804?uIVhLeLDg!JV)2;dXCAuju0wBm5U7FM<@J=sxf!+Pco($%r zsSK0|cP;uzmH@zSm|lK$1s?n4@P6P426JvKQ4$|AG-DZrvZ%_|Cp-Get#EA2!7 z$zoeD+nS_%eF(&-3%cfYyE2R86dcx3c>FZl1sCLi*#eIQ@R>w~M==0gL4FGY)b5n4rC8_wKoS-jX0siI%5zpZEFzJB7@>M_m*{N$GaX@|MWg4oyPu+zNZ9|Jk)krIiz0L3pBhO1Va=RS> z6wNud=Ql)&5GU`%vYoyYmJS*y{iz_egKSkepf-oXVRy3IFI*K)8wCTzP7GaGQ?s!3 z_t~x7u5w%=zmYXBX)TTge6GBcB$d!5JY=ZwKn%7lS@Qb81_|;ElU6(gIv9|raD?h` zoTMr)Vg!BKcZ%|aGb&^7NCq7O@FN;kBsFW1^ z=UPlOC_h#6?27H97^|LY)2K{Oa-w+g$!~OnHyn)Bfo8mihaU#PX53QV^#e=Et+j9G z%IoSCW6THuNKw{)yA-{9zLS4FFUa$WvUcnMpHQEVw7o}789_uMR>l#~-NjMu3v>dc zrs96tC@RYADG5V9xaZ0%z~lN2k(g*sqwgmzIZ2>ANR`7Oijy2oAKMl~me?gQGpuW! zQXXVMn5B;af%9U*tCGLn2i?M`1{54^hkeIS>q7ZvSNSK`KnGeZuCoFr?~jKaQy zto$}IF(VUx=DfB09oTJBjQgVRr40z2i4bWm#fd`RXoZDWuE2Dxd@wB6cDW=3QEU6r1Er9%%w&c@L4j(*dq^Ll;NYRcocA8NKf4$VqGkn&y0F*DGo0;?XD{ir@h}^q zQh#qbqEg8kK}LD~Dk+@vPTI;Cbu^q9%C5AGT6rI%@kc2OPIS59ojEIBgcJbyC|dFz zF|5~TWmwZ^ambRZv}`|=jI+%qp-o;H2OcUL1rQ94l#?s(Z{v$piO?b;h!#?xkM*x# zi7~v+92?pm+>e}@$X0U4Kj4&TRag+GH4+f~2uiC59C1K^g4|o9;`2N> z1Iw*wj*{Z45|$Ib#h&k+iUwYs{dNns;~>Gk1n|om+_|8dGlO+ef0>smf?rGC1=9Uw zGi;kD`xP>LwqVxY;a|KG6A+wv9R!}r$ULKDsxnlK9J$4X-8`>slQxP>y@v(nK=|og z*LQeP#H-a7i+*Zww%{p?gXsD>wR+wrr_zWSYD6|fIcaI-lyToU6|!|1UdIKs;|^v` z(`x&s|4)h!pYef_@Ax4DzW-A*m74xl=i(fb_}xl7@e6I6OlbG7?xeQ(Q5;Pdvx#Q= zLCRR24-(a}ocju1GsfrS(fCs>c^^ohw&fBV;dU)1N=);s=;hBqd|Z}2ZXT2!X3K>V z{u?Q^F7gt*y?bzC8AQ`R8juq&@DefJn4@}nb+0OR&S+V$Y{8B~59`#L3@sT!ASP^n zy>gcqX7GgK&6p!!g@kVU^cBq)Gi+Pd1!4mi%c9@l&A%E)@7;fH8#sVrsPK^5#rD(@I0{|&8P@-(AJQsmN^hY&9 zp6}KDO3k6^o8zw9z_*$v{&U} z_cFzXivAReMcD7>8#6dS2t!JqKMLo;iNBC9-dSGfgHVG7mjw|mEkX&2Iqw$Kb$r9V zYAU>r6a^L~2VjezkA)C?kUgjSC=*{T^A&hxjcdBXPc3FL)jV+R%0s3EHsQv3g!~)E znJHrsFrbn6>m`&Rr!5oUApy-hHsO2oBuJm5ZyQBI4rr>_3`@ePM{Xnw~LpiKY^?NLlUOic9%XQ@FuZ zC<}~)4#KuPs0Dj6q7ZFTK8a48k?tCacupgoO%kLpVBSo=`c~{um9$;-5(NqvVB2ZS z#ZW!P6#v`cJC8W)hlFSdNZ!c4F--W(RjMn(od1hBC7@V5G>(xjo@^Pc9{I$$Gc7~! zM?hUY&-kdCGEpS;fC2#ZoMz_P*6ey*c~ll<-6n%gL|wq|)%ex&0&*vZW{t1!Sm2HYFdjvJIo*542)tWCeMN?82;Q)pHFf!y4xoa^A#7Q4atY_v6g~lYL>TAV$Nu6|OO-mU80WKA) z48&0-lJi_3lZRJ;XfFCY>$2p;k7!svk49}j#*o>}IQJ0JQF$q#jTpDJh(aYjXBLMv97+GB z4wKA_6b;k15iW@9**yZA8h8c1CD$a36N! z$CUtAi)M-JesW=_D$2ft?_goSvHmTY9vx6wwoUul3gMo-;V6#C!?WU>zovU^Z3-9NPNP;3~?n_bK zeDAqlI4Im*w9hPHl{F-S1UOg|pU{X$z{7uBO0!3hBXf5-FfC#mmlBTJ#)P|CBvmj& z(?P}@$QOSgnuYdHwo1mu9hWbOF{JDg4i2=TBl}T60;+IysWJ?yIJ+GCnH?1LAW`X{ zz}H?MgO9NTJ0ppjs;c8PGp{~$sVjiPsSjIhIKs_HPvd^(_Xie27x@MPBawXj56zmK z-`!$!jPH#Gn(z(my7T|Z0_bvXy$nK~GL?)vejBatHKciTVy_;lWCj<2nMb5nb4%&Q zj@06w9I2Xm~+G-HVM0T{6T|wB=l{9WruRr2LA~+o~})*Y*eT zkN;AjT%cHrmOYZ1gv*t#&1}D-yAHzAj-a*=MW$yTO-sKlzbjk2@zQwyEkpK=fxLn@ zch5!S)}6gL`RX@pyI3~lg5VU)k(wrN`!0m$&Y;yoVlo3OzcDjs5F3=uc62x3e_^wX z9;JpFNSmVHNcLi!t`}Ww2^A5{RdhTJ_l3x4w3_aEG7BwN`y+(8Vc4lmNTngaFKznl z5)K8UErx=JIE+B-3*XCm>xGpwrdQg3N}Tedi*SOWv%q&Ji2sR582CrVB<6Vi@07y7 zAPfH|#itZi;YF?IYt@rgP-^y$etQd|&aOD5kE3V6Z8*_rD<0vh5SuNwwqt%u&pb6- zTVM6Ikzhrabv~wTU$Bx5RW>}=e+d=Os5#Wh8!emVE*+!o%D$N8JC}a9!Lp>SzODy3 zExpR7t?ga-c&hdOnxLwK=mYz%zTv>#P-JUwt1^S!-BFsRZR;TWNbKO%%?(fvD{GwRp z@+F(8e-lN>>Sae7qFs5V$l9#Bbz-8Tj2W|z9{T%OD4C~;%hfbjynuVIQ&dOs-lna$ zehbBk?Xvr=u4KISO3~a!eVx<8^bV{tje{L&@~CAZ&aWvx*#p3ic+Jh9S{bM9TKr^0MrRrVZ=9W<2TY=3Edmy^ zxBKCGy`&1+#L&DB66hefsPIlOUFdP(;qcs5lW-0lvUEIuBOw(egXKI3<~)FU zPGVk7b)2uK{?5R@X~1=u@*8*-%)X%2*+5Dc32Diyc`+HyZr!iNcbM*RI*H}o@M$bu z3(>h*K09A5Q5K@+R2vRo?<%BLU$}wqAM~%BDJG?MUpLKD!e{_#4Wu4YX#*)G*`_+3 z(20LCo>1YvA+cD2>Evl!<(PC**70BkEtrp%^I%?Zps%Y{5*!ooAtYsCBE!j^>J9h^kezZa=2_2T<6XcP zB;C&24PR12(n7R1$Zg!Z6goHbPB3&&B~Ef1{CbO$N%(m}cJm!bZ&No2j+k_P~@Mo}CorK19kVvB{5y77C2fxLxKpjcvf ztAsKLKrs13cIET>)^(3?ber-cl|6KH?wok_|DM1l={yV+8h45?R0|W)a=^FeuGXnG zZ+t~Kg#cXk*+$P*@)?h9_w^0Ex=*7`3)D?oS`XdH(Qi8JKvoW*b;5!+j+c4YPuw~^ zK8Pk=qTOazS|C0+BoLe^EAN`$i^pR0?A6o#ryDd%0Kg8-BbohRqFWRw zsm8TWVMEVUi}hOt4W0TFwREvVh)jfPk9OMw$YpUPCJWrk4fl>`Jt3Z1vCdpW9}ob} zo1XmJs_r9LWu)%&I)<7<)Z)Y1dBO-IJ2Eb`>%HXBhPwfWPw4NPAL`G)yj=`QJX+MA zV`n(}!Y<~`7|5=dq(EN_kqRV)EK%%16Y&i0BURDeYm`o;Ulj!??d*Eja z395A%lM(eA(~rxSGoEO=wuvM}>)e0l2sqg{!sWIcn@v($=lvqKEREG)_QjgfceoEX z?rwtU!R@lhvEiYqx~|E?SAOCR&yYA9wT}G~!>5VumekyDBtX}N7ecXjsZGKNKhi>v zgI)*>jVGhPDQihs>){iPH&`EXF$TY;VUp%%yMfwyFIkj}1fm8g~B|)Y@Cgt_8SMlyHDM<(!}ON=<)EI)TH>y7Hmm{3MCkIKB@p-}S}3abzgcEh7UyhelK_-7qv3ikht6ETXw*7x=sZ zQ6N^tSwcRaPPVJM%v5=RzNRIMwGlC~H~=927O-9t6wBXM`g9(NWRVX@V}nTW00H_3 z30eDs7#iJYTS7b>%%^Ex%yN97A_63VQoKL?kJOSx!x-q?^%IgE>uSC3snJa&ENY35 z!aP~NBF%vFckD)EgX}0;t2z#YsY&aiapOcqaQVPy*Mrj~w4H0WS2P*WRT4g(n^=U? zpu+3`pM4SblsW>19yg8*WduD9j;XR~dGt)?Ag#2C z*!bG#iYP&>VH^=-z<1+1DT1O9814<@M3eqPa>k1q-+0fm00vy5(4bUjwlWZAPxbmp1^P9DWn&21!4f7AJ(&{&X8KzW2UV{OV)Jt*i z4eXW*JV+Mzag+!7-4id)8H;ks06vg2B;?k84LQa>yW=IVV`$c^FTD{=V`_zs*;P14 zrYbuCK-BZ-HzUu7?i^U%cy^ARFF`>RLGJ=HntV_YH^uB}*}4BB!!io1aZti~+<*f! zE?nwX>fBYJStsN=ZJBrKKxB)nO9SFPQ&DQvlS{eyCDdHrE*nR;Y}HoyY-}w+4|rPr zqguIYp37^iF8#gPpTt>Sq#XtwBwa7ClrDarrBkOoZZv%O<@+MFEm`5rZYl-wT)S}C zP3U*(ybAStu$vcsY*l~~2tv7D;&M$yU(vj}|5-zrW;{NQoqDLG>F%+=-3^7wIFlVW zKdZY$NtZnM=`OFO(yUukb>s$7$ii=h=Yj0%8$-!HwY;X zpHtLmPeWr9P@>S;Q+WGpARMb9X;m9rLUTtqL5cS_fz209i7J$sCK>e)d%})A<>)~eKsA^7HO|U5+bCTbtm5!j)VDv`D#g*3v>suxlMvj} z;Vlg`fUdn-<+(n!ysX?^$IxKeQN`iGTuavYjfTYdOd<_*LK7uc_&udcgFJ06%}RJY z@}1q2N7=W_=Ig{#zam4_Ff7Xn+>bnWS95%SK2MB}XSNs#{;P$UH~1{=``8Jh$99qN zJ1Eb@9KQWIgkQ-~ZI7mSHu=Vt^*ct^vM9p55jR9%QG8>vk7Re*D;P$06~xgN(y(B2 zq3E9G>=3+{ZqC;OO4@t5+1z61hc7Ldc$|Mm?V$0jZ0&3n{q~yYdYs=J>-43wC3mmrcg`0#!vP?$Wu*?S=ezVrkV?T#c6OhY0vdHAPStx<^OSb+`;&y zO}?-)bES4wZ$Leg32JtbkXnT$CX_3VmWel0Rn^`UtSaWf7)2%jN9ux=G@N(w=nRgg z>RvWxY|=vtaNl4LRUCIDlte~u52d%qwoSCz4?jMqHJ-&ztbZnK0B`&&GyRgVt`7=$ zUZ<`LFqGem&lLEz8cUNYQ(@DfV}dCjXk!7PtagP zYf2peE(7@Q@`C4z3AExz>3{T>BpSz-6DoSZaWS%r1#JpojJ_9%)8KKZZ`yHK&EmIR z_rfHeVEFf1G_5w|U*BYq_T>ps^WY=iJI6?N2C+7>!`q#!Xhck!=z-<@)QIL02m`5$ zuKyABppJLFo&Ig$O++bUcu%0McX@qr&Asa|erOiKksW@tCHoHVGztDxJA=wS(6~n7 zGVI5T#1(fljj0_LTJ_)Cn>{o1{9mJph6u>4C<`L&vSoou}Sc(=u>p6X?@~vKX z+v`amBi;L?d;RKpLowV1mRty^mx+wTxsO=cv1gx_v;3s%s-N#Q6}mjrBUmhX3paSfo0?ss-#NB z9Mk`zjlA;)Z`MROCUML3Ku88+K|PuVcm9L_pA)P;PauZ!d!7B=sS`>7C65`F_-_p? z)&IxEQZ%Eou}8U^yUn%JXMX)h#xp+s$(NomngFWIc6{a2;hEh;PQFw0m>r8BPr+*t z6GG_9d|#SGFHddD5h<8vX>7zi=?8!XH(J?znhUqFdZ3FusBJw*%ub&webDS!F|EC! z;f;zCkb*cvL#S=0{kx%ACukDIVOovgdxapR#WksPq7Q0v+zxop5Yik6|UtvodgU3^fV3+ zt>CE?{=D&S{XYFg+@^P80%ZNsLUw^w5Oiq_wev->(7yLG_QC=9Nn)$M^Q>ExXY&vY z{#5}F1^0K{-sxU29rtXcP`3N*8yO&^e_q3!ozh+T5U9W>5SC^@s;k7Vt)cpcOpbS= zOWznkSGe3*1ON<_+ToMn1M1TDgNm!u*tjRtMd*1kuSA5Whczr{f=P;>Jq`=Sf_=Ym zvErq)0(!D?$izSdyX>ew*4SOeKf$yH(bFe}$nic+^f@ zC#B1S}fk;gC{qR z+snoGq+2kPpp_X5T%%JryYpgT+BFT5J(Svt;ojjnmbN~@dOe`vStlabr52X`Op20vpU68Shkc8j>>$;zB=>&%I%thR(dX>(1eicADOJA%yLkschcqtbz;5okD=H=!|I9&UFPAh1J#Z6vdM` zAffzLsn|%B_osKEGo>a2@b{}`NTJcDYtCLxCRJ)*T2M2+S(ec{qH>5&t-`2`ya z7GiTfWz2$)`J_*VIm~06EAJvdH=QD^XARpe>IfD8$;!CSidbXUrT8jm4 zHhh#{e5g>HF%6ha0pCfOMF<=eFh!&m6Ug9bIr&d&CIz3F?&y{X>e^HF2166Wz5NH@ z=RQwYfklEDJcov}lp`@{+eYz=tfx)_vE%xNT&K0^bWNJVth2%_T@)RLF^b*{N4FQ~ z(bz1fJBtk@1-S=tF21mX*_Kms2f-g4W`xakG#hpncq;P~1rkG0a)j%9i<2JfwNrhH z@PJRYU%qU>^-^CT?}nIPdn_2>i(=@i*A1^gLyg$dvc&r*g}{dJ&avSquOKTI-aCiP z=H-)OgQ3BdPVJJJAnO9?ry}k30{iR<<+0djhr@W~{~g{e}qWe7(zciHzpw1-&9V%ieR&l}97e38PH z!k%lqAM05ig<`Wg!Z9nq&J1kI(mtu7KT!lBUwn}PU4I8-1tEKt(hQEXg5-{~6iEo# zrdNZ0f8}C3W?!SHFP^n-VI>Ac=sgZ@T=lh5O+|z@n~O^{b||KF2tZe198Coa3mT`9 z<~6m|QO>`_cRkxYtVkbV2Fxh6du>^I91)L3dhG<#ae$B1W>Y z!FsODMm{*#@J+l0)3JSfe3$bv7MifO-*T?uI$TZb?Qsc{tC;xRyafq{)b*!aT!)1g zNB{%MAd;oXQ>5Upac*RE5|V*IX%HYtudCX7-=3rEUl}Bt#;QF1`VOSPZq5y4d+_yzh~1$v`e2~IuIi}1yG9{;u5RQy)zU;ny!t2~{csGDHsZtV^ykZ>gN9kl_&XQ>D4JD^|H#<>eZ4P!AsHx93RSxt=)lzseu-^6UVMRNAbKJ904=AtRw z<@hr6sD5|9IZayYr9WR2wPOyp=q>YZk&4^#KAHVy0Iax9Mv`hYZC28DV3}-wk-qXn zY;GF8CNlRN)#EEh+^7#irj;zwwyuf)CnWLC)I(lUE_oVe%@zFm36Ib1V`p!muZU4N zsV!%JFD(J_LEy7?%PlZDWPk>2c%(a*4n9a?Q^#OZ0*c5Zqa9V}*n!X7?)2cx@m`EU zvWq}Rv`fnP{a@1?zs~j!1_cWtxSZ+nghE|TOs_%owjRU9GM~AjZ!3;3mbA-Hf%f*P zL!0SdX`d{SfZwPhm-PJLSjpU*r*n_XV(xkX7+^@$EuQE)i12vPTYIHjGf`IBy0)jf z{+YnZ9bz3%+X%c6gY+NqzwAFnj)fLXSZ6`qVJuXyn@n+NbpWLoP;XFWq{>OK3CPf| z=RY0`5k2g_bYRgpBgpXlzR&t9>I%o=E%Edj%IS$h{@9e?Mq9Ne((Eu=8xDh-VT@Mt z1@XDGWV((T^kk>TbU6IvQx&-Pk0@zAU_rA(;X0NVj*t;LEHqQ7@$FZ%cG9BIA!fZv zyK88ecby!adrrXS-2h-%B;<{9;v!8aIQT6^#yTcJ&DNPtK_Eq9+PX=LUcaW>DG^GS zbKh%Oz<~1vWpL;ji)J)R3#RRAyZd(Q-2egr?3%QyoRdd!rOOn-5;Z(6P1u{6K$xId9(Nm8;b$wx^xbmr?L1d zOX}DAOS=~_XDmn6jQ6IZY(8ALLB??~bztc!KO(-iixu zzSao6k(ED~WPygS~*w&QOg*&BIVv`~jX+n$tU=)wJvSo_extxTVp%goBwtE_$o>Ct2NXmEu0qaTG z{#l%O()cHrcGW;mf)VYCGai{IPnOK~D?+x}Eh`^t)BbZW++hNJZGG;AQMzrgymqA` z3#;>6_tfXMByUP}7pCmPdW?*z9&(Q+g-XxW^s&i?ww&~RlL7N#-}we+%=-+jkD*gU zS+Qpw3)5-yJL&R@aLK_Pk8LUE6CpRtT;-3Sr8lRiJqePNJq}IwvhgR!n#HOg3eQRJ zB!EpsWox~7<-$q2dMl)UAZZjzA+7YFe>XbqGnonvLRWv=TDi1)oqBt>zVi&q9#$OO zGHuor&D)>#&Bx#kj5N)wW}N2D%Dbd@!*lt@cO>V_jM_US$(i+nB=on?RPzYgEPK2< zjN8v~&aZV2$mFo|bNXoM|Gi*#7xbCBi6j|o{d-oI5KfA08aQ`ccr+oe1OSiCF?de( zym<@9aI|ahg2%Af<-fj8h^)%89Nj$^47Pga)_zeF2k~mNQZHMz4uW(7`)o9&8$Fax zW8AUZGcq|N*y7Jf)lWD$Pc1V47fIdgH`V_FO>4Q$N?!p>{_}~;9p=Z_%fdCN6()iF zx8~k5sIDzq+gy0?1Og;D!QCx5!9BRUdvJFN1PH<1-C^VI?(XjHF5gby+u!Yb&#A8d z(bd&et7@)adoQ13JnuWk+>Tzg#<)u|?xljn7a3OiLLvPySD+$(G1C*=XECoXONDV^9BuJp26z#Jh842Rr zmt|Eyr6~IYYK^BxC%taovHm8or4S&rXH4yJM zXE{gfX*)vDq_)Q_s`<)<)5OGPzivq56+V6t%kaUWRZNoL1od}VfGoQtpWWBsc|nj# zd60rL7nIEc>lfb3BIbl#H^_;7IM3RopF?;wmE7P$#sBgd9(#D4p%7huU{)}s!x=t!_TYZ6IPRRxEhhXyM;A))~dJpOx z>(?C$M<#P5kL-q^eYI*B{qU+?Q}zli`{!B@PyeGo2Wz&)$=z>~@aXv;Vh}2Xt(P)T_!KIwjm?C z@mjuT^mRG05<9~LII~@?JOD7(3LN|%%9&(kn4Y0XPJQhLVMR|X|0=V6V@gN20m?{h zf#xKqYpwky@z`M*fjXGr=O!~WxaP%nOA^qQS)rjN0Q2s`=ZtA*-e!&p=*^qzzIz+10RzZ)lW%PbdE$G>CQDtUsC-1>&6CFjo&^QRAT$O904RGw(#3IDjD3 z3?a4n1Ty|AX0jlF4)E_MjZnS%3&93-C&O2D=uNx_I1207%l8brC;_$M0acig4WO7} z$^Z(hG4a75Q)ner-B>$4@=)DwS76}k&q}Z0*HP&~Np_-geSE`d=yg`IBR1qWfiIwO zQ_#=l{&YqKdypFjf9~iby|eBw>hmrG(x=#|We~>giLcH{uqFx$4-9a=s{!7I#MCS* zOW;N6^NyQp81TdMSmU6sct(^&p1xV`5m{`REmnNDS?>L$C}|lb_6(P~ZgH`l0}T+$ z2(Cos%2u>y6Ccj9F5!Fj@a$cq!g8kf;yy4iyAS=uyWleFNTbii6HDn%jIn?# z5DAuhhF=)a6IA3KM^5`_g{N~C*Y8U^*#2ztuJ?*G?EkS{&l#B6GBzfMG-v*n{tmQ& z=`PLW1|J4zc5GfC#LO@Vp`(E2-e9g?THmN$6)ZMo}I`ems{(;j9Hqj5t!lJWrDqWJHp)>d7u+@hC8FeDm zPk_kx>Ej~NXGv}sI|fENF@SK#P&Y0~z@&qnDNjl37-OPZT1HdCe0Vg`OjLYjS+cz7 zi@-X$5pUPf!QDykYs0oG3~GkaG3~K}m2~{<;Tg*(Hs;;0=Dw{T%QYB>VuS?LP+UrC z*!SdJk7H5R!gG@|l$FN1$-Jff+GTeIIM+;>J;=^o<+*S^=PSl!b!R;XcMsOsnV`Ry z;CSTrxMU}cIiKh|KSmsql3+x3*pD@>QbNR1ORHr@yqo@U^1@?MmnTw2f~FG0UHYNR z*Jnxf3+USC$yW0zfKNZq)@Pg1qK{niW%B3CjCB7Vfs@!;NYq#DxoM&G~ngZ^cF_!njF(Cm3N~G@CY>9JFZF*=IL-)9#h` zu`UJFA6Hk=U2@t-D3t2-<0@l#t>tG;XJB4Ca?t#7hO9cdosBN~$A%Dj~ zJl4GK_YDYRG9Ea$d4oMA@egQxmMs}Ie^;K_A2(&a;%{w|CUB5K7P4B_ait^PvIriJ z1QfJ0!1RM!DBwG*vuW}axXmn!($g9Pr$r^DeV#dWY~<%oEn7J~eqv)JN*Y;{ML}nF zFGNJiE3kf4`Zj_k0RSaYNhp(S97{(`9ax=-J&1KQM_eCqDX&je3R$RV;?WUjxdOb3 z1)4iiT6nTb*e%+|d*$#A)nEhT7P1D@epN8jc8bTUYZWWcMKb?}Gh#BctF(2{Miw3g z$4kx3-bVtNxpNYQZ+Kgi>Tbv=bw}0dB%-|QRbSPesjXGDKMIG)O$@)Btay5H^&o3+ zO5QKS);_@j*ThH-U|UyMV%Cm$cB>($$`JnnKAz43Bi-s^cwe}zm7vh+Y%+w zR67+mVt|ILELxh$h9j)J8sT$cRWXG9+Q(YuD7A*(4cQ8{-j#skkA}|;&_1FB!ONF$ z#K3zuNgjOnLiRXzRvYzg9UbIap7Dj`_awl3P~qFh*kVc~u~5I^;FNcOJlP`|yB49c zFjan(rm|midn!V=FzLI_?M`rY$@*eO9lh|Gqk0h{ZdVPGLUaV~Z{sqkpPy&vjGyW{ zG+g473>TLUet%nK{-rrhh1T1t?Hq|W^3IRqyzmb*PY1_7`>mm>nx3zs~@-=z!xzYj+5cBx@^jV}-nQj8HJC)4s3nq8G;tcZ?=69RQ{rjs9 zW=cj>G``6v3yr;NMqwg}Q2FzL@A&+i^l<(Je)5=PlGfk0KG7k1Z}c3Y0sORG1@*e# z^3HW;)|e_eS@{Od&nwHSyi>~iDSDuu#e#6{3eR$Ep+8xxx-5KPT@JAUH157R>z_9uLW#%&0(4 zzJ}#WsNFcNt*F<`81ci)PrX4!L7BG6*=w-&K@p==bKL^>QfsDw=Fr5K!GnSAkxSjZ z2NZu{{px8T`_{rNdU}uD)F#V%F3;g$`g3ex&>Xp?2V=g+RE3ttUscrN!Ns^q1{vT# z^b)w|3|pvZM{aj?X5J<$ztQ1z?$@5>o{sP@gSW9Q?@5iWTw-}Vu{Pm>K*%zrS3HzH zYDpVPs`Uq97MeLZ?|JlbCCf+&21=MXIi0Cr8!P2bRI=}$f)by^X0(*&I-H6?Q+wyi zFET1QGNCnjrA1}vY)b{8wk1Kxo&?7ZFH%rpMy^D3F5AQnAI}11SYz>sXB#FU1}ffT z_AZ~pOpB~E4>zmJ5ATIQvVuE#HNe;4ONS!OW#&Yk-)(qDdbs;=ryr+AgqTdYLt0>* zq;vrzO#!j+TtMwvUw4uYl_0TpsSBdx{PMOQAIJCjd^Of)iv4sNn(JK$1@N`KoI$K@ zuALCRU-Qb@W^|u3!Lx6p`{h0?8neS*(&lMQNs5>39$Fy%7wr?mxQJNKNw1csLPx4O}$I>HMWZ6-|(MxFjQ8bMm2Mv zt%zNx&AmcnTMx`VI1Rs*?nZQkl(%LSng%amN_pSFcxv81d!_g3|XB$G2Vh| z8F-#kruM1tTi)Ml9Yt%SQ_hO*d#e21>s>7rAp3foy(U_*spmR6XL`y_KKgX&X_MU$ zjqxjA6%*Yb@1~b?7`ayGDa#BVAWTQ#HKgfoUTM5L*R?Yzqx5zwf5_A|Z*(p>09{x43c3S3vIyy1M!3PUK3R z_t?=%4r?&idLZFpCKvbeT1#tq@J`>uR;<7t83wPh++*d7-QN84HF3r0F5h(4LnkSM zKi+Oj`Gt<#NUIR|OuUmR=wc*DoA0?TSD}H5>I5%Rih{hoFW<^hkz05_9@uNdz^}cg z&4(4}Cc!~X34ALT^@A(r`;6$|mi>#&=tuY5#!I9n?>K=gF}CNzTCL1GXUCvkldf2a z3#~Znm>w1!^q4{V8a$zJ85PMGBz&Ahp7>$ULef`;_aZVdTMIUgm^#=T4I=qkf>Z)= zWl(CxL@KcHYtk!J9ewTJr@qKX0#|G6 zX?YlXL}aq=o+fB!0=;74X89n4eDEZ~JNu*`xpSW)SU6e7L0~nZgee~O=c5`j0L%no z?vXg_*yw+h0z)`U3~}YLFq*2yhO3RrJQER)iO!F==Db7UI}UesYO~-T1<-nnOVR~s zazqf|K%AAulepJwUSy2!DGF<=A}w!KM=`e0H2ASLf%8JsX_FjN7lS1?wW;?e7+SImC}F{`4q2p5d}0T!7T~}ljqhskx9R>@6|g3`CU>Q0HIM9y^BmQh*PlZxhl|OB)ZYNpl=vXV@aMX z$gLJ!ympXbWmC1|*p_RH6dv@_7bG(2fl{n)QO%V)vZ(Z|8$7~C)unXxbArcVJf;cv zI*ofwYsfb$3uiH<6jlOaz+kp)ti*{E?Vh>C*`n&~O%*nxW|+n2O0CJ|shB4Ya_e14 z#$AtqHDp0!TrHQvDYN4Gj#Ft?fH=K7wp;9|)_a~IBNvD{wx(s2Ml_&1YXl2T;Oyc` z(+Q1=Lb_$;ra+iS_L?bE8E)?V#aZMpM|S+v3K$WiPxcA)Y!5otbD9QF^g;7{S4??| zGpu!7Ck~|i%Tu=U2lH{r$nWm(Prl>V{1A!1?P5sY?2-8P1cBo;OYq9jHT3byv~Efa zvyQexOIem1E+j8#z8u!g8ZqHFh5IOn8O%H3a7~YST~(O85{iv5FRuH^Q70$1E*=dC z0N?W&)2;#g0%bd4FKF|un^=~4vv{>%$;X3gerLyPcJ{6J+%~80OE8z`(D@w3Cs@LG zq`)t}2ohRQg}?rMc-@`+lY>LU;%FafE}b0mrw)xdR}$A9X39nxYm6`5sC@mlH8agS z6C951QO3>BVBz6M;9C%_-nxul0$<#h+O`P4Eb-FiKX!QslrFb^Y>02zq z(%mju2ypD(AW>^XAom0ZKQHN>+v+;u(b}7AZFjx;s*IsjM-h8M5u@?*em=e=^`4mE z>lR64goo04t*@t9ia>RVush^=nb2dq3=?o!K*xmv+JPZ0{O#GsN9_nrj#;EV$PGr| zeHJghDrI)FmzL>gYlV95PMR@Bgs;D_R;UzW4yg&M6utD>s7c#hObA{*6 zuWzs3ABgig)O?|0@XHX8$mTmN$i_l^L4WYKgzE34@qtiw9c*}f-rpzZqH7_dI!-H$ zt4A+eXs-vGr+Mnnen^z$IG6|4J(F*UZyAh9>p~Sd#4tCMW;h-z$a>!2OZ>j z7BDWvicac#A~t!%i)CE%vN^PteJeJBTH4u{{Fdkezf`8*_2jX&+@~Q(bdr7dTJGdpCC&VPdnqb77@COD#uqC^pHh1sX#{juq zHD(9-RtH-Q*JqsVO#dfzvZ^`_sn@n5$9I9FIZVWqby%5jz$y!?5g}*ihb;4GBS8fV z@AQNt3CAbdkig$=_$AHVTctI1WdT)srg z)a7Zz!VUI<>mbR)a(16V0 z$;i>eye)!{EJ@Y0GIe&R?>HNu<@eZ>yWQ-JCBJX4D=Z;U+E%)3Q41H>ek0q%O_u62 z+op0`K>eWpl0!LvinyKf5qaV6cEae6EZ^G%-t9}lM6G}HO4bd$H@5Wbah_O)_i z430u)RrXOf2g>Nf(-m=aph7~lyyM;yHbdy@it_??T>=uWz1U22EwDAUM|mG~OEb9= zDCPV@FZ~gP-&8~W6HNzM9`F%hruU9!2rM?XH+6$ZgijkfaU(GKK}_+W_^5MTQhBX zgvuR*bBO~+7Xa63Vy7496evxtZJP6B!@j4d>8gFuy!0SsN!hjmvna$WD!yWk?Gb$j zT&Vt`^ThT&ajTo*I*#0|kHTZ-CgIV0%*`oYYu3lR%l%;V2xhS4{ zk@u*A9dnxl;_v`}NEr(j1NNAp)o#!kH^7oInyG6J{PJQj_g!WxZ4(6 zZ-%;r7^d@GbCFl)9#vrj5=AIv#G6B-1mAb1u^vU`QK3!-Bq|f;9>)G5rgl3^_h`~E zO~d*2IyYg?k$G*Gagd<3mrzv>U$g-{b$>gg=;PcO_FK(`kq83-Sa#U)o76VGYA0=hJ0V0}jYoB!SFB`P_2&;l?gpEMs&w{ywuigh!9%@E1w-`(;{|&8dW7x+yQZ!MIjLoYJ6&Q zc6zl$X?>0+J6+JPNo8;Uod~{Du`&fBCMKyUvjE$?RSpu+jh%LgtnFCPj)!l3KT3mt zq&DkJ!6CozTPAO&s7gnU`4xK`Q{?VP3eOl>O;};|I;Pv zmM1eK$MVVs8?B_jf?)!-Y;N2~tgIk;nTrLrDWg?*RI-4bc{b)a$i>MLFp2KAJY0+# zwf(KX*c&oFpi_lDf(ar$sl7xagf_D36$-$qIPqfeJ?mn#dr0 zy7NKldei2lB}NHJ4%;p)_IUim6|HPbZOE&gzf?)4R%N_#FVhBSkP5%((HuL%Elh+F z{)9}&=A1$g^Y;Q-uiDF-RgWj07gMgR^cu-rAJSstdGorEk?w*?ikr995qB)4S@&5* zqYOC=JRyC~ly__~_)V1z(Eo&zZp7?I0U=%%G)+OiEihc=%a`{qkm6nL+Lh)I!$&Ny zkP)enPSbvG5^g6bjR>oO8Imya=r8Sx<`wLNDuOZ;FOmPiHU}!Q;xEcA&!YnnGC(9W z-L|zAqAeOAY?D!iMO+CFFrs^g?3iGZk_Zdzev^R)DA7HmH5g98WvHC7+f``WFsF)y zbW{TG$shn*r1-$L^G!!_PxkBq5q~UZG#?J$Pi~UqR?HYnC?wY!(wl+0EH;LiHXh|O zQ|-tvjHHn7Le|HFK??m?IAx?s-mLSt{3bSkpO4|ZR|UngJmpp@4GTT<`g3YxKWK(n zq!(UTXSHi;m-74=D@G(J-#6LsRQrcUI1gN1v@OgmwDCBzo|RX)f@ha}cnE1IPOZIr z{NiRvclgJk&*DIa6Rv}_%j?=JSZK#9|GP$jzdP+|O4v%?gpD)T5xm^{h`r?~`uW-I z5rNpy*14DDT@5BT)~)5C#R#`9oF{d2L<tkPmNm#%|N9}y3_K~N6T}^M*RF+`UL| zHPxV%UTE{E)<891oX4(<#?+8RY->;Dx4zWmTF@;b@*LVoUBewhE0$FpxxJi#+4b#d zFczI<8-P$+xBjGmHsNr7F8k6$grzt<|)xCL!yn9o9xznN@^5}u`r9kmE zF5mHX5(YQA4A>_4LLACMxbu^wK4DA7p%)$6tZ4& z0r7+3hzOprN3QcjME$`3n&S+uSOjIU(zR2teY~$Cur1oWw6bY1VSPobWdR0E3ale} zNg4y$;0Sm%&jjidZ5>eWhkili$=f!sJtNpe=uYPCrXhd zGplJ4&YCjkP1B_GA7hy&u(-*$7H~6}R%{Z{we(2#5!1Z+coJ3QzxH0#M;C6uaaq28 z|6GIqBS-t)_Q6)Mr@2)C;=iZbu5|ZO44@9ybAlgE z?YS-3=dVN{Li-KBeCjXEf3tbhw=Swv*SmJGn@GxcZ*yY1_tdw4Av0V0(qar6EvlAv zy%90n={{J;ane2yLsa`1$@t6`83|Pf*S2&By78HK4g&D^czo8Vx>t|)B+He1KT&NP7*mces(&=hs zvom6a+Eg%vs$P4-1G-eB;P4hvNdmdYf#n)gcBP@4_J-S;Q*y=1hyvGkvf@a4W%%x& z{s*j>tbZhs&k96Dw``&bC$tvtfE1?1WCw08?k4CmMpp1F*ls~P{J7j7Te*qRJSx0Z zr57Jg2Jw-krC6B0H;6BV4z6h{jqHR9Alye*Uw7q2%}Rg@lcR$87|_^(=elCl4&lRe zQpH@;Bl-7zXQk#@`uB|NGk6x!I8&|ADb&_N)J^6X)`Tq&v+?&b z+)BSu?!_j-=9|RV8cJV6^1+j^7Ux0>D|KEE%KvwNL(&L6vTNk7+Ido}AW6ZLEHTa(agS(=&Ep73OTwG zhZ4cK&{|cvV(GH@o7)MOW4kX-Rm2{%r*}&={SP99t>2Zm{Y})?GS`2qo{vz)iUjW1 zZQAKrfFn?BIw#&i<5OKWTC^DizrPtkXjU9i3_?^1r0<>yuZ&SuI(RLK-4Hbp#jsHA(7Kl~s!}aqRM8;fybKV21S8 zLPdeEn(vQLRciib8^;Cc z_ht~q`BkDSVfIIm^ia#!{xzdndT!^}EIGH9P;ahI?P&htZtak~Je42+P%?#qc1BIi z*Un#aq$Qz>GNcV9(5}8*7(ahWybpLN4~lv$b^F1=l7I<8;>GbvyqIQp0U3f9vmxOR zAVi1z0*YGAfdHf+Hp!a_CG1anZg$-)x3Br-fyjVADxDz`K?`!`Xz$g2&sdOxJ#e=&@a^g&Xy|El542hyRk94_a77pxPiUslhw|@6#=I-vPa%L?lRyet~=WwRt$b-4OBz*0xVVyPRS3X*x=3X-Va@$*^>Vv zoZg2C{+v%Uj_!eDK7KlD&E4`S~GhCDggV>8zYco<1+sqffk@bs%(_d_GeeYra zBb1V!+u#zvET}P<{NR}+Fd4}I{QiFR1s@k2dbC1DDt~$ZPRKP9H3EG9cLcz34Wusx z>g50X!Ml#fydhCd%pboSCi-^TjxE7D zNhG&9D_;*?y*A~H2`k@cum*O|771UI#5GFOsC3{yc8Tws<%#fMSU$7N+Ps`x-P%{O zjS{l;GQURV^C=ie>Tt$x^dHbvY^eGsn*rIIi)UzjqU7{>gA zRS(KM4^(C1N*pp!qDs|EUa5>uYvNFm64rqSyF9AU!Q#4Nb>)LVlQ5{eCRteS#P-Pu z++lZ4;kc=)Rp72?(!0377na;%#L@5}VT}-N>1K@RW&%QVMz;^@!$_srQ&I!}=|k_R zECK#u<+23*@Xf&_hN=Qp?_El)sS#zSBGtx1{yOS6+XDm-7Ht-kf#qye{E%K@DCW6h z{mqdC%{@bksEk&>iz33ABWv0vkE*&U^ttMW2uF(|hKDJ`>zuhK61lh4vL`s8o#pP% z!6qL;LAP$iLvahykm7q zWznLPef0alxNojE*KPxRV9%Wix-JlxQ#Dleb|g2x|alr zQ<#Sjta=37`R#!#vl#KOwa7Hm?zo&29I$H|l}#2mE}iQRY@!3X0shMvn|;`=i>4D} zb&cZLS;pJ^molpyhEXg-`W_Tk)!$?$>fVhrs%wlK;Ca$@bZLIy-FsHYeQoaE(7}#I zcZtnH>V1RCS1V-Wt=is}KK)-SD_?jJ0r?=FNxclXY}AOimAs#t8Xfvd}OPtGgnB-EK^))t+<4y7M3@Y(Ly zx$nj%xaQ6@vkxQs<1MNCV+m@N&i0-lhc~rM9EW|Qvdt`;6#*?+T3enR5+v3#Xc~C7 z)v_jpi`e_0%(YbZ2=6`2SE4LAfht#*b&rs=G2^O+aqI0cGHHmF5X0G~0?cr9kezv^ zP0QHXPj7|#a(hIQuR3z2uI0c71$t;z9$T0`HkueJY`;sSm!@|9Kh-sl0heMVOy&Wt zuo10>7rG&(q$D;>8uOe#>l;_|DBjnpF4snLcv~&2e3w0!kl^-@SRP~v3+veTzd5+p zC$*7X-XbaS?WNtfQ(d0_ZbW0XRF>i5hja~gzAKmhgV)?>Y zwOc6~dxb!1$6+UbH_o~n3zPe`Ue?<;{j zThfR3A0;R6mcNH@>}goaQ3kdZDkYoqI?M}bkjNAJ+%%C7{cLRA{AE5#UV|!$Er_Wm)v&#pOu2qZ!;lxY?YoAOI^75d2WR)G|E%Ll19AV0xtk*;z+QW-qH1Se&cmg@ z4G$I-PJffBw^`px(iu*{_(YO%DU=lg@G+sklyWw_56@_Mlx^J$z7G^h9wKGlzX&f{ z(uqKMYwa5bF*C1LQJs74##PG~raTyQxy{$X0qYA`gfHM`_l>YYjo3z@sdSfH{isFr z2@KwqhZGkmTT)-B^%*e37F?4lGF1iu1n^RM+iTL%9P2Z%#>9zuvh+0{N&zCU8zv9; z=|mmoU$iuaMwQQB(<+O3ujk(yI&Q_{@49s@r6?!_|7s^#ljBO~9&&k2j)lLDuiIsj z`?g2IQ2f!v5;x?osS4Y`t+ackLSERe*g&qy3(vAnI&n@sUp>WbBKC|fO^Twn9@<>I zAgAk!B?H$2!1kuHAL1YQCCK_%<6xD{X^??VRrzsj2U2n{PcpXTa@?j$DKWUtiELqO zqYk|-iTR1*e<08l0WBBVh*^B_btnR|W*}#vcXMisB>B^Z<1l8Cp*JO9Eti){#wxy! z(77Edlx8)d3|S(NQ@0F3U;-LS@am^U;=wR^bnq zi6ISF!^vuBr?`e(kPU1UNrMfz`}Jjdsl<@rRD~1qaq7oMXy#K1&n|?toir4oDc+r| zke!4pK1T0^xu#4Ogd9lkaT6?9(d29`=QKN@UxL#DhM9H#f@J5Un1k-0744?%h?@;V zYKPX;-!^=rgS74rF;&*#20~Ba-~b=@+Rj#<^WvAtp^nUa09f@vT=lT{Old(I$GWi( zPWbCEd$T91d+l`7WD$zPZiDAXzs>eeRqJK1)`v3|#LXi||EKsfU`FqNb{I$F>34&N z_q`5Q-5dhww%|^etpDsp=O@@D3pq?5scLeDUx9GIXdNTz)&HoC$gh?Bww5$A^%Tp6 zb*!SV1T#=Lg5>#S*jVG3bzq;A0Y9g*IMc8HavnapfdDLkR%vE3o!&_4uxcmyq1n6} z*vPQaQ8{&9!IXgYf&77%m8xu`|47ss2A92(Y(fJrL$`>^ax~;fgf+&9*DM9u3|ERq zahu9#Q<`W0f~IH~EhjUH#qMJCY3433$>MpUe4E30o+s|j^t0TTg&9wlO42<>uu=J* zNL^Vns$T?q;g9wL17Q4Bn>@&0N%6Tk6Fy;)0Fib~3`1Z0N?Fto-8^l6S5E{DP&1}k zvnfM?C13HG;o7Xw62ITU7f)lS}-SqHPyR~dgjW`nY9%*98M zI3D~kuY?a*0O8(c4&56}U$b8o?zyUkjZDMkJT+b`jwG9afIK_1ru6rAX*#AwBv;>b z=%^&TvA-!N>e-C%7qC0knGGT{AbYHf+#5;|p1>1nthHh|=i?NAuyzQUMvd*C9WyQk z5FupQKUE$aNyE5*XhtDf4+Ud=W_T}LyR*uwN(y72$+f&XyTy@5Oihi0vuSahPEerf z8CPxq&{Hhwl+s~h zW^m7-=eg(8M)q%CIltY#$S2%eTGt#9U_r5t2_$@H*o$X8t|_!?uP>(@cVIjivtgOGWOa;|rson@G8cTYA_NKyn1$;U3qDe*vmr5stbk~B1JD+{_r8yK z{d;Ll30dCcMyjJ)R_QV0Nf#ni_UyzX^IFxl4AaK6Q1Bgsap`n%$9rK zU=34z@*hdS<@!fItv5F$kXbjqRT=MQ;Hq$yC*0aQqq_u^+5!(24;hmmWxqEhb^7E` z^n3J&{Ize{*iFIcE9KZx4H%L3BQ6*6YbyE?N@3Do|Ce3cc=VrkZ5R|Xalze^@*}Yr zoV`FwUxK|XQP1O;(fS`E+eUwMelp0qo+F1*Vj*kgB{U74VbH-nG!ja^>kMeuk?fIq z=rogW6NduoS2vbnC-T2?=NkHBMVKQLeY{e<-y+e6H5NYr{S$Rk=eUuwT*s>|z5i6f zAoRMxU+N#0)YZ%k$xsu5&HD1kl9o;_X2v2~BHm!L*+&n%7`Vv$p^o+7jF`ZI$xeSt z{^tNJA#q3`#klr8@rz#TXbJtNgn=ull)snEzj7IySlZ9+mvCP?YMOY6Yvlc(Rh^}; zvbp@&7hEM}Q{n=U{fGzGIy;9CXC0JccC0xfoJ6Slamde%!W2RRkrH7K7~hNFy;H0q z33!;N0?_^kW>HrCeTGAQ*P*9O$6iA1od$ZBV$FcI_vKQCyk(wU)xiD?!-Ia2Ms_#D zZ*u=+1$BzU=bwTQ{`uE`M-?_&3Dn+TNEK~6Z_dsA5*X!r>i0xfy2V+yjabX-YX27& zJHF+)W=1#kZt%%taI@YI6Sod5UpMVP-e#jnj#Tds9w^|=DqKZRHw1ZEP+HP~0)KjS zGt_OijS}VSm|3`i3ERiPBK5~rf3Kx5Jn<=X0Xu012fFcvu|0k@rRv;-<2{x-)s2qeeA`TSy* zz7%KqmAgHr)FmV>cd2Dm+grD;#}lf^T$(ocYeHhQ+n{1O0hNP!sL{2`zZT;?8a9`Kw^5E1IJ1&2`+fm@6wI38LDl(yW@v<&mOC1ALHOynt{Jw|3!ZM5 zSnR29w3vg*S`}x{{@bEpdF%m8+F(tq^7_mPSO*JRJnI_IO?c3oOA(*$<|9-b$C{T= z!C&Tj`jR8+s?^6)BR%xL%Fac{UG?B!Jxx;RzVEQ@%v^0(8z1tbl!!iLtK{wer<=)@ zvyxFOob-Kd6&iuZRO*9%+YK0BF6BJpS(S$*os^yS(wmfTAMLr12iVYpfA7OP=*?i* l$2V&5P8PS=|IP5m$2+`8NI9kO72Gog5EqsaDihT8`(Jv%z|;T$ literal 35988 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 IM6N<$g7-FC>Hq)$ diff --git a/docs/images/renaming_opt.png b/docs/images/renaming_opt.png new file mode 100644 index 0000000000000000000000000000000000000000..2049da12b878a76a3a2cd4ea27fb8766147bd863 GIT binary patch literal 7784 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 literal 0 HcmV?d00001 diff --git a/docs/images/rre_data.png b/docs/images/rre_data.png index 2c07f70d83a71e40df149f2f3eba78d9d759dca4..d3c912a0572e665742dddcf0b5126d30d9a73845 100644 GIT binary patch literal 27893 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℞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%0Am>#Aj_k{hfn%<+zR@3i`5Cl7s4mK` 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 Z9rTQRp9JvsOI;Wka?;9DWpCbp{co1gO{xF@ literal 0 HcmV?d00001 diff --git a/docs/images/summarize_one.png b/docs/images/summarize_one.png index 1204b0fbbecfb28a8061a11921a92dd678b5000d..76a994e8bc7d248a3c943358d919a848689ef10b 100644 GIT binary patch literal 47206 zcmeFZcUTi%w=RhC6AMjLP`V;bX%>orfC`B8-kbE^2_2#$MGz2>-jq&gQbG%a-g`-? zN$9<|0DtqPu-fjmHy*<6E9D0u` zDCUMWxAB+T#B)-AVc~A!{xIf!RN@!6+foZEgCIB=*GY?$@FRb-8&Fj54F_4=JZaQm;HcArn3+>% zH^5Z<^&0wU$g!?{G%(|AH}=S&b{g$e7r`_8jH*7~N8mdNFqn7)UY#`3`}IDZ+I)Vg zpiHu~uZ~B7(#+4hbjp$P6TZk^5IiK1mUye?k-Uxox~eXvY+;J;zODEoT@g~o1o-8z zS0xGk@%CxYLxi(1l{ow@!%!Q;D*?A*K?&xR7FL@t^qWtr3SO!yc;`N{_>z*$%Ab&= z)|cRDD8M+Bf{t59inw%^cxf1|8LEruJ^A7jb=oJLaZc9$9P3Yi4`*@}lzpgo@27TSP+4rzv6@G#KowH@N z2;mr^N~%RfrQkEHI~9Hg+QZ&&Htu@YRbcN=xN15PXOW%w1kHwXVc~U@8qFQ-D z*{+_6adPMRWjERNIeo5zGHJ(?!P_iu|**ox!Qfe#cc0^xaKy#_j8H9 z;tHa#Rm>91#(g9tB#=eVsPzH$%eJQ#`2(iBNX@FnmDu>$)l=nwZtE9)e3T+ucV7wE z){aer%{YkVUBa?kZTRc&QAZ`*X=0n)2iA4$#lzMs=mo#~27)O`GeB2r?`zpbh8tvs;?S4X$5-pln|g_^=9 z({Y~_FeOi}Uqv8RWlk$}DQqH%+kVd6~$0 z7zK(GY8MJm5E|55aMF@{pOH5JF5%vu0f-DmPMCSNg>j8mB*8WK1&S@bO=|&Xwb=t| z@S#Gm@8nMlPAi4rV9Oj`YyO&(%J{N^!#A!Udn^$$87n0f9kOPUtR{npeUW@5VvKy4 zaTYTDHSJ~2e31vVdUFgpgZmp5W05ttEPh)R4VE`3ANqg9y+ZV|yf^90AMEo@(hrq? zpD|ckka@WA2x7xjwe*cok{Ca|!O}7Hin>Av)AGY)mBIsqu3-RB&4M#D`M|ye{ZYKPQRY7qY!ai8TcG}BSS$+nM7wE z2I9-GhpA;AuiOcOnex(bRq#=Y-C!ny3OD8uhgBp_57yktAJnR~IP&bwC}gK6_Ni|& zD|-<3K03>?w{q=^I8Oe-+#DeRLBmM*vhFf$ZM8fWj)_$Z(4d8ED~YH9WjeNh-A1 zH8QUa}v@L2oGuZnO`q4><9eOv( zf;C_48>x1qdWSmod%6G%2OLc(rCHu^ouAa&PLT)a)X8`K=UN=(Xmk8I3>hZ!RH)md zqve0U-0>*)ZP!u1C39Bad%miGf$)V8&i!?d!p9@ygEf^?sXTBg-MIughf_6-drC;7 z0fLH5YOZb${^RvskYP>-Q!&otXk;9D)2*YbeuT5j*`ZnYx6&UNI(Qg5@-!r8rSkFO z)Ff0|Jr>jC>%G3P9lih>FPLx-xPGXcrvKcVuuhzR1%R11Djxp`C5`|>U{h-RWLYN}E1w=$4E@%1mIky3+!Te%vEKD+dwLCdxK_V~cbQd> zUOxK84IDv!Zvv(@UM{qi?|i9vKm)kfQ?Vb!((G_{t>jf zZwb?JYIb8k`wE&Qdy^PDE;TUeuw?!kzQ0!uwk_8zuKUgF^UiAC^QrD-`bFW7h6`)B7q5l10Wmc!1D znCR7~=l&{@BIhV1xP!^zj7oPsYqbsS@X-jiP>!ze5lGsV1Vh%(;R zzLq62Sb`+GNeWYkXR`n}9}E?28t3!BiG}E2%j+{SiiCzv-5b@Z6k0tQj{IoxPJ3lX z4^kZotAiIM69*KDNgis*ZRq{kD}M#Afi)yDdANu0jt8SzQ9tjQ=^RmtzkXU2%G~ZB{uX%K4)Dw9L zVn*UDwVWI+>UAp~H{IdL0ZTR-MXlyvPVOJL?%cEib=Ud)am}$fSayf2XhJqtl$M<2 zCCdAhJfLN^b=~)F2J)_O7zFyvny4bky@|XN?rX)kJ{@<_FYW|V6xehp6Y45xe+2J4 zsNbX~&FbMs%TOmn!DD8yrr&*^%N!_!a$e;peajN^k1U66l#o}jD@3Tm-nBPPFpG)e zZ{SpB!d)fF5{CoN-W2FYuZdoW5LtATnCU}*c98Q1x_3rENtsHEYg9)~_A?V=C-cK= zia6KuKC4=Dduf+6Vj8Vdu& zL6x?mxzbDw_alp8C+^j%*ZCn-@wYT%ZIR=2r;Z~w>$Bh1%%59DYsb0$YU0hDO}9(Y z5fZIx{fXg>wY7gAvq2*{RMJ4sA6LLxK4rn%$49di%NsrhTYM_MMO;8)2oZAc2z=hr zknifutS zi~*hukD)C8XjbyZay>v+H)NBn@MkMml=F9i?5QR1q0tk*sYa4diOOIPnLvAx4gCly ze~0T=r3gR!CMBgg6!^W=s<$s^_bO9d?C{bjQXU<>UO`^pSopTY+-YP#5T1LjGUn&T z@KpcFX_lKT^n=j6F65Z%wT#)oK^m6X`hj~89n0qkPhCd;-Z~wG3)9aJ94RSI?RUvo z>PNwxi(B8n3EmU3a4N2lcQ%+yY~pEZ+RYXKg#_|FS#5eG_<9nEv|qQ0hw$*=FZG7W z`)g_xdyk=sn)KjF-v#d&CqI!9uP6bZIQfmrZyq`$SkmYacN=33d8X`Rs>ooiT%H9?QNo`DNRX7xhpYGHjla8F^qk&W_;$>J zAI@drtZe0*rK)3@2FzF^>m|de1Q8At70fndEMSO^hj)%V+a$|NP?M~=+i9byH8@*R z)scH$nNq4mSMc^N-`uaFf2xzsDVz%az}?*1dVX6%A#SbA7OzwDPMC7x#~{}btLkCT zVZp%{DCQN*(}Ip^l<3fo$GZ_26+nfN5r47lCrE@^H6Rqvb-MSp&te;m9zg<=y76AkI~EEnu!e+f`#znUf>EEpQjxRUcN79d$@ipNKyp!Ezw4MbV z)IS@WYSkz#%K~&{eH+xYwm!VZ=J~}PUUpZ0Sb|IGdYRikZ1LmjV#EWEBICG;yCigV z8t<5If2Y)6{VrbndH;BTKkzR8g~Cte*LXiAqeZIV<(5;LeQCyBCKMugBf~Es5`Xc zMs56A++VXe#Eo}gJflVfQhIiT-{ohL=3^9U6v`T~BL=%Co?!Ww#T6Tsl%g1!Nm^)I z&}uhTSDrr@Kmp^d6L`QyWnGxW&!O8*Z~b&%rBKZ1K-2&f(&4ie&Xy#bTFkEO16wPQ zanCd>EXA~TWqf`Y@|d&AcEdA?Itu@XzP2T;O9cd(*F$phmJvF+5=qC6c30owAGoAq0E zy@%i1`AaJrwQUtd7D}=+uyx+)p|#MUUMBIaSrb5Ug>}EcXx+>qrEU}jaD(G{D9DoO zZh@@2JQ0`AFQ_D7JedIvr%xqJvSBP5sPNvnrn7Eof{6ICT4o0A?0vm9PEFSrW4$-& zZB3rowJ94&7#7C(ibLZoO~iE_Kcl^=4x>H4)xgBA`%?f#^?21777Z4+g2752>&cN- zeRigFs`wb!Uk3~3YpYD7&2yt4)rmQGjs6_RR2JX4u;S5$69!6GmGa4Eo z+|k8&V1Yk+xsnxV*!EvVBIf3~WmuK6jvqOe`>D1d&I(Wn`!x+b!k$q`(^sx@Fnf`J z4dT@xx*l6Mr7URJqbo#oeQnG*_Be(F1@b0E#oQG;LX z=DI7`qBVw>(TI_gHqUNNEMJnKq4I8TMR5$~s(*xzbRb&OTSE)xLm|n>1Mp5;3y#>C z|31Hy-38`%fu`qbU;^n2ElyaU&!6|nN^R{iVx>;mDKH6FuY4~Iy8nc*UxwO3zw^){ zdC^Bwf4(TX+#Bb1Q+bg89{z z@0InQnW`SW%eDbl%d7Wv=L>TiR<=P4&rGFQhjDN2VTx=NeL5xF#z*6{G|xzQh;$+qnJ=}$r9ho-2P`fbQZFB3clG@(tP zry(y;22f$wRkMins`d%f-xdW-Aud}D+)jeECV9b)o1x!pq=UAiM>kIOd8#N|5w~f5 z_2+yj0_7c>3KK~L>~_YM@810ueb>uWyPcFxz}fAEwQyzFsxp+%Qp~v zh!ASgv-A<~zUONbpwDY_BE0Nly?{URmA($Vkq{8{RM{w9IscHR`j^`I?@!#fFAHkk zyt#H>uzd9j<@xVyz4V>8873CYm}^YJ^ljH^+kHIFHa=e}XLmz3wCy;jCIk^?K7ADb z)WN5uAFES)@%hW58H1MPW8Ky$2Itr!Dm$MZb;}ntT#_upgx?zBqc$?J+Hx*otoixt zn9mYkI;-%<=kOR0!Jctd)ukV1=0A#Bue(kD(7=P`JsY;R z^5l(-gh~)drb1GWMhzCzWlfD9ogf!*l3<$MWB?W^8u7e?BFG zm+@}gTJ>d6uBZVCW(4i%_lnP|ZiS%*);L+be*vY0<_wjnTBwu|7S%2Vkr-994I6ja zji0noTx@Zb@`?f~Fr?xX1plBpnov}vkfuw$TQoC4?qB>peatu1aoT`vpvphR6uEL0O#lzcZn$FrvU-p8bc3hH7@|j&F<4&1 zx@v2SSV`VYSdlbfjZWC4IbSNl^o@%{f5Uh=9)bSDza`qg4Q=3>z8F~r1mZn%_~px& z5@bz6U!|p%$VkJ8>x%*g>yOq#)EeY`&-hYE@`GsN6BPns;-qqRtng=Lfhn;xi@iy4 z_@9MW@dk8n|H-<45&z$q|NoE%AMr}Hy-k-euAe^5m%m_T6S9TfAErQ*$Assz^0}K` zQC(ejzzU^MSEQkQXEqg!C;LnJ!Sr7ym%6Xg8tH{uTC>`Sg8ZbylMUQmFf(GI<;)F zH>~l#hW7)X`tK_2{7<-Xfh*h><|E28WHnxE_C=J)pLe5Mn(rmK)IT|+fAePh^2Bh? zzL#E!cjpde=&V-OsUp>6J(XdNm$lxN%lc_Igc+eq*pp{nV{73K#FbJ#PYq`9^S7mKb#6wB( z4Q!WxqmDMTHH?y{e3M-x#}V|mvC|80IBdFlGJ?JNW2_u_uX{^Kv^*S)FPRO<&W?3M zHNBZ@{JOC-F%$p~xv!J2dB77VRF$J$NXoFee1pg*AMEk2<)O2X6=GswWJt%vx?rt* zw0>&jL`Hkp49LtiQT?^__wxtq%dZyE5;kZ$N}BcxTX-XM2#es;QBSDbkH?W@1~MOW`pgJu{1@iZETz`<#kHQ zLF1(;I74JWYUwpf1I4bgz71{7Mg8;Jxt6(#v%WQtsgJ#O|Gw9wKg*=X@_*#37H&7sldA1v}0mrtl-A^OzCx74xyIT zI??FKRUtcA1VlEj3K1B*p{2I2Do{CSad8O-GPL&cAC0PpRWuU8RKdUDkovMIFMY#v zUd!*G^B96g*I9wJGZek`Py#ernv0`H3>pjmPVg+R)B;=Ns)0*`wSkUu9iq;&vN9|0 zy@s%vJFzuN3hlMES1Yv3Iul@ge86BW zmyW*$Okt|8>H}gl7r#IspPm>$>p<1=A|!i0PBGs+AMt;PBmM^#`eIarccA#&-v4bM zCX4c1D%!z3*fqx;MTm9Fi@YTJkG#!On97S$wW^+(Kf-j~At4&EFna0WV7dw0M4Kn2 z!gOvy%?4`aw(_twWqAn+8xDa&&nJ(VhVI(=)wFFZNG>Za%V>H*E>0Nr_pvN=YovOc=3JW9DE3+gdelGBBL^{5@LnfsV zK>o9>!jo2!T$j71UpH=-C_Lz0`@0#1dQ9_4O{FRmQ&|CjA^5oEjTqOo*i(M>&Xvrz z%e8+>c&oqQ^uTzqrNhna+hiR(RT!zwh!-D){F<-|Xbd#jBu_g6HJVy0_&oZ>S4vJb z==66C17vyn$jY8@HLDC)1spZR9zO;i4y1|f9#xzOpw{|ky3Sqa$3R&+YhpYh3wS)K zTEAWCx9rGG3%3MzX{P3ax!iuf)=))TKYYOq)P}2%Meto$VT!s{O92p@eSusZDvO4E z^5Xwvqw71pE@Fs71533Xp1A9i8B@S*SYnKUX-emWc29b|I zC@Cm5&f214@P$&5Fw@C99NvZF!oZ_1<`G+tns~ZsR+5DtOD#1E2SHVRBwOZpio%b` zS?7~cj68cn04KlV`AxyxPIm*}GZAepJ*p@QBPju|*{t7>!)?@|jZ5b_1fO1DYjXzw zZujy!J^Jwi&O%!;4LeHdy1H?2_qvW1!*~W;))P?8z>4jyoZ#TM zPQXdkvV6WVM0O1SILV-%95bC$!kUA-uu*TB@xJ)eh>&mmKDgW!(nLSCiPUmn=Tx`S6xHz#lgTh?~dx) ziruj6qc0&L$D?5azRoTo4!aqfq3K95%!nfTXi`}0XnE+PbK~Maasg6YHgO>~8ScXq zO{dBC&c`8m`9lYp%E_4Ji@)=T0sGXz+?*{lE7{WWEtpS#I8}dmq^wT9|8K0OuF$M5 z{;`_25?V`W0y${m5o7g%&GB+?VFZrZz6O_ijRQL4#NAWxdf1|fJIvWS5Zz7@fkyEd ztW_GfhBS_{DI`BI%iQsu;HVc8b`tP^OGVjLJh$5!@J;xBPxKeh=ptrW-OBFv&TkN3 z_k16-okGx+G@B(ag+o0o;wxga-n(R_2nCVkQ=?b)9$sQwKh)$vC8gEdHrZFnpAJho z)cRPL;~tP}dh~dDZBN7QTja>5YP}eYA#$oF69n3 z?xwKesXK58!)DkI4O9+;jk_*%rD$`e3IRn$CT7P+pRvG@rWWU57dsimH%J`Brg!?N zn;cvDrMEISum@Ivy%j6RLMb1CIbJfi=otT_s?r=ltbKY#nK?xvqUOl1s&!uwkEG+Z zn^%7mW%J*)!GBVaCEZ&@loBe$TUS>T0m4_1#pvGn~ZLxGk z6zAhSGnrqex!`03ZBqYCcmF${nRB#$-s`l>><}#9{cKn)3}xYFfV9ZhSjbML4tjjS z=Kh7!c*R&hNw9gUx9B)VA8sZo$Xoy1SNNBcK* z5;Au@4i9LKbUd2R8`y)x+d-2mOiW$7iH9Fv(cKJsoYQn&#$>WKEGLNTK4Pg*)|0SZ z{I|((#~jp|kuPErpCzHKkp!RcG5(cCwarMG1e$kMF}b8?4L!e#c3+W{SQ?u`N?SGz z?uE7m@>$m<24^48KT)@Z+0A5=TBDwA0^kicjnK#0dE(dsnF#&&3}P_9lANXuoxSNq zzWh%qb1>mrb)~Cj?7aE^QNEyqgjw+rw)spPA)@+p}M0D9$Gfe80IEAe> zCN=PbNTfq0P1_@DO}Rp_onp2&Ni;s<}LYP?UhOH2%CUBsylJ! znAC;OiFGOCia#y~7m6i=Q3=y=;EyX~pCwOJX-h*wq8v>tt09Chl+=i}lPy>Wn{S=Y z5GRU2oApaF!eUxuktW_Z}9(HI(&!L>{A=H3}O(pn%sE-vBju z**6`$jj!wYJCs{xEmVBoruNP&=+ICzby1@q=^+>R`uOt%Kx5-Wp$)*!qJO)w{nala zr9INVn7@x9z6J_KA~mXCzB+w6q%|jA5w-OAENn&M$aJc-!)HTj<*CDXz+$36%n&KO zk$)|^Feg1nL9&^YJm*XQ*3HbGL%;%z=ST+Jr}Rz^q`anJ%@h^x_I~!PJ5%vm1dD`3 zUx3hE{&psc$fJ^v5_c)MMySEufL!hVh4=nk=hyGeeYO70lTT$JYr9-4#K)^(4JbT$ zLSscI`x{e~24{Z$8DuJi1S#FA0UaE1EKfJa<_3xPN`}rNNx9PoEo(Vf+vvfe61~Oy zblWjME49_jJWC3JPyAu7r4_SpUQ@~HxbwwPeb8$$hMg+@Jib#B{}Wz0R+e`2QYYJ& z;c`%njTnL!J%QR=3Mh(?45LfSS+pn6)=&$nP>c2smO@yg5-y*Meus;R$#|PL<>33W zg@GXo>L;OUCH}{C`g&UM2cf6N&h~b@R3vM;oSgZnwd9Z18Gox-Bk{iN^wdjXf4$uQ zJAutUxN-O%qvta0#CCZkEWBMl>U<*z{=J0v-{I5#0et@knEwxY_%|xf_98B;n@>4M zdv`&JJ0#)Tt4oG8aP3mpdvpI%;`wFx?J590Bp;vsMHYmZ`E#F=%SC;CP43$VAuaHj zG8((zWB*strNUFUdQ(jdZs5v3ZwLzhu&NZZgbCY(39nyxJ`)&x2630EB4DRNAU&pk zLPCNWcKCjzyyMk2ROj$rm6g8XXhm;+ohT;nL|rhcr{(WOc*Q7KC4Q*Eu>thO*{hmG zkxuVhOZy%>oILgoO}05m19($Kzz5fzCg%oU<~`v)TD%lh-xQCipj_Z^0G!EP8`jqr zo7P_bEmo<(EGzaCE}oUCgpfrZ-jz^O?Y)lz82Be(w6=sq0cFIPp2J_h`CMFfGAnERD|B>R zu#@t~Q*qLi`Iu_>>cS{l|LT=Xdv%qS&5}^>t(aBOb;?6iE5b@ai+5uVO!WLGr1TAE zy!udXEko9MH@JVoA8qMDh}7d=wO**8t}?jfx^{bPI-DqdD8Ekq zOUudW!O(_T5H|N8Z@AT^^t=5?C<6L+MO)Z4e8+1<^CJ^PX&OW&2-mic-T zqI>_iBLJiN*RDBRXlTxY&`6HXy`d90JKy)CW9Zc#QK8j`bGALn0Q0e_(Px-Z?UbS) zX<`-yfUpTaw5JJw^V1L&C8ZzkQmJ|=Rb|qAl=F&<5H}Z*gJ*aOFt9PQXpoT9TT0|_ zqypK@wC-5=Kj?rRB;4X1$%}s?(5vSRf z0Y(S}BDJBRr1Wf6H&9KcH$9$1vzQeE*#r0g2{Zj}tKJ-#=DViOzFVtIU0QPDbLm%>eD|si~nE+@kP5X@`gA zFAK7*5C}vvrcL#mMk) zv}m>KiUoKwQdn!H(iHZMSA=5t=Hc0(4?=x46k@g38g^#(4q4s}7P@ms63hxB@#gwQ27XNgBPr zG1+Y=eqV(%+&IEFF;(MYM~OW~c_V^o-aHPe z=+cHeQ`1^y6LtdRg5lPV9`2;TLy~{g+bEetnmo_w1-Z7TBgEUEWo6fJp4T;On7_CJ zn?_PNZdI9OU9`5hh!%P-FnIj_8NUo<{P;%yCBm5cDV;J)YmYQQh&Mev|G=mxf>@G1FuJ4Z;o+#7kR$I6;8w@S}#M=L0- ztgH)A`m)F6GB6`x5!L^e&$4b}J9fY0!oL#OH(VT~0X1^Z)nwaW%}{*R|Kr@ScM}JK zJN5E5R0&4Q#9AM3wha(%CAO*?E8QC`FVE$8nnWI(UkQ4BK61l`aa54#{aAiFv|8GY z_kEeX$~~d_MU>|D(-&~6$}{?A?ux{|cx%N6aM8AwW^gdonJ04$f0AJR1-@|{E`<_- zbILZ~CYjjSSpShE=CgO6l%>s>V!05a@%5y+k%$;*S?c2br$zeqpeovMUPuNQ8JAv} z&3`cmJ7&nI#PD(`{ocAQr{Sy9FT()~-W8B^E<5H6*`YzcYxjorYq!4DKM~Gl275Ab z2hFM_`y(0`mS44D>K#(7Jm@7=2QO#KqyDa{b^E;A>BFD;Z}`U6Lrp$E9!=}a2S6!< z$JhDo=Pwr~sLk*e9Ba4R;-;xa|D9CudtylK?15<7{%ZsCI=No-^d3Z+G1ve@85qV%kR4v zTE^p6=d!(xop{NJIedNi>A4ik`DzLFInUK}+$PMuM&8B-w-+ncbDts-Y*>fp;W+zz z2*kn(4Ug#(x9-S6GI7woLbpR&|b?cMjl z?7Km8vfwz0_o%)*LS5;hJ5ta|li~pB-TI6pDV3->#l)_BaI)CEl$zh6ptYS^5R>Y% zWL~zuu3g3|0G5XRXf|@uYhE|BI1u=CdMX$_QR|-8zq)81l8zr|9udi=$+l^$B7f~z z07DTmu{V2-FUf3gch|W#LLRi&Lvy%j6YtHE52Pj`BE-E|_Q7LKeDcQsk;c*MOPV03 zQNRC=+?ig<+wXX|u73llczhCD!(~(dY8P>rO@ZXB1Om~O7^&l-@uN?3oL9t(AHxLQ zE%v;ZWAZhl5s2dn3mK{u9)nXgVQ+gRdbM$tdkQhx{rMx~Yv`s>kUZ@+DVqlgl&O$2*RBmJwI_E~J$*x~T~w`+4;6 z%bQ(s^-@Wj$ioBmlVU%8ZbEqq24X4=&3Cx$k7w^M%`f=Q0ToXB=i*2LffYIe?Q_7<;g?2BTfIr>Lhr3J z8O_nJB9imXJiy~tQ)hHLe&<}~rmDltU6eIP9g6i5{_NrEJ~nE`C}Uml!Sk_9AqQNq zgF&aU#SyXk8P*r=yVH}Y)5?%0)Tm%E3&_;7A#Q`6dHj%la}Zl}HfY}5TNw}FuRW<>9zSa7Rfih|X+@!@LpuK!|5g&;HM#B+i5#aEWXH( z7ylI(KM&;g^$ef>wsG&J-fqyx<+loi)}=0n8>x>Oc_yk{FqI4)tPYn*fVP@AR|I!D zHzBg6rvo-a58K>#T)04|AFK4PjYLcUwNS`1pYBZyI5G_eh&%UmpC)DPuUaeSF7%?g z6E!%Y`$!Zc^%?`Bp$lmJ5Kjj^H&Ibc&P}+vyUnQhvwB=Rn7qnauHW;UM@V+dy!bFixkR=d|e?=mEdpC3wrS2r#wN7QfhlU*Y z{Cw*z>TY9MP78lEr#*Y{at%wnw-B>1s`HeS(P^~0@?g0nulY`Oa$|Uqh?B3ZWX6#F z7>d*n>wapJd#*ZxsVbeNC3K#44w(*CEW0OyM12WW3Aal%vIIHg@1!`J-qO3~QQLEw0Y+ z0Q!Pv7y9K;{{W;up$@A(e`ytj}% zuVHAday2Ml}Id%=)h~O zbv4@<(t7&3O_(8?OMedsL3$0^mzb-fR}qcjn%n)lEbPI^Nz+{i_EaEzP8c zPOEAbF9e57K+GC?$^3%4UZHGH>u?zqCzw%xE z|E-hyPh0o^Zc{|vzv82!+l+vYFQF6TEJq66T>)Lz>8ZM<>z4+k=~gNF)(muSi!Fyy z;7B1w7}tBu^F5;+r#^6GeqSBPE&&yd**d z^V|sku5vKNyH{UJ{o-eDH$D6Q?MG3WkJ*dy4WN2Hj932dyI`L?)q@|=(zWle-wt7l zq;QjUCL+tUO8iO`ecfk+>X7d7&b?!yJF&N4m>xOqR{d1^iHIWfks|wLwOf!}UOvY4 zdJOk=2)_7%{>0mJkXQcQmv1O`NPwrw`@1uaQcZ`C&ny#JBgEblId4!c5`|Rr%BQBj zlVgPh97Ca|0}t8bHLt+T>4j# z(ubzBQr#$5X7StN6B8S;bPs6+KV^5$vq`H)Bbt!pCnCHZ7DS%?_MLAx#jO%kKYBfx zHV;NLMUW-DXqs!JE<9|$^DdB#oA(;{THIiWck}; zk93Q~I~%dgU%x+C#IP?t=_4pRoA3(DvGM{fleU?P^)o&Y^0I_{Bx?5?J|gt7N({Gh zAb0x6eI}OZ_p#v<+8%-5i`CJH>=kXgaLa**kN`Fk8eZG&X*69f!J`)7@&FYBPf7h* zt2;@Y?C^fm;o+K{of~ntWumi-cd?-ugylMVOL2HV+3$=2|36ynjjAgvJBIf}+OYTJ zZ&35uj+I{_tYTnrlNDW@c}q@RS`G$xejc5T{4E}^u@Rn`vGwT+uYCXWgf;+LtPOwvcD%<@4l)th>lQIZHR zj{)&O<`;7Qgrg)wM$PufngfP*EYF)8QwXa>hG+ieVPHeuem0LYsVMB;dK~lF$??E` zuXJW>yWjZd2uBf1Znp6FjmqyHVjT`>W_hxaM*R<@=~k zZTIWMil2~YTfGY&|EzqII~|4a0L!u17;0%^TS|eo^j;P;{OV>r2I&9z&AH^X|&7nKmkHAi4T z9UI`m3)2r`*O9G+nvU+!*|o6(fyui%BIdCOJb$F;bu8} zxBHE-rE!{VXKzEc&=-;*!J8lm_$|xV?Ur3l)%jv%9ot1rgy0jV15thbZ;akR_CE&* zex9fHU`h9sC-I=UBCT*nuo6IsX^eZ4h=$94u9XRFcr|jwvTAI0piHl4Z zl@n)LK^TsL(2*;8aNp{`dB!Ic!~f;Nf-e4K0#74l8`%ES$O-IQJkeZTQIl_*QW0mK z(I$Y4PD3}Ha}>2EL-2?-qhy@gDQv=|3xryHX#SnF?}26g3?)cD&pmGh_^fIY>n28nanma{ zKR(=WNZX5RTXw?m_9oqFbhOoT77w(H1UJ)_3)>*>d9`ATtc`jAe$H@|n z6WhGV-E&*-;Q-lE{&j@er%#Z4@yED8g}y^r$GK>cXomd$_7pJd50PEtW{MzNIccij z=c~dz&qFnPb2U!qrrrQc`Ux=V0}IS`Edy+)Jp4Q~;Wm@2jC6BeKMk*hC*KW<$l4$`Vmo;7T!W)bOqK5S*<2E> z0LH>!M>EP@slPJm1dspsgG4`^6tqco*g(`W$G}Sio*C#|0O$VMTFqYdoR2C_^IZ&BWsRdO>z%7mt|CWRjuB>>Y}~ zh`z7yUCYy8F620fy%vO3csfnd^o(T2(H2dZfjCpfPRAL{Q!!YlT3Q?ybjo6F{Gyd4 z{u@_s8P?|VMUVbk3WWm23KTC;plFIaw77c+o+81uxSs;W-JRm@?gw`$?gS5RArSoL z-21=x!~K{iPu|Qsd(Z4yd#%045LNZF`F4bx>pM-7<(JWw*d%8)&m-CFmjf|Sow@S; zRpm-tZbCreFUi*a{;#K$DuB2sh(15@+fI_{SWO{E1v&7#G-`;m?rw)@gYPot1eYOb zOe$ChPhOeQTwj49KSw9>`z0w`H0&14IP{B6WZtbIir=4(-CK+h^KYeoTXo?4s7ktP zxQijOY3E=KMjt*@#tQ8* zQwqNH7f-NI1MVPA5yy2Vhyv>^TfurwLA-A3y4qidZ`47~}a~ z^t>Xx_}G2cZ#00O>mxyP_k&H|@Tx~0ZOFj==whQ{3J4kx;3UjF#aP&7sAjRf#NIR% zY-5r=7PiVOSu{4*^1ol$fAI)A46Xy*Bzs?{nKBwq24}I)rbw+*LprBaRE{`{^e#6- zAR9BBYe#|Y?+s45$(F8DvDt`D_Tj3~jr%N6Y|Y(VN_#Y440g)>HMMrF4=}q&cDOSa zxMy~%uFcgTMOU}3#)NCEJr?8~T$8)Ivs)n~e-PxPAx;yHUzE1ha;ssC@^QBHwnP1q zj=S83bq>>dB>@|BGv3465oZ!^v~u~WOA+@OuAZx(mYz*U0w_AqWoqLECg}9@M|FZ# zJ)bjV1^w4tOy<~>*a{zqNGR0XfXVQ%_K=hB|2RAo16l^k;j!Vqd1C(3TD#XJAnnuV z`=2&YX?@kAt~#FEhpLx$KgQeqpk?(-n|HQPTZQXb>a)eNOcm;x9SiPj8BF{gbv&R& z^^Cr9BdD7}R=eG7u$^Gjvs$yi)k#_3;)Hp9E6`oQb^7EG^|Q`4I!P43M}$CQz^)Bl z^-a)Iun-dq3yUA{S(;-0j)Q(HDsuHjty(nme&M8KiTI&0ijU=_peSu(|J*sHtIfRI zq%RLOmh&@?g~q1ru?YdMO4-(hgbWi9Wd(o6#Qu%VkhpxRsPFxC$x>m)d#&q=YL4dm zp|Tr*musKAKJJl*Kk^9)9F3-KZ+fYeZdVMyEw+P zYNR~;_hz|!B{InUz00-Aap_#pE%(pnD!t3I;K+PZZ>?X-Tn#zPB*MO4yC>2)lqEIm z7s6G0>`^bfZpC~?BI&gz_H!rATq-NbzJ+aG^;!CS6X=FpOIdYFk1Zc~td;0SZ)0Zp zocgSjjt$&+6VXn}P{86=?J3G~gy4OcU(|ERT+3Ro?}}pLA7C;AHl$COJMW~O5MTah zxB-s)FU{LBQ>nyc)f_9(G#C^2M*4r#b?8h|xonaD4lxR>bvW%_v+vTbp?iK3TY>OF z*)}fj(|4#;-FJ}b{0k==DQ!pVK#CjU)sJF&5wvSY;0|Un78dIp!VG}a&Q|xJ8$##l zlD9VELyC80Am4vBoizHgjQ=vd#f?rzA*QhIVAE6qstWgIz5Us~Y|FQpVyjP1!Rza# zb+TF-Qtp-Lsu7cRjMtr0bE-8oJ5S?bp%yL2Cc+r8jG8 zdzCpb{;%JRGuu>FgHla9r9x*GEQ(1J90hf&TC7VURwRXhPmt#k%Mt&1QiX1<$$AqS zAIC_hOW{z_(9*78L{V)zS!N;*TQJ@l|5*lJuV|+Tx+*}QZ=&91EZ&oKCTZRfn#X@Q z&(wf1mgm|iM0Z2#@=PPGNDp196I3sPW@T!x?6luzi#!KTvyz51Q0X>*GIn)~t2)L$ zQ36_p&3CdkrdwBCPZOYm7lv0`GbP9;7fv}iOI)R>z+M||qvn@9CL$`ULS#~=;geeV zvfhixSbTxJ1E#kLb*{Bl$QM^`DayKc@k^sCCA^h4B?%$Bt=#bFEz=FcH&wRltlqux z)_k14`b}eJc*m3Qu&6wmeJdeUXodQ}pxL}YYu;?9j9KwW>Rfs7<4gx{E5=l|Lp7(e zGLCdBk;FB)5JItgZU=4kb&W(S+>|AXWR=Rsi1LF}h_-3SZd>?7HP?^r2#Z+k8h@;z zyiV3r!)x!E9;53YOXBjBLL1w)WXTcpkr69j%d2E|hhTDe0&GHY#Vz{6yMuXU&g?T9 zvjk?TcEO(Jw2k}OS{s+fA9--CI?w{B;r>ZeT6XC71ty4GbO?m7YHGS&{dEm%`21}q zEr!vgqO^*Jn2;--8JgU2_77rgkdX}Y@_Kh{Tf38So;4n!cqjA+*zCsK`8lz+NF&$iwnmrfcHV#)OgL>gCDM&4A8Dy26IG;U5Fa9L_;->z{1 zlZ1LCvy9O-_e`zlh_jylJs7QUjyx?NB#;$h`a6dND6Mu~k(HVC1$bifm+5(|$49pQ z85TOF5ml5RFcC;@s!gRyd%PSP;WVu}Q8h{^KBk^qnv+mR!=ja$ht4*}FxoG-KJ9=Y z$|2fJ=QDbU6!ol5RT@5ijegnyi~V4-y4mP!zj~+2rWKpWg5&&1K1o;C_RnS=)!$p0 z4^4s1DHDI@$)5_hqiM&tLR7HhL`20^blRMNZop=53#Iw_6lDBA(IjxmqEQ?R-mGaQ zFXgy}I(G!DVQ`uYOB$0_gd-+X+YJ0i$|sP8-O4rBbt3BM#Q#77rbOg~*&5&Mr2iYa zm&i_$GV#H37F2a?WXOa_EmhE`kBvM#KrfmoSX@w>VS)s#tj)8wF`-3JJO73ROyKir z0T&+>9!sO+f8KpPT^_AEt6)>te{Za5mozyG?Ph&y&HGELZNDr4eKA-$n&J^{>k*Vp zJ>}Ypq+K(!%@bJ{4C1l5@zJ9TfAFx_PwpQ%E6hlkZDX&nCH&7VMq(n#rs#vzEh<>Q zj-=QfNXMb+^w)zccXlC|ZWz{?;J3+!u zc(qINjxs*iOJ~Z!5x}cL-KY;~hvVQgK3cg7ax+>mD=UjCX!`2=5VyiNRzv4!SbFqY z5|fjXb?$vet1Y58RS>SZ5w@G9m82g{k`RY;T`C%z>{c@BaU)myiII~}Ya4*&YrI!S zrZvKOe2f+Sji*BI4zlQIy;<5|nfc z1m1Eu%gnYJ;VxHv-7hyd{Z{*kK(Jcee`PG<;blGzo%D*{k$-Ve8i0B8;L1!`5nk#Q zNc~GH!j|*0A+ZcBEE~+*Od-Vo5S{G3g z>Q-|(3-8RQQr=$NbGvNTq`&M^B#Nh1awMg|S|*7%NX$2QR)@3R|Z z8J1amtlUnh_}K}Bg~>*gzau`vhzRl69^M<2$}|bREN>hkV@Q4)=h4hA5P2~Dtyc{Y)TU_q!ny5Ki*&ksyagvLPy;GY z7fj=0hY;vFr8tq=nxuUG(MtWKp*fMdcgdM|%^EfY3&@wml|O>hc$z`@y#%t|9Mvzj zb~krM$s&56OPJ+e3=DylBdhU-FV}St=iMvVwubf)rb>!SyVS)saokl$Kvf{+^@??V zaktONXqr8`cX;KFvs71r-d^tHVZgf!(s^xnm&Prf`$0e>M#MX~EN1HLXgr1l3R=iv z@d|Q6jSv8;87D)7AIz*D5WJ&(eRQC-v*AoGF$R3P8^ql8+eK41dZHZ{*e_{h_f z{JcLd>isNtY<^g|Q%_;2Qq}fdsB& zRw`#*Lxkh_8Wx=xd%S43&mP-UeBWL&fFUEuEFCk(UA>kwU&=y_bxHxoBs2QDKYqlC z6^g^1tp?QZwvOf?3KFnFH(NA~h6$FZ{hBBkVw}pVQ^M~x$HcoNZAkpmj*)ag3zl@{ zmBgf#L7YW-tLRr%B>s2?$k!B6=EhZgb8N>7zj1Y393~pj=qEkYc9NHe)(% zT5*-BJi9cGqau%?O&aTns?0w7PCP7uhBUwn$N7Uc6cRGlQJuZiZt8A4-I|Q$z>#To z_uK0|yXT*+&19D(0EY)lZ1@+$sEO) zKiQqjiy|z|=615CmQ_JzwwU*(HGlIkMEw2BY^N5oWE(*?jk33UTH-evj~=g5?1kIG ztf{=}W_Q%RoB#X|K7Gx82kQL%9dEs>HFNt(&Fk-1^FgB5CL?6Z?GrYMusf=|N}|34 zOTePqD+-ibc{@WR$;5-toVWws{|z)qNcrq2AdT@h5|;|M@(lduMDSB)B83O=7ZhWfNY~e-w!g2s8U}7_EBc@+4qpwj}j3scMH~ zfz28cq>6RWR^Brqd*84}rEJh$yWQq*x8b_reInpAg+?quU$}jvi4NYSDz)5hm^KC| z6FOni200u0?plA_eG?~rRws|qi;I(t_13ZVLkLqms(brGbN1-eTAcIlD*1GTeEpEl zMo5lJxex5|IZgEw=ulyEXtVDxD4{kg0}f#esC6v@k{L6s;>vJJHx z&--Yf`BI_7$8IT|4TEi}PXrgi7@ zRza@25pT2{n{BaF%)Mv3dLCzPE?0N7H z7bIXFpG2-du*FY9+<{*L^Rfb<>BE#tMmOi%Dpu|(GZT?4nMxQ%F!x1lM2kBwgu&gu z7GYcUc$5j-W&X7=6e0k@e2Ii?gJ^o~UH(eijW#soi{pNJLMwXXPEF9?YUFmH@Gnk; zh($syrI(Tp(!&Vi=XKw$!vD9&-=_&KD9D~v<{&@ZP^)cGCD5Yea-Bw`{Vl|Myrdf9 z;gd`6IeFmf`Y7AmOO;NB)94lbO=w|DK1MlP7?SoWXac`TDh7Gg@p{mufPd(;tn3@$ zJ-(btZ5o9+40BeKBD&x`! zZ#h-*iTlb%>z(h*W4{sG4d=1}&F2H25921W(yaC!*RW`V`t~;NoH?jIQi@IQxJ>#F zF?I=-uKMn7JQJ!9{k!AnN!2%80D88QEo8eXlx<&!O>Bh?s-&?Lc6A>S6LL1~EMeuF zgYMPUwG5gmIt6`3K6r+LUxI1;Z1W+U)lZzEFq!KzL(jol|8(*tL4yoeYv8n?D1)E1 z`O-x>y6&O3>Vdr{W>BAx0D?g`Cn!gI4PrbPie8K?R9|=X^yHmcOsEI^3ESc}pY+h1 zxj+~JBU}RdLuL&c-4(a~mb7f<#Njlz>hD%jfIjkYno#Dm*m~WZE)Kd0i}Xb?JwJVZ z$l1U@rBp>E`sow zrR4!B>fxQ}=z-Yt?#^dI0M>lyeteJFf^!@3o}oRKFMG4hhnS=8ict?Xp} zdFAq>M8wui(pCSP2P%pG)N|d*FJY9vL4WeU+>;U6l3Cg4$L`r;4z7(pWM&5MP+eWQ zSuN*!NDc9Mh(v+ba@Abt-cupbAksy+^cO2R1)tsicqnrh=!)3Fqi5&IgEC);`)RHZ zaDzEUEJm9mzP+wtVVV1wokl7yKTIoQw~@`2V+9xu)=NQL5#gPC{aVN1dy-Wj%=-Lg zJ(1ti-sDz3hKYQ(b(e^v8a~fm;%*BJ17|L>4~0^IF64BO$Xs!wZ4qkfwdq_Xh>DjO zuie?)ndcem{Nr&qQY16}C@Hn{XY>SMBh|x|`<63PZfXX7$W;|X*6U=_$8QRiEJtlD zB6El`0*O{bb*h$a(zO~3MaV(?qFI(?iwy@AFYVp1H#Tn+Wwo(HE|Vr=FFG@W zmXp9xbb&YL0W$T6JI#(#H zJ8@}k3X{bvN-c-9i?Nb+dsuLEcD{bc_P(nrD|W(5S-o^$h#@gD3wf<2|G*IFsNkU{ ztB=D#COj!h2`?TJ$}mSEyVCMi4D5jz<=T3s1MGz=adscB;i0Hw(v{nH!@A@v+`c#X6Zz6*m1r}@y`d4SvfjlBe^|UMze&Alm!-6@l|IzLz@pkUO zuFXIOnh&wDX;Vsd;)k3VhOWwn?Te{HuTS>`IgLuox)!AFMhfUpIfx>2?`M*N{W^Nw zoX7JNsi=F`;!L(qrPpS)?)IjeF5^e9D~ibYwEz7V|1L6(yVrk+`6Z;z-X+xKi?lU1 zAFI;rb{m*mfQ#E@@9yG{{8sMkkgDqyncvDMYaBNlriPLp2Oo7)J4L!hxs`l`)_RHr zUF-~sfxf;+;hrtF9sOqo#jKi1zKgq5JWds%dr3yJhhl(FTYl41wtUcIp+^JIReU_} z6@qn-2NertP#GK7^*R*#?l=2OJp%M8oYA8A7+riY(gJZ972Yu6O}00vQ3iO^+MjX9 zpACKD0xpLgU;Ez+a27acqx6U<5OyZ^F_OV*#G5DBYfzk#K`;-VrQfMNcA0YRGZs9} zvS6TOA(QP5E^p%#ZVu6Xif&kl>pXn7-$cAWTxiHPE;Y&+G#FO# z>i%OF6mwaZeS0#B2adZ6RYz=fL?z`iTVWS!Cp3LWY;D^m`MfHvv`^qLXxHHQ9BE{T zl-|0$3SVJV_!O1;qSufJ)z`sxJqnohxzpShgQ9VNS!9G6mQ^#=Eow6bV|f8|vN}I; zPQmxsk6-@E(n?^`PPE0NdH!aa1B!p0lheIEhST2*5Fz+vito!-URu8r6fe>ZUR^gY zk{*ak`y|AP+j)*+6AC+=Bb0)>KF;TGjBGRdJt|n}NERkvCh273P0c0m`l^?(%^zf7 z{+G8iAc1?x&bowme`fZj+aHt;dDjjab+kR*mT($vvlR9;0>x(PSbiKvcH252mwe`J zf6vp%8C|5&{ya@i{U7S?fa!*+vZBf-jePF=p-Q8TWm8cL3<(@qQtRF5O#M6tU91SN z#a51_Fv-(KuiMvbfLddSw4AqtUY7MvI1dmFygTyMZ<;k_HG>Q@|9LgOfe7(vkzCxt zb}Bp)$+W<+q&a3oAZ34&e(lwhIi>VmpauQ$L8{9_e8~FUf}dVVr-B)_21)R>mzt@A z=mP&Sb^SmAtDL-w_!wredZax0?ROKM9Oe3DQ{M^Lty|isreH^hksoEFMjdU5_*clQ zD%v$?4#;(Jk|+2BwRpJ=7r|5r9Z46rctgHb=L9S$mRho95t0YPe=Z!8a*$ja0nX)0i}a>E?m{Mw1pMoUpWiL9(+a1{_>|DN4u+80`>Ad;e*HL4c3d}B zhI5TVfDtE_)o0&+UQvt2Oda@dDl0yJJ##WT9}B8A>w7&=laygP(45oUOdPAlN>Z#f zvDP9ozCT>A_X;tZSa9N1ds5npT^v@?RtGCstWXAb)IK|@yPmcr;?cb+s1{iyWn`iv z8dlO{x!Jjk(f=G3mDZzEXWT;_9a+sgDy~PpP@8oCnK9+~qFt@7mA1B;p1$S_A*kP% zQXzqdo{9kEl{d5u&d(MW=JuIAf0~cy&=vC3b}I2$azVlR9!V|Dyp5jsAxaU^*#rtt zt2bQJDfW^}3tZFcD)44>D;Tr+51ky=PxuS3 zuv-`7d+_1<{$KRZEj8Z03bRw77dsj2=PXlp3cRY&bn2v<$pyh!ehP|8JR%#B7M7bz zprUEMIbbDr^;D|nJf_%Q)DK3x{wy6gYXOiy^>bUEuptK10K{CEx2G4jW6V`!!oiL8 z$e+#5Bjf;5Rydz?mPt7-ChXetFG{*?l0hDp1tHsOrE; z!7Sfe`Eiws>D2f1dr9c}>a48WL&Np4 zpmUa2*i|)HtPw0y!@M(j=X#1_NtANL+z0q5hR~bcXb4Y zy@iWsg*1;Fxd(>2#ddVER}X5%_Tkd!tvC4cQ&*4HPKm!mzFTNbmR2#iav)Kb-0}19K-p!_m!S`URfMi<8TcRWZUqjpR;_;It+Z$w=#F3E#B25gcX+Rd z7dlif#rm!-Wd1z;x4l*oE)@OAzG7I_5OFh8=)dl^nOHeHugKT$o`nG|5ske+%ac~r zwp{}G+!aO1pI>!J*ZPYZLHz`8E0MSi>l}s^L@=4l;8rX$Xd|CrJ1t6|G)A&M?`&=< z+RVO{G?x%nNi0lAIK#^JoI6yo=;w4xfmOa|0BAFy6W3aKe|rA^KG`F zBb^?zwtUS-n&(EG7WdZ&LAax1l}*WE(V)uO9eKF+fQ(9v7X(;!lO6@hb6AjUsZQHk z*#bHfaZN6RUr_+EMEn|Bdbt92xFvHu&n}X(qo|L4|66aJxHJ^X$I4LdKt5Ef9x{t6 zFq<|t$8*)jnj)8hJ%7gPF?!#Nm zw@$-J0rND+<{hH&$*2Dfj^@J-N=>glSKX;w*T5gX96r|maNqcb=MdMuXTeU{d9OB` z|I-~YS2@?bu#Idi-;8e;OH)dC3O{`uQ22I)x3Fu;T9}J2?lIt8HX{PH_xt=RaLGv)um4-gTb)>~joU z-cHMBmS~aa)-Qbd`z{CjtOct_$Kn$;N!DL|9SKa+1Cl29#9PNWC>l@oIe3;4mA)&q z+7J~djXb8O+*`b@E`)x+JjfM`=83|WSo3);Ik<6$ob}n6+aj+u(5ZDF+Mp9%1bn%; z5$?jpRYvpB7JoWjF!0^ZeA$k|9@Jc^=5pUnBoldLz`Iimnto(I1a~PKQTRV7&u+jo ztv26CNsBVl#Gv*b7;67>O>Qdes(!B7$j(*1u{zxff2{XHQx zY|K2ZrvCK}Y~!v}X|^@98zk1WIq(Tj0t1yW8WDD>IGBSN-hm#j8UsSb#|r6a%F1iL zCuMOvns0x8MN8?>tXS47DI3m;;FS*dl^&cX8r0ihHJRD-X{bMqkq1QY6Xtsz3+uD~ zCXx&kL6nKMYen)XDd>N0t>t;jPl)eFC-N1Lx`kXF1?bOwO{)PWbPLN0yUg^ztsHb% z=l7I-tK{oMseF`pyfFn65j3^_bQ{mbdi;inl9yiK+ktO8iR-9p)0~n*Ccj%v^UFo~ zLsJTNZ@}+n?~$y$vt8W$iRUl=!)yIkbQ^M<#UAC`!AfF9@Vc^x@gJx$w$ww+XCerx zpYXvMt@S^z6KkpD2exMD#Kj|6@C}Xk7XzX}Q8*U_;wr}+j)fg{<7?%=jJe_jJYC$)tX{dajOPsAO?EMb2;A3#D}DU&SFw3j;B?9Ie6<+jK;) z2@<&SL-`@WE|?kewz1#~BERN#)CQ9){gIl=_>$#TD2N%a>bB-v++J}_^c0TozNcgc z{}dgS*Oc?_>59UTYgdLLdcpaRIoSP!m>J{0AMEE=tTheyR)`D|4F_?QEE8XC=cpJNq=Q}{50n~-2GGE8f4uz{HA z=qt+$*E7_e%RBmV5PZHYoDo6TF<;K~k&#G+ z>yEJAShiCgGGbv95d^co^A&_B9&rh(S9v>szp_w}F3K|^VXV#E>k#o|oN}rzu!VMf zEhzng2=FYwEkWSW;xZhLY47Rgqz>KY4VPGr@jED|G5j^_5OuK9>p`cdl}c%6VeY$c zu^a09DI&_;S=0gllQxuv8;(s?&_dguas(S&H=vQ^E6o?yYKtA8^c&-c)X>LSDXA(F2 z>?n9Te?OBStCKmEx6_n#J+u<-v%Gp&dN9wrV=g_|(dy@$DF>JSe#@OB8zHazT^^0o zC!b5Knae3z#8z+oDvEh_<=qGEAzkhx-*->DEmmD9W?vpQ?yHrMT-M+_{Fu}`Zu0#) z$4o>5lR&CND8Z+eQ`6L2f-8HNV{<%HI87Ck)+pD>`AwO!6@#e%b4A}bYDB)a^8-jy z4+kUR6B{#widy`$G%;I0C7WBavlCUEZ*DI8 z28$>XUn-JVE#lT9dpG=-M#Y4=(Q3VpN0~uhDx=O!hTrNW)Xy*~n^62x2kG|1hj=o0j2_Ti*W5mCo z+Lz=w{txu!dJ8L%F?g)-Y#zOR)>*+7)~ycDQO!Jbcrtzs`jX_bAu&Mq87EyplB2co zj;s7)NIpz)_w|^&<(D{dWhd#^4uCip4Ubg+jQz1|Do^rt|L}(Gmj2?PWDv7het-5; zXHWw_Doy!(EpW~%duu->b_E@EP`nrIJYYEdlS8_o-~Xb%`T?Ki5*6w2WHLZfjLKLA zE`k(wO58*iVlKs2nOnWjFO_6S;WW$tq4J(jxje8sOB5|)dbpqrRUje^U{|p+B}n$b zJlt1!3jJ}Y_MSF~u8n@QsCMi725R$s*5-Cn&xFjrq4#W@XB_e1jKSaDpZ}w7*+I`J z_G8A}KT);2;et7Wf^sw;Kc&+u5-W?jyf&LUlL(kyBJr#04j z<3TrKN0r(5BGCzL(l?%1sO6>lxOH+S*MjCZ^w7L zelYc#lS7X1M5$l_wZQatjcK$RAtejq`2J5Ap&0p6Vz=P&`FU43_i{I`=OUx#wWMh4Z&YL_J8^~Ec{o~E|A2Ep1 z&nChq)5(@D2)zuMyM?%<6r6|Ixp)NVPF{uMOE}>cqMDRH<6Aq~zLovj(S5__$<`lZ z(*+^_g5`ZfK*KMw)}ag~&fHeU!t4Dd`=WS;aF5J7lo@z-H<#_q@}7w6Jx#d=Ydti5dM6`%p-3lBXkHK%ab?O4Aj_uO%C@(6YR2pI zcrNHm`^ewYS~JPVymeBl7Mn#Z&q=QTznf)`ICcu~!*+Qyi2jNiGU|*M>M#n`Sn3rI zYOZdB&vzz)*r$u{JBZp9tm@mMNb!m|!W&znE>P$Ll)UffP=10)Xop6{KwTaFQQBwjzNx=noZjk>MG5Z*D#g3@iQisP`sv?8k8yv3uX%;0)ZhCauJiHd ztDJM6o?1my-a-VDf&WGsy%eBL4bt9|2fo0=nqtmp=!72kmf>@2TnTDZ&;iR;UcUZZF%iuru(%vc!P z{>;lfBu|(`*|Y&{&TMnN!sRPB6B6IW)X7>l4&VtUZww}__p6&Yy6T@|TN6p6{XmPG z9sp1n8&f!9sy48Me|FO&sn;W)Q2RjJMzlQoGwO&^{ER*=s>lhMTWwEGr2S_pA*Bhq z$D`_g%a_e#4{317X+)KgK;Vo12knNr4o#qVwLF*xAKutF8+XGp`xrq`XJ_`y9p4@v z-%A=(Hf4f6CyOhCxP8`~jP5VCD_31J*vo;U8-(UgM)T!i58F=p^5X=)yI%{jPWe}&ln8rj{6#DfncSNp7S|-p zXIU;`i^UY?x>1+=S?m3@#9@2S=ZF+6M<)&+JnKLfXX%+Ddhr)ADb%FS&$LdzdOxB1 z2%S>ZCEWU}q*bo9ff?bwF!>i1woJ50lOHCdYq{U(1`{hqB`=hf6*%Y1uG)|@L}l*l zKI8JjArC3?Y`ug=!xc3}CQ<*!72U~7g|lb{*R;S+_$qH}Y~z0kR_bK62%U%1LlC3v z4or5M+&7AK?-a|f7TI;B+0B+i3e!SYOS?O2xE9s)}22!Zw1HVw4vD~cw>BS+SkYz^4-&u zPV0gx{&f~R=dFl>^!`y$K3fLy^>HOFmxCZ>)?V7VFrN(@9X{pyTBRB*JqMgY5{b2^ ze31V~3)pQo=4?N{1d@oPN;UZwVXF8+8q>H+8??yzJXLKVUL0eGA*~*S-&v*MaDk(2 zusBvdi7$b<6%(D>?e!q;?r`UUxSt?fO%dObizetLl4a99+uV!&;j?zdPnmIz3BG^4 z>W7_xg?M?1eszmDt^f4yrkBR-YjBdD5icz0UwH^)lL(Dddwn?WE@rUg`*y(Gt?u^( zdI7igH$IRqN@a2^%2qy>dq$p~j+rYX!`2Na;_BpT_=vS757y1O^10oDkNw|X@+4fM zl+_gm*lgd-{lqAdsm>bG$92yl3Sv9Dv-$^D#?Uok7@AwjpHb7VW+?qQ@V?S`qOFVu z-2^-&)^*6hR&MsyVA}f~l{c(Gx7vXKlTtriH;6&ziI@&w=!WwHN;`{r+?L7XW6%Sz zPp^;fkw={@PDIC@C!i!>Xr8{_C(}LEOPv1eG+o^<9ZjSb^fk#-*Mh;>LKpnjW`^|f zVVYf0LLOB$yV!KH^pQ7w{XQ17o0kJW#MQjoQamJ;)2#nw=4Py%QD7Z%Utf zz!@vES{QqiQPlJDp09q^aPNYvXPaeA7v$9$3~?6R{oEZkMthK@NE6?Gxw$U*A^Rf_ z(_|b$@0t4@lt|@%b9t+VGCQVOQoKh3Gq>X|`uz_+W2}_(oxjyOsH{k*ZwICCvKRIk z3t3Abo4>cLzQzU{zUL~(@npS7ry;niZ0~-$lP6MIN8*yruP&gJQ4CS zfAUh_wIl#uCYK8I)%a>`o9I+6*h$7u! z1kKsb#f8%w$XvFyC!3G;L83+9BgNQA<6%}SK_Yc_? z2O*#70Pks~{J)5H8=Bu?f1!M8X2R%b;570<$hqD7C1qb>f0#Akmxv^n4wm@}WOQ`? zVrw+JBu^MoST`MV$tVp>MK8Gu z>B$7@P8W_ioZ=;e_fO%GE0W=vf#ic=ma895N$9uqDI0(EN?8@a&Eul z8D?LzH`>q6t$TLE=-RpKMSnSf1c0_P}~)mO?AzA z#O8Bz)n|t(^}x?c3y30yjGE1|RCt;^EB0~lbf)z@EGH#ys4u|&B^?To55{m^nQ4?= zedF?Q7x;pNSyhK=zHXZ-kj=hDW$v?&lWYiQCp9FhgRdS9?|AbW*Pqebsg0L;P&apB_b*&HH{6t=&UQ3R0mDn$r~!qc|WHyBl20erRGr0l8Rc zAkA{CDL5|sis(7viro z9*JF6LM)jJVQ7i*$D$n-T;wTtvaL?dArHex+6&_FHxj=rgQ|Z7ecNT-cCQdl9#N~* z=@41`s`EFF`!zVuLDutC%#qQ8kxuW|qN<$qhLqT3;9pWkz((m#6h5X*s1*I1E(!22 zwNF>XSRHMA_&A4bV=PnU#1SB?T^mihAe35~n<%0DR(r((WRVOMBqx^&j~77Z82rB6c`PuptC@Fl`+zh;q?u-c zWhxcFteK-eh8uwrN)$;$b+c$W- zUrQD^CK0O3j{&Cc7(#g}3AeiU&nAYeft)n{AJ~tMl?6@bIi(lQB%*q_*{l>z#4k{V!%pjcRWY54!M+*(Tkur?7SAnBk?-||ImrmrI;CO9%hV%U7kV0*!6z1Lt z4ITcIn7OX)VpyncZ=Jl{;6>msoCN9aPYfW}ww1Cgcv(1h8zT{|LD!EUIX+gW=LDY{ zW0XFaSgl@zPH56^_g+z^71XSoRf$wAGBvgGTDgXu_v@FpRsA zI!*U;u&qCfHwRS>2)i}2g24IRsc(8yF~39idk1}4)y560fRcYy4v@~&ZR#eI7xGk1m1+$JL)n<}(+&EEg23EmmDAQxA& z2qi47b^}_4?1YGEtQ@KbP<0pjOMjGE@FEVqv4=R=wxXhSkZs@FwZ&nc-mnEn^jv3> zCPSmlV{xc`4C?66P}Jjq<}6hG4^eBEjk_M=?r7KlXrMdAGkZcsZ1s9;@ZbfyvHX_D z@YMhD;Ad;xE|VQuyaiMrjX*t6x6fu!w01@>pr<-Z{~BI_}V# zm5fJJc*ym{l0|CBrIPBt(xhbOHo>4bmUwu2B}v^>o6k`zR^4sp=Lz@CfiExLo@B!B zzG8h9_H`u3{%sfGZe>w?wT)&x!c_*3m>ZnR@6+pxu{Fu?yOeV}bH*Bi$-SI305d<5 zGcgLbeN7ywHNK*feN7r~>~=4^gK9uTCNb2E)nya-v-x-LF>wh3dx$t(o>0*1_BKqDn5fqgN~E^aV0-3y%yYPW=1+&E7`!=|X(> zB2$^vt)1x`$*HK5EXh%Bz6&%TBG)8fe?;wBn_2fS%tcF{^^^pk=40lB2xDAXxBu-7 zq14UIp%EO1EVam37oKF2s0x}eBAAfX=368s*HLBJT_KOP@3$r=_CVTls}blik=_q2 z<;$}%`L2w3Yd_!qx|n}g61ccT{z1)#s9=mFKl0TISHU{}m4t6c0GEw04|!BkK999s zY_v%cJ`Q=*ppK2*owqL`%R|4uLcXtP6O*C!tR-ri$FREeHC=HQW7hQCJrftZX1df1 zPc>$=@t~50zRl~gTQGRF;@~60=7@=HAuBClsRIUdz3DLvdsoVFgH z-6Jlx`a-8V7OTdFdfmiFU8nqav<1nTyZkQ`-mQ}gUV4#7jYdftxmxs6PS@`ZU?xgD zBF{gN^nDM^E~Q#LfOzjybd7_HHK!U{Fb>t4tG4v@Ia6%LBd-iX0;lO51C-V_!`T%n|s{ z_CzS#hyEYin<+*#{rpvMOE6NG6NzC5h|&yR1zIyUB7imrPw zpJ{0VaW1ynuufJJ?vMa{38|pJX4q7REHtgW0qCwj4SO!PN4bn`EgMq11b;F$`@>0% zUwdACR9e6hVKY6%v8L$^-yWv&X$Yz;`D`z;eQue~`{1T-Yx&C8yMTaK{MS%u+ohJy zlI|#BQHA|rwg*ihuqJ7H>5tTa27=PY>2B3=qSbUIGN;u$h=Ot z6tpW#2#X5ev8+^j0A?uwpQc*Aks6k60lA!hpHRC-b7$}=h_IF;-x9vjV4xElx?F1< zbDn&fsu`@JV-HAm&G?_)Ee#nm3`9bj~%E9o_jaK zPq-(Au^K1n#h$?V1DCeIo&;NC_BUv*BBj+FNKCRCZEJq~AZi-;iZ)0qYG5eg4m=tP zPj>c_cD>oUbU4KRNx5uPc&+HCp-wSZUw@3=OzWj3#~OG5rCoh|;Uuc3?sqJgJy{akX5-KY!wi;>_x;uHw#7!09+k{H z+csY8PNxgn<9De>%-dr;RzEVMiEu`CvUTl@jNdIx6l*Flb`oDjiw?fZcT+z(%b!rH z^7VHUZ@f0xXs&Cz;o#k};<`J`Rjt^O>xYKUb+1Gj4Oq2Q(9X?|{F(+Pb5O1vl#YKu z-#X7ZF>|(?pebdu9)I_|$x1i0>~&q#R~t%@<8at6guvnQmjmnTfa3PE&aPGya_ zt9~mrzp-3*N@KIa1`trt{@#a$gyq15RowH&4D^Tm$=QX|2gh};^s8gj0I%Q-Y`cJ) zeR<2Z&lHp6&qkWSV)PKkl&4Rfu_>A}O0GZa7-JUcS6Km}D^yROl@0d>Dt-{aSemHo zrZ2C^N1WkkObkk!%I&3f8qBT)VDc{J*ecm1<;pkVs8BfP59QUKgu@dCdxK-B^%N$n z-h`EsK3`vai8nZcv**um%O02AR$e$Tt$N!I!UOtXCb7mpoq z=OT2Ew`r=oA=OkJzEx~5_Q@1m&m}*%b#2YW;-QYZ2bMHirl`^8bvV5A?;SG|xoMT5 z2dmtl51k+$vd%f#&S#xt0CGxi@=q1ik9o<*Lpe_-C0&wd1=4S4Ixa;B2%;q=CIXhF zIfxR+EK3-78o1@um{$8dG?kdFELCW|cMrtYsiXUUeQNeEz~f~y{XJhfha3c(FX-EW zdEYr*W?BmqTOujfM@kL;S&=VVCq1eY%Z>FhD7rr=N<>H<^+(s_+H9$>)@;yZ513FC z@55q=6tkMCR$?9DU$E1MOu?Buh*=~ zYRmulz@T>8AVkvM3%laen1ABq&33G}qw{Yy8A{mft@%DMQx=;m{rY65Or65WpQrU_&CTvtnQ;oRgh z_%Dg|b#RKmW@;3a-8nDE>D_iEFUgzfATiRhO1+KV8X6rOB1Jyi)vYgTPK?D%blJZ8 zxa9&p^9Dr(34G;`L+7yzgK8Yj4`=bs;zUx|LRLRLqPCCZz!jr>PK=5Z1_nlER>GgQ z^LVFG28-##dv$cK4Nll^IV8GVa-&Zu#4Zbvkps<`uc}k$pp52>e}WU!=r`rtw!RQA zVk*S2lHbJt@txIY!MTMZkj33+@7!;i8h@(s2-5$R`A(4hNQOh0-`8W!sG(!&YO=f- z2PXlbiTGuAEIKFx1>W6ir$4h;?guXi6D!%NPD6X&zFJXXZs}tXjz9Px@JI)7*xTbAg5gb`<*dzHku7CT2qdBg7gsjP42_~jL zlHs{)dDPL4em=OCyHIl&E>47pfc+MPnZ(7p|$~pjI(tNp-4bo`qyt`XT z2Fr~9B(k__H4<}~)QwwHv)>$ebFamSQ{sMV+GJPlejPl2@6|TJ*-?qaKXwCBwXe}$ zS}0X2{tzOTrjVynbdD$2r>;4|NO+KAh+*nZ=nGITEOjuTNC=M}=f1ncIxm?(k zO`5O6K>-nh_XZ=D!{V#r1)}5R?QY~H&#dy2^*_7Tcl0Bz+Z-Lek)pHJ9F~}7HNMD+ zN9+~;cX0l%9s1Q$|aU^?Q10{-Uxb+t+MJNngU-Bs-ys}rfrRl|6TQ? zfS4S1`C1k1u2wC1zQa*9>z>wGBSK%_yB)@VGmY|_nTa=EEmV*q?0f3!PkkTVyp6Nk zTBN=Bhou~9*`7#AOUXb|KCQteqNYL1S}Lbgj~FB)a%FB8f{cg;>#@n)ii7;rNTrxnkD7;dJ9-Je*#bSt1SW5A{nyOp|TzPK2@7Z|zX=v*jY4swL&MR`W_tELW z_s#%+ksk_1gbS?iLTZpFhpxW50L(Bx62eetcN7<#$*!pl1q)S`U<1Au8;-b|l<1yW z{+%g>nnab!yPSB0Kn$)x=D4Cl6m~HgWz$!G>!ia+9gSYc-EGQO8@Jrp}bKRF5{7yCip{=J#rtDbp|I%_3Gp;m+5%B-52!a==Dq-^DA zA}JF|3cD})v^DeEY(s-ZwY@X{{rh4ZB+I#_<2^$DdCr-A4w&~KU=P6tv!T$2#c*q4{I+}}t#m}t19Qo0kSrU2nbF8MS z%ury{$9xW>$+~ZhAj%GUjCi_P~2~R8Y<|MNc$W2v^;GvBb@5opcfc zcg@YmPsT8Z_)!=4*5DTjTl)+`VVUkkpMuu1$o6JFr z+(P##lzsx8TE_HN>gZ_bi=|{i_J^4@4G!IDiRnt11r6YS`Y=HJi~L?)pRrSqW#an{ zr;fFH^0TP}_UVPPTgKKmxZ7or0iHOc~A?gGwKenod4AE_x% zcofBH;Pf}+S4Lz?a|+z+xvsmrd~s!zmIbtVU8aBBWzUUU$&<$%zIi5rr*zU1qU@?0 zv6(KeoX2mzN#zRgkMozDvcp^)h&{G+zs8XS4QEQFYc5aga!L|!)paA^+_*_uFWPAd zt=Zu6t=J9yhY)tKQl`8O-x5jKq$Cm0s;K9TK~ivFMh9_7ZF72}XuKgtVE1qNdIao} z2-+9$I_3r2`_w`ryzHXdtYx40EaQNQ?_>HaMA5YW0KRitC>_3u18O@a$ncQ3NV=|y zo+uCS(uZyC7z>>v3#eX%>^uQg5|}5pZj{tad-^ETN;7^rCIcu1#iC=i1>+$&HyM;9LwpRLK{)q6u@#=!YmP_C`j`8%(0J&_k zYtG5exWgykjU~vR%fsJl<4S7Ai2P}-I!RYjT!diU>ip^;GKdN48w7Z55FzZS>dZ*# zYYVs|b>K05=UT48X32Kt#c!!{FUU<5Hv6h{y=$_Jm_bndER2?5$<8!m<_A`L2v?3x zNM}?})wCM%c8g)4daU`mkg^7oDLJfvI5aD+rr-wmGL5P(p7MplLl2QDW2rmW(o>}G zLp+s=6?c8Ib0jxzr5aU+?v^7gZY(g)4PRcWJ1Lhm1E!baa>#&dB0v((7+$Am6Pq7! z>r$$*iWe(1&-}AWAC>h-dOg0u#A;)}@LJH%wE4ver86rpF(1VzM6|HaP?s9{$APdRy{liLpqcT(v5dv@q=Z(ui_h}e;wMo0n%BzfSi%x!M? z9rb+lLYbKm0xK+V0`vs4vjptW|W!T-)`V>-`E!WGgAa`b@Zn^ zA9CW^ARb{PIS}ip`vCK^Z<+_f9raxI-;BN~Iy^-Z)!OPsm4Cs?xth;xvAD@v?Olo7 zDFn>#rDX1RB7~Rbi!c2?S=W!MKNWBH+HFP)UHPvkOR1nOLm>j0MCPnLV+Ew$x>}>t zD6C!XQ|@D&{QV^~6tcw(Ni=?=w~0}NW*<_g=jrYqgq*-On83TSO;qO1EHESbZG~TB zPp9oyd{5Qq?6I1|ha+uAo}np=SVGhPZ){5Xp-n8FcQP%tJF``5``<0W9O6=o2X}(v zb$UCaMls2s&DgbwG3J*L_0t3C!6Cg||fJJ(YF>_p7LCkbEqNTu4$E_N@7c~$TI8urBMlw>zmC> z&-xcBio2&T+P}D=eay~YIuUcE|#CV z>iX6H#uhIyn%n-)bsF1&ra>L%=)1>_y-&R%rZ;U3zh9FDxNY{l^ILCM))KK{e%doO zU>F*SlA$zjX?&D04)3XdfYqj3U@KDO#-12apb@TSbj(Yp4dsK_n~to%CUb|lRj5Qe zhd!AEmO>|bm)!6JClhLA-PEonbw3ZPQ;z)}No_w!Y_nSxp^%|r0_|??8QbuE9T#&v z`?1raF#U8<@Jd}r&O@Yb?y)Ye^~pX{kyzKWKv`SuDKrLJ`Zzf=F}4)ZX85pIyotQ6 zg${W#s4lE?d3xukOM}j%P7}P_{n^G5oK|>%J>u%MOambUO)hEEMQ3(2&ngg4&9lO` zRbHl`NKIze-dH#|?3U+R0OhEdi)9Ygk*h+v_zQ=#_H-pRMEmyPk?YbQTLexb!MZKA z*S`=~12w4z=0}q)4Kioohem7jSG%7us~EabQF2<3oF{QCT4`E1e1(l)tNqbG}LxeIJ$rb8ZXTj*^sN&e~Fzawn3N}Mh zGsy#_YX}oXu&C25O}~W|Qu8dOa(Nd6zh#FsMH^iotbdH}wx7TRnDNh*A1K%3f3P?^ zn9_R?$cb+@&bpw@p$>xWIf(HGO{O>;(L>)A%5$)YdMwzUW1_c}xQey4wrg#zK5pCD zFn!OK?uRwDTT=NtN4FlUpD4w3LL;5;B@0Hxp0S5@gKuC0(*TvT%Dvpx^`ygCGXH~npo^~ zntYU^Z1acaM!eX?zMHq5ppH!)LAERzhR$IOdhDF_-m+R*u>$hl4up9W|5$xzByczT zuQoA64mZ)B+$3-XVhiEs9e=;4`W?;NulhLnR(`_?w{t66V0Q~}j zU|Vc!I#Ug>QI%d%EQ308VM3R>fxJTeYrn@+t9xy|ZT02rG6n4FYM{#b&}nZxN(eCf zSEHNtMzBp~S&?zTzvw|EAqlvHZ z1F*>1oGoCZK>T%0xnlY!ODyCXnOH{VU>OO7BFiykmU=mzM(aKS7R!zpaD^NSzmi>q z<(&P+@ZTpjMcoZcXacvkRK;$Tqzu5oAa3x-cEdW8z+np!1@5Fe)UO*^E2D<8U!p)k zN8+sU((^61wc2KC%Y=aYCYp%zeh9otRq1YIPgM}q@V3;THcLZv2=Qm^KFyTtZ=w!G$^;aZ|MCL9@3LCTMkrGX1y~*a%!e)&`cps*$_jEuuI1~E zI`LUk^#;)^t_b=u%Xf2I_i0 z&Q5PgYtH{n413?YeU+yrxz=w?UAgl*%JeN|@~(gZofa5+$%o~(oL+KU?mk>1xwlsG zWdya3Ww67~%nSyW_1e;jHt-^uW_I#nz|y@_ROTjpsOVL??kA};S=s8VvMU4(G(2em z3FY?j%?Gv_`W}zW%ZoAGxIzzaSQGxYdGp2Un>YF$BUHB<4Nrm|4Z4fHTGir~5 zAul+%$B&_#jO{s}jNLx}BF(v?d~fj?+m5E1r?=8Q3^VU_4=8U z@B-IXK9Q=(#rXaR&636A8rgj_V5mV6Np~CVF0vq$*pJWpvF_YB-eKu>gd29JojN@| zAXVtLxC{g2RD*F76>^$1_+x^9Pb&+7)dp>f=#Yosi%El$T3Hkf*O$G!fv!`1VIytY)19cx z(L*DJz}I5ZOk)w@yk$-iygNcEp^-VwZaR`NNOO@S5-?E0YK#S|NqDag2IIuwmL_2u zUmfipyt|kxb)Yk|_we48LV`%P6#(~-I8Z>P`jOsI)b*F)db2ow#w~LWz??f7#($CL zi;*Y=2Vit}XhvGH5+1nRq?IwA3v(d3AAeZk6&$ONrkbm2micDEc1)X|iLz48i3Zhv zSwxcCJG{N(tM2guzrhT;))f~;sY3@zWyV&C&E8Pn8H0hj_doG87XW3vDTzx5gx5=v zkR+SnV=_b}u57DD`R=h9kA50I1gS)qIQ5k!Yn(~%Ii2q7FW?*Ps~KbbzJ4m@2q!Vnpvi+T8LQdKw~lM+^d z{>wAjD|>Lkz9M6&^V6;H93cL@Nns%m!doBza8rIXC_@hjahcOc^ok*j#)4+j8r$~J~-U?ZJ+qfuA0XYHz zP;twAGn9Ep1`=r3U(%#$lQgcFt1`-y@4!-(931Drgs&hAG+;HBHyM!z#Zijv-Qbl39yFnJRef1|$E;fl5O>=9^sh_iS<#yzO zdYjB{!hLS3VPIa(-B**pR@QO>E#)2_^scILwTqz_hj3NoKag-bZ~Zy-FU&c#bL=>x68-w zY6LnezgZWy^@l{%nmY0_727((alX{KkJ$z=+UnNW7IqXKx;M!r#?u#?H>|bE*|hoy zuD{kfKfF}u!X{DN@}{F0)f(N!nwksl>*$%ZrwcEw`swptY!4P3a_P88j<_X()l?0t z4*N~hNZDxlvx9zY;iA)5tI!=4Ty73(D^dDf*0A^S20}<5_>>~tFiB6mqR^QR1=t){>HKmls(&)FX-_i(Vxq<|j zPAB8`^5wvSuaNB$rFrEU^ljco>CcOPNyG zT*yve5dbV-s(Avf#+i9bilKhuF+*OFy8T0R7Ww>qpqRdW82HYA=E+8}_k%_A=UD94 z=M*F35G2{xfMA092Tmcr^$=`1DcC%!f>d4VZ;y-_vVwF|BxNZ{y4R)f=|bj(zvZ;E9{&MmEG)GwYisPdv~w{riS8jN=ppt+#s)=3 zeW?@uWG>~;Ny%p@)M>XcLrU~A?D1*W+~R8^TW!1N<2&J3yN*Q9ly~#+qHgqAvkCSGo61S6>=-!T>^ei$hn@U-o zYE*I4uF5Uax;C>JU%>mLxy@S!1ixujbFmUh)#8x(`Raei5&fM=&su)0y=0NQU&~V% z!1~)}s)Jc))5mX581JxwsuMMD%Pvcr5hcqp;e~*lmezimQ$C}$;&~E0S;yeE_`#OXu3g%Ip3I z4(^l-5$uw@g14tQGsoje>UHXpsbZ>Fk_WBpOS~y_!JE3Ll4$KXjxAOPVJJhp91HhZD5zBE z+*MY^IbyYpIKWx5fP)nCk@*z6R$t^o5&lZO2PO~IJj&7>@!i=d%z^ERS|$kDMP!4=pylx#er#kF{#_1`jr!h-B#4}(BOEk^k?#W)V(2Z!U^`_t~1p= z6sa6XeY;lORafbr!?GlS{%%in8u@MA*Rh0Mer8qK0I?9wMaHa?%DfU^mx zJ-rrSQbAcJaHRe!erMrp2pQzNgA|RXnW}Ctn?cy%+FXjB2etitRUpSES=lO#=y^U@ zA6-O~@L+#eLh@9}rRA|bpr&=R?nC^}(}jO*r+y4B)Sg4JtT+}L4wi=VcAHStog9E+ zW;M|fIMQ*ZsZ4C{@laHz;iWi8I8A{koic{T(z`Apyk^!M+iHT;5tbVG+tD7(lyev=2;xJs{kW; z_ZtV0fEz*g?ij%9ByQ)ZJK0Oc#iQDd*?sw0KL!E*|ITFPYhwMBs{hk?3q+1wVc_V~x;N^Zdei&8ai{YsvnX z_oRK?prwJPr4yCoP=SHAI72!DnQ9KLfY6~V)m3K{DtClJy*iapO1gu#gvXim@Ur7J zCq5jk&I%;LPK5K!ir#*rpQ9z_e))2P49fjSlk#~c(1JRC>IOWC`>JaF&T`OmZV zlS}9V-P|U>H*~i=&j8f3?CD&@>X>krW(3wz>(xDSLzo(ztPJP^3q>3-zo_+Id-@tKeyQS0)v(~GFLdR}X6o0^LkKXG&+Iudq#N;6Mi6bCLr zlo6OZ2w4IqRp2zdSO6u4$?bhyiy{vxur=)`qzufv2D{5QB^c)Z^byz1qe;Rc63L?) z^kIF4dPN&T{yE7RyD!LP+@Gx-6Hh;i#iRYXeDqgIRsHSv`=0SpWtEqyMN!C%3SFH&8d6t7-ZSEtdYfx-_32h>naFRPi<9xq=$;@84 zlWNciUcqM1gQLz&ITuC1dpFBz#{J;y{TIs$TK>D71ex=P-MsjlPZu|%?14sRWtfLc zBhB<3$#u>*r2PN3;cRZVx z>%cGq98_Uke$V)eSg;lP(66 zU6*h!*Rg7XP6e8_wcEO?t7%98WO2lt_rg22Ew9|Zrj@6>Ea8=^H<-`S^$Ht%4_Em{ zORcwDQRrf$!)Pi_f{mc2*_H0kP3WH>Q-$P451WJemMZ3&tzl=~6q7nz3goPGW=asn897Se(=N_QPKZDt5L{2t5Zr?&1b26LCqU2vCWPP?Ah;#CPhfBu2qCx(PGHdB zE&~iUGrs}O`+dJ#_kBO9x>dJs)t7(vuxCxLwR-jLe){R&iBMCKef)^x5f&EKV|h6# z4J@obC$O;Ys64oXxkKAoh{nSD%0z^nzug=!@XM4km(KWJSTeBi2xUU{4_5<2C!Dq-!G z-|uPlMsyo-Hu@IQJr$aVJW4(@X<0g23CmS=y2S1WhX|0r1 z3n^sE2N?L2t1W$gN~IpJTvtHuULFOf@YYL8PoiqJYEIUTWj7uhm}JZI%&<7h3B;mQ z<#JE@*<#ty9CZAS(2y$Z+}5Y%aaPY}XsB{xy7HOd`(BEHmLI=H_L-Rgi6*!{Whd(u zB!E8~*rKXSXP6LonS$g7wIC0sv9SKal9zg|<&(KH2lP)w1neW@f+abK$4nG5pV|w) z>v`rKf4`BQxJeFY`}M$djDHW|<#+v^LJ_kBj;dZUi?A{56tG5o-8d71{@38>uNAhE zOfXjlM_MQHy*`^DWObHVYlzzY2{m~ii2zGkEC|kz$#J&T+x+UVp;!=lCRXbIh<+K&6)yg$1j(QlM{460Cb;?T%HK&%AFDPfEoIL#_U=^ z*8Zl#a$dU-P*2TEs2ylqMOojs;fIgq5Ho6eaK5nr`J{#gUsE7e+OFHcvnASw=&pq1 zv)Wc*q_Uq=#%kA(t>ql^x8x@^$?QWO{t}tnULGae5kFcC>(7f&1DLfgI$%~n^~ATa z5~b{1C(9k25C)m2SMT;Rg`pmmnP1K9&EfUaquOcro|jCkF9~dmz6$u6K3iCw;t_8S zj}nEIz0k>UA0AgytV^ETa`547{%tuCQnuA(!?+tgmv4F6OEv2J0o=fd(GOSqM_fL@ z=cEFf;I^fb!pJ=SIw8Kw-hx61l2Be5H+HnUPfU@iGCD*hw03EgwI6aRzKykBoNab6 z&W}to|BVgx*4gz~vrys%iTtXFU~Qf`=r!Y8O`AScvKe5aZdP3zidNzpTXz$vXTT_z zDOIyu!dY8Y*FeQ*+a%W71RXf$m*<8IQn$sXDXW{coAy$Yk}?5tksAXRb{sAW%Z9D^ z<_#K9hm+ySI~Q&t{SG`F0>pEM+Y%Cmke+Q%YsW{*Q89%gldgbDfEGjKz3l0_z@$z) zzVu|03SfSTsmMt`w(i3J#n-l5i zstN%yA*z4!v8zG&IQL^`xVx=1c8Qt#>*x)RLK0d;EjyR0))!Pf9O9=CI_2!uYyuRn z?C)lEVMnJu&n>%8bsD1BqGEhy5<5*akVaEhvdfgc(37f&) zH@4(+cHR%HEbp;m^DA|{BJ0X#OGoZl$jZFH$+Gqgqwf$Cco|dZS|=O3Tk)18orF?Z zk=k0~0dCz>R~BvxMH5_a>R)S39ael4>}3jDCbYH9U3VVGm2(<6@KD4gix^p}*5VH^ zT-{9>nIqcVEQQcR8*E&CO1T*fMZ0o~nre9g#)50a;sj()-U-wiQVFgCTIK9~%DTc?Dn;}$F4Ari0GAbK*|Gs_kJXWPn7fy(gV^AJ ztfIAv;YNHFZ~v(Z3axdSI9pl6=Y(Pb7r#Jvjw}`Cp-^G3U&Nh_{j`s=B2Qy{4S&xX4zAj$ z)7s&Bg$*%|Zl1b#a`7G7E3s2MgKA!s1}It@{zY~yI7O6E@O{ij0JFt0+wHmYNaw_< z^?h7y;q;tiJ>uG9Gro>}`q>SRCmwFf%VpHgoW6>>&-)@vhkh;=Y6=K2k8U2X4p%1S zIvvF*<%25tOq~`UDo;#x+7;LK*{IC|gx}1q6Q+!9%7MGt);#$KQA_ML9In)46O9+m z#H%!M>)Cx5DKo-NPnWyNoll=fdMq?<4(?SLdr6m5Ld1c#>*_h)dD=vnQ&=#I+a|Iu z7=yU!!VK4QRgcyos&Fh|WQ=;j?FBYK8StDa_EcFY^yjo05?eZ1_hSB07V69X z3lXbvT?dlY%D%3t5AClq5U+~@3bct-;h^rpMv!Gx>Fny`$2(OiZ<_Zs25lx0<79a=cp@~WnRG>+_^VI6?L7CO* zIoz&bnu{oKG+6z$&fX)uKqeGUbayosi=eySFCv={gOyw% zv--74<6$D$K&mVWaLx?IK$?j>-@xV25q0ihy?XD{g0X;#g2>q z!nFKRjV;c02?0SAhOLcP6H=$=9;K}+zPs23#|2+&(8b!xpX*~*3hdz6+Kv5y3wOW2 z9`~hsbx|ZqfU}J+X3O{sC>>{V^C)^rVTtWQNhjMxy$C*hbS$Ab^lfqL2J0ZH^~v{N z7*#bvP3;9zS&^IXgsH_g)E`eOpnFaq>{dnnJ`Nqj+`M>NpZjtfYQr1aT6dpVpZoYS z%RNlAenG4{Cx2|S)of6q_p`)UL@*8G0&jz@|L}&+9KT3rN3+6l5sfta31gSch1=!I zhywWa0RH2B(#=J@vXztz9)Gez)L+qAi=9EpMw<=ZoIOWQ-LN``+*&REUk-QZ4Ns28 zR2YE=Z-_2pm8DLsu2?&MvXfVOzp$W1QDHO|^rGxFxzFWzoA@;Xd8IN?0(X^`vhuY? zdKs=XrWbmHmIh1v?P>kfTm@F69K5IRb3W7@xL3-M7!e;Unoax$1UFV`&dquhqM0B{ z@W4R_AzUUPwddaaD8ZOnlI|{PDodqBeR>sI%liv!Vfmqt%pRqcCn+om-oE$~u4`-I zuzuIr_NV%ePM9pHVOE9FJ(o3s(7I$IVe53)aWnF9rcSYN{Z8qNI+axEmv89`%iZu* zHS~3X7Z&67Ebx5ZbQM#APW|6Qv@}&)2DXX3LEjG^rn1iNtu}6}|7pyQEv{d9^IvA-QZqu>P`7sT$}8|~??8;I#m1cGkV5hwPaq0&S zJX}8HCzLsvTY=wsjjT-^v^9FApdU*&fltait%ts{7qQhEVAq%a8FxR?CIt|KtGduM zWIZ9-Uinqik~qxPSO>AG;B~J_Q>VULyhX~*FSC?Hlwh>*d>ex(zt^S#&NYcHpUx|I zq##O?m-inLJ=&5>X%cnNn&SRU3B3kAY{J(Rvj1680w{(6sWKVY5gMW68 zqbmtV--jto5*fJgQ;<@|L@B0s?K(syjd+i1cb!&p(A1ja@*Eq=$ylZnMN^kfTL{R} zWp5@7l*O9&d=|0dA(+bl?nE(B(rM8Mqizp?Rl9;z6l>bw&DTI6GsMtn$M26BYZaU&A{5sqE8pOu`gV zv77>_Z1-|I^Jd-w127@Ffyv`Y99&xD;%yI`gm{8d_}5J#SLwIVnCl^t7+PA zSk7c(!`h{$LtCu0W-gw~dn>-m2z~yD)MP!Wrq18*<^vvA7_ixlSd66h9H=L6oPQ)^ z)2GQjFCWl}dQB)31>frhO9c%=I@jhkG->h2D-9QpElnpvORH>43I>N?N}!K>UjkXH%i3{KkSD6s2*7dH2J?35Suf=bMYuO7$|)w zotNHoK#MUyJ%ydMhjGkVL)Y5iPb`%aO(yd_4kw9`lIEegqfNCv+xOM%Ab{~KdvKL6 zD%`TRwz7=X0xuLk=UG-Hv|O^X75v2@rFfLFusL%GN_CfAQ7Pe(ti%&?)R@c*ikOI| z$y}A~sr#5*%aQ*+w2hd6Ah=>{lL7`%uH}sN%m3h@@z{V**k34_L=;6{Ip|k!xspaF z)?VqNY`pr7T*`Rci-iDP78L*T31UB>yfWZuT`8KPZVob8?pf;{ovBEENV`3mEHbAr zE_KLD<7xEU9W?x7cXy6{SIQu#bRNJ!m+RT4*X&#mw2C5bFe=k(Or@fwcr1`Ib}ax` zBK>#%lyj{P4Gkc)_%;73>(Tbc!DdA7)1YB9P2GLRgOK($6WfU<1DK3430dIRy39(e}Vj?4a%HwxDUn+!|Iz42NxI8rJtQ{&i{qw3@HgtFwUkaCFYDT>z!0ytDJG33? z+()fZ1#?#5A@c#)X{!zc{YTl0gpKhkMBZ{e>GKxS4G;g7<>kvd?A~IS=`v;Y$38`! zk`C?1a>+K!EJJ1N857#+(iu*QQt!HVs>_KIHH=v?@CkZbF(7^zc#t$7l#Fbci3 zQJYa}ZELR{$a7Xb1(0M1mdpg6usc^5Cx|XNzRaI?c0uqD%Hy7v&Ly#DK!`I6_RNd) zEsR0q0DSu-M+jYH=abE|*Q=X8&L=X>(_cDOE?Pj2b<{Mlv#Q5X3&SJsIDX>OUDpSk zpkr|}67qmxsxm-@HlWaYpVehwSTPr-i;(=8`y#zZ`$9uI@ih*0sjIfJKv6gHCkOPa zvnRfmovQW>PEF5YAw&YNST)(VNDy9bYy0-)R53e9aGY8oX)gW2c}DuYhfX=30A$rQ zU~H{1Ie0#JT)9>o+Jq3-F;~$^(o5=zVA>D*=B#MA%0oa<`@KB>%2~p>s*>GZjO&D~ z+#yJM9>1n#n8w%~QJ&!tRwJ&rIbUC~x%8-ClURU}!sjbX%}=I8#$iSmMC42t>C<#@ zyZI9W^~nY*H`o4c`EJc2CGPEXL~n`2gTB;WrCJA|T)X{i-xL zG2?<$bJ6TJZ6LNh-MepH;F;33sOP1=1JzWKy+(>dG>@p-ja5@1^2Q`i$zu)c2tgyqc8ev z3oEoM4%qySh^T-O`ia8H$jG}()0yp5 zw?yFkGL6|w$q`Ev1feu;De|jE3JD%WutCK`2Ov1D6>KrDW>_n*DM2{SunDYEra9g- zuq7d|mOiiSrfQ!&h5BOg51iiU$c$!q=>C@XRK0gMAA$UdG=HA+hQGnKdztXrsFQxK z!+Kt?*2?j;)ygN<{WNvu)QXYMsmIi(nLiG1_{N5GtrTxfX+WT-A)?X47Mitv)Rd&| z_?TV-w~Z&#V!=aL%%El(c`klO?uNj8UltM4G+*yW!&1K*6>eA5)RE`HL=+&AKvf!* zsamSYW)nQ&7e**FkwwK3*=>=YO`jcgdzxH2s(eR*RvT@4Y?ToX+^i#ePtBDX&b<_O zam*(^h0EL@EAYxKLFp+yji3g(3V%&@dKXcg&2C*tf8rTNmmYqa-R6}y2w8`t^we)p zI-0=uYx%Ij%j2BRI^Ms|3+9p50Z?HjrYJ}6pJ1qNeeZAJPj#f9#`e?8WQG3z0%@ka z+F94R&9a5!$nd7GRm;qkJv1p8wyvV$u}H>@mxwLE2F%8pr2;)AyV32GMC^aU-i8Ss z9*_Bmicgn*`0#;cGH_^necY@#XYN9XpKQyvK2YUx=*8?Lw4_~4qWQ$bfomM=Shy|Fb>Eu1;>=I}P}d!H^YEGl z_8*?)Kp;pY4hhGK-3_B{R!+4J&7P-;mp;FH4sMgEkGY}7*FaP`Kp1R{)m_Nn4q7F+ zaK5-4sNY~`uYS1J=jtCYu=?eCruWdS77WwXv8Ez^xtQIy%^y(E@Do1qgHz$Rk*@3| z<@(ByE5DCopkuz%$<_qDtB@~G*j=n@_dTRj9F%mH?q2=CfgM(s(M}v%alcug1jL2B zB&Wv3!V*eRDS{sz*#L-A6)<~2cSlH}V+uc9Ep=pxwTXUP26SHt`k;?SM3@1(qBJ>9 z+OJ=?6FEw(U!NYl%*5G_PfB8-Fn%5#5U@aNg(49zS`#V4euLbZR8_y)lLcNLNx1e_ zXVF$%oY>Oho-|hEXa;``^!j(ZNYw|mttK1xYr=AsC8FH8b5mj9g038+>Tz6vW{L0^+gRjV+qiXn-G$a-bO+eDTX>^f#Rw$=$v4c^o@*6NKGfDf)$_g?8=ncaW61oE#0n5FLC6ji>99>d!p3a{rMAIZ`f zhw`}I#tE}@4VH7?Zfyr#?4$LUnLwQD<@}@2vWCsB29V7j86(W7e&JPK%gRC5J9(75 zMbFEdP`^zz1X(hwSGaX?LeG5jJ8i$g<{b{R(n?F08@pa9NsS*(j>S+OQy6i)Mc&x= zz`d$EQsiVs(2QnwQ%aL#c3qU*O4^C_oQi57TXOVAi@K&s8Q4-^=(4$Qi;{1XbifRW z&&w?j>@AuSoMW<>5^;T#>9a%y7|b)4x{9ZWP>2>UzzpO!Fd86A^*F3%G`Wu2i;?En zrJS+ss9nn}bKTZj&S%5N@u$qC+Y6J?p{?S*>6uYCJ~AJp65z8hs}_+| zH(~z$^pxi}#_D!M8^CUtZ9WG>_RlA?Vcla?JSj=|XWOtEYtFHV6J^ zqGmD5vdnvQZt<&lfS~YVhad;A2oV7bS4NGTq!f3?YSDaTM`W&DJp7?!Tn~@x^k}4l z>L|Ep50rs;JV90R&ZTE^Y2StY< z(tx|(&onCihTr-YfJ8O`v(DlRCaXpZ2YbWr9mQzsPlN=6Xsr;?mmx$c6rrJ5;QR$2 z5QBbqFzue=-n98zcRDJ*U64Yijr;yf)XmcfX7g<*u#`9c;+W!muznh;eZs!4lVn>i zAh%FFW=(ayK z3Rq`d-qi0(>FqRTz*2*5{Hl#+{%Yr!?J6eN!JP?BNJ-_9nQo(}WCbQ!WQEn0rv%); zuVdgmd9X|~g@}>aOk}K`zpv%%8riA^&C_OAZJ461PS@2L7hRpN169{H>WHat3qLRH z9A(zo2fK`XXw1%ga9gpo$*5&|Qb7)ua@&&#Fp$cJ9}m;5w~pQYIt-C`=VCSzYF7|0 z=es;obzfosD6|RN)Gv_Y1h?fy@y^*74XONJFyB5AEdxK7=J4>Aaee;6hc+74+=A{Y8xjP#-BhncxiLCm^VR%+{b9Q^Vy{8&(eqrzlb! zEBej7KZ}k~j7Twzew$3Kw{d;RKPo@h8xcUBuVLjA}yOmeR1O_&0`2y4brw6E#etJQg{0(1qY0K_%E>d|J}hB(O& z?}^dLn4ENXFIItH#zrY?zsnle`}-se$D76Q-Y`&6wi)R!d2z;lq_-q-2uKevd`z{j z<;1`HbxnEe74P0-9kgOl&~jEUed{7coUzUR2J@|!*3y5)pMGgyG7<>%JyJG>UE-~m za^vjA`Sx3S)`?It8ag6cH}+%W%B!7H=kFhJHhC!Icv2z$S-BU-GF1G6(7wB zVa0`r&}!}2tso5P{d1+n2(~Lil?WF%ttlTB%3xl21U0>mH1CDl7msN6pX+vW>gecr zW)@dPGMFx`%~*O>aL0i*Ur z)Y8S@oeTfRp0$6T_WcvU+u?+Ny+^FI90~Mda0w2{%4&djFJS;Suj${A!0$o=c??*G zsv3hoT?zfMzHr-(!IgLp@4F8YKd0Sq-dD{A+G2~`oVPFMv_bVRt%km(Zz5D>k&%<1 zcg0Aa5(rff*8I}2@_xC47X~S|o4D9Y=|~R`pEPkXKpQDZReCZ%5>|bXxDuuno9=$6bTsqt?EcwQc1zo?g$ncwzq5SM{Uh z+}Gifv3A>XXG6ysOgliIaV_=SS2geF;{n3&iutO+)tdvUh!A|OJ!PGXg-6(`f4(sm zM_ir&OfiM+S-V<$XLjbWExxw>hF@CJQ}QwVmgn#*DE`$%;}1}!UV~Yo-?gINZzuTG zcbkWQv|LVMy{?tSzqJ~WtWbSAQWLbC8Cg*%Hr^snZPx{9-vY95y=~$3{Yh%HT-AS; zmot;`nAm0N0x$(KZEpSjs-B4u6;y_)t$&~Sz8tcRFU7D5`c@7?1)kJZ5HmU&6GI;- zB~4Ab%;{A5Lbm4(&>u%s_}-kuJ7U)Zz4rPu+Gs7Dr0iwy zR7B5p+{DyK0%nX)&*ls1<)=DmwymIY+(eC&rF3-n@Bpu0US)@eTgQyKV4#mny)-ma zMdfJHocEK2#Lmluqcj-JuhvE`g!9e%PI@s;2|r~1QApF9*Feiv<6wPtef^0;o#)3o z&(ECFoXES4W}^$~w=!RQ1BKfx z54=Nua6(*3o1Xp1?G?$=glB06r^%kIi=$|fy5i*ZT-i_3-tJzs@y-W=tKSuNCnjF> zMv@k_r6$s>k6TH&{(B0Idjd9;D8lA#KEY5(2FimXTU{3yQ^wlObM44I^=@u@WklnQ z;F(Bv4J%zjWQdA1d;cK)J#XD)P$YyxU_kMr(wS_awr&lFNXL)`&Y z{0<di`rpDDdb8eV31q1Zs=k!*`TTRp* zD+{Kb3R>#}mteqC`*!wed>fuAH;5l&(rV?xWiN9;A|KC9YRQZ76liVV7Bnr`-YVD^ z(bnd9sT8*ko>Eo!KU|Ij@4u^-S^MY8**>YCO;{2+IFZIg4}?frSyb>KW$4|)+O2}* zm7y0?FO-SmKU?Sy8EsyOxQG6?td|_(<8~bX?qhV`P@C)dlxU4LKYF zlh!}g=eNw2rVo1m!d|fcmaa0PO%*9a_i#HqdGt<1q+WUYemsvW8)5wDh0dim^QW;Z za^UiJAYgqB;O&a4K1Q5G$pL|A>v&YZ7%~8dl%kQ0=-MsusP~Hyu97Fa+Qqt%8L!#n z0zEYoo3J15IGpTIpj8}||9W}m0I+?x2-?6_h2PJ1^IVHLp{DF+f8mV#84tNg zOdua3tu(}(&e}~AsFR#DvF~kS?U1*^2h4uh3U>pd7bcU?yQ!Vst-66uOIzvay36hJ z#+}F4^V@X(pmaF{DJCl!ga6`Gy^eB1gE`)T9hV*VWjHs`ITA4VkwoB0{JyA~oq^=p zb;|q}at1F*oG1G&Y<0jV+fDnjR-9Z^Y|h4=pN1fwlfzh@&r3dTv+Ev?E9xj~IpxOD ziQC$&oZoVr(TVVNQ1nS{x-K5{Hj2IX4O;#WdCz|m0B?izzc&y5XCb)#?*_&9=j%UI zK{{^1vn|ST@&6XnvyZLiTi({@QugL7|BWC1Av-mo$`Zgji#KJE(!cq(yu$8fHqqa4 zv8L4SOhVRIQ7YfjR(<~WiSoMad?j_|w^_RqaVEO>&{~->YP_(yrEjFf74F(p8yI%< zg<3$E<$g1mxA~91^K@`Uw<)+bZ$oalUV|WhCEfvw$e4BXo|gXH>>#2tuGgL1E#=go zy9@eQmR%DOE?13A`extgW(P4ibt?Alcx8WCSDR#Vxp~p-nK6+6kF1M5X`C;9d{K2P zw9CvaC7`q;B+@!q*5t$!zh%`wWB+dbdaP22O&pBoagOqu&-baniC(ZW`-!--Gt7+L zJwQ_Ia^EEml)BxJItQf(?vF; zeDdti!rbGiVzr&rq}P5@hZf4*LR9^tU-f)mPHEqK-gx}BC_D=I8XH7f2Kn0aowc?a znHe6g=cppZ+tRt{B1+lUs|Os9|7-a{*?~QdVHgh>%pLlKvY+W2kmJe-I#M7fA%0TBWr6a{BJr~ zz7oEE9xJ9Qjvo3!+(}tq-XKkAyRh-{!hddho)+l?-^FpCCB8mIGn!s!)Q-e7YD>gm zN$_+JX7rqn4ybmey&Oxu8-{dsokvY%dfmGonyTyWe>Jw^vq;&G6NM8-%GLrYeye_Y zpSBAib>smf{Woz&K9^#M1#z#Duyu(Y;xP@Jr5h$)e99e&envpBxi5cwdK!2Z*S2$j zoFGpGuc1V23$Ob#vA&DOV|ZYXg{>sBH|O{Z8&CD^4BYl7)B8XR0;g+l%5*_AfdNM= zy|egcd(FS-VL1bJKDrgp1$(^_HiqcD{a$DE-b~ktuljlt9G#$Ty(!ZO?pKTEI&;qSv=-gHOqT%MSnoq$_B*AwX&om;8Mei{ zU31f~9QD(4=WA>iKE!d_jLAXoGS2MJiB+7!{Q$1LexG`+cml?h3(H9Hnm)<-H~rO- zXzbD8X452&P7+v6akU-mDG&j!{}x31H0_q@YUuA>Kyv&?1?A~I8~{VV&4kg;=n;J2 zCuREjx#J{e)RgJfV4FDc)gaFFI42a146AS+qlUiQ1{pObSkprwkVJkSQ?Jk{T3}{C z5!|90UW`g)?cL96rSF%asiJ8WLuaQ^;+{;s##BN60pV^?3R2f;AeLMhEr31+Rkj*S z1-AWKZgK7&(#5~>UN;r*6Kc3VwuAE|Og3P9up|PUI)qo^%WxX#HRP(r|2)Sh6xzL| zz1vmeZh&qMuw#SWLGPMx{Lx6g42No|qK1<7dg!)uYag zzajD)n8@#1GvsQI)6RCzg&O?;-c4MzkAYYqLj|J>jY{f>Yb6)Ov@I_J-~XMIuErQ2>Mo;M;zFx?eSbK&AicJ zIa2NBNBq5H&$VG`=cV;yp$_|zdN(By#u`S!rpwj9{GN=-v?DO2-i#U z952Y8xj%=RQiai!E#9KN_l}9&Y6f%ox{ci&rPDK7bQ z;AHEJI=4-PMPrAxY1h&XAM>5R&*#;c)52oawiw~Hi0>y(3EL8y+-Uq4lb~v{7~h+B z1*&&n>1r&*-xz8oGkF})!MItB7?j#qH<`rAOJ2a~S6Ako(>?YSH?X@9fps%(DkK^~ zyX7KMKHfUt=(u{2+gExyP|412tU4*uc#q(EGP4VwY+y$Csh)FxH=Blzuv4#{WD57~ zEE44KqE3Th>X+PWe$bVOSKdJrxzI1yzrvcziiVn2>55x;eir_L|5@0XDesu^hw*Nh zD(v+BZl?d=mXLP0;AEuE?Dd|WFV5k zj(W0P-+RBU8@eq)AGTeG{NlK>uGR3hCVx*)sqOXcszjFIMP4m+`7N98Oc#oq@zb38 zpR#8tB3di9du~N0x}Ec`0ScvIzv26CWgY#vHc)Y3|J|ytfL-|;8H)zdgE=K*b905G z?s3AcN+(Y2{9gAYS>~{B&aj~}S_D-~4;ucQ8Pje9%{2^J=IprL@OxNF_C{Z{W<|Uk zvnKX_zujG4-P6|5PKd9+V!zxnOr%-Rbg}lrzHyDI2qvmwBb`kVmvTT$rHe=Z;%l{F z3-(F}krj61T*Tt-E@N<+$6v7aZO0`8ESC;0<=G2Tb$^xLqq<3Yu>6@4O@>QSoxQ-> z^f!Apg1R*L-H6A^`5V&xUj%Bw&k)L83+LzkAR55szyfg_Pc1p@>N>f7OKLOFTj(_KQf#R z*|*Cilyaslxl%WKdW&sjF+73mr9&^$lp4%%2*Tj1To_y7?B7*bQ=2nXeZ*pWTcB*R z#9Oqk(D@C77oW0OMAdivZeMS!N5`<1)la#!2DGR0{~J#E@Zk;tfpl;6QU=NVJI(fd z?{W52|B2%**B*h)bE!w4cG zA}Vysdf+L3oVDgvK}a&P4FS^ROL99`Y`Yi}M4g;F&6s*dtwZ;A>_ksqd0(whk1trx zS9f|11CG4uNzt+bC)u39=ABbor8=+bL*Vwlt3tsg*dA>t4Z0c{1g0vlzUK_sRJ>Q1 zhP1tE>t4ps7842F{K-g%13%)J3qZVsp-&}{V{s_Y9~|)|$b~^D&|{)>vu^)kSR6y* zbPc)!=5iVJLta8Bu@-H}tSZB4I#h^UFQ1g)&nTKeg&~n^rYN2_o`t8tLyKARLO3wDV9f2N?sycCp7R}F}~)iA2?L1Cl%QIh9fIpPr2?S#Mu4N z^ZaB?e`4W)u?m&NV6gJT)JnVUZ6jNNbRd%c{0syx6%14kER(lDOZ(l`pI8U1)a^%v zW8Q%{bp1}nt9cGy*Ogd6AGdpd2DvUYL(b~EKw`c}D;u=ShYjH?jt0r5ikv5=O=NMl zM%rp>Pjaj#-fb)A1g5V}jba*2oYR+kw|60oFm45&G^K@iny0p0rg9A8#-E;vuD@MY zsz>1j~cH*O;WkK|2713iSZR!!+SPLGWu(M*@1 zFj}BLx95`N+WS=bqr7~%>~v3L2o9;ZGEms zF&8a)8pH53LNVvm$`rWt!|2`)5#bBR&klIc*iUm=>a!?k*zSDN8`M7E?H{TBxvDPcrh_54dZLiC_3 zu9!@GIciC@NFt`2(`bu7lC7^0)tAJ2=tH+$$|8U&P&}v855Q@7x2Yi-czCqR88Mrx z9DtcmbRMu8nZ8Q8IIrpl`gu8;GoQKoFj!2C^l~{3E#X*w9_Y7(9q-h3&;PShp|n&r zlH~2uj}TT`O3cT8%PYadelbC1N84fXUN2j@0*yl-jWLo4s}s5C{*=q*!??>!(kLrW zrQf5B>@@oX@rEwFC{_WR?&uY$)KpMYs3mE#>pXH?a4)mV6m}D@rYdGJZAqr$rc(zp z=s6fd%%tUWnfT3DbP1PN=jPq`+ai8@Gp(+&htAU`TDMUcwTek9{xmcVD4MFdh(&p$ zTy_R+*vg{zR|syf1tu|pU8TK5t3D(U+616hei7pU(XdYMCij`!bX6Ra{Tel$qy3#d zR19xmun}#co2=_~;J~W19io`2G!CXt;A* z;KYFNd&jo~E!N_rjoZ#rtnb9bw>TW@J?od-{#7h2-B;*aNQ71S9(BV>VA{FCMe?Mp2A!k65(+y37g+(JUC*mJ93Ew=-VO-aS&x-hu zUH=wC1q^R(v;k*o9s*T4;vc*>l=??6095ZJj*Gk~xc-LO$HKw~;h`^!UT(~(uKy{= zq9`NlN`5PW#)5hd=$_yA9&euE_RbZy8Pf3f;5!3oP_b(l;Lwj zc9+lEt-gF*>U#JL0zfc{iKecH-1(!VnBlV3yoUGVr*p7;P!QG2p69BKiHP}U6861S zv}CIQKzv&KM;JIO%VlLA(u`REjZzNizO-++l$Gm?My&xmU?Au(&S-k7Li(I3FtaKH z-CPs*0OB_s5OKkU`&3d?3_$SplW%LiuIrk}n+F7sLRQw4k0$Ebfh+!8Z0V|J5Hgq9 z3PZtox$&{S<3;zERPk~@*)4@J>C2on9f7rlD4D3J6kR-kd#o1fcf1%WMK>f}m{JP& z5sjCtSsM8BLM3S#8m)5l6r0_z8X8rmDz?62J9Gq$uOK|Q;F%?tlyeRGGSihCiW3sh z_cD6`P8T0;+F?uP<>B!(LaH0YwEB7P-BlWx85VbWmT^=e=E6mTOTrV3-O~+NUDzcgMS$<7tqH~BGg95~D8J_H$SYqAK)_h3=1iDx=R_UcW zwEz%%bn$kptNmdv^H$Z!5r`i$VE8Y@_EhgKOsQ@mPZqNnzCp7FJ>x;EOM-w)mE9@m z?kJ-Ln0s10ryH{!XqL$J?(1k-lP&;$38sPO)ovICaDq&z@L0T#Xx2Zg{dG`UN~c@N zH4t@iTy-eK9+~bj*VGsxMTZkt_0PNGlZ38esEO z#Z;r+Y5C(5&^#m}ON(a+C*%i(>JPi@Cz1~cP6)IQ9yYfRCysOVPeG5j#U2c@?eD2X zNabooo||nvBRu)*Oi06?xG!ILZXG3=3>Roly1|^%bmWl|7bsS^PL*bJ{ zX-7wqP1QVWk2eMl1s`rsX1KMMmq%+lScsDi6co@*J_>!jLEQ`)aB3agA^P;h0z5rn z}a5?DMeaQtJCEfm(~x11u3PqJM%SEEO^Cl9HvrX)^U9e~?_ryZ=DkRslDse?9_ z)4rk5`rM1qX{SmXaWcCZCxJ1(4mgR1v8JU!#`e}0*_x}acG}?D9mUv!6%u^Zc8s<_NGd9I&YuLXC%TXvVOi10AJv!YVf(3r z*8E9El0HgD0vUr&by~y+8=@SE{?5wm+zX{8OHY4nFqU2`lGVWx^1%GK*HT+MY1+sh zd}8Bs$H=#N)TXj}fq>`g$Cn8Mb&uLY;kZrx_nkgb9aRKBj@cF`2Q$1RADH`*sOjj~ zuUpyAs^>I3(&$|OI=io_a!jzXdPru%dT{Iu90-|difa4<{UQN*c8H1MWHPPyg zU=f@e{)&H-abX_ZG`w92XT}hjbf3$ALcR;=4lgl7w)I=(es}~RTsl9(g zxf`+3HEQfOsHj_Nt4vNXT#cp)@1`FO`stIVrNh$)@J;vw*;_!TVchY2L00Y}vZqs0 zL$~`m=br4JkO-8mjJagE71rTSC!K_x!b_Kx6uLrRQ(6r}#psl@wN=!Lj!>gP-}BkQ z7+l}X+2{0AgV9HOds3%ljb2%wxi24l=w}QrSn1Q&Flm3j5T%N(Am{e5F(5;|)!TKn zjh3ZF$}U~qWIQbV;?teGRnugvmr?SroFw-1fn1x0vlNY$-BSF!P1`eiUgzSNY&>P#vEjsW zH_L(PJaD!`P5uL?~_Pmh|2Hp!%MaRF{jlznSzY6u+xR5FLb0pg~n+S+~PY*Djw zIXlyuy88NEJ7NZs>L{biNrze<)@5-T8gVhd6)mk{Z!&5lAcwA`x_&)b618Mcq8K1@ zb}nr_4DK`6>?vYzeZgNXalGXTvl-*|S7rGBn0u?RHngB^bnotB#Y+pti@UqGv_R1m zcPBUmhhS-oJH=g!yAw1i?o!+X1b27BVejw%F3xk#<+(Vy%abQdW@fFKdEZ%US(GPh zXQoc^iuX9tEv@B`ezsM7*VB6WULyFX9$ksKMo$=dwigb~1y{FLFY_27!C>-~!F$h? zcJbwVLQj?wNx6f_Ufx|!nxlWdOp{8dWa78rGcL>Iv&N{V5J(ST770bPg=7#&+g>Q0 zFA;Wo#E(Z-eMd&WXGj0!+4)FW(yp+Vl4&-DkKU3pSIIZndPz%#3KS$*RF(xt$9|0= zlnz~XJf5i_&qI92$p3T?&>sz-)!LG%+Zn=taqRcctmT(1A*moDn9Zk@`a}d@y1qm< zLD*-9hYP|n&yviKsE)1HsnPdOCg+B>R9$N=&x@f+I>dyArnQpE2>LBXUm(#0%%qG>?-!wD{1_84 zTN!LEGA|!{9k|%FFG@500u0{mC621!Eu|$gRly%^IyGMucQGMV;C9sSEs+ zE|s#%#jiJ-vZQY`=^ThML$4~-^)#pu@%v+cNg(g-dGQ?K8~$3(_UGPK`rbUM&Th)x ztm6oCwQA8!Kih1kg7M~J)GeFplMXLj9Ewf6Y71uTRx(Ph6ns~XwzrYVA~&{@gMOpn z&65&-fd0>7s^h?Xrrr+2_3lV{b&Z5hJ&)D#=th?|L*9loWBhDdoruSywjS@g3|gM} zP=HLS(n6kG^ghm(9#>dO$57Yn#Z)`-INyHuEAoCP0Q(+5DjFcw_n4=!5+T20D;$?m zf9$nso@WsmO)}KcCiFTVRQFjaC~4+3%zmsuY*BlX`>eXu#zDK;`|s7Wz(0i`kQnMCMQbpZh}n5jIa< zydcrDn4ST~fml@1(y|X~i2OVQlCB*4%yHe5qqbRy60>hC0Y+myWA_cqe1GmX1nz^@ zTs7i?h0ygEA(o9>zNj^oc!ZODfuO+c=a{QTOkTrSGt zG6@Y)8HT8nI=@%^e1JeL!gU|#w`I(?+Bz=E%eaASg9coi#lI13-M-S+X^a#q`(mF+ z3Vqx50+Y>{p(m@O|7dS=vGzC|#qNHwzt}D+6{$b9xEnRR2N>q%e|nUunDv|d31MGy zms#I;-watUA!*nAKGBHCQVv1YoJ7#(1{(Y9dJT>)hm7jCqu<}wF9b~le<}fAb<|4Y zkTckgZd2Q%=3P_r_okp?FLY^++dpp;fp|}ZmkbPPrF_^Y++B5K$_ZfqRk%}g#2cYK5cU>b-3t~ zbF_#sJ?6;&E+#ET_z$iFcZqWYeH5$Yl@}^Fb7Wka>!%S%W_+3BMc3tXNwrU_0PQ7) zPm52!Awb~s1u*O@<<#$lJrX+MT*-6REzw;z$W+gUj;{$+b?kKueKC;Dogp7l@ z#xYJEJoHAs%miwHUV4J}SHC@Ugy)ym?P&Xop&w$wwe>HP|t%}DSQ74@Dtk`jyR*#24M z9Tgm_2C4MqFzvc z{Kh%5vN>hJg`fHEHQ8xLQde+z^cX_2`LqJfMz(d?5vrZBBrIV&)GT;@*R6X@zco8| z=;0$Xx=<_-GG;+vX;|ls!0!=IIq&turcI)RIYJi?1$w*4w^g!)oy~SG7{b!D&Yu5C zO~qURVJs3Hy`$%GIIm@(u22^D{<9m;qHIiXIX}=#t!W^h)?{J3vvExXNNPa6;Vj}v zf%zH_E;Pq~%9C73bSN(oNlx;rpVF;g-?%H*mB$5KE1ks^kB1R`qT8yJAA)bXO$sp0 z%CU>+JiD_)_X6GQku-7V_3rUdw0-;yF{wAe5UJFLO^ru3RgcxKW^#3pibv~#+M9a5 z*~}hLw!!_(kNP3p7|o0tc3O6RezO6XYX!y5U0cmsZc=+YgJOCk@Nt2ogh??Ib|=6j zw6X|m-?~e!7pP+lk>wb(-ZYucoPW*ZY}UWgoK4veLZZRT23AXM!L#L|4fD{&@Z^$Y znYL^#1FPrJ0Y&tQKL@I0ynB{;Zx{M@t9qdk@hJ+nF6v{`8&?d#gSN``uwZX78kavE zM+~@<(C0I78rNEECjH}GRAn{42Kbdk=`d$IGImd_goTS6rPuiM>%6^Yap;N*3pe%M z-At`v#YnUzYc0wjbbqzjGw+iu6BIOh$6i)HY6FWHacf;R@^qeE(tQ>K2Skkj;&Ai6 zzCZw~a-`r0O{Z;lCvrY>)5%Qp#K z)x#H;D3b!dA1Xc1>nbh&w2t_Bu>Nn}iUN;%A8&yI1-kP0qr!eI_Cq(De%OT|n|I>d zR~)HiqR+Y+0C6b}JL_2(M*3Cc# z>kh6ITP=g0hazYPRv_nEHMF;?{MSS&45=zoqn4f)QZo( zQJGrEcy)isr(ZaxFa?Eva=#6m+&;2


    jK$o|(p!qm4o5k9@Q>`gHpUABe$L{{zb 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 Date: Sun, 31 Jan 2021 12:41:48 +0200 Subject: [PATCH 010/199] Delete .~lock.antismash_1.csv# Former-commit-id: 33ee86039d39963f812766d7295ab4401e2f9434 --- example_data/.~lock.antismash_1.csv# | 1 - 1 file changed, 1 deletion(-) delete mode 100644 example_data/.~lock.antismash_1.csv# diff --git a/example_data/.~lock.antismash_1.csv# b/example_data/.~lock.antismash_1.csv# deleted file mode 100644 index 051a225..0000000 --- a/example_data/.~lock.antismash_1.csv# +++ /dev/null @@ -1 +0,0 @@ -,pavloh,pavlo-pc,22.01.2021 17:35,file:///home/pavloh/.config/libreoffice/4; \ No newline at end of file From 0fbf45d892b4f35da0f4fb565496c757842e6aa6 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:43:35 +0200 Subject: [PATCH 011/199] Deleted obsidian workspace junk folder Former-commit-id: 2c0f6331a8a7255c14488635b2b3850ffa71d60f --- docs/.obsidian/config | 1 - docs/.obsidian/workspace | 110 --------------------------------------- 2 files changed, 111 deletions(-) delete mode 100644 docs/.obsidian/config delete mode 100644 docs/.obsidian/workspace diff --git a/docs/.obsidian/config b/docs/.obsidian/config deleted file mode 100644 index 387c22c..0000000 --- a/docs/.obsidian/config +++ /dev/null @@ -1 +0,0 @@ -{"pluginEnabledStatus":{"file-explorer":true,"global-search":true,"switcher":true,"graph":true,"backlink":true,"command-palette":true,"markdown-importer":true,"word-count":true,"open-with-default-app":true},"enabledPlugins":[],"theme":"moonstone","promptDelete":false} \ No newline at end of file diff --git a/docs/.obsidian/workspace b/docs/.obsidian/workspace deleted file mode 100644 index 7838cf2..0000000 --- a/docs/.obsidian/workspace +++ /dev/null @@ -1,110 +0,0 @@ -{ - "main": { - "id": "44edab998b47376d", - "type": "split", - "children": [ - { - "id": "e25b93bafa83eedc", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "Logic_of_the_output.md", - "mode": "source" - } - } - }, - { - "id": "a538915d727d2cfb", - "type": "leaf", - "active": true, - "state": { - "type": "markdown", - "state": { - "file": "Quick_start.md", - "mode": "source" - } - } - } - ], - "direction": "vertical" - }, - "left": { - "id": "4cea809a57598f6b", - "type": "split", - "children": [ - { - "id": "78a4de77ac6738fa", - "type": "tabs", - "children": [ - { - "id": "1b96ed52b3713dae", - "type": "leaf", - "state": { - "type": "file-explorer", - "state": {} - } - }, - { - "id": "f3ac6c31d2548102", - "type": "leaf", - "state": { - "type": "search", - "state": { - "query": "", - "matchingCase": false, - "explainSearch": false, - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical" - } - } - } - ] - } - ], - "direction": "horizontal", - "width": 300 - }, - "right": { - "id": "a949c78d6a7ad850", - "type": "split", - "children": [ - { - "id": "172aa0b01dca747f", - "type": "tabs", - "children": [ - { - "id": "8d877be6dbcf794b", - "type": "leaf", - "state": { - "type": "backlink", - "state": { - "file": "Quick_start.md", - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical", - "backlinkCollapsed": false, - "unlinkedCollapsed": true - } - } - } - ] - } - ], - "direction": "horizontal", - "width": 300 - }, - "lastOpenFiles": [ - "Quick_start.md", - "Additional_analysis.md", - "Logic_of_the_output.md", - "Introduction.md", - "Installation.md", - "Input_files_options.md", - "Glossary.md", - "BGCViz_renaming_and_coloring_options.md", - "_sidebar.md", - "UI_guide.md" - ] -} \ No newline at end of file From de43432edac3e2110e434e6ef06cadc7073ae8ce Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:55:48 +0200 Subject: [PATCH 012/199] Renamed the renaming scheme upload field Former-commit-id: cc1063ddbf363adf6e0ca70ea94b11b8c5b79057 --- app.R | 2 +- docs/BGCViz_renaming_and_coloring_options.md | 2 +- docs/images/improve_viz.png | Bin 42218 -> 42661 bytes docs/images/rename.png | Bin 15555 -> 9341 bytes docs/images/renaming_opt.png | Bin 7784 -> 0 bytes 5 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 docs/images/renaming_opt.png diff --git a/app.R b/app.R index 7dc890e..f8223b4 100755 --- a/app.R +++ b/app.R @@ -103,7 +103,7 @@ ui <- fluidPage( checkboxInput("hide_viz", "Hide improve visualization options"), #Improve RREFinder annotated BCG visibility fileInput("rename_data", - "Upload dataframe for grouping"), + "Upload renaming and coloring scheme"), actionButton("rename", "Rename"), actionButton("reset_name", "Reset"), checkboxInput("rre_width", "Add thickness to RRE results visualization"), diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index 78e8f05..cabc55e 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -25,7 +25,7 @@ aminocoumarin|other|||| The data used for renaming is stored under "Code" and "Group" columns. The default file is available is the BGCViz directory or in the [Glossary](Glossary.md). The one is free to use any renaming scheme, but the whole csv file should be uploaded in the file input in BGCViz: -![renaming_opt.png](/images/renaming_opt.png) +![rename](/images/rename.png) # Coloring renamed data diff --git a/docs/images/improve_viz.png b/docs/images/improve_viz.png index f60dd2c67926459b8ef09dd3abc770f4fb959415..2d393ebbf2a8ab43f6018c44abf9b2d2ea8a05ef 100644 GIT binary patch literal 42661 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

    VRwUw#OnTXREh76Cx3O-=7I=JU$4!tg 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 diff --git a/docs/images/rename.png b/docs/images/rename.png index 8c10f2a2fdcb3aed38dbbe2aaa7888f12ed11bf5..00f8f931147c6974c6daa56a81db30f4611d5227 100644 GIT binary patch literal 9341 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 literal 15555 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

    aZ>PZXqE66eU$~c@!C)IBdC;n%R|FdVIv$r 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 ^wld)=8Uq^?AD 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%0D$f*<= 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%0D!R1Y!x;(ctCX-agdBF3V;Qj0N?7y1j!skFToB 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


    *j2ZQQKN%}*K?SeqLs{$d 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 S;1j+B9tjay;R+!=|NjFH!JnG| diff --git a/images/antismash.png b/images/antismash.png deleted file mode 100644 index 53686d82a70b623e1c5724db37872e146d61a7e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10576 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 YjQf5TD~qbmIO7KlF#M|At(M3C9fL*`oB#j- diff --git a/images/barplot2.png b/images/barplot2.png deleted file mode 100644 index c8ccaa6ee37f0ab7db07c02a41882c1ff5fd3f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67364 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

    #1gwjZcMb;BKt;!uX3A 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 diff --git a/images/deepbgc.png b/images/deepbgc.png deleted file mode 100644 index 6a6e85e545d7677d63b21ed952533c94d825879e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52214 zcmdqJRal(e)~;DV0t9z=cXxM(03o=$ySqzpcXxMpcXzko8Vc7Y-&%j~y?gzA(%lF9 zY7Quh19;&bbIfPl^R5b$mlKDD!h!+-0I-r0B8mV2_{!(k5s=`YpYMNFe*b*<;vgic z1o`>l327Mm`5e!PLg_3apzC03ZNJiU=yX zW}Iibs45LF4|hXj%&ye3)09w1AwtU{Dp?MoMdGrW%j;OkM5Lt*B&p_+&5HPhfe#{S z$SjD^@ybBzYA3vg{H2L-IlV%qX!pj&@m4|r)HXfj8( zSQ<|=N|sWXnN_cK-d2_JE?kv0yGa2fJ*gm3qY+eC)}h*vduD8mJipO-bZ`_6tdc}` z`;B&Q$rCCbgf$goGCAP)u)E%Dhrwhk!hgUPQ!QgDY7@qX8N1kgQk|@EdzAYstw2@|a!A?#VX`xYvX;FnK zDXwu7FzZx1hxMHjWedMZb-M9+0X^C6p;Fhz)bY!?VS}4Iq{k^RQSGn@4(@QqLzIHk^ z!VS;fg%eb%aMtL~sxqAXk6`AMYJ8T*b}o;3dt2Y)B5D<^)=ZAu_ld~PkLRb3m&lo! zLJ;*kjfnj3BoS}N6kWK8fnts3x!P}BC0CnZ^Ud$Yg~^x?ED*GOcO9>-rH`(Fqn}w^@$&DRA_4-`o8*4EJ z_?St^Idv!uFsR)J{T7n}wVSlu-iBA`HQ5Uh1;sx`*T)e9G0cbAM$hZf5~l?x%q66% z�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

    3%k6qk~#r=>xKCL7fMlTToH$e1L@ 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 Dt5$0t diff --git a/images/deepbgc_expl.png b/images/deepbgc_expl.png deleted file mode 100644 index 32eef03fd4bb99e94b439e33863b4a57929beaff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30011 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 XY+0f|%?Wt>DU!6ff>^nT!MFbb+e(bz diff --git a/images/deepbgc_filt.png b/images/deepbgc_filt.png deleted file mode 100644 index 0f4591a0c7cdd7e2fb5a554f8f20b4ef93a99823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89086 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%0D6|VW$#BbU#VJ97uuF)iDi%DMBfcXFNiG%DDV% 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

    i!rOl$kZ7+P;DL95)>SlYUOL*)9c`Cb4& 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

    H%#^A( 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 diff --git a/images/rates.png b/images/rates.png deleted file mode 100644 index 9dc36ec7f4a17e7c4d98655ded00d27c6b4f70b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51615 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 Q8VOu-Qc9AA68dld55S3$@&Et; diff --git a/images/reference.png b/images/reference.png deleted file mode 100644 index 30168af8dacae0767c1b4e7b62c6f1ba1cf20bab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64070 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℞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%0Am>#Aj_k{hfn%<+zR@3i`5Cl7s4mK` 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 From c9931c501484254b3a2e6dc47d9d5abba77326c1 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 13:03:36 +0200 Subject: [PATCH 014/199] Fixed the shiny app link in README Former-commit-id: 04fedb5b10fdaefb6ce050fb59f2dfea86e5367c --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index fe2a5c2..344c843 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BGCViz -BGCViz is a shiny application (can be run locally, or via [website](https://pavloh.shinyapps.io/BGCViz_dev/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: +BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both:  - "regions of interest", annotated with more than one tool. @@ -56,4 +56,4 @@ If you have any questions, suggestions, or bugs with the BGCViz please let us kn This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: -P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 \ No newline at end of file +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 From 8f886684672672f241a2daf02dc7a5b1f4a2ed00 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 13:39:16 +0200 Subject: [PATCH 015/199] Update README.md Former-commit-id: 6e8e8323d3b7c03de37dd8a8af85f5de8f5cdced --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 344c843..0f99a0e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ BGCViz is a shiny application (can be run locally, or via [website](https://biop This app is written as a part of **Cambridge Bioinformatics Hackathon 2020** ([link](https://cambiohack.uk)).  -**All the documentation is available on out [site](https://ostash-group.github.io/BGCViz/#/)** +**All the documentation is available on our [site](https://ostash-group.github.io/BGCViz)** ![Biocircos](images/biocircos.png) @@ -36,7 +36,7 @@ Currently, the app supports annotations from such sources: # Contributing -There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement smth from out TO-DO list.  +There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement anything from our TO-DO list.  If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) From 417f1288fc6ba305a52b809b8ba25cd6408ded59 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 2 Feb 2021 11:47:04 +0200 Subject: [PATCH 016/199] Added badges Former-commit-id: 7d48a3258bc46fb7839109ebe0fb1be47bd17438 --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 0f99a0e..b5c83dc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,14 @@ # BGCViz +![Visitor count](https://shields-io-visitor-counter.herokuapp.com/badge?page=ostash-group.BGCViz&style=for-the-badge) +![GitHub](https://img.shields.io/github/license/ostash-group/BGCViz?style=for-the-badge) +![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/ostash-group/BGCViz?include_prereleases&style=for-the-badge) +![GitHub issues](https://img.shields.io/github/issues/ostash-group/BGCViz?style=for-the-badge) +![GitHub Repo stars](https://img.shields.io/github/stars/ostash-group/BGCViz?style=for-the-badge) +![GitHub contributors](https://img.shields.io/github/contributors/ostash-group/BGCViz?style=for-the-badge) + +![DOI](http://img.shields.io/badge/DOI-10.13140%20%2F%20RG.2.2.23431.01444-blue.svg?style=for-the-badge) + BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both:  - "regions of interest", annotated with more than one tool. From a90e77dc6b85bdd61742f053031dfc40793c8b36 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 3 Feb 2021 21:05:59 +0200 Subject: [PATCH 017/199] Replaced IntervalSurgeon with GRanges Former-commit-id: c58bd7c83e161e0135d41211b4a910012bcc2b1c --- app.R | 214 ++++++++++++++++++++++--------------------- docs/Installation.md | 10 +- docs/_coverpage.md | 2 +- 3 files changed, 119 insertions(+), 107 deletions(-) mode change 100644 => 100755 docs/Installation.md mode change 100644 => 100755 docs/_coverpage.md diff --git a/app.R b/app.R index f8223b4..26ab75c 100755 --- a/app.R +++ b/app.R @@ -12,16 +12,14 @@ library(shiny) library(tidyverse) library(plyr) -library(IntervalSurgeon) library(plotly) library(BioCircos) library(ggplot2) library(shinyjs) library(rjson) library(stringr) -library(RSQLite) -library(readr) library(DT) +library(GenomicRanges) # Define UI ui <- fluidPage( @@ -1326,15 +1324,11 @@ server <- function(input, output, session) { # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time get_interception <- function(x,y) { - interseption <- annotate(x, y) - inter_x <- unlist(interseption, use.names=FALSE) - inter_tmp <- which(sapply(interseption,length )!=0) - inter_y <- c() - if (length(inter_tmp) != 0) { - tmp <- sapply(interseption,length) - for (i in seq(1:length(tmp[which(tmp != 0)]))) { - inter_y <- c(inter_y,rep(inter_tmp[i],tmp[which(tmp != 0)][i])) - }} + query <- makeGRangesFromDataFrame(x) + subject <- makeGRangesFromDataFrame(y) + interseption <- findOverlaps(query,subject) + inter_x <- interseption@to + inter_y <- interseption@from return(list(inter_x, inter_y)) } @@ -1343,54 +1337,54 @@ server <- function(input, output, session) { # ANTISMASH if (vals$anti_data_input == TRUE){ anti_inter <- biocircos_anti %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" } # PRISM if (vals$prism_data_input == TRUE){ # Store PRISM data start/stop as matrix for further interception calculation prism_inter <- biocircos_prism %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + prism_inter$seqnames <- "chr" } #SEMPI if (vals$sempi_data_input == TRUE){ # Store SEMPI data start/stop as matrix for further interception calculation sempi_inter <- biocircos_sempi %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + sempi_inter$seqnames <- "chr" } #RRE-FINDER if (vals$rre_data_input == TRUE){ # Store RREFinder data start/stop as matrix for futher interception calculation rre_inter <- biocircos_rre%>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + rre_inter$seqnames <- "chr" } #DEEPBGC if (vals$deep_data_input == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) %>% - as.matrix() + select(nucl_start, nucl_end) + deep_inter$seqnames <- "chr" } if (input$prism_supp == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + prism_supp_inter$seqnames <- "chr" } if (vals$arts_data_input == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation arts_inter <- biocircos_arts %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + arts_inter$seqnames <- "chr" } @@ -1948,59 +1942,57 @@ server <- function(input, output, session) { mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% filter(num_domains>=input$domains_filter, score>=dataframe_1/100, num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter, score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100) %>% - select(nucl_start, nucl_end) %>% - as.matrix() + select(Start = nucl_start, Stop = nucl_end) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + # Store antismash bgc start amd atop values as matrix if (input$ref_comparison == 'A'){ anti_inter <- vals$anti_data %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'P'){ anti_inter <- vals$prism_data %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'S'){ anti_inter <- vals$sempi_data %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" } # Get the interception of two matrices - interseption <- annotate(deep_inter, anti_inter) #Here we use IntervalSurgeon to get intersection list - - # Add zero elements to the new vector. Those are the values that have no interception and annotated only by deepBGC - new_vect <- c() - if (length(interseption) >0 ) { - for (i in 1:length(interseption )){ - if (is.integer0(interseption[[i]])) { - new_vect = c(new_vect , i) - } - } + if (length(deep_inter$Start) > 0) { + query <- makeGRangesFromDataFrame(deep_inter) + subject <- makeGRangesFromDataFrame(anti_inter) + interseption <- findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 } - # Get number for interception bgc - inter_bgc <- length(unlist(interseption)) - # Get nember of non intercepted antismash data + if (input$ref_comparison == 'A'){ - used_antismash <- length(vals$anti_data$Cluster)-length(unlist(interseption)) + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'P'){ - used_antismash <- length(vals$prism_data$Cluster)-length(unlist(interseption)) + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'S') { - used_antismash <- length(vals$sempi_data$Cluster)-length(unlist(interseption)) + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") } - - # Number of only DeepBGC annotated clusters - len_new <- length(new_vect) + # Combine all vectors into one dataframe fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), cols, c(used_antismash, inter_bgc, len_new)) @@ -2110,8 +2102,9 @@ server <- function(input, output, session) { dplyr::select(ID,Chr ,Start, Stop, Type, Type2) # Extract only Start and Stop from antismash data into matrix anti_inter <- vals$anti_data %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" + } if (vals$deep_data_input == TRUE){ # Store deepbgc max score in a vector for chosen columns @@ -2139,8 +2132,9 @@ server <- function(input, output, session) { vals$deep_data_chromo <- deep_data_chromo deep_inter <- deep_data_chromo deep_inter <- deep_inter %>% - select(nucl_start, nucl_end) %>% - as.matrix() + select(nucl_start, nucl_end) + + deep_inter$seqnames <- "chr" } if (vals$rre_data_input == TRUE){ # Convert numeric columns in a dataframe as a numeric @@ -2150,8 +2144,8 @@ server <- function(input, output, session) { rre_data <- data.frame(vals$rre_data) # Start/Stop columns from rre data as matrix rre_inter <- rre_data %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + rre_inter$seqnames <- "chr" if (input$rre_width == TRUE) { Stop_vals_RRE <- as.numeric(vals$rre_data$Stop)+50000 } else{ @@ -2162,23 +2156,23 @@ server <- function(input, output, session) { # Store master prism data in local variable prism_data <- vals$prism_data # Start/Stop columns from prism data as matrix - prism_inter <- vals$prism_data %>% - select(Start,Stop) %>% - as.matrix() + prism_inter <- prism_data %>% + select(Start,Stop) + prism_inter$seqnames <- "chr" } if (vals$sempi_data_input == TRUE){ # Store master prism data in local variable sempi_data <- vals$sempi_data # Start/Stop columns from prism data as matrix sempi_inter <- vals$sempi_data %>% - select(Start,Stop) %>% - as.matrix() + select(Start,Stop) + sempi_inter$seqnames <- "chr" } if (input$prism_supp == T){ prism_supp <- vals$prism_supp prism_supp_inter <- prism_supp %>% - select(Start,Stop) %>% - as.matrix() + select(Start,Stop) + prism_supp_inter$seqnames <- "chr" if (input$prism_supp_width == TRUE) { Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 } else{ @@ -2192,8 +2186,8 @@ server <- function(input, output, session) { filter(Core == input$dup_choice | Core == "Not_core") } arts_inter <- arts_data %>% - select(Start,Stop) %>% - as.matrix() + select(Start,Stop) + arts_inter$seqnames <- "chr" if (input$arts_width == TRUE) { Stop_vals_arts <- as.numeric(arts_data$Stop)+20000 } else{ @@ -2203,8 +2197,10 @@ server <- function(input, output, session) { get_prism_inter <- function(x,prism_inter,prism_data, letter ){ # Get an interception of prism and smth - interseption <- annotate(x,prism_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(prism_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- prism_data[inter,] # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover seg_df_3 <- data.frame(x=as.numeric(data$Start), @@ -2221,8 +2217,10 @@ server <- function(input, output, session) { } get_sempi_inter <- function(x,sempi_inter,sempi_data, letter ){ # Get an interception of sempi and smth - interseption <- annotate(x,sempi_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(sempi_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- sempi_data[inter,] # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover seg_df <- data.frame(x=as.numeric(data$Start), @@ -2239,8 +2237,10 @@ server <- function(input, output, session) { } get_anti_inter <- function(x,anti_inter,anti_data_chromo, letter ){ # Get an interception of deepBGC and antismash data - interseption <- annotate( x,anti_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(anti_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- anti_data_chromo[inter,] seg_df_1 <- data.frame(x=as.numeric( data$Start), y=rep(letter, length(data$ID)), @@ -2256,8 +2256,10 @@ server <- function(input, output, session) { } get_deep_inter <- function(x,deep_inter,deep_data_chromo, letter ){ # Get an interception of deepBGC and antismash data - interseption <- annotate(x, deep_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(deep_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- deep_data_chromo[inter,] # Create a dataframe with antismash data, interce[ted with deepbgc with all the additional info to visualize on hover seg_df_1 <- data.frame(x=as.numeric( data$nucl_start), @@ -2276,8 +2278,10 @@ server <- function(input, output, session) { } get_RRE_inter <- function(x,rre_inter,rre_data, letter ){ # Get an interception of RREFinder and antismash - interseption <- annotate(x, rre_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(rre_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- rre_data[inter,] if (input$rre_width == TRUE) { Stop_vals_RRE_in <- as.numeric(data$Stop)+50000 @@ -2319,8 +2323,10 @@ server <- function(input, output, session) { } get_prism_supp_inter <- function(x,prism_supp_inter,prism_supp, letter ){ # Get an interception of RREFinder and antismash - interseption <- annotate(x, prism_supp_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(prism_supp_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- prism_supp[inter,] if (input$prism_supp_width == TRUE) { Stop_vals_prism_supp_in <- as.numeric(data$Stop)+50000 @@ -2346,8 +2352,10 @@ server <- function(input, output, session) { } get_arts_inter <- function(x,arts_inter, arts_data, letter ){ # Get an interception of RREFinder and antismash - interseption <- annotate(x, arts_inter) - inter <- unlist(interseption, use.names=FALSE) + query <- makeGRangesFromDataFrame(arts_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from data <- arts_data[inter,] if (input$arts_width == TRUE) { Stop_vals_arts_in <- as.numeric(data$Stop)+20000 @@ -3334,15 +3342,11 @@ server <- function(input, output, session) { # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time get_interception <- function(x,y) { - interseption <- annotate(x, y) - inter_x <- unlist(interseption, use.names=FALSE) - inter_tmp <- which(sapply(interseption,length )!=0) - inter_y <- c() - if (length(inter_tmp) != 0) { - tmp <- sapply(interseption,length) - for (i in seq(1:length(tmp[which(tmp != 0)]))) { - inter_y <- c(inter_y,rep(inter_tmp[i],tmp[which(tmp != 0)][i])) - }} + query <- makeGRangesFromDataFrame(x) + subject <- makeGRangesFromDataFrame(y) + interseption <- findOverlaps(query,subject) + inter_x <- interseption@to + inter_y <- interseption@from return(list(inter_x, inter_y)) } @@ -3360,54 +3364,54 @@ server <- function(input, output, session) { # ANTISMASH if (vals$anti_data_input == TRUE){ anti_inter <- biocircos_anti %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + anti_inter$seqnames <- "chr" } # PRISM if (vals$prism_data_input == TRUE){ # Store PRISM data start/stop as matrix for further interception calculation prism_inter <- biocircos_prism %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + prism_inter$seqnames <- "chr" } #SEMPI if (vals$sempi_data_input == TRUE){ # Store SEMPI data start/stop as matrix for further interception calculation sempi_inter <- biocircos_sempi %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + sempi_inter$seqnames <- "chr" } #RRE-FINDER if (vals$rre_data_input == TRUE){ # Store RREFinder data start/stop as matrix for futher interception calculation rre_inter <- biocircos_rre%>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + rre_inter$seqnames <- "chr" } #DEEPBGC if (vals$deep_data_input == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) %>% - as.matrix() + select(nucl_start, nucl_end) + deep_inter$seqnames <- "chr" } if (input$prism_supp == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + prism_supp_inter$seqnames <- "chr" } if (vals$arts_data_input == TRUE){ # Store deepbgc data start/stop as matrix for futher interception calculation arts_inter <- biocircos_arts %>% - select(Start, Stop) %>% - as.matrix() + select(Start, Stop) + arts_inter$seqnames <- "chr" } #CALCULATIONS diff --git a/docs/Installation.md b/docs/Installation.md old mode 100644 new mode 100755 index 8979dd2..3e5125f --- a/docs/Installation.md +++ b/docs/Installation.md @@ -5,8 +5,16 @@ The app itself is written in R and is available as a [shiny app server](https:// ## Base packages All packages can be installed via R console in Rstudio via: ```R -install.packages(c("BioCircos", "ggplot2", "plotly", "IntervalSurgeon", "plyr", "tidyverse", "shiny", "DT" ,"rjson" )) +install.packages(c("BioCircos", "ggplot2", "plotly", "plyr", "tidyverse", "shiny", "DT" ,"rjson", "stringr", "shinyjs" )) ``` +After, to install GenomicRanges package please run +```R +if (!requireNamespace("BiocManager", quietly = TRUE)) + install.packages("BiocManager") + +BiocManager::install("GenomicRanges") +``` + If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: `conda install r-base rstudio` diff --git a/docs/_coverpage.md b/docs/_coverpage.md old mode 100644 new mode 100755 index 3ab9bd4..7c0eb5d --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,5 +1,5 @@ -# BGCViz 1.0 +# BGCViz 1.1 > A integrative BGC interception visualisation tool From 064cd743a5b9cd45998cd4a05bdbaeec82d146f1 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 8 Mar 2021 20:03:24 +0200 Subject: [PATCH 018/199] Changed link to an app Former-commit-id: 4c551f9ef91c49eccdc04c91f99a63a9068c2764 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b5c83dc..56b007f 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ![DOI](http://img.shields.io/badge/DOI-10.13140%20%2F%20RG.2.2.23431.01444-blue.svg?style=for-the-badge) -BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: +BGCViz is a shiny application (can be run locally, or via [website](https://ostash-group.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both:  - "regions of interest", annotated with more than one tool. From 7bbcd761a21766e3f991f869792bd4010c95763f Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 8 Mar 2021 20:04:24 +0200 Subject: [PATCH 019/199] Changed link for an app Former-commit-id: 8842c1e57c3b3aa9f7a25f84e3370e064993617e --- docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Installation.md b/docs/Installation.md index 3e5125f..4cf4cd7 100755 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -1,6 +1,6 @@ # Installation -The app itself is written in R and is available as a [shiny app server](https://biopavlohrab.shinyapps.io/BGCViz/) with no istallation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation +The app itself is written in R and is available as a [shiny app server](https://ostash-group.shinyapps.io/BGCViz/) with no istallation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation ## Base packages All packages can be installed via R console in Rstudio via: From 3bd73b8a899256f937a2922af145694399eb321e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 8 Mar 2021 20:05:00 +0200 Subject: [PATCH 020/199] Changed link to an app Former-commit-id: 79db7648d90e0079cf37307fc28a138100cacb88 --- docs/Introduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Introduction.md b/docs/Introduction.md index b6e844c..e93e117 100644 --- a/docs/Introduction.md +++ b/docs/Introduction.md @@ -1,6 +1,6 @@ # BGCViz -BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: +BGCViz is a shiny application (can be run locally, or via [website](https://ostash-group.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both:  - "regions of interest", annotated with more than one tool. @@ -63,4 +63,4 @@ If you have any questions, suggestions, or bugs with the BGCViz please let us kn This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: -P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 \ No newline at end of file +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 From 5f7749b19c9423645dc38afa5ab8e3ab6904ecea Mon Sep 17 00:00:00 2001 From: pavlohrab Date: Mon, 17 May 2021 11:56:26 +0300 Subject: [PATCH 021/199] Fixed weird issue when hexadecimal numbers were converted to integers in $biocircos and $biocircos_legend Former-commit-id: 76951bcefaba2bdce206eef899d140e099db4b85 --- app.R | 9086 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 4543 insertions(+), 4543 deletions(-) diff --git a/app.R b/app.R index 26ab75c..62263a4 100755 --- a/app.R +++ b/app.R @@ -1,4543 +1,4543 @@ -# This is a Shiny web application. You can run the application by clicking -# the 'Run App' button above. -# -# Author: Pavlo Hrab -# Made as part of Cambridge bioinformatics hackaton -# -# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH and RREFinder -# to visualized interception of those different annotations in one genome -# - -# Upload required libraries -library(shiny) -library(tidyverse) -library(plyr) -library(plotly) -library(BioCircos) -library(ggplot2) -library(shinyjs) -library(rjson) -library(stringr) -library(DT) -library(GenomicRanges) - -# Define UI -ui <- fluidPage( - - # Application title - titlePanel("BGCViz"), - - # Sidebar - useShinyjs(), - sidebarLayout( - sidebarPanel( - # Data upload - h3("Data upload and necesary input:"), - checkboxInput("hide_uploads", "Hide upload fields"), - h5(id = "anti_header_upload","ANTISMASH:"), - checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), - fileInput("anti_data", - "Upload antismash data"), - actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - h5(id = "prism_header_upload","PRISM:"), - checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), - fileInput("prism_data", - "Upload PRISM data"), - actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - h5(id = "sempi_header_upload","SEMPI:"), - fileInput("sempi_data", - "Upload SEMPI 2.0 data"), - actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - h5(id = "deep_header_upload","DEEPBGC:"), - fileInput("deep_data", - "Upload DeepBGC data"), - actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - h5(id = "rre_header_upload","RRE-FINDER:"), - fileInput("rre_data", - "Upload RRE-Finder data"), - actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - h5(id = "arts_header_upload","ARTS:"), - fileInput("known_data", - "Upload ARTS knownhits data"), - fileInput("dup_data", - "Upload ARTS duptable data"), - actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), - # Numeric input of chromosome length of analyzed sequence - numericInput("chr_len", "Please type chr len of an organism", value = 10000000), - h3("Data manipulation options"), - checkboxInput("hide_anti", "Hide data manipulation fields"), - h5(id = "anti_header","Antismash data options:"), - checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - h5(id = "prism_header","PRISM data options:"), - checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - checkboxInput("prism_supp", "Use PRISM resistance and regulatory genes information'"), - h5(id = "sempi_header","SEMPI data options:"), - checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - h5(id = "arts_header","ARTS data options:"), - selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All"), - h3(id = "genes_on_chr","Genes on chromosome plot controls:"), - checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), - selectInput("ref", "Choose reference data", choices = c("Antismash" = "Antismash", - "DeepBGC" = "DeepBGC", - "RRE-Finder" = "RRE-Finder", - "PRISM" = "PRISM", - "SEMPI" = "SEMPI", - "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS"), - selected = "Antismash"), - h3(id = "summarize","Summarize options:"), - checkboxInput("hide_summarize", "Hide summarize options"), - selectInput("group_by", "Group data by", choices = c("Antismash" = "A", - "DeepBGC" = "D", - "RRE-Finder" = "R", - "PRISM" = "P", - "SEMPI" = "S", - "PRISM-supp" = "PS", - "ARTS" = "AR"), - selected = 'A'), - checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - h3("Improve visualization:"), - checkboxInput("hide_viz", "Hide improve visualization options"), - #Improve RREFinder annotated BCG visibility - fileInput("rename_data", - "Upload renaming and coloring scheme"), - actionButton("rename", "Rename"), - actionButton("reset_name", "Reset"), - checkboxInput("rre_width", "Add thickness to RRE results visualization"), - checkboxInput("prism_supp_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c("Antismash" = "Antismash", - "PRISM" = "PRISM", - "RRE-Finder" = "RRE", - 'DeepBGC' = "DeepBGC", - "SEMPI" = "SEMPI", - "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS" - ), - selected = 'Antismash'), - h3(id="data_comparison_header","Comparison with DeepBGC plots:"), - checkboxInput("hide_data_comparison", "Hide data comparison options"), - selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c("Antismash" = "A", - "PRISM" = "P", - "SEMPI" = "S"), - selected = 'A'), - # Score to use for thresholds - selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 100, value = 0), - - # DeepBGC data filtering - h3(id="data_filter_header","DeepBGC data filtering:"), - checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), - # Different score filtering. Remain >= of set threshold - sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins filter. Remain >= of set threshold - sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), - - # Donwload currently used datasets - downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - - ), - - # Show plots - mainPanel( - tabsetPanel( - tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), - tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), - plotlyOutput("deep_reference", height = "500px")), - tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), - tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),tableOutput("group_table")), - type = "tabs", id = "main" - ) - ) - ) -) - -# Define server logic -server <- function(input, output, session) { - options(shiny.maxRequestSize=100*1024^2) - # Small function to make integers zeros - is.integer0 <- function(x) - { - is.integer(x) && length(x) == 0L - } - - biocircos_listen <- reactive({ - list( vals$sempi_data,vals$rre_data, vals$deep_data, vals$anti_data, vals$prism_data, input$biocircos_color, - input$group_by, input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$rename, input$reset_name, vals$arts_data, vals$prism_supp) - }) - - # Rective vals the app is using - # Some dataframes that are used through the app + some vectors of untercepted values - vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness = NULL, - biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, - anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE - ) - - vals$rename_data <- read.csv("rename.csv") - - observeEvent(input$anti_sco,{ - anti_data <- read.csv("example_data/sco_antismash.csv") - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "Antismash" ) - updateSelectInput(session, "group_by", - selected = "A" ) - updateSelectInput(session, "ref_comparison", - selected = "A") - updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - } - - }) - - observeEvent(input$prism_sco,{ - # Read data - data <- fromJSON(file = "example_data/sco_prism.json") - - - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - - prism_data <- data.frame(cbind(start, end, types)) - prism_data <- prism_data %>% - transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - vals$biocircos_color = F - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(regul_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(resist_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - - final_reg <- rbind(res_genes, reg_genes) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - vals$prism_supp <- final_reg - vals$prism_json = T - - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "PRISM" ) - updateSelectInput(session, "group_by", - selected = "P" ) - updateSelectInput(session, "ref_comparison", - selected = "P") - updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - } - }) - - observeEvent(input$sempi_sco,{ - - sempi_data <- read.csv("example_data/sco_sempi.csv") - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "SEMPI" ) - updateSelectInput(session, "group_by", - selected = "S" ) - updateSelectInput(session, "ref_comparison", - selected = "S") - updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - } - - }) - - observeEvent(input$arts_sco, { - - data <- read.delim("example_data/sco_duptable.tsv") - - get_location_duptable <- function(x, y){ - test <- str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - - data <- read.delim("example_data/sco_knownhits.tsv") - locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - }) - - observeEvent(input$deep_sco, { - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") - # Read data - vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) - # Add chromosome info column - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "DeepBGC" ) - updateSelectInput(session, "group_by", - selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } - }) - - observeEvent(input$rre_sco, { - # Read data - vals$rre_data <- read.delim("example_data/sco_rre.txt") - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", - selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } - }) - - # Observe antismash data input and save as reactive value - observeEvent(input$anti_data,{ - # Read data - if (input$anti_input_options==T){ - anti_data <- read.csv(input$anti_data$datapath) - vals$biocircos_color = T - }else{ - data <- fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - tolower(x$qualifiers$product) - } - }) - }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - unlist(x$location) - } - }) - ) - }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - separate(split, c("Start", "Stop")) %>% - transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - vals$biocircos_color = F - - } - - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "Antismash" ) - updateSelectInput(session, "group_by", - selected = "A" ) - updateSelectInput(session, "ref_comparison", - selected = "A") - updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - } - - }) - - observeEvent(input$sempi_data,{ - - sempi_data <- read.csv(input$sempi_data$datapath) - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "SEMPI" ) - updateSelectInput(session, "group_by", - selected = "S" ) - updateSelectInput(session, "ref_comparison", - selected = "S") - updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - } - - }) - - observeEvent(input$known_data, { - data <- read.delim(input$known_data$datapath) - locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - write.csv(vals$known_data, "knownhits_data.csv", row.names = F) - if ((vals$dup_data_input == T)){ - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - }) - - observeEvent(input$dup_data, { - data <- read.delim(input$dup_data$datapath) - - get_location_duptable <- function(x, y){ - test <- str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - write.csv(dup_table, "duptable_data.csv", row.names = F) - if ((vals$known_data_input == T)){ - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - }) - - # Observe PRISM data input and save in reactive dataframe - observeEvent(input$prism_data,{ - # Read data - if (input$prism_input_options == T){ - prism_data <- read.csv(input$prism_data$datapath) - vals$biocircos_color = T - } else{ - data <- fromJSON(file = input$prism_data$datapath) - - - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - - prism_data <- data.frame(cbind(start, end, types)) - prism_data <- prism_data %>% - transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - vals$biocircos_color = F - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(regul_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(resist_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - - final_reg <- rbind(res_genes, reg_genes) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - vals$prism_supp <- final_reg - vals$prism_json = T - - } - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "PRISM" ) - updateSelectInput(session, "group_by", - selected = "P" ) - updateSelectInput(session, "ref_comparison", - selected = "P") - updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - } - }) - - #Read and clean DeepBGC data - observeEvent(input$deep_data, { - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") - # Read data - vals$deep_data <- read.delim(input$deep_data$datapath) %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) - # Add chromosome info column - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "DeepBGC" ) - updateSelectInput(session, "group_by", - selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } - }) - - # Read RREFinder data - observeEvent(input$rre_data, { - # Read data - vals$rre_data <- read.delim(input$rre_data$datapath) - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", - selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } - }) - # Observe input of chromosome length - observeEvent(input$chr_len,{ - vals$chr_len <- input$chr_len - }) - - observeEvent(vals$rre_data_input, { - if (vals$rre_data_input == T){ - if (input$hide_viz == F){ - showElement(selector = "#rre_width") - } - } else{ - hideElement(selector = "#rre_width") - } - }) - - observeEvent(vals$anti_data_input, { - if (vals$anti_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") - } - } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - } - }) - - observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - showElement(selector = "#prism_supp") - } - } - if (input$hide_viz == F){ - if (vals$prism_json == T){ - showElement(selector = "#prism_supp_width") - } - } - } else{ - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#prism_supp_width") - } - }) - - observeEvent(vals$sempi_data_input, { - if (vals$sempi_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") - } - } else{ - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - } - }) - - observeEvent(vals$deep_data_input,{ - if (vals$deep_data_input == T){ - showElement(selector = "#ref_comparison") - showElement(selector = "#hide_data_comparison") - showElement(selector = "#hide_data_filter") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - showElement(selector = "#data_comparison_header") - showElement(selector = "#data_filter_header") - showTab(inputId = "main", target = "1") - } else{ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#hide_data_comparison") - hideElement(selector = "#hide_data_filter") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - hideElement(selector = "#data_comparison_header") - hideElement(selector = "#data_filter_header") - hideTab(inputId = "main", target = "1") - } - }) - - observeEvent(vals$data_upload_count, { - if (vals$data_upload_count <2){ - hideTab("main", "2") - hideTab("main", "3") - }else{ - if (input$hide_summarize == F) { - showElement(selector = "#summarize") - showElement(selector = "#group_by") - showElement(selector = "#count_all") - } - if (input$hide_viz == F){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") - } - showTab("main", "2") - showTab("main", "3") - } - if (vals$data_upload_count <1){ - hideTab("main", "4") - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#hide_genes_on_chr") - hideElement(selector = "#ref") - }else{ - showTab("main", "4") - if (input$hide_genes_on_chr == F){ - showElement(selector = "#genes_on_chr") - showElement(selector = "#hide_genes_on_chr") - showElement(selector = "#ref") - } - - } - }) - - observeEvent(input$label_color_class, { - if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") - } else { - hideElement(selector = "#ref_col_biocircos") - } - }) - - observeEvent(input$anti_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$anti_hybrid==T){ - vals$anti_data$Type2 <- hybrid_col(vals$anti_data) - }else { - vals$anti_data$Type2 <- vals$anti_type - } - - }) - - observeEvent(input$prism_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$prism_hybrid==T){ - vals$prism_data$Type2 <- hybrid_col(vals$prism_data) - }else { - vals$prism_data$Type2 <- vals$prism_type - } - }) - - observeEvent(input$sempi_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$sempi_hybrid==T){ - vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) - }else { - vals$sempi_data$Type2 <- vals$sempi_type - } - }) - - observeEvent(vals$arts_data_input,{ - if (vals$arts_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } - if (input$hide_viz == F){ - showElement(selector = "#arts_width") - } - } else { - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - hideElement(selector = "#arts_width") - } - }) - - observeEvent(input$rename, { - rename_vector <- function(data, renamed_dataframe){ - type <- str_split(data$Type, "__") - type_2 <- sapply(type, function(x){ - sapply(x, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed_dataframe$Group[renamed_dataframe$Code == y] - } else { - y - } - - }) - - }) - type_3 <- sapply(type_2, function(x){ - dupl <- x[!duplicated(x)] - paste(dupl, collapse = "__") - }) - type_4 <- sapply(type_3, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed_dataframe$Group[renamed_dataframe$Code == y] - } else { - y - } - }) - return(type_4) - } - rename_data <- vals$rename_data - if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") - vals$anti_type <- rename_vector(anti_data, rename_data) - anti_data['Type2'] <- vals$anti_type - vals$anti_data <- anti_data - } - - if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") - vals$sempi_type <- rename_vector(sempi_data, rename_data) - sempi_data['Type2'] <- vals$sempi_type - vals$sempi_data <- sempi_data - } - - if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") - vals$prism_type <- rename_vector(prism_data, rename_data) - prism_data['Type2'] <- vals$prism_type - vals$prism_data <- prism_data - } - vals$biocircos_color = T - }) - - observeEvent(input$reset_name, { - - vals$anti_data['Type2'] <- vals$anti_data['Type'] - vals$sempi_data['Type2'] <- vals$sempi_data['Type'] - vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - vals$biocircos_color = FALSE - }) - - observeEvent(input$rename_data,{ - rename_data <- read.csv(input$rename_data$datapath) - vals$rename_data <- rename_data - }) - - observeEvent(biocircos_listen(), { - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - - rename_data <- vals$rename_data - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - # Store data in local variable - biocircos_anti <- vals$anti_data - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Get vector of max values from chosen columns from deepbgc data - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under threshold, print "Under threshold" - deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - vals$biocircos_deep <- biocircos_deep - } - - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - biocircos_rre <- data.frame(vals$rre_data) - biocircos_rre$Start <- as.numeric(biocircos_rre$Start) - biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) - biocircos_rre['Type2'] <- biocircos_rre$Type - biocircos_rre['Cluster'] <- biocircos_rre$ID - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store data in local variable - biocircos_prism <- vals$prism_data - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store data in local variable - biocircos_sempi <- vals$sempi_data - } - - if (input$prism_supp == TRUE){ - # Store data in local variable - biocircos_prism_supp <- vals$prism_supp - } - - - if (vals$arts_data_input == TRUE){ - biocircos_arts <- data.frame(vals$arts_data) - if (input$dup_choice != "All"){ - biocircos_arts <- biocircos_arts %>% - filter(Core == input$dup_choice | Core == "Not_core") - } - } - - - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - get_interception <- function(x,y) { - query <- makeGRangesFromDataFrame(x) - subject <- makeGRangesFromDataFrame(y) - interseption <- findOverlaps(query,subject) - inter_x <- interseption@to - inter_y <- interseption@from - return(list(inter_x, inter_y)) - } - - # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - anti_inter <- biocircos_anti %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store PRISM data start/stop as matrix for further interception calculation - prism_inter <- biocircos_prism %>% - select(Start, Stop) - prism_inter$seqnames <- "chr" - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store SEMPI data start/stop as matrix for further interception calculation - sempi_inter <- biocircos_sempi %>% - select(Start, Stop) - sempi_inter$seqnames <- "chr" - } - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - # Store RREFinder data start/stop as matrix for futher interception calculation - rre_inter <- biocircos_rre%>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) - deep_inter$seqnames <- "chr" - } - - - if (input$prism_supp == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) - prism_supp_inter$seqnames <- "chr" - } - - if (vals$arts_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - arts_inter <- biocircos_arts %>% - select(Start, Stop) - arts_inter$seqnames <- "chr" - } - - - - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_a1_t<- get_interception(data1_inter, data2_inter) - inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) - inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) - return(list(inter_rre_s, inter_s_rre_n)) - } - - rre_interact <- c() - anti_interact <- c() - prism_interact <- c() - deep_interact <- c() - sempi_interact <- c() - prism_supp_interact <- c() - arts_interact <- c() - - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) - - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - - # Get interception of antismash with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) - vals$inter_p_ref_n <- output[[2]] - vals$inter_a3 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "P") - df_a <- merge(df_a, df_tmp, all = T) - } - # Get interception of antismash with deepbgc - if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) - vals$inter_d_ref_n <- output[[2]] - vals$inter_a1 <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) - colnames(df_tmp) <- c("A", "D") - df_a <- merge(df_a, df_tmp, all = T) - } - # Get interception of antismash with RREFinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) - vals$inter_rre_ref_n <- output[[2]] - vals$inter_a2 <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "R") - df_a <- merge(df_a, df_tmp, all = T) - } - # Get interception of antismash with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) - vals$inter_s_ref_n <- output[[2]] - vals$inter_a4 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "S") - df_a <- merge(df_a, df_tmp, all = T) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "PS") - df_a <- merge(df_a, df_tmp, all = T) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "AR") - df_a <- merge(df_a, df_tmp, all = T) - } - # Write csvs with locally used variables - write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) - } - - # DEEPBGC - if (vals$deep_data_input == TRUE){ - - # Get interception of DeepBGC with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) - vals$inter_rre_d_n <- output[[2]] - vals$inter_d_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "R") - df_d <- merge(df_d, df_tmp, all = T) - } - # Get interception of DeepBGC with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) - vals$inter_p_d_n <- output[[2]] - vals$inter_d_p <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "P") - df_d <- merge(df_d, df_tmp, all = T) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) - vals$inter_s_d_n <- output[[2]] - vals$inter_d_s <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "S") - df_d <- merge(df_d, df_tmp, all = T) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "PS") - df_d <- merge(df_d, df_tmp, all = T) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "AR") - df_d <- merge(df_d, df_tmp, all = T) - } - # Write csvs with locally used variables - write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - - # Get interception of PRISM with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) - vals$inter_rre_p_n <- output[[2]] - vals$inter_p_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - prism_interact <- c(prism_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "R") - df_p <- merge(df_p, df_tmp, all = T) - } - # Get interception of PRISM with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "S") - df_p <- merge(df_p, df_tmp, all = T) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "PS") - df_p <- merge(df_p, df_tmp, all = T) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "AR") - df_p <- merge(df_p, df_tmp, all = T) - } - # Write csvs with locally used variables - write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) - } - - # RRE-FINDER - if (vals$rre_data_input == TRUE){ - - # Get interception of RRE with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) - vals$inter_s_rre_n <- output[[2]] - vals$inter_rre_s <- output[[1]] - rre_interact <- c(rre_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "S") - df_r <- merge(df_r, df_tmp, all = T) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "PS") - df_r <- merge(df_r, df_tmp, all = T) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "AR") - df_r <- merge(df_r, df_tmp, all = T) - - } - # Write csvs with locally used variables - write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "PS") - df_s <- merge(df_s, df_tmp, all = T) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "AR") - df_s <- merge(df_s, df_tmp, all = T) - } - # Write csvs with locally used variables - write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) - } - - if (input$prism_supp == TRUE){ - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) - prism_supp_interact <- c(prism_supp_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("PS", "AR") - df_ps <- merge(df_ps, df_tmp, all = T) - } - write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) - } - - if (vals$arts_data_input == TRUE){ - write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) - } - - vals$df_a <- df_a - vals$df_d <- df_d - vals$df_p <- df_p - vals$df_r <- df_r - vals$df_s <- df_s - vals$df_ps <- df_ps - vals$rre_interact <- rre_interact - vals$anti_interact <- anti_interact - vals$prism_interact <- prism_interact - vals$deep_interact <- deep_interact - vals$sempi_interact <- sempi_interact - vals$prism_supp_interact <- prism_supp_interact - vals$arts_interact <- arts_interact - - - }) - - observeEvent(input$hide_uploads, { - if (input$hide_uploads == T){ - hideElement(selector = "#anti_input_options") - hideElement(selector = "#anti_data") - hideElement(selector = "#prism_input_options") - hideElement(selector = "#anti_header_upload") - hideElement(selector = "#prism_header_upload") - hideElement(selector = "#prism_data") - hideElement(selector = "#sempi_header_upload") - hideElement(selector = "#sempi_data") - hideElement(selector = "#deep_header_upload") - hideElement(selector = "#deep_data") - hideElement(selector = "#rre_header_upload") - hideElement(selector = "#rre_data") - hideElement(selector = "#chr_len") - hideElement(selector = "#arts_header_upload") - hideElement(selector = "#known_data") - hideElement(selector = "#dup_data") - hideElement(selector = "#anti_sco") - hideElement(selector = "#prism_sco") - hideElement(selector = "#arts_sco") - hideElement(selector = "#rre_sco") - hideElement(selector = "#sempi_sco") - hideElement(selector = "#deep_sco") - }else { - showElement(selector = "#anti_input_options") - showElement(selector = "#anti_data") - showElement(selector = "#prism_input_options") - showElement(selector = "#anti_header_upload") - showElement(selector = "#prism_header_upload") - showElement(selector = "#prism_data") - showElement(selector = "#sempi_header_upload") - showElement(selector = "#sempi_data") - showElement(selector = "#deep_header_upload") - showElement(selector = "#deep_data") - showElement(selector = "#rre_header_upload") - showElement(selector = "#rre_data") - showElement(selector = "#chr_len") - showElement(selector = "#arts_header_upload") - showElement(selector = "#known_data") - showElement(selector = "#dup_data") - showElement(selector = "#anti_sco") - showElement(selector = "#prism_sco") - showElement(selector = "#arts_sco") - showElement(selector = "#rre_sco") - showElement(selector = "#sempi_sco") - showElement(selector = "#deep_sco") - } - }) - - observeEvent(input$hide_anti, { - if (input$hide_anti== T){ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - }else{ - if (vals$anti_data_input == T){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") - } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - } - if (vals$prism_data_input == T){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - showElement(selector = "#prism_supp") - } - } else { - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - } - if (vals$sempi_data_input == T){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") - } else { - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } else{ - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - } - } - }) - - observeEvent(input$hide_genes_on_chr, { - if (input$hide_genes_on_chr == T){ - hideElement(selector = "#ref") - } else { - if (vals$data_upload_count > 0){ - showElement(selector = "#ref") - } else { - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#ref") - } - } - }) - - observeEvent(input$hide_summarize, { - if (input$hide_summarize == T){ - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } else { - if (vals$data_upload_count > 1){ - showElement(selector = "#group_by") - showElement(selector = "#count_all") - } else { - hideElement(selector = "#summarize") - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } - - } - }) - - observeEvent(input$hide_viz, { - if (input$hide_viz == T){ - hideElement(selector = "#rename_data") - hideElement(selector = "#rename") - hideElement(selector = "#reset_name") - hideElement(selector = "#rre_width") - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - hideElement(selector = "#ref_col_biocircos") - hideElement(selector = "#arts_header") - } else{ - showElement(selector = "#rename_data") - showElement(selector = "#rename") - showElement(selector = "#reset_name") - if (vals$rre_data_input == T){ - showElement(selector = "#rre_width") - } else { - hideElement(selector = "#rre_width") - } - if (vals$prism_json == T){ - showElement(selector = "#prism_supp_width") - } - else { - hideElement(selector = "#prism_supp_width") - } - if (vals$data_upload_count > 1){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") - } else { - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - } - if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") - } else { - hideElement(selector = "#ref_col_biocircos") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - } else { - hideElement(selector = "#arts_header") - } - - } - }) - - observeEvent(input$hide_data_comparison, { - if ((input$hide_data_comparison == T)){ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - } else if (vals$deep_data_input == T) { - showElement(selector = "#ref_comparison") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - } else { - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - } - }) - - observeEvent(input$hide_data_filter, { - if ((input$hide_data_filter == T)){ - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - } else if (vals$deep_data_input == T){ - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - } else { - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - } - }) - - - #Render output plots - - # Render barplot - output$deep_barplot <- renderPlot({ - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- drop_na(fullnes_of_annotation) - - # Vectors of columns of score values in DeepBGC data for later subset - score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") - score_bgc <- c("deepbgc_score") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Subset dataframe with scores' vectors. Get max value vectors - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - - # Decide which score to use for basic thresholds on x axis - if (input$score_type == "Activity") { - score_type <- score_activity - } else if (input$score_type == "DeepBGC") { - score_type <- score_bgc - } else if (input$score_type == "Cluster_Type") { - score_type <- score_cluster_type - } - - # Get max value vector for chosen score - chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) - - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - # Store DeepBGC dataframe in variable - deep_inter <- vals$deep_data - #Store max value in separate column - deep_inter$score <- chosen_score_vector - # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix - deep_inter <- deep_inter %>% - mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(num_domains>=input$domains_filter, score>=dataframe_1/100, num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter, - score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100) %>% - select(Start = nucl_start, Stop = nucl_end) - if (length(deep_inter$Start) > 0) { - deep_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'A'){ - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'P'){ - anti_inter <- vals$prism_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'S'){ - anti_inter <- vals$sempi_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(deep_inter$Start) > 0) { - query <- makeGRangesFromDataFrame(deep_inter) - subject <- makeGRangesFromDataFrame(anti_inter) - interseption <- findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(deep_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison == 'A'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'P'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc - cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'S') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc - cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness <- data.frame(fullnes_of_annotation) - write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), - paste("DeepBGC score:", as.character(input$score_d)), - paste("Cluster type score:", as.character(input$score_c)), sep = "\n") - - # Plot the barplot - ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + - geom_bar(position="dodge", stat="identity")+ - geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + - xlab(paste(input$score_type,"Score")) + - title + - geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$deep_rate <- renderPlotly({ - - # Store scores columns in vectors for DeepBGC data - score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") - score_bgc <- c("deepbgc_score") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Logic of what plot to draw on x axis - if (input$score_type == "Activity") { - score_type <- score_activity - } else if (input$score_type == "DeepBGC") { - score_type <- score_bgc - } else if (input$score_type == "Cluster_Type") { - score_type <- score_cluster_type - } - - # Store max values for chosen score in a vector - chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous renderPlot - fullnes_of_annotation <- data.frame(vals$fullness) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'A'){ - data <- vals$anti_data - title <- ggtitle("Rates of DeepBGC/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'P'){ - data <- vals$prism_data - title <- ggtitle("Rates of DeepBGC/PRISM data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'S'){ - data <- vals$sempi_data - title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - ggplotly(test %>% - pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - geom_line(aes(color=Rates)) + - geom_point(aes(shape=Rates), alpha = .4, size = 3) + - title + - ylab("Rate") + - xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) - - # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information - # For antismash and PRISM data showed only ID, Start, Stop, Type - output$deep_reference <- renderPlotly({ - - # GENERATE DATA - if (vals$anti_data_input == TRUE){ - # Store antismash data in local variable, with column renaming - anti_data_chromo <- vals$anti_data %>% - mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2) - # Extract only Start and Stop from antismash data into matrix - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - - } - if (vals$deep_data_input == TRUE){ - # Store deepbgc max score in a vector for chosen columns - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store DeepBGC data in local variable. - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - - # Add Cluster_type column, which store only the max name of the cluster type - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - - # Clean data, using, thesholds - deep_data_chromo <- deep_data_chromo%>% - # Change to "Under threshold" Cluster_type column values, if they are under chosen theshold (no cluster type will be visualised) - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) %>% - # Add new columns and change product_class to Cluster_type - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - # Store cleaned DeepBGC data into other variable to subset only Start and Stop - deep_data_chromo$Type2 <- deep_data_chromo$product_class - vals$deep_data_chromo <- deep_data_chromo - deep_inter <- deep_data_chromo - deep_inter <- deep_inter %>% - select(nucl_start, nucl_end) - - deep_inter$seqnames <- "chr" - } - if (vals$rre_data_input == TRUE){ - # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(vals$rre_data) - # Start/Stop columns from rre data as matrix - rre_inter <- rre_data %>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - if (input$rre_width == TRUE) { - Stop_vals_RRE <- as.numeric(vals$rre_data$Stop)+50000 - } else{ - Stop_vals_RRE <- as.numeric(vals$rre_data$Stop) - } - } - if (vals$prism_data_input == TRUE){ - # Store master prism data in local variable - prism_data <- vals$prism_data - # Start/Stop columns from prism data as matrix - prism_inter <- prism_data %>% - select(Start,Stop) - prism_inter$seqnames <- "chr" - } - if (vals$sempi_data_input == TRUE){ - # Store master prism data in local variable - sempi_data <- vals$sempi_data - # Start/Stop columns from prism data as matrix - sempi_inter <- vals$sempi_data %>% - select(Start,Stop) - sempi_inter$seqnames <- "chr" - } - if (input$prism_supp == T){ - prism_supp <- vals$prism_supp - prism_supp_inter <- prism_supp %>% - select(Start,Stop) - prism_supp_inter$seqnames <- "chr" - if (input$prism_supp_width == TRUE) { - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 - } else{ - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) - } - } - if (vals$arts_data_input == T){ - arts_data <- vals$arts_data - if (input$dup_choice != "All"){ - arts_data <- arts_data %>% - filter(Core == input$dup_choice | Core == "Not_core") - } - arts_inter <- arts_data %>% - select(Start,Stop) - arts_inter$seqnames <- "chr" - if (input$arts_width == TRUE) { - Stop_vals_arts <- as.numeric(arts_data$Stop)+20000 - } else{ - Stop_vals_arts<- as.numeric(arts_data$Stop) - } - } - - get_prism_inter <- function(x,prism_inter,prism_data, letter ){ - # Get an interception of prism and smth - query <- makeGRangesFromDataFrame(prism_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- prism_data[inter,] - # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover - seg_df_3 <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric(data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("PRISM", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df_3) - } - get_sempi_inter <- function(x,sempi_inter,sempi_data, letter ){ - # Get an interception of sempi and smth - query <- makeGRangesFromDataFrame(sempi_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- sempi_data[inter,] - # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric(data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("SEMPI", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) - } - get_anti_inter <- function(x,anti_inter,anti_data_chromo, letter ){ - # Get an interception of deepBGC and antismash data - query <- makeGRangesFromDataFrame(anti_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- anti_data_chromo[inter,] - seg_df_1 <- data.frame(x=as.numeric( data$Start), - y=rep(letter, length(data$ID)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$ID)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("Antismash", length(data$ID)), - ID = data$ID, - Start = data$Start, - Stop = data$Stop) - return(seg_df_1) - } - get_deep_inter <- function(x,deep_inter,deep_data_chromo, letter ){ - # Get an interception of deepBGC and antismash data - query <- makeGRangesFromDataFrame(deep_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- deep_data_chromo[inter,] - # Create a dataframe with antismash data, interce[ted with deepbgc with all the additional info to visualize on hover - seg_df_1 <- data.frame(x=as.numeric( data$nucl_start), - y=rep(letter, length(data$ID)), - xend=as.numeric( data$nucl_end), - yend=rep(letter, length(data$ID)), - Type = as.factor(data$product_class), - Software = rep("DeepBGC", length(data$ID)), - ID = data$ID, - Start = data$nucl_start, - Stop = data$nucl_end, - num_domains = data$num_domains, - deepbgc_score = data$deepbgc_score, - activity = data$product_activity) - return(seg_df_1) - } - get_RRE_inter <- function(x,rre_inter,rre_data, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(rre_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- rre_data[inter,] - if (input$rre_width == TRUE) { - Stop_vals_RRE_in <- as.numeric(data$Stop)+50000 - } else{ - Stop_vals_RRE_in <- as.numeric(data$Stop) - } - if (vals$rre_more == T){ - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Locus_tag)), - xend=Stop_vals_RRE_in, - yend=rep(letter, length(data$Locus_tag)), - Type = rep("ripp", length(data$Locus_tag)), - Score = data$Score, - Software = rep("RREFinder", length(data$Locus_tag)), - ID = data$Locus_tag, - Start = data$Start, - Stop = data$Stop, - E_value = data$E.value, - P_value = data$P.value, - RRE_start = data$RRE.start, - RRE_stop = data$RRE.end, - Probability = data$Probability) - } else { - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Locus_tag)), - xend=Stop_vals_RRE_in, - yend=rep(letter, length(data$Locus_tag)), - Type = rep("ripp", length(data$Locus_tag)), - Software = rep("RREFinder", length(data$Locus_tag)), - ID = data$Locus_tag, - Start = data$Start, - Stop = data$Stop, - E_value = data$E.value) - } - - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - - return(seg_df_2) - } - get_prism_supp_inter <- function(x,prism_supp_inter,prism_supp, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(prism_supp_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- prism_supp[inter,] - if (input$prism_supp_width == TRUE) { - Stop_vals_prism_supp_in <- as.numeric(data$Stop)+50000 - } else{ - Stop_vals_prism_supp_in <- as.numeric(data$Stop) - } - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Cluster)), - xend=Stop_vals_prism_supp_in, - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Score = data$Score, - Software = rep("PRISM", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop, - Name = data$Name, - Full_name = data$Full_name - ) - return(seg_df_2) - } - get_arts_inter <- function(x,arts_inter, arts_data, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(arts_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- arts_data[inter,] - if (input$arts_width == TRUE) { - Stop_vals_arts_in <- as.numeric(data$Stop)+20000 - } else{ - Stop_vals_arts_in <- as.numeric(data$Stop) - } - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Cluster)), - xend=Stop_vals_arts_in, - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Hit = data$Hit, - Software = rep("ARTS", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop, - Core = data$Core, - Count = data$Count, - E_value = data$Evalue, - Bitscore = data$Bitscore, - Model = data$Model - ) - return(seg_df_2) - } - - geom_anti <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_deep <- function(data){ - geom_segment(data=data,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - geom_rre <- function(data){ - if (vals$rre_more == T){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) - } - } - geom_sempi <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism_supp <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - geom_arts <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) - } - - - # MAKE COMPUTATIONS - if (vals$anti_data_input == TRUE){ - seg_ref_a <- data.frame(x=as.numeric( anti_data_chromo$Start), - y=rep("Z", length(anti_data_chromo$ID)), - xend=as.numeric( anti_data_chromo$Stop), - yend=rep("Z", length(anti_data_chromo$ID)), - Type = as.factor(anti_data_chromo$Type), - Type2 = as.factor(anti_data_chromo$Type2), - Software = rep("Antismash", length(anti_data_chromo$ID)), - ID = anti_data_chromo$ID, - Start = anti_data_chromo$Start, - Stop = anti_data_chromo$Stop) - seg_ref <- seg_ref_a - - if (input$ref == "Antismash") { - plot <- ggplot(anti_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(anti_inter,deep_inter,deep_data_chromo, "Y" ) - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(anti_inter, rre_inter, rre_data, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(anti_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(anti_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(anti_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(anti_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - plot <- plot + - scale_y_discrete(labels = c("Z" = "Antismash","Y" = "D_vs_A", "X" = "RRE_vs_A", "W" = "P_vs_A", "V" = "S_vs_A", - "U" = "P-supp_vs_A", "T" = "AR_vs_A")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model")) - - } - vals$seg_df_ref_a <- seg_ref_a - } - if (vals$deep_data_input == TRUE){ - # Create a dataframe with all deepbgc data + the additional info to visualize on hover - seg_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), - y=rep("Z", length(deep_data_chromo$ID)), - xend=as.numeric( deep_data_chromo$nucl_end), - yend=rep("Z", length(deep_data_chromo$ID)), - Type = as.factor(deep_data_chromo$product_class), - Software = rep("DeepBGC", length(deep_data_chromo$ID)), - ID = deep_data_chromo$ID, - Start = deep_data_chromo$nucl_start, - Stop = deep_data_chromo$nucl_end, - num_domains = deep_data_chromo$num_domains, - deepbgc_score = deep_data_chromo$deepbgc_score, - activity = deep_data_chromo$product_activity) - seg_ref <- seg_ref_d - - if (input$ref == "DeepBGC") { - plot <- ggplot(deep_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_deep(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(deep_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(deep_inter, rre_inter, rre_data, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df<- get_prism_inter(deep_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df<- get_sempi_inter(deep_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df<- get_prism_supp_inter(deep_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(deep_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "DeepBGC","X" = "A_vs_D", "Y" = "RRE_vs_D", "W" = "P_vs_D", "V" = "S_vs_D", - "U" = "P-supp_vs_D", "T" = "AR_vs_D")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" ,"Hit", "Core", "Count", "Bitscore", "Model") - ) - } - - vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), - y=rep("X", length(deep_data_chromo$ID)), - xend=as.numeric( deep_data_chromo$nucl_end), - yend=rep("X", length(deep_data_chromo$ID)), - Type = as.factor(deep_data_chromo$product_class), - Software = rep("DeepBGC", length(deep_data_chromo$ID)), - ID = deep_data_chromo$ID, - Start = deep_data_chromo$nucl_start, - Stop = deep_data_chromo$nucl_end, - num_domains = deep_data_chromo$num_domains, - deepbgc_score = deep_data_chromo$deepbgc_score, - activity = deep_data_chromo$product_activity) - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - seg_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Z", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Z", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Score = vals$rre_data$Score, - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value, - P_value = vals$rre_data$P.value, - RRE_start = vals$rre_data$RRE.start, - RRE_stop = vals$rre_data$RRE.end, - Probability = vals$rre_data$Probability) - } else { - seg_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Z", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Z", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value) - } - seg_ref <- seg_ref_r - if (input$ref == "RRE-Finder") { - plot <- ggplot(rre_data, aes(x = vals$chr_len, y = Chr)) + geom_rre(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(rre_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(rre_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(rre_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(rre_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(rre_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(rre_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "RRE","X" = "A_vs_RRE", "Y" = "D_vs_RRE", "W" = "P_vs_RRE", "V" = "S_vs_RRE", - "U" = "P-supp_vs_RRE", "T" = "AR_vs_RRE")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") - ) - } - - if (vals$rre_more == T){ - vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Y", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Y", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Score = vals$rre_data$Score, - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value, - P_value = vals$rre_data$P.value, - RRE_start = vals$rre_data$RRE.start, - RRE_stop = vals$rre_data$RRE.end, - Probability = vals$rre_data$Probability) - } else { - vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Y", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Y", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value) - } - } - if (vals$prism_data_input == TRUE){ - # Create a dataframe with PRISM data with all the additional info to visualize on hover - seg_ref_p <- data.frame(x=as.numeric(prism_data$Start), - y=rep("Z", length(prism_data$Cluster)), - xend=as.numeric(prism_data$Stop), - yend=rep("Z", length(prism_data$Cluster)), - Type = as.factor(prism_data$Type), - Type2 = as.factor(prism_data$Type2), - Software = rep("PRISM", length(prism_data$Cluster)), - ID = prism_data$Cluster, - Start = prism_data$Start, - Stop = prism_data$Stop) - seg_ref <- seg_ref_p - - if (input$ref == "PRISM") { - plot <- ggplot(prism_data, aes(x = vals$chr_len, y = Chr)) + geom_prism(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(prism_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(prism_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(prism_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot +geom_rre(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(prism_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(prism_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(prism_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "PRISM","X" = "A_vs_P", "Y" = "D_vs_P", "W" = "RRE_vs_P", "V" = "S_vs_P", - "U" = "P-supp_vs_P", "T" = "AR_vs_P")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" , "Hit", "Core", "Count", "Bitscore", "Model") - ) - } - vals$seg_df_ref_p <- data.frame(x=as.numeric(prism_data$Start), - y=rep("W", length(prism_data$Cluster)), - xend=as.numeric(prism_data$Stop), - yend=rep("W", length(prism_data$Cluster)), - Type = as.factor(prism_data$Type), - Type2 = as.factor(prism_data$Type2), - Software = rep("PRISM", length(prism_data$Cluster)), - ID = prism_data$Cluster, - Start = prism_data$Start, - Stop = prism_data$Stop) - } - if (vals$sempi_data_input == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=as.numeric(sempi_data$Start), - y=rep("Z", length(sempi_data$Cluster)), - xend=as.numeric(sempi_data$Stop), - yend=rep("Z", length(sempi_data$Cluster)), - Type = as.factor(sempi_data$Type), - Type2 = as.factor(sempi_data$Type2), - Software = rep("SEMPI", length(sempi_data$Cluster)), - ID = sempi_data$Cluster, - Start = sempi_data$Start, - Stop = sempi_data$Stop) - seg_ref <- seg_ref_s - - if (input$ref == "SEMPI") { - plot <- ggplot(sempi_data, aes(x = vals$chr_len, y = Chr)) + geom_sempi(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(sempi_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(sempi_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(sempi_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(sempi_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(sempi_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(sempi_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "SEMPI","X" = "A_vs_S", "Y" = "D_vs_S", "W" = "RRE_vs_S", "V" = "P_vs_S", - "U" = "P-supp_vs_S", "T" = "AR_vs_S")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") - ) - } - vals$seg_df_ref_s <- data.frame(x=as.numeric(sempi_data$Start), - y=rep("V", length(sempi_data$Cluster)), - xend=as.numeric(sempi_data$Stop), - yend=rep("V", length(sempi_data$Cluster)), - Type = as.factor(sempi_data$Type), - Type2 = as.factor(sempi_data$Type2), - Software = rep("SEMPI", length(sempi_data$Cluster)), - ID = sempi_data$Cluster, - Start = sempi_data$Start, - Stop = sempi_data$Stop) - } - if (input$prism_supp == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=prism_supp$Start, - y=rep("Z", length(prism_supp$Cluster)), - xend=Stop_vals_prism_supp, - yend=rep("Z", length(prism_supp$Cluster)), - Type = as.factor(prism_supp$Type), - Type2 = as.factor(prism_supp$Type2), - Score = prism_supp$Score, - Software = rep("PRISM", length(prism_supp$Cluster)), - ID = prism_supp$Cluster, - Start = prism_supp$Start, - Stop = prism_supp$Stop, - Name = prism_supp$Name, - Full_name = prism_supp$Full_name - ) - seg_ref <- seg_ref_s - - if (input$ref == "PRISM-supp") { - plot <- ggplot(prism_supp, aes(x = vals$chr_len, y = Chr)) + geom_prism_supp(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(prism_supp_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(prism_supp_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(prism_supp_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(prism_supp_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(prism_supp_inter, sempi_inter, sempi_data, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(prism_supp_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "PRISM-supp","X" = "A_vs_P-supp", "Y" = "D_vs_P-supp", - "W" = "RRE_vs_P-supp", "V" = "P_vs_P-supp", "U" = "S_vs_P-supp", - "T" = "AR_vs_P-supp")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") - ) - } - vals$seg_df_ref_p_s <- data.frame(x=prism_supp$Start, - y=rep("U", length(prism_supp$Cluster)), - xend=Stop_vals_prism_supp, - yend=rep("U", length(prism_supp$Cluster)), - Type = as.factor(prism_supp$Type), - Type2 = as.factor(prism_supp$Type2), - Score = prism_supp$Score, - Software = rep("PRISM", length(prism_supp$Cluster)), - ID = prism_supp$Cluster, - Start = prism_supp$Start, - Stop = prism_supp$Stop, - Name = prism_supp$Name, - Full_name = prism_supp$Full_name - ) - } - if (vals$arts_data_input == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=arts_data$Start, - y=rep("Z", length(arts_data$Cluster)), - xend=Stop_vals_arts, - yend=rep("Z", length(arts_data$Cluster)), - Type = as.factor(arts_data$Type), - Type2 = as.factor(arts_data$Type2), - Hit = arts_data$Hit, - Software = rep("ARTS", length(arts_data$Cluster)), - ID = arts_data$Cluster, - Start = arts_data$Start, - Stop = arts_data$Stop, - Core = arts_data$Core, - Count = arts_data$Count, - E_value = arts_data$Evalue, - Bitscore = arts_data$Bitscore, - Model = arts_data$Model - ) - seg_ref <- seg_ref_s - - if (input$ref == "ARTS") { - plot <- ggplot(arts_data, aes(x = vals$chr_len, y = Chr)) + geom_arts(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(arts_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(arts_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(arts_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(arts_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(arts_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(arts_inter, sempi_inter, sempi_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "ARTS","X" = "A_vs_AR", "Y" = "D_vs_AR", "W" = "RRE_vs_AR", "V" = "P_vs_AR", - "U" = "P-supp_vs_AR", "T" = "S_vs_AR")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") - ) - } - vals$seg_df_ref_ar <- data.frame(x=arts_data$Start, - y=rep("T", length(arts_data$Cluster)), - xend=Stop_vals_arts, - yend=rep("T", length(arts_data$Cluster)), - Type = as.factor(arts_data$Type), - Type2 = as.factor(arts_data$Type2), - Hit = arts_data$Hit, - Software = rep("ARTS", length(arts_data$Cluster)), - ID = arts_data$Cluster, - Start = arts_data$Start, - Stop = arts_data$Stop, - Core = arts_data$Core, - Count = arts_data$Count, - E_value = arts_data$Evalue, - Bitscore = arts_data$Bitscore, - Model = arts_data$Model - ) - } - - to_plot - }) - - output$deep_reference_2 <- renderPlotly({ - if (vals$rre_data_input == TRUE){ - data <- data.frame(vals$rre_data) - } - if (vals$arts_data_input == TRUE){ - data <- vals$arts_data - } - if (vals$anti_data_input == TRUE){ - data <- vals$anti_data %>% - mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2) - } - if (vals$deep_data_input == TRUE){ - data <- vals$deep_data_chromo - } - if (vals$prism_data_input == TRUE){ - data <- vals$prism_data - } - if (vals$sempi_data_input == TRUE){ - data <- vals$sempi_data - } - - - plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE){ - plot <- plot + - geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - if (vals$deep_data_input == TRUE){ - plot <- plot + - geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) - } - } - if (vals$prism_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$sempi_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (input$prism_supp == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) - } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "Antismash","X" = "DeepBGC", "Y" = "RRE", "W" = "PRISM", - "V" = "SEMPI", "U" = "P-supp", "T" = "ARTS")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model" ) - ) - to_plot - }) - - # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- renderBioCircos({ - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - - rename_data <- vals$rename_data - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - # Store data in local variable - biocircos_anti <- vals$anti_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["Antismash"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Get vector of max values from chosen columns from deepbgc data - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under threshold, print "Under threshold" - deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_deep$nucl_end) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_deep$product_class) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_deep$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - biocircos_rre <- data.frame(vals$rre_data) - biocircos_rre$Start <- as.numeric(biocircos_rre$Start) - biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) - biocircos_rre['Type2'] <- biocircos_rre$Type - biocircos_rre['Cluster'] <- biocircos_rre$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["RRE"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_rre$Start) - # Stop position of arcs. - if (input$rre_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_rre$E.value) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_rre$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store data in local variable - biocircos_prism <- vals$prism_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_prism$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store data in local variable - biocircos_sempi <- vals$sempi_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["SEMPI"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("SEMPI", length(biocircos_sempi$Cluster))) - - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_sempi$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_sempi$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_sempi$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_sempi$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - if (input$prism_supp == TRUE){ - # Store data in local variable - biocircos_prism_supp <- vals$prism_supp - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM-supp"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) - if (input$prism_supp_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism_supp$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism_supp$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - - if (vals$arts_data_input == TRUE){ - biocircos_arts <- data.frame(vals$arts_data) - if (input$dup_choice != "All"){ - biocircos_arts <- biocircos_arts %>% - filter(Core == input$dup_choice | Core == "Not_core") - } - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["ARTS"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("ARTS", length(biocircos_arts$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_arts$Start) - # Stop position of arcs. - if (input$arts_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)+20000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_arts$Type2) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_arts$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,arc_colors ) - } - - - # Add to tracklist. Then it can be populated with links - tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - get_interception <- function(x,y) { - query <- makeGRangesFromDataFrame(x) - subject <- makeGRangesFromDataFrame(y) - interseption <- findOverlaps(query,subject) - inter_x <- interseption@to - inter_y <- interseption@from - return(list(inter_x, inter_y)) - } - - chromosomes_start <- c() - chromosomes_end <- c() - link_pos_start <- c() - link_pos_start_1 <- c() - link_pos_end <- c() - link_pos_end_2 <- c() - label_1 <- c() - label_2 <- c() - label_color <- c() - # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - anti_inter <- biocircos_anti %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store PRISM data start/stop as matrix for further interception calculation - prism_inter <- biocircos_prism %>% - select(Start, Stop) - prism_inter$seqnames <- "chr" - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store SEMPI data start/stop as matrix for further interception calculation - sempi_inter <- biocircos_sempi %>% - select(Start, Stop) - sempi_inter$seqnames <- "chr" - } - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - # Store RREFinder data start/stop as matrix for futher interception calculation - rre_inter <- biocircos_rre%>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) - deep_inter$seqnames <- "chr" - } - - - if (input$prism_supp == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) - prism_supp_inter$seqnames <- "chr" - } - - if (vals$arts_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - arts_inter <- biocircos_arts %>% - select(Start, Stop) - arts_inter$seqnames <- "chr" - } - - #CALCULATIONS - # ----------------------------------------- - - - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_a1_t<- get_interception(data1_inter, data2_inter) - inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) - inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[inter_rre_s] )) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[inter_rre_s])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[inter_s_rre_n])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[inter_s_rre_n])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[x])})) - if (!is.null(inter_rre_s)){ - if (class == 'P'){ - subset_vec <- data2$Type2[inter_rre_s] == data1$Type2[inter_s_rre_n] - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- rename_data$Color[rename_data$Group_color == 'base'] - } - } - } - } - } else if (class == 'H'){ - if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ - label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else { - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } - }else if (class == 'R'){ - if (data2_label == input$ref_col_biocircos){ - label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else if (data1_label == input$ref_col_biocircos){ - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else{ - label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) - } - } else { - label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) - } - } - return(list(inter_rre_s, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) - } - - rre_interact <- c() - anti_interact <- c() - prism_interact <- c() - deep_interact <- c() - sempi_interact <- c() - prism_supp_interact <- c() - arts_interact <- c() - - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) - - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - - # Get interception of antismash with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) - vals$inter_p_ref_n <- output[[2]] - vals$inter_a3 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "P") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with deepbgc - if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) - vals$inter_d_ref_n <- output[[2]] - vals$inter_a1 <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) - colnames(df_tmp) <- c("A", "D") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of antismash with RREFinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) - vals$inter_rre_ref_n <- output[[2]] - vals$inter_a2 <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "R") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) - vals$inter_s_ref_n <- output[[2]] - vals$inter_a4 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "S") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "PS") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "AR") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) - } - - # DEEPBGC - if (vals$deep_data_input == TRUE){ - - # Get interception of DeepBGC with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) - vals$inter_rre_d_n <- output[[2]] - vals$inter_d_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "R") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) - vals$inter_p_d_n <- output[[2]] - vals$inter_d_p <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "P") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) - vals$inter_s_d_n <- output[[2]] - vals$inter_d_s <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "S") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "PS") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "AR") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Safe used local variables to the reactive ones - vals$biocircos_deep <- biocircos_deep - # Write csvs with locally used variables - write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - - # Get interception of PRISM with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) - vals$inter_rre_p_n <- output[[2]] - vals$inter_p_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - prism_interact <- c(prism_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "R") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of PRISM with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "S") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "PS") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "AR") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) - } - - # RRE-FINDER - if (vals$rre_data_input == TRUE){ - - # Get interception of RRE with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) - vals$inter_s_rre_n <- output[[2]] - vals$inter_rre_s <- output[[1]] - rre_interact <- c(rre_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "S") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "PS") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "AR") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "PS") - df_s <- merge(df_s, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "AR") - df_s <- merge(df_s, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) - } - - if (input$prism_supp == TRUE){ - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) - prism_supp_interact <- c(prism_supp_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("PS", "AR") - df_ps <- merge(df_ps, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - #Write csvs with locally used variables - write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) - } - - if (vals$arts_data_input == TRUE){ - #Write csvs with locally used variables - write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) - } - - - - - # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - vals$df_a <- df_a - vals$df_d <- df_d - vals$df_p <- df_p - vals$df_r <- df_r - vals$df_s <- df_s - vals$df_ps <- df_ps - vals$rre_interact <- rre_interact - vals$anti_interact <- anti_interact - vals$prism_interact <- prism_interact - vals$deep_interact <- deep_interact - vals$sempi_interact <- sempi_interact - vals$prism_supp_interact <- prism_supp_interact - vals$arts_interact <- arts_interact - # Add links and labels to the track list for subsequent visualization - if (input$label_color == T){ - group_colors <- count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) - } - } else{ - tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) - } - - - - - - - - # Plot BioCircos - BioCircos(tracklist, genome = Biocircos_chromosomes, genomeTicksScale = 1e+6) - }) - - - output$biocircos_legend <- renderDataTable({ - plot_data <- vals$rename_data - new_data <- drop_na(data.frame(cbind(plot_data$Group_color, plot_data$Color)) ) - new_data <- new_data[!apply(new_data == "", 1, all),] - colnames(new_data) <- c("Name", "Color") - color_vec <- new_data$Color - options(DT.options = list(pageLength = 50)) - datatable(new_data, rownames = F) %>% formatStyle('Color', - backgroundColor=styleEqual(color_vec, color_vec)) - - - }) - - # Render barplot with number count of interception for BGC IDs - output$barplot_rank <- renderPlotly({ - antismash_count <- NULL - prism_count <- NULL - deep_count <- NULL - rre_count <- NULL - sempi_count <- NULL - prism_supp_count <- NULL - arts_count <- NULL - - if (vals$anti_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - antismash_count <- count(as.factor(c( vals$anti_interact))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anti_anot <- vals$anti_data[vals$anti_data$Cluster %in% as.numeric(levels(antismash_count$x)),] - # Add prefices to the ID to plot for a barplot. - antismash_count$x <- sapply(antismash_count$x, function(x) paste("A: ", x)) - # Add label column to the dataframe, from which we will plot - antismash_count$label <- rep("Antismash", length(antismash_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - antismash_count$Type <- anti_anot$Type - # Add Start positions (to visualize on hover) - antismash_count$Start <- anti_anot$Start - # Add Stop positions (to visualize on hover) - antismash_count$Stop <- anti_anot$Stop - } - if (vals$deep_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - deep_count <- count(as.factor(c( vals$deep_interact))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - deep_anot <- vals$biocircos_deep[vals$biocircos_deep$ID %in% as.numeric(levels(deep_count$x)),] - # Add prefices to the ID to plot for a barplot. - deep_count$x <- sapply(deep_count$x, function(x) paste("D: ", x)) - # Add label column to the dataframe, from which we will plot - deep_count$label <- rep("DeepBGC", length(deep_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - deep_count$Type <- deep_anot$Type - deep_count$Start <- deep_anot$nucl_start - # Add Stop positions (to visualize on hover) - deep_count$Stop <- deep_anot$nucl_end - } - if (vals$rre_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - rre_count <- count(as.factor(c( vals$rre_interact))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - rre_anot <- vals$rre_data[vals$rre_data$ID %in% as.numeric(levels(rre_count$x)),] - # Add prefices to the ID to plot for a barplot. - rre_count$x <- sapply(rre_count$x, function(x) paste("RRE: ", x)) - # Add label column to the dataframe, from which we will plot - rre_count$label <- rep("RRE", length(rre_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - rre_count$Type <- rep("ripp", length(rre_anot$Sequence)) - # Add Start positions (to visualize on hover) - rre_count$Start <- rre_anot$Start - # Add Stop positions (to visualize on hover) - rre_count$Stop <- rre_anot$Stop - } - if (vals$prism_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_count <- count(as.factor(c(vals$prism_interact))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - prism_anot <- vals$prism_data[vals$prism_data$Cluster %in% as.numeric(levels(prism_count$x)),] - # Add prefices to the ID to plot for a barplot. - prism_count$x <- sapply(prism_count$x, function(x) paste("P: ", x)) - # Add label column to the dataframe, from which we will plot - prism_count$label <- rep("PRISM", length(prism_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - prism_count$Type <- prism_anot$Type - # Add Start positions (to visualize on hover) - prism_count$Start <- prism_anot$Start - # Add Stop positions (to visualize on hover) - prism_count$Stop <- prism_anot$Stop - } - if (vals$sempi_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - sempi_count <- count(as.factor(c(vals$sempi_interact ))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - sempi_anot <- vals$sempi_data[vals$sempi_data$Cluster %in% as.numeric(levels(sempi_count$x)),] - # Add prefices to the ID to plot for a barplot. - sempi_count$x <- sapply(sempi_count$x, function(x) paste("S: ", x)) - # Add label column to the dataframe, from which we will plot - sempi_count$label <- rep("SEMPI", length(sempi_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - sempi_count$Type <- sempi_anot$Type - # Add Start positions (to visualize on hover) - sempi_count$Start <- sempi_anot$Start - # Add Stop positions (to visualize on hover) - sempi_count$Stop <- sempi_anot$Stop - } - if (input$prism_supp == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_supp_count <- count(as.factor(c(vals$prism_supp_interact ))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - prism_supp_anot <- vals$prism_supp[vals$prism_supp$Cluster %in% as.numeric(levels(prism_supp_count$x)),] - # Add prefices to the ID to plot for a barplot. - prism_supp_count$x <- sapply(prism_supp_count$x, function(x) paste("PS: ", x)) - # Add label column to the dataframe, from which we will plot - prism_supp_count$label <- rep("PRISM-supp", length(prism_supp_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - prism_supp_count$Type <- prism_supp_anot$Type - # Add Start positions (to visualize on hover) - prism_supp_count$Start <- prism_supp_anot$Start - # Add Stop positions (to visualize on hover) - prism_supp_count$Stop <- prism_supp_anot$Stop - } - if (vals$arts_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - arts_count <- count(as.factor(c(vals$arts_interact ))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - arts_anot <- vals$arts_data[vals$arts_data$Cluster %in% as.numeric(levels(arts_count$x)),] - # Add prefices to the ID to plot for a barplot. - arts_count$x <- sapply(arts_count$x, function(x) paste("AR: ", x)) - # Add label column to the dataframe, from which we will plot - arts_count$label <- rep("ARTS", length(arts_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - arts_count$Type <- arts_anot$Type - # Add Start positions (to visualize on hover) - arts_count$Start <- arts_anot$Start - # Add Stop positions (to visualize on hover) - arts_count$Stop <- arts_anot$Stop - } - - - # Integrate all those dataframe to the master one - ranking_data <- rbind(antismash_count,prism_count, deep_count,rre_count, sempi_count, prism_supp_count, arts_count) - # Fix column names in the master dataframe - colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") - # Plot - ggplotly(ggplot(ranking_data, aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - geom_bar(stat = "identity", aes(fill = Label)) + - theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = element_text(size = 14)) + - ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") - ) - - - }) - - # Render table with data - output$group_table <- renderTable({ - df_f_ar <- data.frame(AR=NA) - if (vals$anti_data_input == TRUE){ - if ((input$group_by=="A") & (input$count_all == T)){ - df_f_a <- data.frame(seq(1:length(vals$anti_data$Cluster))) - colnames(df_f_a) <- c("A") - } else{ - df_f_a <- data.frame(A=NA) - } - } - if (vals$deep_data_input == TRUE){ - if ((input$group_by=="D") & (input$count_all == T)){ - df_f_d <- data.frame(seq(1:length(vals$biocircos_deep$ID))) - colnames(df_f_d) <- c("D") - } else{ - df_f_d <- data.frame(D=NA) - } - } - if (vals$rre_data_input == TRUE){ - if ((input$group_by=="R") & (input$count_all == T)){ - df_f_r <- data.frame(seq(1:length(vals$rre_data$ID))) - colnames(df_f_r) <- c("R") - } else{ - df_f_r <- data.frame(R=NA) - } - } - if (vals$prism_data_input == TRUE){ - if ((input$group_by=="P") & (input$count_all == T)){ - df_f_p <- data.frame(seq(1:length(vals$prism_data$Cluster))) - colnames(df_f_p) <- c("P") - } else{ - df_f_p <- data.frame(P=NA) - } - } - if (vals$sempi_data_input == TRUE){ - if ((input$group_by=="S") & (input$count_all == T)){ - df_f_s <- data.frame(seq(1:length(vals$sempi_data$Cluster))) - colnames(df_f_s) <- c("S") - } else{ - df_f_s <- data.frame(S=NA) - } - } - if (input$prism_supp == TRUE){ - if ((input$group_by=="PS") & (input$count_all == T)){ - df_f_ps <- data.frame(seq(1:length(vals$prism_supp$Cluster))) - colnames(df_f_ps) <- c("PS") - } else{ - df_f_ps <- data.frame(PS=NA) - } - } - if (vals$sempi_data_input == TRUE){ - if ((input$group_by=="AR") & (input$count_all == T)){ - df_f_ar <- data.frame(seq(1:length(vals$arts_data$Cluster))) - colnames(df_f_ar) <- c("AR") - } else{ - df_f_ar <- data.frame(AR=NA) - } - } - - - refine_unique <- function(data){ - n <- tail(data, n=1) - data <- head(data, -1) - n_list <- str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(str_split(data, ","))}) - res <- sapply(out, function(x){ - if (x==F){ - x - } - }) - - return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) - } - - - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) - - if (vals$anti_data_input == TRUE){ - df_a <- merge(df_f_a, vals$df_a, all =T) - - } - - if (vals$deep_data_input == TRUE){ - - df_d <- merge(df_f_d, vals$df_d, all =T) - - } - - if (vals$prism_data_input == TRUE){ - df_p <- merge(df_f_p, vals$df_p, all =T) - } - - if (vals$rre_data_input == TRUE){ - df_r <- merge(df_f_r, vals$df_r, all = T) - } - - if (vals$sempi_data_input == TRUE){ - df_s <- merge(df_f_s, vals$df_s, all = T) - } - - if (input$prism_supp == TRUE){ - df_ps <- merge(df_f_ps, vals$df_ps, all = T) - } - if (vals$arts_data_input == TRUE){ - - } - - df_1 <- merge(df_d, df_a, all=T) - df_2 <- merge(df_1, df_p, all=T) - df_3 <- merge(df_2, df_r, all=T) - df_4 <- merge(df_3, df_s, all=T) - df_5 <- merge(df_4, df_ps, all=T) - df_fin <- merge(df_5, df_f_ar, all=T) - if (input$group_by=="A"){ - data <- df_fin %>% group_by(A) %>% summarise(D=paste(D, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) - }else if (input$group_by=="P"){ - data <- df_fin %>% group_by(P) %>% summarise(D=paste(D, collapse=","), - R=paste(R, collapse=","), - A=paste(A, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) - }else if (input$group_by=="R"){ - data <- df_fin %>% group_by(R) %>% summarise(D=paste(D, collapse=","), - A=paste(A, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) - }else if (input$group_by=="D"){ - data <- df_fin %>% group_by(D) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) - } else if (input$group_by=="S"){ - data <- df_fin %>% group_by(S) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) - } else if (input$group_by=="PS"){ - data <- df_fin %>% group_by(PS) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - S=paste(S, collapse=","), - AR=paste(AR, collapse=",")) - } else if (input$group_by=="AR"){ - data <- df_fin %>% group_by(AR) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=",")) - } - - data$D <- gsub('NA,|,NA', '', data$D) - data$D[nrow(data)] <- refine_unique(data$D) - data$A <- gsub('NA,|,NA', '', data$A) - data$A[nrow(data)]<- refine_unique(data$A) - data$P <- gsub('NA,|,NA', '', data$P) - data$P[nrow(data)] <- refine_unique(data$P) - data$R <- gsub('NA,|,NA', '', data$R) - data$R[nrow(data)]<- refine_unique(data$R) - data$S <- gsub('NA,|,NA', '', data$S) - data$S[nrow(data)]<- refine_unique(data$S) - data$PS <- gsub('NA,|,NA', '', data$PS) - data$PS[nrow(data)]<- refine_unique(data$PS) - data$AR <- gsub('NA,|,NA', '', data$AR) - data$AR[nrow(data)]<- refine_unique(data$AR) - - names(data)[names(data) == 'D'] <- 'DeepBGC' - names(data)[names(data) == 'A'] <- 'Antismash' - names(data)[names(data) == 'S'] <- 'SEMPI' - names(data)[names(data) == 'R'] <- 'RRE-Finder' - names(data)[names(data) == 'P'] <- 'PRISM' - names(data)[names(data) == 'PS'] <- 'PRISM-supp' - names(data)[names(data) == 'AR'] <- 'ARTS' - - if (vals$anti_data_input != TRUE){ - data <- data %>% - select(-Antismash) - } - if (vals$deep_data_input != TRUE){ - data <- data %>% - select(-DeepBGC) - } - if (vals$rre_data_input != TRUE){ - data <- data %>% - select(-'RRE-Finder') - } - if (vals$prism_data_input != TRUE){ - data <- data %>% - select(-PRISM) - } - if (vals$sempi_data_input != TRUE){ - data <- data %>% - select(-SEMPI) - } - if (input$prism_supp != TRUE){ - data <- data %>% - select(-'PRISM-supp') - } - if (vals$arts_data_input != TRUE){ - data <- data %>% - select(-ARTS) - } - - data["Group"] <- paste("group", rownames(data), sep = "_") - vals$group_by_data <- data - write.csv(data, "group_by.csv", row.names = F) - data - }) - - # Download used datasets (as for BioCircos) - output$download <- downloadHandler(filename = function(){ - paste("datasets.zip") - }, - content = function(file){ - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } else if (grepl('group.py', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } - } - #create the zip file from flst vector - zip(file, flst) }, - contentType = "application/zip" ) - -} - -# Run the application -shinyApp(ui = ui, server = server) +# This is a Shiny web application. You can run the application by clicking +# the 'Run App' button above. +# +# Author: Pavlo Hrab +# Made as part of Cambridge bioinformatics hackaton +# +# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH and RREFinder +# to visualized interception of those different annotations in one genome +# + +# Upload required libraries +library(shiny) +library(tidyverse) +library(plyr) +library(plotly) +library(BioCircos) +library(ggplot2) +library(shinyjs) +library(rjson) +library(stringr) +library(DT) +library(GenomicRanges) + +# Define UI +ui <- fluidPage( + + # Application title + titlePanel("BGCViz"), + + # Sidebar + useShinyjs(), + sidebarLayout( + sidebarPanel( + # Data upload + h3("Data upload and necesary input:"), + checkboxInput("hide_uploads", "Hide upload fields"), + h5(id = "anti_header_upload","ANTISMASH:"), + checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), + fileInput("anti_data", + "Upload antismash data"), + actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + h5(id = "prism_header_upload","PRISM:"), + checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), + fileInput("prism_data", + "Upload PRISM data"), + actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + h5(id = "sempi_header_upload","SEMPI:"), + fileInput("sempi_data", + "Upload SEMPI 2.0 data"), + actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + h5(id = "deep_header_upload","DEEPBGC:"), + fileInput("deep_data", + "Upload DeepBGC data"), + actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + h5(id = "rre_header_upload","RRE-FINDER:"), + fileInput("rre_data", + "Upload RRE-Finder data"), + actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + h5(id = "arts_header_upload","ARTS:"), + fileInput("known_data", + "Upload ARTS knownhits data"), + fileInput("dup_data", + "Upload ARTS duptable data"), + actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + # Numeric input of chromosome length of analyzed sequence + numericInput("chr_len", "Please type chr len of an organism", value = 10000000), + h3("Data manipulation options"), + checkboxInput("hide_anti", "Hide data manipulation fields"), + h5(id = "anti_header","Antismash data options:"), + checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + h5(id = "prism_header","PRISM data options:"), + checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + checkboxInput("prism_supp", "Use PRISM resistance and regulatory genes information'"), + h5(id = "sempi_header","SEMPI data options:"), + checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + h5(id = "arts_header","ARTS data options:"), + selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + selected = "All"), + h3(id = "genes_on_chr","Genes on chromosome plot controls:"), + checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), + selectInput("ref", "Choose reference data", choices = c("Antismash" = "Antismash", + "DeepBGC" = "DeepBGC", + "RRE-Finder" = "RRE-Finder", + "PRISM" = "PRISM", + "SEMPI" = "SEMPI", + "PRISM-supp" = "PRISM-supp", + "ARTS" = "ARTS"), + selected = "Antismash"), + h3(id = "summarize","Summarize options:"), + checkboxInput("hide_summarize", "Hide summarize options"), + selectInput("group_by", "Group data by", choices = c("Antismash" = "A", + "DeepBGC" = "D", + "RRE-Finder" = "R", + "PRISM" = "P", + "SEMPI" = "S", + "PRISM-supp" = "PS", + "ARTS" = "AR"), + selected = 'A'), + checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + h3("Improve visualization:"), + checkboxInput("hide_viz", "Hide improve visualization options"), + #Improve RREFinder annotated BCG visibility + fileInput("rename_data", + "Upload renaming and coloring scheme"), + actionButton("rename", "Rename"), + actionButton("reset_name", "Reset"), + checkboxInput("rre_width", "Add thickness to RRE results visualization"), + checkboxInput("prism_supp_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c("Antismash" = "Antismash", + "PRISM" = "PRISM", + "RRE-Finder" = "RRE", + 'DeepBGC' = "DeepBGC", + "SEMPI" = "SEMPI", + "PRISM-supp" = "PRISM-supp", + "ARTS" = "ARTS" + ), + selected = 'Antismash'), + h3(id="data_comparison_header","Comparison with DeepBGC plots:"), + checkboxInput("hide_data_comparison", "Hide data comparison options"), + selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c("Antismash" = "A", + "PRISM" = "P", + "SEMPI" = "S"), + selected = 'A'), + # Score to use for thresholds + selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC"), + selected = "Activity score"), + # Chose step for barplot (as a threshold to draw a bar) + sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 100, value = 0), + + # DeepBGC data filtering + h3(id="data_filter_header","DeepBGC data filtering:"), + checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), + # Different score filtering. Remain >= of set threshold + sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins filter. Remain >= of set threshold + sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), + + # Donwload currently used datasets + downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) + + ), + + # Show plots + mainPanel( + tabsetPanel( + tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), + tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), + plotlyOutput("deep_reference", height = "500px")), + tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), + tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),tableOutput("group_table")), + type = "tabs", id = "main" + ) + ) + ) +) + +# Define server logic +server <- function(input, output, session) { + options(shiny.maxRequestSize=100*1024^2) + # Small function to make integers zeros + is.integer0 <- function(x) + { + is.integer(x) && length(x) == 0L + } + + biocircos_listen <- reactive({ + list( vals$sempi_data,vals$rre_data, vals$deep_data, vals$anti_data, vals$prism_data, input$biocircos_color, + input$group_by, input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, + input$score_a, input$rename, input$reset_name, vals$arts_data, vals$prism_supp) + }) + + # Rective vals the app is using + # Some dataframes that are used through the app + some vectors of untercepted values + vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness = NULL, + biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, + anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE + ) + + vals$rename_data <- read.csv("rename.csv") + + observeEvent(input$anti_sco,{ + anti_data <- read.csv("example_data/sco_antismash.csv") + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "Antismash" ) + updateSelectInput(session, "group_by", + selected = "A" ) + updateSelectInput(session, "ref_comparison", + selected = "A") + updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + } + + }) + + observeEvent(input$prism_sco,{ + # Read data + data <- fromJSON(file = "example_data/sco_prism.json") + + + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(cbind(start, end, types)) + prism_data <- prism_data %>% + transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + vals$biocircos_color = F + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(regul_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(resist_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + + final_reg <- rbind(res_genes, reg_genes) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + vals$prism_supp <- final_reg + vals$prism_json = T + + prism_data$Type <- str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism$Cluster + # Save file + write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "PRISM" ) + updateSelectInput(session, "group_by", + selected = "P" ) + updateSelectInput(session, "ref_comparison", + selected = "P") + updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + } + }) + + observeEvent(input$sempi_sco,{ + + sempi_data <- read.csv("example_data/sco_sempi.csv") + sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "SEMPI" ) + updateSelectInput(session, "group_by", + selected = "S" ) + updateSelectInput(session, "ref_comparison", + selected = "S") + updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + } + + }) + + observeEvent(input$arts_sco, { + + data <- read.delim("example_data/sco_duptable.tsv") + + get_location_duptable <- function(x, y){ + test <- str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + + data <- read.delim("example_data/sco_knownhits.tsv") + locations <- sapply(data$Sequence.description, function(x){ + tail(str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + }) + + observeEvent(input$deep_sco, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + # Read data + vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% + mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + select(-one_of(drop_cols)) + # Add chromosome info column + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "DeepBGC" ) + updateSelectInput(session, "group_by", + selected = "D" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + }) + + observeEvent(input$rre_sco, { + # Read data + vals$rre_data <- read.delim("example_data/sco_rre.txt") + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- vals$rre_data %>% + separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + updateSelectInput(session, "group_by", + selected = "R" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "RRE-Finder", + selected = "RRE") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + }) + + # Observe antismash data input and save as reactive value + observeEvent(input$anti_data,{ + # Read data + if (input$anti_input_options==T){ + anti_data <- read.csv(input$anti_data$datapath) + vals$biocircos_color = T + }else{ + data <- fromJSON(file = input$anti_data$datapath) + types <- sapply(data$records, function(y){ + lapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + tolower(x$qualifiers$product) + } + }) + }) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + location <- sapply(data$records, function(y){ + unlist(sapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + unlist(x$location) + } + }) + ) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + separate(split, c("Start", "Stop")) %>% + transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + vals$biocircos_color = F + + } + + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "Antismash" ) + updateSelectInput(session, "group_by", + selected = "A" ) + updateSelectInput(session, "ref_comparison", + selected = "A") + updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + } + + }) + + observeEvent(input$sempi_data,{ + + sempi_data <- read.csv(input$sempi_data$datapath) + sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "SEMPI" ) + updateSelectInput(session, "group_by", + selected = "S" ) + updateSelectInput(session, "ref_comparison", + selected = "S") + updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + } + + }) + + observeEvent(input$known_data, { + data <- read.delim(input$known_data$datapath) + locations <- sapply(data$Sequence.description, function(x){ + tail(str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + write.csv(vals$known_data, "knownhits_data.csv", row.names = F) + if ((vals$dup_data_input == T)){ + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + }) + + observeEvent(input$dup_data, { + data <- read.delim(input$dup_data$datapath) + + get_location_duptable <- function(x, y){ + test <- str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + write.csv(dup_table, "duptable_data.csv", row.names = F) + if ((vals$known_data_input == T)){ + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + }) + + # Observe PRISM data input and save in reactive dataframe + observeEvent(input$prism_data,{ + # Read data + if (input$prism_input_options == T){ + prism_data <- read.csv(input$prism_data$datapath) + vals$biocircos_color = T + } else{ + data <- fromJSON(file = input$prism_data$datapath) + + + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(cbind(start, end, types)) + prism_data <- prism_data %>% + transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + vals$biocircos_color = F + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(regul_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + sapply(resist_genes_orfs, function(x){ + if (y$name == x) { + y$coordinates + } + }) + }) + + location <- Filter(Negate(is.null), location) + + res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + + final_reg <- rbind(res_genes, reg_genes) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + vals$prism_supp <- final_reg + vals$prism_json = T + + } + prism_data$Type <- str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism$Cluster + # Save file + write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "PRISM" ) + updateSelectInput(session, "group_by", + selected = "P" ) + updateSelectInput(session, "ref_comparison", + selected = "P") + updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + } + }) + + #Read and clean DeepBGC data + observeEvent(input$deep_data, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + # Read data + vals$deep_data <- read.delim(input$deep_data$datapath) %>% + mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + select(-one_of(drop_cols)) + # Add chromosome info column + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "DeepBGC" ) + updateSelectInput(session, "group_by", + selected = "D" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + }) + + # Read RREFinder data + observeEvent(input$rre_data, { + # Read data + vals$rre_data <- read.delim(input$rre_data$datapath) + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- vals$rre_data %>% + separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + write.csv(vals$rre_data, "rre_data.csv", row.names = F) + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + updateSelectInput(session, "group_by", + selected = "R" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "RRE-Finder", + selected = "RRE") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + }) + # Observe input of chromosome length + observeEvent(input$chr_len,{ + vals$chr_len <- input$chr_len + }) + + observeEvent(vals$rre_data_input, { + if (vals$rre_data_input == T){ + if (input$hide_viz == F){ + showElement(selector = "#rre_width") + } + } else{ + hideElement(selector = "#rre_width") + } + }) + + observeEvent(vals$anti_data_input, { + if (vals$anti_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#anti_header") + showElement(selector = "#anti_hybrid") + } + } else{ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + } + }) + + observeEvent(vals$prism_data_input, { + if (vals$prism_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#prism_header") + showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + showElement(selector = "#prism_supp") + } + } + if (input$hide_viz == F){ + if (vals$prism_json == T){ + showElement(selector = "#prism_supp_width") + } + } + } else{ + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + hideElement(selector = "#prism_supp_width") + } + }) + + observeEvent(vals$sempi_data_input, { + if (vals$sempi_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#sempi_header") + showElement(selector = "#sempi_hybrid") + } + } else{ + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + } + }) + + observeEvent(vals$deep_data_input,{ + if (vals$deep_data_input == T){ + showElement(selector = "#ref_comparison") + showElement(selector = "#hide_data_comparison") + showElement(selector = "#hide_data_filter") + showElement(selector = "#score_type") + showElement(selector = "#plot_step") + showElement(selector = "#plot_start") + showElement(selector = "#score_a") + showElement(selector = "#score_d") + showElement(selector = "#score_c") + showElement(selector = "#domains_filter") + showElement(selector = "#biodomain_filter") + showElement(selector = "#gene_filter") + showElement(selector = "#cluster_type") + showElement(selector = "#data_comparison_header") + showElement(selector = "#data_filter_header") + showTab(inputId = "main", target = "1") + } else{ + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#hide_data_comparison") + hideElement(selector = "#hide_data_filter") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + hideElement(selector = "#data_comparison_header") + hideElement(selector = "#data_filter_header") + hideTab(inputId = "main", target = "1") + } + }) + + observeEvent(vals$data_upload_count, { + if (vals$data_upload_count <2){ + hideTab("main", "2") + hideTab("main", "3") + }else{ + if (input$hide_summarize == F) { + showElement(selector = "#summarize") + showElement(selector = "#group_by") + showElement(selector = "#count_all") + } + if (input$hide_viz == F){ + showElement(selector = "#biocircos_color") + showElement(selector = "#label_color") + showElement(selector = "#label_color_class") + } + showTab("main", "2") + showTab("main", "3") + } + if (vals$data_upload_count <1){ + hideTab("main", "4") + hideElement(selector = "#genes_on_chr") + hideElement(selector = "#hide_genes_on_chr") + hideElement(selector = "#ref") + }else{ + showTab("main", "4") + if (input$hide_genes_on_chr == F){ + showElement(selector = "#genes_on_chr") + showElement(selector = "#hide_genes_on_chr") + showElement(selector = "#ref") + } + + } + }) + + observeEvent(input$label_color_class, { + if (input$label_color_class == "R"){ + showElement(selector = "#ref_col_biocircos") + } else { + hideElement(selector = "#ref_col_biocircos") + } + }) + + observeEvent(input$anti_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) + } + + if (input$anti_hybrid==T){ + vals$anti_data$Type2 <- hybrid_col(vals$anti_data) + }else { + vals$anti_data$Type2 <- vals$anti_type + } + + }) + + observeEvent(input$prism_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) + } + + if (input$prism_hybrid==T){ + vals$prism_data$Type2 <- hybrid_col(vals$prism_data) + }else { + vals$prism_data$Type2 <- vals$prism_type + } + }) + + observeEvent(input$sempi_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) + } + + if (input$sempi_hybrid==T){ + vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) + }else { + vals$sempi_data$Type2 <- vals$sempi_type + } + }) + + observeEvent(vals$arts_data_input,{ + if (vals$arts_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } + if (input$hide_viz == F){ + showElement(selector = "#arts_width") + } + } else { + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + hideElement(selector = "#arts_width") + } + }) + + observeEvent(input$rename, { + rename_vector <- function(data, renamed_dataframe){ + type <- str_split(data$Type, "__") + type_2 <- sapply(type, function(x){ + sapply(x, function(y){ + if (y %in% renamed_dataframe$Code){ + renamed_dataframe$Group[renamed_dataframe$Code == y] + } else { + y + } + + }) + + }) + type_3 <- sapply(type_2, function(x){ + dupl <- x[!duplicated(x)] + paste(dupl, collapse = "__") + }) + type_4 <- sapply(type_3, function(y){ + if (y %in% renamed_dataframe$Code){ + renamed_dataframe$Group[renamed_dataframe$Code == y] + } else { + y + } + }) + return(type_4) + } + rename_data <- vals$rename_data + if (vals$anti_data_input == T){ + anti_data <- read.csv("anti_data.csv") + vals$anti_type <- rename_vector(anti_data, rename_data) + anti_data['Type2'] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T){ + sempi_data <- read.csv("sempi_data.csv") + vals$sempi_type <- rename_vector(sempi_data, rename_data) + sempi_data['Type2'] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if(vals$prism_data_input == T){ + prism_data <- read.csv("prism_data.csv") + vals$prism_type <- rename_vector(prism_data, rename_data) + prism_data['Type2'] <- vals$prism_type + vals$prism_data <- prism_data + } + vals$biocircos_color = T + }) + + observeEvent(input$reset_name, { + + vals$anti_data['Type2'] <- vals$anti_data['Type'] + vals$sempi_data['Type2'] <- vals$sempi_data['Type'] + vals$ prism_data['Type2'] <- vals$ prism_data['Type'] + vals$biocircos_color = FALSE + }) + + observeEvent(input$rename_data,{ + rename_data <- read.csv(input$rename_data$datapath) + vals$rename_data <- rename_data + }) + + observeEvent(biocircos_listen(), { + #BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + + rename_data <- vals$rename_data + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + # Store data in local variable + biocircos_anti <- vals$anti_data + } + + #DEEPBGC + if (vals$deep_data_input == TRUE){ + # Get vector of max values from chosen columns from deepbgc data + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + deep_data_chromo <- vals$deep_data %>% + mutate(score = apply(vals$deep_data %>% + select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under threshold, print "Under threshold" + deep_data_chromo <- deep_data_chromo%>% + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + vals$biocircos_deep <- biocircos_deep + } + + #RRE-FINDER + if (vals$rre_data_input == TRUE){ + biocircos_rre <- data.frame(vals$rre_data) + biocircos_rre$Start <- as.numeric(biocircos_rre$Start) + biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) + biocircos_rre['Type2'] <- biocircos_rre$Type + biocircos_rre['Cluster'] <- biocircos_rre$ID + } + + # PRISM + if (vals$prism_data_input == TRUE){ + # Store data in local variable + biocircos_prism <- vals$prism_data + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + # Store data in local variable + biocircos_sempi <- vals$sempi_data + } + + if (input$prism_supp == TRUE){ + # Store data in local variable + biocircos_prism_supp <- vals$prism_supp + } + + + if (vals$arts_data_input == TRUE){ + biocircos_arts <- data.frame(vals$arts_data) + if (input$dup_choice != "All"){ + biocircos_arts <- biocircos_arts %>% + filter(Core == input$dup_choice | Core == "Not_core") + } + } + + + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + # from second one. IDs are duplicated, if intercepted more than one time + get_interception <- function(x,y) { + query <- makeGRangesFromDataFrame(x) + subject <- makeGRangesFromDataFrame(y) + interseption <- findOverlaps(query,subject) + inter_x <- interseption@to + inter_y <- interseption@from + return(list(inter_x, inter_y)) + } + + # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + anti_inter <- biocircos_anti %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + # PRISM + if (vals$prism_data_input == TRUE){ + # Store PRISM data start/stop as matrix for further interception calculation + prism_inter <- biocircos_prism %>% + select(Start, Stop) + prism_inter$seqnames <- "chr" + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + # Store SEMPI data start/stop as matrix for further interception calculation + sempi_inter <- biocircos_sempi %>% + select(Start, Stop) + sempi_inter$seqnames <- "chr" + } + #RRE-FINDER + if (vals$rre_data_input == TRUE){ + # Store RREFinder data start/stop as matrix for futher interception calculation + rre_inter <- biocircos_rre%>% + select(Start, Stop) + rre_inter$seqnames <- "chr" + } + + #DEEPBGC + if (vals$deep_data_input == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + deep_inter <- biocircos_deep %>% + select(nucl_start, nucl_end) + deep_inter$seqnames <- "chr" + } + + + if (input$prism_supp == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + prism_supp_inter <- biocircos_prism_supp %>% + select(Start, Stop) + prism_supp_inter$seqnames <- "chr" + } + + if (vals$arts_data_input == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + arts_inter <- biocircos_arts %>% + select(Start, Stop) + arts_inter$seqnames <- "chr" + } + + + + add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ + inter_a1_t<- get_interception(data1_inter, data2_inter) + inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) + inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) + return(list(inter_rre_s, inter_s_rre_n)) + } + + rre_interact <- c() + anti_interact <- c() + prism_interact <- c() + deep_interact <- c() + sempi_interact <- c() + prism_supp_interact <- c() + arts_interact <- c() + + df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) + df_s = data.frame(S=NA, PS = NA, AR=NA) + df_ps <- data.frame(PS=NA, AR=NA) + + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + + # Get interception of antismash with PRISM + if (vals$prism_data_input == TRUE){ + output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) + vals$inter_p_ref_n <- output[[2]] + vals$inter_a3 <- output[[1]] + anti_interact <- c(anti_interact,output[[1]] ) + prism_interact <- c(prism_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "P") + df_a <- merge(df_a, df_tmp, all = T) + } + # Get interception of antismash with deepbgc + if (vals$deep_data_input == TRUE){ + output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) + vals$inter_d_ref_n <- output[[2]] + vals$inter_a1 <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) + anti_interact <- c(anti_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) + colnames(df_tmp) <- c("A", "D") + df_a <- merge(df_a, df_tmp, all = T) + } + # Get interception of antismash with RREFinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) + vals$inter_rre_ref_n <- output[[2]] + vals$inter_a2 <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + anti_interact <- c(anti_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "R") + df_a <- merge(df_a, df_tmp, all = T) + } + # Get interception of antismash with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) + vals$inter_s_ref_n <- output[[2]] + vals$inter_a4 <- output[[1]] + anti_interact <- c(anti_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "S") + df_a <- merge(df_a, df_tmp, all = T) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) + anti_interact <- c(anti_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "PS") + df_a <- merge(df_a, df_tmp, all = T) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) + anti_interact <- c(anti_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "AR") + df_a <- merge(df_a, df_tmp, all = T) + } + # Write csvs with locally used variables + write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) + } + + # DEEPBGC + if (vals$deep_data_input == TRUE){ + + # Get interception of DeepBGC with rrefinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) + vals$inter_rre_d_n <- output[[2]] + vals$inter_d_rre <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "R") + df_d <- merge(df_d, df_tmp, all = T) + } + # Get interception of DeepBGC with PRISM + if (vals$prism_data_input == TRUE){ + output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) + vals$inter_p_d_n <- output[[2]] + vals$inter_d_p <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) + prism_interact <- c(prism_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "P") + df_d <- merge(df_d, df_tmp, all = T) + # Safe used local variables to the reactive ones + } + # Get interception of DeepBGC with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) + vals$inter_s_d_n <- output[[2]] + vals$inter_d_s <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "S") + df_d <- merge(df_d, df_tmp, all = T) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "PS") + df_d <- merge(df_d, df_tmp, all = T) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "AR") + df_d <- merge(df_d, df_tmp, all = T) + } + # Write csvs with locally used variables + write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) + } + + # PRISM + if (vals$prism_data_input == TRUE){ + + # Get interception of PRISM with rrefinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) + vals$inter_rre_p_n <- output[[2]] + vals$inter_p_rre <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + prism_interact <- c(prism_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "R") + df_p <- merge(df_p, df_tmp, all = T) + } + # Get interception of PRISM with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "S") + df_p <- merge(df_p, df_tmp, all = T) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "PS") + df_p <- merge(df_p, df_tmp, all = T) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "AR") + df_p <- merge(df_p, df_tmp, all = T) + } + # Write csvs with locally used variables + write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) + } + + # RRE-FINDER + if (vals$rre_data_input == TRUE){ + + # Get interception of RRE with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) + vals$inter_s_rre_n <- output[[2]] + vals$inter_rre_s <- output[[1]] + rre_interact <- c(rre_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "S") + df_r <- merge(df_r, df_tmp, all = T) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) + rre_interact <- c(rre_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "PS") + df_r <- merge(df_r, df_tmp, all = T) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) + rre_interact <- c(rre_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "AR") + df_r <- merge(df_r, df_tmp, all = T) + + } + # Write csvs with locally used variables + write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) + sempi_interact <- c(sempi_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("S", "PS") + df_s <- merge(df_s, df_tmp, all = T) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) + sempi_interact <- c(sempi_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("S", "AR") + df_s <- merge(df_s, df_tmp, all = T) + } + # Write csvs with locally used variables + write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) + } + + if (input$prism_supp == TRUE){ + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) + prism_supp_interact <- c(prism_supp_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("PS", "AR") + df_ps <- merge(df_ps, df_tmp, all = T) + } + write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) + } + + if (vals$arts_data_input == TRUE){ + write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) + } + + vals$df_a <- df_a + vals$df_d <- df_d + vals$df_p <- df_p + vals$df_r <- df_r + vals$df_s <- df_s + vals$df_ps <- df_ps + vals$rre_interact <- rre_interact + vals$anti_interact <- anti_interact + vals$prism_interact <- prism_interact + vals$deep_interact <- deep_interact + vals$sempi_interact <- sempi_interact + vals$prism_supp_interact <- prism_supp_interact + vals$arts_interact <- arts_interact + + + }) + + observeEvent(input$hide_uploads, { + if (input$hide_uploads == T){ + hideElement(selector = "#anti_input_options") + hideElement(selector = "#anti_data") + hideElement(selector = "#prism_input_options") + hideElement(selector = "#anti_header_upload") + hideElement(selector = "#prism_header_upload") + hideElement(selector = "#prism_data") + hideElement(selector = "#sempi_header_upload") + hideElement(selector = "#sempi_data") + hideElement(selector = "#deep_header_upload") + hideElement(selector = "#deep_data") + hideElement(selector = "#rre_header_upload") + hideElement(selector = "#rre_data") + hideElement(selector = "#chr_len") + hideElement(selector = "#arts_header_upload") + hideElement(selector = "#known_data") + hideElement(selector = "#dup_data") + hideElement(selector = "#anti_sco") + hideElement(selector = "#prism_sco") + hideElement(selector = "#arts_sco") + hideElement(selector = "#rre_sco") + hideElement(selector = "#sempi_sco") + hideElement(selector = "#deep_sco") + }else { + showElement(selector = "#anti_input_options") + showElement(selector = "#anti_data") + showElement(selector = "#prism_input_options") + showElement(selector = "#anti_header_upload") + showElement(selector = "#prism_header_upload") + showElement(selector = "#prism_data") + showElement(selector = "#sempi_header_upload") + showElement(selector = "#sempi_data") + showElement(selector = "#deep_header_upload") + showElement(selector = "#deep_data") + showElement(selector = "#rre_header_upload") + showElement(selector = "#rre_data") + showElement(selector = "#chr_len") + showElement(selector = "#arts_header_upload") + showElement(selector = "#known_data") + showElement(selector = "#dup_data") + showElement(selector = "#anti_sco") + showElement(selector = "#prism_sco") + showElement(selector = "#arts_sco") + showElement(selector = "#rre_sco") + showElement(selector = "#sempi_sco") + showElement(selector = "#deep_sco") + } + }) + + observeEvent(input$hide_anti, { + if (input$hide_anti== T){ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + }else{ + if (vals$anti_data_input == T){ + showElement(selector = "#anti_header") + showElement(selector = "#anti_hybrid") + } else{ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + } + if (vals$prism_data_input == T){ + showElement(selector = "#prism_header") + showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + showElement(selector = "#prism_supp") + } + } else { + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + } + if (vals$sempi_data_input == T){ + showElement(selector = "#sempi_header") + showElement(selector = "#sempi_hybrid") + } else { + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } else{ + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + } + } + }) + + observeEvent(input$hide_genes_on_chr, { + if (input$hide_genes_on_chr == T){ + hideElement(selector = "#ref") + } else { + if (vals$data_upload_count > 0){ + showElement(selector = "#ref") + } else { + hideElement(selector = "#genes_on_chr") + hideElement(selector = "#ref") + } + } + }) + + observeEvent(input$hide_summarize, { + if (input$hide_summarize == T){ + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } else { + if (vals$data_upload_count > 1){ + showElement(selector = "#group_by") + showElement(selector = "#count_all") + } else { + hideElement(selector = "#summarize") + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } + + } + }) + + observeEvent(input$hide_viz, { + if (input$hide_viz == T){ + hideElement(selector = "#rename_data") + hideElement(selector = "#rename") + hideElement(selector = "#reset_name") + hideElement(selector = "#rre_width") + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + hideElement(selector = "#ref_col_biocircos") + hideElement(selector = "#arts_header") + } else{ + showElement(selector = "#rename_data") + showElement(selector = "#rename") + showElement(selector = "#reset_name") + if (vals$rre_data_input == T){ + showElement(selector = "#rre_width") + } else { + hideElement(selector = "#rre_width") + } + if (vals$prism_json == T){ + showElement(selector = "#prism_supp_width") + } + else { + hideElement(selector = "#prism_supp_width") + } + if (vals$data_upload_count > 1){ + showElement(selector = "#biocircos_color") + showElement(selector = "#label_color") + showElement(selector = "#label_color_class") + } else { + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + } + if (input$label_color_class == "R"){ + showElement(selector = "#ref_col_biocircos") + } else { + hideElement(selector = "#ref_col_biocircos") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + } else { + hideElement(selector = "#arts_header") + } + + } + }) + + observeEvent(input$hide_data_comparison, { + if ((input$hide_data_comparison == T)){ + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } else if (vals$deep_data_input == T) { + showElement(selector = "#ref_comparison") + showElement(selector = "#score_type") + showElement(selector = "#plot_step") + showElement(selector = "#plot_start") + } else { + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } + }) + + observeEvent(input$hide_data_filter, { + if ((input$hide_data_filter == T)){ + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } else if (vals$deep_data_input == T){ + showElement(selector = "#score_a") + showElement(selector = "#score_d") + showElement(selector = "#score_c") + showElement(selector = "#domains_filter") + showElement(selector = "#biodomain_filter") + showElement(selector = "#gene_filter") + showElement(selector = "#cluster_type") + } else { + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } + }) + + + #Render output plots + + # Render barplot + output$deep_barplot <- renderPlot({ + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- drop_na(fullnes_of_annotation) + + # Vectors of columns of score values in DeepBGC data for later subset + score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") + score_bgc <- c("deepbgc_score") + score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") + + # Subset dataframe with scores' vectors. Get max value vectors + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + + # Decide which score to use for basic thresholds on x axis + if (input$score_type == "Activity") { + score_type <- score_activity + } else if (input$score_type == "DeepBGC") { + score_type <- score_bgc + } else if (input$score_type == "Cluster_Type") { + score_type <- score_cluster_type + } + + # Get max value vector for chosen score + chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ + # Store DeepBGC dataframe in variable + deep_inter <- vals$deep_data + #Store max value in separate column + deep_inter$score <- chosen_score_vector + # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix + deep_inter <- deep_inter %>% + mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(num_domains>=input$domains_filter, score>=dataframe_1/100, num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter, + score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100) %>% + select(Start = nucl_start, Stop = nucl_end) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison == 'A'){ + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'P'){ + anti_inter <- vals$prism_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'S'){ + anti_inter <- vals$sempi_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(deep_inter$Start) > 0) { + query <- makeGRangesFromDataFrame(deep_inter) + subject <- makeGRangesFromDataFrame(anti_inter) + interseption <- findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison == 'A'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'P'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") + title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'S') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") + title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness <- data.frame(fullnes_of_annotation) + write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), + paste("DeepBGC score:", as.character(input$score_d)), + paste("Cluster type score:", as.character(input$score_c)), sep = "\n") + + # Plot the barplot + ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + + geom_bar(position="dodge", stat="identity")+ + geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + + xlab(paste(input$score_type,"Score")) + + title + + geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$deep_rate <- renderPlotly({ + + # Store scores columns in vectors for DeepBGC data + score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") + score_bgc <- c("deepbgc_score") + score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") + + # Logic of what plot to draw on x axis + if (input$score_type == "Activity") { + score_type <- score_activity + } else if (input$score_type == "DeepBGC") { + score_type <- score_bgc + } else if (input$score_type == "Cluster_Type") { + score_type <- score_cluster_type + } + + # Store max values for chosen score in a vector + chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous renderPlot + fullnes_of_annotation <- data.frame(vals$fullness) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison == 'A'){ + data <- vals$anti_data + title <- ggtitle("Rates of DeepBGC/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison == 'P'){ + data <- vals$prism_data + title <- ggtitle("Rates of DeepBGC/PRISM data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison == 'S'){ + data <- vals$sempi_data + title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + ggplotly(test %>% + pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + geom_line(aes(color=Rates)) + + geom_point(aes(shape=Rates), alpha = .4, size = 3) + + title + + ylab("Rate") + + xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information + # For antismash and PRISM data showed only ID, Start, Stop, Type + output$deep_reference <- renderPlotly({ + + # GENERATE DATA + if (vals$anti_data_input == TRUE){ + # Store antismash data in local variable, with column renaming + anti_data_chromo <- vals$anti_data %>% + mutate(ID = Cluster, Chr = chromosome) %>% + dplyr::select(ID,Chr ,Start, Stop, Type, Type2) + # Extract only Start and Stop from antismash data into matrix + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + + } + if (vals$deep_data_input == TRUE){ + # Store deepbgc max score in a vector for chosen columns + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + # Store DeepBGC data in local variable. + deep_data_chromo <- vals$deep_data %>% + mutate(score = apply(vals$deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + + # Add Cluster_type column, which store only the max name of the cluster type + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + + # Clean data, using, thesholds + deep_data_chromo <- deep_data_chromo%>% + # Change to "Under threshold" Cluster_type column values, if they are under chosen theshold (no cluster type will be visualised) + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) %>% + # Add new columns and change product_class to Cluster_type + mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + # Store cleaned DeepBGC data into other variable to subset only Start and Stop + deep_data_chromo$Type2 <- deep_data_chromo$product_class + vals$deep_data_chromo <- deep_data_chromo + deep_inter <- deep_data_chromo + deep_inter <- deep_inter %>% + select(nucl_start, nucl_end) + + deep_inter$seqnames <- "chr" + } + if (vals$rre_data_input == TRUE){ + # Convert numeric columns in a dataframe as a numeric + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(vals$rre_data) + # Start/Stop columns from rre data as matrix + rre_inter <- rre_data %>% + select(Start, Stop) + rre_inter$seqnames <- "chr" + if (input$rre_width == TRUE) { + Stop_vals_RRE <- as.numeric(vals$rre_data$Stop)+50000 + } else{ + Stop_vals_RRE <- as.numeric(vals$rre_data$Stop) + } + } + if (vals$prism_data_input == TRUE){ + # Store master prism data in local variable + prism_data <- vals$prism_data + # Start/Stop columns from prism data as matrix + prism_inter <- prism_data %>% + select(Start,Stop) + prism_inter$seqnames <- "chr" + } + if (vals$sempi_data_input == TRUE){ + # Store master prism data in local variable + sempi_data <- vals$sempi_data + # Start/Stop columns from prism data as matrix + sempi_inter <- vals$sempi_data %>% + select(Start,Stop) + sempi_inter$seqnames <- "chr" + } + if (input$prism_supp == T){ + prism_supp <- vals$prism_supp + prism_supp_inter <- prism_supp %>% + select(Start,Stop) + prism_supp_inter$seqnames <- "chr" + if (input$prism_supp_width == TRUE) { + Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 + } else{ + Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) + } + } + if (vals$arts_data_input == T){ + arts_data <- vals$arts_data + if (input$dup_choice != "All"){ + arts_data <- arts_data %>% + filter(Core == input$dup_choice | Core == "Not_core") + } + arts_inter <- arts_data %>% + select(Start,Stop) + arts_inter$seqnames <- "chr" + if (input$arts_width == TRUE) { + Stop_vals_arts <- as.numeric(arts_data$Stop)+20000 + } else{ + Stop_vals_arts<- as.numeric(arts_data$Stop) + } + } + + get_prism_inter <- function(x,prism_inter,prism_data, letter ){ + # Get an interception of prism and smth + query <- makeGRangesFromDataFrame(prism_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- prism_data[inter,] + # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover + seg_df_3 <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric(data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep("PRISM", length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df_3) + } + get_sempi_inter <- function(x,sempi_inter,sempi_data, letter ){ + # Get an interception of sempi and smth + query <- makeGRangesFromDataFrame(sempi_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- sempi_data[inter,] + # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric(data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep("SEMPI", length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df) + } + get_anti_inter <- function(x,anti_inter,anti_data_chromo, letter ){ + # Get an interception of deepBGC and antismash data + query <- makeGRangesFromDataFrame(anti_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- anti_data_chromo[inter,] + seg_df_1 <- data.frame(x=as.numeric( data$Start), + y=rep(letter, length(data$ID)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$ID)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep("Antismash", length(data$ID)), + ID = data$ID, + Start = data$Start, + Stop = data$Stop) + return(seg_df_1) + } + get_deep_inter <- function(x,deep_inter,deep_data_chromo, letter ){ + # Get an interception of deepBGC and antismash data + query <- makeGRangesFromDataFrame(deep_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- deep_data_chromo[inter,] + # Create a dataframe with antismash data, interce[ted with deepbgc with all the additional info to visualize on hover + seg_df_1 <- data.frame(x=as.numeric( data$nucl_start), + y=rep(letter, length(data$ID)), + xend=as.numeric( data$nucl_end), + yend=rep(letter, length(data$ID)), + Type = as.factor(data$product_class), + Software = rep("DeepBGC", length(data$ID)), + ID = data$ID, + Start = data$nucl_start, + Stop = data$nucl_end, + num_domains = data$num_domains, + deepbgc_score = data$deepbgc_score, + activity = data$product_activity) + return(seg_df_1) + } + get_RRE_inter <- function(x,rre_inter,rre_data, letter ){ + # Get an interception of RREFinder and antismash + query <- makeGRangesFromDataFrame(rre_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- rre_data[inter,] + if (input$rre_width == TRUE) { + Stop_vals_RRE_in <- as.numeric(data$Stop)+50000 + } else{ + Stop_vals_RRE_in <- as.numeric(data$Stop) + } + if (vals$rre_more == T){ + seg_df_2 <- data.frame(x=data$Start, + y=rep(letter, length(data$Locus_tag)), + xend=Stop_vals_RRE_in, + yend=rep(letter, length(data$Locus_tag)), + Type = rep("ripp", length(data$Locus_tag)), + Score = data$Score, + Software = rep("RREFinder", length(data$Locus_tag)), + ID = data$Locus_tag, + Start = data$Start, + Stop = data$Stop, + E_value = data$E.value, + P_value = data$P.value, + RRE_start = data$RRE.start, + RRE_stop = data$RRE.end, + Probability = data$Probability) + } else { + seg_df_2 <- data.frame(x=data$Start, + y=rep(letter, length(data$Locus_tag)), + xend=Stop_vals_RRE_in, + yend=rep(letter, length(data$Locus_tag)), + Type = rep("ripp", length(data$Locus_tag)), + Software = rep("RREFinder", length(data$Locus_tag)), + ID = data$Locus_tag, + Start = data$Start, + Stop = data$Stop, + E_value = data$E.value) + } + + # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover + + return(seg_df_2) + } + get_prism_supp_inter <- function(x,prism_supp_inter,prism_supp, letter ){ + # Get an interception of RREFinder and antismash + query <- makeGRangesFromDataFrame(prism_supp_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- prism_supp[inter,] + if (input$prism_supp_width == TRUE) { + Stop_vals_prism_supp_in <- as.numeric(data$Stop)+50000 + } else{ + Stop_vals_prism_supp_in <- as.numeric(data$Stop) + } + # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover + seg_df_2 <- data.frame(x=data$Start, + y=rep(letter, length(data$Cluster)), + xend=Stop_vals_prism_supp_in, + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Score = data$Score, + Software = rep("PRISM", length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop, + Name = data$Name, + Full_name = data$Full_name + ) + return(seg_df_2) + } + get_arts_inter <- function(x,arts_inter, arts_data, letter ){ + # Get an interception of RREFinder and antismash + query <- makeGRangesFromDataFrame(arts_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- arts_data[inter,] + if (input$arts_width == TRUE) { + Stop_vals_arts_in <- as.numeric(data$Stop)+20000 + } else{ + Stop_vals_arts_in <- as.numeric(data$Stop) + } + # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover + seg_df_2 <- data.frame(x=data$Start, + y=rep(letter, length(data$Cluster)), + xend=Stop_vals_arts_in, + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Hit = data$Hit, + Software = rep("ARTS", length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop, + Core = data$Core, + Count = data$Count, + E_value = data$Evalue, + Bitscore = data$Bitscore, + Model = data$Model + ) + return(seg_df_2) + } + + geom_anti <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_deep <- function(data){ + geom_segment(data=data,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + geom_rre <- function(data){ + if (vals$rre_more == T){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } + } + geom_sempi <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism_supp <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + geom_arts <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) + } + + + # MAKE COMPUTATIONS + if (vals$anti_data_input == TRUE){ + seg_ref_a <- data.frame(x=as.numeric( anti_data_chromo$Start), + y=rep("Z", length(anti_data_chromo$ID)), + xend=as.numeric( anti_data_chromo$Stop), + yend=rep("Z", length(anti_data_chromo$ID)), + Type = as.factor(anti_data_chromo$Type), + Type2 = as.factor(anti_data_chromo$Type2), + Software = rep("Antismash", length(anti_data_chromo$ID)), + ID = anti_data_chromo$ID, + Start = anti_data_chromo$Start, + Stop = anti_data_chromo$Stop) + seg_ref <- seg_ref_a + + if (input$ref == "Antismash") { + plot <- ggplot(anti_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(anti_inter,deep_inter,deep_data_chromo, "Y" ) + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(anti_inter, rre_inter, rre_data, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(anti_inter, prism_inter, prism_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(anti_inter, sempi_inter, sempi_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(anti_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(anti_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + plot <- plot + + scale_y_discrete(labels = c("Z" = "Antismash","Y" = "D_vs_A", "X" = "RRE_vs_A", "W" = "P_vs_A", "V" = "S_vs_A", + "U" = "P-supp_vs_A", "T" = "AR_vs_A")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model")) + + } + vals$seg_df_ref_a <- seg_ref_a + } + if (vals$deep_data_input == TRUE){ + # Create a dataframe with all deepbgc data + the additional info to visualize on hover + seg_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), + y=rep("Z", length(deep_data_chromo$ID)), + xend=as.numeric( deep_data_chromo$nucl_end), + yend=rep("Z", length(deep_data_chromo$ID)), + Type = as.factor(deep_data_chromo$product_class), + Software = rep("DeepBGC", length(deep_data_chromo$ID)), + ID = deep_data_chromo$ID, + Start = deep_data_chromo$nucl_start, + Stop = deep_data_chromo$nucl_end, + num_domains = deep_data_chromo$num_domains, + deepbgc_score = deep_data_chromo$deepbgc_score, + activity = deep_data_chromo$product_activity) + seg_ref <- seg_ref_d + + if (input$ref == "DeepBGC") { + plot <- ggplot(deep_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_deep(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(deep_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(deep_inter, rre_inter, rre_data, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df<- get_prism_inter(deep_inter, prism_inter, prism_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df<- get_sempi_inter(deep_inter, sempi_inter, sempi_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df<- get_prism_supp_inter(deep_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(deep_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "DeepBGC","X" = "A_vs_D", "Y" = "RRE_vs_D", "W" = "P_vs_D", "V" = "S_vs_D", + "U" = "P-supp_vs_D", "T" = "AR_vs_D")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" ,"Hit", "Core", "Count", "Bitscore", "Model") + ) + } + + vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), + y=rep("X", length(deep_data_chromo$ID)), + xend=as.numeric( deep_data_chromo$nucl_end), + yend=rep("X", length(deep_data_chromo$ID)), + Type = as.factor(deep_data_chromo$product_class), + Software = rep("DeepBGC", length(deep_data_chromo$ID)), + ID = deep_data_chromo$ID, + Start = deep_data_chromo$nucl_start, + Stop = deep_data_chromo$nucl_end, + num_domains = deep_data_chromo$num_domains, + deepbgc_score = deep_data_chromo$deepbgc_score, + activity = deep_data_chromo$product_activity) + } + if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ + seg_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Z", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Z", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Score = vals$rre_data$Score, + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value, + P_value = vals$rre_data$P.value, + RRE_start = vals$rre_data$RRE.start, + RRE_stop = vals$rre_data$RRE.end, + Probability = vals$rre_data$Probability) + } else { + seg_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Z", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Z", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value) + } + seg_ref <- seg_ref_r + if (input$ref == "RRE-Finder") { + plot <- ggplot(rre_data, aes(x = vals$chr_len, y = Chr)) + geom_rre(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(rre_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(rre_inter, deep_inter, deep_data_chromo, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(rre_inter, prism_inter, prism_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(rre_inter, sempi_inter, sempi_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(rre_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(rre_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "RRE","X" = "A_vs_RRE", "Y" = "D_vs_RRE", "W" = "P_vs_RRE", "V" = "S_vs_RRE", + "U" = "P-supp_vs_RRE", "T" = "AR_vs_RRE")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + ) + } + + if (vals$rre_more == T){ + vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Y", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Y", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Score = vals$rre_data$Score, + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value, + P_value = vals$rre_data$P.value, + RRE_start = vals$rre_data$RRE.start, + RRE_stop = vals$rre_data$RRE.end, + Probability = vals$rre_data$Probability) + } else { + vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, + y=rep("Y", length(vals$rre_data$Locus_tag)), + xend=Stop_vals_RRE, + yend=rep("Y", length(vals$rre_data$Locus_tag)), + Type = rep("ripp", length(vals$rre_data$Locus_tag)), + Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), + ID = vals$rre_data$Locus_tag, + Start = vals$rre_data$Start, + Stop = vals$rre_data$Stop, + E_value = vals$rre_data$E.value) + } + } + if (vals$prism_data_input == TRUE){ + # Create a dataframe with PRISM data with all the additional info to visualize on hover + seg_ref_p <- data.frame(x=as.numeric(prism_data$Start), + y=rep("Z", length(prism_data$Cluster)), + xend=as.numeric(prism_data$Stop), + yend=rep("Z", length(prism_data$Cluster)), + Type = as.factor(prism_data$Type), + Type2 = as.factor(prism_data$Type2), + Software = rep("PRISM", length(prism_data$Cluster)), + ID = prism_data$Cluster, + Start = prism_data$Start, + Stop = prism_data$Stop) + seg_ref <- seg_ref_p + + if (input$ref == "PRISM") { + plot <- ggplot(prism_data, aes(x = vals$chr_len, y = Chr)) + geom_prism(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(prism_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(prism_inter, deep_inter, deep_data_chromo, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(prism_inter, rre_inter, rre_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot +geom_rre(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(prism_inter, sempi_inter, sempi_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(prism_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(prism_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + # Create a dataframe with PRISM data with all the additional info to visualize on hover + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "PRISM","X" = "A_vs_P", "Y" = "D_vs_P", "W" = "RRE_vs_P", "V" = "S_vs_P", + "U" = "P-supp_vs_P", "T" = "AR_vs_P")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" , "Hit", "Core", "Count", "Bitscore", "Model") + ) + } + vals$seg_df_ref_p <- data.frame(x=as.numeric(prism_data$Start), + y=rep("W", length(prism_data$Cluster)), + xend=as.numeric(prism_data$Stop), + yend=rep("W", length(prism_data$Cluster)), + Type = as.factor(prism_data$Type), + Type2 = as.factor(prism_data$Type2), + Software = rep("PRISM", length(prism_data$Cluster)), + ID = prism_data$Cluster, + Start = prism_data$Start, + Stop = prism_data$Stop) + } + if (vals$sempi_data_input == TRUE){ + # Create a dataframe with sempi data with all the additional info to visualize on hover + seg_ref_s <- data.frame(x=as.numeric(sempi_data$Start), + y=rep("Z", length(sempi_data$Cluster)), + xend=as.numeric(sempi_data$Stop), + yend=rep("Z", length(sempi_data$Cluster)), + Type = as.factor(sempi_data$Type), + Type2 = as.factor(sempi_data$Type2), + Software = rep("SEMPI", length(sempi_data$Cluster)), + ID = sempi_data$Cluster, + Start = sempi_data$Start, + Stop = sempi_data$Stop) + seg_ref <- seg_ref_s + + if (input$ref == "SEMPI") { + plot <- ggplot(sempi_data, aes(x = vals$chr_len, y = Chr)) + geom_sempi(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(sempi_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(sempi_inter, deep_inter, deep_data_chromo, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(sempi_inter, rre_inter, rre_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(sempi_inter, prism_inter, prism_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(sempi_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(sempi_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + # Create a dataframe with PRISM data with all the additional info to visualize on hover + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "SEMPI","X" = "A_vs_S", "Y" = "D_vs_S", "W" = "RRE_vs_S", "V" = "P_vs_S", + "U" = "P-supp_vs_S", "T" = "AR_vs_S")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + ) + } + vals$seg_df_ref_s <- data.frame(x=as.numeric(sempi_data$Start), + y=rep("V", length(sempi_data$Cluster)), + xend=as.numeric(sempi_data$Stop), + yend=rep("V", length(sempi_data$Cluster)), + Type = as.factor(sempi_data$Type), + Type2 = as.factor(sempi_data$Type2), + Software = rep("SEMPI", length(sempi_data$Cluster)), + ID = sempi_data$Cluster, + Start = sempi_data$Start, + Stop = sempi_data$Stop) + } + if (input$prism_supp == TRUE){ + # Create a dataframe with sempi data with all the additional info to visualize on hover + seg_ref_s <- data.frame(x=prism_supp$Start, + y=rep("Z", length(prism_supp$Cluster)), + xend=Stop_vals_prism_supp, + yend=rep("Z", length(prism_supp$Cluster)), + Type = as.factor(prism_supp$Type), + Type2 = as.factor(prism_supp$Type2), + Score = prism_supp$Score, + Software = rep("PRISM", length(prism_supp$Cluster)), + ID = prism_supp$Cluster, + Start = prism_supp$Start, + Stop = prism_supp$Stop, + Name = prism_supp$Name, + Full_name = prism_supp$Full_name + ) + seg_ref <- seg_ref_s + + if (input$ref == "PRISM-supp") { + plot <- ggplot(prism_supp, aes(x = vals$chr_len, y = Chr)) + geom_prism_supp(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(prism_supp_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(prism_supp_inter, deep_inter, deep_data_chromo, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(prism_supp_inter, rre_inter, rre_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(prism_supp_inter, prism_inter, prism_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(prism_supp_inter, sempi_inter, sempi_data, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(prism_supp_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + # Create a dataframe with PRISM data with all the additional info to visualize on hover + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "PRISM-supp","X" = "A_vs_P-supp", "Y" = "D_vs_P-supp", + "W" = "RRE_vs_P-supp", "V" = "P_vs_P-supp", "U" = "S_vs_P-supp", + "T" = "AR_vs_P-supp")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + ) + } + vals$seg_df_ref_p_s <- data.frame(x=prism_supp$Start, + y=rep("U", length(prism_supp$Cluster)), + xend=Stop_vals_prism_supp, + yend=rep("U", length(prism_supp$Cluster)), + Type = as.factor(prism_supp$Type), + Type2 = as.factor(prism_supp$Type2), + Score = prism_supp$Score, + Software = rep("PRISM", length(prism_supp$Cluster)), + ID = prism_supp$Cluster, + Start = prism_supp$Start, + Stop = prism_supp$Stop, + Name = prism_supp$Name, + Full_name = prism_supp$Full_name + ) + } + if (vals$arts_data_input == TRUE){ + # Create a dataframe with sempi data with all the additional info to visualize on hover + seg_ref_s <- data.frame(x=arts_data$Start, + y=rep("Z", length(arts_data$Cluster)), + xend=Stop_vals_arts, + yend=rep("Z", length(arts_data$Cluster)), + Type = as.factor(arts_data$Type), + Type2 = as.factor(arts_data$Type2), + Hit = arts_data$Hit, + Software = rep("ARTS", length(arts_data$Cluster)), + ID = arts_data$Cluster, + Start = arts_data$Start, + Stop = arts_data$Stop, + Core = arts_data$Core, + Count = arts_data$Count, + E_value = arts_data$Evalue, + Bitscore = arts_data$Bitscore, + Model = arts_data$Model + ) + seg_ref <- seg_ref_s + + if (input$ref == "ARTS") { + plot <- ggplot(arts_data, aes(x = vals$chr_len, y = Chr)) + geom_arts(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(arts_inter, anti_inter, anti_data_chromo, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(arts_inter, deep_inter, deep_data_chromo, "Y") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(arts_inter, rre_inter, rre_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(arts_inter, prism_inter, prism_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(arts_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(arts_inter, sempi_inter, sempi_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + # Create a dataframe with PRISM data with all the additional info to visualize on hover + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "ARTS","X" = "A_vs_AR", "Y" = "D_vs_AR", "W" = "RRE_vs_AR", "V" = "P_vs_AR", + "U" = "P-supp_vs_AR", "T" = "S_vs_AR")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + ) + } + vals$seg_df_ref_ar <- data.frame(x=arts_data$Start, + y=rep("T", length(arts_data$Cluster)), + xend=Stop_vals_arts, + yend=rep("T", length(arts_data$Cluster)), + Type = as.factor(arts_data$Type), + Type2 = as.factor(arts_data$Type2), + Hit = arts_data$Hit, + Software = rep("ARTS", length(arts_data$Cluster)), + ID = arts_data$Cluster, + Start = arts_data$Start, + Stop = arts_data$Stop, + Core = arts_data$Core, + Count = arts_data$Count, + E_value = arts_data$Evalue, + Bitscore = arts_data$Bitscore, + Model = arts_data$Model + ) + } + + to_plot + }) + + output$deep_reference_2 <- renderPlotly({ + if (vals$rre_data_input == TRUE){ + data <- data.frame(vals$rre_data) + } + if (vals$arts_data_input == TRUE){ + data <- vals$arts_data + } + if (vals$anti_data_input == TRUE){ + data <- vals$anti_data %>% + mutate(ID = Cluster, Chr = chromosome) %>% + dplyr::select(ID,Chr ,Start, Stop, Type, Type2) + } + if (vals$deep_data_input == TRUE){ + data <- vals$deep_data_chromo + } + if (vals$prism_data_input == TRUE){ + data <- vals$prism_data + } + if (vals$sempi_data_input == TRUE){ + data <- vals$sempi_data + } + + + plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) + if (vals$anti_data_input == TRUE){ + plot <- plot + + geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + if (vals$deep_data_input == TRUE){ + plot <- plot + + geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + } + } + if (vals$prism_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (vals$sempi_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (input$prism_supp == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + if (vals$arts_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) + } + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "Antismash","X" = "DeepBGC", "Y" = "RRE", "W" = "PRISM", + "V" = "SEMPI", "U" = "P-supp", "T" = "ARTS")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model" ) + ) + to_plot + }) + + # Render Biocircos Plot for all-vs-all comparison + output$biocircos <- renderBioCircos({ + #BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + + rename_data <- vals$rename_data + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + # Store data in local variable + biocircos_anti <- vals$anti_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["Antismash"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + #DEEPBGC + if (vals$deep_data_input == TRUE){ + # Get vector of max values from chosen columns from deepbgc data + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + deep_data_chromo <- vals$deep_data %>% + mutate(score = apply(vals$deep_data %>% + select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under threshold, print "Under threshold" + deep_data_chromo <- deep_data_chromo%>% + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_deep$nucl_end) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_deep$product_class) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_deep$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + #RRE-FINDER + if (vals$rre_data_input == TRUE){ + biocircos_rre <- data.frame(vals$rre_data) + biocircos_rre$Start <- as.numeric(biocircos_rre$Start) + biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) + biocircos_rre['Type2'] <- biocircos_rre$Type + biocircos_rre['Cluster'] <- biocircos_rre$ID + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["RRE"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_rre$Start) + # Stop position of arcs. + if (input$rre_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_rre$E.value) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_rre$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + # PRISM + if (vals$prism_data_input == TRUE){ + # Store data in local variable + biocircos_prism <- vals$prism_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["PRISM"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_prism$Start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_prism$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_prism$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_prism$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + # Store data in local variable + biocircos_sempi <- vals$sempi_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["SEMPI"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("SEMPI", length(biocircos_sempi$Cluster))) + + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_sempi$Start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_sempi$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_sempi$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_sempi$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + if (input$prism_supp == TRUE){ + # Store data in local variable + biocircos_prism_supp <- vals$prism_supp + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["PRISM-supp"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) + if (input$prism_supp_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_prism_supp$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_prism_supp$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + + if (vals$arts_data_input == TRUE){ + biocircos_arts <- data.frame(vals$arts_data) + if (input$dup_choice != "All"){ + biocircos_arts <- biocircos_arts %>% + filter(Core == input$dup_choice | Core == "Not_core") + } + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["ARTS"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("ARTS", length(biocircos_arts$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_arts$Start) + # Stop position of arcs. + if (input$arts_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)+20000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_arts$Type2) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_arts$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + + # Add to tracklist. Then it can be populated with links + tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + # from second one. IDs are duplicated, if intercepted more than one time + get_interception <- function(x,y) { + query <- makeGRangesFromDataFrame(x) + subject <- makeGRangesFromDataFrame(y) + interseption <- findOverlaps(query,subject) + inter_x <- interseption@to + inter_y <- interseption@from + return(list(inter_x, inter_y)) + } + + chromosomes_start <- c() + chromosomes_end <- c() + link_pos_start <- c() + link_pos_start_1 <- c() + link_pos_end <- c() + link_pos_end_2 <- c() + label_1 <- c() + label_2 <- c() + label_color <- c() + # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + anti_inter <- biocircos_anti %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + # PRISM + if (vals$prism_data_input == TRUE){ + # Store PRISM data start/stop as matrix for further interception calculation + prism_inter <- biocircos_prism %>% + select(Start, Stop) + prism_inter$seqnames <- "chr" + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + # Store SEMPI data start/stop as matrix for further interception calculation + sempi_inter <- biocircos_sempi %>% + select(Start, Stop) + sempi_inter$seqnames <- "chr" + } + #RRE-FINDER + if (vals$rre_data_input == TRUE){ + # Store RREFinder data start/stop as matrix for futher interception calculation + rre_inter <- biocircos_rre%>% + select(Start, Stop) + rre_inter$seqnames <- "chr" + } + + #DEEPBGC + if (vals$deep_data_input == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + deep_inter <- biocircos_deep %>% + select(nucl_start, nucl_end) + deep_inter$seqnames <- "chr" + } + + + if (input$prism_supp == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + prism_supp_inter <- biocircos_prism_supp %>% + select(Start, Stop) + prism_supp_inter$seqnames <- "chr" + } + + if (vals$arts_data_input == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + arts_inter <- biocircos_arts %>% + select(Start, Stop) + arts_inter$seqnames <- "chr" + } + + #CALCULATIONS + # ----------------------------------------- + + + add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ + inter_a1_t<- get_interception(data1_inter, data2_inter) + inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) + inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[inter_rre_s] )) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[inter_rre_s])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c( data1$Start[inter_s_rre_n])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[inter_s_rre_n])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[x])})) + if (!is.null(inter_rre_s)){ + if (class == 'P'){ + subset_vec <- data2$Type2[inter_rre_s] == data1$Type2[inter_s_rre_n] + label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + rename_data$Color[rename_data$Group_color == x] + } + else{ + rename_data$Color[rename_data$Group_color == 'base'] + } + })) + if (length(label_color) != 0){ + for (t in seq(1:length(label_color))){ + if (!is.null(subset_vec[t])){ + if (subset_vec[t] == F){ + label_color[t] <- rename_data$Color[rename_data$Group_color == 'base'] + } + } + } + } + } else if (class == 'H'){ + if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ + label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ + if (x %in% rename_data$Group_color) { + rename_data$Color[rename_data$Group_color == x] + } + else{ + rename_data$Color[rename_data$Group_color == 'base'] + } + })) + } else { + label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + rename_data$Color[rename_data$Group_color == x] + } + else{ + rename_data$Color[rename_data$Group_color == 'base'] + } + })) + } + }else if (class == 'R'){ + if (data2_label == input$ref_col_biocircos){ + label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ + if (x %in% rename_data$Group_color) { + rename_data$Color[rename_data$Group_color == x] + } + else{ + rename_data$Color[rename_data$Group_color == 'base'] + } + })) + } else if (data1_label == input$ref_col_biocircos){ + label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + rename_data$Color[rename_data$Group_color == x] + } + else{ + rename_data$Color[rename_data$Group_color == 'base'] + } + })) + } else{ + label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) + } + } else { + label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) + } + } + return(list(inter_rre_s, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) + } + + rre_interact <- c() + anti_interact <- c() + prism_interact <- c() + deep_interact <- c() + sempi_interact <- c() + prism_supp_interact <- c() + arts_interact <- c() + + df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) + df_s = data.frame(S=NA, PS = NA, AR=NA) + df_ps <- data.frame(PS=NA, AR=NA) + + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + + # Get interception of antismash with PRISM + if (vals$prism_data_input == TRUE){ + output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) + vals$inter_p_ref_n <- output[[2]] + vals$inter_a3 <- output[[1]] + anti_interact <- c(anti_interact,output[[1]] ) + prism_interact <- c(prism_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "P") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of antismash with deepbgc + if (vals$deep_data_input == TRUE){ + output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) + vals$inter_d_ref_n <- output[[2]] + vals$inter_a1 <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) + anti_interact <- c(anti_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) + colnames(df_tmp) <- c("A", "D") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones + } + # Get interception of antismash with RREFinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) + vals$inter_rre_ref_n <- output[[2]] + vals$inter_a2 <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + anti_interact <- c(anti_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "R") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of antismash with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) + vals$inter_s_ref_n <- output[[2]] + vals$inter_a4 <- output[[1]] + anti_interact <- c(anti_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "S") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) + anti_interact <- c(anti_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "PS") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) + anti_interact <- c(anti_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("A", "AR") + df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) + } + + # DEEPBGC + if (vals$deep_data_input == TRUE){ + + # Get interception of DeepBGC with rrefinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) + vals$inter_rre_d_n <- output[[2]] + vals$inter_d_rre <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "R") + df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones + } + # Get interception of DeepBGC with PRISM + if (vals$prism_data_input == TRUE){ + output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) + vals$inter_p_d_n <- output[[2]] + vals$inter_d_p <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) + prism_interact <- c(prism_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "P") + df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones + } + # Get interception of DeepBGC with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) + vals$inter_s_d_n <- output[[2]] + vals$inter_d_s <- output[[1]] + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "S") + df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "PS") + df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("D", "AR") + df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Safe used local variables to the reactive ones + vals$biocircos_deep <- biocircos_deep + # Write csvs with locally used variables + write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) + } + + # PRISM + if (vals$prism_data_input == TRUE){ + + # Get interception of PRISM with rrefinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) + vals$inter_rre_p_n <- output[[2]] + vals$inter_p_rre <- output[[1]] + rre_interact <- c(rre_interact,output[[2]] ) + prism_interact <- c(prism_interact,output[[1]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "R") + df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of PRISM with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "S") + df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "PS") + df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) + vals$inter_s_p_n <- output[[2]] + vals$inter_p_s <- output[[1]] + prism_interact <- c(prism_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("P", "AR") + df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) + } + + # RRE-FINDER + if (vals$rre_data_input == TRUE){ + + # Get interception of RRE with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) + vals$inter_s_rre_n <- output[[2]] + vals$inter_rre_s <- output[[1]] + rre_interact <- c(rre_interact,output[[1]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "S") + df_r <- merge(df_r, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) + rre_interact <- c(rre_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "PS") + df_r <- merge(df_r, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) + rre_interact <- c(rre_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("R", "AR") + df_r <- merge(df_r, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) + } + + #SEMPI + if (vals$sempi_data_input == TRUE){ + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) + sempi_interact <- c(sempi_interact,output[[1]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("S", "PS") + df_s <- merge(df_s, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) + sempi_interact <- c(sempi_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("S", "AR") + df_s <- merge(df_s, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) + } + + if (input$prism_supp == TRUE){ + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) + prism_supp_interact <- c(prism_supp_interact,output[[1]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(output[[1]],output[[2]])) + colnames(df_tmp) <- c("PS", "AR") + df_ps <- merge(df_ps, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + #Write csvs with locally used variables + write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) + } + + if (vals$arts_data_input == TRUE){ + #Write csvs with locally used variables + write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) + } + + + + + # Combine labels with mapply to one list + link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) + + vals$df_a <- df_a + vals$df_d <- df_d + vals$df_p <- df_p + vals$df_r <- df_r + vals$df_s <- df_s + vals$df_ps <- df_ps + vals$rre_interact <- rre_interact + vals$anti_interact <- anti_interact + vals$prism_interact <- prism_interact + vals$deep_interact <- deep_interact + vals$sempi_interact <- sempi_interact + vals$prism_supp_interact <- prism_supp_interact + vals$arts_interact <- arts_interact + # Add links and labels to the track list for subsequent visualization + if (input$label_color == T){ + group_colors <- count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])){ + subset <- unname( which(label_color %in% group_colors$x[i])) + tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) + } + } else{ + tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) + } + + + + + + + + # Plot BioCircos + BioCircos(tracklist, genome = Biocircos_chromosomes, genomeTicksScale = 1e+6) + }) + + + output$biocircos_legend <- renderDataTable({ + plot_data <- vals$rename_data + new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) + new_data <- new_data[!apply(new_data == "", 1, all),] + colnames(new_data) <- c("Name", "Color") + color_vec <- new_data$Color + options(DT.options = list(pageLength = 50)) + datatable(new_data, rownames = F) %>% formatStyle('Color', + backgroundColor=styleEqual(color_vec, color_vec)) + + + }) + + # Render barplot with number count of interception for BGC IDs + output$barplot_rank <- renderPlotly({ + antismash_count <- NULL + prism_count <- NULL + deep_count <- NULL + rre_count <- NULL + sempi_count <- NULL + prism_supp_count <- NULL + arts_count <- NULL + + if (vals$anti_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + antismash_count <- count(as.factor(c( vals$anti_interact))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anti_anot <- vals$anti_data[vals$anti_data$Cluster %in% as.numeric(levels(antismash_count$x)),] + # Add prefices to the ID to plot for a barplot. + antismash_count$x <- sapply(antismash_count$x, function(x) paste("A: ", x)) + # Add label column to the dataframe, from which we will plot + antismash_count$label <- rep("Antismash", length(antismash_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + antismash_count$Type <- anti_anot$Type + # Add Start positions (to visualize on hover) + antismash_count$Start <- anti_anot$Start + # Add Stop positions (to visualize on hover) + antismash_count$Stop <- anti_anot$Stop + } + if (vals$deep_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + deep_count <- count(as.factor(c( vals$deep_interact))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + deep_anot <- vals$biocircos_deep[vals$biocircos_deep$ID %in% as.numeric(levels(deep_count$x)),] + # Add prefices to the ID to plot for a barplot. + deep_count$x <- sapply(deep_count$x, function(x) paste("D: ", x)) + # Add label column to the dataframe, from which we will plot + deep_count$label <- rep("DeepBGC", length(deep_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + deep_count$Type <- deep_anot$Type + deep_count$Start <- deep_anot$nucl_start + # Add Stop positions (to visualize on hover) + deep_count$Stop <- deep_anot$nucl_end + } + if (vals$rre_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + rre_count <- count(as.factor(c( vals$rre_interact))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + rre_anot <- vals$rre_data[vals$rre_data$ID %in% as.numeric(levels(rre_count$x)),] + # Add prefices to the ID to plot for a barplot. + rre_count$x <- sapply(rre_count$x, function(x) paste("RRE: ", x)) + # Add label column to the dataframe, from which we will plot + rre_count$label <- rep("RRE", length(rre_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + rre_count$Type <- rep("ripp", length(rre_anot$Sequence)) + # Add Start positions (to visualize on hover) + rre_count$Start <- rre_anot$Start + # Add Stop positions (to visualize on hover) + rre_count$Stop <- rre_anot$Stop + } + if (vals$prism_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + prism_count <- count(as.factor(c(vals$prism_interact))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + prism_anot <- vals$prism_data[vals$prism_data$Cluster %in% as.numeric(levels(prism_count$x)),] + # Add prefices to the ID to plot for a barplot. + prism_count$x <- sapply(prism_count$x, function(x) paste("P: ", x)) + # Add label column to the dataframe, from which we will plot + prism_count$label <- rep("PRISM", length(prism_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + prism_count$Type <- prism_anot$Type + # Add Start positions (to visualize on hover) + prism_count$Start <- prism_anot$Start + # Add Stop positions (to visualize on hover) + prism_count$Stop <- prism_anot$Stop + } + if (vals$sempi_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + sempi_count <- count(as.factor(c(vals$sempi_interact ))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + sempi_anot <- vals$sempi_data[vals$sempi_data$Cluster %in% as.numeric(levels(sempi_count$x)),] + # Add prefices to the ID to plot for a barplot. + sempi_count$x <- sapply(sempi_count$x, function(x) paste("S: ", x)) + # Add label column to the dataframe, from which we will plot + sempi_count$label <- rep("SEMPI", length(sempi_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + sempi_count$Type <- sempi_anot$Type + # Add Start positions (to visualize on hover) + sempi_count$Start <- sempi_anot$Start + # Add Stop positions (to visualize on hover) + sempi_count$Stop <- sempi_anot$Stop + } + if (input$prism_supp == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + prism_supp_count <- count(as.factor(c(vals$prism_supp_interact ))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + prism_supp_anot <- vals$prism_supp[vals$prism_supp$Cluster %in% as.numeric(levels(prism_supp_count$x)),] + # Add prefices to the ID to plot for a barplot. + prism_supp_count$x <- sapply(prism_supp_count$x, function(x) paste("PS: ", x)) + # Add label column to the dataframe, from which we will plot + prism_supp_count$label <- rep("PRISM-supp", length(prism_supp_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + prism_supp_count$Type <- prism_supp_anot$Type + # Add Start positions (to visualize on hover) + prism_supp_count$Start <- prism_supp_anot$Start + # Add Stop positions (to visualize on hover) + prism_supp_count$Stop <- prism_supp_anot$Stop + } + if (vals$arts_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + arts_count <- count(as.factor(c(vals$arts_interact ))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + arts_anot <- vals$arts_data[vals$arts_data$Cluster %in% as.numeric(levels(arts_count$x)),] + # Add prefices to the ID to plot for a barplot. + arts_count$x <- sapply(arts_count$x, function(x) paste("AR: ", x)) + # Add label column to the dataframe, from which we will plot + arts_count$label <- rep("ARTS", length(arts_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + arts_count$Type <- arts_anot$Type + # Add Start positions (to visualize on hover) + arts_count$Start <- arts_anot$Start + # Add Stop positions (to visualize on hover) + arts_count$Stop <- arts_anot$Stop + } + + + # Integrate all those dataframe to the master one + ranking_data <- rbind(antismash_count,prism_count, deep_count,rre_count, sempi_count, prism_supp_count, arts_count) + # Fix column names in the master dataframe + colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") + # Plot + ggplotly(ggplot(ranking_data, aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + geom_bar(stat = "identity", aes(fill = Label)) + + theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = element_text(size = 14)) + + ggtitle("Number of times cluster is annotated with other tool"), + tooltip=c("Type", "Start", "Stop") + ) + + + }) + + # Render table with data + output$group_table <- renderTable({ + df_f_ar <- data.frame(AR=NA) + if (vals$anti_data_input == TRUE){ + if ((input$group_by=="A") & (input$count_all == T)){ + df_f_a <- data.frame(seq(1:length(vals$anti_data$Cluster))) + colnames(df_f_a) <- c("A") + } else{ + df_f_a <- data.frame(A=NA) + } + } + if (vals$deep_data_input == TRUE){ + if ((input$group_by=="D") & (input$count_all == T)){ + df_f_d <- data.frame(seq(1:length(vals$biocircos_deep$ID))) + colnames(df_f_d) <- c("D") + } else{ + df_f_d <- data.frame(D=NA) + } + } + if (vals$rre_data_input == TRUE){ + if ((input$group_by=="R") & (input$count_all == T)){ + df_f_r <- data.frame(seq(1:length(vals$rre_data$ID))) + colnames(df_f_r) <- c("R") + } else{ + df_f_r <- data.frame(R=NA) + } + } + if (vals$prism_data_input == TRUE){ + if ((input$group_by=="P") & (input$count_all == T)){ + df_f_p <- data.frame(seq(1:length(vals$prism_data$Cluster))) + colnames(df_f_p) <- c("P") + } else{ + df_f_p <- data.frame(P=NA) + } + } + if (vals$sempi_data_input == TRUE){ + if ((input$group_by=="S") & (input$count_all == T)){ + df_f_s <- data.frame(seq(1:length(vals$sempi_data$Cluster))) + colnames(df_f_s) <- c("S") + } else{ + df_f_s <- data.frame(S=NA) + } + } + if (input$prism_supp == TRUE){ + if ((input$group_by=="PS") & (input$count_all == T)){ + df_f_ps <- data.frame(seq(1:length(vals$prism_supp$Cluster))) + colnames(df_f_ps) <- c("PS") + } else{ + df_f_ps <- data.frame(PS=NA) + } + } + if (vals$sempi_data_input == TRUE){ + if ((input$group_by=="AR") & (input$count_all == T)){ + df_f_ar <- data.frame(seq(1:length(vals$arts_data$Cluster))) + colnames(df_f_ar) <- c("AR") + } else{ + df_f_ar <- data.frame(AR=NA) + } + } + + + refine_unique <- function(data){ + n <- tail(data, n=1) + data <- head(data, -1) + n_list <- str_split(n, ",") + out <- sapply(n_list[[1]], function(x){x %in% unlist(str_split(data, ","))}) + res <- sapply(out, function(x){ + if (x==F){ + x + } + }) + + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) + } + + + df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) + df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) + df_s = data.frame(S=NA, PS = NA, AR=NA) + df_ps <- data.frame(PS=NA, AR=NA) + + if (vals$anti_data_input == TRUE){ + df_a <- merge(df_f_a, vals$df_a, all =T) + + } + + if (vals$deep_data_input == TRUE){ + + df_d <- merge(df_f_d, vals$df_d, all =T) + + } + + if (vals$prism_data_input == TRUE){ + df_p <- merge(df_f_p, vals$df_p, all =T) + } + + if (vals$rre_data_input == TRUE){ + df_r <- merge(df_f_r, vals$df_r, all = T) + } + + if (vals$sempi_data_input == TRUE){ + df_s <- merge(df_f_s, vals$df_s, all = T) + } + + if (input$prism_supp == TRUE){ + df_ps <- merge(df_f_ps, vals$df_ps, all = T) + } + if (vals$arts_data_input == TRUE){ + + } + + df_1 <- merge(df_d, df_a, all=T) + df_2 <- merge(df_1, df_p, all=T) + df_3 <- merge(df_2, df_r, all=T) + df_4 <- merge(df_3, df_s, all=T) + df_5 <- merge(df_4, df_ps, all=T) + df_fin <- merge(df_5, df_f_ar, all=T) + if (input$group_by=="A"){ + data <- df_fin %>% group_by(A) %>% summarise(D=paste(D, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) + }else if (input$group_by=="P"){ + data <- df_fin %>% group_by(P) %>% summarise(D=paste(D, collapse=","), + R=paste(R, collapse=","), + A=paste(A, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) + }else if (input$group_by=="R"){ + data <- df_fin %>% group_by(R) %>% summarise(D=paste(D, collapse=","), + A=paste(A, collapse=","), + P=paste(P, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) + }else if (input$group_by=="D"){ + data <- df_fin %>% group_by(D) %>% summarise(A=paste(A, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) + } else if (input$group_by=="S"){ + data <- df_fin %>% group_by(S) %>% summarise(A=paste(A, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + D=paste(D, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) + } else if (input$group_by=="PS"){ + data <- df_fin %>% group_by(PS) %>% summarise(A=paste(A, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + D=paste(D, collapse=","), + S=paste(S, collapse=","), + AR=paste(AR, collapse=",")) + } else if (input$group_by=="AR"){ + data <- df_fin %>% group_by(AR) %>% summarise(A=paste(A, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + D=paste(D, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=",")) + } + + data$D <- gsub('NA,|,NA', '', data$D) + data$D[nrow(data)] <- refine_unique(data$D) + data$A <- gsub('NA,|,NA', '', data$A) + data$A[nrow(data)]<- refine_unique(data$A) + data$P <- gsub('NA,|,NA', '', data$P) + data$P[nrow(data)] <- refine_unique(data$P) + data$R <- gsub('NA,|,NA', '', data$R) + data$R[nrow(data)]<- refine_unique(data$R) + data$S <- gsub('NA,|,NA', '', data$S) + data$S[nrow(data)]<- refine_unique(data$S) + data$PS <- gsub('NA,|,NA', '', data$PS) + data$PS[nrow(data)]<- refine_unique(data$PS) + data$AR <- gsub('NA,|,NA', '', data$AR) + data$AR[nrow(data)]<- refine_unique(data$AR) + + names(data)[names(data) == 'D'] <- 'DeepBGC' + names(data)[names(data) == 'A'] <- 'Antismash' + names(data)[names(data) == 'S'] <- 'SEMPI' + names(data)[names(data) == 'R'] <- 'RRE-Finder' + names(data)[names(data) == 'P'] <- 'PRISM' + names(data)[names(data) == 'PS'] <- 'PRISM-supp' + names(data)[names(data) == 'AR'] <- 'ARTS' + + if (vals$anti_data_input != TRUE){ + data <- data %>% + select(-Antismash) + } + if (vals$deep_data_input != TRUE){ + data <- data %>% + select(-DeepBGC) + } + if (vals$rre_data_input != TRUE){ + data <- data %>% + select(-'RRE-Finder') + } + if (vals$prism_data_input != TRUE){ + data <- data %>% + select(-PRISM) + } + if (vals$sempi_data_input != TRUE){ + data <- data %>% + select(-SEMPI) + } + if (input$prism_supp != TRUE){ + data <- data %>% + select(-'PRISM-supp') + } + if (vals$arts_data_input != TRUE){ + data <- data %>% + select(-ARTS) + } + + data["Group"] <- paste("group", rownames(data), sep = "_") + vals$group_by_data <- data + write.csv(data, "group_by.csv", row.names = F) + data + }) + + # Download used datasets (as for BioCircos) + output$download <- downloadHandler(filename = function(){ + paste("datasets.zip") + }, + content = function(file){ + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } else if (grepl('group.py', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } + } + #create the zip file from flst vector + zip(file, flst) }, + contentType = "application/zip" ) + +} + +# Run the application +shinyApp(ui = ui, server = server) From 988efcf08e8b2b32a56475eece806da91f95a74f Mon Sep 17 00:00:00 2001 From: Pavlo Date: Mon, 24 May 2021 08:43:00 +0300 Subject: [PATCH 022/199] Integrated gecco Gecco data is intergrated into all outputs. Former-commit-id: 9bbf7f84f2166e8c5c8213045dbbcbf5eddea623 --- app.R | 2791 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 1600 insertions(+), 1191 deletions(-) diff --git a/app.R b/app.R index 62263a4..08bec3d 100755 --- a/app.R +++ b/app.R @@ -37,7 +37,7 @@ ui <- fluidPage( h5(id = "anti_header_upload","ANTISMASH:"), checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), fileInput("anti_data", - "Upload antismash data"), + "Upload Antismash data"), actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), h5(id = "prism_header_upload","PRISM:"), checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), @@ -52,6 +52,10 @@ ui <- fluidPage( fileInput("deep_data", "Upload DeepBGC data"), actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + h5(id = "gecco_header_upload","GECCO:"), + fileInput("gecco_data", + "Upload Gecco data"), + actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), h5(id = "rre_header_upload","RRE-FINDER:"), fileInput("rre_data", "Upload RRE-Finder data"), @@ -84,7 +88,8 @@ ui <- fluidPage( "PRISM" = "PRISM", "SEMPI" = "SEMPI", "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS"), + "ARTS" = "ARTS", + "GECCO" = "GECCO"), selected = "Antismash"), h3(id = "summarize","Summarize options:"), checkboxInput("hide_summarize", "Hide summarize options"), @@ -94,7 +99,8 @@ ui <- fluidPage( "PRISM" = "P", "SEMPI" = "S", "PRISM-supp" = "PS", - "ARTS" = "AR"), + "ARTS" = "AR", + "GECCO" = "G"), selected = 'A'), checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), h3("Improve visualization:"), @@ -120,11 +126,30 @@ ui <- fluidPage( 'DeepBGC' = "DeepBGC", "SEMPI" = "SEMPI", "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS" + "ARTS" = "ARTS", + "GECCO" = "GECCO" ), selected = 'Antismash'), + h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), + checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), + selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c("Antismash" = "A", + "PRISM" = "P", + "SEMPI" = "S"), + selected = 'A'), + selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type"), + selected = "avg_p"), + # Chose step for barplot (as a threshold to draw a bar) + sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 100, value = 0), + h3(id="data_filter_header_gecco","Gecco data filtering:"), + checkboxInput("hide_data_filter_gecco", "Hide Gecco data filtering options"), + sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), h3(id="data_comparison_header","Comparison with DeepBGC plots:"), - checkboxInput("hide_data_comparison", "Hide data comparison options"), + checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c("Antismash" = "A", "PRISM" = "P", "SEMPI" = "S"), @@ -160,6 +185,7 @@ ui <- fluidPage( mainPanel( tabsetPanel( tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), + tabPanel(title = "Compare data with Gecco", value = 5 ,plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), plotlyOutput("deep_reference", height = "500px")), tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), @@ -182,7 +208,10 @@ server <- function(input, output, session) { biocircos_listen <- reactive({ list( vals$sempi_data,vals$rre_data, vals$deep_data, vals$anti_data, vals$prism_data, input$biocircos_color, input$group_by, input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$rename, input$reset_name, vals$arts_data, vals$prism_supp) + input$score_a, input$rename, input$reset_name, vals$arts_data, vals$prism_supp, vals$gecco_data, input$score_average_gecco, + input$score_cluster_gecco, input$domains_filter_gecco, input$prot_filter_gecco, input$label_color, input$label_color_class, + input$ref_col_biocircos + ) }) # Rective vals the app is using @@ -197,11 +226,13 @@ server <- function(input, output, session) { sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL ) vals$rename_data <- read.csv("rename.csv") + # Upload example data observeEvent(input$anti_sco,{ anti_data <- read.csv("example_data/sco_antismash.csv") # Add chromosome column @@ -224,6 +255,49 @@ server <- function(input, output, session) { selected = "A") updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") + updateSelectInput(session, "ref_comparison_gecco", + selected = "A") + + } + + }) + + observeEvent(input$gecco_sco,{ + gecco_data <- read.delim("example_data/sco_gecco.tsv") + # Add chromosome column + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + select(-one_of(drop_cols)) + gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + vals$gecco_data <- gecco_data + # Save file + write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "GECCO" ) + updateSelectInput(session, "group_by", + selected = "G") + updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO") + } }) @@ -346,6 +420,8 @@ server <- function(input, output, session) { selected = "P") updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") + updateSelectInput(session, "ref_comparison_gecco", + selected = "P") } }) @@ -372,6 +448,8 @@ server <- function(input, output, session) { selected = "S") updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") + updateSelectInput(session, "ref_comparison_gecco", + selected = "S") } }) @@ -537,7 +615,7 @@ server <- function(input, output, session) { } }) - # Observe antismash data input and save as reactive value + # Read the data observeEvent(input$anti_data,{ # Read data if (input$anti_input_options==T){ @@ -611,6 +689,8 @@ server <- function(input, output, session) { selected = "A") updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") + updateSelectInput(session, "ref_comparison_gecco", + selected = "A") } }) @@ -638,6 +718,47 @@ server <- function(input, output, session) { selected = "S") updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") + updateSelectInput(session, "ref_comparison_gecco", + selected = "S") + } + + }) + + observeEvent(input$gecco_data,{ + + gecco_data <- read.delim(input$gecco_data$datapath) + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + select(-one_of(drop_cols)) + gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + vals$gecco_data <- gecco_data + # Save file + write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "GECCO" ) + updateSelectInput(session, "group_by", + selected = "G") + updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO") } }) @@ -768,7 +889,6 @@ server <- function(input, output, session) { } }) - # Observe PRISM data input and save in reactive dataframe observeEvent(input$prism_data,{ # Read data if (input$prism_input_options == T){ @@ -892,10 +1012,11 @@ server <- function(input, output, session) { selected = "P") updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") + updateSelectInput(session, "ref_comparison_gecco", + selected = "P") } }) - #Read and clean DeepBGC data observeEvent(input$deep_data, { drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data @@ -923,7 +1044,6 @@ server <- function(input, output, session) { } }) - # Read RREFinder data observeEvent(input$rre_data, { # Read data vals$rre_data <- read.delim(input$rre_data$datapath) @@ -957,11 +1077,13 @@ server <- function(input, output, session) { vals$rre_more = F } }) + # Observe input of chromosome length observeEvent(input$chr_len,{ vals$chr_len <- input$chr_len }) + # Logic for showing/hiding UI when input observeEvent(vals$rre_data_input, { if (vals$rre_data_input == T){ if (input$hide_viz == F){ @@ -1035,7 +1157,6 @@ server <- function(input, output, session) { showElement(selector = "#cluster_type") showElement(selector = "#data_comparison_header") showElement(selector = "#data_filter_header") - showTab(inputId = "main", target = "1") } else{ hideElement(selector = "#ref_comparison") hideElement(selector = "#score_type") @@ -1052,7 +1173,36 @@ server <- function(input, output, session) { hideElement(selector = "#cluster_type") hideElement(selector = "#data_comparison_header") hideElement(selector = "#data_filter_header") - hideTab(inputId = "main", target = "1") + } + }) + + observeEvent(vals$gecco_data_input,{ + if (vals$gecco_data_input == T){ + showElement(selector = "#data_comparison_header_gecco") + showElement(selector = "#hide_data_comparison_gecco") + showElement(selector = "#ref_comparison_gecco") + showElement(selector = "#score_type_gecco") + showElement(selector = "#plot_step_gecco") + showElement(selector = "#plot_start_gecco") + showElement(selector = "#data_filter_header_gecco") + showElement(selector = "#hide_data_filter_gecco") + showElement(selector = "#score_average_gecco") + showElement(selector = "#score_cluster_gecco") + showElement(selector = "#domains_filter_gecco") + showElement(selector = "#prot_filter_gecco") + } else{ + hideElement(selector = "#data_comparison_header_gecco") + hideElement(selector = "#hide_data_comparison_gecco") + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + hideElement(selector = "#data_filter_header_gecco") + hideElement(selector = "#hide_data_filter_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_cluster_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") } }) @@ -1060,7 +1210,8 @@ server <- function(input, output, session) { if (vals$data_upload_count <2){ hideTab("main", "2") hideTab("main", "3") - }else{ + + }else if (vals$data_upload_count >=2){ if (input$hide_summarize == F) { showElement(selector = "#summarize") showElement(selector = "#group_by") @@ -1073,9 +1224,21 @@ server <- function(input, output, session) { } showTab("main", "2") showTab("main", "3") + if (vals$gecco_data_input == T) { + showTab("main", "5") + } else { + hideTab("main", "5") + } + if (vals$deep_data_input == T) { + showTab("main", "1") + } else { + hideTab("main", "1") + } } if (vals$data_upload_count <1){ hideTab("main", "4") + hideTab(inputId = "main", target = "5") + hideTab(inputId = "main", target = "1") hideElement(selector = "#genes_on_chr") hideElement(selector = "#hide_genes_on_chr") hideElement(selector = "#ref") @@ -1181,7 +1344,13 @@ server <- function(input, output, session) { type_2 <- sapply(type, function(x){ sapply(x, function(y){ if (y %in% renamed_dataframe$Code){ - renamed_dataframe$Group[renamed_dataframe$Code == y] + renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) + if (length(renamed) >1){ + showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + type = "warning", duration = NULL) + showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) + } + renamed[[1]] } else { y } @@ -1194,13 +1363,13 @@ server <- function(input, output, session) { paste(dupl, collapse = "__") }) type_4 <- sapply(type_3, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed_dataframe$Group[renamed_dataframe$Code == y] + if (y %in% as.character(renamed_dataframe$Code)){ + as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] } else { y } }) - return(type_4) + return(as.character(type_4)) } rename_data <- vals$rename_data if (vals$anti_data_input == T){ @@ -1240,6 +1409,7 @@ server <- function(input, output, session) { }) observeEvent(biocircos_listen(), { + req(vals$data_upload_count >=2) #BioCircos! Biocircos_chromosomes <- list() arcs_chromosomes <- c() @@ -1255,6 +1425,28 @@ server <- function(input, output, session) { if (vals$anti_data_input == TRUE){ # Store data in local variable biocircos_anti <- vals$anti_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["Antismash"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } #DEEPBGC @@ -1268,9 +1460,9 @@ server <- function(input, output, session) { select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) # Cluster_type column. Here extract colnames, and assign max value to a new column deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under threshold, print "Under threshold" + # If max score is under_threshold, print "under_threshold" deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) #Finally store deepbgc data in plotting variable. Do final scores processing biocircos_deep <- deep_data_chromo%>% mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% @@ -1282,7 +1474,28 @@ server <- function(input, output, session) { biocircos_deep['Type'] <- biocircos_deep$product_class biocircos_deep['Type2'] <- biocircos_deep$product_class biocircos_deep['Cluster'] <- biocircos_deep$ID - vals$biocircos_deep <- biocircos_deep + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_deep$nucl_end) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_deep$product_class) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_deep$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } #RRE-FINDER @@ -1292,23 +1505,119 @@ server <- function(input, output, session) { biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) biocircos_rre['Type2'] <- biocircos_rre$Type biocircos_rre['Cluster'] <- biocircos_rre$ID + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["RRE"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_rre$Start) + # Stop position of arcs. + if (input$rre_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_rre$E.value) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_rre$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } # PRISM if (vals$prism_data_input == TRUE){ # Store data in local variable biocircos_prism <- vals$prism_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["PRISM"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_prism$Start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_prism$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_prism$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_prism$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } #SEMPI if (vals$sempi_data_input == TRUE){ # Store data in local variable biocircos_sempi <- vals$sempi_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["SEMPI"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("SEMPI", length(biocircos_sempi$Cluster))) + + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_sempi$Start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_sempi$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_sempi$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_sempi$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } if (input$prism_supp == TRUE){ # Store data in local variable biocircos_prism_supp <- vals$prism_supp + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["PRISM-supp"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) + if (input$prism_supp_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_prism_supp$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_prism_supp$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } @@ -1318,9 +1627,72 @@ server <- function(input, output, session) { biocircos_arts <- biocircos_arts %>% filter(Core == input$dup_choice | Core == "Not_core") } + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["ARTS"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("ARTS", length(biocircos_arts$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_arts$Start) + # Stop position of arcs. + if (input$arts_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)+20000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_arts$Type2) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_arts$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } + if (vals$gecco_data_input == TRUE){ + score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + # Store master prism data in local variable + biocircos_gecco <- vals$gecco_data %>% + mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["GECCO"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep("GECCO", length(biocircos_gecco$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_gecco$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_gecco$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_gecco$Type) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_gecco$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + # Add to tracklist. Then it can be populated with links + tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time get_interception <- function(x,y) { @@ -1332,6 +1704,15 @@ server <- function(input, output, session) { return(list(inter_x, inter_y)) } + chromosomes_start <- c() + chromosomes_end <- c() + link_pos_start <- c() + link_pos_start_1 <- c() + link_pos_end <- c() + link_pos_end_2 <- c() + label_1 <- c() + label_2 <- c() + label_color <- c() # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? # ANTISMASH @@ -1387,13 +1768,104 @@ server <- function(input, output, session) { arts_inter$seqnames <- "chr" } + if (vals$gecco_data_input == TRUE){ + # Store deepbgc data start/stop as matrix for futher interception calculation + gecco_inter <- biocircos_gecco %>% + select(Start, Stop) + gecco_inter$seqnames <- "chr" + } - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_a1_t<- get_interception(data1_inter, data2_inter) + #CALCULATIONS + # ----------------------------------------- + + + add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ + inter_a1_t<- get_interception(data1_inter, data2_inter) inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) - return(list(inter_rre_s, inter_s_rre_n)) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[inter_rre_s] )) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[inter_rre_s])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c( data1$Start[inter_s_rre_n])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[inter_s_rre_n])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), data2$Cluster[x], ",", data2$Type[x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), data1$Cluster[x], ",", data1$Type[x])})) + if (!is.null(inter_rre_s)){ + if (class == 'P'){ + subset_vec <- data2$Type2[inter_rre_s] == data1$Type2[inter_s_rre_n] + label_color <- as.character(c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + if (length(label_color) != 0){ + for (t in seq(1:length(label_color))){ + if (!is.null(subset_vec[t])){ + if (subset_vec[t] == F){ + label_color[t] <- as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + } + } + } + } else if (class == 'H'){ + if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ + label_color <- as.character(c(sapply(data1$Type2[inter_s_rre_n], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else { + label_color <-as.character( c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } + }else if (class == 'R'){ + if (data2_label == input$ref_col_biocircos){ + label_color <- as.character(c(sapply(data1$Type2[inter_s_rre_n], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else if (data1_label == input$ref_col_biocircos){ + label_color <- as.character(c(sapply(data2$Type2[inter_rre_s], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character( rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else{ + label_color <- as.character(rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + } + } else { + label_color <-as.character( rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + } + } + return(list(inter_rre_s, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) } rre_interact <- c() @@ -1403,7 +1875,9 @@ server <- function(input, output, session) { sempi_interact <- c() prism_supp_interact <- c() arts_interact <- c() + gecco_interact <- c() + df_g <- data.frame(G=NA, A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) @@ -1412,6 +1886,178 @@ server <- function(input, output, session) { df_ps <- data.frame(PS=NA, AR=NA) + if (vals$gecco_data_input == TRUE){ + if (vals$anti_data_input == TRUE){ + output <- add_biocircos_data(anti_inter, gecco_inter, biocircos_anti, biocircos_gecco, "Antismash", "GECCO", rename_data, input$label_color_class) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + anti_interact <- c(anti_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("G", "A") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of antismash with PRISM + if (vals$prism_data_input == TRUE){ + output <- add_biocircos_data(prism_inter, gecco_inter, biocircos_prism, biocircos_gecco, "PRISM", "GECCO", rename_data, input$label_color_class) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + prism_interact <- c(prism_interact,output[[2]] ) + df_tmp <- data.frame(biocircos_gecco$Cluster[output[[1]]],output[[2]]) + colnames(df_tmp) <- c("G", "P") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of antismash with deepbgc + if (vals$deep_data_input == TRUE){ + output <- add_biocircos_data(deep_inter, gecco_inter, biocircos_deep, biocircos_gecco, "DeepBGC", "GECCO", rename_data, input$label_color_class) + deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]], biocircos_deep$ID[output[[2]]] )) + colnames(df_tmp) <- c("G", "D") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones + } + # Get interception of antismash with RREFinder + if (vals$rre_data_input == TRUE){ + output <- add_biocircos_data(rre_inter, gecco_inter, biocircos_rre, biocircos_gecco, "RRE", "GECCO", rename_data, input$label_color_class) + rre_interact <- c(rre_interact,output[[2]] ) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("G", "R") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Get interception of antismash with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(sempi_inter, gecco_inter, biocircos_sempi, biocircos_gecco, "SEMPI", "GECCO", rename_data, input$label_color_class) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + sempi_interact <- c(sempi_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("G", "S") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (input$prism_supp == TRUE){ + output <- add_biocircos_data(prism_supp_inter, gecco_inter, biocircos_prism_supp, biocircos_gecco, "PRISM-supp", "GECCO", rename_data, input$label_color_class) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + prism_supp_interact <- c(prism_supp_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("G", "PS") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(arts_inter, gecco_inter, biocircos_arts, biocircos_gecco, "ARTS", "GECCO", rename_data, input$label_color_class) + gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) + arts_interact <- c(arts_interact,output[[2]] ) + df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) + colnames(df_tmp) <- c("G", "AR") + df_g <- merge(df_g, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + vals$biocircos_gecco <- biocircos_gecco + write.csv(biocircos_gecco, "gecco_biocircos.csv", row.names = F) + } + # ANTISMASH if (vals$anti_data_input == TRUE){ @@ -1425,6 +2071,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("A", "P") df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Get interception of antismash with deepbgc if (vals$deep_data_input == TRUE){ @@ -1436,6 +2097,22 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) colnames(df_tmp) <- c("A", "D") df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones } # Get interception of antismash with RREFinder if (vals$rre_data_input == TRUE){ @@ -1447,6 +2124,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("A", "R") df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Get interception of antismash with SEMPI if (vals$sempi_data_input == TRUE){ @@ -1458,6 +2150,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("A", "S") df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (input$prism_supp == TRUE){ output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) @@ -1466,6 +2173,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("A", "PS") df_a <- merge(df_a, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) @@ -1474,11 +2196,26 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("A", "AR") df_a <- merge(df_a, df_tmp, all = T) - } - # Write csvs with locally used variables - write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) - } - + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) + } + # DEEPBGC if (vals$deep_data_input == TRUE){ @@ -1492,6 +2229,22 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) colnames(df_tmp) <- c("D", "R") df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + # Safe used local variables to the reactive ones } # Get interception of DeepBGC with PRISM if (vals$prism_data_input == TRUE){ @@ -1503,6 +2256,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) colnames(df_tmp) <- c("D", "P") df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) # Safe used local variables to the reactive ones } # Get interception of DeepBGC with SEMPI @@ -1515,6 +2283,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) colnames(df_tmp) <- c("D", "S") df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (input$prism_supp == TRUE){ output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) @@ -1523,6 +2306,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) colnames(df_tmp) <- c("D", "PS") df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) @@ -1531,7 +2329,24 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) colnames(df_tmp) <- c("D", "AR") df_d <- merge(df_d, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } + # Safe used local variables to the reactive ones + vals$biocircos_deep <- biocircos_deep # Write csvs with locally used variables write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) } @@ -1549,6 +2364,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("P", "R") df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Get interception of PRISM with SEMPI if (vals$sempi_data_input == TRUE){ @@ -1560,6 +2390,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("P", "S") df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (input$prism_supp == TRUE){ output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) @@ -1570,6 +2415,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("P", "PS") df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) @@ -1580,6 +2440,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("P", "AR") df_p <- merge(df_p, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Write csvs with locally used variables write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) @@ -1598,6 +2473,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("R", "S") df_r <- merge(df_r, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (input$prism_supp == TRUE){ output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) @@ -1606,6 +2496,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("R", "PS") df_r <- merge(df_r, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) @@ -1614,7 +2519,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("R", "AR") df_r <- merge(df_r, df_tmp, all = T) - + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Write csvs with locally used variables write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) @@ -1629,6 +2548,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("S", "PS") df_s <- merge(df_s, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) @@ -1637,6 +2571,21 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("S", "AR") df_s <- merge(df_s, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } # Write csvs with locally used variables write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) @@ -1650,20 +2599,44 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(output[[1]],output[[2]])) colnames(df_tmp) <- c("PS", "AR") df_ps <- merge(df_ps, df_tmp, all = T) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) } + #Write csvs with locally used variables write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) } if (vals$arts_data_input == TRUE){ + #Write csvs with locally used variables write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) } - - vals$df_a <- df_a - vals$df_d <- df_d - vals$df_p <- df_p - vals$df_r <- df_r + + + + + # Combine labels with mapply to one list + link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) + + vals$df_a <- df_a + vals$df_d <- df_d + vals$df_p <- df_p + vals$df_r <- df_r vals$df_s <- df_s vals$df_ps <- df_ps + vals$df_g <- df_g vals$rre_interact <- rre_interact vals$anti_interact <- anti_interact vals$prism_interact <- prism_interact @@ -1671,8 +2644,26 @@ server <- function(input, output, session) { vals$sempi_interact <- sempi_interact vals$prism_supp_interact <- prism_supp_interact vals$arts_interact <- arts_interact + vals$gecco_interact <- gecco_interact + # Add links and labels to the track list for subsequent visualization + if (input$label_color == T){ + group_colors <- count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])){ + subset <- unname( which(label_color %in% group_colors$x[i])) + tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) + } + } else{ + tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) + } - + vals$tracklist <- tracklist + vals$Biocircos_chromosomes <- Biocircos_chromosomes }) observeEvent(input$hide_uploads, { @@ -1687,6 +2678,8 @@ server <- function(input, output, session) { hideElement(selector = "#sempi_data") hideElement(selector = "#deep_header_upload") hideElement(selector = "#deep_data") + hideElement(selector = "#gecco_header_upload") + hideElement(selector = "#gecco_data") hideElement(selector = "#rre_header_upload") hideElement(selector = "#rre_data") hideElement(selector = "#chr_len") @@ -1699,6 +2692,7 @@ server <- function(input, output, session) { hideElement(selector = "#rre_sco") hideElement(selector = "#sempi_sco") hideElement(selector = "#deep_sco") + hideElement(selector = "#gecco_sco") }else { showElement(selector = "#anti_input_options") showElement(selector = "#anti_data") @@ -1710,6 +2704,8 @@ server <- function(input, output, session) { showElement(selector = "#sempi_data") showElement(selector = "#deep_header_upload") showElement(selector = "#deep_data") + showElement(selector = "#gecco_header_upload") + showElement(selector = "#gecco_data") showElement(selector = "#rre_header_upload") showElement(selector = "#rre_data") showElement(selector = "#chr_len") @@ -1722,6 +2718,7 @@ server <- function(input, output, session) { showElement(selector = "#rre_sco") showElement(selector = "#sempi_sco") showElement(selector = "#deep_sco") + showElement(selector = "#gecco_sco") } }) @@ -1898,6 +2895,44 @@ server <- function(input, output, session) { } }) + observeEvent(input$hide_data_comparison_gecco, { + if ((input$hide_data_comparison_gecco == T)){ + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } else if (vals$gecco_data_input == T) { + showElement(selector = "#ref_comparison_gecco") + showElement(selector = "#score_type_gecco") + showElement(selector = "#plot_step_gecco") + showElement(selector = "#plot_start_gecco") + } else { + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } + }) + + observeEvent(input$hide_data_filter_gecco, { + if ((input$hide_data_filter_gecco == T)){ + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } else if (vals$gecco_data_input == T){ + showElement(selector = "#score_average_gecco") + showElement(selector = "#score_average_gecco") + showElement(selector = "#domains_filter_gecco") + showElement(selector = "#prot_filter_gecco") + } else { + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } + }) + #Render output plots @@ -2053,20 +3088,20 @@ server <- function(input, output, session) { title <- ggtitle("Rates of DeepBGC/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) } else if (input$ref_comparison == 'P'){ data <- vals$prism_data title <- ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) } else if (input$ref_comparison == 'S'){ data <- vals$sempi_data title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") @@ -2090,6 +3125,191 @@ server <- function(input, output, session) { tooltip = c("Rate")) }) + # Render barplot + output$gecco_barplot <- renderPlot({ + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- drop_na(fullnes_of_annotation) + + # Vectors of columns of score values in DeepBGC data for later subset + score_avg_p <- c("average_p") + score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") + + # Subset dataframe with scores' vectors. Get max value vectors + score_a <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score_type <- score_avg_p + } else if (input$score_type_gecco == "Cluster_Type") { + score_type <- score_cluster_type + } + + # Get max value vector for chosen score + chosen_score_vector <- apply(vals$gecco_data %>% select(score_type),1, function(x) max(x)) + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ + # Store DeepBGC dataframe in variable + gecco_inter <- vals$gecco_data + #Store max value in separate column + gecco_inter$score <- chosen_score_vector + # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix + gecco_inter <- gecco_inter %>% + mutate(score_a = score_a, score_c = score_c) %>% + filter(num_domains>=input$domains_filter_gecco, score>=dataframe_1/100, num_prot>=input$prot_filter_gecco, + average_p >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 ) %>% + select(Start, Stop) + if (length(gecco_inter$Start) > 0) { + gecco_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison_gecco == 'A'){ + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'P'){ + anti_inter <- vals$prism_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'S'){ + anti_inter <- vals$sempi_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(gecco_inter$Start) > 0) { + query <- makeGRangesFromDataFrame(gecco_inter) + subject <- makeGRangesFromDataFrame(anti_inter) + interseption <- findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(gecco_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison_gecco == 'A'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'P'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") + title <- ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'S') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") + title <- ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness <- data.frame(fullnes_of_annotation) + write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), + paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") + + # Plot the barplot + ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + + geom_bar(position="dodge", stat="identity")+ + geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + + xlab(paste(input$score_type,"Score")) + + title + + geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$gecco_rate <- renderPlotly({ + + # Vectors of columns of score values in DeepBGC data for later subset + score_avg_p <- c("average_p") + score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") + + # Subset dataframe with scores' vectors. Get max value vectors + score_a <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score_type <- score_avg_p + } else if (input$score_type_gecco == "Cluster_Type") { + score_type <- score_cluster_type + } + + # Get max value vector for chosen score + chosen_score_vector <- apply(vals$gecco_data %>% select(score_type),1, function(x) max(x)) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous renderPlot + fullnes_of_annotation <- data.frame(vals$fullness) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison_gecco == 'A'){ + data <- vals$anti_data + title <- ggtitle("Rates of GECCO/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'P'){ + data <- vals$prism_data + title <- ggtitle("Rates of GECCO/PRISM data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'S'){ + data <- vals$sempi_data + title <- ggtitle("Rates of GECCO/SEMPI data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + ggplotly(test %>% + pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + geom_line(aes(color=Rates)) + + geom_point(aes(shape=Rates), alpha = .4, size = 3) + + title + + ylab("Rate") + + xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type output$deep_reference <- renderPlotly({ @@ -2099,7 +3319,7 @@ server <- function(input, output, session) { # Store antismash data in local variable, with column renaming anti_data_chromo <- vals$anti_data %>% mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2) + dplyr::select(ID,Chr ,Start, Stop, Type, Type2, Cluster) # Extract only Start and Stop from antismash data into matrix anti_inter <- vals$anti_data %>% select(Start, Stop) @@ -2121,8 +3341,8 @@ server <- function(input, output, session) { # Clean data, using, thesholds deep_data_chromo <- deep_data_chromo%>% - # Change to "Under threshold" Cluster_type column values, if they are under chosen theshold (no cluster type will be visualised) - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) %>% + # Change to "under_threshold" Cluster_type column values, if they are under chosen theshold (no cluster type will be visualised) + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) %>% # Add new columns and change product_class to Cluster_type mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, @@ -2194,6 +3414,22 @@ server <- function(input, output, session) { Stop_vals_arts<- as.numeric(arts_data$Stop) } } + if (vals$gecco_data_input == TRUE){ + score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + # Store master prism data in local variable + gecco_data <- vals$gecco_data %>% + mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + # Start/Stop columns from prism data as matrix + gecco_inter <- gecco_data %>% + select(Start,Stop) + gecco_inter$seqnames <- "chr" + } get_prism_inter <- function(x,prism_inter,prism_data, letter ){ # Get an interception of prism and smth @@ -2382,9 +3618,34 @@ server <- function(input, output, session) { ) return(seg_df_2) } + get_gecco_inter <- function(x,gecco_inter,gecco_data, letter ){ + # Get an interception of sempi and smth + query <- makeGRangesFromDataFrame(gecco_inter) + subject <- makeGRangesFromDataFrame(x) + interseption <- findOverlaps(query,subject) + inter <- interseption@from + data <- gecco_data[inter,] + # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric(data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep("GECCO", length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop, + Num_proteins = data$num_prot, + Num_domains = data$num_domains, + Average_p = data$average_p, + Max_p = data$max_p) + return(seg_df) + } geom_anti <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } geom_prism <- function(data){ geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) @@ -2407,7 +3668,8 @@ server <- function(input, output, session) { } } geom_sempi <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } geom_prism_supp <- function(data){ geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, @@ -2418,22 +3680,116 @@ server <- function(input, output, session) { geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) } + geom_gecco <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") # MAKE COMPUTATIONS + if (vals$gecco_data_input == TRUE){ + seg_ref_g <- data.frame(x=as.numeric(vals$biocircos_gecco$Start), + y=rep("Z", length(vals$biocircos_gecco$Cluster)), + xend=as.numeric(vals$biocircos_gecco$Stop), + yend=rep("Z", length(vals$biocircos_gecco$Cluster)), + Type = as.factor(vals$biocircos_gecco$Type), + Type2 = as.factor(vals$biocircos_gecco$Type2), + Software = rep("GECCO", length(vals$biocircos_gecco$Cluster)), + ID = vals$biocircos_gecco$Cluster, + Start = vals$biocircos_gecco$Start, + Stop = vals$biocircos_gecco$Stop, + Num_proteins = vals$biocircos_gecco$num_prot, + Num_domains = vals$biocircos_gecco$num_domains, + Average_p = vals$biocircos_gecco$average_p, + Max_p = vals$biocircos_gecco$max_p) + seg_ref <- seg_ref_g + + if (input$ref == "GECCO") { + plot <- ggplot(vals$biocircos_gecco, aes(x = vals$chr_len, y = Chr)) + geom_gecco(seg_ref) + if (vals$anti_data_input == TRUE){ + seg_df <- get_anti_inter(gecco_inter,anti_inter,anti_data_chromo, "S" ) + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_anti(seg_df) + } + } + if (vals$deep_data_input == TRUE){ + seg_df <- get_deep_inter(gecco_inter,deep_inter,deep_data_chromo, "Y" ) + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_deep(seg_df) + } + } + if (vals$rre_data_input == TRUE){ + seg_df <- get_RRE_inter(gecco_inter, rre_inter, rre_data, "X") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_rre(seg_df) + } + } + if (vals$prism_data_input == TRUE){ + seg_df <- get_prism_inter(gecco_inter, prism_inter, prism_data, "W") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism(seg_df) + } + } + if (vals$sempi_data_input == TRUE){ + seg_df <- get_sempi_inter(gecco_inter, sempi_inter, sempi_data, "V") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_sempi(seg_df) + } + } + if (input$prism_supp == TRUE){ + seg_df <- get_prism_supp_inter(gecco_inter, prism_supp_inter, prism_supp, "U") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_prism_supp(seg_df) + } + } + if (vals$arts_data_input == TRUE){ + seg_df <- get_arts_inter(gecco_inter, arts_inter, arts_data, "T") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_arts(seg_df) + } + } + plot <- plot + + scale_y_discrete(labels = c("Z" = "GECCO","S" = "A_vs_G","Y" = "D_vs_G", "X" = "RRE_vs_G", "W" = "P_vs_G", "V" = "S_vs_G", + "U" = "P-supp_vs_G", "T" = "AR_vs_G", "S" = "A_vs_G")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + + } + vals$seg_df_ref_g <- data.frame(x=as.numeric(vals$biocircos_gecco$Start), + y=rep("S", length(vals$biocircos_gecco$Cluster)), + xend=as.numeric(vals$biocircos_gecco$Stop), + yend=rep("S", length(vals$biocircos_gecco$Cluster)), + Type = as.factor(vals$biocircos_gecco$Type), + Type2 = as.factor(vals$biocircos_gecco$Type2), + Software = rep("GECCO", length(vals$biocircos_gecco$Cluster)), + ID = vals$biocircos_gecco$Cluster, + Start = vals$biocircos_gecco$Start, + Stop = vals$biocircos_gecco$Stop, + Num_proteins = vals$biocircos_gecco$num_prot, + Num_domains = vals$biocircos_gecco$num_domains, + Average_p = vals$biocircos_gecco$average_p, + Max_p = vals$biocircos_gecco$max_p) + } if (vals$anti_data_input == TRUE){ - seg_ref_a <- data.frame(x=as.numeric( anti_data_chromo$Start), - y=rep("Z", length(anti_data_chromo$ID)), - xend=as.numeric( anti_data_chromo$Stop), - yend=rep("Z", length(anti_data_chromo$ID)), - Type = as.factor(anti_data_chromo$Type), - Type2 = as.factor(anti_data_chromo$Type2), - Software = rep("Antismash", length(anti_data_chromo$ID)), - ID = anti_data_chromo$ID, - Start = anti_data_chromo$Start, - Stop = anti_data_chromo$Stop) + seg_ref_a <- data.frame(x=as.numeric(anti_data_chromo$Start), + y=rep("Z", length(anti_data_chromo$Cluster)), + xend=as.numeric(anti_data_chromo$Stop), + yend=rep("Z", length(anti_data_chromo$Cluster)), + Type = as.factor(anti_data_chromo$Type), + Type2 = as.factor(anti_data_chromo$Type2), + Software = rep("Antis,ash", length(anti_data_chromo$Cluster)), + ID = anti_data_chromo$Cluster, + Start = anti_data_chromo$Start, + Stop = anti_data_chromo$Stop) seg_ref <- seg_ref_a - if (input$ref == "Antismash") { plot <- ggplot(anti_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) if (vals$deep_data_input == TRUE){ @@ -2472,15 +3828,20 @@ server <- function(input, output, session) { plot <- plot + geom_arts(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(anti_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } plot <- plot + scale_y_discrete(labels = c("Z" = "Antismash","Y" = "D_vs_A", "X" = "RRE_vs_A", "W" = "P_vs_A", "V" = "S_vs_A", - "U" = "P-supp_vs_A", "T" = "AR_vs_A")) + + "U" = "P-supp_vs_A", "T" = "AR_vs_A", "S" = "G_vs_A")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model")) + to_plot <- ggplotly(plot, tooltip =tooltip) } vals$seg_df_ref_a <- seg_ref_a @@ -2539,17 +3900,21 @@ server <- function(input, output, session) { plot <- plot + geom_arts(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(deep_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "DeepBGC","X" = "A_vs_D", "Y" = "RRE_vs_D", "W" = "P_vs_D", "V" = "S_vs_D", - "U" = "P-supp_vs_D", "T" = "AR_vs_D")) + + "U" = "P-supp_vs_D", "T" = "AR_vs_D", "S" = "G_vs_D")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" ,"Hit", "Core", "Count", "Bitscore", "Model") - ) + tooltip = tooltip ) } vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), @@ -2565,6 +3930,7 @@ server <- function(input, output, session) { deepbgc_score = deep_data_chromo$deepbgc_score, activity = deep_data_chromo$product_activity) } + if (vals$rre_data_input == TRUE){ if (vals$rre_more == T){ seg_ref_r <- data.frame(x=vals$rre_data$Start, @@ -2633,16 +3999,21 @@ server <- function(input, output, session) { plot <- plot + geom_arts(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(rre_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "RRE","X" = "A_vs_RRE", "Y" = "D_vs_RRE", "W" = "P_vs_RRE", "V" = "S_vs_RRE", - "U" = "P-supp_vs_RRE", "T" = "AR_vs_RRE")) + + "U" = "P-supp_vs_RRE", "T" = "AR_vs_RRE", "S" = "G_vs_RRE")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + tooltip = tooltip ) } @@ -2726,18 +4097,23 @@ server <- function(input, output, session) { if (dim(seg_df[1]) > 0){ plot <- plot + geom_arts(seg_df) } + } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(prism_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } } # Create a dataframe with PRISM data with all the additional info to visualize on hover to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "PRISM","X" = "A_vs_P", "Y" = "D_vs_P", "W" = "RRE_vs_P", "V" = "S_vs_P", - "U" = "P-supp_vs_P", "T" = "AR_vs_P")) + + "U" = "P-supp_vs_P", "T" = "AR_vs_P", "S" = "G_vs_P")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name" , "Hit", "Core", "Count", "Bitscore", "Model") + tooltip = tooltip ) } vals$seg_df_ref_p <- data.frame(x=as.numeric(prism_data$Start), @@ -2803,17 +4179,22 @@ server <- function(input, output, session) { plot <- plot + geom_arts(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(sempi_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } # Create a dataframe with PRISM data with all the additional info to visualize on hover to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "SEMPI","X" = "A_vs_S", "Y" = "D_vs_S", "W" = "RRE_vs_S", "V" = "P_vs_S", - "U" = "P-supp_vs_S", "T" = "AR_vs_S")) + + "U" = "P-supp_vs_S", "T" = "AR_vs_S", "S" = "G_vs_S")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + tooltip = tooltip ) } vals$seg_df_ref_s <- data.frame(x=as.numeric(sempi_data$Start), @@ -2883,18 +4264,23 @@ server <- function(input, output, session) { plot <- plot + geom_arts(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(prism_supp_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } # Create a dataframe with PRISM data with all the additional info to visualize on hover to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "PRISM-supp","X" = "A_vs_P-supp", "Y" = "D_vs_P-supp", "W" = "RRE_vs_P-supp", "V" = "P_vs_P-supp", "U" = "S_vs_P-supp", - "T" = "AR_vs_P-supp")) + + "T" = "AR_vs_P-supp", "S" = "G_vs_P-supp")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + tooltip = tooltip ) } vals$seg_df_ref_p_s <- data.frame(x=prism_supp$Start, @@ -2971,17 +4357,22 @@ server <- function(input, output, session) { plot <- plot + geom_sempi(seg_df) } } + if (vals$gecco_data_input == TRUE){ + seg_df <- get_gecco_inter(arts_inter, gecco_inter, gecco_data, "S") + if (dim(seg_df[1]) > 0){ + plot <- plot + geom_gecco(seg_df) + } + } # Create a dataframe with PRISM data with all the additional info to visualize on hover to_plot <- ggplotly(plot + scale_y_discrete(labels = c("Z" = "ARTS","X" = "A_vs_AR", "Y" = "D_vs_AR", "W" = "RRE_vs_AR", "V" = "P_vs_AR", - "U" = "P-supp_vs_AR", "T" = "S_vs_AR")) + + "U" = "P-supp_vs_AR", "T" = "S_vs_AR", "S" = "G_vs_AR")) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ ggtitle("Annotations' comparison to the reference"), # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability" , "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model") + tooltip = tooltip ) } vals$seg_df_ref_ar <- data.frame(x=arts_data$Start, @@ -3009,1129 +4400,95 @@ server <- function(input, output, session) { output$deep_reference_2 <- renderPlotly({ if (vals$rre_data_input == TRUE){ data <- data.frame(vals$rre_data) - } - if (vals$arts_data_input == TRUE){ + }else if (vals$arts_data_input == TRUE){ data <- vals$arts_data - } - if (vals$anti_data_input == TRUE){ + } else if (vals$anti_data_input == TRUE){ data <- vals$anti_data %>% mutate(ID = Cluster, Chr = chromosome) %>% dplyr::select(ID,Chr ,Start, Stop, Type, Type2) - } - if (vals$deep_data_input == TRUE){ + }else if (vals$deep_data_input == TRUE){ data <- vals$deep_data_chromo - } - if (vals$prism_data_input == TRUE){ + }else if (vals$prism_data_input == TRUE){ data <- vals$prism_data - } - if (vals$sempi_data_input == TRUE){ + }else if (vals$sempi_data_input == TRUE){ data <- vals$sempi_data + }else if (vals$gecco_data_input == TRUE){ + data <- vals$gecco_data } + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) if (vals$anti_data_input == TRUE){ plot <- plot + - geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$deep_data_input == TRUE){ - plot <- plot + - geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) - } - } - if (vals$prism_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$sempi_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (input$prism_supp == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) - } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "Antismash","X" = "DeepBGC", "Y" = "RRE", "W" = "PRISM", - "V" = "SEMPI", "U" = "P-supp", "T" = "ARTS")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model" ) - ) - to_plot - }) - - # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- renderBioCircos({ - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - - rename_data <- vals$rename_data - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - # Store data in local variable - biocircos_anti <- vals$anti_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["Antismash"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Get vector of max values from chosen columns from deepbgc data - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under threshold, print "Under threshold" - deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "Under threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_deep$nucl_end) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_deep$product_class) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_deep$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - biocircos_rre <- data.frame(vals$rre_data) - biocircos_rre$Start <- as.numeric(biocircos_rre$Start) - biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) - biocircos_rre['Type2'] <- biocircos_rre$Type - biocircos_rre['Cluster'] <- biocircos_rre$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["RRE"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_rre$Start) - # Stop position of arcs. - if (input$rre_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_rre$E.value) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_rre$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store data in local variable - biocircos_prism <- vals$prism_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_prism$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store data in local variable - biocircos_sempi <- vals$sempi_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["SEMPI"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("SEMPI", length(biocircos_sempi$Cluster))) - - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_sempi$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_sempi$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_sempi$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_sempi$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - if (input$prism_supp == TRUE){ - # Store data in local variable - biocircos_prism_supp <- vals$prism_supp - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM-supp"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) - if (input$prism_supp_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism_supp$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism_supp$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - - if (vals$arts_data_input == TRUE){ - biocircos_arts <- data.frame(vals$arts_data) - if (input$dup_choice != "All"){ - biocircos_arts <- biocircos_arts %>% - filter(Core == input$dup_choice | Core == "Not_core") - } - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["ARTS"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("ARTS", length(biocircos_arts$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_arts$Start) - # Stop position of arcs. - if (input$arts_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)+20000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_arts$Type2) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_arts$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - - # Add to tracklist. Then it can be populated with links - tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - get_interception <- function(x,y) { - query <- makeGRangesFromDataFrame(x) - subject <- makeGRangesFromDataFrame(y) - interseption <- findOverlaps(query,subject) - inter_x <- interseption@to - inter_y <- interseption@from - return(list(inter_x, inter_y)) - } - - chromosomes_start <- c() - chromosomes_end <- c() - link_pos_start <- c() - link_pos_start_1 <- c() - link_pos_end <- c() - link_pos_end_2 <- c() - label_1 <- c() - label_2 <- c() - label_color <- c() - # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - anti_inter <- biocircos_anti %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store PRISM data start/stop as matrix for further interception calculation - prism_inter <- biocircos_prism %>% - select(Start, Stop) - prism_inter$seqnames <- "chr" - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store SEMPI data start/stop as matrix for further interception calculation - sempi_inter <- biocircos_sempi %>% - select(Start, Stop) - sempi_inter$seqnames <- "chr" - } - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - # Store RREFinder data start/stop as matrix for futher interception calculation - rre_inter <- biocircos_rre%>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) - deep_inter$seqnames <- "chr" - } - - - if (input$prism_supp == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) - prism_supp_inter$seqnames <- "chr" - } - - if (vals$arts_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - arts_inter <- biocircos_arts %>% - select(Start, Stop) - arts_inter$seqnames <- "chr" - } - - #CALCULATIONS - # ----------------------------------------- - - - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_a1_t<- get_interception(data1_inter, data2_inter) - inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) - inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[inter_rre_s] )) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[inter_rre_s])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[inter_s_rre_n])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[inter_s_rre_n])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[x])})) - if (!is.null(inter_rre_s)){ - if (class == 'P'){ - subset_vec <- data2$Type2[inter_rre_s] == data1$Type2[inter_s_rre_n] - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- rename_data$Color[rename_data$Group_color == 'base'] - } - } - } - } - } else if (class == 'H'){ - if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ - label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else { - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } - }else if (class == 'R'){ - if (data2_label == input$ref_col_biocircos){ - label_color <- c(sapply(data1$Type2[inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else if (data1_label == input$ref_col_biocircos){ - label_color <- c(sapply(data2$Type2[inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - rename_data$Color[rename_data$Group_color == x] - } - else{ - rename_data$Color[rename_data$Group_color == 'base'] - } - })) - } else{ - label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) - } - } else { - label_color <- rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start)) - } - } - return(list(inter_rre_s, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) - } - - rre_interact <- c() - anti_interact <- c() - prism_interact <- c() - deep_interact <- c() - sempi_interact <- c() - prism_supp_interact <- c() - arts_interact <- c() - - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) - - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - - # Get interception of antismash with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) - vals$inter_p_ref_n <- output[[2]] - vals$inter_a3 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "P") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with deepbgc - if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) - vals$inter_d_ref_n <- output[[2]] - vals$inter_a1 <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) - colnames(df_tmp) <- c("A", "D") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of antismash with RREFinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) - vals$inter_rre_ref_n <- output[[2]] - vals$inter_a2 <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "R") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) - vals$inter_s_ref_n <- output[[2]] - vals$inter_a4 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "S") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "PS") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "AR") - df_a <- merge(df_a, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) - } - - # DEEPBGC - if (vals$deep_data_input == TRUE){ - - # Get interception of DeepBGC with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) - vals$inter_rre_d_n <- output[[2]] - vals$inter_d_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "R") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) - vals$inter_p_d_n <- output[[2]] - vals$inter_d_p <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "P") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) - vals$inter_s_d_n <- output[[2]] - vals$inter_d_s <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "S") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "PS") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "AR") - df_d <- merge(df_d, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Safe used local variables to the reactive ones - vals$biocircos_deep <- biocircos_deep - # Write csvs with locally used variables - write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - - # Get interception of PRISM with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) - vals$inter_rre_p_n <- output[[2]] - vals$inter_p_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - prism_interact <- c(prism_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "R") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of PRISM with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "S") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "PS") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "AR") - df_p <- merge(df_p, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) + plot <- plot + + geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) } - - # RRE-FINDER if (vals$rre_data_input == TRUE){ - - # Get interception of RRE with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) - vals$inter_s_rre_n <- output[[2]] - vals$inter_rre_s <- output[[1]] - rre_interact <- c(rre_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "S") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "PS") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "AR") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) + if (vals$rre_more == T){ + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) } - # Write csvs with locally used variables - write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) } - - #SEMPI + if (vals$prism_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } if (vals$sempi_data_input == TRUE){ - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "PS") - df_s <- merge(df_s, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "AR") - df_s <- merge(df_s, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) + plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + } - if (input$prism_supp == TRUE){ - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) - prism_supp_interact <- c(prism_supp_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("PS", "AR") - df_ps <- merge(df_ps, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - #Write csvs with locally used variables - write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) + plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) } - if (vals$arts_data_input == TRUE){ - #Write csvs with locally used variables - write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) + plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) } - - - - - # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - vals$df_a <- df_a - vals$df_d <- df_d - vals$df_p <- df_p - vals$df_r <- df_r - vals$df_s <- df_s - vals$df_ps <- df_ps - vals$rre_interact <- rre_interact - vals$anti_interact <- anti_interact - vals$prism_interact <- prism_interact - vals$deep_interact <- deep_interact - vals$sempi_interact <- sempi_interact - vals$prism_supp_interact <- prism_supp_interact - vals$arts_interact <- arts_interact - # Add links and labels to the track list for subsequent visualization - if (input$label_color == T){ - group_colors <- count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) - } - } else{ - tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) + if (vals$gecco_data_input == TRUE){ + plot <- plot + geom_segment(data = vals$seg_df_ref_g, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) } - - - - - - + to_plot <- ggplotly(plot + + scale_y_discrete(labels = c("Z" = "Antismash","X" = "DeepBGC", "Y" = "RRE", "W" = "PRISM", + "V" = "SEMPI", "U" = "P-supp", "T" = "ARTS", "S" = "GECCO")) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot + }) + + # Render Biocircos Plot for all-vs-all comparison + output$biocircos <- renderBioCircos({ # Plot BioCircos - BioCircos(tracklist, genome = Biocircos_chromosomes, genomeTicksScale = 1e+6) + BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) }) @@ -4157,6 +4514,7 @@ server <- function(input, output, session) { sempi_count <- NULL prism_supp_count <- NULL arts_count <- NULL + gecco_count <- NULL if (vals$anti_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation @@ -4174,6 +4532,22 @@ server <- function(input, output, session) { # Add Stop positions (to visualize on hover) antismash_count$Stop <- anti_anot$Stop } + if (vals$gecco_data_input == TRUE){ + # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation + gecco_count <- count(as.factor(c(vals$gecco_interact))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + gecco_anot <- vals$gecco_data[vals$gecco_data$Cluster %in% as.numeric(levels(gecco_count$x)),] + # Add prefices to the ID to plot for a barplot. + gecco_count$x <- sapply(gecco_count$x, function(x) paste("G: ", x)) + # Add label column to the dataframe, from which we will plot + gecco_count$label <- rep("GECCO", length(gecco_count$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + gecco_count$Type <- gecco_anot$Type + # Add Start positions (to visualize on hover) + gecco_count$Start <- gecco_anot$Start + # Add Stop positions (to visualize on hover) + gecco_count$Stop <- gecco_anot$Stop + } if (vals$deep_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation deep_count <- count(as.factor(c( vals$deep_interact))) @@ -4272,7 +4646,7 @@ server <- function(input, output, session) { # Integrate all those dataframe to the master one - ranking_data <- rbind(antismash_count,prism_count, deep_count,rre_count, sempi_count, prism_supp_count, arts_count) + ranking_data <- rbind(gecco_count, antismash_count,prism_count, deep_count,rre_count, sempi_count, prism_supp_count, arts_count) # Fix column names in the master dataframe colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") # Plot @@ -4290,6 +4664,14 @@ server <- function(input, output, session) { # Render table with data output$group_table <- renderTable({ df_f_ar <- data.frame(AR=NA) + if (vals$gecco_data_input == TRUE){ + if ((input$group_by=="G") & (input$count_all == T)){ + df_f_g <- data.frame(vals$biocircos_gecco$Cluster) + colnames(df_f_g) <- c("G") + } else{ + df_f_g <- data.frame(G=NA) + } + } if (vals$anti_data_input == TRUE){ if ((input$group_by=="A") & (input$count_all == T)){ df_f_a <- data.frame(seq(1:length(vals$anti_data$Cluster))) @@ -4300,7 +4682,7 @@ server <- function(input, output, session) { } if (vals$deep_data_input == TRUE){ if ((input$group_by=="D") & (input$count_all == T)){ - df_f_d <- data.frame(seq(1:length(vals$biocircos_deep$ID))) + df_f_d <- data.frame(vals$biocircos_deep$ID) colnames(df_f_d) <- c("D") } else{ df_f_d <- data.frame(D=NA) @@ -4362,7 +4744,7 @@ server <- function(input, output, session) { return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) } - + df_g <- data.frame(G=NA, A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) @@ -4370,6 +4752,10 @@ server <- function(input, output, session) { df_s = data.frame(S=NA, PS = NA, AR=NA) df_ps <- data.frame(PS=NA, AR=NA) + if (vals$gecco_data_input == TRUE){ + df_g <- merge(df_f_g, vals$df_g, all =T) + + } if (vals$anti_data_input == TRUE){ df_a <- merge(df_f_a, vals$df_a, all =T) @@ -4399,8 +4785,8 @@ server <- function(input, output, session) { if (vals$arts_data_input == TRUE){ } - - df_1 <- merge(df_d, df_a, all=T) + df_0 <- merge(df_a, df_g, all=T) + df_1 <- merge(df_0, df_d, all=T) df_2 <- merge(df_1, df_p, all=T) df_3 <- merge(df_2, df_r, all=T) df_4 <- merge(df_3, df_s, all=T) @@ -4412,49 +4798,64 @@ server <- function(input, output, session) { P=paste(P, collapse=","), S=paste(S, collapse=","), PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) }else if (input$group_by=="P"){ data <- df_fin %>% group_by(P) %>% summarise(D=paste(D, collapse=","), R=paste(R, collapse=","), A=paste(A, collapse=","), S=paste(S, collapse=","), PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) }else if (input$group_by=="R"){ data <- df_fin %>% group_by(R) %>% summarise(D=paste(D, collapse=","), A=paste(A, collapse=","), P=paste(P, collapse=","), S=paste(S, collapse=","), PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) }else if (input$group_by=="D"){ data <- df_fin %>% group_by(D) %>% summarise(A=paste(A, collapse=","), R=paste(R, collapse=","), P=paste(P, collapse=","), S=paste(S, collapse=","), PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) } else if (input$group_by=="S"){ data <- df_fin %>% group_by(S) %>% summarise(A=paste(A, collapse=","), R=paste(R, collapse=","), P=paste(P, collapse=","), D=paste(D, collapse=","), PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) } else if (input$group_by=="PS"){ data <- df_fin %>% group_by(PS) %>% summarise(A=paste(A, collapse=","), R=paste(R, collapse=","), P=paste(P, collapse=","), D=paste(D, collapse=","), S=paste(S, collapse=","), - AR=paste(AR, collapse=",")) + AR=paste(AR, collapse=","), + G=paste(G, collapse=",")) } else if (input$group_by=="AR"){ data <- df_fin %>% group_by(AR) %>% summarise(A=paste(A, collapse=","), R=paste(R, collapse=","), P=paste(P, collapse=","), D=paste(D, collapse=","), S=paste(S, collapse=","), - PS=paste(PS, collapse=",")) + PS=paste(PS, collapse=","), + G=paste(G, collapse=",")) + } else if (input$group_by=="G"){ + data <- df_fin %>% group_by(G) %>% summarise(A=paste(A, collapse=","), + R=paste(R, collapse=","), + P=paste(P, collapse=","), + D=paste(D, collapse=","), + S=paste(S, collapse=","), + PS=paste(PS, collapse=","), + AR=paste(AR, collapse=",")) } data$D <- gsub('NA,|,NA', '', data$D) @@ -4471,6 +4872,9 @@ server <- function(input, output, session) { data$PS[nrow(data)]<- refine_unique(data$PS) data$AR <- gsub('NA,|,NA', '', data$AR) data$AR[nrow(data)]<- refine_unique(data$AR) + data$G <- gsub('NA,|,NA', '', data$G) + data$G[nrow(data)]<- refine_unique(data$G) + names(data)[names(data) == 'D'] <- 'DeepBGC' names(data)[names(data) == 'A'] <- 'Antismash' @@ -4479,6 +4883,7 @@ server <- function(input, output, session) { names(data)[names(data) == 'P'] <- 'PRISM' names(data)[names(data) == 'PS'] <- 'PRISM-supp' names(data)[names(data) == 'AR'] <- 'ARTS' + names(data)[names(data) == 'G'] <- 'GECCO' if (vals$anti_data_input != TRUE){ data <- data %>% @@ -4508,6 +4913,10 @@ server <- function(input, output, session) { data <- data %>% select(-ARTS) } + if (vals$gecco_data_input != TRUE){ + data <- data %>% + select(-GECCO) + } data["Group"] <- paste("group", rownames(data), sep = "_") vals$group_by_data <- data From 025257e414b220ef6ccffb742220f77adb839425 Mon Sep 17 00:00:00 2001 From: Pavlo Date: Fri, 28 May 2021 22:48:09 +0300 Subject: [PATCH 023/199] Rewrote core computations + many if statements in for loops Former-commit-id: 377d8107b678d2281b752b77e733eeafc50eaa7e --- app.R | 3258 ++++++++++++++++++++++------------------------------ rename.csv | 178 +-- 2 files changed, 1468 insertions(+), 1968 deletions(-) diff --git a/app.R b/app.R index 08bec3d..b276a7a 100755 --- a/app.R +++ b/app.R @@ -198,6 +198,7 @@ ui <- fluidPage( # Define server logic server <- function(input, output, session) { + # options(shiny.maxRequestSize=100*1024^2) # Small function to make integers zeros is.integer0 <- function(x) @@ -206,13 +207,23 @@ server <- function(input, output, session) { } biocircos_listen <- reactive({ - list( vals$sempi_data,vals$rre_data, vals$deep_data, vals$anti_data, vals$prism_data, input$biocircos_color, - input$group_by, input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$rename, input$reset_name, vals$arts_data, vals$prism_supp, vals$gecco_data, input$score_average_gecco, - input$score_cluster_gecco, input$domains_filter_gecco, input$prot_filter_gecco, input$label_color, input$label_color_class, - input$ref_col_biocircos + list( input$biocircos_color, vals$arts_data_filtered, input$label_color, input$label_color_class, + input$ref_col_biocircos, vals$deep_data_filtered, vals$gecco_data_filtered, vals$inters_filtered ) }) + inputData <- reactive({ + list( vals$sempi_data,vals$rre_data, vals$anti_data, vals$prism_data, + vals$arts_data, vals$prism_supp, vals$deep_data, vals$gecco_data + ) + }) + dynamicInput <- reactive({ + list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, + input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, + input$prot_filter_gecco, input$dup_choice, vals$need_filter + ) + }) + + # Rective vals the app is using # Some dataframes that are used through the app + some vectors of untercepted values @@ -227,13 +238,19 @@ server <- function(input, output, session) { prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F ) + vals$computed <- list( + anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F + ) + vals$rename_data <- read.csv("rename.csv") # Upload example data observeEvent(input$anti_sco,{ + whereami::cat_where(whereami::whereami()) anti_data <- read.csv("example_data/sco_antismash.csv") # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) @@ -263,6 +280,7 @@ server <- function(input, output, session) { }) observeEvent(input$gecco_sco,{ + whereami::cat_where(whereami::whereami()) gecco_data <- read.delim("example_data/sco_gecco.tsv") # Add chromosome column gecco_data$chromosome <- rep("G", length(gecco_data$type)) @@ -330,9 +348,7 @@ server <- function(input, output, session) { }) - prism_data <- data.frame(cbind(start, end, types)) - prism_data <- prism_data %>% - transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) vals$biocircos_color = F regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ @@ -396,7 +412,9 @@ server <- function(input, output, session) { final_reg$Cluster <- final_reg$ID rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) vals$prism_supp <- final_reg + vals$prism_supp_data <- final_reg vals$prism_json = T + vals$prism_supp_data_input=T prism_data$Type <- str_trim(tolower(prism_data$Type)) prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) @@ -406,7 +424,7 @@ server <- function(input, output, session) { # Add chromosome info column vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism$Cluster + vals$prism_data$ID <- vals$prism_data$Cluster # Save file write.csv(vals$prism_data, "prism_data.csv", row.names = F) vals$prism_data_input = TRUE @@ -426,7 +444,7 @@ server <- function(input, output, session) { }) observeEvent(input$sempi_sco,{ - + whereami::cat_where(whereami::whereami()) sempi_data <- read.csv("example_data/sco_sempi.csv") sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 @@ -581,6 +599,7 @@ server <- function(input, output, session) { }) observeEvent(input$rre_sco, { + whereami::cat_where(whereami::whereami()) # Read data vals$rre_data <- read.delim("example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) @@ -594,6 +613,7 @@ server <- function(input, output, session) { vals$rre_data$Cluster <- vals$rre_data$ID vals$rre_data <- data.frame(vals$rre_data) vals$rre_data['Type'] <- 'ripp' + vals$rre_data['Type2'] <- 'ripp' write.csv(vals$rre_data, "rre_data.csv", row.names = F) vals$rre_data_input = TRUE @@ -920,10 +940,7 @@ server <- function(input, output, session) { }) - - prism_data <- data.frame(cbind(start, end, types)) - prism_data <- prism_data %>% - transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) vals$biocircos_color = F regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ @@ -987,7 +1004,9 @@ server <- function(input, output, session) { final_reg$Cluster <- final_reg$ID rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) vals$prism_supp <- final_reg + vals$prism_supp_data <- final_reg vals$prism_json = T + vals$prism_supp_data_input = T } prism_data$Type <- str_trim(tolower(prism_data$Type)) @@ -998,7 +1017,7 @@ server <- function(input, output, session) { # Add chromosome info column vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism$Cluster + vals$prism_data$ID <- vals$prism_data$Cluster # Save file write.csv(vals$prism_data, "prism_data.csv", row.names = F) vals$prism_data_input = TRUE @@ -1058,6 +1077,7 @@ server <- function(input, output, session) { vals$rre_data$Cluster <- vals$rre_data$ID vals$rre_data <- data.frame(vals$rre_data) vals$rre_data['Type'] <- 'ripp' + vals$rre_data['Type2'] <- 'ripp' write.csv(vals$rre_data, "rre_data.csv", row.names = F) vals$rre_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 @@ -1085,6 +1105,7 @@ server <- function(input, output, session) { # Logic for showing/hiding UI when input observeEvent(vals$rre_data_input, { + whereami::cat_where(whereami::whereami()) if (vals$rre_data_input == T){ if (input$hide_viz == F){ showElement(selector = "#rre_width") @@ -1095,6 +1116,7 @@ server <- function(input, output, session) { }) observeEvent(vals$anti_data_input, { + whereami::cat_where(whereami::whereami()) if (vals$anti_data_input == T){ if (input$hide_anti == F){ showElement(selector = "#anti_header") @@ -1129,6 +1151,7 @@ server <- function(input, output, session) { }) observeEvent(vals$sempi_data_input, { + whereami::cat_where(whereami::whereami()) if (vals$sempi_data_input == T){ if (input$hide_anti == F){ showElement(selector = "#sempi_header") @@ -1207,6 +1230,7 @@ server <- function(input, output, session) { }) observeEvent(vals$data_upload_count, { + whereami::cat_where(whereami::whereami()) if (vals$data_upload_count <2){ hideTab("main", "2") hideTab("main", "3") @@ -1408,157 +1432,662 @@ server <- function(input, output, session) { vals$rename_data <- rename_data }) - observeEvent(biocircos_listen(), { - req(vals$data_upload_count >=2) - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - - rename_data <- vals$rename_data - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - # Store data in local variable - biocircos_anti <- vals$anti_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["Antismash"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + observeEvent(input$hide_uploads, { + if (input$hide_uploads == T){ + hideElement(selector = "#anti_input_options") + hideElement(selector = "#anti_data") + hideElement(selector = "#prism_input_options") + hideElement(selector = "#anti_header_upload") + hideElement(selector = "#prism_header_upload") + hideElement(selector = "#prism_data") + hideElement(selector = "#sempi_header_upload") + hideElement(selector = "#sempi_data") + hideElement(selector = "#deep_header_upload") + hideElement(selector = "#deep_data") + hideElement(selector = "#gecco_header_upload") + hideElement(selector = "#gecco_data") + hideElement(selector = "#rre_header_upload") + hideElement(selector = "#rre_data") + hideElement(selector = "#chr_len") + hideElement(selector = "#arts_header_upload") + hideElement(selector = "#known_data") + hideElement(selector = "#dup_data") + hideElement(selector = "#anti_sco") + hideElement(selector = "#prism_sco") + hideElement(selector = "#arts_sco") + hideElement(selector = "#rre_sco") + hideElement(selector = "#sempi_sco") + hideElement(selector = "#deep_sco") + hideElement(selector = "#gecco_sco") + }else { + showElement(selector = "#anti_input_options") + showElement(selector = "#anti_data") + showElement(selector = "#prism_input_options") + showElement(selector = "#anti_header_upload") + showElement(selector = "#prism_header_upload") + showElement(selector = "#prism_data") + showElement(selector = "#sempi_header_upload") + showElement(selector = "#sempi_data") + showElement(selector = "#deep_header_upload") + showElement(selector = "#deep_data") + showElement(selector = "#gecco_header_upload") + showElement(selector = "#gecco_data") + showElement(selector = "#rre_header_upload") + showElement(selector = "#rre_data") + showElement(selector = "#chr_len") + showElement(selector = "#arts_header_upload") + showElement(selector = "#known_data") + showElement(selector = "#dup_data") + showElement(selector = "#anti_sco") + showElement(selector = "#prism_sco") + showElement(selector = "#arts_sco") + showElement(selector = "#rre_sco") + showElement(selector = "#sempi_sco") + showElement(selector = "#deep_sco") + showElement(selector = "#gecco_sco") + } + }) + + observeEvent(input$hide_anti, { + if (input$hide_anti== T){ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + }else{ + if (vals$anti_data_input == T){ + showElement(selector = "#anti_header") + showElement(selector = "#anti_hybrid") + } else{ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Get vector of max values from chosen columns from deepbgc data - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_deep$nucl_end) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_deep$product_class) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_deep$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + if (vals$prism_data_input == T){ + showElement(selector = "#prism_header") + showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + showElement(selector = "#prism_supp") } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - biocircos_rre <- data.frame(vals$rre_data) - biocircos_rre$Start <- as.numeric(biocircos_rre$Start) - biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) - biocircos_rre['Type2'] <- biocircos_rre$Type - biocircos_rre['Cluster'] <- biocircos_rre$ID - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["RRE"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_rre$Start) - # Stop position of arcs. - if (input$rre_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) + } else { + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_rre$E.value) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_rre$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) + if (vals$sempi_data_input == T){ + showElement(selector = "#sempi_header") + showElement(selector = "#sempi_hybrid") } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } else{ + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") } - arc_col <- c(arc_col,as.character(arc_colors) ) } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store data in local variable - biocircos_prism <- vals$prism_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_prism$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) + }) + + observeEvent(input$hide_genes_on_chr, { + if (input$hide_genes_on_chr == T){ + hideElement(selector = "#ref") + } else { + if (vals$data_upload_count > 0){ + showElement(selector = "#ref") } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + hideElement(selector = "#genes_on_chr") + hideElement(selector = "#ref") } - arc_col <- c(arc_col,as.character(arc_colors) ) + } + }) + + observeEvent(input$hide_summarize, { + if (input$hide_summarize == T){ + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } else { + if (vals$data_upload_count > 1){ + showElement(selector = "#group_by") + showElement(selector = "#count_all") + } else { + hideElement(selector = "#summarize") + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } + + } + }) + + observeEvent(input$hide_viz, { + if (input$hide_viz == T){ + hideElement(selector = "#rename_data") + hideElement(selector = "#rename") + hideElement(selector = "#reset_name") + hideElement(selector = "#rre_width") + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + hideElement(selector = "#ref_col_biocircos") + hideElement(selector = "#arts_header") + } else{ + showElement(selector = "#rename_data") + showElement(selector = "#rename") + showElement(selector = "#reset_name") + if (vals$rre_data_input == T){ + showElement(selector = "#rre_width") + } else { + hideElement(selector = "#rre_width") + } + if (vals$prism_json == T){ + showElement(selector = "#prism_supp_width") + } + else { + hideElement(selector = "#prism_supp_width") + } + if (vals$data_upload_count > 1){ + showElement(selector = "#biocircos_color") + showElement(selector = "#label_color") + showElement(selector = "#label_color_class") + } else { + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + } + if (input$label_color_class == "R"){ + showElement(selector = "#ref_col_biocircos") + } else { + hideElement(selector = "#ref_col_biocircos") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + } else { + hideElement(selector = "#arts_header") + } + + } + }) + + observeEvent(input$hide_data_comparison, { + if ((input$hide_data_comparison == T)){ + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } else if (vals$deep_data_input == T) { + showElement(selector = "#ref_comparison") + showElement(selector = "#score_type") + showElement(selector = "#plot_step") + showElement(selector = "#plot_start") + } else { + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } + }) + + observeEvent(input$hide_data_filter, { + if ((input$hide_data_filter == T)){ + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } else if (vals$deep_data_input == T){ + showElement(selector = "#score_a") + showElement(selector = "#score_d") + showElement(selector = "#score_c") + showElement(selector = "#domains_filter") + showElement(selector = "#biodomain_filter") + showElement(selector = "#gene_filter") + showElement(selector = "#cluster_type") + } else { + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } + }) + + observeEvent(input$hide_data_comparison_gecco, { + if ((input$hide_data_comparison_gecco == T)){ + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } else if (vals$gecco_data_input == T) { + showElement(selector = "#ref_comparison_gecco") + showElement(selector = "#score_type_gecco") + showElement(selector = "#plot_step_gecco") + showElement(selector = "#plot_start_gecco") + } else { + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } + }) + + observeEvent(input$hide_data_filter_gecco, { + if ((input$hide_data_filter_gecco == T)){ + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } else if (vals$gecco_data_input == T){ + showElement(selector = "#score_average_gecco") + showElement(selector = "#score_average_gecco") + showElement(selector = "#domains_filter_gecco") + showElement(selector = "#prot_filter_gecco") + } else { + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } + }) + + observeEvent(inputData(), { + req(vals$data_upload_count >1) + whereami::cat_where(whereami::whereami()) + # GENERATE DATA + if (vals$anti_data_input == TRUE){ + anti_data <- vals$anti_data + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + + } + if (vals$deep_data_input == TRUE){ + deep_data <- vals$deep_data + deep_inter <- vals$deep_data %>% + select(nucl_start, nucl_end) + + deep_inter$seqnames <- "chr" + } + if (vals$rre_data_input == TRUE){ + # Convert numeric columns in a dataframe as a numeric + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(vals$rre_data) + # Start/Stop columns from rre data as matrix + rre_inter <- rre_data %>% + select(Start, Stop) + rre_inter$seqnames <- "chr" + } + if (vals$prism_data_input == TRUE){ + # Store master prism data in local variable + prism_data <- vals$prism_data + # Start/Stop columns from prism data as matrix + prism_inter <- prism_data %>% + select(Start,Stop) + prism_inter$seqnames <- "chr" + } + if (vals$sempi_data_input == TRUE){ + # Store master prism data in local variable + sempi_data <- vals$sempi_data + # Start/Stop columns from prism data as matrix + sempi_inter <- vals$sempi_data %>% + select(Start,Stop) + sempi_inter$seqnames <- "chr" + } + if (vals$prism_supp_data_input == T){ + prism_supp_data <- vals$prism_supp_data + prism_supp_inter <- vals$prism_supp_data %>% + select(Start,Stop) + prism_supp_inter$seqnames <- "chr" + if (vals$prism_supp_data_input_width == TRUE) { + Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 + } else{ + Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) + } + } + if (vals$arts_data_input == T){ + arts_data <- vals$arts_data + arts_inter <- vals$arts_data %>% + select(Start,Stop) + arts_inter$seqnames <- "chr" + } + if (vals$gecco_data_input == TRUE){ + gecco_data <- vals$gecco_data + # Start/Stop columns from prism data as matrix + gecco_inter <- vals$gecco_data %>% + select(Start,Stop) + gecco_inter$seqnames <- "chr" + } + + get_inter <- function(inter1, inter2){ + query <- makeGRangesFromDataFrame(inter2) + subject <- makeGRangesFromDataFrame(inter1) + interseption <- findOverlaps(query,subject) + inter_from <- interseption@from + inter_to <- interseption@to + return(list(from = inter_from, to = inter_to)) + } + + inters <- vals$inters + #inters_filtered <- vals$inters_filtered + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + + #TESTING +# computed <- list( +# anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F +# ) + + + index = 1 + for (i in data_uploads){ + index_2 = 1 + j = soft_names[index] + for (p in data_uploads){ + x = soft_names[index_2] + if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ + if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ + res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) + new_res <- list() + new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster + new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster + inters[[j]][[x]] <- new_res + inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + #inters_filtered[[j]][[x]] <- new_res + #inters_filtered[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + + } + + } + index_2 = index_2 +1 + } + if (vals[[i]] == TRUE){ + vals$computed[[j]] <- TRUE + } + index = index +1 + } + + vals$inters <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ + vals$inters_filtered <- inters + } else{ + vals$need_filter <- T + } + + +#### TESTING +# score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) +# score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) +# score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) +# +# deep_data <- vals$deep_data%>% +# mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% +# filter(score_a >= 0.5, score_c >=0.5 , score_d >= 0.8, num_domains >= 5, +# num_bio_domains>=3, num_proteins>=3) +# vals <- list( +# anti_data_input = T, +# sempi_data_input = T, +# prism_data_input = T, +# prism_supp = T, +# arts_data_input = T, +# deep_data_input = T, +# gecco_data_input = T, +# rre_data_input = T, +# anti_data = anti_data, +# deep_data = deep_data, +# prism_data = prism_data, +# rre_data = rre_data, +# arts_data = arts_data, +# sempi_data = sempi_data, +# gecco_data = gecco_data, +# prism_supp_data = prism_supp, +# rre_more = F, +# biocircos_gecco = gecco_data, +# computed=computed +# ) + + }) + + observeEvent(dynamicInput(), { + req(vals$data_upload_count>1) + whereami::cat_where(whereami::whereami()) + inters <- vals$inters + if (vals$deep_data_input == TRUE){ + # Get vector of max values from chosen columns from deepbgc data + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + deep_data_chromo <- vals$deep_data %>% + mutate(score = apply(vals$deep_data %>% + select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + vals$deep_data_filtered <- biocircos_deep + new_deep <- lapply(inters$deep, function(x){ + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters + } + if (vals$gecco_data_input == TRUE){ + score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + # Store master prism data in local variable + gecco_data <- vals$gecco_data %>% + mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + + vals$gecco_data_filtered <- gecco_data + new_gecco <- lapply(inters$gecco, function(x){ + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$gecco) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to + } + new_inters$gecco <- new_gecco + vals$inters_filtered <- new_inters + inters <- new_inters + } + if (vals$arts_data_input == TRUE){ + if (input$dup_choice != "All"){ + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + filter(Core == input$dup_choice | Core == "Not_core") + new_arts <- lapply(inters$arts, function(x){ + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } else { + vals$arts_data_filtered <- vals$arts_data + } + } + if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { + vals$inters_filtered <- inters + } + vals$need_filter <- F + }) + + observeEvent(biocircos_listen(), { + req(vals$data_upload_count >=2) + whereami::cat_where(whereami::whereami()) + #BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + inters <- vals$inters_filtered + + rename_data <- vals$rename_data + + # ANTISMASH + if (vals$anti_data_input == TRUE){ + # Store data in local variable + biocircos_anti <- vals$anti_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["Antismash"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + #DEEPBGC + if (vals$deep_data_input == TRUE){ + biocircos_deep <- vals$deep_data_filtered + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_deep$nucl_end) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_deep$product_class) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_deep$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + #RRE-FINDER + if (vals$rre_data_input == TRUE){ + biocircos_rre <- data.frame(vals$rre_data) + biocircos_rre$Start <- as.numeric(biocircos_rre$Start) + biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["RRE"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_rre$Start) + # Stop position of arcs. + if (input$rre_width == TRUE) { + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) + }else{ + arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) + } + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_rre$E.value) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_rre$Type, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + } + + # PRISM + if (vals$prism_data_input == TRUE){ + # Store data in local variable + biocircos_prism <- vals$prism_data + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[["PRISM"]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_prism$Start ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_prism$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels,biocircos_prism$Type ) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_prism$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) } #SEMPI @@ -1590,7 +2119,7 @@ server <- function(input, output, session) { arc_col <- c(arc_col,as.character(arc_colors) ) } - if (input$prism_supp == TRUE){ + if (vals$prism_supp_data_input == TRUE){ # Store data in local variable biocircos_prism_supp <- vals$prism_supp #Make chromosome list for Biocircos plot. Use chr_len as an input @@ -1599,7 +2128,7 @@ server <- function(input, output, session) { arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) # Add arcs begin positions. (Start column) arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) - if (input$prism_supp_width == TRUE) { + if (vals$prism_supp_data_input_width == TRUE) { arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) }else{ arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) @@ -1622,11 +2151,7 @@ server <- function(input, output, session) { if (vals$arts_data_input == TRUE){ - biocircos_arts <- data.frame(vals$arts_data) - if (input$dup_choice != "All"){ - biocircos_arts <- biocircos_arts %>% - filter(Core == input$dup_choice | Core == "Not_core") - } + biocircos_arts <- data.frame(vals$arts_data_filtered) #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes[["ARTS"]] <- vals$chr_len #Add arcs. Quantity of arcs is length of dataframes @@ -1656,16 +2181,7 @@ server <- function(input, output, session) { } if (vals$gecco_data_input == TRUE){ - score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store master prism data in local variable - biocircos_gecco <- vals$gecco_data %>% - mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + biocircos_gecco <- vals$gecco_data_filtered #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes[["GECCO"]] <- vals$chr_len #Add arcs. Quantity of arcs is length of dataframes @@ -1695,14 +2211,6 @@ server <- function(input, output, session) { minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time - get_interception <- function(x,y) { - query <- makeGRangesFromDataFrame(x) - subject <- makeGRangesFromDataFrame(y) - interseption <- findOverlaps(query,subject) - inter_x <- interseption@to - inter_y <- interseption@from - return(list(inter_x, inter_y)) - } chromosomes_start <- c() chromosomes_end <- c() @@ -1713,95 +2221,32 @@ server <- function(input, output, session) { label_1 <- c() label_2 <- c() label_color <- c() - # REVERSE THE ORDER, ACCORDING TO THE QUANTITY OF THE LINKS FOR _INTER COMPUTATION? - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - anti_inter <- biocircos_anti %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store PRISM data start/stop as matrix for further interception calculation - prism_inter <- biocircos_prism %>% - select(Start, Stop) - prism_inter$seqnames <- "chr" - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store SEMPI data start/stop as matrix for further interception calculation - sempi_inter <- biocircos_sempi %>% - select(Start, Stop) - sempi_inter$seqnames <- "chr" - } - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - # Store RREFinder data start/stop as matrix for futher interception calculation - rre_inter <- biocircos_rre%>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - deep_inter <- biocircos_deep %>% - select(nucl_start, nucl_end) - deep_inter$seqnames <- "chr" - } - - - if (input$prism_supp == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - prism_supp_inter <- biocircos_prism_supp %>% - select(Start, Stop) - prism_supp_inter$seqnames <- "chr" - } - - if (vals$arts_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - arts_inter <- biocircos_arts %>% - select(Start, Stop) - arts_inter$seqnames <- "chr" - } - - if (vals$gecco_data_input == TRUE){ - # Store deepbgc data start/stop as matrix for futher interception calculation - gecco_inter <- biocircos_gecco %>% - select(Start, Stop) - gecco_inter$seqnames <- "chr" - } - #CALCULATIONS # ----------------------------------------- add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_a1_t<- get_interception(data1_inter, data2_inter) - inter_s_rre_n <- as.numeric(unlist(inter_a1_t[2])) - inter_rre_s <- as.numeric(unlist(inter_a1_t[1])) + inter_s_rre_n <- data1_inter + inter_rre_s <- data2_inter # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) # Add link end. Just populate second output from the vectors, used above. chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[inter_rre_s] )) + link_pos_start <- as.numeric(c(data2$Start[data2$Cluster %in% inter_rre_s] )) # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[inter_rre_s])) + link_pos_start_1 <- as.numeric(c(data2$Stop[data2$Cluster %in% inter_rre_s])) # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[inter_s_rre_n])) + link_pos_end <- as.numeric(c( data1$Start[data1$Cluster %in% inter_s_rre_n])) # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[inter_s_rre_n])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), data2$Cluster[x], ",", data2$Type[x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), data1$Cluster[x], ",", data1$Type[x])})) + link_pos_end_2 <- as.numeric(c(data1$Stop[data1$Cluster %in% inter_s_rre_n])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) if (!is.null(inter_rre_s)){ if (class == 'P'){ - subset_vec <- data2$Type2[inter_rre_s] == data1$Type2[inter_s_rre_n] - label_color <- as.character(c(sapply(data2$Type2[inter_rre_s], function (x){ + subset_vec <- data2$Type2[data2$Cluster %in% inter_rre_s] == data1$Type2[data1$Cluster %in% inter_s_rre_n] + label_color <- as.character(c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ if (x %in% rename_data$Group_color) { as.character(rename_data$Color[rename_data$Group_color == x]) } @@ -1820,7 +2265,7 @@ server <- function(input, output, session) { } } else if (class == 'H'){ if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ - label_color <- as.character(c(sapply(data1$Type2[inter_s_rre_n], function (x){ + label_color <- as.character(c(sapply(data1$Type2[data1$Cluster %in% inter_s_rre_n], function (x){ if (x %in% rename_data$Group_color) { as.character(rename_data$Color[rename_data$Group_color == x]) } @@ -1829,7 +2274,7 @@ server <- function(input, output, session) { } }))) } else { - label_color <-as.character( c(sapply(data2$Type2[inter_rre_s], function (x){ + label_color <-as.character( c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ if (x %in% rename_data$Group_color) { as.character(rename_data$Color[rename_data$Group_color == x]) } @@ -1840,7 +2285,7 @@ server <- function(input, output, session) { } }else if (class == 'R'){ if (data2_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data1$Type2[inter_s_rre_n], function (x){ + label_color <- as.character(c(sapply(data1$Type2[data1$Cluster %in% inter_s_rre_n], function (x){ if (x %in% rename_data$Group_color) { as.character(rename_data$Color[rename_data$Group_color == x]) } @@ -1849,7 +2294,7 @@ server <- function(input, output, session) { } }))) } else if (data1_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data2$Type2[inter_rre_s], function (x){ + label_color <- as.character(c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ if (x %in% rename_data$Group_color) { as.character(rename_data$Color[rename_data$Group_color == x]) } @@ -1864,37 +2309,16 @@ server <- function(input, output, session) { label_color <-as.character( rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) } } - return(list(inter_rre_s, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) + return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) } - rre_interact <- c() - anti_interact <- c() - prism_interact <- c() - deep_interact <- c() - sempi_interact <- c() - prism_supp_interact <- c() - arts_interact <- c() - gecco_interact <- c() - - df_g <- data.frame(G=NA, A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) if (vals$gecco_data_input == TRUE){ if (vals$anti_data_input == TRUE){ - output <- add_biocircos_data(anti_inter, gecco_inter, biocircos_anti, biocircos_gecco, "Antismash", "GECCO", rename_data, input$label_color_class) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - anti_interact <- c(anti_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("G", "A") - df_g <- merge(df_g, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception + output <- add_biocircos_data(inters$gecco$anti$from, inters$gecco$anti$to, biocircos_anti, biocircos_gecco, "Antismash", "GECCO", rename_data, input$label_color_class) + chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. chromosomes_end <- c(chromosomes_end, output[[4]] ) @@ -1912,12 +2336,7 @@ server <- function(input, output, session) { } # Get interception of antismash with PRISM if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, gecco_inter, biocircos_prism, biocircos_gecco, "PRISM", "GECCO", rename_data, input$label_color_class) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(biocircos_gecco$Cluster[output[[1]]],output[[2]]) - colnames(df_tmp) <- c("G", "P") - df_g <- merge(df_g, df_tmp, all = T) + output <- add_biocircos_data(inters$gecco$prism$from, inters$gecco$prism$to, biocircos_prism, biocircos_gecco, "PRISM", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -1936,12 +2355,7 @@ server <- function(input, output, session) { } # Get interception of antismash with deepbgc if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(deep_inter, gecco_inter, biocircos_deep, biocircos_gecco, "DeepBGC", "GECCO", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]], biocircos_deep$ID[output[[2]]] )) - colnames(df_tmp) <- c("G", "D") - df_g <- merge(df_g, df_tmp, all = T) + output <- add_biocircos_data(inters$gecco$deep$from, inters$gecco$deep$to, biocircos_deep, biocircos_gecco, "DeepBGC", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -1961,12 +2375,7 @@ server <- function(input, output, session) { } # Get interception of antismash with RREFinder if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, gecco_inter, biocircos_rre, biocircos_gecco, "RRE", "GECCO", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[2]] ) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("G", "R") - df_g <- merge(df_g, df_tmp, all = T) + output <- add_biocircos_data(inters$gecco$rre$from, inters$gecco$rre$to, biocircos_rre, biocircos_gecco, "RRE", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -1985,12 +2394,7 @@ server <- function(input, output, session) { } # Get interception of antismash with SEMPI if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, gecco_inter, biocircos_sempi, biocircos_gecco, "SEMPI", "GECCO", rename_data, input$label_color_class) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("G", "S") - df_g <- merge(df_g, df_tmp, all = T) + output <- add_biocircos_data(inters$gecco$sempi$from, inters$gecco$sempi$to, biocircos_sempi, biocircos_gecco, "SEMPI", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2007,13 +2411,8 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, gecco_inter, biocircos_prism_supp, biocircos_gecco, "PRISM-supp", "GECCO", rename_data, input$label_color_class) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("G", "PS") - df_g <- merge(df_g, df_tmp, all = T) + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$gecco$prism_supp$from, inters$gecco$prism_supp$to, biocircos_prism_supp, biocircos_gecco, "PRISM-supp", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2031,12 +2430,7 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, gecco_inter, biocircos_arts, biocircos_gecco, "ARTS", "GECCO", rename_data, input$label_color_class) - gecco_interact <- c(gecco_interact,biocircos_gecco$Cluster[output[[1]]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_gecco$Cluster[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("G", "AR") - df_g <- merge(df_g, df_tmp, all = T) + output <- add_biocircos_data(inters$gecco$arts$from, inters$gecco$arts$to, biocircos_arts, biocircos_gecco, "ARTS", "GECCO", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2063,14 +2457,7 @@ server <- function(input, output, session) { # Get interception of antismash with PRISM if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, anti_inter, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) - vals$inter_p_ref_n <- output[[2]] - vals$inter_a3 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "P") - df_a <- merge(df_a, df_tmp, all = T) + output <- add_biocircos_data(inters$anti$prism$from, inters$anti$prism$to, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2089,14 +2476,7 @@ server <- function(input, output, session) { } # Get interception of antismash with deepbgc if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(deep_inter, anti_inter, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) - vals$inter_d_ref_n <- output[[2]] - vals$inter_a1 <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[2]]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]], biocircos_deep$ID[output[[2]]] )) - colnames(df_tmp) <- c("A", "D") - df_a <- merge(df_a, df_tmp, all = T) + output <- add_biocircos_data(inters$anti$deep$from, inters$anti$deep$to, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2116,14 +2496,7 @@ server <- function(input, output, session) { } # Get interception of antismash with RREFinder if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, anti_inter, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) - vals$inter_rre_ref_n <- output[[2]] - vals$inter_a2 <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - anti_interact <- c(anti_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "R") - df_a <- merge(df_a, df_tmp, all = T) + output <- add_biocircos_data(inters$anti$rre$from, inters$anti$rre$to, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2142,14 +2515,7 @@ server <- function(input, output, session) { } # Get interception of antismash with SEMPI if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, anti_inter, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) - vals$inter_s_ref_n <- output[[2]] - vals$inter_a4 <- output[[1]] - anti_interact <- c(anti_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "S") - df_a <- merge(df_a, df_tmp, all = T) + output <- add_biocircos_data(inters$anti$sempi$from, inters$anti$sempi$to, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2166,13 +2532,8 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, anti_inter, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "PS") - df_a <- merge(df_a, df_tmp, all = T) + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$anti$prism_supp$from, inters$anti$prism_supp$to, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2190,12 +2551,7 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, anti_inter, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) - anti_interact <- c(anti_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("A", "AR") - df_a <- merge(df_a, df_tmp, all = T) + output <- add_biocircos_data(inters$anti$arts$from, inters$anti$arts$to, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2221,14 +2577,7 @@ server <- function(input, output, session) { # Get interception of DeepBGC with rrefinder if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, deep_inter, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) - vals$inter_rre_d_n <- output[[2]] - vals$inter_d_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "R") - df_d <- merge(df_d, df_tmp, all = T) + output <- add_biocircos_data(inters$deep$rre$from, inters$deep$rre$to, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2248,14 +2597,7 @@ server <- function(input, output, session) { } # Get interception of DeepBGC with PRISM if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(prism_inter, deep_inter, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) - vals$inter_p_d_n <- output[[2]] - vals$inter_d_p <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]]) - prism_interact <- c(prism_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "P") - df_d <- merge(df_d, df_tmp, all = T) + output <- add_biocircos_data(inters$deep$prism$from, inters$deep$prism$to, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2275,14 +2617,7 @@ server <- function(input, output, session) { } # Get interception of DeepBGC with SEMPI if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, deep_inter, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) - vals$inter_s_d_n <- output[[2]] - vals$inter_d_s <- output[[1]] - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "S") - df_d <- merge(df_d, df_tmp, all = T) + output <- add_biocircos_data(inters$deep$sempi$from, inters$deep$sempi$to, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2299,13 +2634,8 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, deep_inter, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "PS") - df_d <- merge(df_d, df_tmp, all = T) + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$deep$prism_supp$from, inters$deep$prism_supp$to, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2323,12 +2653,7 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, deep_inter, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) - deep_interact <- c(deep_interact,biocircos_deep$ID[output[[1]]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(biocircos_deep$ID[output[[1]]],output[[2]])) - colnames(df_tmp) <- c("D", "AR") - df_d <- merge(df_d, df_tmp, all = T) + output <- add_biocircos_data(inters$deep$arts$from, inters$deep$arts$to, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2356,14 +2681,7 @@ server <- function(input, output, session) { # Get interception of PRISM with rrefinder if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(rre_inter, prism_inter, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) - vals$inter_rre_p_n <- output[[2]] - vals$inter_p_rre <- output[[1]] - rre_interact <- c(rre_interact,output[[2]] ) - prism_interact <- c(prism_interact,output[[1]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "R") - df_p <- merge(df_p, df_tmp, all = T) + output <- add_biocircos_data(inters$prism$rre$from, inters$prism$rre$to, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2382,14 +2700,7 @@ server <- function(input, output, session) { } # Get interception of PRISM with SEMPI if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, prism_inter, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "S") - df_p <- merge(df_p, df_tmp, all = T) + output <- add_biocircos_data(inters$prism$sempi$from, inters$prism$sempi$to, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2406,15 +2717,8 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, prism_inter, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "PS") - df_p <- merge(df_p, df_tmp, all = T) + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$prism$prism_supp$from, inters$prism$prism_supp$to, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2432,14 +2736,7 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_inter, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) - vals$inter_s_p_n <- output[[2]] - vals$inter_p_s <- output[[1]] - prism_interact <- c(prism_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("P", "AR") - df_p <- merge(df_p, df_tmp, all = T) + output <- add_biocircos_data(inters$prism$arts$from, inters$prism$arts$to, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2457,68 +2754,15 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } # Write csvs with locally used variables - write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) - } - - # RRE-FINDER - if (vals$rre_data_input == TRUE){ - - # Get interception of RRE with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(sempi_inter, rre_inter, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) - vals$inter_s_rre_n <- output[[2]] - vals$inter_rre_s <- output[[1]] - rre_interact <- c(rre_interact,output[[1]] ) - sempi_interact <- c(sempi_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "S") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, rre_inter, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "PS") - df_r <- merge(df_r, df_tmp, all = T) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, rre_inter, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) - rre_interact <- c(rre_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("R", "AR") - df_r <- merge(df_r, df_tmp, all = T) + write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) + } + + # RRE-FINDER + if (vals$rre_data_input == TRUE){ + + # Get interception of RRE with SEMPI + if (vals$sempi_data_input == TRUE){ + output <- add_biocircos_data(inters$rre$sempi$from, inters$rre$sempi$to, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2535,19 +2779,8 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - # Write csvs with locally used variables - write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - if (input$prism_supp == TRUE){ - output <- add_biocircos_data(prism_supp_inter, sempi_inter,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - prism_supp_interact <- c(prism_supp_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "PS") - df_s <- merge(df_s, df_tmp, all = T) + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$rre$prism_supp$from, inters$rre$prism_supp$to, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2565,12 +2798,7 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, sempi_inter,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) - sempi_interact <- c(sempi_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("S", "AR") - df_s <- merge(df_s, df_tmp, all = T) + output <- add_biocircos_data(inters$rre$arts$from, inters$rre$arts$to, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2588,17 +2816,13 @@ server <- function(input, output, session) { label_color = c(label_color, output[[11]] ) } # Write csvs with locally used variables - write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) + write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) } - if (input$prism_supp == TRUE){ - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(arts_inter, prism_supp_inter,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) - prism_supp_interact <- c(prism_supp_interact,output[[1]] ) - arts_interact <- c(arts_interact,output[[2]] ) - df_tmp <- data.frame(cbind(output[[1]],output[[2]])) - colnames(df_tmp) <- c("PS", "AR") - df_ps <- merge(df_ps, df_tmp, all = T) + #SEMPI + if (vals$sempi_data_input == TRUE){ + if (vals$prism_supp_data_input == TRUE){ + output <- add_biocircos_data(inters$sempi$prism_supp$from, inters$sempi$prism_supp$to,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2615,369 +2839,109 @@ server <- function(input, output, session) { label_2 <- c(label_2, output[[10]]) label_color = c(label_color, output[[11]] ) } - #Write csvs with locally used variables - write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) - } - - if (vals$arts_data_input == TRUE){ - #Write csvs with locally used variables - write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) - } - - - - - # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - vals$df_a <- df_a - vals$df_d <- df_d - vals$df_p <- df_p - vals$df_r <- df_r - vals$df_s <- df_s - vals$df_ps <- df_ps - vals$df_g <- df_g - vals$rre_interact <- rre_interact - vals$anti_interact <- anti_interact - vals$prism_interact <- prism_interact - vals$deep_interact <- deep_interact - vals$sempi_interact <- sempi_interact - vals$prism_supp_interact <- prism_supp_interact - vals$arts_interact <- arts_interact - vals$gecco_interact <- gecco_interact - # Add links and labels to the track list for subsequent visualization - if (input$label_color == T){ - group_colors <- count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) - } - } else{ - tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) - } - - vals$tracklist <- tracklist - vals$Biocircos_chromosomes <- Biocircos_chromosomes - }) - - observeEvent(input$hide_uploads, { - if (input$hide_uploads == T){ - hideElement(selector = "#anti_input_options") - hideElement(selector = "#anti_data") - hideElement(selector = "#prism_input_options") - hideElement(selector = "#anti_header_upload") - hideElement(selector = "#prism_header_upload") - hideElement(selector = "#prism_data") - hideElement(selector = "#sempi_header_upload") - hideElement(selector = "#sempi_data") - hideElement(selector = "#deep_header_upload") - hideElement(selector = "#deep_data") - hideElement(selector = "#gecco_header_upload") - hideElement(selector = "#gecco_data") - hideElement(selector = "#rre_header_upload") - hideElement(selector = "#rre_data") - hideElement(selector = "#chr_len") - hideElement(selector = "#arts_header_upload") - hideElement(selector = "#known_data") - hideElement(selector = "#dup_data") - hideElement(selector = "#anti_sco") - hideElement(selector = "#prism_sco") - hideElement(selector = "#arts_sco") - hideElement(selector = "#rre_sco") - hideElement(selector = "#sempi_sco") - hideElement(selector = "#deep_sco") - hideElement(selector = "#gecco_sco") - }else { - showElement(selector = "#anti_input_options") - showElement(selector = "#anti_data") - showElement(selector = "#prism_input_options") - showElement(selector = "#anti_header_upload") - showElement(selector = "#prism_header_upload") - showElement(selector = "#prism_data") - showElement(selector = "#sempi_header_upload") - showElement(selector = "#sempi_data") - showElement(selector = "#deep_header_upload") - showElement(selector = "#deep_data") - showElement(selector = "#gecco_header_upload") - showElement(selector = "#gecco_data") - showElement(selector = "#rre_header_upload") - showElement(selector = "#rre_data") - showElement(selector = "#chr_len") - showElement(selector = "#arts_header_upload") - showElement(selector = "#known_data") - showElement(selector = "#dup_data") - showElement(selector = "#anti_sco") - showElement(selector = "#prism_sco") - showElement(selector = "#arts_sco") - showElement(selector = "#rre_sco") - showElement(selector = "#sempi_sco") - showElement(selector = "#deep_sco") - showElement(selector = "#gecco_sco") - } - }) - - observeEvent(input$hide_anti, { - if (input$hide_anti== T){ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - }else{ - if (vals$anti_data_input == T){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") - } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - } - if (vals$prism_data_input == T){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - showElement(selector = "#prism_supp") - } - } else { - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - } - if (vals$sempi_data_input == T){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") - } else { - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } else{ - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - } - } - }) - - observeEvent(input$hide_genes_on_chr, { - if (input$hide_genes_on_chr == T){ - hideElement(selector = "#ref") - } else { - if (vals$data_upload_count > 0){ - showElement(selector = "#ref") - } else { - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#ref") - } - } - }) - - observeEvent(input$hide_summarize, { - if (input$hide_summarize == T){ - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } else { - if (vals$data_upload_count > 1){ - showElement(selector = "#group_by") - showElement(selector = "#count_all") - } else { - hideElement(selector = "#summarize") - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } - - } - }) - - observeEvent(input$hide_viz, { - if (input$hide_viz == T){ - hideElement(selector = "#rename_data") - hideElement(selector = "#rename") - hideElement(selector = "#reset_name") - hideElement(selector = "#rre_width") - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - hideElement(selector = "#ref_col_biocircos") - hideElement(selector = "#arts_header") - } else{ - showElement(selector = "#rename_data") - showElement(selector = "#rename") - showElement(selector = "#reset_name") - if (vals$rre_data_input == T){ - showElement(selector = "#rre_width") - } else { - hideElement(selector = "#rre_width") - } - if (vals$prism_json == T){ - showElement(selector = "#prism_supp_width") - } - else { - hideElement(selector = "#prism_supp_width") - } - if (vals$data_upload_count > 1){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") - } else { - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - } - if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") - } else { - hideElement(selector = "#ref_col_biocircos") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - } else { - hideElement(selector = "#arts_header") - } - - } - }) - - observeEvent(input$hide_data_comparison, { - if ((input$hide_data_comparison == T)){ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - } else if (vals$deep_data_input == T) { - showElement(selector = "#ref_comparison") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - } else { - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(inters$sempi$arts$from, inters$sempi$arts$to,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + # Write csvs with locally used variables + write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) } - }) - - observeEvent(input$hide_data_filter, { - if ((input$hide_data_filter == T)){ - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - } else if (vals$deep_data_input == T){ - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - } else { - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") + + if (vals$prism_supp_data_input == TRUE){ + if (vals$arts_data_input == TRUE){ + output <- add_biocircos_data(inters$prism_supp$arts$from, inters$prism_supp$arts$to,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + #Write csvs with locally used variables + write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) } - }) - - observeEvent(input$hide_data_comparison_gecco, { - if ((input$hide_data_comparison_gecco == T)){ - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") - } else if (vals$gecco_data_input == T) { - showElement(selector = "#ref_comparison_gecco") - showElement(selector = "#score_type_gecco") - showElement(selector = "#plot_step_gecco") - showElement(selector = "#plot_start_gecco") - } else { - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") + + if (vals$arts_data_input == TRUE){ + #Write csvs with locally used variables + write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) } - }) - - observeEvent(input$hide_data_filter_gecco, { - if ((input$hide_data_filter_gecco == T)){ - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") - } else if (vals$gecco_data_input == T){ - showElement(selector = "#score_average_gecco") - showElement(selector = "#score_average_gecco") - showElement(selector = "#domains_filter_gecco") - showElement(selector = "#prot_filter_gecco") - } else { - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") + + + + + # Combine labels with mapply to one list + link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) + + # Add links and labels to the track list for subsequent visualization + if (input$label_color == T){ + group_colors <- count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])){ + subset <- unname( which(label_color %in% group_colors$x[i])) + tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) + } + } else{ + tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) } + + vals$tracklist <- tracklist + vals$Biocircos_chromosomes <- Biocircos_chromosomes }) - - #Render output plots # Render barplot output$deep_barplot <- renderPlot({ + whereami::cat_where(whereami::whereami()) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") fullnes_of_annotation <- drop_na(fullnes_of_annotation) - # Vectors of columns of score values in DeepBGC data for later subset - score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") - score_bgc <- c("deepbgc_score") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Subset dataframe with scores' vectors. Get max value vectors - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - + deep_inter_1 <- vals$deep_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type == "Activity") { - score_type <- score_activity + score <- "score_a" } else if (input$score_type == "DeepBGC") { - score_type <- score_bgc + score <- "score_d" } else if (input$score_type == "Cluster_Type") { - score_type <- score_cluster_type + score <- "score_c" } - - # Get max value vector for chosen score - chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) - + deep_inter_1$score <- deep_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - # Store DeepBGC dataframe in variable - deep_inter <- vals$deep_data - #Store max value in separate column - deep_inter$score <- chosen_score_vector - # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix - deep_inter <- deep_inter %>% - mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(num_domains>=input$domains_filter, score>=dataframe_1/100, num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter, - score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100) %>% - select(Start = nucl_start, Stop = nucl_end) + + deep_inter <- deep_inter_1 %>% + filter(score>=dataframe_1/100) %>% + select(Start, Stop) if (length(deep_inter$Start) > 0) { deep_inter$seqnames <- "chr" } @@ -2993,10 +2957,10 @@ server <- function(input, output, session) { select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'S'){ - anti_inter <- vals$sempi_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } + anti_inter <- vals$sempi_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } @@ -3057,23 +3021,7 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$deep_rate <- renderPlotly({ - - # Store scores columns in vectors for DeepBGC data - score_activity <- c("antibacterial", "cytotoxic","inhibitor","antifungal") - score_bgc <- c("deepbgc_score") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Logic of what plot to draw on x axis - if (input$score_type == "Activity") { - score_type <- score_activity - } else if (input$score_type == "DeepBGC") { - score_type <- score_bgc - } else if (input$score_type == "Cluster_Type") { - score_type <- score_cluster_type - } - - # Store max values for chosen score in a vector - chosen_score_vector <- apply(vals$deep_data %>% select(score_type),1, function(x) max(x)) + whereami::cat_where(whereami::whereami()) # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data @@ -3127,41 +3075,27 @@ server <- function(input, output, session) { # Render barplot output$gecco_barplot <- renderPlot({ - + whereami::cat_where(whereami::whereami()) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") fullnes_of_annotation <- drop_na(fullnes_of_annotation) - # Vectors of columns of score values in DeepBGC data for later subset - score_avg_p <- c("average_p") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Subset dataframe with scores' vectors. Get max value vectors - score_a <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - + gecco_inter_1 <- vals$gecco_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type_gecco == "avg_p") { - score_type <- score_avg_p - } else if (input$score_type_gecco == "Cluster_Type") { - score_type <- score_cluster_type - } - - # Get max value vector for chosen score - chosen_score_vector <- apply(vals$gecco_data %>% select(score_type),1, function(x) max(x)) + score <- "score_a" + } else if (input$score_type_gecco == "Cluster_Type") { + score <- "score_c" + } + gecco_inter_1$score <- gecco_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - # Store DeepBGC dataframe in variable - gecco_inter <- vals$gecco_data - #Store max value in separate column - gecco_inter$score <- chosen_score_vector + # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix - gecco_inter <- gecco_inter %>% - mutate(score_a = score_a, score_c = score_c) %>% - filter(num_domains>=input$domains_filter_gecco, score>=dataframe_1/100, num_prot>=input$prot_filter_gecco, - average_p >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 ) %>% + gecco_inter <- gecco_inter_1 %>% + filter(score>=dataframe_1/100) %>% select(Start, Stop) if (length(gecco_inter$Start) > 0) { gecco_inter$seqnames <- "chr" @@ -3241,25 +3175,7 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$gecco_rate <- renderPlotly({ - - # Vectors of columns of score values in DeepBGC data for later subset - score_avg_p <- c("average_p") - score_cluster_type <- c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene") - - # Subset dataframe with scores' vectors. Get max value vectors - score_a <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - - # Decide which score to use for basic thresholds on x axis - if (input$score_type_gecco == "avg_p") { - score_type <- score_avg_p - } else if (input$score_type_gecco == "Cluster_Type") { - score_type <- score_cluster_type - } - - # Get max value vector for chosen score - chosen_score_vector <- apply(vals$gecco_data %>% select(score_type),1, function(x) max(x)) - + whereami::cat_where(whereami::whereami()) # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data # For more information please see previous renderPlot @@ -3314,12 +3230,20 @@ server <- function(input, output, session) { # For antismash and PRISM data showed only ID, Start, Stop, Type output$deep_reference <- renderPlotly({ + whereami::cat_where(whereami::whereami()) + # req(vals$data_upload_count >=1) + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft <- c("Antismash","SEMPI","PRISM","PRISM_SUPPORT","ARTS","DeepBGC","GECCO","RRE-Finder" ) + abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") + + inters <- vals$inters_filtered + # GENERATE DATA if (vals$anti_data_input == TRUE){ # Store antismash data in local variable, with column renaming - anti_data_chromo <- vals$anti_data %>% - mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2, Cluster) + anti_data <- vals$anti_data # Extract only Start and Stop from antismash data into matrix anti_inter <- vals$anti_data %>% select(Start, Stop) @@ -3327,31 +3251,8 @@ server <- function(input, output, session) { } if (vals$deep_data_input == TRUE){ - # Store deepbgc max score in a vector for chosen columns - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store DeepBGC data in local variable. - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - - # Add Cluster_type column, which store only the max name of the cluster type - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - - # Clean data, using, thesholds - deep_data_chromo <- deep_data_chromo%>% - # Change to "under_threshold" Cluster_type column values, if they are under chosen theshold (no cluster type will be visualised) - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) %>% - # Add new columns and change product_class to Cluster_type - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - # Store cleaned DeepBGC data into other variable to subset only Start and Stop - deep_data_chromo$Type2 <- deep_data_chromo$product_class - vals$deep_data_chromo <- deep_data_chromo - deep_inter <- deep_data_chromo - deep_inter <- deep_inter %>% + deep_data <- vals$deep_data_filtered + deep_inter <- deep_data %>% select(nucl_start, nucl_end) deep_inter$seqnames <- "chr" @@ -3388,23 +3289,19 @@ server <- function(input, output, session) { select(Start,Stop) sempi_inter$seqnames <- "chr" } - if (input$prism_supp == T){ - prism_supp <- vals$prism_supp + if (vals$prism_supp_data_input == T){ + prism_supp_data <- vals$prism_supp prism_supp_inter <- prism_supp %>% select(Start,Stop) prism_supp_inter$seqnames <- "chr" - if (input$prism_supp_width == TRUE) { + if (vals$prism_supp_data_input_width == TRUE) { Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 } else{ Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) } } if (vals$arts_data_input == T){ - arts_data <- vals$arts_data - if (input$dup_choice != "All"){ - arts_data <- arts_data %>% - filter(Core == input$dup_choice | Core == "Not_core") - } + arts_data <- vals$arts_data_filtered arts_inter <- arts_data %>% select(Start,Stop) arts_inter$seqnames <- "chr" @@ -3415,233 +3312,28 @@ server <- function(input, output, session) { } } if (vals$gecco_data_input == TRUE){ - score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store master prism data in local variable - gecco_data <- vals$gecco_data %>% - mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + gecco_data <- vals$gecco_data_filtered # Start/Stop columns from prism data as matrix gecco_inter <- gecco_data %>% select(Start,Stop) gecco_inter$seqnames <- "chr" } - - get_prism_inter <- function(x,prism_inter,prism_data, letter ){ - # Get an interception of prism and smth - query <- makeGRangesFromDataFrame(prism_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- prism_data[inter,] - # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover - seg_df_3 <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric(data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("PRISM", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df_3) - } - get_sempi_inter <- function(x,sempi_inter,sempi_data, letter ){ - # Get an interception of sempi and smth - query <- makeGRangesFromDataFrame(sempi_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- sempi_data[inter,] - # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric(data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("SEMPI", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) - } - get_anti_inter <- function(x,anti_inter,anti_data_chromo, letter ){ - # Get an interception of deepBGC and antismash data - query <- makeGRangesFromDataFrame(anti_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- anti_data_chromo[inter,] - seg_df_1 <- data.frame(x=as.numeric( data$Start), - y=rep(letter, length(data$ID)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$ID)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("Antismash", length(data$ID)), - ID = data$ID, - Start = data$Start, - Stop = data$Stop) - return(seg_df_1) - } - get_deep_inter <- function(x,deep_inter,deep_data_chromo, letter ){ - # Get an interception of deepBGC and antismash data - query <- makeGRangesFromDataFrame(deep_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- deep_data_chromo[inter,] - # Create a dataframe with antismash data, interce[ted with deepbgc with all the additional info to visualize on hover - seg_df_1 <- data.frame(x=as.numeric( data$nucl_start), - y=rep(letter, length(data$ID)), - xend=as.numeric( data$nucl_end), - yend=rep(letter, length(data$ID)), - Type = as.factor(data$product_class), - Software = rep("DeepBGC", length(data$ID)), - ID = data$ID, - Start = data$nucl_start, - Stop = data$nucl_end, - num_domains = data$num_domains, - deepbgc_score = data$deepbgc_score, - activity = data$product_activity) - return(seg_df_1) - } - get_RRE_inter <- function(x,rre_inter,rre_data, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(rre_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- rre_data[inter,] - if (input$rre_width == TRUE) { - Stop_vals_RRE_in <- as.numeric(data$Stop)+50000 - } else{ - Stop_vals_RRE_in <- as.numeric(data$Stop) - } - if (vals$rre_more == T){ - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Locus_tag)), - xend=Stop_vals_RRE_in, - yend=rep(letter, length(data$Locus_tag)), - Type = rep("ripp", length(data$Locus_tag)), - Score = data$Score, - Software = rep("RREFinder", length(data$Locus_tag)), - ID = data$Locus_tag, - Start = data$Start, - Stop = data$Stop, - E_value = data$E.value, - P_value = data$P.value, - RRE_start = data$RRE.start, - RRE_stop = data$RRE.end, - Probability = data$Probability) - } else { - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Locus_tag)), - xend=Stop_vals_RRE_in, - yend=rep(letter, length(data$Locus_tag)), - Type = rep("ripp", length(data$Locus_tag)), - Software = rep("RREFinder", length(data$Locus_tag)), - ID = data$Locus_tag, - Start = data$Start, - Stop = data$Stop, - E_value = data$E.value) - } - - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover + lett <- rev(LETTERS)[1:9] + simple_seg <- function(df, letter, software, soft_name ,soft){ + data <- df[df$Cluster %in% inters[[soft]][[soft_name]]$from, ] - return(seg_df_2) - } - get_prism_supp_inter <- function(x,prism_supp_inter,prism_supp, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(prism_supp_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- prism_supp[inter,] - if (input$prism_supp_width == TRUE) { - Stop_vals_prism_supp_in <- as.numeric(data$Stop)+50000 - } else{ - Stop_vals_prism_supp_in <- as.numeric(data$Stop) - } - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Cluster)), - xend=Stop_vals_prism_supp_in, - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Score = data$Score, - Software = rep("PRISM", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop, - Name = data$Name, - Full_name = data$Full_name - ) - return(seg_df_2) - } - get_arts_inter <- function(x,arts_inter, arts_data, letter ){ - # Get an interception of RREFinder and antismash - query <- makeGRangesFromDataFrame(arts_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- arts_data[inter,] - if (input$arts_width == TRUE) { - Stop_vals_arts_in <- as.numeric(data$Stop)+20000 - } else{ - Stop_vals_arts_in <- as.numeric(data$Stop) - } - # Create a dataframe with antismash data, intercepted with RREFinder, with all the additional info to visualize on hover - seg_df_2 <- data.frame(x=data$Start, - y=rep(letter, length(data$Cluster)), - xend=Stop_vals_arts_in, - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Hit = data$Hit, - Software = rep("ARTS", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop, - Core = data$Core, - Count = data$Count, - E_value = data$Evalue, - Bitscore = data$Bitscore, - Model = data$Model - ) - return(seg_df_2) - } - get_gecco_inter <- function(x,gecco_inter,gecco_data, letter ){ - # Get an interception of sempi and smth - query <- makeGRangesFromDataFrame(gecco_inter) - subject <- makeGRangesFromDataFrame(x) - interseption <- findOverlaps(query,subject) - inter <- interseption@from - data <- gecco_data[inter,] - # Create a dataframe with antismash data, intercepted with PRISM, with all the additional info to visualize on hover - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric(data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep("GECCO", length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop, - Num_proteins = data$num_prot, - Num_domains = data$num_domains, - Average_p = data$average_p, - Max_p = data$max_p) + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) return(seg_df) - } + } geom_anti <- function(data){ geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, @@ -3689,7 +3381,116 @@ server <- function(input, output, session) { tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", "Num_domains", "Num_proteins", "Average_p", "Max_p") + + + + add_arts <- function(seg_df, soft, df){ + if (input$arts_width == TRUE) { + Stop_vals_arts_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$arts$from, ]$Stop)+20000 + } else{ + Stop_vals_arts_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$arts$from, ]$Stop) + } + seg_df$Hit = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Hit + seg_df$xend = Stop_vals_arts_in + seg_df$Core = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Core + seg_df$Count = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Count + seg_df$E_value = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Evalue + seg_df$Bitscore = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Bitscore + seg_df$Model = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Model + return(seg_df) + } + add_prism_supp <- function(seg_df, soft, df){ + if (vals$prism_supp_data_input_width == TRUE) { + Stop_vals_prism_supp_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Stop)+50000 + } else{ + Stop_vals_prism_supp_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Stop) + } + seg_df$xend <- Stop_vals_prism_supp_in + seg_df$Score = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Score + seg_df$Name = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Name + seg_df$Full_name = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Full_name + return(seg_df) + } + add_deep <- function(seg_df, soft, df){ + seg_df$num_domains = df[df$Cluster %in% inters[[soft]]$deep$from, ]$num_domains + seg_df$deepbgc_score = df[df$Cluster %in% inters[[soft]]$deep$from, ]$deepbgc_score + seg_df$activity = df[df$Cluster %in% inters[[soft]]$deep$from, ]$product_activity + return(seg_df) + } + add_rre <- function(seg_df, soft, df){ + if (input$rre_width == TRUE) { + Stop_vals_RRE_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop)+50000 + } else{ + Stop_vals_RRE_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop) + } + if (vals$rre_more == T){ + seg_df$xend=Stop_vals_RRE_in + seg_df$Score = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Score + seg_df$Stop = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop + seg_df$E_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$E.value + seg_df$P_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$P.value + seg_df$RRE_start = df[df$Cluster %in% inters[[soft]]$rre$from, ]$RRE.start + seg_df$RRE_stop = df[df$Cluster %in% inters[[soft]]$rre$from, ]$RRE.end + seg_df$Probability = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Probability + } else { + seg_df$xend=Stop_vals_RRE_in + seg_df$E_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$E.value + } + + return(seg_df) + } + add_gecco <- function(seg_df, soft, df){ + seg_df$Num_proteins = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$num_prot + seg_df$Num_domains = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$num_domains + seg_df$Average_p = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$average_p + seg_df$Max_p = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$max_p + return(seg_df) + } + + add_more_annot <- function(seg_df, plot, soft_names, index){ + if (dim(seg_df)[1] > 0){ + if (soft_names[index] == "anti"){ + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } + else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } + else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } + else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } + else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } + else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df) + } else if (soft_names[index] == "gecco") { + plot <- plot+geom_gecco(seg_df) + } + return(plot) + } else{ + return(plot) + } + } + define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df ){ + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ + seg_df <- add_prism_supp(seg_df, soft_major, df) + } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ + seg_df <- add_arts(seg_df, soft_major, df) + } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ + seg_df <- add_deep(seg_df, soft_major, df) + } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ + seg_df <- add_gecco(seg_df, soft_major, df) + } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ + seg_df <- add_rre(seg_df, soft_major, df) + } + return(seg_df) + } # MAKE COMPUTATIONS if (vals$gecco_data_input == TRUE){ @@ -3711,56 +3512,40 @@ server <- function(input, output, session) { if (input$ref == "GECCO") { plot <- ggplot(vals$biocircos_gecco, aes(x = vals$chr_len, y = Chr)) + geom_gecco(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(gecco_inter,anti_inter,anti_data_chromo, "S" ) - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(gecco_inter,deep_inter,deep_data_chromo, "Y" ) - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(gecco_inter, rre_inter, rre_data, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(gecco_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(gecco_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(gecco_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) + soft_major <- "gecco" + soft_let <- "G" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(gecco_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) + index = index +1 + } - } + plot <- plot + - scale_y_discrete(labels = c("Z" = "GECCO","S" = "A_vs_G","Y" = "D_vs_G", "X" = "RRE_vs_G", "W" = "P_vs_G", "V" = "S_vs_G", - "U" = "P-supp_vs_G", "T" = "AR_vs_G", "S" = "A_vs_G")) + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + theme(axis.text.y = element_text(size = 10)) + ylab("")+ - xlab("Chromosome length")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + ggtitle("Annotations' comparison to the reference") to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) + } vals$seg_df_ref_g <- data.frame(x=as.numeric(vals$biocircos_gecco$Start), @@ -3779,156 +3564,121 @@ server <- function(input, output, session) { Max_p = vals$biocircos_gecco$max_p) } if (vals$anti_data_input == TRUE){ - seg_ref_a <- data.frame(x=as.numeric(anti_data_chromo$Start), - y=rep("Z", length(anti_data_chromo$Cluster)), - xend=as.numeric(anti_data_chromo$Stop), - yend=rep("Z", length(anti_data_chromo$Cluster)), - Type = as.factor(anti_data_chromo$Type), - Type2 = as.factor(anti_data_chromo$Type2), - Software = rep("Antis,ash", length(anti_data_chromo$Cluster)), - ID = anti_data_chromo$Cluster, - Start = anti_data_chromo$Start, - Stop = anti_data_chromo$Stop) + seg_ref_a <- data.frame(x=as.numeric(anti_data$Start), + y=rep("Z", length(anti_data$Cluster)), + xend=as.numeric(anti_data$Stop), + yend=rep("Z", length(anti_data$Cluster)), + Type = as.factor(anti_data$Type), + Type2 = as.factor(anti_data$Type2), + Software = rep("Antismash", length(anti_data$Cluster)), + ID = anti_data$Cluster, + Start = anti_data$Start, + Stop = anti_data$Stop) seg_ref <- seg_ref_a if (input$ref == "Antismash") { - plot <- ggplot(anti_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(anti_inter,deep_inter,deep_data_chromo, "Y" ) - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(anti_inter, rre_inter, rre_data, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(anti_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(anti_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(anti_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(anti_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(anti_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + plot <- ggplot(anti_data, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) + soft_major <- "anti" + soft_let <- "A" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } + plot <- plot + - scale_y_discrete(labels = c("Z" = "Antismash","Y" = "D_vs_A", "X" = "RRE_vs_A", "W" = "P_vs_A", "V" = "S_vs_A", - "U" = "P-supp_vs_A", "T" = "AR_vs_A", "S" = "G_vs_A")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip =tooltip) + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } vals$seg_df_ref_a <- seg_ref_a } if (vals$deep_data_input == TRUE){ # Create a dataframe with all deepbgc data + the additional info to visualize on hover - seg_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), - y=rep("Z", length(deep_data_chromo$ID)), - xend=as.numeric( deep_data_chromo$nucl_end), - yend=rep("Z", length(deep_data_chromo$ID)), - Type = as.factor(deep_data_chromo$product_class), - Software = rep("DeepBGC", length(deep_data_chromo$ID)), - ID = deep_data_chromo$ID, - Start = deep_data_chromo$nucl_start, - Stop = deep_data_chromo$nucl_end, - num_domains = deep_data_chromo$num_domains, - deepbgc_score = deep_data_chromo$deepbgc_score, - activity = deep_data_chromo$product_activity) + seg_ref_d <- data.frame(x=as.numeric( deep_data$nucl_start), + y=rep("Z", length(deep_data$ID)), + xend=as.numeric( deep_data$nucl_end), + yend=rep("Z", length(deep_data$ID)), + Type = as.factor(deep_data$product_class), + Software = rep("DeepBGC", length(deep_data$ID)), + ID = deep_data$ID, + Start = deep_data$Start, + Stop = deep_data$Stop, + num_domains = deep_data$num_domains, + deepbgc_score = deep_data$deepbgc_score, + activity = deep_data$product_activity) seg_ref <- seg_ref_d if (input$ref == "DeepBGC") { plot <- ggplot(deep_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_deep(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(deep_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(deep_inter, rre_inter, rre_data, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df<- get_prism_inter(deep_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df<- get_sempi_inter(deep_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df<- get_prism_supp_inter(deep_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(deep_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(deep_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "deep" + soft_let <- "D" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "DeepBGC","X" = "A_vs_D", "Y" = "RRE_vs_D", "W" = "P_vs_D", "V" = "S_vs_D", - "U" = "P-supp_vs_D", "T" = "AR_vs_D", "S" = "G_vs_D")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } - vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data_chromo$nucl_start), - y=rep("X", length(deep_data_chromo$ID)), - xend=as.numeric( deep_data_chromo$nucl_end), - yend=rep("X", length(deep_data_chromo$ID)), - Type = as.factor(deep_data_chromo$product_class), - Software = rep("DeepBGC", length(deep_data_chromo$ID)), - ID = deep_data_chromo$ID, - Start = deep_data_chromo$nucl_start, - Stop = deep_data_chromo$nucl_end, - num_domains = deep_data_chromo$num_domains, - deepbgc_score = deep_data_chromo$deepbgc_score, - activity = deep_data_chromo$product_activity) + vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data$nucl_start), + y=rep("X", length(deep_data$ID)), + xend=as.numeric( deep_data$nucl_end), + yend=rep("X", length(deep_data$ID)), + Type = as.factor(deep_data$product_class), + Software = rep("DeepBGC", length(deep_data$ID)), + ID = deep_data$ID, + Start = deep_data$Start, + Stop = deep_data$Stop, + num_domains = deep_data$num_domains, + deepbgc_score = deep_data$deepbgc_score, + activity = deep_data$product_activity) } if (vals$rre_data_input == TRUE){ @@ -3963,58 +3713,39 @@ server <- function(input, output, session) { seg_ref <- seg_ref_r if (input$ref == "RRE-Finder") { plot <- ggplot(rre_data, aes(x = vals$chr_len, y = Chr)) + geom_rre(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(rre_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(rre_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(rre_inter, prism_inter, prism_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(rre_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(rre_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(rre_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(rre_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "rre" + soft_let <- "RRE" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "RRE","X" = "A_vs_RRE", "Y" = "D_vs_RRE", "W" = "P_vs_RRE", "V" = "S_vs_RRE", - "U" = "P-supp_vs_RRE", "T" = "AR_vs_RRE", "S" = "G_vs_RRE")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip - ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } if (vals$rre_more == T){ @@ -4062,59 +3793,39 @@ server <- function(input, output, session) { if (input$ref == "PRISM") { plot <- ggplot(prism_data, aes(x = vals$chr_len, y = Chr)) + geom_prism(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(prism_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(prism_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(prism_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot +geom_rre(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(prism_inter, sempi_inter, sempi_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(prism_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(prism_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(prism_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "prism" + soft_let <- "P" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "PRISM","X" = "A_vs_P", "Y" = "D_vs_P", "W" = "RRE_vs_P", "V" = "S_vs_P", - "U" = "P-supp_vs_P", "T" = "AR_vs_P", "S" = "G_vs_P")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip - ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } vals$seg_df_ref_p <- data.frame(x=as.numeric(prism_data$Start), y=rep("W", length(prism_data$Cluster)), @@ -4143,59 +3854,39 @@ server <- function(input, output, session) { if (input$ref == "SEMPI") { plot <- ggplot(sempi_data, aes(x = vals$chr_len, y = Chr)) + geom_sempi(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(sempi_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(sempi_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(sempi_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(sempi_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(sempi_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(sempi_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(sempi_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "sempi" + soft_let <- "S" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "SEMPI","X" = "A_vs_S", "Y" = "D_vs_S", "W" = "RRE_vs_S", "V" = "P_vs_S", - "U" = "P-supp_vs_S", "T" = "AR_vs_S", "S" = "G_vs_S")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip - ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } vals$seg_df_ref_s <- data.frame(x=as.numeric(sempi_data$Start), y=rep("V", length(sempi_data$Cluster)), @@ -4208,7 +3899,7 @@ server <- function(input, output, session) { Start = sempi_data$Start, Stop = sempi_data$Stop) } - if (input$prism_supp == TRUE){ + if (vals$prism_supp_data_input == TRUE){ # Create a dataframe with sempi data with all the additional info to visualize on hover seg_ref_s <- data.frame(x=prism_supp$Start, y=rep("Z", length(prism_supp$Cluster)), @@ -4228,60 +3919,39 @@ server <- function(input, output, session) { if (input$ref == "PRISM-supp") { plot <- ggplot(prism_supp, aes(x = vals$chr_len, y = Chr)) + geom_prism_supp(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(prism_supp_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(prism_supp_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(prism_supp_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(prism_supp_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(prism_supp_inter, sempi_inter, sempi_data, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (vals$arts_data_input == TRUE){ - seg_df <- get_arts_inter(prism_supp_inter, arts_inter, arts_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_arts(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(prism_supp_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "prism_supp" + soft_let <- "PS" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "PRISM-supp","X" = "A_vs_P-supp", "Y" = "D_vs_P-supp", - "W" = "RRE_vs_P-supp", "V" = "P_vs_P-supp", "U" = "S_vs_P-supp", - "T" = "AR_vs_P-supp", "S" = "G_vs_P-supp")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip - ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } vals$seg_df_ref_p_s <- data.frame(x=prism_supp$Start, y=rep("U", length(prism_supp$Cluster)), @@ -4321,59 +3991,39 @@ server <- function(input, output, session) { if (input$ref == "ARTS") { plot <- ggplot(arts_data, aes(x = vals$chr_len, y = Chr)) + geom_arts(seg_ref) - if (vals$anti_data_input == TRUE){ - seg_df <- get_anti_inter(arts_inter, anti_inter, anti_data_chromo, "X") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_anti(seg_df) - } - } - if (vals$deep_data_input == TRUE){ - seg_df <- get_deep_inter(arts_inter, deep_inter, deep_data_chromo, "Y") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_deep(seg_df) - } - } - if (vals$rre_data_input == TRUE){ - seg_df <- get_RRE_inter(arts_inter, rre_inter, rre_data, "W") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_rre(seg_df) - } - } - if (vals$prism_data_input == TRUE){ - seg_df <- get_prism_inter(arts_inter, prism_inter, prism_data, "V") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism(seg_df) - } - } - if (input$prism_supp == TRUE){ - seg_df <- get_prism_supp_inter(arts_inter, prism_supp_inter, prism_supp, "U") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_prism_supp(seg_df) - } - } - if (vals$sempi_data_input == TRUE){ - seg_df <- get_sempi_inter(arts_inter, sempi_inter, sempi_data, "T") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_sempi(seg_df) - } - } - if (vals$gecco_data_input == TRUE){ - seg_df <- get_gecco_inter(arts_inter, gecco_inter, gecco_data, "S") - if (dim(seg_df[1]) > 0){ - plot <- plot + geom_gecco(seg_df) + soft_major <- "arts" + soft_let <- "AR" + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) } + index = index +1 + } - # Create a dataframe with PRISM data with all the additional info to visualize on hover - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "ARTS","X" = "A_vs_AR", "Y" = "D_vs_AR", "W" = "RRE_vs_AR", "V" = "P_vs_AR", - "U" = "P-supp_vs_AR", "T" = "S_vs_AR", "S" = "G_vs_AR")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - ggtitle("Annotations' comparison to the reference"), - # What actually to visualize in tooltip - tooltip = tooltip - ) + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) } vals$seg_df_ref_ar <- data.frame(x=arts_data$Start, y=rep("T", length(arts_data$Cluster)), @@ -4398,22 +4048,23 @@ server <- function(input, output, session) { }) output$deep_reference_2 <- renderPlotly({ + whereami::cat_where(whereami::whereami()) if (vals$rre_data_input == TRUE){ data <- data.frame(vals$rre_data) - }else if (vals$arts_data_input == TRUE){ - data <- vals$arts_data + } else if (vals$arts_data_input == TRUE){ + data <- vals$arts_data_filtered } else if (vals$anti_data_input == TRUE){ data <- vals$anti_data %>% mutate(ID = Cluster, Chr = chromosome) %>% dplyr::select(ID,Chr ,Start, Stop, Type, Type2) }else if (vals$deep_data_input == TRUE){ - data <- vals$deep_data_chromo + data <- vals$deep_data_filtered }else if (vals$prism_data_input == TRUE){ data <- vals$prism_data }else if (vals$sempi_data_input == TRUE){ data <- vals$sempi_data }else if (vals$gecco_data_input == TRUE){ - data <- vals$gecco_data + data <- vals$gecco_data_filtered } tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", @@ -4455,7 +4106,7 @@ server <- function(input, output, session) { } - if (input$prism_supp == TRUE){ + if (vals$prism_supp_data_input == TRUE){ plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score), size = 3) @@ -4477,22 +4128,30 @@ server <- function(input, output, session) { theme(axis.text.y = element_text(size = 10)) + ylab("")+ xlab("Chromosome length")+ + theme(legend.title = element_blank()) + ggtitle("All annotations"), # What actually to visualize in tooltip tooltip = tooltip ) - to_plot + to_plot %>% layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) }) # Render Biocircos Plot for all-vs-all comparison output$biocircos <- renderBioCircos({ - + whereami::cat_where(whereami::whereami()) # Plot BioCircos BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) }) output$biocircos_legend <- renderDataTable({ + whereami::cat_where(whereami::whereami()) plot_data <- vals$rename_data new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) new_data <- new_data[!apply(new_data == "", 1, all),] @@ -4507,6 +4166,7 @@ server <- function(input, output, session) { # Render barplot with number count of interception for BGC IDs output$barplot_rank <- renderPlotly({ + whereami::cat_where(whereami::whereami()) antismash_count <- NULL prism_count <- NULL deep_count <- NULL @@ -4515,10 +4175,12 @@ server <- function(input, output, session) { prism_supp_count <- NULL arts_count <- NULL gecco_count <- NULL + + inters <- vals$inters_filtered if (vals$anti_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - antismash_count <- count(as.factor(c( vals$anti_interact))) + antismash_count <-count(as.factor(unlist(sapply(inters$anti, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe anti_anot <- vals$anti_data[vals$anti_data$Cluster %in% as.numeric(levels(antismash_count$x)),] # Add prefices to the ID to plot for a barplot. @@ -4534,9 +4196,9 @@ server <- function(input, output, session) { } if (vals$gecco_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - gecco_count <- count(as.factor(c(vals$gecco_interact))) + gecco_count <- count(as.factor(unlist(sapply(inters$gecco, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - gecco_anot <- vals$gecco_data[vals$gecco_data$Cluster %in% as.numeric(levels(gecco_count$x)),] + gecco_anot <- vals$gecco_data_filtered[vals$gecco_data_filtered$Cluster %in% as.numeric(levels(gecco_count$x)),] # Add prefices to the ID to plot for a barplot. gecco_count$x <- sapply(gecco_count$x, function(x) paste("G: ", x)) # Add label column to the dataframe, from which we will plot @@ -4550,22 +4212,22 @@ server <- function(input, output, session) { } if (vals$deep_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - deep_count <- count(as.factor(c( vals$deep_interact))) + deep_count <- count(as.factor(unlist(sapply(inters$deep, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - deep_anot <- vals$biocircos_deep[vals$biocircos_deep$ID %in% as.numeric(levels(deep_count$x)),] + deep_anot <- vals$deep_data_filtered[vals$deep_data_filtered$ID %in% as.numeric(levels(deep_count$x)),] # Add prefices to the ID to plot for a barplot. deep_count$x <- sapply(deep_count$x, function(x) paste("D: ", x)) # Add label column to the dataframe, from which we will plot deep_count$label <- rep("DeepBGC", length(deep_count$x)) # Add type to the dataframe, from which we would plot (from annotation dataframe) deep_count$Type <- deep_anot$Type - deep_count$Start <- deep_anot$nucl_start + deep_count$Start <- deep_anot$Start # Add Stop positions (to visualize on hover) - deep_count$Stop <- deep_anot$nucl_end + deep_count$Stop <- deep_anot$Stop } if (vals$rre_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - rre_count <- count(as.factor(c( vals$rre_interact))) + rre_count <- count(as.factor(unlist(sapply(inters$rre, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe rre_anot <- vals$rre_data[vals$rre_data$ID %in% as.numeric(levels(rre_count$x)),] # Add prefices to the ID to plot for a barplot. @@ -4581,7 +4243,7 @@ server <- function(input, output, session) { } if (vals$prism_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_count <- count(as.factor(c(vals$prism_interact))) + prism_count <- count(as.factor(unlist(sapply(inters$prism, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe prism_anot <- vals$prism_data[vals$prism_data$Cluster %in% as.numeric(levels(prism_count$x)),] # Add prefices to the ID to plot for a barplot. @@ -4597,7 +4259,7 @@ server <- function(input, output, session) { } if (vals$sempi_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - sempi_count <- count(as.factor(c(vals$sempi_interact ))) + sempi_count <- count(as.factor(unlist(sapply(inters$sempi, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe sempi_anot <- vals$sempi_data[vals$sempi_data$Cluster %in% as.numeric(levels(sempi_count$x)),] # Add prefices to the ID to plot for a barplot. @@ -4611,9 +4273,9 @@ server <- function(input, output, session) { # Add Stop positions (to visualize on hover) sempi_count$Stop <- sempi_anot$Stop } - if (input$prism_supp == TRUE){ + if (vals$prism_supp_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_supp_count <- count(as.factor(c(vals$prism_supp_interact ))) + prism_supp_count <- count(as.factor(unlist(sapply(inters$prism_supp, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe prism_supp_anot <- vals$prism_supp[vals$prism_supp$Cluster %in% as.numeric(levels(prism_supp_count$x)),] # Add prefices to the ID to plot for a barplot. @@ -4629,9 +4291,9 @@ server <- function(input, output, session) { } if (vals$arts_data_input == TRUE){ # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - arts_count <- count(as.factor(c(vals$arts_interact ))) + arts_count <- count(as.factor(unlist(sapply(inters$arts, function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - arts_anot <- vals$arts_data[vals$arts_data$Cluster %in% as.numeric(levels(arts_count$x)),] + arts_anot <- vals$arts_data_filtered[vals$arts_data_filtered$Cluster %in% as.numeric(levels(arts_count$x)),] # Add prefices to the ID to plot for a barplot. arts_count$x <- sapply(arts_count$x, function(x) paste("AR: ", x)) # Add label column to the dataframe, from which we will plot @@ -4663,73 +4325,7 @@ server <- function(input, output, session) { # Render table with data output$group_table <- renderTable({ - df_f_ar <- data.frame(AR=NA) - if (vals$gecco_data_input == TRUE){ - if ((input$group_by=="G") & (input$count_all == T)){ - df_f_g <- data.frame(vals$biocircos_gecco$Cluster) - colnames(df_f_g) <- c("G") - } else{ - df_f_g <- data.frame(G=NA) - } - } - if (vals$anti_data_input == TRUE){ - if ((input$group_by=="A") & (input$count_all == T)){ - df_f_a <- data.frame(seq(1:length(vals$anti_data$Cluster))) - colnames(df_f_a) <- c("A") - } else{ - df_f_a <- data.frame(A=NA) - } - } - if (vals$deep_data_input == TRUE){ - if ((input$group_by=="D") & (input$count_all == T)){ - df_f_d <- data.frame(vals$biocircos_deep$ID) - colnames(df_f_d) <- c("D") - } else{ - df_f_d <- data.frame(D=NA) - } - } - if (vals$rre_data_input == TRUE){ - if ((input$group_by=="R") & (input$count_all == T)){ - df_f_r <- data.frame(seq(1:length(vals$rre_data$ID))) - colnames(df_f_r) <- c("R") - } else{ - df_f_r <- data.frame(R=NA) - } - } - if (vals$prism_data_input == TRUE){ - if ((input$group_by=="P") & (input$count_all == T)){ - df_f_p <- data.frame(seq(1:length(vals$prism_data$Cluster))) - colnames(df_f_p) <- c("P") - } else{ - df_f_p <- data.frame(P=NA) - } - } - if (vals$sempi_data_input == TRUE){ - if ((input$group_by=="S") & (input$count_all == T)){ - df_f_s <- data.frame(seq(1:length(vals$sempi_data$Cluster))) - colnames(df_f_s) <- c("S") - } else{ - df_f_s <- data.frame(S=NA) - } - } - if (input$prism_supp == TRUE){ - if ((input$group_by=="PS") & (input$count_all == T)){ - df_f_ps <- data.frame(seq(1:length(vals$prism_supp$Cluster))) - colnames(df_f_ps) <- c("PS") - } else{ - df_f_ps <- data.frame(PS=NA) - } - } - if (vals$sempi_data_input == TRUE){ - if ((input$group_by=="AR") & (input$count_all == T)){ - df_f_ar <- data.frame(seq(1:length(vals$arts_data$Cluster))) - colnames(df_f_ar) <- c("AR") - } else{ - df_f_ar <- data.frame(AR=NA) - } - } - - + whereami::cat_where(whereami::whereami()) refine_unique <- function(data){ n <- tail(data, n=1) data <- head(data, -1) @@ -4744,182 +4340,86 @@ server <- function(input, output, session) { return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) } - df_g <- data.frame(G=NA, A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_a <- data.frame(A=NA, D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_d <- data.frame(D=NA, P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_p = data.frame(P=NA, R=NA, S=NA, PS = NA, AR=NA) - df_r =data.frame(R=NA, S=NA, PS = NA, AR=NA) - df_s = data.frame(S=NA, PS = NA, AR=NA) - df_ps <- data.frame(PS=NA, AR=NA) - - if (vals$gecco_data_input == TRUE){ - df_g <- merge(df_f_g, vals$df_g, all =T) - - } - if (vals$anti_data_input == TRUE){ - df_a <- merge(df_f_a, vals$df_a, all =T) - - } - - if (vals$deep_data_input == TRUE){ - - df_d <- merge(df_f_d, vals$df_d, all =T) - - } - - if (vals$prism_data_input == TRUE){ - df_p <- merge(df_f_p, vals$df_p, all =T) - } - - if (vals$rre_data_input == TRUE){ - df_r <- merge(df_f_r, vals$df_r, all = T) - } - - if (vals$sempi_data_input == TRUE){ - df_s <- merge(df_f_s, vals$df_s, all = T) - } + inters <- vals$inters_filtered + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") + soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') - if (input$prism_supp == TRUE){ - df_ps <- merge(df_f_ps, vals$df_ps, all = T) - } - if (vals$arts_data_input == TRUE){ - - } - df_0 <- merge(df_a, df_g, all=T) - df_1 <- merge(df_0, df_d, all=T) - df_2 <- merge(df_1, df_p, all=T) - df_3 <- merge(df_2, df_r, all=T) - df_4 <- merge(df_3, df_s, all=T) - df_5 <- merge(df_4, df_ps, all=T) - df_fin <- merge(df_5, df_f_ar, all=T) - if (input$group_by=="A"){ - data <- df_fin %>% group_by(A) %>% summarise(D=paste(D, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - }else if (input$group_by=="P"){ - data <- df_fin %>% group_by(P) %>% summarise(D=paste(D, collapse=","), - R=paste(R, collapse=","), - A=paste(A, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - }else if (input$group_by=="R"){ - data <- df_fin %>% group_by(R) %>% summarise(D=paste(D, collapse=","), - A=paste(A, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - }else if (input$group_by=="D"){ - data <- df_fin %>% group_by(D) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - } else if (input$group_by=="S"){ - data <- df_fin %>% group_by(S) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - } else if (input$group_by=="PS"){ - data <- df_fin %>% group_by(PS) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - S=paste(S, collapse=","), - AR=paste(AR, collapse=","), - G=paste(G, collapse=",")) - } else if (input$group_by=="AR"){ - data <- df_fin %>% group_by(AR) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - G=paste(G, collapse=",")) - } else if (input$group_by=="G"){ - data <- df_fin %>% group_by(G) %>% summarise(A=paste(A, collapse=","), - R=paste(R, collapse=","), - P=paste(P, collapse=","), - D=paste(D, collapse=","), - S=paste(S, collapse=","), - PS=paste(PS, collapse=","), - AR=paste(AR, collapse=",")) + df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) + colnames(df_test) <- soft_let + added_inters <- c(soft_names[match(input$group_by, soft_let)]) + add_inters <- list() + if (input$count_all == F){ + df_test[nrow(df_test)+1,] <- NA + } else{ + if( (input$group_by == "D") | (input$group_by == "G")){ + selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data_filtered") + } else { + selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data") + } + df_test <- data.frame(matrix(ncol = length(soft_let), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- soft_let + df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster + } + for (i in seq(1:length(data_uploads))){ + if (input$group_by==soft_let[[i]]){ + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))){ + if (name==soft_names[match(soft_n, soft_names)][h]){ + colnames(df_tmp) <- c(soft_let[i],soft_let[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) + } + } + + index <- index +1 + } + excluded_names <- soft_let[soft_let != as.name(soft_let[i])] + data <- df_test %>% group_by_if(colnames(df_test)==soft_let[i]) %>% summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + b=paste(eval(as.name(excluded_names[2])), collapse=","), + c=paste(eval(as.name(excluded_names[3])), collapse=","), + d=paste(eval(as.name(excluded_names[4])), collapse=","), + e=paste(eval(as.name(excluded_names[5])), collapse=","), + f=paste(eval(as.name(excluded_names[6])), collapse=","), + g=paste(eval(as.name(excluded_names[7])), collapse=",")) + colnames(data) <- c(soft_let[i], excluded_names) + for (p in soft_let){ + data[[p]] <- gsub('NA,|,NA', '', data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, soft_let)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))){ + if (vals[[data_uploads[f]]] != TRUE){ + data <- data %>% + select(-as.name(soft_namings[f])) + } + } + + } else { + if ( !(soft_names[i] %in% added_inters)){ + matched_v <- match(added_inters,names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])){ + if (!(inter %in% added_inters)){ + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } + } + added_inters <- c(added_inters, soft_names[i])} + } } - data$D <- gsub('NA,|,NA', '', data$D) - data$D[nrow(data)] <- refine_unique(data$D) - data$A <- gsub('NA,|,NA', '', data$A) - data$A[nrow(data)]<- refine_unique(data$A) - data$P <- gsub('NA,|,NA', '', data$P) - data$P[nrow(data)] <- refine_unique(data$P) - data$R <- gsub('NA,|,NA', '', data$R) - data$R[nrow(data)]<- refine_unique(data$R) - data$S <- gsub('NA,|,NA', '', data$S) - data$S[nrow(data)]<- refine_unique(data$S) - data$PS <- gsub('NA,|,NA', '', data$PS) - data$PS[nrow(data)]<- refine_unique(data$PS) - data$AR <- gsub('NA,|,NA', '', data$AR) - data$AR[nrow(data)]<- refine_unique(data$AR) - data$G <- gsub('NA,|,NA', '', data$G) - data$G[nrow(data)]<- refine_unique(data$G) - - - names(data)[names(data) == 'D'] <- 'DeepBGC' - names(data)[names(data) == 'A'] <- 'Antismash' - names(data)[names(data) == 'S'] <- 'SEMPI' - names(data)[names(data) == 'R'] <- 'RRE-Finder' - names(data)[names(data) == 'P'] <- 'PRISM' - names(data)[names(data) == 'PS'] <- 'PRISM-supp' - names(data)[names(data) == 'AR'] <- 'ARTS' - names(data)[names(data) == 'G'] <- 'GECCO' - - if (vals$anti_data_input != TRUE){ - data <- data %>% - select(-Antismash) + for (name in names( add_inters) ){ + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") } - if (vals$deep_data_input != TRUE){ - data <- data %>% - select(-DeepBGC) - } - if (vals$rre_data_input != TRUE){ - data <- data %>% - select(-'RRE-Finder') - } - if (vals$prism_data_input != TRUE){ - data <- data %>% - select(-PRISM) - } - if (vals$sempi_data_input != TRUE){ - data <- data %>% - select(-SEMPI) - } - if (input$prism_supp != TRUE){ - data <- data %>% - select(-'PRISM-supp') - } - if (vals$arts_data_input != TRUE){ - data <- data %>% - select(-ARTS) - } - if (vals$gecco_data_input != TRUE){ - data <- data %>% - select(-GECCO) - } - - data["Group"] <- paste("group", rownames(data), sep = "_") - vals$group_by_data <- data write.csv(data, "group_by.csv", row.names = F) data }) diff --git a/rename.csv b/rename.csv index 06ae553..ec16461 100644 --- a/rename.csv +++ b/rename.csv @@ -1,89 +1,89 @@ -Code,Group,Group_color,Color,Vacant_colors,Hierarchy -polyketide,pks,pks,#a6cee3,,Antismash -nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM -melanin,melanin,ripp,#b2df8a,,SEMPI -ectoine,other,saccharide,#33a02c,,DeepBGC -pentangular_polyphenol,other,melanin,#fb9a99,,RRE -nrps-independent_siderophore_synthase,other,other,#e31a1c,,PRISM-supp -angucycline-type,pks,terpene,#fdbf6f,,ARTS -angucycline,pks,alkaloid,#ff7f00,, -butyrolactone,ripp,hybrid,#cab2d6,, -class_i_lantipeptide,ripp,core,#6a3d9a,, -lasso_peptide,ripp,regulatory,#ffff99,, -nis_synthase,other,resistance,#b15928,, -acyl_amino_acids,other,base,#d4ced6,, -aminocoumarin,other,,,, -amglyccycl,other,,,, -arylpolyene,other,,,, -betalactone,other,,,, -blactam,other,,,, -bottromycin,other,,,, -butyrolactone,other,,,, -cdps,other,,,, -cyanobactin,other,,,, -fatty_acid,other,,,, -furan,other,,,, -fungal-ripp,ripp,,,, -glycocin,ripp,,,, -guanidinotides,other,,,, -halogenated,other,,,, -hgle-ks,pks,,,, -hserlactone,other,,,, -indole,other,,,, -lap,ripp,,,, -ladderane,other,,,, -lanthipeptide-class-i,ripp,,,, -lanthipeptide-class-ii,ripp,,,, -lanthipeptide-class-iii,ripp,,,, -lanthipeptide-class-iv,ripp,,,, -lanthipeptide-class-v,ripp,,,, -lassopeptide,ripp,,,, -linaridin,other,,,, -lipolanthine,other,,,, -microviridin,other,,,, -naggn,other,,,, -napaa,other,,,, -nrps,nrps,,,, -nrps-like,nrps,,,, -nucleoside,other,,,, -oligosaccharide,saccharide,,,, -other,other,,,, -pbde,other,,,, -phenazine,other,,,, -phosphoglycolipid,other,,,, -phosphonate,other,,,, -pks-like,pks,,,, -ppys-ks,other,,,, -proteusin,other,,,, -pufa,other,,,, -pyrrolidine,other,,,, -ranthipeptide,ripp,,,, -ras-ripp,other,,,, -redox-cofactor,other,,,, -resorcinol,other,,,, -ripp-like,ripp,,,, -rre-containing,ripp,,,, -saccharide,saccharide,,,, -sactipeptide,ripp,,,, -siderophore,other,,,, -t1pks,pks,,,, -t2pks,pks,,,, -t3pks,pks,,,, -terpene,terpene,,,, -thioamitides,other,,,, -thioamide-nrp,other,,,, -thiopeptide,ripp,,,, -transat-pks,pks,,,, -transat-pks-like,pks,,,, -tropodithietic-acid,other,,,, -bacteriocin,ripp,,,, -fused,other,,,, -head_to_tail,other,,,, -lanthidin,other,,,, -lanthipeptide,ripp,,,, -tfua-related,other,,,, -otherks,other,,,, -microcin,other,,,, -cf_saccharide,saccharide,,,, -cf_fatty_acid,other,,,, -cf_putative,other,,,, +Code,Group,Group_color,Color,Vacant_colors,Hierarchy +polyketide,pks,pks,#a6cee3,,Antismash +nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM +melanin,melanin,ripp,#b2df8a,,SEMPI +ectoine,other,saccharide,#33a02c,,DeepBGC +pentangular_polyphenol,other,melanin,#fb9a99,,GECCO +nrps-independent_siderophore_synthase,other,other,#e31a1c,,RRE +angucycline-type,pks,terpene,#fdbf6f,,PRISM-supp +angucycline,pks,alkaloid,#ff7f00,,ARTS +butyrolactone,ripp,hybrid,#cab2d6,, +class_i_lantipeptide,ripp,core,#6a3d9a,, +lasso_peptide,ripp,regulatory,#ffff99,, +nis_synthase,other,resistance,#b15928,, +acyl_amino_acids,other,base,#d4ced6,, +aminocoumarin,other,,,, +amglyccycl,other,,,, +arylpolyene,other,,,, +betalactone,other,,,, +blactam,other,,,, +bottromycin,other,,,, +butyrolactone,other,,,, +cdps,other,,,, +cyanobactin,other,,,, +fatty_acid,other,,,, +furan,other,,,, +fungal-ripp,ripp,,,, +glycocin,ripp,,,, +guanidinotides,other,,,, +halogenated,other,,,, +hgle-ks,pks,,,, +hserlactone,other,,,, +indole,other,,,, +lap,ripp,,,, +ladderane,other,,,, +lanthipeptide-class-i,ripp,,,, +lanthipeptide-class-ii,ripp,,,, +lanthipeptide-class-iii,ripp,,,, +lanthipeptide-class-iv,ripp,,,, +lanthipeptide-class-v,ripp,,,, +lassopeptide,ripp,,,, +linaridin,other,,,, +lipolanthine,other,,,, +microviridin,other,,,, +naggn,other,,,, +napaa,other,,,, +nrps,nrps,,,, +nrps-like,nrps,,,, +nucleoside,other,,,, +oligosaccharide,saccharide,,,, +other,other,,,, +pbde,other,,,, +phenazine,other,,,, +phosphoglycolipid,other,,,, +phosphonate,other,,,, +pks-like,pks,,,, +ppys-ks,other,,,, +proteusin,other,,,, +pufa,other,,,, +pyrrolidine,other,,,, +ranthipeptide,ripp,,,, +ras-ripp,other,,,, +redox-cofactor,other,,,, +resorcinol,other,,,, +ripp-like,ripp,,,, +rre-containing,ripp,,,, +saccharide,saccharide,,,, +sactipeptide,ripp,,,, +siderophore,other,,,, +t1pks,pks,,,, +t2pks,pks,,,, +t3pks,pks,,,, +terpene,terpene,,,, +thioamitides,other,,,, +thioamide-nrp,other,,,, +thiopeptide,ripp,,,, +transat-pks,pks,,,, +transat-pks-like,pks,,,, +tropodithietic-acid,other,,,, +bacteriocin,ripp,,,, +fused,other,,,, +head_to_tail,other,,,, +lanthidin,other,,,, +lanthipeptide,ripp,,,, +tfua-related,other,,,, +otherks,other,,,, +microcin,other,,,, +cf_saccharide,saccharide,,,, +cf_fatty_acid,other,,,, +cf_putative,other,,,, From 7e599044869c45a60358222ba0a3ec9c8850c060 Mon Sep 17 00:00:00 2001 From: Pavlo Date: Fri, 28 May 2021 22:48:57 +0300 Subject: [PATCH 024/199] Added example gecco data Former-commit-id: 13785ea23978561b7244d74423fd50082bb729d4 --- example_data/sco_gecco.tsv | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 example_data/sco_gecco.tsv diff --git a/example_data/sco_gecco.tsv b/example_data/sco_gecco.tsv new file mode 100644 index 0000000..60d5eed --- /dev/null +++ b/example_data/sco_gecco.tsv @@ -0,0 +1,21 @@ +sequence_id bgc_id start end average_p max_p type alkaloid_probability polyketide_probability ripp_probability saccharide_probability terpene_probability nrp_probability other_probability proteins domains +AL645882.2 AL645882.2_cluster_1 103781 121371 0.8192887299726135 0.9994207183607371 Polyketide 0.010000000000000009 0.65 0.0 0.030000000000000027 0.010000000000000009 0.07999999999999996 0.31999999999999995 AL645882.2_97;AL645882.2_98;AL645882.2_99;AL645882.2_100;AL645882.2_101;AL645882.2_102 PF00106;PF00109;PF00550;PF00698;PF00753;PF01370;PF02801;PF07977;PF07993;PF08659;PF13561;PF14765;PF16197;TIGR00128;TIGR01181;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR02813;TIGR02814;TIGR02816;TIGR03131;TIGR03150;TIGR03443;TIGR03466;TIGR03971 +AL645882.2 AL645882.2_cluster_2 168705 177496 0.6591589380928025 0.8501282383918205 Terpene 0.010000000000000009 0.08999999999999997 0.0 0.0 0.87 0.0 0.040000000000000036 AL645882.2_148;AL645882.2_149;AL645882.2_150;AL645882.2_151;AL645882.2_152;AL645882.2_153;AL645882.2_154;AL645882.2_155 PF00348;PF00494;PF00582;PF00890;PF01266;PF01593;PF11066;PF13450;TIGR02730;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03464;TIGR03465;TIGR03467 +AL645882.2 AL645882.2_cluster_3 255311 262319 0.7562788359477977 0.8688657410419955 Unknown 0.0 0.26 0.47 0.0 0.0 0.0 0.27 AL645882.2_231;AL645882.2_232;AL645882.2_233;AL645882.2_234;AL645882.2_235 PF00528;PF00561;PF00975;PF04738;PF05147;PF12146;PF12697;PF14028;TIGR00969;TIGR01581;TIGR01738;TIGR02427;TIGR03056;TIGR03262;TIGR03611;TIGR03695;TIGR03891;TIGR03897 +AL645882.2 AL645882.2_cluster_4 498683 533448 0.7693747042622983 0.9999696830916295 NRP 0.0 0.10999999999999999 0.12 0.030000000000000027 0.020000000000000018 0.7 0.040000000000000036 AL645882.2_440;AL645882.2_441;AL645882.2_442;AL645882.2_443;AL645882.2_444;AL645882.2_445;AL645882.2_446;AL645882.2_447;AL645882.2_448;AL645882.2_449;AL645882.2_450;AL645882.2_451;AL645882.2_452;AL645882.2_453;AL645882.2_454;AL645882.2_455;AL645882.2_456;AL645882.2_457;AL645882.2_458;AL645882.2_459;AL645882.2_460;AL645882.2_461 PF00005;PF00440;PF00501;PF00550;PF00664;PF00668;PF01266;PF01494;PF03621;PF07992;PF09339;PF12802;PF12902;PF13191;PF13193;PF13304;PF13434;PF13450;TIGR00630;TIGR00655;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01318;TIGR01720;TIGR01733;TIGR01734;TIGR01842;TIGR01846;TIGR01923;TIGR01978;TIGR01984;TIGR01988;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02372;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03375;TIGR03384;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03968;TIGR04406;TIGR04439;TIGR04520;TIGR04521 +AL645882.2 AL645882.2_cluster_6 1335695 1361419 0.8473264250182975 0.902810689697336 Polyketide 0.050000000000000044 0.53 0.030000000000000027 0.020000000000000018 0.020000000000000018 0.15000000000000002 0.28 AL645882.2_1225;AL645882.2_1226;AL645882.2_1227;AL645882.2_1228;AL645882.2_1229;AL645882.2_1230;AL645882.2_1231;AL645882.2_1232;AL645882.2_1233;AL645882.2_1234;AL645882.2_1235;AL645882.2_1236;AL645882.2_1237;AL645882.2_1238;AL645882.2_1239;AL645882.2_1240;AL645882.2_1241;AL645882.2_1242;AL645882.2_1243;AL645882.2_1244;AL645882.2_1245;AL645882.2_1246;AL645882.2_1247;AL645882.2_1248;AL645882.2_1249 PF00109;PF00155;PF00202;PF00364;PF00392;PF00550;PF00561;PF00676;PF00890;PF01266;PF01370;PF01494;PF01613;PF01674;PF01946;PF02089;PF02770;PF02775;PF02801;PF03109;PF03364;PF04072;PF04321;PF04820;PF07993;PF08281;PF08541;PF08545;PF10604;PF12697;PF13292;PF13450;PF13460;TIGR00027;TIGR00292;TIGR00508;TIGR00517;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR00747;TIGR00748;TIGR01214;TIGR01265;TIGR01347;TIGR01348;TIGR01746;TIGR01835;TIGR01885;TIGR01982;TIGR02018;TIGR02032;TIGR02296;TIGR02325;TIGR02352;TIGR02404;TIGR02407;TIGR02813;TIGR02937;TIGR02946;TIGR02959;TIGR03150;TIGR03181;TIGR03182;TIGR03197;TIGR03246;TIGR03251;TIGR03338;TIGR03364;TIGR03372;TIGR03443;TIGR03466;TIGR03615;TIGR03695;TIGR03947;TIGR04022;TIGR04544 +AL645882.2 AL645882.2_cluster_7 1998468 2002980 0.8034485206666728 0.9107236204333993 Other 0.030000000000000027 0.020000000000000018 0.0 0.0 0.0 0.0 0.95 AL645882.2_1826;AL645882.2_1827;AL645882.2_1828;AL645882.2_1829;AL645882.2_1830 PF00202;PF00266;PF00583;PF05721;PF06339;PF13508;TIGR00508;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR01762;TIGR01885;TIGR01976;TIGR01977;TIGR02406;TIGR02407;TIGR02408;TIGR03246;TIGR03251;TIGR03372 +AL645882.2 AL645882.2_cluster_8 2931776 2950345 0.7951811973663155 0.9993573020515812 Saccharide 0.0 0.020000000000000018 0.0 0.74 0.020000000000000018 0.050000000000000044 0.18000000000000005 AL645882.2_2651;AL645882.2_2652;AL645882.2_2653;AL645882.2_2654;AL645882.2_2655;AL645882.2_2656;AL645882.2_2657;AL645882.2_2658;AL645882.2_2659;AL645882.2_2660;AL645882.2_2661;AL645882.2_2662;AL645882.2_2663;AL645882.2_2664;AL645882.2_2665;AL645882.2_2666;AL645882.2_2667;AL645882.2_2668;AL645882.2_2669 PF00264;PF00383;PF00389;PF00400;PF00534;PF00535;PF02397;PF02668;PF02826;PF03777;PF06236;PF07690;PF12832;PF12894;PF13439;PF13477;PF13506;PF13524;PF13579;PF13632;PF13641;PF13692;PF13727;PF14437;TIGR00227;TIGR00326;TIGR00900;TIGR01327;TIGR01508;TIGR02095;TIGR02149;TIGR03013;TIGR03022;TIGR03023;TIGR03025;TIGR03030;TIGR03087;TIGR03088;TIGR03449;TIGR03469;TIGR03937;TIGR03946;TIGR03965;TIGR03999;TIGR04047;TIGR04063;TIGR04157 +AL645882.2 AL645882.2_cluster_9 3032065 3040682 0.7962707288747192 0.9058104647132605 Other 0.010000000000000009 0.24 0.010000000000000009 0.0 0.030000000000000027 0.020000000000000018 0.7 AL645882.2_2741;AL645882.2_2742;AL645882.2_2743;AL645882.2_2744;AL645882.2_2745;AL645882.2_2746;AL645882.2_2747 PF00266;PF00282;PF00441;PF02770;PF02771;PF04183;PF04954;PF05889;PF06276;PF08021;PF08028;PF13434;PF13523;PF13738;TIGR03203;TIGR03204;TIGR03207;TIGR03799;TIGR03811;TIGR03812;TIGR04022;TIGR04046;TIGR04431;TIGR04439 +AL645882.2 AL645882.2_cluster_10 3524828 3602320 0.752421552194178 0.9999999998258269 NRP 0.0 0.19499999999999995 0.0 0.010000000000000009 0.0 0.97 0.0 AL645882.2_3170;AL645882.2_3171;AL645882.2_3172;AL645882.2_3173;AL645882.2_3174;AL645882.2_3175;AL645882.2_3176;AL645882.2_3177;AL645882.2_3178;AL645882.2_3179;AL645882.2_3180;AL645882.2_3181;AL645882.2_3182;AL645882.2_3183;AL645882.2_3184;AL645882.2_3185;AL645882.2_3186;AL645882.2_3187;AL645882.2_3188;AL645882.2_3189;AL645882.2_3190;AL645882.2_3191;AL645882.2_3192;AL645882.2_3193;AL645882.2_3194;AL645882.2_3195;AL645882.2_3196;AL645882.2_3197;AL645882.2_3198;AL645882.2_3199;AL645882.2_3200;AL645882.2_3201;AL645882.2_3202;AL645882.2_3203;AL645882.2_3204 PF00005;PF00072;PF00109;PF00122;PF00155;PF00196;PF00441;PF00486;PF00501;PF00550;PF00561;PF00664;PF00668;PF00702;PF00903;PF00931;PF00975;PF01026;PF01040;PF01070;PF01261;PF01266;PF01494;PF01636;PF01663;PF02153;PF02668;PF02770;PF02801;PF03403;PF03621;PF03704;PF07730;PF07994;PF08241;PF08541;PF08545;PF09056;PF12146;PF12679;PF12697;PF12730;PF12897;PF13193;PF13304;PF13450;PF13489;PF13649;PF13669;PF14696;TIGR00010;TIGR00517;TIGR00747;TIGR00748;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01106;TIGR01116;TIGR01140;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01249;TIGR01257;TIGR01263;TIGR01264;TIGR01265;TIGR01271;TIGR01277;TIGR01288;TIGR01387;TIGR01473;TIGR01474;TIGR01476;TIGR01494;TIGR01497;TIGR01511;TIGR01512;TIGR01517;TIGR01522;TIGR01523;TIGR01524;TIGR01525;TIGR01647;TIGR01657;TIGR01720;TIGR01733;TIGR01734;TIGR01738;TIGR01818;TIGR01835;TIGR01842;TIGR01846;TIGR01923;TIGR01934;TIGR01978;TIGR01984;TIGR01988;TIGR02032;TIGR02056;TIGR02142;TIGR02151;TIGR02154;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02335;TIGR02372;TIGR02427;TIGR02633;TIGR02673;TIGR02708;TIGR02769;TIGR02770;TIGR02813;TIGR02857;TIGR02868;TIGR02875;TIGR02915;TIGR02956;TIGR02982;TIGR03005;TIGR03020;TIGR03056;TIGR03081;TIGR03098;TIGR03150;TIGR03197;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03343;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03467;TIGR03522;TIGR03540;TIGR03541;TIGR03608;TIGR03611;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03946;TIGR03947;TIGR03966;TIGR04406;TIGR04520;TIGR04521;TIGR04544 +AL645882.2 AL645882.2_cluster_11 5515246 5536994 0.7130191148104835 0.868896297725067 Polyketide 0.020000000000000018 0.89 0.030000000000000027 0.07999999999999996 0.020000000000000018 0.020000000000000018 0.050000000000000044 AL645882.2_5009;AL645882.2_5010;AL645882.2_5011;AL645882.2_5012;AL645882.2_5013;AL645882.2_5014;AL645882.2_5015;AL645882.2_5016;AL645882.2_5017;AL645882.2_5018;AL645882.2_5019;AL645882.2_5020;AL645882.2_5021;AL645882.2_5022;AL645882.2_5023;AL645882.2_5024;AL645882.2_5025;AL645882.2_5026;AL645882.2_5027;AL645882.2_5028;AL645882.2_5029;AL645882.2_5030;AL645882.2_5031 PF00106;PF00107;PF00109;PF00440;PF00486;PF00550;PF00753;PF01243;PF01370;PF01381;PF01613;PF02801;PF02909;PF03364;PF03704;PF03848;PF03992;PF04978;PF05175;PF05368;PF05724;PF07690;PF07883;PF08028;PF08240;PF08241;PF08242;PF08659;PF10604;PF12349;PF12844;PF13443;PF13460;PF13489;PF13561;PF13602;PF13649;PF13847;TIGR00477;TIGR00517;TIGR00692;TIGR00710;TIGR00711;TIGR00833;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00916;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01963;TIGR02296;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02818;TIGR02823;TIGR02824;TIGR02825;TIGR03070;TIGR03150;TIGR03201;TIGR03206;TIGR03325;TIGR03366;TIGR03451;TIGR03466;TIGR03480;TIGR03534;TIGR03615;TIGR03618;TIGR03668;TIGR03971;TIGR03989;TIGR04022;TIGR04023;TIGR04316;TIGR04504;TIGR04558 +AL645882.2 AL645882.2_cluster_12 5785753 5791297 0.5764920236167602 0.6184351199586162 Polyketide 0.0 0.91 0.0 0.0 0.020000000000000018 0.010000000000000009 0.06000000000000005 AL645882.2_5252;AL645882.2_5253;AL645882.2_5254;AL645882.2_5255;AL645882.2_5256;AL645882.2_5257;AL645882.2_5258 PF00109;PF00550;PF02311;PF02801;PF03364;PF03992;PF04486;PF04673;PF07883;PF10604;TIGR01930;TIGR02813;TIGR03150;TIGR03214 +AL645882.2 AL645882.2_cluster_13 6432593 6467702 0.909289567375217 0.9999999584431769 Polyketide 0.020000000000000018 0.76 0.020000000000000018 0.010000000000000009 0.0 0.45999999999999996 0.10999999999999999 AL645882.2_5815;AL645882.2_5816;AL645882.2_5817;AL645882.2_5818;AL645882.2_5819;AL645882.2_5820;AL645882.2_5821;AL645882.2_5822;AL645882.2_5823;AL645882.2_5824;AL645882.2_5825;AL645882.2_5826;AL645882.2_5827;AL645882.2_5828;AL645882.2_5829;AL645882.2_5830;AL645882.2_5831;AL645882.2_5832;AL645882.2_5833;AL645882.2_5834;AL645882.2_5835;AL645882.2_5836;AL645882.2_5837;AL645882.2_5838;AL645882.2_5839 PF00108;PF00109;PF00155;PF00196;PF00355;PF00441;PF00486;PF00501;PF00550;PF00698;PF00891;PF00975;PF01053;PF01073;PF01222;PF01326;PF01370;PF02353;PF02544;PF02770;PF02771;PF02801;PF03704;PF04191;PF04321;PF05368;PF05401;PF07993;PF08028;PF08241;PF08242;PF08281;PF08541;PF08545;PF11639;PF12697;PF13193;PF13460;PF13489;PF13520;PF13649;PF13847;PF16197;PF16363;PF17837;TIGR00128;TIGR00517;TIGR00536;TIGR00747;TIGR00748;TIGR00858;TIGR01179;TIGR01181;TIGR01214;TIGR01733;TIGR01734;TIGR01746;TIGR01777;TIGR01821;TIGR01822;TIGR01825;TIGR01923;TIGR01930;TIGR01983;TIGR02072;TIGR02188;TIGR02197;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR02813;TIGR02937;TIGR03020;TIGR03056;TIGR03098;TIGR03131;TIGR03150;TIGR03203;TIGR03204;TIGR03205;TIGR03207;TIGR03208;TIGR03443;TIGR03466;TIGR03533;TIGR03534;TIGR03541;TIGR03589;TIGR04022;TIGR04180;TIGR04543 +AL645882.2 AL645882.2_cluster_14 6847315 6863275 0.739858389200434 0.9589701630281311 Polyketide 0.0 0.62 0.09999999999999998 0.020000000000000018 0.030000000000000027 0.030000000000000027 0.21999999999999997 AL645882.2_6167;AL645882.2_6168;AL645882.2_6169;AL645882.2_6170;AL645882.2_6171;AL645882.2_6172;AL645882.2_6173;AL645882.2_6174;AL645882.2_6175;AL645882.2_6176;AL645882.2_6177;AL645882.2_6178;AL645882.2_6179;AL645882.2_6180 PF00150;PF00356;PF00528;PF00532;PF01381;PF01547;PF04183;PF04542;PF06276;PF07398;PF08281;PF11716;PF12680;PF13377;PF13416;PF13581;PF19054;TIGR00969;TIGR01481;TIGR01581;TIGR02139;TIGR02140;TIGR02141;TIGR02405;TIGR02417;TIGR02937;TIGR02939;TIGR02947;TIGR02948;TIGR02957;TIGR03070;TIGR03083;TIGR03086;TIGR03226;TIGR03262;TIGR03850 +AL645882.2 AL645882.2_cluster_15 6889594 6948414 0.8739774761888223 0.9999999998409312 Polyketide 0.0 0.99 0.010000000000000009 0.040000000000000036 0.0 0.06000000000000005 0.0 AL645882.2_6205;AL645882.2_6206;AL645882.2_6207;AL645882.2_6208;AL645882.2_6209;AL645882.2_6210;AL645882.2_6211;AL645882.2_6212;AL645882.2_6213;AL645882.2_6214;AL645882.2_6215;AL645882.2_6216;AL645882.2_6217;AL645882.2_6218;AL645882.2_6219;AL645882.2_6220;AL645882.2_6221;AL645882.2_6222;AL645882.2_6223;AL645882.2_6224;AL645882.2_6225;AL645882.2_6226;AL645882.2_6227;AL645882.2_6228;AL645882.2_6229 PF00106;PF00108;PF00109;PF00202;PF00364;PF00440;PF00486;PF00550;PF00561;PF00698;PF00975;PF01039;PF01370;PF01494;PF01565;PF02775;PF02786;PF02801;PF03704;PF03756;PF05368;PF07690;PF07730;PF07993;PF08031;PF08659;PF08990;PF12697;PF12831;PF13460;PF13561;PF13581;PF14765;PF16197;PF17147;TIGR00128;TIGR00508;TIGR00513;TIGR00515;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00710;TIGR00711;TIGR00713;TIGR00880;TIGR00881;TIGR00893;TIGR00895;TIGR00898;TIGR00900;TIGR01108;TIGR01117;TIGR01249;TIGR01500;TIGR01738;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01885;TIGR01930;TIGR01963;TIGR02407;TIGR02415;TIGR02427;TIGR02430;TIGR02632;TIGR02685;TIGR02813;TIGR03056;TIGR03131;TIGR03133;TIGR03134;TIGR03150;TIGR03206;TIGR03246;TIGR03251;TIGR03297;TIGR03325;TIGR03343;TIGR03372;TIGR03384;TIGR03443;TIGR03466;TIGR03611;TIGR03613;TIGR03649;TIGR03695;TIGR03968;TIGR03971;TIGR04316;TIGR04504 +AL645882.2 AL645882.2_cluster_16 7106284 7117874 0.7837623334517632 0.9998563052677049 NRP 0.010000000000000009 0.030000000000000027 0.0 0.010000000000000009 0.0 0.92 0.06000000000000005 AL645882.2_6364;AL645882.2_6365;AL645882.2_6366;AL645882.2_6367;AL645882.2_6368 PF00501;PF00550;PF00668;PF00975;PF05899;PF05977;PF07690;PF12697;PF13193;PF13434;TIGR00900;TIGR01733;TIGR01734;TIGR01738;TIGR01923;TIGR02188;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR03098;TIGR03205;TIGR03208;TIGR03443;TIGR04439 +AL645882.2 AL645882.2_cluster_17 7516017 7523399 0.939298768070374 0.9999997444668459 Terpene 0.010000000000000009 0.030000000000000027 0.010000000000000009 0.0 0.9 0.0 0.050000000000000044 AL645882.2_6688;AL645882.2_6689;AL645882.2_6690;AL645882.2_6691;AL645882.2_6692;AL645882.2_6693;AL645882.2_6694 PF00348;PF00432;PF00494;PF00890;PF01048;PF01266;PF01593;PF07992;PF12831;PF13243;PF13249;PF13450;TIGR01507;TIGR01559;TIGR01787;TIGR02731;TIGR02732;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03197;TIGR03463;TIGR03464;TIGR03465;TIGR03467;TIGR03468;TIGR04277 +AL645882.2 AL645882.2_cluster_18 7586410 7601569 0.832626210768822 0.9983263560779447 Polyketide 0.0 0.92 0.0 0.0 0.020000000000000018 0.030000000000000027 0.050000000000000044 AL645882.2_6750;AL645882.2_6751;AL645882.2_6752;AL645882.2_6753;AL645882.2_6754;AL645882.2_6755;AL645882.2_6756;AL645882.2_6757 PF00083;PF00106;PF00107;PF00109;PF00550;PF00698;PF01370;PF02775;PF02801;PF05977;PF07690;PF07992;PF08240;PF08541;PF08659;PF09335;PF12832;PF12840;PF13460;PF13561;PF13602;PF13738;PF14765;PF16197;TIGR00128;TIGR00710;TIGR00711;TIGR00747;TIGR00879;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00898;TIGR00900;TIGR01289;TIGR01299;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01930;TIGR01963;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02823;TIGR02824;TIGR02825;TIGR03131;TIGR03150;TIGR03206;TIGR03297;TIGR03325;TIGR03845;TIGR03971;TIGR04316;TIGR04504 +AL645882.2 AL645882.2_cluster_19 7660990 7703887 0.8723160842685086 0.9884977283394043 Unknown 0.0024999999999999467 0.16000000000000003 0.31000000000000005 0.0 0.030000000000000027 0.06999999999999995 0.4375 AL645882.2_6824;AL645882.2_6825;AL645882.2_6826;AL645882.2_6827;AL645882.2_6828;AL645882.2_6829;AL645882.2_6830;AL645882.2_6831;AL645882.2_6832;AL645882.2_6833;AL645882.2_6834;AL645882.2_6835;AL645882.2_6836;AL645882.2_6837;AL645882.2_6838;AL645882.2_6839;AL645882.2_6840;AL645882.2_6841;AL645882.2_6842;AL645882.2_6843;AL645882.2_6844;AL645882.2_6845;AL645882.2_6846;AL645882.2_6847;AL645882.2_6848;AL645882.2_6849;AL645882.2_6850;AL645882.2_6851;AL645882.2_6852;AL645882.2_6853;AL645882.2_6854;AL645882.2_6855;AL645882.2_6856;AL645882.2_6857;AL645882.2_6858;AL645882.2_6859;AL645882.2_6860;AL645882.2_6861;AL645882.2_6862;AL645882.2_6863;AL645882.2_6864;AL645882.2_6865 PF00196;PF00441;PF00702;PF01071;PF01135;PF01609;PF02467;PF02655;PF02770;PF02771;PF02786;PF03432;PF04738;PF05147;PF05713;PF07690;PF08028;PF13340;PF13535;PF13586;PF13620;PF13649;PF13847;PF14028;PF15632;PF18130;PF18603;TIGR00080;TIGR00768;TIGR00900;TIGR01142;TIGR02144;TIGR02469;TIGR02752;TIGR03203;TIGR03204;TIGR03207;TIGR03891;TIGR03909;TIGR04022;TIGR04188;TIGR04364 +AL645882.2 AL645882.2_cluster_20 8258333 8283623 0.8350377509828413 0.8974035790126855 RiPP 0.020000000000000018 0.06999999999999995 0.55 0.10999999999999999 0.030000000000000027 0.050000000000000044 0.18999999999999995 AL645882.2_7365;AL645882.2_7366;AL645882.2_7367;AL645882.2_7368;AL645882.2_7369;AL645882.2_7370;AL645882.2_7371;AL645882.2_7372;AL645882.2_7373;AL645882.2_7374;AL645882.2_7375;AL645882.2_7376;AL645882.2_7377;AL645882.2_7378;AL645882.2_7379;AL645882.2_7380;AL645882.2_7381;AL645882.2_7382;AL645882.2_7383;AL645882.2_7384;AL645882.2_7385;AL645882.2_7386;AL645882.2_7387;AL645882.2_7388;AL645882.2_7389;AL645882.2_7390 PF00005;PF00009;PF00067;PF00089;PF00501;PF00583;PF00743;PF00857;PF00891;PF00989;PF01925;PF03029;PF03259;PF03992;PF04203;PF04486;PF05175;PF05331;PF07992;PF08241;PF08242;PF08448;PF11991;PF13426;PF13434;PF13450;PF13489;PF13581;PF13649;PF13738;PF13847;PF14535;PF16864;TIGR00229;TIGR00231;TIGR00955;TIGR00956;TIGR00958;TIGR00968;TIGR00972;TIGR01076;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01842;TIGR01846;TIGR01978;TIGR01983;TIGR02142;TIGR02155;TIGR02203;TIGR02204;TIGR02211;TIGR02314;TIGR02315;TIGR02323;TIGR02324;TIGR02633;TIGR02673;TIGR02716;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03258;TIGR03265;TIGR03269;TIGR03335;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03429;TIGR03522;TIGR03608;TIGR03614;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR04018;TIGR04046;TIGR04406;TIGR04520;TIGR04521;TIGR04538;TIGR04543 +AL645882.2 AL645882.2_cluster_21 8493549 8542072 0.912955287850247 0.9999999998816349 NRP 0.010000000000000009 0.15000000000000002 0.06999999999999995 0.020000000000000018 0.040000000000000036 0.74 0.09999999999999998 AL645882.2_7588;AL645882.2_7589;AL645882.2_7590;AL645882.2_7591;AL645882.2_7592;AL645882.2_7593;AL645882.2_7594;AL645882.2_7595;AL645882.2_7596;AL645882.2_7597;AL645882.2_7598;AL645882.2_7599;AL645882.2_7600;AL645882.2_7601;AL645882.2_7602;AL645882.2_7603;AL645882.2_7604;AL645882.2_7605;AL645882.2_7606;AL645882.2_7607;AL645882.2_7608;AL645882.2_7609;AL645882.2_7610;AL645882.2_7611;AL645882.2_7612;AL645882.2_7613;AL645882.2_7614;AL645882.2_7615;AL645882.2_7616;AL645882.2_7617;AL645882.2_7618;AL645882.2_7619;AL645882.2_7620;AL645882.2_7621;AL645882.2_7622;AL645882.2_7623 PF00005;PF00027;PF00067;PF00106;PF00195;PF00376;PF00392;PF00425;PF00440;PF00496;PF00501;PF00528;PF00550;PF00664;PF00668;PF00890;PF00903;PF00975;PF01040;PF01266;PF01370;PF01408;PF01494;PF02353;PF02463;PF02797;PF02909;PF03435;PF04140;PF04191;PF05834;PF06902;PF07690;PF07729;PF07992;PF08241;PF08242;PF08392;PF08541;PF12697;PF12802;PF12831;PF13191;PF13193;PF13370;PF13401;PF13411;PF13412;PF13459;PF13460;PF13489;PF13561;PF13649;PF13847;PF18563;PF19086;TIGR00543;TIGR00553;TIGR00564;TIGR00565;TIGR00630;TIGR00747;TIGR00896;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01289;TIGR01292;TIGR01733;TIGR01734;TIGR01761;TIGR01815;TIGR01820;TIGR01823;TIGR01824;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01842;TIGR01846;TIGR01923;TIGR01963;TIGR01978;TIGR01988;TIGR02018;TIGR02023;TIGR02032;TIGR02043;TIGR02044;TIGR02047;TIGR02051;TIGR02054;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02294;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02325;TIGR02372;TIGR02404;TIGR02415;TIGR02469;TIGR02632;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02789;TIGR02790;TIGR02812;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03206;TIGR03208;TIGR03258;TIGR03265;TIGR03269;TIGR03338;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03494;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03971;TIGR04028;TIGR04316;TIGR04406;TIGR04458;TIGR04515;TIGR04520;TIGR04521;TIGR04538 From 9c1d3f3cc16d13d49bbf71eeb9aad81095b15c64 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 11 Jul 2021 00:12:15 +0300 Subject: [PATCH 025/199] Last stable working version. Refractored the code. Former-commit-id: cf2b27d39eb4c6d1f0b1ee67a52f546f292334d9 --- app.R | 7794 ++++++++---------- docs/BGCViz_renaming_and_coloring_options.md | 4 + docs/Glossary.md | 176 +- docs/Input_files_options.md | 11 +- docs/Installation.md | 4 +- docs/Logic_of_the_output.md | 27 +- docs/Quick_start.md | 2 +- group.py | 100 +- rename.csv | 178 +- 9 files changed, 3614 insertions(+), 4682 deletions(-) diff --git a/app.R b/app.R index b276a7a..c3520a8 100755 --- a/app.R +++ b/app.R @@ -1,4452 +1,3342 @@ -# This is a Shiny web application. You can run the application by clicking -# the 'Run App' button above. -# -# Author: Pavlo Hrab -# Made as part of Cambridge bioinformatics hackaton -# -# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH and RREFinder -# to visualized interception of those different annotations in one genome -# - -# Upload required libraries -library(shiny) -library(tidyverse) -library(plyr) -library(plotly) -library(BioCircos) -library(ggplot2) -library(shinyjs) -library(rjson) -library(stringr) -library(DT) -library(GenomicRanges) - -# Define UI -ui <- fluidPage( - - # Application title - titlePanel("BGCViz"), - - # Sidebar - useShinyjs(), - sidebarLayout( - sidebarPanel( - # Data upload - h3("Data upload and necesary input:"), - checkboxInput("hide_uploads", "Hide upload fields"), - h5(id = "anti_header_upload","ANTISMASH:"), - checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), - fileInput("anti_data", - "Upload Antismash data"), - actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - h5(id = "prism_header_upload","PRISM:"), - checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), - fileInput("prism_data", - "Upload PRISM data"), - actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - h5(id = "sempi_header_upload","SEMPI:"), - fileInput("sempi_data", - "Upload SEMPI 2.0 data"), - actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - h5(id = "deep_header_upload","DEEPBGC:"), - fileInput("deep_data", - "Upload DeepBGC data"), - actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - h5(id = "gecco_header_upload","GECCO:"), - fileInput("gecco_data", - "Upload Gecco data"), - actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), - h5(id = "rre_header_upload","RRE-FINDER:"), - fileInput("rre_data", - "Upload RRE-Finder data"), - actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - h5(id = "arts_header_upload","ARTS:"), - fileInput("known_data", - "Upload ARTS knownhits data"), - fileInput("dup_data", - "Upload ARTS duptable data"), - actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), - # Numeric input of chromosome length of analyzed sequence - numericInput("chr_len", "Please type chr len of an organism", value = 10000000), - h3("Data manipulation options"), - checkboxInput("hide_anti", "Hide data manipulation fields"), - h5(id = "anti_header","Antismash data options:"), - checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - h5(id = "prism_header","PRISM data options:"), - checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - checkboxInput("prism_supp", "Use PRISM resistance and regulatory genes information'"), - h5(id = "sempi_header","SEMPI data options:"), - checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - h5(id = "arts_header","ARTS data options:"), - selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All"), - h3(id = "genes_on_chr","Genes on chromosome plot controls:"), - checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), - selectInput("ref", "Choose reference data", choices = c("Antismash" = "Antismash", - "DeepBGC" = "DeepBGC", - "RRE-Finder" = "RRE-Finder", - "PRISM" = "PRISM", - "SEMPI" = "SEMPI", - "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS", - "GECCO" = "GECCO"), - selected = "Antismash"), - h3(id = "summarize","Summarize options:"), - checkboxInput("hide_summarize", "Hide summarize options"), - selectInput("group_by", "Group data by", choices = c("Antismash" = "A", - "DeepBGC" = "D", - "RRE-Finder" = "R", - "PRISM" = "P", - "SEMPI" = "S", - "PRISM-supp" = "PS", - "ARTS" = "AR", - "GECCO" = "G"), - selected = 'A'), - checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - h3("Improve visualization:"), - checkboxInput("hide_viz", "Hide improve visualization options"), - #Improve RREFinder annotated BCG visibility - fileInput("rename_data", - "Upload renaming and coloring scheme"), - actionButton("rename", "Rename"), - actionButton("reset_name", "Reset"), - checkboxInput("rre_width", "Add thickness to RRE results visualization"), - checkboxInput("prism_supp_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c("Antismash" = "Antismash", - "PRISM" = "PRISM", - "RRE-Finder" = "RRE", - 'DeepBGC' = "DeepBGC", - "SEMPI" = "SEMPI", - "PRISM-supp" = "PRISM-supp", - "ARTS" = "ARTS", - "GECCO" = "GECCO" - ), - selected = 'Antismash'), - h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), - checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), - selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c("Antismash" = "A", - "PRISM" = "P", - "SEMPI" = "S"), - selected = 'A'), - selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type"), - selected = "avg_p"), - # Chose step for barplot (as a threshold to draw a bar) - sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 100, value = 0), - h3(id="data_filter_header_gecco","Gecco data filtering:"), - checkboxInput("hide_data_filter_gecco", "Hide Gecco data filtering options"), - sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), - h3(id="data_comparison_header","Comparison with DeepBGC plots:"), - checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), - selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c("Antismash" = "A", - "PRISM" = "P", - "SEMPI" = "S"), - selected = 'A'), - # Score to use for thresholds - selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 100, value = 0), - - # DeepBGC data filtering - h3(id="data_filter_header","DeepBGC data filtering:"), - checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), - # Different score filtering. Remain >= of set threshold - sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins filter. Remain >= of set threshold - sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), - - # Donwload currently used datasets - downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - - ), - - # Show plots - mainPanel( - tabsetPanel( - tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), - tabPanel(title = "Compare data with Gecco", value = 5 ,plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), - tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), - plotlyOutput("deep_reference", height = "500px")), - tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), - tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),tableOutput("group_table")), - type = "tabs", id = "main" - ) - ) - ) -) - -# Define server logic -server <- function(input, output, session) { - # - options(shiny.maxRequestSize=100*1024^2) - # Small function to make integers zeros - is.integer0 <- function(x) - { - is.integer(x) && length(x) == 0L - } - - biocircos_listen <- reactive({ - list( input$biocircos_color, vals$arts_data_filtered, input$label_color, input$label_color_class, - input$ref_col_biocircos, vals$deep_data_filtered, vals$gecco_data_filtered, vals$inters_filtered - ) - }) - inputData <- reactive({ - list( vals$sempi_data,vals$rre_data, vals$anti_data, vals$prism_data, - vals$arts_data, vals$prism_supp, vals$deep_data, vals$gecco_data - ) - }) - dynamicInput <- reactive({ - list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, - input$prot_filter_gecco, input$dup_choice, vals$need_filter - ) - }) - - - - # Rective vals the app is using - # Some dataframes that are used through the app + some vectors of untercepted values - vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness = NULL, - biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, - anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F - ) - - vals$computed <- list( - anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F - ) - - vals$rename_data <- read.csv("rename.csv") - - # Upload example data - observeEvent(input$anti_sco,{ - whereami::cat_where(whereami::whereami()) - anti_data <- read.csv("example_data/sco_antismash.csv") - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "Antismash" ) - updateSelectInput(session, "group_by", - selected = "A" ) - updateSelectInput(session, "ref_comparison", - selected = "A") - updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - updateSelectInput(session, "ref_comparison_gecco", - selected = "A") - - } - - }) - - observeEvent(input$gecco_sco,{ - whereami::cat_where(whereami::whereami()) - gecco_data <- read.delim("example_data/sco_gecco.tsv") - # Add chromosome column - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) - # Read data - gecco_data <- gecco_data %>% - mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - select(-one_of(drop_cols)) - gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" - vals$gecco_data <- gecco_data - # Save file - write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) - vals$gecco_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "GECCO" ) - updateSelectInput(session, "group_by", - selected = "G") - updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") - - } - - }) - - observeEvent(input$prism_sco,{ - # Read data - data <- fromJSON(file = "example_data/sco_prism.json") - - - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - - prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - vals$biocircos_color = F - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(regul_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(resist_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - - final_reg <- rbind(res_genes, reg_genes) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - vals$prism_supp <- final_reg - vals$prism_supp_data <- final_reg - vals$prism_json = T - vals$prism_supp_data_input=T - - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism_data$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "PRISM" ) - updateSelectInput(session, "group_by", - selected = "P" ) - updateSelectInput(session, "ref_comparison", - selected = "P") - updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - updateSelectInput(session, "ref_comparison_gecco", - selected = "P") - } - }) - - observeEvent(input$sempi_sco,{ - whereami::cat_where(whereami::whereami()) - sempi_data <- read.csv("example_data/sco_sempi.csv") - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "SEMPI" ) - updateSelectInput(session, "group_by", - selected = "S" ) - updateSelectInput(session, "ref_comparison", - selected = "S") - updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - updateSelectInput(session, "ref_comparison_gecco", - selected = "S") - } - - }) - - observeEvent(input$arts_sco, { - - data <- read.delim("example_data/sco_duptable.tsv") - - get_location_duptable <- function(x, y){ - test <- str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - - data <- read.delim("example_data/sco_knownhits.tsv") - locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - }) - - observeEvent(input$deep_sco, { - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") - # Read data - vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) - # Add chromosome info column - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "DeepBGC" ) - updateSelectInput(session, "group_by", - selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } - }) - - observeEvent(input$rre_sco, { - whereami::cat_where(whereami::whereami()) - # Read data - vals$rre_data <- read.delim("example_data/sco_rre.txt") - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - vals$rre_data['Type2'] <- 'ripp' - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", - selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } - }) - - # Read the data - observeEvent(input$anti_data,{ - # Read data - if (input$anti_input_options==T){ - anti_data <- read.csv(input$anti_data$datapath) - vals$biocircos_color = T - }else{ - data <- fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - tolower(x$qualifiers$product) - } - }) - }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - unlist(x$location) - } - }) - ) - }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - separate(split, c("Start", "Stop")) %>% - transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - vals$biocircos_color = F - - } - - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "Antismash" ) - updateSelectInput(session, "group_by", - selected = "A" ) - updateSelectInput(session, "ref_comparison", - selected = "A") - updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - updateSelectInput(session, "ref_comparison_gecco", - selected = "A") - } - - }) - - observeEvent(input$sempi_data,{ - - sempi_data <- read.csv(input$sempi_data$datapath) - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "SEMPI" ) - updateSelectInput(session, "group_by", - selected = "S" ) - updateSelectInput(session, "ref_comparison", - selected = "S") - updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - updateSelectInput(session, "ref_comparison_gecco", - selected = "S") - } - - }) - - observeEvent(input$gecco_data,{ - - gecco_data <- read.delim(input$gecco_data$datapath) - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) - # Read data - gecco_data <- gecco_data %>% - mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - select(-one_of(drop_cols)) - gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" - vals$gecco_data <- gecco_data - # Save file - write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) - vals$gecco_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "GECCO" ) - updateSelectInput(session, "group_by", - selected = "G") - updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") - } - - }) - - observeEvent(input$known_data, { - data <- read.delim(input$known_data$datapath) - locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - write.csv(vals$known_data, "knownhits_data.csv", row.names = F) - if ((vals$dup_data_input == T)){ - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - }) - - observeEvent(input$dup_data, { - data <- read.delim(input$dup_data$datapath) - - get_location_duptable <- function(x, y){ - test <- str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - write.csv(dup_table, "duptable_data.csv", row.names = F) - if ((vals$known_data_input == T)){ - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "ARTS" ) - updateSelectInput(session, "group_by", - selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - }) - - observeEvent(input$prism_data,{ - # Read data - if (input$prism_input_options == T){ - prism_data <- read.csv(input$prism_data$datapath) - vals$biocircos_color = T - } else{ - data <- fromJSON(file = input$prism_data$datapath) - - - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - vals$biocircos_color = F - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(regul_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - reg_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - reg_genes$Score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Full_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - location <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - sapply(resist_genes_orfs, function(x){ - if (y$name == x) { - y$coordinates - } - }) - }) - - location <- Filter(Negate(is.null), location) - - res_genes <-data.frame(t(data.frame(sapply(location, function(x){unlist(x)})))) - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - res_genes$Score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Full_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - - final_reg <- rbind(res_genes, reg_genes) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - vals$prism_supp <- final_reg - vals$prism_supp_data <- final_reg - vals$prism_json = T - vals$prism_supp_data_input = T - - } - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism_data$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "PRISM" ) - updateSelectInput(session, "group_by", - selected = "P" ) - updateSelectInput(session, "ref_comparison", - selected = "P") - updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - updateSelectInput(session, "ref_comparison_gecco", - selected = "P") - } - }) - - observeEvent(input$deep_data, { - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") - # Read data - vals$deep_data <- read.delim(input$deep_data$datapath) %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) - # Add chromosome info column - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "DeepBGC" ) - updateSelectInput(session, "group_by", - selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } - }) - - observeEvent(input$rre_data, { - # Read data - vals$rre_data <- read.delim(input$rre_data$datapath) - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - vals$rre_data['Type2'] <- 'ripp' - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", - selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } - }) - - # Observe input of chromosome length - observeEvent(input$chr_len,{ - vals$chr_len <- input$chr_len - }) - - # Logic for showing/hiding UI when input - observeEvent(vals$rre_data_input, { - whereami::cat_where(whereami::whereami()) - if (vals$rre_data_input == T){ - if (input$hide_viz == F){ - showElement(selector = "#rre_width") - } - } else{ - hideElement(selector = "#rre_width") - } - }) - - observeEvent(vals$anti_data_input, { - whereami::cat_where(whereami::whereami()) - if (vals$anti_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") - } - } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - } - }) - - observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - showElement(selector = "#prism_supp") - } - } - if (input$hide_viz == F){ - if (vals$prism_json == T){ - showElement(selector = "#prism_supp_width") - } - } - } else{ - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#prism_supp_width") - } - }) - - observeEvent(vals$sempi_data_input, { - whereami::cat_where(whereami::whereami()) - if (vals$sempi_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") - } - } else{ - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - } - }) - - observeEvent(vals$deep_data_input,{ - if (vals$deep_data_input == T){ - showElement(selector = "#ref_comparison") - showElement(selector = "#hide_data_comparison") - showElement(selector = "#hide_data_filter") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - showElement(selector = "#data_comparison_header") - showElement(selector = "#data_filter_header") - } else{ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#hide_data_comparison") - hideElement(selector = "#hide_data_filter") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - hideElement(selector = "#data_comparison_header") - hideElement(selector = "#data_filter_header") - } - }) - - observeEvent(vals$gecco_data_input,{ - if (vals$gecco_data_input == T){ - showElement(selector = "#data_comparison_header_gecco") - showElement(selector = "#hide_data_comparison_gecco") - showElement(selector = "#ref_comparison_gecco") - showElement(selector = "#score_type_gecco") - showElement(selector = "#plot_step_gecco") - showElement(selector = "#plot_start_gecco") - showElement(selector = "#data_filter_header_gecco") - showElement(selector = "#hide_data_filter_gecco") - showElement(selector = "#score_average_gecco") - showElement(selector = "#score_cluster_gecco") - showElement(selector = "#domains_filter_gecco") - showElement(selector = "#prot_filter_gecco") - } else{ - hideElement(selector = "#data_comparison_header_gecco") - hideElement(selector = "#hide_data_comparison_gecco") - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") - hideElement(selector = "#data_filter_header_gecco") - hideElement(selector = "#hide_data_filter_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_cluster_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") - } - }) - - observeEvent(vals$data_upload_count, { - whereami::cat_where(whereami::whereami()) - if (vals$data_upload_count <2){ - hideTab("main", "2") - hideTab("main", "3") - - }else if (vals$data_upload_count >=2){ - if (input$hide_summarize == F) { - showElement(selector = "#summarize") - showElement(selector = "#group_by") - showElement(selector = "#count_all") - } - if (input$hide_viz == F){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") - } - showTab("main", "2") - showTab("main", "3") - if (vals$gecco_data_input == T) { - showTab("main", "5") - } else { - hideTab("main", "5") - } - if (vals$deep_data_input == T) { - showTab("main", "1") - } else { - hideTab("main", "1") - } - } - if (vals$data_upload_count <1){ - hideTab("main", "4") - hideTab(inputId = "main", target = "5") - hideTab(inputId = "main", target = "1") - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#hide_genes_on_chr") - hideElement(selector = "#ref") - }else{ - showTab("main", "4") - if (input$hide_genes_on_chr == F){ - showElement(selector = "#genes_on_chr") - showElement(selector = "#hide_genes_on_chr") - showElement(selector = "#ref") - } - - } - }) - - observeEvent(input$label_color_class, { - if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") - } else { - hideElement(selector = "#ref_col_biocircos") - } - }) - - observeEvent(input$anti_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$anti_hybrid==T){ - vals$anti_data$Type2 <- hybrid_col(vals$anti_data) - }else { - vals$anti_data$Type2 <- vals$anti_type - } - - }) - - observeEvent(input$prism_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$prism_hybrid==T){ - vals$prism_data$Type2 <- hybrid_col(vals$prism_data) - }else { - vals$prism_data$Type2 <- vals$prism_type - } - }) - - observeEvent(input$sempi_hybrid, { - hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - - if (input$sempi_hybrid==T){ - vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) - }else { - vals$sempi_data$Type2 <- vals$sempi_type - } - }) - - observeEvent(vals$arts_data_input,{ - if (vals$arts_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } - if (input$hide_viz == F){ - showElement(selector = "#arts_width") - } - } else { - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - hideElement(selector = "#arts_width") - } - }) - - observeEvent(input$rename, { - rename_vector <- function(data, renamed_dataframe){ - type <- str_split(data$Type, "__") - type_2 <- sapply(type, function(x){ - sapply(x, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) - if (length(renamed) >1){ - showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), - type = "warning", duration = NULL) - showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) - } - renamed[[1]] - } else { - y - } - - }) - - }) - type_3 <- sapply(type_2, function(x){ - dupl <- x[!duplicated(x)] - paste(dupl, collapse = "__") - }) - type_4 <- sapply(type_3, function(y){ - if (y %in% as.character(renamed_dataframe$Code)){ - as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] - } else { - y - } - }) - return(as.character(type_4)) - } - rename_data <- vals$rename_data - if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") - vals$anti_type <- rename_vector(anti_data, rename_data) - anti_data['Type2'] <- vals$anti_type - vals$anti_data <- anti_data - } - - if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") - vals$sempi_type <- rename_vector(sempi_data, rename_data) - sempi_data['Type2'] <- vals$sempi_type - vals$sempi_data <- sempi_data - } - - if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") - vals$prism_type <- rename_vector(prism_data, rename_data) - prism_data['Type2'] <- vals$prism_type - vals$prism_data <- prism_data - } - vals$biocircos_color = T - }) - - observeEvent(input$reset_name, { - - vals$anti_data['Type2'] <- vals$anti_data['Type'] - vals$sempi_data['Type2'] <- vals$sempi_data['Type'] - vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - vals$biocircos_color = FALSE - }) - - observeEvent(input$rename_data,{ - rename_data <- read.csv(input$rename_data$datapath) - vals$rename_data <- rename_data - }) - - observeEvent(input$hide_uploads, { - if (input$hide_uploads == T){ - hideElement(selector = "#anti_input_options") - hideElement(selector = "#anti_data") - hideElement(selector = "#prism_input_options") - hideElement(selector = "#anti_header_upload") - hideElement(selector = "#prism_header_upload") - hideElement(selector = "#prism_data") - hideElement(selector = "#sempi_header_upload") - hideElement(selector = "#sempi_data") - hideElement(selector = "#deep_header_upload") - hideElement(selector = "#deep_data") - hideElement(selector = "#gecco_header_upload") - hideElement(selector = "#gecco_data") - hideElement(selector = "#rre_header_upload") - hideElement(selector = "#rre_data") - hideElement(selector = "#chr_len") - hideElement(selector = "#arts_header_upload") - hideElement(selector = "#known_data") - hideElement(selector = "#dup_data") - hideElement(selector = "#anti_sco") - hideElement(selector = "#prism_sco") - hideElement(selector = "#arts_sco") - hideElement(selector = "#rre_sco") - hideElement(selector = "#sempi_sco") - hideElement(selector = "#deep_sco") - hideElement(selector = "#gecco_sco") - }else { - showElement(selector = "#anti_input_options") - showElement(selector = "#anti_data") - showElement(selector = "#prism_input_options") - showElement(selector = "#anti_header_upload") - showElement(selector = "#prism_header_upload") - showElement(selector = "#prism_data") - showElement(selector = "#sempi_header_upload") - showElement(selector = "#sempi_data") - showElement(selector = "#deep_header_upload") - showElement(selector = "#deep_data") - showElement(selector = "#gecco_header_upload") - showElement(selector = "#gecco_data") - showElement(selector = "#rre_header_upload") - showElement(selector = "#rre_data") - showElement(selector = "#chr_len") - showElement(selector = "#arts_header_upload") - showElement(selector = "#known_data") - showElement(selector = "#dup_data") - showElement(selector = "#anti_sco") - showElement(selector = "#prism_sco") - showElement(selector = "#arts_sco") - showElement(selector = "#rre_sco") - showElement(selector = "#sempi_sco") - showElement(selector = "#deep_sco") - showElement(selector = "#gecco_sco") - } - }) - - observeEvent(input$hide_anti, { - if (input$hide_anti== T){ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - }else{ - if (vals$anti_data_input == T){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") - } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - } - if (vals$prism_data_input == T){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - showElement(selector = "#prism_supp") - } - } else { - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - } - if (vals$sempi_data_input == T){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") - } else { - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } else{ - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - } - } - }) - - observeEvent(input$hide_genes_on_chr, { - if (input$hide_genes_on_chr == T){ - hideElement(selector = "#ref") - } else { - if (vals$data_upload_count > 0){ - showElement(selector = "#ref") - } else { - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#ref") - } - } - }) - - observeEvent(input$hide_summarize, { - if (input$hide_summarize == T){ - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } else { - if (vals$data_upload_count > 1){ - showElement(selector = "#group_by") - showElement(selector = "#count_all") - } else { - hideElement(selector = "#summarize") - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") - } - - } - }) - - observeEvent(input$hide_viz, { - if (input$hide_viz == T){ - hideElement(selector = "#rename_data") - hideElement(selector = "#rename") - hideElement(selector = "#reset_name") - hideElement(selector = "#rre_width") - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - hideElement(selector = "#ref_col_biocircos") - hideElement(selector = "#arts_header") - } else{ - showElement(selector = "#rename_data") - showElement(selector = "#rename") - showElement(selector = "#reset_name") - if (vals$rre_data_input == T){ - showElement(selector = "#rre_width") - } else { - hideElement(selector = "#rre_width") - } - if (vals$prism_json == T){ - showElement(selector = "#prism_supp_width") - } - else { - hideElement(selector = "#prism_supp_width") - } - if (vals$data_upload_count > 1){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") - } else { - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - } - if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") - } else { - hideElement(selector = "#ref_col_biocircos") - } - if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - } else { - hideElement(selector = "#arts_header") - } - - } - }) - - observeEvent(input$hide_data_comparison, { - if ((input$hide_data_comparison == T)){ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - } else if (vals$deep_data_input == T) { - showElement(selector = "#ref_comparison") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - } else { - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - } - }) - - observeEvent(input$hide_data_filter, { - if ((input$hide_data_filter == T)){ - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - } else if (vals$deep_data_input == T){ - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - } else { - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - } - }) - - observeEvent(input$hide_data_comparison_gecco, { - if ((input$hide_data_comparison_gecco == T)){ - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") - } else if (vals$gecco_data_input == T) { - showElement(selector = "#ref_comparison_gecco") - showElement(selector = "#score_type_gecco") - showElement(selector = "#plot_step_gecco") - showElement(selector = "#plot_start_gecco") - } else { - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") - } - }) - - observeEvent(input$hide_data_filter_gecco, { - if ((input$hide_data_filter_gecco == T)){ - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") - } else if (vals$gecco_data_input == T){ - showElement(selector = "#score_average_gecco") - showElement(selector = "#score_average_gecco") - showElement(selector = "#domains_filter_gecco") - showElement(selector = "#prot_filter_gecco") - } else { - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") - } - }) - - observeEvent(inputData(), { - req(vals$data_upload_count >1) - whereami::cat_where(whereami::whereami()) - # GENERATE DATA - if (vals$anti_data_input == TRUE){ - anti_data <- vals$anti_data - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - - } - if (vals$deep_data_input == TRUE){ - deep_data <- vals$deep_data - deep_inter <- vals$deep_data %>% - select(nucl_start, nucl_end) - - deep_inter$seqnames <- "chr" - } - if (vals$rre_data_input == TRUE){ - # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(vals$rre_data) - # Start/Stop columns from rre data as matrix - rre_inter <- rre_data %>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - } - if (vals$prism_data_input == TRUE){ - # Store master prism data in local variable - prism_data <- vals$prism_data - # Start/Stop columns from prism data as matrix - prism_inter <- prism_data %>% - select(Start,Stop) - prism_inter$seqnames <- "chr" - } - if (vals$sempi_data_input == TRUE){ - # Store master prism data in local variable - sempi_data <- vals$sempi_data - # Start/Stop columns from prism data as matrix - sempi_inter <- vals$sempi_data %>% - select(Start,Stop) - sempi_inter$seqnames <- "chr" - } - if (vals$prism_supp_data_input == T){ - prism_supp_data <- vals$prism_supp_data - prism_supp_inter <- vals$prism_supp_data %>% - select(Start,Stop) - prism_supp_inter$seqnames <- "chr" - if (vals$prism_supp_data_input_width == TRUE) { - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 - } else{ - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) - } - } - if (vals$arts_data_input == T){ - arts_data <- vals$arts_data - arts_inter <- vals$arts_data %>% - select(Start,Stop) - arts_inter$seqnames <- "chr" - } - if (vals$gecco_data_input == TRUE){ - gecco_data <- vals$gecco_data - # Start/Stop columns from prism data as matrix - gecco_inter <- vals$gecco_data %>% - select(Start,Stop) - gecco_inter$seqnames <- "chr" - } - - get_inter <- function(inter1, inter2){ - query <- makeGRangesFromDataFrame(inter2) - subject <- makeGRangesFromDataFrame(inter1) - interseption <- findOverlaps(query,subject) - inter_from <- interseption@from - inter_to <- interseption@to - return(list(from = inter_from, to = inter_to)) - } - - inters <- vals$inters - #inters_filtered <- vals$inters_filtered - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - - #TESTING -# computed <- list( -# anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F -# ) - - - index = 1 - for (i in data_uploads){ - index_2 = 1 - j = soft_names[index] - for (p in data_uploads){ - x = soft_names[index_2] - if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ - if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ - res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) - new_res <- list() - new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster - new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster - inters[[j]][[x]] <- new_res - inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) - #inters_filtered[[j]][[x]] <- new_res - #inters_filtered[[x]][[j]] <- list(from=new_res$to, to=new_res$from) - - } - - } - index_2 = index_2 +1 - } - if (vals[[i]] == TRUE){ - vals$computed[[j]] <- TRUE - } - index = index +1 - } - - vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ - vals$inters_filtered <- inters - } else{ - vals$need_filter <- T - } - - -#### TESTING -# score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) -# score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) -# score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) -# -# deep_data <- vals$deep_data%>% -# mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% -# filter(score_a >= 0.5, score_c >=0.5 , score_d >= 0.8, num_domains >= 5, -# num_bio_domains>=3, num_proteins>=3) -# vals <- list( -# anti_data_input = T, -# sempi_data_input = T, -# prism_data_input = T, -# prism_supp = T, -# arts_data_input = T, -# deep_data_input = T, -# gecco_data_input = T, -# rre_data_input = T, -# anti_data = anti_data, -# deep_data = deep_data, -# prism_data = prism_data, -# rre_data = rre_data, -# arts_data = arts_data, -# sempi_data = sempi_data, -# gecco_data = gecco_data, -# prism_supp_data = prism_supp, -# rre_more = F, -# biocircos_gecco = gecco_data, -# computed=computed -# ) - - }) - - observeEvent(dynamicInput(), { - req(vals$data_upload_count>1) - whereami::cat_where(whereami::whereami()) - inters <- vals$inters - if (vals$deep_data_input == TRUE){ - # Get vector of max values from chosen columns from deepbgc data - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - vals$deep_data_filtered <- biocircos_deep - new_deep <- lapply(inters$deep, function(x){ - new_to <- x$to[x$to %in% biocircos_deep$Cluster] - new_from <- x$from[x$to %in% biocircos_deep$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$deep) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from - new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to - } - new_inters$deep <- new_deep - vals$inters_filtered <- new_inters - inters <- new_inters - } - if (vals$gecco_data_input == TRUE){ - score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store master prism data in local variable - gecco_data <- vals$gecco_data %>% - mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) - - vals$gecco_data_filtered <- gecco_data - new_gecco <- lapply(inters$gecco, function(x){ - new_to <- x$to[x$to %in% gecco_data$Cluster] - new_from <- x$from[x$to %in% gecco_data$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$gecco) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from - new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to - } - new_inters$gecco <- new_gecco - vals$inters_filtered <- new_inters - inters <- new_inters - } - if (vals$arts_data_input == TRUE){ - if (input$dup_choice != "All"){ - vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - filter(Core == input$dup_choice | Core == "Not_core") - new_arts <- lapply(inters$arts, function(x){ - new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] - new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$arts) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from - new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to - } - new_inters$arts <- new_arts - vals$inters_filtered <- new_inters - inters <- new_inters - } else { - vals$arts_data_filtered <- vals$arts_data - } - } - if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { - vals$inters_filtered <- inters - } - vals$need_filter <- F - }) - - observeEvent(biocircos_listen(), { - req(vals$data_upload_count >=2) - whereami::cat_where(whereami::whereami()) - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - inters <- vals$inters_filtered - - rename_data <- vals$rename_data - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - # Store data in local variable - biocircos_anti <- vals$anti_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["Antismash"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep("Antismash", length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #DEEPBGC - if (vals$deep_data_input == TRUE){ - biocircos_deep <- vals$deep_data_filtered - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["DeepBGC"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("DeepBGC", length(biocircos_deep$bgc_candidate_id))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_deep$nucl_start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_deep$nucl_end) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_deep$product_class) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_deep$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #RRE-FINDER - if (vals$rre_data_input == TRUE){ - biocircos_rre <- data.frame(vals$rre_data) - biocircos_rre$Start <- as.numeric(biocircos_rre$Start) - biocircos_rre$Stop <- as.numeric(biocircos_rre$Stop) - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["RRE"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("RRE", length(biocircos_rre$Locus_tag))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_rre$Start) - # Stop position of arcs. - if (input$rre_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_rre$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_rre$E.value) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_rre$Type, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - # Store data in local variable - biocircos_prism <- vals$prism_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM", length(biocircos_prism$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_prism$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - # Store data in local variable - biocircos_sempi <- vals$sempi_data - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["SEMPI"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("SEMPI", length(biocircos_sempi$Cluster))) - - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_sempi$Start ) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_sempi$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_sempi$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_sempi$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - if (vals$prism_supp_data_input == TRUE){ - # Store data in local variable - biocircos_prism_supp <- vals$prism_supp - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["PRISM-supp"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("PRISM-supp", length(biocircos_prism_supp$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_prism_supp$Start ) - if (vals$prism_supp_data_input_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)+50000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_prism_supp$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels,biocircos_prism_supp$Type ) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_prism_supp$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - - if (vals$arts_data_input == TRUE){ - biocircos_arts <- data.frame(vals$arts_data_filtered) - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["ARTS"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep("ARTS", length(biocircos_arts$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_arts$Start) - # Stop position of arcs. - if (input$arts_width == TRUE) { - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)+20000) - }else{ - arcs_end <- c(arcs_end, as.numeric(biocircos_arts$Stop)) - } - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_arts$Type2) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_arts$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <-rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - if (vals$gecco_data_input == TRUE){ - biocircos_gecco <- vals$gecco_data_filtered - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[["GECCO"]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep("GECCO", length(biocircos_gecco$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_gecco$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_gecco$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_gecco$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_gecco$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] - } else { - rename_data$Color[rename_data$Group_color == 'base'] - } - }) - } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - } - - # Add to tracklist. Then it can be populated with links - tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - - chromosomes_start <- c() - chromosomes_end <- c() - link_pos_start <- c() - link_pos_start_1 <- c() - link_pos_end <- c() - link_pos_end_2 <- c() - label_1 <- c() - label_2 <- c() - label_color <- c() - - #CALCULATIONS - # ----------------------------------------- - - - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_s_rre_n <- data1_inter - inter_rre_s <- data2_inter - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[data2$Cluster %in% inter_rre_s] )) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[data2$Cluster %in% inter_rre_s])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[data1$Cluster %in% inter_s_rre_n])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[data1$Cluster %in% inter_s_rre_n])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) - if (!is.null(inter_rre_s)){ - if (class == 'P'){ - subset_vec <- data2$Type2[data2$Cluster %in% inter_rre_s] == data1$Type2[data1$Cluster %in% inter_s_rre_n] - label_color <- as.character(c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) - } - else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) - } - }))) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- as.character(rename_data$Color[rename_data$Group_color == 'base']) - } - } - } - } - } else if (class == 'H'){ - if (grep(data1_label, rename_data$Hierarchy) < (grep(data2_label, rename_data$Hierarchy))){ - label_color <- as.character(c(sapply(data1$Type2[data1$Cluster %in% inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) - } - else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) - } - }))) - } else { - label_color <-as.character( c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) - } - else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) - } - }))) - } - }else if (class == 'R'){ - if (data2_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data1$Type2[data1$Cluster %in% inter_s_rre_n], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) - } - else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) - } - }))) - } else if (data1_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data2$Type2[data2$Cluster %in% inter_rre_s], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) - } - else{ - as.character( rename_data$Color[rename_data$Group_color == 'base']) - } - }))) - } else{ - label_color <- as.character(rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) - } - } else { - label_color <-as.character( rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) - } - } - return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) - } - - - - if (vals$gecco_data_input == TRUE){ - if (vals$anti_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$anti$from, inters$gecco$anti$to, biocircos_anti, biocircos_gecco, "Antismash", "GECCO", rename_data, input$label_color_class) - - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$prism$from, inters$gecco$prism$to, biocircos_prism, biocircos_gecco, "PRISM", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with deepbgc - if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$deep$from, inters$gecco$deep$to, biocircos_deep, biocircos_gecco, "DeepBGC", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of antismash with RREFinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$rre$from, inters$gecco$rre$to, biocircos_rre, biocircos_gecco, "RRE", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$sempi$from, inters$gecco$sempi$to, biocircos_sempi, biocircos_gecco, "SEMPI", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$prism_supp$from, inters$gecco$prism_supp$to, biocircos_prism_supp, biocircos_gecco, "PRISM-supp", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$gecco$arts$from, inters$gecco$arts$to, biocircos_arts, biocircos_gecco, "ARTS", "GECCO", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - vals$biocircos_gecco <- biocircos_gecco - write.csv(biocircos_gecco, "gecco_biocircos.csv", row.names = F) - } - - # ANTISMASH - if (vals$anti_data_input == TRUE){ - - # Get interception of antismash with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$prism$from, inters$anti$prism$to, biocircos_prism, biocircos_anti, "PRISM", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with deepbgc - if (vals$deep_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$deep$from, inters$anti$deep$to, biocircos_deep, biocircos_anti, "DeepBGC", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of antismash with RREFinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$rre$from, inters$anti$rre$to, biocircos_rre, biocircos_anti, "RRE", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of antismash with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$sempi$from, inters$anti$sempi$to, biocircos_sempi, biocircos_anti, "SEMPI", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$prism_supp$from, inters$anti$prism_supp$to, biocircos_prism_supp, biocircos_anti, "PRISM-supp", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$anti$arts$from, inters$anti$arts$to, biocircos_arts, biocircos_anti, "ARTS", "Antismash", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_anti, "antismash_biocircos.csv", row.names = F) - } - - # DEEPBGC - if (vals$deep_data_input == TRUE){ - - # Get interception of DeepBGC with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(inters$deep$rre$from, inters$deep$rre$to, biocircos_rre, biocircos_deep, "RRE", "DeepBGC", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with PRISM - if (vals$prism_data_input == TRUE){ - output <- add_biocircos_data(inters$deep$prism$from, inters$deep$prism$to, biocircos_prism, biocircos_deep, "PRISM", "DeepBGC", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - # Safe used local variables to the reactive ones - } - # Get interception of DeepBGC with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(inters$deep$sempi$from, inters$deep$sempi$to, biocircos_sempi, biocircos_deep, "SEMPI", "DeepBGC", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$deep$prism_supp$from, inters$deep$prism_supp$to, biocircos_prism_supp, biocircos_deep, "PRISM-supp", "DeepBGC", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$deep$arts$from, inters$deep$arts$to, biocircos_arts, biocircos_deep, "ARTS", "DeepBGC", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Safe used local variables to the reactive ones - vals$biocircos_deep <- biocircos_deep - # Write csvs with locally used variables - write.csv(biocircos_deep, "deepbgc_biocircos.csv", row.names = F) - } - - # PRISM - if (vals$prism_data_input == TRUE){ - - # Get interception of PRISM with rrefinder - if (vals$rre_data_input == TRUE){ - output <- add_biocircos_data(inters$prism$rre$from, inters$prism$rre$to, biocircos_rre, biocircos_prism, "RRE", "PRISM", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Get interception of PRISM with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(inters$prism$sempi$from, inters$prism$sempi$to, biocircos_sempi, biocircos_prism, "SEMPI", "PRISM", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$prism$prism_supp$from, inters$prism$prism_supp$to, biocircos_prism_supp, biocircos_prism, "PRISM-supp", "PRISM", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$prism$arts$from, inters$prism$arts$to, biocircos_arts, biocircos_prism, "ARTS", "PRISM", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_prism, "prism_biocircos.csv", row.names = F) - } - - # RRE-FINDER - if (vals$rre_data_input == TRUE){ - - # Get interception of RRE with SEMPI - if (vals$sempi_data_input == TRUE){ - output <- add_biocircos_data(inters$rre$sempi$from, inters$rre$sempi$to, biocircos_sempi, biocircos_rre, "SEMPI", "RRE", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$rre$prism_supp$from, inters$rre$prism_supp$to, biocircos_prism_supp, biocircos_rre, "PRISM-supp", "RRE", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$rre$arts$from, inters$rre$arts$to, biocircos_arts, biocircos_rre, "ARTS", "RRE", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_rre, "rre_biocircos.csv", row.names = F) - } - - #SEMPI - if (vals$sempi_data_input == TRUE){ - if (vals$prism_supp_data_input == TRUE){ - output <- add_biocircos_data(inters$sempi$prism_supp$from, inters$sempi$prism_supp$to,biocircos_prism_supp, biocircos_sempi, "PRISM-supp", "SEMPI", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$sempi$arts$from, inters$sempi$arts$to,biocircos_arts, biocircos_sempi, "ARTS", "SEMPI", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - # Write csvs with locally used variables - write.csv(biocircos_sempi, "sempi_biocircos.csv", row.names = F) - } - - if (vals$prism_supp_data_input == TRUE){ - if (vals$arts_data_input == TRUE){ - output <- add_biocircos_data(inters$prism_supp$arts$from, inters$prism_supp$arts$to,biocircos_arts, biocircos_prism_supp, "ARTS", "PRISM-supp", rename_data, input$label_color_class) - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - #Write csvs with locally used variables - write.csv(biocircos_prism_supp, "prism_supp_biocircos.csv", row.names = F) - } - - if (vals$arts_data_input == TRUE){ - #Write csvs with locally used variables - write.csv(biocircos_arts, "arts_biocircos.csv", row.names = F) - } - - - - - # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - # Add links and labels to the track list for subsequent visualization - if (input$label_color == T){ - group_colors <- count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) - } - } else{ - tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) - } - - vals$tracklist <- tracklist - vals$Biocircos_chromosomes <- Biocircos_chromosomes - }) - #Render output plots - - # Render barplot - output$deep_barplot <- renderPlot({ - whereami::cat_where(whereami::whereami()) - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- drop_na(fullnes_of_annotation) - - deep_inter_1 <- vals$deep_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type == "Activity") { - score <- "score_a" - } else if (input$score_type == "DeepBGC") { - score <- "score_d" - } else if (input$score_type == "Cluster_Type") { - score <- "score_c" - } - deep_inter_1$score <- deep_inter_1[[score]] - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - - deep_inter <- deep_inter_1 %>% - filter(score>=dataframe_1/100) %>% - select(Start, Stop) - if (length(deep_inter$Start) > 0) { - deep_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'A'){ - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'P'){ - anti_inter <- vals$prism_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'S'){ - anti_inter <- vals$sempi_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(deep_inter$Start) > 0) { - query <- makeGRangesFromDataFrame(deep_inter) - subject <- makeGRangesFromDataFrame(anti_inter) - interseption <- findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(deep_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison == 'A'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'P'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc - cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'S') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc - cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness <- data.frame(fullnes_of_annotation) - write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), - paste("DeepBGC score:", as.character(input$score_d)), - paste("Cluster type score:", as.character(input$score_c)), sep = "\n") - - # Plot the barplot - ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + - geom_bar(position="dodge", stat="identity")+ - geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + - xlab(paste(input$score_type,"Score")) + - title + - geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$deep_rate <- renderPlotly({ - whereami::cat_where(whereami::whereami()) - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous renderPlot - fullnes_of_annotation <- data.frame(vals$fullness) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'A'){ - data <- vals$anti_data - title <- ggtitle("Rates of DeepBGC/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'P'){ - data <- vals$prism_data - title <- ggtitle("Rates of DeepBGC/PRISM data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'S'){ - data <- vals$sempi_data - title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - ggplotly(test %>% - pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - geom_line(aes(color=Rates)) + - geom_point(aes(shape=Rates), alpha = .4, size = 3) + - title + - ylab("Rate") + - xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) - - # Render barplot - output$gecco_barplot <- renderPlot({ - whereami::cat_where(whereami::whereami()) - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- drop_na(fullnes_of_annotation) - - gecco_inter_1 <- vals$gecco_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type_gecco == "avg_p") { - score <- "score_a" - } else if (input$score_type_gecco == "Cluster_Type") { - score <- "score_c" - } - gecco_inter_1$score <- gecco_inter_1[[score]] - - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - - # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix - gecco_inter <- gecco_inter_1 %>% - filter(score>=dataframe_1/100) %>% - select(Start, Stop) - if (length(gecco_inter$Start) > 0) { - gecco_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == 'A'){ - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'P'){ - anti_inter <- vals$prism_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'S'){ - anti_inter <- vals$sempi_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(gecco_inter$Start) > 0) { - query <- makeGRangesFromDataFrame(gecco_inter) - subject <- makeGRangesFromDataFrame(anti_inter) - interseption <- findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(gecco_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison_gecco == 'A'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'P'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc - cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") - title <- ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'S') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc - cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") - title <- ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness <- data.frame(fullnes_of_annotation) - write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), - paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") - - # Plot the barplot - ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + - geom_bar(position="dodge", stat="identity")+ - geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + - xlab(paste(input$score_type,"Score")) + - title + - geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$gecco_rate <- renderPlotly({ - whereami::cat_where(whereami::whereami()) - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous renderPlot - fullnes_of_annotation <- data.frame(vals$fullness) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == 'A'){ - data <- vals$anti_data - title <- ggtitle("Rates of GECCO/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'P'){ - data <- vals$prism_data - title <- ggtitle("Rates of GECCO/PRISM data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'S'){ - data <- vals$sempi_data - title <- ggtitle("Rates of GECCO/SEMPI data annotation") - test <- test %>% - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - ggplotly(test %>% - pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - geom_line(aes(color=Rates)) + - geom_point(aes(shape=Rates), alpha = .4, size = 3) + - title + - ylab("Rate") + - xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) - - # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information - # For antismash and PRISM data showed only ID, Start, Stop, Type - output$deep_reference <- renderPlotly({ - - whereami::cat_where(whereami::whereami()) - # req(vals$data_upload_count >=1) - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft <- c("Antismash","SEMPI","PRISM","PRISM_SUPPORT","ARTS","DeepBGC","GECCO","RRE-Finder" ) - abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") - - inters <- vals$inters_filtered - - # GENERATE DATA - if (vals$anti_data_input == TRUE){ - # Store antismash data in local variable, with column renaming - anti_data <- vals$anti_data - # Extract only Start and Stop from antismash data into matrix - anti_inter <- vals$anti_data %>% - select(Start, Stop) - anti_inter$seqnames <- "chr" - - } - if (vals$deep_data_input == TRUE){ - deep_data <- vals$deep_data_filtered - deep_inter <- deep_data %>% - select(nucl_start, nucl_end) - - deep_inter$seqnames <- "chr" - } - if (vals$rre_data_input == TRUE){ - # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(vals$rre_data) - # Start/Stop columns from rre data as matrix - rre_inter <- rre_data %>% - select(Start, Stop) - rre_inter$seqnames <- "chr" - if (input$rre_width == TRUE) { - Stop_vals_RRE <- as.numeric(vals$rre_data$Stop)+50000 - } else{ - Stop_vals_RRE <- as.numeric(vals$rre_data$Stop) - } - } - if (vals$prism_data_input == TRUE){ - # Store master prism data in local variable - prism_data <- vals$prism_data - # Start/Stop columns from prism data as matrix - prism_inter <- prism_data %>% - select(Start,Stop) - prism_inter$seqnames <- "chr" - } - if (vals$sempi_data_input == TRUE){ - # Store master prism data in local variable - sempi_data <- vals$sempi_data - # Start/Stop columns from prism data as matrix - sempi_inter <- vals$sempi_data %>% - select(Start,Stop) - sempi_inter$seqnames <- "chr" - } - if (vals$prism_supp_data_input == T){ - prism_supp_data <- vals$prism_supp - prism_supp_inter <- prism_supp %>% - select(Start,Stop) - prism_supp_inter$seqnames <- "chr" - if (vals$prism_supp_data_input_width == TRUE) { - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop)+50000 - } else{ - Stop_vals_prism_supp <- as.numeric(vals$prism_supp$Stop) - } - } - if (vals$arts_data_input == T){ - arts_data <- vals$arts_data_filtered - arts_inter <- arts_data %>% - select(Start,Stop) - arts_inter$seqnames <- "chr" - if (input$arts_width == TRUE) { - Stop_vals_arts <- as.numeric(arts_data$Stop)+20000 - } else{ - Stop_vals_arts<- as.numeric(arts_data$Stop) - } - } - if (vals$gecco_data_input == TRUE){ - gecco_data <- vals$gecco_data_filtered - # Start/Stop columns from prism data as matrix - gecco_inter <- gecco_data %>% - select(Start,Stop) - gecco_inter$seqnames <- "chr" - } - lett <- rev(LETTERS)[1:9] - simple_seg <- function(df, letter, software, soft_name ,soft){ - data <- df[df$Cluster %in% inters[[soft]][[soft_name]]$from, ] - - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) - } - - geom_anti <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_deep <- function(data){ - geom_segment(data=data,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - geom_rre <- function(data){ - if (vals$rre_more == T){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) - } - } - geom_sempi <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism_supp <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - geom_arts <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) - } - geom_gecco <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - - - add_arts <- function(seg_df, soft, df){ - if (input$arts_width == TRUE) { - Stop_vals_arts_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$arts$from, ]$Stop)+20000 - } else{ - Stop_vals_arts_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$arts$from, ]$Stop) - } - seg_df$Hit = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Hit - seg_df$xend = Stop_vals_arts_in - seg_df$Core = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Core - seg_df$Count = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Count - seg_df$E_value = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Evalue - seg_df$Bitscore = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Bitscore - seg_df$Model = df[df$Cluster %in% inters[[soft]]$arts$from, ]$Model - return(seg_df) - } - add_prism_supp <- function(seg_df, soft, df){ - if (vals$prism_supp_data_input_width == TRUE) { - Stop_vals_prism_supp_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Stop)+50000 - } else{ - Stop_vals_prism_supp_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Stop) - } - seg_df$xend <- Stop_vals_prism_supp_in - seg_df$Score = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Score - seg_df$Name = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Name - seg_df$Full_name = df[df$Cluster %in% inters[[soft]]$prism_supp$from, ]$Full_name - return(seg_df) - } - add_deep <- function(seg_df, soft, df){ - seg_df$num_domains = df[df$Cluster %in% inters[[soft]]$deep$from, ]$num_domains - seg_df$deepbgc_score = df[df$Cluster %in% inters[[soft]]$deep$from, ]$deepbgc_score - seg_df$activity = df[df$Cluster %in% inters[[soft]]$deep$from, ]$product_activity - return(seg_df) - } - add_rre <- function(seg_df, soft, df){ - if (input$rre_width == TRUE) { - Stop_vals_RRE_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop)+50000 - } else{ - Stop_vals_RRE_in <- as.numeric(df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop) - } - if (vals$rre_more == T){ - seg_df$xend=Stop_vals_RRE_in - seg_df$Score = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Score - seg_df$Stop = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Stop - seg_df$E_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$E.value - seg_df$P_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$P.value - seg_df$RRE_start = df[df$Cluster %in% inters[[soft]]$rre$from, ]$RRE.start - seg_df$RRE_stop = df[df$Cluster %in% inters[[soft]]$rre$from, ]$RRE.end - seg_df$Probability = df[df$Cluster %in% inters[[soft]]$rre$from, ]$Probability - } else { - seg_df$xend=Stop_vals_RRE_in - seg_df$E_value = df[df$Cluster %in% inters[[soft]]$rre$from, ]$E.value - } - - return(seg_df) - } - add_gecco <- function(seg_df, soft, df){ - seg_df$Num_proteins = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$num_prot - seg_df$Num_domains = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$num_domains - seg_df$Average_p = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$average_p - seg_df$Max_p = df[df$Cluster %in% inters[[soft]]$gecco$from, ]$max_p - return(seg_df) - } - - add_more_annot <- function(seg_df, plot, soft_names, index){ - if (dim(seg_df)[1] > 0){ - if (soft_names[index] == "anti"){ - plot <- plot + geom_anti(seg_df) - } else if (soft_names[index] == "sempi") { - plot <- plot + geom_sempi(seg_df) - } - else if (soft_names[index] == "prism") { - plot <- plot + geom_prism(seg_df) - } - else if (soft_names[index] == "prism_supp") { - plot <- plot + geom_prism_supp(seg_df) - } - else if (soft_names[index] == "arts") { - plot <- plot + geom_arts(seg_df) - } - else if (soft_names[index] == "deep") { - plot <- plot + geom_deep(seg_df) - } - else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df) - } else if (soft_names[index] == "gecco") { - plot <- plot+geom_gecco(seg_df) - } - return(plot) - } else{ - return(plot) - } - } - - define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df ){ - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ - seg_df <- add_prism_supp(seg_df, soft_major, df) - } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ - seg_df <- add_arts(seg_df, soft_major, df) - } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ - seg_df <- add_deep(seg_df, soft_major, df) - } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ - seg_df <- add_gecco(seg_df, soft_major, df) - } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ - seg_df <- add_rre(seg_df, soft_major, df) - } - return(seg_df) - } - - # MAKE COMPUTATIONS - if (vals$gecco_data_input == TRUE){ - seg_ref_g <- data.frame(x=as.numeric(vals$biocircos_gecco$Start), - y=rep("Z", length(vals$biocircos_gecco$Cluster)), - xend=as.numeric(vals$biocircos_gecco$Stop), - yend=rep("Z", length(vals$biocircos_gecco$Cluster)), - Type = as.factor(vals$biocircos_gecco$Type), - Type2 = as.factor(vals$biocircos_gecco$Type2), - Software = rep("GECCO", length(vals$biocircos_gecco$Cluster)), - ID = vals$biocircos_gecco$Cluster, - Start = vals$biocircos_gecco$Start, - Stop = vals$biocircos_gecco$Stop, - Num_proteins = vals$biocircos_gecco$num_prot, - Num_domains = vals$biocircos_gecco$num_domains, - Average_p = vals$biocircos_gecco$average_p, - Max_p = vals$biocircos_gecco$max_p) - seg_ref <- seg_ref_g - - if (input$ref == "GECCO") { - plot <- ggplot(vals$biocircos_gecco, aes(x = vals$chr_len, y = Chr)) + geom_gecco(seg_ref) - soft_major <- "gecco" - soft_let <- "G" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - - - } - vals$seg_df_ref_g <- data.frame(x=as.numeric(vals$biocircos_gecco$Start), - y=rep("S", length(vals$biocircos_gecco$Cluster)), - xend=as.numeric(vals$biocircos_gecco$Stop), - yend=rep("S", length(vals$biocircos_gecco$Cluster)), - Type = as.factor(vals$biocircos_gecco$Type), - Type2 = as.factor(vals$biocircos_gecco$Type2), - Software = rep("GECCO", length(vals$biocircos_gecco$Cluster)), - ID = vals$biocircos_gecco$Cluster, - Start = vals$biocircos_gecco$Start, - Stop = vals$biocircos_gecco$Stop, - Num_proteins = vals$biocircos_gecco$num_prot, - Num_domains = vals$biocircos_gecco$num_domains, - Average_p = vals$biocircos_gecco$average_p, - Max_p = vals$biocircos_gecco$max_p) - } - if (vals$anti_data_input == TRUE){ - seg_ref_a <- data.frame(x=as.numeric(anti_data$Start), - y=rep("Z", length(anti_data$Cluster)), - xend=as.numeric(anti_data$Stop), - yend=rep("Z", length(anti_data$Cluster)), - Type = as.factor(anti_data$Type), - Type2 = as.factor(anti_data$Type2), - Software = rep("Antismash", length(anti_data$Cluster)), - ID = anti_data$Cluster, - Start = anti_data$Start, - Stop = anti_data$Stop) - seg_ref <- seg_ref_a - if (input$ref == "Antismash") { - plot <- ggplot(anti_data, aes(x = vals$chr_len, y = Chr)) + geom_anti(seg_ref) - soft_major <- "anti" - soft_let <- "A" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - - } - vals$seg_df_ref_a <- seg_ref_a - } - if (vals$deep_data_input == TRUE){ - # Create a dataframe with all deepbgc data + the additional info to visualize on hover - seg_ref_d <- data.frame(x=as.numeric( deep_data$nucl_start), - y=rep("Z", length(deep_data$ID)), - xend=as.numeric( deep_data$nucl_end), - yend=rep("Z", length(deep_data$ID)), - Type = as.factor(deep_data$product_class), - Software = rep("DeepBGC", length(deep_data$ID)), - ID = deep_data$ID, - Start = deep_data$Start, - Stop = deep_data$Stop, - num_domains = deep_data$num_domains, - deepbgc_score = deep_data$deepbgc_score, - activity = deep_data$product_activity) - seg_ref <- seg_ref_d - - if (input$ref == "DeepBGC") { - plot <- ggplot(deep_data_chromo, aes(x = vals$chr_len, y = Chr)) + geom_deep(seg_ref) - soft_major <- "deep" - soft_let <- "D" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - - vals$seg_df_ref_d <- data.frame(x=as.numeric( deep_data$nucl_start), - y=rep("X", length(deep_data$ID)), - xend=as.numeric( deep_data$nucl_end), - yend=rep("X", length(deep_data$ID)), - Type = as.factor(deep_data$product_class), - Software = rep("DeepBGC", length(deep_data$ID)), - ID = deep_data$ID, - Start = deep_data$Start, - Stop = deep_data$Stop, - num_domains = deep_data$num_domains, - deepbgc_score = deep_data$deepbgc_score, - activity = deep_data$product_activity) - } - - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - seg_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Z", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Z", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Score = vals$rre_data$Score, - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value, - P_value = vals$rre_data$P.value, - RRE_start = vals$rre_data$RRE.start, - RRE_stop = vals$rre_data$RRE.end, - Probability = vals$rre_data$Probability) - } else { - seg_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Z", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Z", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value) - } - seg_ref <- seg_ref_r - if (input$ref == "RRE-Finder") { - plot <- ggplot(rre_data, aes(x = vals$chr_len, y = Chr)) + geom_rre(seg_ref) - soft_major <- "rre" - soft_let <- "RRE" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - - if (vals$rre_more == T){ - vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Y", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Y", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Score = vals$rre_data$Score, - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value, - P_value = vals$rre_data$P.value, - RRE_start = vals$rre_data$RRE.start, - RRE_stop = vals$rre_data$RRE.end, - Probability = vals$rre_data$Probability) - } else { - vals$seg_df_ref_r <- data.frame(x=vals$rre_data$Start, - y=rep("Y", length(vals$rre_data$Locus_tag)), - xend=Stop_vals_RRE, - yend=rep("Y", length(vals$rre_data$Locus_tag)), - Type = rep("ripp", length(vals$rre_data$Locus_tag)), - Software = rep("RREFinder", length(vals$rre_data$Locus_tag)), - ID = vals$rre_data$Locus_tag, - Start = vals$rre_data$Start, - Stop = vals$rre_data$Stop, - E_value = vals$rre_data$E.value) - } - } - if (vals$prism_data_input == TRUE){ - # Create a dataframe with PRISM data with all the additional info to visualize on hover - seg_ref_p <- data.frame(x=as.numeric(prism_data$Start), - y=rep("Z", length(prism_data$Cluster)), - xend=as.numeric(prism_data$Stop), - yend=rep("Z", length(prism_data$Cluster)), - Type = as.factor(prism_data$Type), - Type2 = as.factor(prism_data$Type2), - Software = rep("PRISM", length(prism_data$Cluster)), - ID = prism_data$Cluster, - Start = prism_data$Start, - Stop = prism_data$Stop) - seg_ref <- seg_ref_p - - if (input$ref == "PRISM") { - plot <- ggplot(prism_data, aes(x = vals$chr_len, y = Chr)) + geom_prism(seg_ref) - soft_major <- "prism" - soft_let <- "P" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - vals$seg_df_ref_p <- data.frame(x=as.numeric(prism_data$Start), - y=rep("W", length(prism_data$Cluster)), - xend=as.numeric(prism_data$Stop), - yend=rep("W", length(prism_data$Cluster)), - Type = as.factor(prism_data$Type), - Type2 = as.factor(prism_data$Type2), - Software = rep("PRISM", length(prism_data$Cluster)), - ID = prism_data$Cluster, - Start = prism_data$Start, - Stop = prism_data$Stop) - } - if (vals$sempi_data_input == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=as.numeric(sempi_data$Start), - y=rep("Z", length(sempi_data$Cluster)), - xend=as.numeric(sempi_data$Stop), - yend=rep("Z", length(sempi_data$Cluster)), - Type = as.factor(sempi_data$Type), - Type2 = as.factor(sempi_data$Type2), - Software = rep("SEMPI", length(sempi_data$Cluster)), - ID = sempi_data$Cluster, - Start = sempi_data$Start, - Stop = sempi_data$Stop) - seg_ref <- seg_ref_s - - if (input$ref == "SEMPI") { - plot <- ggplot(sempi_data, aes(x = vals$chr_len, y = Chr)) + geom_sempi(seg_ref) - soft_major <- "sempi" - soft_let <- "S" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - vals$seg_df_ref_s <- data.frame(x=as.numeric(sempi_data$Start), - y=rep("V", length(sempi_data$Cluster)), - xend=as.numeric(sempi_data$Stop), - yend=rep("V", length(sempi_data$Cluster)), - Type = as.factor(sempi_data$Type), - Type2 = as.factor(sempi_data$Type2), - Software = rep("SEMPI", length(sempi_data$Cluster)), - ID = sempi_data$Cluster, - Start = sempi_data$Start, - Stop = sempi_data$Stop) - } - if (vals$prism_supp_data_input == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=prism_supp$Start, - y=rep("Z", length(prism_supp$Cluster)), - xend=Stop_vals_prism_supp, - yend=rep("Z", length(prism_supp$Cluster)), - Type = as.factor(prism_supp$Type), - Type2 = as.factor(prism_supp$Type2), - Score = prism_supp$Score, - Software = rep("PRISM", length(prism_supp$Cluster)), - ID = prism_supp$Cluster, - Start = prism_supp$Start, - Stop = prism_supp$Stop, - Name = prism_supp$Name, - Full_name = prism_supp$Full_name - ) - seg_ref <- seg_ref_s - - if (input$ref == "PRISM-supp") { - plot <- ggplot(prism_supp, aes(x = vals$chr_len, y = Chr)) + geom_prism_supp(seg_ref) - soft_major <- "prism_supp" - soft_let <- "PS" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - vals$seg_df_ref_p_s <- data.frame(x=prism_supp$Start, - y=rep("U", length(prism_supp$Cluster)), - xend=Stop_vals_prism_supp, - yend=rep("U", length(prism_supp$Cluster)), - Type = as.factor(prism_supp$Type), - Type2 = as.factor(prism_supp$Type2), - Score = prism_supp$Score, - Software = rep("PRISM", length(prism_supp$Cluster)), - ID = prism_supp$Cluster, - Start = prism_supp$Start, - Stop = prism_supp$Stop, - Name = prism_supp$Name, - Full_name = prism_supp$Full_name - ) - } - if (vals$arts_data_input == TRUE){ - # Create a dataframe with sempi data with all the additional info to visualize on hover - seg_ref_s <- data.frame(x=arts_data$Start, - y=rep("Z", length(arts_data$Cluster)), - xend=Stop_vals_arts, - yend=rep("Z", length(arts_data$Cluster)), - Type = as.factor(arts_data$Type), - Type2 = as.factor(arts_data$Type2), - Hit = arts_data$Hit, - Software = rep("ARTS", length(arts_data$Cluster)), - ID = arts_data$Cluster, - Start = arts_data$Start, - Stop = arts_data$Stop, - Core = arts_data$Core, - Count = arts_data$Count, - E_value = arts_data$Evalue, - Bitscore = arts_data$Bitscore, - Model = arts_data$Model - ) - seg_ref <- seg_ref_s - - if (input$ref == "ARTS") { - plot <- ggplot(arts_data, aes(x = vals$chr_len, y = Chr)) + geom_arts(seg_ref) - soft_major <- "arts" - soft_let <- "AR" - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - - plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - } - vals$seg_df_ref_ar <- data.frame(x=arts_data$Start, - y=rep("T", length(arts_data$Cluster)), - xend=Stop_vals_arts, - yend=rep("T", length(arts_data$Cluster)), - Type = as.factor(arts_data$Type), - Type2 = as.factor(arts_data$Type2), - Hit = arts_data$Hit, - Software = rep("ARTS", length(arts_data$Cluster)), - ID = arts_data$Cluster, - Start = arts_data$Start, - Stop = arts_data$Stop, - Core = arts_data$Core, - Count = arts_data$Count, - E_value = arts_data$Evalue, - Bitscore = arts_data$Bitscore, - Model = arts_data$Model - ) - } - - to_plot - }) - - output$deep_reference_2 <- renderPlotly({ - whereami::cat_where(whereami::whereami()) - if (vals$rre_data_input == TRUE){ - data <- data.frame(vals$rre_data) - } else if (vals$arts_data_input == TRUE){ - data <- vals$arts_data_filtered - } else if (vals$anti_data_input == TRUE){ - data <- vals$anti_data %>% - mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2) - }else if (vals$deep_data_input == TRUE){ - data <- vals$deep_data_filtered - }else if (vals$prism_data_input == TRUE){ - data <- vals$prism_data - }else if (vals$sempi_data_input == TRUE){ - data <- vals$sempi_data - }else if (vals$gecco_data_input == TRUE){ - data <- vals$gecco_data_filtered - } - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE){ - plot <- plot + - geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - if (vals$deep_data_input == TRUE){ - plot <- plot + - geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) - } - } - if (vals$prism_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$sempi_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$prism_supp_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) - } - if (vals$gecco_data_input == TRUE){ - plot <- plot + geom_segment(data = vals$seg_df_ref_g, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } - to_plot <- ggplotly(plot + - scale_y_discrete(labels = c("Z" = "Antismash","X" = "DeepBGC", "Y" = "RRE", "W" = "PRISM", - "V" = "SEMPI", "U" = "P-supp", "T" = "ARTS", "S" = "GECCO")) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip - ) - to_plot %>% layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - }) - - # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- renderBioCircos({ - whereami::cat_where(whereami::whereami()) - # Plot BioCircos - BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) - }) - - - output$biocircos_legend <- renderDataTable({ - whereami::cat_where(whereami::whereami()) - plot_data <- vals$rename_data - new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) - new_data <- new_data[!apply(new_data == "", 1, all),] - colnames(new_data) <- c("Name", "Color") - color_vec <- new_data$Color - options(DT.options = list(pageLength = 50)) - datatable(new_data, rownames = F) %>% formatStyle('Color', - backgroundColor=styleEqual(color_vec, color_vec)) - - - }) - - # Render barplot with number count of interception for BGC IDs - output$barplot_rank <- renderPlotly({ - whereami::cat_where(whereami::whereami()) - antismash_count <- NULL - prism_count <- NULL - deep_count <- NULL - rre_count <- NULL - sempi_count <- NULL - prism_supp_count <- NULL - arts_count <- NULL - gecco_count <- NULL - - inters <- vals$inters_filtered - - if (vals$anti_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - antismash_count <-count(as.factor(unlist(sapply(inters$anti, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anti_anot <- vals$anti_data[vals$anti_data$Cluster %in% as.numeric(levels(antismash_count$x)),] - # Add prefices to the ID to plot for a barplot. - antismash_count$x <- sapply(antismash_count$x, function(x) paste("A: ", x)) - # Add label column to the dataframe, from which we will plot - antismash_count$label <- rep("Antismash", length(antismash_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - antismash_count$Type <- anti_anot$Type - # Add Start positions (to visualize on hover) - antismash_count$Start <- anti_anot$Start - # Add Stop positions (to visualize on hover) - antismash_count$Stop <- anti_anot$Stop - } - if (vals$gecco_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - gecco_count <- count(as.factor(unlist(sapply(inters$gecco, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - gecco_anot <- vals$gecco_data_filtered[vals$gecco_data_filtered$Cluster %in% as.numeric(levels(gecco_count$x)),] - # Add prefices to the ID to plot for a barplot. - gecco_count$x <- sapply(gecco_count$x, function(x) paste("G: ", x)) - # Add label column to the dataframe, from which we will plot - gecco_count$label <- rep("GECCO", length(gecco_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - gecco_count$Type <- gecco_anot$Type - # Add Start positions (to visualize on hover) - gecco_count$Start <- gecco_anot$Start - # Add Stop positions (to visualize on hover) - gecco_count$Stop <- gecco_anot$Stop - } - if (vals$deep_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - deep_count <- count(as.factor(unlist(sapply(inters$deep, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - deep_anot <- vals$deep_data_filtered[vals$deep_data_filtered$ID %in% as.numeric(levels(deep_count$x)),] - # Add prefices to the ID to plot for a barplot. - deep_count$x <- sapply(deep_count$x, function(x) paste("D: ", x)) - # Add label column to the dataframe, from which we will plot - deep_count$label <- rep("DeepBGC", length(deep_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - deep_count$Type <- deep_anot$Type - deep_count$Start <- deep_anot$Start - # Add Stop positions (to visualize on hover) - deep_count$Stop <- deep_anot$Stop - } - if (vals$rre_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - rre_count <- count(as.factor(unlist(sapply(inters$rre, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - rre_anot <- vals$rre_data[vals$rre_data$ID %in% as.numeric(levels(rre_count$x)),] - # Add prefices to the ID to plot for a barplot. - rre_count$x <- sapply(rre_count$x, function(x) paste("RRE: ", x)) - # Add label column to the dataframe, from which we will plot - rre_count$label <- rep("RRE", length(rre_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - rre_count$Type <- rep("ripp", length(rre_anot$Sequence)) - # Add Start positions (to visualize on hover) - rre_count$Start <- rre_anot$Start - # Add Stop positions (to visualize on hover) - rre_count$Stop <- rre_anot$Stop - } - if (vals$prism_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_count <- count(as.factor(unlist(sapply(inters$prism, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - prism_anot <- vals$prism_data[vals$prism_data$Cluster %in% as.numeric(levels(prism_count$x)),] - # Add prefices to the ID to plot for a barplot. - prism_count$x <- sapply(prism_count$x, function(x) paste("P: ", x)) - # Add label column to the dataframe, from which we will plot - prism_count$label <- rep("PRISM", length(prism_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - prism_count$Type <- prism_anot$Type - # Add Start positions (to visualize on hover) - prism_count$Start <- prism_anot$Start - # Add Stop positions (to visualize on hover) - prism_count$Stop <- prism_anot$Stop - } - if (vals$sempi_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - sempi_count <- count(as.factor(unlist(sapply(inters$sempi, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - sempi_anot <- vals$sempi_data[vals$sempi_data$Cluster %in% as.numeric(levels(sempi_count$x)),] - # Add prefices to the ID to plot for a barplot. - sempi_count$x <- sapply(sempi_count$x, function(x) paste("S: ", x)) - # Add label column to the dataframe, from which we will plot - sempi_count$label <- rep("SEMPI", length(sempi_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - sempi_count$Type <- sempi_anot$Type - # Add Start positions (to visualize on hover) - sempi_count$Start <- sempi_anot$Start - # Add Stop positions (to visualize on hover) - sempi_count$Stop <- sempi_anot$Stop - } - if (vals$prism_supp_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - prism_supp_count <- count(as.factor(unlist(sapply(inters$prism_supp, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - prism_supp_anot <- vals$prism_supp[vals$prism_supp$Cluster %in% as.numeric(levels(prism_supp_count$x)),] - # Add prefices to the ID to plot for a barplot. - prism_supp_count$x <- sapply(prism_supp_count$x, function(x) paste("PS: ", x)) - # Add label column to the dataframe, from which we will plot - prism_supp_count$label <- rep("PRISM-supp", length(prism_supp_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - prism_supp_count$Type <- prism_supp_anot$Type - # Add Start positions (to visualize on hover) - prism_supp_count$Start <- prism_supp_anot$Start - # Add Stop positions (to visualize on hover) - prism_supp_count$Stop <- prism_supp_anot$Stop - } - if (vals$arts_data_input == TRUE){ - # Count every interception for every tool. If count is >=1, this means, that given cluster at least intercepted with 1 other from another tool annotation - arts_count <- count(as.factor(unlist(sapply(inters$arts, function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - arts_anot <- vals$arts_data_filtered[vals$arts_data_filtered$Cluster %in% as.numeric(levels(arts_count$x)),] - # Add prefices to the ID to plot for a barplot. - arts_count$x <- sapply(arts_count$x, function(x) paste("AR: ", x)) - # Add label column to the dataframe, from which we will plot - arts_count$label <- rep("ARTS", length(arts_count$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - arts_count$Type <- arts_anot$Type - # Add Start positions (to visualize on hover) - arts_count$Start <- arts_anot$Start - # Add Stop positions (to visualize on hover) - arts_count$Stop <- arts_anot$Stop - } - - - # Integrate all those dataframe to the master one - ranking_data <- rbind(gecco_count, antismash_count,prism_count, deep_count,rre_count, sempi_count, prism_supp_count, arts_count) - # Fix column names in the master dataframe - colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") - # Plot - ggplotly(ggplot(ranking_data, aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - geom_bar(stat = "identity", aes(fill = Label)) + - theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = element_text(size = 14)) + - ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") - ) - - - }) - - # Render table with data - output$group_table <- renderTable({ - whereami::cat_where(whereami::whereami()) - refine_unique <- function(data){ - n <- tail(data, n=1) - data <- head(data, -1) - n_list <- str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(str_split(data, ","))}) - res <- sapply(out, function(x){ - if (x==F){ - x - } - }) - - return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) - } - - inters <- vals$inters_filtered - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") - soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') - - df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) - colnames(df_test) <- soft_let - added_inters <- c(soft_names[match(input$group_by, soft_let)]) - add_inters <- list() - if (input$count_all == F){ - df_test[nrow(df_test)+1,] <- NA - } else{ - if( (input$group_by == "D") | (input$group_by == "G")){ - selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data_filtered") - } else { - selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data") - } - df_test <- data.frame(matrix(ncol = length(soft_let), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- soft_let - df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster - } - for (i in seq(1:length(data_uploads))){ - if (input$group_by==soft_let[[i]]){ - exclude <- i - soft_n <- names(inters[[soft_names[i]]]) - index <- 1 - for (d in seq(1:length(soft_n))) { - name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))){ - if (name==soft_names[match(soft_n, soft_names)][h]){ - colnames(df_tmp) <- c(soft_let[i],soft_let[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) - } - } - - index <- index +1 - } - excluded_names <- soft_let[soft_let != as.name(soft_let[i])] - data <- df_test %>% group_by_if(colnames(df_test)==soft_let[i]) %>% summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), - b=paste(eval(as.name(excluded_names[2])), collapse=","), - c=paste(eval(as.name(excluded_names[3])), collapse=","), - d=paste(eval(as.name(excluded_names[4])), collapse=","), - e=paste(eval(as.name(excluded_names[5])), collapse=","), - f=paste(eval(as.name(excluded_names[6])), collapse=","), - g=paste(eval(as.name(excluded_names[7])), collapse=",")) - colnames(data) <- c(soft_let[i], excluded_names) - for (p in soft_let){ - data[[p]] <- gsub('NA,|,NA', '', data[[p]]) - data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, soft_let)] - } - data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))){ - if (vals[[data_uploads[f]]] != TRUE){ - data <- data %>% - select(-as.name(soft_namings[f])) - } - } - - } else { - if ( !(soft_names[i] %in% added_inters)){ - matched_v <- match(added_inters,names(inters[[soft_names[i]]])) - soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])){ - if (!(inter %in% added_inters)){ - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) - add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) - } - } - added_inters <- c(added_inters, soft_names[i])} - } - } - - for (name in names( add_inters) ){ - data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") - } - write.csv(data, "group_by.csv", row.names = F) - data - }) - - # Download used datasets (as for BioCircos) - output$download <- downloadHandler(filename = function(){ - paste("datasets.zip") - }, - content = function(file){ - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } else if (grepl('group.py', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } - } - #create the zip file from flst vector - zip(file, flst) }, - contentType = "application/zip" ) - -} - -# Run the application -shinyApp(ui = ui, server = server) +# This is a Shiny web application. You can run the application by clicking +# the 'Run App' button above. +# +# Author: Pavlo Hrab +# Made as part of Cambridge bioinformatics hackaton +# +# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH and RREFinder +# to visualized interception of those different annotations in one genome +# + +# Upload required libraries +library(shiny) +library(tidyverse) +library(plyr) +library(plotly) +library(BioCircos) +library(ggplot2) +library(shinyjs) +library(rjson) +library(stringr) +library(DT) +library(GenomicRanges) + +## TESTING +# Define UI +ui <- fluidPage( + + # Application title + titlePanel("BGCViz"), + + # Sidebar + useShinyjs(), + sidebarLayout( + sidebarPanel( + id = "tPanel",style = "overflow-y:scroll; max-height: 90vh; position:fixed; width:inherit;", + # Data upload + h3("Data upload and necesary input:"), + checkboxInput("hide_uploads", "Hide upload fields"), + h5(id = "anti_header_upload","ANTISMASH:"), + checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), + fileInput("anti_data", + "Upload Antismash data"), + actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + h5(id = "prism_header_upload","PRISM:"), + checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), + fileInput("prism_data", + "Upload PRISM data"), + actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + h5(id = "sempi_header_upload","SEMPI:"), + fileInput("sempi_data", + "Upload SEMPI 2.0 data"), + actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + h5(id = "deep_header_upload","DEEPBGC:"), + fileInput("deep_data", + "Upload DeepBGC data"), + actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + h5(id = "gecco_header_upload","GECCO:"), + fileInput("gecco_data", + "Upload Gecco data"), + actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), + h5(id = "rre_header_upload","RRE-FINDER:"), + fileInput("rre_data", + "Upload RRE-Finder data"), + actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + h5(id = "arts_header_upload","ARTS:"), + fileInput("known_data", + "Upload ARTS knownhits data"), + fileInput("dup_data", + "Upload ARTS duptable data"), + actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + # Numeric input of chromosome length of analyzed sequence + numericInput("chr_len", "Please type chr len of an organism", value = 10000000), + h3("Data manipulation options"), + checkboxInput("hide_anti", "Hide data manipulation fields"), + h5(id = "anti_header","Antismash data options:"), + checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + h5(id = "prism_header","PRISM data options:"), + checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + h5(id = "sempi_header","SEMPI data options:"), + checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + h5(id = "arts_header","ARTS data options:"), + selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + selected = "All"), + h3(id = "genes_on_chr","Genes on chromosome plot controls:"), + checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), + selectInput("ref", "Choose reference data", choices = c(""), + selected = ""), + h3(id = "summarize","Summarize options:"), + checkboxInput("hide_summarize", "Hide summarize options"), + selectInput("group_by", "Group data by", choices = c(""), selected = ''), + checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + h3("Improve visualization:"), + checkboxInput("hide_viz", "Hide improve visualization options"), + #Improve RREFinder annotated BCG visibility + fileInput("rename_data", + "Upload renaming and coloring scheme"), + actionButton("rename", "Rename"), + actionButton("reset_name", "Reset"), + checkboxInput("rre_width", "Add thickness to RRE results visualization"), + checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + checkboxInput("sempi_width", "Add thickness to SEMPI results visualization"), + checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = ''), + h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), + checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), + selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), + selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type"), + selected = "avg_p"), + # Chose step for barplot (as a threshold to draw a bar) + sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + h3(id="data_filter_header_gecco","Gecco data filtering:"), + checkboxInput("hide_data_filter_gecco", "Hide Gecco data filtering options"), + sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), + h3(id="data_comparison_header","Comparison with DeepBGC plots:"), + checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), + selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), + # Score to use for thresholds + selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC"), + selected = "Activity score"), + # Chose step for barplot (as a threshold to draw a bar) + sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + + # DeepBGC data filtering + h3(id="data_filter_header","DeepBGC data filtering:"), + checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), + # Different score filtering. Remain >= of set threshold + sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins filter. Remain >= of set threshold + sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), + + # Donwload currently used datasets + downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) + + ), + + # Show plots + mainPanel( + tabsetPanel( + tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), + tabPanel(title = "Compare data with Gecco", value = 5 ,plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), + tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), + plotlyOutput("deep_reference", height = "500px")), + tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), + tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),tableOutput("group_table")), + type = "tabs", id = "main" + ) + ) + ) +) + +# Define server logic +server <- function(input, output, session) { + #CLEAN THE DIRECTORY + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add remove them + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + file.remove(file_names) + } + } + options(shiny.maxRequestSize=100*1024^2) + # Small function to make integers zeros + is.integer0 <- function(x) + { + is.integer(x) && length(x) == 0L + } + + check_to_rename <- reactive({list(input$sempi_data, input$anti_data, input$prism_data, + input$sempi_sco,input$anti_sco, input$prism_sco)}) + biocircos_listen <- reactive({ + list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, + input$ref_col_biocircos, vals$inters_filtered, input$prism_supp, input$prism_supp_data_input_width, + input$arts_width, input$sempi_width, input$rre_width + ) + }) + inputData <- reactive({ + list( input$sempi_data,input$rre_data, input$anti_data, input$prism_data, + input$known_data,input$dup_data, input$prism_supp_data, input$deep_data, input$gecco_data, + input$sempi_sco,input$rre_sco, input$anti_sco, input$prism_sco, + input$arts_sco, input$prism_supp_sco, input$deep_sco, input$gecco_sco + ) + }) + dynamicInput <- reactive({ + list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, + input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, + input$prot_filter_gecco, input$dup_choice, vals$need_filter + ) + }) + + + + # Rective vals the app is using + # Some dataframes that are used through the app + some vectors of untercepted values + vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, + biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list() + ) + + vals$computed <- list( + anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F + ) + vals$rename_data <- read.csv("rename.csv") + fix_duplicates <- function(test_score, order_vec, regul_genes_orfs){ + dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] + duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) + test_score <- test_score[order_vec] + to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] + test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] + test_score[duplicated_values-1] <- paste(test_score[duplicated_values-1] , to_add, sep="/") + return(test_score) + } + process_prism_json_suppl <- function(data){ + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$name + }) + coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$coordinates + }) + + test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) + + + reg_genes <-data.frame(t(test_coords)) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + + test_name <- names[names %in% regul_genes_orfs] + order_vec <- order(match(regul_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs) + test_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs) + test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs) + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) + + + res_genes <-data.frame(t(test_coords_res)) + + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + test_name <- names[names %in% resist_genes_orfs] + order_vec <- order(match(resist_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs) + test_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs) + test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs) + + final_reg <- rbind(res_genes, reg_genes) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + return(list(prism_data, final_reg)) + } + filter_deepbgc <- function(){ + score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + deep_data_chromo <- vals$deep_data %>% + mutate(score = apply(vals$deep_data %>% + select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + return(biocircos_deep) + } + filter_gecco <- function(){ + score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + # Store master prism data in local variable + gecco_data <- vals$gecco_data %>% + mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + return(gecco_data) + } + rename_vector <- function(data, renamed_dataframe){ + type <- str_split(data$Type2, "__") + type_2 <- sapply(type, function(x){ + sapply(x, function(y){ + if (y %in% renamed_dataframe$Code){ + renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) + if( (length(renamed) >1) & (!( as.character(y) %in% names(vals$renaming_notification)))){ + showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + type = "warning", duration = NULL) + showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) + vals$renaming_notification[[as.character(y)]] <- renamed[[1]] + } + renamed[[1]] + } else { + y + } + + }) + + }) + type_3 <- sapply(type_2, function(x){ + dupl <- x[!duplicated(x)] + paste(dupl, collapse = "__") + }) + type_4 <- sapply(type_3, function(y){ + if (y %in% as.character(renamed_dataframe$Code)){ + as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] + } else { + y + } + }) + return(as.character(type_4)) + } + correct_width <- function(data, label){ + if ((label == 'SEMPI')&(input$sempi_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'PRISM-Supp')&(input$prism_supp_data_input_width == T)){ + data$Stop <- data$Stop + 20000 + } else if ((label == 'ARTS')&(input$arts_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'RRE-Finder')&(input$rre_width == T)){ + data$Stop <- data$Stop + 50000 + } + return(data) + } + + # Upload example data + observeEvent(input$anti_sco,{ + whereami::cat_where(whereami::whereami()) + anti_data <- read.csv("example_data/sco_antismash.csv") + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") + vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "Antismash" ) + updateSelectInput(session, "group_by", + selected = "A" ) + updateSelectInput(session, "ref_comparison", + selected = "A") + updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + updateSelectInput(session, "ref_comparison_gecco", + selected = "A") + + } + + }) + + observeEvent(input$gecco_sco,{ + whereami::cat_where(whereami::whereami()) + gecco_data <- read.delim("example_data/sco_gecco.tsv") + # Add chromosome column + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + select(-one_of(drop_cols)) + gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + vals$gecco_data <- gecco_data + vals$gecco_data_filtered <- filter_gecco() + # Save file + write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") + vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "GECCO" ) + updateSelectInput(session, "group_by", + selected = "G") + updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO") + + } + + }) + + observeEvent(input$prism_sco,{ + # Read data + + data <- fromJSON(file = "example_data/sco_prism.json") + processed_data <- process_prism_json_suppl(data) + updateCheckboxInput(inputId = "prism_supp", value = T) + prism_data <- processed_data[[1]] + vals$prism_supp_data_input = T + vals$prism_supp <- processed_data[[2]] + vals$prism_supp_data <- processed_data[[2]] + vals$prism_json = T + + vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-supp" = "PRISM-supp") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + prism_data$Type <- str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism_data$Cluster + # Save file + write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "PRISM" ) + updateSelectInput(session, "group_by", + selected = "P" ) + updateSelectInput(session, "ref_comparison", + selected = "P") + updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + updateSelectInput(session, "ref_comparison_gecco", + selected = "P") + } + }) + + observeEvent(input$sempi_sco,{ + whereami::cat_where(whereami::whereami()) + sempi_data <- read.csv("example_data/sco_sempi.csv") + sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") + vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "SEMPI" ) + updateSelectInput(session, "group_by", + selected = "S" ) + updateSelectInput(session, "ref_comparison", + selected = "S") + updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + updateSelectInput(session, "ref_comparison_gecco", + selected = "S") + } + + }) + + observeEvent(input$arts_sco, { + + data <- read.delim("example_data/sco_duptable.tsv") + + get_location_duptable <- function(x, y){ + test <- str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + + data <- read.delim("example_data/sco_knownhits.tsv") + locations <- sapply(data$Sequence.description, function(x){ + tail(str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + }) + + observeEvent(input$deep_sco, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + # Read data + vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% + mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + select(-one_of(drop_cols)) + # Add chromosome info column + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$deep_data_filtered <- filter_deepbgc() + vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") + vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "DeepBGC" ) + updateSelectInput(session, "group_by", + selected = "D" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + }) + + observeEvent(input$rre_sco, { + whereami::cat_where(whereami::whereami()) + # Read data + vals$rre_data <- read.delim("example_data/sco_rre.txt") + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- vals$rre_data %>% + separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + vals$rre_data['Type2'] <- 'ripp' + write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") + vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + updateSelectInput(session, "group_by", + selected = "R" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "RRE-Finder", + selected = "RRE") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + }) + + # Read the data + observeEvent(input$anti_data,{ + # Read data + if (input$anti_input_options==T){ + anti_data <- read.csv(input$anti_data$datapath) + }else{ + data <- fromJSON(file = input$anti_data$datapath) + types <- sapply(data$records, function(y){ + lapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + tolower(x$qualifiers$product) + } + }) + }) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + location <- sapply(data$records, function(y){ + unlist(sapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + unlist(x$location) + } + }) + ) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + separate(split, c("Start", "Stop")) %>% + transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + + } + + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") + vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "Antismash" ) + updateSelectInput(session, "group_by", + selected = "A" ) + updateSelectInput(session, "ref_comparison", + selected = "A") + updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + updateSelectInput(session, "ref_comparison_gecco", + selected = "A") + } + + }) + + observeEvent(input$sempi_data,{ + + sempi_data <- read.csv(input$sempi_data$datapath) + sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") + vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "SEMPI" ) + updateSelectInput(session, "group_by", + selected = "S" ) + updateSelectInput(session, "ref_comparison", + selected = "S") + updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + updateSelectInput(session, "ref_comparison_gecco", + selected = "S") + } + + }) + + observeEvent(input$gecco_data,{ + + gecco_data <- read.delim(input$gecco_data$datapath) + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + select(-one_of(drop_cols)) + gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + vals$gecco_data <- gecco_data + vals$gecco_data_filtered <- filter_gecco() + # Save file + write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") + vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "GECCO" ) + updateSelectInput(session, "group_by", + selected = "G") + updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO") + } + + }) + + observeEvent(input$known_data, { + data <- read.delim(input$known_data$datapath) + locations <- sapply(data$Sequence.description, function(x){ + tail(str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + write.csv(vals$known_data, "knownhits_data.csv", row.names = F) + if ((vals$dup_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + }) + + observeEvent(input$dup_data, { + data <- read.delim(input$dup_data$datapath) + + get_location_duptable <- function(x, y){ + test <- str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + write.csv(dup_table, "duptable_data.csv", row.names = F) + if ((vals$known_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + filter(Core != "Not_core") + updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "ARTS" ) + updateSelectInput(session, "group_by", + selected = "AR" ) + updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + }) + + observeEvent(input$prism_data,{ + # Read data + if (input$prism_input_options == T){ + prism_data <- read.csv(input$prism_data$datapath) + } else{ + data <- fromJSON(file = input$prism_data$datapath) + processed_data <- process_prism_json_suppl(data) + updateCheckboxInput(inputId = "prism_supp", value = T) + prism_data <- processed_data[[1]] + vals$prism_supp <- processed_data[[2]] + vals$prism_supp_data_input = T + vals$prism_supp_data <- processed_data[[2]] + vals$prism_json = T + vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-supp" = "PRISM-supp") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + } + vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + prism_data$Type <- str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism_data$Cluster + # Save file + write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "PRISM" ) + updateSelectInput(session, "group_by", + selected = "P" ) + updateSelectInput(session, "ref_comparison", + selected = "P") + updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + updateSelectInput(session, "ref_comparison_gecco", + selected = "P") + } + }) + + observeEvent(input$deep_data, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + # Read data + vals$deep_data <- read.delim(input$deep_data$datapath) %>% + mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + select(-one_of(drop_cols)) + # Add chromosome info column + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$deep_data_filtered <- filter_deepbgc() + vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") + vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "DeepBGC" ) + updateSelectInput(session, "group_by", + selected = "D" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + }) + + observeEvent(input$rre_data, { + # Read data + vals$rre_data <- read.delim(input$rre_data$datapath) + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- vals$rre_data %>% + separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + vals$rre_data['Type2'] <- 'ripp' + write.csv(vals$rre_data, "rre_data.csv", row.names = F) + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") + vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") + updateSelectInput(session, "ref", + choices = vals$choices$ref ) + updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + if (vals$data_upload_count == 1){ + updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + updateSelectInput(session, "group_by", + selected = "R" ) + updateSelectInput(session, "ref_col_biocircos", + choices = "RRE-Finder", + selected = "RRE") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + }) + + # Observe input of chromosome length + observeEvent(input$chr_len,{ + vals$chr_len <- input$chr_len + }) + + # Logic for showing/hiding UI when input + observeEvent(vals$rre_data_input, { + whereami::cat_where(whereami::whereami()) + if (vals$rre_data_input == T){ + if (input$hide_viz == F){ + showElement(selector = "#rre_width") + } + } else{ + hideElement(selector = "#rre_width") + } + }) + + observeEvent(vals$anti_data_input, { + whereami::cat_where(whereami::whereami()) + if (vals$anti_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#anti_header") + showElement(selector = "#anti_hybrid") + } + } else{ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + } + }) + + observeEvent(vals$prism_data_input, { + if (vals$prism_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#prism_header") + showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + showElement(selector = "#prism_supp") + } + } + if (input$hide_viz == F){ + if (vals$prism_json == T){ + showElement(selector = "#prism_supp_data_input_width") + } + } + } else{ + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + hideElement(selector = "#prism_supp_data_input_width") + } + }) + + observeEvent(vals$sempi_data_input, { + whereami::cat_where(whereami::whereami()) + if (vals$sempi_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#sempi_header") + showElement(selector = "#sempi_hybrid") + showElement(selector = "#sempi_width") + } + } else{ + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + hideElement(selector = "#sempi_width") + } + }) + + observeEvent(vals$deep_data_input,{ + if (vals$deep_data_input == T){ + showElement(selector = "#ref_comparison") + showElement(selector = "#hide_data_comparison") + showElement(selector = "#hide_data_filter") + showElement(selector = "#score_type") + showElement(selector = "#plot_step") + showElement(selector = "#plot_start") + showElement(selector = "#score_a") + showElement(selector = "#score_d") + showElement(selector = "#score_c") + showElement(selector = "#domains_filter") + showElement(selector = "#biodomain_filter") + showElement(selector = "#gene_filter") + showElement(selector = "#cluster_type") + showElement(selector = "#data_comparison_header") + showElement(selector = "#data_filter_header") + } else{ + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#hide_data_comparison") + hideElement(selector = "#hide_data_filter") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + hideElement(selector = "#data_comparison_header") + hideElement(selector = "#data_filter_header") + } + }) + + observeEvent(vals$gecco_data_input,{ + if (vals$gecco_data_input == T){ + showElement(selector = "#data_comparison_header_gecco") + showElement(selector = "#hide_data_comparison_gecco") + showElement(selector = "#ref_comparison_gecco") + showElement(selector = "#score_type_gecco") + showElement(selector = "#plot_step_gecco") + showElement(selector = "#plot_start_gecco") + showElement(selector = "#data_filter_header_gecco") + showElement(selector = "#hide_data_filter_gecco") + showElement(selector = "#score_average_gecco") + showElement(selector = "#score_cluster_gecco") + showElement(selector = "#domains_filter_gecco") + showElement(selector = "#prot_filter_gecco") + } else{ + hideElement(selector = "#data_comparison_header_gecco") + hideElement(selector = "#hide_data_comparison_gecco") + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + hideElement(selector = "#data_filter_header_gecco") + hideElement(selector = "#hide_data_filter_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_cluster_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } + }) + + observeEvent(vals$data_upload_count, { + whereami::cat_where(whereami::whereami()) + if (vals$data_upload_count <2){ + hideTab("main", "2") + hideTab("main", "3") + + }else if (vals$data_upload_count >=2){ + if (input$hide_summarize == F) { + showElement(selector = "#summarize") + showElement(selector = "#group_by") + showElement(selector = "#count_all") + } + if (input$hide_viz == F){ + showElement(selector = "#biocircos_color") + showElement(selector = "#label_color") + showElement(selector = "#label_color_class") + } + showTab("main", "2") + showTab("main", "3") + if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ + showTab("main", "5") + } else { + hideTab("main", "5") + if ((vals$gecco_data_input == T) & (vals$data_upload_count >1)){ + showNotification(paste("It seems that you would like to compare the GECCO data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) + } + } + if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { + showTab("main", "1") + } else { + hideTab("main", "1") + if ((vals$deep_data_input == T) & (vals$data_upload_count >1)){ + showNotification(paste("It seems that you would like to compare the DeepBGC data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) + } + } + } + if (vals$data_upload_count <1){ + hideTab("main", "4") + hideTab(inputId = "main", target = "5") + hideTab(inputId = "main", target = "1") + hideElement(selector = "#genes_on_chr") + hideElement(selector = "#hide_genes_on_chr") + hideElement(selector = "#ref") + }else{ + showTab("main", "4") + if (input$hide_genes_on_chr == F){ + showElement(selector = "#genes_on_chr") + showElement(selector = "#hide_genes_on_chr") + showElement(selector = "#ref") + } + + } + }) + + observeEvent(input$label_color_class, { + if (input$label_color_class == "R"){ + showElement(selector = "#ref_col_biocircos") + } else { + hideElement(selector = "#ref_col_biocircos") + } + }) + + observeEvent(input$anti_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) + } + + if (input$anti_hybrid==T){ + vals$anti_data$Type2 <- hybrid_col(vals$anti_data) + }else { + vals$anti_data$Type2 <- vals$anti_type + } + + }) + + observeEvent(input$prism_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) + } + + if (input$prism_hybrid==T){ + vals$prism_data$Type2 <- hybrid_col(vals$prism_data) + }else { + vals$prism_data$Type2 <- vals$prism_type + } + }) + + observeEvent(input$sempi_hybrid, { + hybrid_col <- function(data){ + data_split <- str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else if (unlist(x) == 'nrps-pks'){ + "hybrid" + } else { + x + } + }) + return(types) + } + + if (input$sempi_hybrid==T){ + vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) + }else { + vals$sempi_data$Type2 <- vals$sempi_type + } + }) + + observeEvent(vals$arts_data_input,{ + if (vals$arts_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } + if (input$hide_viz == F){ + showElement(selector = "#arts_width") + } + } else { + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + hideElement(selector = "#arts_width") + } + }) + + observeEvent(input$rename, { + whereami::cat_where(whereami::whereami()) + rename_data <- vals$rename_data + if (vals$anti_data_input == T){ + anti_data <- read.csv("anti_data.csv") + vals$anti_type <- rename_vector(anti_data, rename_data) + anti_data['Type2'] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T){ + sempi_data <- read.csv("sempi_data.csv") + vals$sempi_type <- rename_vector(sempi_data, rename_data) + sempi_data['Type2'] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if(vals$prism_data_input == T){ + prism_data <- read.csv("prism_data.csv") + vals$prism_type <- rename_vector(prism_data, rename_data) + prism_data['Type2'] <- vals$prism_type + vals$prism_data <- prism_data + } + showElement(selector = "#reset_name") + hideElement(selector = "#rename") + vals$renamed <- T + showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) + }) + observeEvent(check_to_rename(), { + req(vals$renamed == T) + whereami::cat_where(whereami::whereami()) + rename_data <- vals$rename_data + if (vals$anti_data_input == T){ + anti_data <- read.csv("anti_data.csv") + vals$anti_type <- rename_vector(anti_data, rename_data) + anti_data['Type2'] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T){ + sempi_data <- read.csv("sempi_data.csv") + vals$sempi_type <- rename_vector(sempi_data, rename_data) + sempi_data['Type2'] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if(vals$prism_data_input == T){ + prism_data <- read.csv("prism_data.csv") + vals$prism_type <- rename_vector(prism_data, rename_data) + prism_data['Type2'] <- vals$prism_type + vals$prism_data <- prism_data + } + }) + + observeEvent(input$reset_name, { + vals$anti_data['Type2'] <- vals$anti_data['Type'] + vals$sempi_data['Type2'] <- vals$sempi_data['Type'] + vals$ prism_data['Type2'] <- vals$ prism_data['Type'] + updateCheckboxInput(inputId = "anti_hybrid", value = F) + updateCheckboxInput(inputId = "sempi_hybrid", value =F) + updateCheckboxInput(inputId = "prism_hybrid", value = F) + showElement(selector = "#rename") + hideElement(selector = "#reset_name") + vals$renamed <- F + }) + + observeEvent(input$rename_data,{ + rename_data <- read.csv(input$rename_data$datapath) + vals$rename_data <- rename_data + }) + + observeEvent(input$hide_uploads, { + if (input$hide_uploads == T){ + hideElement(selector = "#anti_input_options") + hideElement(selector = "#anti_data") + hideElement(selector = "#prism_input_options") + hideElement(selector = "#anti_header_upload") + hideElement(selector = "#prism_header_upload") + hideElement(selector = "#prism_data") + hideElement(selector = "#sempi_header_upload") + hideElement(selector = "#sempi_data") + hideElement(selector = "#deep_header_upload") + hideElement(selector = "#deep_data") + hideElement(selector = "#gecco_header_upload") + hideElement(selector = "#gecco_data") + hideElement(selector = "#rre_header_upload") + hideElement(selector = "#rre_data") + hideElement(selector = "#chr_len") + hideElement(selector = "#arts_header_upload") + hideElement(selector = "#known_data") + hideElement(selector = "#dup_data") + hideElement(selector = "#anti_sco") + hideElement(selector = "#prism_sco") + hideElement(selector = "#arts_sco") + hideElement(selector = "#rre_sco") + hideElement(selector = "#sempi_sco") + hideElement(selector = "#deep_sco") + hideElement(selector = "#gecco_sco") + }else { + showElement(selector = "#anti_input_options") + showElement(selector = "#anti_data") + showElement(selector = "#prism_input_options") + showElement(selector = "#anti_header_upload") + showElement(selector = "#prism_header_upload") + showElement(selector = "#prism_data") + showElement(selector = "#sempi_header_upload") + showElement(selector = "#sempi_data") + showElement(selector = "#deep_header_upload") + showElement(selector = "#deep_data") + showElement(selector = "#gecco_header_upload") + showElement(selector = "#gecco_data") + showElement(selector = "#rre_header_upload") + showElement(selector = "#rre_data") + showElement(selector = "#chr_len") + showElement(selector = "#arts_header_upload") + showElement(selector = "#known_data") + showElement(selector = "#dup_data") + showElement(selector = "#anti_sco") + showElement(selector = "#prism_sco") + showElement(selector = "#arts_sco") + showElement(selector = "#rre_sco") + showElement(selector = "#sempi_sco") + showElement(selector = "#deep_sco") + showElement(selector = "#gecco_sco") + } + }) + + observeEvent(input$hide_anti, { + if (input$hide_anti== T){ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + }else{ + if (vals$anti_data_input == T){ + showElement(selector = "#anti_header") + showElement(selector = "#anti_hybrid") + } else{ + hideElement(selector = "#anti_header") + hideElement(selector = "#anti_hybrid") + } + if (vals$prism_data_input == T){ + showElement(selector = "#prism_header") + showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + showElement(selector = "#prism_supp") + } + } else { + hideElement(selector = "#prism_header") + hideElement(selector = "#prism_hybrid") + hideElement(selector = "#prism_supp") + } + if (vals$sempi_data_input == T){ + showElement(selector = "#sempi_header") + showElement(selector = "#sempi_hybrid") + } else { + hideElement(selector = "#sempi_header") + hideElement(selector = "#sempi_hybrid") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } else{ + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + } + } + }) + + observeEvent(input$hide_genes_on_chr, { + if (input$hide_genes_on_chr == T){ + hideElement(selector = "#ref") + } else { + if (vals$data_upload_count > 0){ + showElement(selector = "#ref") + } else { + hideElement(selector = "#genes_on_chr") + hideElement(selector = "#ref") + } + } + }) + + observeEvent(input$hide_summarize, { + if (input$hide_summarize == T){ + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } else { + if (vals$data_upload_count > 1){ + showElement(selector = "#group_by") + showElement(selector = "#count_all") + } else { + hideElement(selector = "#summarize") + hideElement(selector = "#group_by") + hideElement(selector = "#count_all") + } + + } + }) + + observeEvent(input$hide_viz, { + if (input$hide_viz == T){ + hideElement(selector = "#rename_data") + hideElement(selector = "#rename") + hideElement(selector = "#reset_name") + hideElement(selector = "#rre_width") + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + hideElement(selector = "#ref_col_biocircos") + hideElement(selector = "#arts_header") + hideElement(selector = "#arts_width") + hideElement(selector = "#sempi_width") + hideElement(selector = "#prism_supp_data_input_width") + } else{ + showElement(selector = "#rename_data") + showElement(selector = "#rename") + showElement(selector = "#reset_name") + if (vals$rre_data_input == T){ + showElement(selector = "#rre_width") + } else { + hideElement(selector = "#rre_width") + } + if (vals$sempi_data_input == T){ + showElement(selector = "#sempi_width") + } else { + hideElement(selector = "#sempi_width") + } + if (vals$prism_json == T){ + showElement(selector = "#prism_supp_data_input_width") + } + else { + hideElement(selector = "#prism_supp_data_input_width") + } + if (vals$data_upload_count > 1){ + showElement(selector = "#biocircos_color") + showElement(selector = "#label_color") + showElement(selector = "#label_color_class") + } else { + hideElement(selector = "#biocircos_color") + hideElement(selector = "#label_color") + hideElement(selector = "#label_color_class") + } + if (input$label_color_class == "R"){ + showElement(selector = "#ref_col_biocircos") + } else { + hideElement(selector = "#ref_col_biocircos") + } + if (vals$arts_data_input == T){ + showElement(selector = "#arts_header") + showElement(selector = "#arts_width") + } else { + hideElement(selector = "#arts_header") + hideElement(selector = "#arts_width") + } + + } + }) + + observeEvent(input$hide_data_comparison, { + if ((input$hide_data_comparison == T)){ + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } else if (vals$deep_data_input == T) { + showElement(selector = "#ref_comparison") + showElement(selector = "#score_type") + showElement(selector = "#plot_step") + showElement(selector = "#plot_start") + } else { + hideElement(selector = "#ref_comparison") + hideElement(selector = "#score_type") + hideElement(selector = "#plot_step") + hideElement(selector = "#plot_start") + } + }) + + observeEvent(input$hide_data_filter, { + if ((input$hide_data_filter == T)){ + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } else if (vals$deep_data_input == T){ + showElement(selector = "#score_a") + showElement(selector = "#score_d") + showElement(selector = "#score_c") + showElement(selector = "#domains_filter") + showElement(selector = "#biodomain_filter") + showElement(selector = "#gene_filter") + showElement(selector = "#cluster_type") + } else { + hideElement(selector = "#score_a") + hideElement(selector = "#score_d") + hideElement(selector = "#score_c") + hideElement(selector = "#domains_filter") + hideElement(selector = "#biodomain_filter") + hideElement(selector = "#gene_filter") + hideElement(selector = "#cluster_type") + } + }) + + observeEvent(input$hide_data_comparison_gecco, { + if ((input$hide_data_comparison_gecco == T)){ + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } else if (vals$gecco_data_input == T) { + showElement(selector = "#ref_comparison_gecco") + showElement(selector = "#score_type_gecco") + showElement(selector = "#plot_step_gecco") + showElement(selector = "#plot_start_gecco") + } else { + hideElement(selector = "#ref_comparison_gecco") + hideElement(selector = "#score_type_gecco") + hideElement(selector = "#plot_step_gecco") + hideElement(selector = "#plot_start_gecco") + } + }) + + observeEvent(input$hide_data_filter_gecco, { + if ((input$hide_data_filter_gecco == T)){ + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } else if (vals$gecco_data_input == T){ + showElement(selector = "#score_average_gecco") + showElement(selector = "#score_average_gecco") + showElement(selector = "#domains_filter_gecco") + showElement(selector = "#prot_filter_gecco") + } else { + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#score_average_gecco") + hideElement(selector = "#domains_filter_gecco") + hideElement(selector = "#prot_filter_gecco") + } + }) + + observeEvent(inputData(), { + req(vals$data_upload_count >1) + whereami::cat_where(whereami::whereami()) + # GENERATE DATA + if (vals$anti_data_input == TRUE){ + anti_data <- vals$anti_data + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + + } + if (vals$deep_data_input == TRUE){ + deep_data <- vals$deep_data + deep_inter <- vals$deep_data %>% + select(nucl_start, nucl_end) + + deep_inter$seqnames <- "chr" + } + if (vals$rre_data_input == TRUE){ + # Convert numeric columns in a dataframe as a numeric + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(vals$rre_data) + # Start/Stop columns from rre data as matrix + rre_inter <- rre_data %>% + select(Start, Stop) + rre_inter$seqnames <- "chr" + } + if (vals$prism_data_input == TRUE){ + # Store master prism data in local variable + prism_data <- vals$prism_data + # Start/Stop columns from prism data as matrix + prism_inter <- prism_data %>% + select(Start,Stop) + prism_inter$seqnames <- "chr" + } + if (vals$sempi_data_input == TRUE){ + # Store master prism data in local variable + sempi_data <- vals$sempi_data + # Start/Stop columns from prism data as matrix + sempi_inter <- vals$sempi_data %>% + select(Start,Stop) + sempi_inter$seqnames <- "chr" + } + if (vals$prism_supp_data_input == T){ + prism_supp_data <- vals$prism_supp_data + prism_supp_inter <- vals$prism_supp_data %>% + select(Start,Stop) + prism_supp_inter$seqnames <- "chr" + if (input$prism_supp_data_input_width == TRUE) { + Stop_vals_prism_supp <- as.numeric(vals$prism_supp_data$Stop)+50000 + } else{ + Stop_vals_prism_supp <- as.numeric(vals$prism_supp_data$Stop) + } + } + if (vals$arts_data_input == T){ + arts_data <- vals$arts_data + arts_inter <- vals$arts_data %>% + select(Start,Stop) + arts_inter$seqnames <- "chr" + } + if (vals$gecco_data_input == TRUE){ + gecco_data <- vals$gecco_data + # Start/Stop columns from prism data as matrix + gecco_inter <- vals$gecco_data %>% + select(Start,Stop) + gecco_inter$seqnames <- "chr" + } + + get_inter <- function(inter1, inter2){ + query <- makeGRangesFromDataFrame(inter2) + subject <- makeGRangesFromDataFrame(inter1) + interseption <- findOverlaps(query,subject) + inter_from <- interseption@from + inter_to <- interseption@to + return(list(from = inter_from, to = inter_to)) + } + + inters <- vals$inters + #inters_filtered <- vals$inters_filtered + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + + #TESTING +# computed <- list( +# anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F +# ) + index = 1 + for (i in data_uploads){ + index_2 = 1 + j = soft_names[index] + for (p in data_uploads){ + x = soft_names[index_2] + if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ + if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ + res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) + new_res <- list() + new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster + new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster + inters[[j]][[x]] <- new_res + inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + #inters_filtered[[j]][[x]] <- new_res + #inters_filtered[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + + } + + } + index_2 = index_2 +1 + } + if (vals[[i]] == TRUE){ + vals$computed[[j]] <- TRUE + } + index = index +1 + } + + vals$inters <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ + vals$inters_filtered <- inters + } else{ + vals$need_filter <- T + vals$filter_data <- T + } + + +#### TESTING +# score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) +# score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) +# score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) +# +# deep_data <- vals$deep_data%>% +# mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% +# filter(score_a >= 0.5, score_c >=0.5 , score_d >= 0.8, num_domains >= 5, +# num_bio_domains>=3, num_proteins>=3) +# vals <- list( +# anti_data_input = T, +# sempi_data_input = T, +# prism_data_input = T, +# prism_supp = T, +# arts_data_input = T, +# deep_data_input = T, +# gecco_data_input = T, +# rre_data_input = T, +# anti_data = anti_data, +# deep_data = deep_data, +# prism_data = prism_data, +# rre_data = rre_data, +# arts_data = arts_data, +# sempi_data = sempi_data, +# gecco_data = gecco_data, +# prism_supp_data = prism_supp, +# rre_more = F, +# biocircos_gecco = gecco_data, +# computed=computed +# ) + + }) + + observeEvent(dynamicInput(), { + req(vals$data_upload_count>1) + whereami::cat_where(whereami::whereami()) + inters <- vals$inters + if (vals$deep_data_input == TRUE){ + if (vals$need_filter == F) { + biocircos_deep <- filter_deepbgc() + vals$deep_data_filtered <- biocircos_deep + } else { + biocircos_deep <- vals$deep_data_filtered + } + new_deep <- lapply(inters$deep, function(x){ + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters + } + if (vals$gecco_data_input == TRUE){ + if (vals$need_filter == F) { + gecco_data <- filter_gecco() + vals$gecco_data_filtered <- gecco_data + } else { + gecco_data <- vals$gecco_data_filtered + } + new_gecco <- lapply(inters$gecco, function(x){ + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$gecco) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to + } + new_inters$gecco <- new_gecco + vals$inters_filtered <- new_inters + inters <- new_inters + } + if (vals$arts_data_input == TRUE){ + if (input$dup_choice != "All"){ + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + new_arts <- lapply(inters$arts, function(x){ + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } else { + vals$arts_data_filtered <- vals$arts_data + vals$inters_filtered <- inters + + } + } + if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { + vals$inters_filtered <- inters + } + vals$need_filter <- F + vals$filter_data <- F + + }) + + observeEvent(biocircos_listen(), { + req(vals$data_upload_count >=2) + initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ){ + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[[name]] <- vals$chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + biocircos_anti <- correct_width(biocircos_anti, name) + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((input$biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% rename_data$Group_color){ + rename_data$Color[rename_data$Group_color == x] + } else { + rename_data$Color[rename_data$Group_color == 'base'] + } + }) + } else { + arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) + } + whereami::cat_where(whereami::whereami()) + #BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + + + rename_data <- vals$rename_data + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + index <- 1 + # browser() + for (upload in data_uploads){ + if (vals[[upload]] == T){ + # Store data in local variable + init_data <- initialize_biocircos(vals[[data_to_use[index]]], soft[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ) + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes <- init_data[[1]] + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- init_data[[2]] + # Add arcs begin positions. (Start column) + arcs_begin <- init_data[[3]] + # Stop position of arcs. + arcs_end <- init_data[[4]] + # Add Arcs labels. Can add only one label... + arc_labels <- init_data[[5]] + + arc_col <- init_data[[6]] + } + index <- index +1 + } + # Add to tracklist. Then it can be populated with links + tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + # from second one. IDs are duplicated, if intercepted more than one time + + chromosomes_start <- c() + chromosomes_end <- c() + link_pos_start <- c() + link_pos_start_1 <- c() + link_pos_end <- c() + link_pos_end_2 <- c() + label_1 <- c() + label_2 <- c() + label_color <- c() + + #CALCULATIONS + # ----------------------------------------- + + + add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ + inter_s_rre_n <- data1_inter + inter_rre_s <- data2_inter + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) + #browser() + if (!is.null(inter_rre_s)){ + if (class == 'P'){ + subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + if (length(label_color) != 0){ + for (t in seq(1:length(label_color))){ + if (!is.null(subset_vec[t])){ + if (subset_vec[t] == F){ + label_color[t] <- as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + } + } + } + } else if (class == 'H'){ + if (grep(paste0("^", data1_label, "$"), rename_data$Hierarchy) < (grep(paste0("^", data2_label, "$"), rename_data$Hierarchy))){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else { + label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } + }else if (class == 'R'){ + if (data2_label == input$ref_col_biocircos){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character(rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else if (data1_label == input$ref_col_biocircos){ + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ + if (x %in% rename_data$Group_color) { + as.character(rename_data$Color[rename_data$Group_color == x]) + } + else{ + as.character( rename_data$Color[rename_data$Group_color == 'base']) + } + }))) + } else{ + label_color <- as.character(rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + } + } else { + label_color <-as.character( rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + } + } + return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) + } + data_uploads_2 <- data_uploads + soft_2 <- soft + soft_names_2 <- soft_names + data_to_use_2 <- data_to_use + index <- 1 + for (upload in data_uploads){ + data_uploads_2 <- data_uploads_2[-1] + soft_2 <- soft_2[-1] + soft_names_2 <- soft_names_2[-1] + data_to_use_2 <- data_to_use_2[-1] + index2 <- 1 + if (vals[[upload]] == T){ + for (upload2 in data_uploads_2){ + if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft[index] != soft_2[index2])){ + output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft[index], rename_data, input$label_color_class) + + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + index2 <- index2 +1 + } + write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) + } + index <- index +1 + } + + + + + # Combine labels with mapply to one list + link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) + + # Add links and labels to the track list for subsequent visualization + if ((input$label_color == T) & (length(chromosomes_start) > 0)){ + group_colors <- count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])){ + subset <- unname( which(label_color %in% group_colors$x[i])) + tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) + } + } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ + tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) + } else{ + showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) + } + + vals$tracklist <- tracklist + vals$Biocircos_chromosomes <- Biocircos_chromosomes + }) + #Render output plots + + # Render barplot + output$deep_barplot <- renderPlot({ + req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + whereami::cat_where(whereami::whereami()) + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- drop_na(fullnes_of_annotation) + + deep_inter_1 <- vals$deep_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type == "Activity") { + score <- "score_a" + } else if (input$score_type == "DeepBGC") { + score <- "score_d" + } else if (input$score_type == "Cluster_Type") { + score <- "score_c" + } + deep_inter_1$score <- deep_inter_1[[score]] + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ + + deep_inter <- deep_inter_1 %>% + filter(score>=dataframe_1/100) %>% + select(Start, Stop) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison == 'A'){ + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'P'){ + anti_inter <- vals$prism_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'S'){ + anti_inter <- vals$sempi_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(deep_inter$Start) > 0) { + query <- makeGRangesFromDataFrame(deep_inter) + subject <- makeGRangesFromDataFrame(anti_inter) + interseption <- findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison == 'A'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'P'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") + title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'S') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") + title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_deep <- data.frame(fullnes_of_annotation) + write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), + paste("DeepBGC score:", as.character(input$score_d)), + paste("Cluster type score:", as.character(input$score_c)), sep = "\n") + + # Plot the barplot + ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + + geom_bar(position="dodge", stat="identity")+ + geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + + xlab(paste(input$score_type,"Score")) + + title + + geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$deep_rate <- renderPlotly({ + req(!is.null(vals$fullness_deep)) + whereami::cat_where(whereami::whereami()) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_deep) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison == 'A'){ + data <- vals$anti_data + title <- ggtitle("Rates of DeepBGC/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison == 'P'){ + data <- vals$prism_data + title <- ggtitle("Rates of DeepBGC/PRISM data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison == 'S'){ + data <- vals$sempi_data + title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + ggplotly(test %>% + pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + geom_line(aes(color=Rates)) + + geom_point(aes(shape=Rates), alpha = .4, size = 3) + + title + + ylab("Rate") + + xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + + # Render barplot + output$gecco_barplot <- renderPlot({ + req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + whereami::cat_where(whereami::whereami()) + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- drop_na(fullnes_of_annotation) + + gecco_inter_1 <- vals$gecco_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score <- "score_a" + } else if (input$score_type_gecco == "Cluster_Type") { + score <- "score_c" + } + gecco_inter_1$score <- gecco_inter_1[[score]] + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ + + # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix + gecco_inter <- gecco_inter_1 %>% + filter(score>=dataframe_1/100) %>% + select(Start, Stop) + if (length(gecco_inter$Start) > 0) { + gecco_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison_gecco == 'A'){ + anti_inter <- vals$anti_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'P'){ + anti_inter <- vals$prism_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'S'){ + anti_inter <- vals$sempi_data %>% + select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(gecco_inter$Start) > 0) { + query <- makeGRangesFromDataFrame(gecco_inter) + subject <- makeGRangesFromDataFrame(anti_inter) + interseption <- findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(gecco_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison_gecco == 'A'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'P'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") + title <- ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'S') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") + title <- ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_gecco <- data.frame(fullnes_of_annotation) + write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), + paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") + + # Plot the barplot + ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + + geom_bar(position="dodge", stat="identity")+ + geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + + xlab(paste(input$score_type,"Score")) + + title + + geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$gecco_rate <- renderPlotly({ + req(!is.null(vals$fullness_gecco)) + whereami::cat_where(whereami::whereami()) + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_gecco) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison_gecco == 'A'){ + data <- vals$anti_data + title <- ggtitle("Rates of GECCO/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'P'){ + data <- vals$prism_data + title <- ggtitle("Rates of GECCO/PRISM data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'S'){ + data <- vals$sempi_data + title <- ggtitle("Rates of GECCO/SEMPI data annotation") + test <- test %>% + mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + ggplotly(test %>% + pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + geom_line(aes(color=Rates)) + + geom_point(aes(shape=Rates), alpha = .4, size = 3) + + title + + ylab("Rate") + + xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information + # For antismash and PRISM data showed only ID, Start, Stop, Type + output$deep_reference <- renderPlotly({ + req(vals$data_upload_count >=1) + whereami::cat_where(whereami::whereami()) + req(vals$data_upload_count >=1) + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft <- c("Antismash","SEMPI","PRISM","PRISM_SUPPORT","ARTS","DeepBGC","GECCO","RRE-Finder" ) + abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") + soft_ref <- c("Antismash","SEMPI","PRISM","PRISM-supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) + soft_width <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" , + "gecco_data_filtered", "rre_data") + soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", + "seg_df_ref_g", "seg_df_ref_r") + + inters <- vals$inters_filtered + # GENERATE DATA + index <- 1 + for (upload in data_uploads){ + if (vals[[upload]] == T){ + data<- vals[[data_to_use[index]]] + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_width[index])) + } + index <- index +1 + } + + + lett <- rev(LETTERS)[1:9] + simple_seg <- function(df, letter, software, soft_name ,soft, inter=T){ + if (inter== T){ + data <- df[df$Cluster %in% inters[[soft]][[soft_name]]$from, ] + } else{ + data <- df + } + + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df) + } + + geom_anti <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_deep <- function(data){ + geom_segment(data=data,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + geom_rre <- function(data){ + if (vals$rre_more == T){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } + } + geom_sempi <- function(data){ + + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism_supp <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + geom_arts <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) + } + geom_gecco <- function(data){ + geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + + add_sempi <- function(seg_df, soft, df, inter = T){ + + return(seg_df) + } + + add_arts <- function(seg_df, soft, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft]]$arts$from, ] + }else{ + subset_df <- df + } + seg_df$Hit = subset_df$Hit + seg_df$xend = as.numeric(subset_df$Stop) + seg_df$Core = subset_df$Core + seg_df$Count = subset_df$Count + seg_df$E_value = subset_df$Evalue + seg_df$Bitscore = subset_df$Bitscore + seg_df$Model = subset_df$Model + return(seg_df) + } + add_prism_supp <- function(seg_df, soft, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft]]$prism_supp$from, ] + }else{ + subset_df <- df + } + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Name = subset_df$Name + seg_df$Full_name = subset_df$Full_name + return(seg_df) + } + add_deep <- function(seg_df, soft, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft]]$deep$from, ] + }else{ + subset_df <- df + } + seg_df$num_domains = subset_df$num_domains + seg_df$deepbgc_score = subset_df$deepbgc_score + seg_df$activity = subset_df$product_activity + return(seg_df) + } + add_rre <- function(seg_df, soft, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft]]$rre$from, ] + }else{ + subset_df <- df + } + if (vals$rre_more == T){ + seg_df$xend=as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Stop = subset_df$Stop + seg_df$E_value = subset_df$E.value + seg_df$P_value = subset_df$P.value + seg_df$RRE_start = subset_df$RRE.start + seg_df$RRE_stop = subset_df$RRE.end + seg_df$Probability = subset_df$Probability + } else { + seg_df$xend=subset_df$Stop + seg_df$E_value = subset_df$E.value + } + + return(seg_df) + } + add_gecco <- function(seg_df, soft, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft]]$gecco$from, ] + }else{ + subset_df <- df + } + seg_df$Num_proteins = subset_df$num_prot + seg_df$Num_domains = subset_df$num_domains + seg_df$Average_p = subset_df$average_p + seg_df$Max_p = subset_df$max_p + return(seg_df) + } + + add_more_annot <- function(seg_df, plot, soft_names, index){ + if (dim(seg_df)[1] > 0){ + if (soft_names[index] == "anti"){ + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } + else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } + else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } + else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } + else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } + else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df) + } else if (soft_names[index] == "gecco") { + plot <- plot+geom_gecco(seg_df) + } + return(plot) + } else{ + return(plot) + } + } + + define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T){ + if (inter == F){ + soft_major <- "Not applicable" + } + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ + seg_df <- add_prism_supp(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ + seg_df <- add_arts(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ + seg_df <- add_deep(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ + seg_df <- add_gecco(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ + seg_df <- add_rre(seg_df, soft_major, df, inter) + }else if ((soft_names[index] == "sempi")& (soft_names[index] != soft_major)){ + seg_df <- add_sempi(seg_df, soft_major, df, inter) + } + return(seg_df) + } + +# MAKE COMPUTATIONS + sup_index <- 1 + soft_lttrs <- lett + rename_y_axis <- vals$rename_y_axis + rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ + soft_lttrs[x]=soft[x] + }) + names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] + for (upload in data_uploads){ + soft_lttr <- soft_lttrs[1] + soft_lttrs <- soft_lttrs[-1] + if (vals[[upload]] == T){ + soft_major <- soft_names[sup_index] + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft[sup_index], soft_names[sup_index],soft_major, inter = F) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) + seg_ref <- seg_ref_g + if (input$ref == soft_ref[sup_index]){ + plot <- ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), aes(x = vals$chr_len, y = Chr)) + + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) + soft_let <- abbr[sup_index] + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) + } + index = index +1 + + } + + plot <- plot + + scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("Annotations' comparison to the reference") + to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) + + + } + seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + vals[[soft_datafr[sup_index]]] <- seg_ref + } + sup_index <- sup_index +1 + } + vals$rename_y_axis <- rename_y_axis + + to_plot + }) + + output$deep_reference_2 <- renderPlotly({ + req(vals$data_upload_count >=1) + rename_y_axis <- vals$rename_y_axis + whereami::cat_where(whereami::whereami()) + if (vals$rre_data_input == TRUE){ + if (dim(vals$rre_data)[1]!= 0){ + data <- data.frame(vals$rre_data) + } + } else if (vals$arts_data_input == TRUE){ + if (dim(vals$arts_data_filtered)[1]!= 0){ + data <- vals$arts_data_filtered + } + } else if (vals$anti_data_input == TRUE){ + if (dim(vals$anti_data)[1]!= 0){ + data <- vals$anti_data %>% + mutate(ID = Cluster, Chr = chromosome) %>% + dplyr::select(ID,Chr ,Start, Stop, Type, Type2) + } + }else if (vals$deep_data_input == TRUE){ + if (dim(vals$deep_data_filtered)[1]!= 0){ + data <- vals$deep_data_filtered + } + }else if (vals$prism_data_input == TRUE){ + if (dim(vals$prism_data)[1]!= 0){ + data <- vals$prism_data + } + }else if (vals$sempi_data_input == TRUE){ + if (dim(vals$sempi_data)[1]!= 0){ + data <- vals$sempi_data + } + }else if (vals$gecco_data_input == TRUE){ + if (dim(vals$gecco_data_filtered)[1]!= 0){ + data <- vals$gecco_data_filtered + } + } + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) + if (vals$anti_data_input == TRUE){ + plot <- plot + + geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + if (vals$deep_data_input == TRUE){ + if (dim(vals$seg_df_ref_d)[1] >0) { + plot <- plot + + geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + } + if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + } + } + if (vals$prism_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (vals$sempi_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (input$prism_supp == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + if (vals$arts_data_input == TRUE){ + plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) + } + if (vals$gecco_data_input == TRUE){ + if (dim(vals$seg_df_ref_g)[1] >0) { + plot <- plot + geom_segment(data = vals$seg_df_ref_g, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + } + to_plot <- ggplotly(plot + + scale_y_discrete(labels = rename_y_axis) + + theme(axis.text.y = element_text(size = 10)) + + ylab("")+ + xlab("Chromosome length")+ + theme(legend.title = element_blank()) + + ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot %>% layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) + }) + + # Render Biocircos Plot for all-vs-all comparison + output$biocircos <- renderBioCircos({ + req(vals$data_upload_count >1) + whereami::cat_where(whereami::whereami()) + # Plot BioCircos + BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) + }) + + + output$biocircos_legend <- renderDataTable({ + req(vals$data_upload_count >=1) + whereami::cat_where(whereami::whereami()) + plot_data <- vals$rename_data + new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) + new_data <- new_data[!apply(new_data == "", 1, all),] + colnames(new_data) <- c("Name", "Color") + color_vec <- new_data$Color + options(DT.options = list(pageLength = 50)) + datatable(new_data, rownames = F) %>% formatStyle('Color', + backgroundColor=styleEqual(color_vec, color_vec)) + + + }) + + # Render barplot with number count of interception for BGC IDs + output$barplot_rank <- renderPlotly({ + req(vals$data_upload_count >1) + whereami::cat_where(whereami::whereami()) + antismash_count <- NULL + prism_count <- NULL + deep_count <- NULL + rre_count <- NULL + sempi_count <- NULL + prism_supp_count <- NULL + arts_count <- NULL + gecco_count <- NULL + + inters <- vals$inters_filtered + + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") + index <- 1 + ranking_data <- NULL + for (upload in data_uploads){ + if (vals[[upload]] == T){ + counts_var <-count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] + # Add prefices to the ID to plot for a barplot. + counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) + # Add label column to the dataframe, from which we will plot + counts_var$label <- rep(soft[index], length(counts_var$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + counts_var$Type <- anot_var$Type + # Add Start positions (to visualize on hover) + counts_var$Start <- anot_var$Start + # Add Stop positions (to visualize on hover) + counts_var$Stop <- anot_var$Stop + if (is.null(ranking_data)){ + ranking_data <- counts_var + } else{ + ranking_data <- rbind(ranking_data, counts_var) + } + } + index <- index +1 + } + + + # Fix column names in the master dataframe + colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") + # Plot + ggplotly(ggplot(ranking_data, aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + geom_bar(stat = "identity", aes(fill = Label)) + + theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = element_text(size = 14)) + + ggtitle("Number of times cluster is annotated with other tool"), + tooltip=c("Type", "Start", "Stop") + ) + + + }) + + # Render table with data + output$group_table <- renderTable({ + req(vals$data_upload_count >1) + whereami::cat_where(whereami::whereami()) + refine_unique <- function(data){ + n <- tail(data, n=1) + data <- head(data, -1) + n_list <- str_split(n, ",") + out <- sapply(n_list[[1]], function(x){x %in% unlist(str_split(data, ","))}) + res <- sapply(out, function(x){ + if (x==F){ + x + } + }) + + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) + } + + inters <- vals$inters_filtered + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") + soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') + + df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) + colnames(df_test) <- soft_let + added_inters <- c(soft_names[match(input$group_by, soft_let)]) + add_inters <- list() + if (input$count_all == F){ + df_test[nrow(df_test)+1,] <- NA + } else{ + if( (input$group_by == "D") | (input$group_by == "G")){ + selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data_filtered") + } else { + selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data") + } + df_test <- data.frame(matrix(ncol = length(soft_let), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- soft_let + df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test)+1,] <- NA + } + for (i in seq(1:length(data_uploads))){ + if (input$group_by==soft_let[[i]]){ + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))){ + if (name==soft_names[match(soft_n, soft_names)][h]){ + colnames(df_tmp) <- c(soft_let[i],soft_let[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) + } + } + + index <- index +1 + } + excluded_names <- soft_let[soft_let != as.name(soft_let[i])] + data <- df_test %>% group_by_if(colnames(df_test)==soft_let[i]) %>% summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + b=paste(eval(as.name(excluded_names[2])), collapse=","), + c=paste(eval(as.name(excluded_names[3])), collapse=","), + d=paste(eval(as.name(excluded_names[4])), collapse=","), + e=paste(eval(as.name(excluded_names[5])), collapse=","), + f=paste(eval(as.name(excluded_names[6])), collapse=","), + g=paste(eval(as.name(excluded_names[7])), collapse=",")) + colnames(data) <- c(soft_let[i], excluded_names) + for (p in soft_let){ + data[[p]] <- gsub('NA,|,NA', '', data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, soft_let)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))){ + if (vals[[data_uploads[f]]] != TRUE){ + data <- data %>% + select(-as.name(soft_namings[f])) + } + } + + } else { + if ( !(soft_names[i] %in% added_inters)){ + matched_v <- match(added_inters,names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])){ + if (!(inter %in% added_inters)){ + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } + } + added_inters <- c(added_inters, soft_names[i])} + } + } + + for (name in names( add_inters) ){ + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + write.csv(data, "group_by.csv", row.names = F) + data + }) + + # Download used datasets (as for BioCircos) + output$download <- downloadHandler(filename = function(){ + paste("datasets.zip") + }, + content = function(file){ + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } else if (grepl('group.py', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } + } + #create the zip file from flst vector + zip(file, flst) }, + contentType = "application/zip" ) + +} + +# Run the application +shinyApp(ui = ui, server = server) diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index cabc55e..213e305 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -26,6 +26,10 @@ aminocoumarin|other|||| The data used for renaming is stored under "Code" and "Group" columns. The default file is available is the BGCViz directory or in the [Glossary](Glossary.md). The one is free to use any renaming scheme, but the whole csv file should be uploaded in the file input in BGCViz: ![rename](/images/rename.png) + +**After the renaming, "Rename" button will dissapear, and only "Reset" will be available. After reseting, "Rename" button will exange it. This is made to indicate if the used is already renamed, or not. ** + +**Please note: After "Rename" button is triggered, SEMPI, Antismash and PRISM data will be renamed prior to plotting automatically** # Coloring renamed data diff --git a/docs/Glossary.md b/docs/Glossary.md index e6b3de3..cffbab5 100644 --- a/docs/Glossary.md +++ b/docs/Glossary.md @@ -1,91 +1,91 @@ # Renaming scheme | Product | Renamed | | ----------- | ----------- | -|polyketide|pks| -|nonribosomal_peptide|nrps| -|melanin|melanin| -|ectoine|other| -|pentangular_polyphenol|other| -|nrps-independent_siderophore_synthase|other| -|angucycline-type|pks| -|angucycline|pks| -|butyrolactone|ripp| -|class_i_lantipeptide|ripp| -|lasso_peptide|ripp| -|nis_synthase|other| -|acyl_amino_acids|other| -|aminocoumarin|other| -|amglyccycl|other| -|arylpolyene|other| -|betalactone|other| -|blactam|other| -|bottromycin|other| -|butyrolactone|other| -|cdps|other| -|cyanobactin|other| -|fatty_acid|other| -|furan|other| -|fungal-ripp|ripp| -|glycocin|ripp| -|guanidinotides|other| -|halogenated|other| -|hgle-ks|pks| -|hserlactone|other| -|indole|other| -|lap|ripp| -|ladderane|other| -|lanthipeptide-class-i|ripp| -|lanthipeptide-class-ii|ripp| -|lanthipeptide-class-iii|ripp| -|lanthipeptide-class-iv|ripp| -|lanthipeptide-class-v|ripp| -|lassopeptide|ripp| -|linaridin|other| -|lipolanthine|other| -|microviridin|other| -|naggn|other| -|napaa|other| -|nrps|nrps| -|nrps-like|nrps| -|nucleoside|other| -|oligosaccharide|saccharide| -|other|other| -|pbde|other| -|phenazine|other| -|phosphoglycolipid|other| -|phosphonate|other| -|pks-like|pks| -|ppys-ks|other| -|proteusin|other| -|pufa|other| -|pyrrolidine|other| -|ranthipeptide|ripp| -|ras-ripp|other| -|redox-cofactor|other| -|resorcinol|other| -|ripp-like|ripp| -|rre-containing|ripp| -|saccharide|saccharide| -|sactipeptide|ripp| -|siderophore|other| -|t1pks|pks| -|t2pks|pks| -|t3pks|pks| -|terpene|terpene| -|thioamitides|other| -|thioamide-nrp|other| -|thiopeptide|ripp| -|transat-pks|pks| -|transat-pks-like|pks| -|tropodithietic-acid|other| -|bacteriocin|ripp| -|fused|other| -|head_to_tail|other| -|lanthidin|other| -|lanthipeptide|ripp| -|tfua-related|other| -|otherks|other| -|microcin|other| -|cf_saccharide|saccharide| -|cf_fatty_acid|other| -|cf_putative|other| \ No newline at end of file +polyketide|pks| +nonribosomal_peptide|nrps| +melanin|melanin|ripp| +ectoine|other|saccharide| +pentangular_polyphenol|other| +nrps-independent_siderophore_synthase|other| +angucycline-type|pks| +angucycline|pks| +butyrolactone|ripp| +class_i_lantipeptide|ripp| +lasso_peptide|ripp| +nis_synthase|other| +acyl_amino_acids|other| +aminocoumarin|other| +amglyccycl|other| +arylpolyene|other| +betalactone|other| +blactam|other| +bottromycin|other| +cdps|other| +cyanobactin|other| +fatty_acid|other| +furan|other| +fungal-ripp|ripp| +glycocin|ripp| +guanidinotides|other| +halogenated|other| +hgle-ks|pks| +hserlactone|other| +indole|other| +lap|ripp| +ladderane|other| +lanthipeptide-class-i|ripp| +lanthipeptide-class-ii|ripp| +lanthipeptide-class-iii|ripp| +lanthipeptide-class-iv|ripp| +lanthipeptide-class-v|ripp| +lassopeptide|ripp| +linaridin|other| +lipolanthine|other| +microviridin|other| +naggn|other| +napaa|other| +nrps|nrps| +nrps-like|nrps| +nucleoside|other| +oligosaccharide|saccharide| +other|other| +pbde|other| +phenazine|other| +phosphoglycolipid|other| +phosphonate|other| +pks-like|pks| +ppys-ks|other| +proteusin|other| +pufa|other| +pyrrolidine|other| +ranthipeptide|ripp| +ras-ripp|other| +redox-cofactor|other| +resorcinol|other| +ripp-like|ripp| +rre-containing|ripp| +saccharide|saccharide| +sactipeptide|ripp| +siderophore|other| +t1pks|pks| +t2pks|pks| +t3pks|pks| +terpene|terpene| +thioamitides|other| +thioamide-nrp|other| +thiopeptide|ripp| +transat-pks|pks| +transat-pks-like|pks| +tropodithietic-acid|other| +bacteriocin|ripp| +fused|other| +head_to_tail|other| +lanthidin|other| +lanthipeptide|ripp| +tfua-related|other| +otherks|other| +microcin|other| +cf_saccharide|saccharide| +cf_fatty_acid|other| +cf_putative|other| +class_iii_iv_lantipeptide|ripp| \ No newline at end of file diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index 2e83464..54e09dc 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -24,14 +24,14 @@ File itself can be created manually from the antismash results. # PRISM Similarly to the AntiSMASH, there are two options for the PRISM input: -1. Use the json report file. It can be downloaded after the run. Because of the small size of json output file, it can be directly uploaded to the BGCViz. Be sure the checkbox "My PRISM data is a dataframe, not json results file" is UNTICKED. **We are expecting that the run was made on version >= 4.4.5 of the PRISM. If earlier version was used, please provide the csv instead of json one.** +1. Use the json report file. It can be downloaded after the PRISM run. Because of the small size of json output file, it can be directly uploaded to the BGCViz. Be sure the checkbox "My PRISM data is a dataframe, not json results file" is UNTICKED. **We are expecting that the run was made on version >= 4.4.5 of the PRISM. If earlier version was used, please provide the csv instead of json one.** 2. The csv format file. Identical to one, described in the [Antismash](#antismash) section above. Can also be created manually. The command for generation from json to csv format is the following: ```R Rscript prism.R ``` -**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Data manipulation option" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "P-supp"** +**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Data manipulation option" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "PRISM_SUPPORT"** **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of PRISM, but the result plot will label these as "PRISM"** @@ -46,7 +46,7 @@ The db file, script can transform to the .csv file is the `/genome_browser/mai **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** # DeepBGC -We are expecting the default DeepBGC tsv output file. Please the the example in /example_data folder +We are expecting the default DeepBGC tsv output file. Please see the example in /example_data folder # RRE-Finder We the expecting the modified default txt results file from RRE-Finder, which is in the format as below (in case of exploratory mode): @@ -70,4 +70,7 @@ The expected list of modifications: # ARTS There are two uploads for the ARTS data. And only two files are provided the data will be included in the analysis. Firstly, download the ARTS results (all results). 1. The first expected tsv file is knownhits.tsv (holding the hits to existing resisntance models) in the `/tables/knownhits.tsv` -2. The second input is duptable.tsv (holding the duplicated housekeeping genes data) in the `/tables/duptable.tsv` \ No newline at end of file +2. The second input is duptable.tsv (holding the duplicated housekeeping genes data) in the `/tables/duptable.tsv` + +# GECCO +We are expecting the default GECCO tsv output file. Please see the example in /example_data folder \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md index 4cf4cd7..f8b47bf 100755 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -5,7 +5,7 @@ The app itself is written in R and is available as a [shiny app server](https:// ## Base packages All packages can be installed via R console in Rstudio via: ```R -install.packages(c("BioCircos", "ggplot2", "plotly", "plyr", "tidyverse", "shiny", "DT" ,"rjson", "stringr", "shinyjs" )) +install.packages(c("BioCircos", "ggplot2", "plotly", "plyr", "tidyverse", "shiny", "DT" ,"rjson", "stringr", "shinyjs", "bslib" )) ``` After, to install GenomicRanges package please run ```R @@ -32,4 +32,4 @@ The local run of an app is identical to the website one, with the same UI in the - Better response time - Control over execution. Quick modifications to the code. -Besides speed and flexibility of a local run, ability of upload raw json output files from PRISM and AntiSMASH is a big plus (more details [here](Input_files_options.md)). For server usage we are suggesting to convert the json files to the csv ones, using provided scripts (more details [here](Input_files_options.md)). +Besides speed and flexibility of a local run, ability of upload raw json output files from AntiSMASH is a big plus (more details [here](Input_files_options.md)). For server usage we are suggesting to convert the json file to the csv one, using provided scripts (more details [here](Input_files_options.md)). diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md index b711b6b..151b651 100644 --- a/docs/Logic_of_the_output.md +++ b/docs/Logic_of_the_output.md @@ -9,12 +9,31 @@ The "Compare to DeepBGC" tab is available after DeepBGC data upload and if the m **Note: Comparison of DeepBGC data is available only to PRiSM, SEMPI or Antismash. So, if, for example, DeepBGC and RRE-Finder data was uploaded, the tab will be available, but plots will not be rendered** +# Select menus +The select menus are populated after certain data was uploaded. Therefore you will not all the possible options right away. This is made to avoid possible errors. +All the options for data are: +- Antismash +- PRISM +- SEMPI +- PRISM-Supp +- RRE-Finder +- ARTS +- GECCO +- DeepBGC + +On DeepBGC and GECCO comparison tabs the following data is available for analysis: +- Antismash +- PRISM +- SEMPI + +If you have uploaded your custom data, but prepared it according to the [guide](Input_files_options.md), then it will appear under the field name. The same applicable to the plots. + # Data upload and manipulation Data upload is done with the corresponding file upload menus. Detailed description of the input files is [here](Input_files_options.md). ![upload_menu](/images/data_upload.png) -After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. The longest period of unresponsiveness occurs after PRISM json file upload. It can last up to 3 min. +After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. **The supplementary PRISM data is available if the uploaded data was a json report, generated by the service. To include resistance and regulatory genes, identified by PRISM into the analysis, please tick the corresponding checkbox in "Data manipulation options" menu** @@ -70,6 +89,9 @@ The second group of plot controls affect only the first barplot. They include: **Tip: you can hide all not used controls with the "Hide..." checkbox** +# Compare data with GECCO +The same as DeepBGC option above. + # Annotation visualization and comparison The plots on this tab can be thought to be "Genes on chromosome". Here are two plots available: - The general "Genes on chromosome" plots, which contain all the annotations from all tools. On mouse hover over BGC, information, particular to the chosen tool, is shown. @@ -120,7 +142,7 @@ This tab is being shown after more than two datasets are uploaded. To logic beh ![summarize](/images/summarize_plot.png) -2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. +2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. The last row indicates cluster, that are inerecepted outside of a chosen data. It means, that they are annotated more that with one tool, but not with the chosen one. ![group_by_t](/images/group_by_table.png) @@ -137,6 +159,7 @@ These options are dynamically updated upon different data types upload. They inc - Add thickness to RRE-Finder results - Add thickness to PRISM results (regulatory and resistance genes) - Add thickness to ARTS results +- Add thickness to SEMPI results - Coloring option for biocircos, which are described above The rationale behind adding the thickness is that arcs on biocircos plot and genes in the "Annotation visualization and comparison" tab plots for these results are roughly visible. These options are just adding some length to the results, therefore making them visible. These options DO NOT affect the interception results. \ No newline at end of file diff --git a/docs/Quick_start.md b/docs/Quick_start.md index 296deb0..6a9edec 100644 --- a/docs/Quick_start.md +++ b/docs/Quick_start.md @@ -66,7 +66,7 @@ Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is avai Let's proceed and upload PRISM and SEMPI results: -#### **The example S.coelicolor data is available upon button press uder PRISM and SEMPI input fields.** +#### **The example S.coelicolor data is available upon button press under PRISM and SEMPI input fields.** ![prism_sempi](/images/prism_sempi.png) diff --git a/group.py b/group.py index 3429f04..f702aa7 100644 --- a/group.py +++ b/group.py @@ -29,55 +29,67 @@ def write_gbs(group_by, data, label, seq_file): subrecord.annotations = annotation SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") +def main(): + group_by = pd.read_csv("group_by.csv", dtype = str) + seq_file = sys.argv[1] -group_by = pd.read_csv("group_by.csv", dtype = str) -seq_file = sys.argv[1] + print("Searching for antismash files...") + if os.path.exists("antismash_biocircos.csv"): + print("Found!") + data = pd.read_csv("antismash_biocircos.csv") + label = "Antismash" + write_gbs(group_by, data, label, seq_file) -print("Searching for antismash files...") -if os.path.exists("antismash_biocircos.csv"): - print("Found!") - data = pd.read_csv("antismash_biocircos.csv") - label = "Antismash" - write_gbs(group_by, data, label, seq_file) + print("Searching for deepbcg files...") + if os.path.exists("deepbgc_biocircos.csv"): + print("Found!") + data = pd.read_csv("deepbgc_biocircos.csv") + label = "DeepBGC" + write_gbs(group_by, data, label, seq_file) -print("Searching for deepbcg files...") -if os.path.exists("deepbgc_biocircos.csv"): - print("Found!") - data = pd.read_csv("deepbgc_biocircos.csv") - label = "DeepBGC" - write_gbs(group_by, data, label, seq_file) + print("Searching for prism files...") + if os.path.exists("prism_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_biocircos.csv") + label = "PRISM" + write_gbs(group_by, data, label, seq_file) -print("Searching for prism files...") -if os.path.exists("prism_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_biocircos.csv") - label = "PRISM" - write_gbs(group_by, data, label, seq_file) + print("Searching for rre-finder files...") + if os.path.exists("rre_biocircos.csv"): + print("Found!") + data = pd.read_csv("rre_biocircos.csv") + label = "RRE-Finder" + write_gbs(group_by, data, label, seq_file) -print("Searching for rre-finder files...") -if os.path.exists("rre_biocircos.csv"): - print("Found!") - data = pd.read_csv("rre_biocircos.csv") - label = "RRE-Finder" - write_gbs(group_by, data, label, seq_file) + print("Searching for sempi files...") + if os.path.exists("sempi_biocircos.csv"): + print("Found!") + data = pd.read_csv("sempi_biocircos.csv") + label = "SEMPI" + write_gbs(group_by, data, label, seq_file) -print("Searching for sempi files...") -if os.path.exists("sempi_biocircos.csv"): - print("Found!") - data = pd.read_csv("sempi_biocircos.csv") - label = "SEMPI" - write_gbs(group_by, data, label, seq_file) + print("Searching for ARTS files...") + if os.path.exists("arts_biocircos.csv"): + print("Found!") + data = pd.read_csv("arts_biocircos.csv") + label = "ARTS" + write_gbs(group_by, data, label, seq_file) -print("Searching for ARTS files...") -if os.path.exists("arts_biocircos.csv"): - print("Found!") - data = pd.read_csv("arts_biocircos.csv") - label = "ARTS" - write_gbs(group_by, data, label, seq_file) + print("Searching for PRISM supplement files...") + if os.path.exists("prism_supp_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_supp_biocircos.csv") + label = "PRISM-supp" + write_gbs(group_by, data, label, seq_file) -print("Searching for PRISM supplement files...") -if os.path.exists("prism_supp_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_supp_biocircos.csv") - label = "PRISM-supp" - write_gbs(group_by, data, label, seq_file) \ No newline at end of file + print("Searching for GECCO files...") + if os.path.exists("gecco_biocircos.csv"): + print("Found!") + data = pd.read_csv("gecco_biocircos.csv") + label = "GECCO" + write_gbs(group_by, data, label, seq_file) + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/rename.csv b/rename.csv index ec16461..ef66ee8 100644 --- a/rename.csv +++ b/rename.csv @@ -1,89 +1,89 @@ -Code,Group,Group_color,Color,Vacant_colors,Hierarchy -polyketide,pks,pks,#a6cee3,,Antismash -nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM -melanin,melanin,ripp,#b2df8a,,SEMPI -ectoine,other,saccharide,#33a02c,,DeepBGC -pentangular_polyphenol,other,melanin,#fb9a99,,GECCO -nrps-independent_siderophore_synthase,other,other,#e31a1c,,RRE -angucycline-type,pks,terpene,#fdbf6f,,PRISM-supp -angucycline,pks,alkaloid,#ff7f00,,ARTS -butyrolactone,ripp,hybrid,#cab2d6,, -class_i_lantipeptide,ripp,core,#6a3d9a,, -lasso_peptide,ripp,regulatory,#ffff99,, -nis_synthase,other,resistance,#b15928,, -acyl_amino_acids,other,base,#d4ced6,, -aminocoumarin,other,,,, -amglyccycl,other,,,, -arylpolyene,other,,,, -betalactone,other,,,, -blactam,other,,,, -bottromycin,other,,,, -butyrolactone,other,,,, -cdps,other,,,, -cyanobactin,other,,,, -fatty_acid,other,,,, -furan,other,,,, -fungal-ripp,ripp,,,, -glycocin,ripp,,,, -guanidinotides,other,,,, -halogenated,other,,,, -hgle-ks,pks,,,, -hserlactone,other,,,, -indole,other,,,, -lap,ripp,,,, -ladderane,other,,,, -lanthipeptide-class-i,ripp,,,, -lanthipeptide-class-ii,ripp,,,, -lanthipeptide-class-iii,ripp,,,, -lanthipeptide-class-iv,ripp,,,, -lanthipeptide-class-v,ripp,,,, -lassopeptide,ripp,,,, -linaridin,other,,,, -lipolanthine,other,,,, -microviridin,other,,,, -naggn,other,,,, -napaa,other,,,, -nrps,nrps,,,, -nrps-like,nrps,,,, -nucleoside,other,,,, -oligosaccharide,saccharide,,,, -other,other,,,, -pbde,other,,,, -phenazine,other,,,, -phosphoglycolipid,other,,,, -phosphonate,other,,,, -pks-like,pks,,,, -ppys-ks,other,,,, -proteusin,other,,,, -pufa,other,,,, -pyrrolidine,other,,,, -ranthipeptide,ripp,,,, -ras-ripp,other,,,, -redox-cofactor,other,,,, -resorcinol,other,,,, -ripp-like,ripp,,,, -rre-containing,ripp,,,, -saccharide,saccharide,,,, -sactipeptide,ripp,,,, -siderophore,other,,,, -t1pks,pks,,,, -t2pks,pks,,,, -t3pks,pks,,,, -terpene,terpene,,,, -thioamitides,other,,,, -thioamide-nrp,other,,,, -thiopeptide,ripp,,,, -transat-pks,pks,,,, -transat-pks-like,pks,,,, -tropodithietic-acid,other,,,, -bacteriocin,ripp,,,, -fused,other,,,, -head_to_tail,other,,,, -lanthidin,other,,,, -lanthipeptide,ripp,,,, -tfua-related,other,,,, -otherks,other,,,, -microcin,other,,,, -cf_saccharide,saccharide,,,, -cf_fatty_acid,other,,,, -cf_putative,other,,,, +Code,Group,Group_color,Color,Vacant_colors,Hierarchy, +polyketide,pks,pks,#a6cee3,,SEMPI,SEMPI +nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM, +melanin,melanin,ripp,#b2df8a,,Antismash, +ectoine,other,saccharide,#33a02c,,DeepBGC, +pentangular_polyphenol,other,melanin,#fb9a99,,GECCO, +nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder, +angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp, +angucycline,pks,alkaloid,#ff7f00,,ARTS, +butyrolactone,ripp,hybrid,#cab2d6,,, +class_i_lantipeptide,ripp,core,#6a3d9a,,, +lasso_peptide,ripp,regulatory,#ffff99,,, +nis_synthase,other,resistance,#b15928,,, +acyl_amino_acids,other,base,#d4ced6,,, +aminocoumarin,other,,,,, +amglyccycl,other,,,,, +arylpolyene,other,,,,, +betalactone,other,,,,, +blactam,other,,,,, +bottromycin,other,,,,, +cdps,other,,,,, +cyanobactin,other,,,,, +fatty_acid,other,,,,, +furan,other,,,,, +fungal-ripp,ripp,,,,, +glycocin,ripp,,,,, +guanidinotides,other,,,,, +halogenated,other,,,,, +hgle-ks,pks,,,,, +hserlactone,other,,,,, +indole,other,,,,, +lap,ripp,,,,, +ladderane,other,,,,, +lanthipeptide-class-i,ripp,,,,, +lanthipeptide-class-ii,ripp,,,,, +lanthipeptide-class-iii,ripp,,,,, +lanthipeptide-class-iv,ripp,,,,, +lanthipeptide-class-v,ripp,,,,, +lassopeptide,ripp,,,,, +linaridin,other,,,,, +lipolanthine,other,,,,, +microviridin,other,,,,, +naggn,other,,,,, +napaa,other,,,,, +nrps,nrps,,,,, +nrps-like,nrps,,,,, +nucleoside,other,,,,, +oligosaccharide,saccharide,,,,, +other,other,,,,, +pbde,other,,,,, +phenazine,other,,,,, +phosphoglycolipid,other,,,,, +phosphonate,other,,,,, +pks-like,pks,,,,, +ppys-ks,other,,,,, +proteusin,other,,,,, +pufa,other,,,,, +pyrrolidine,other,,,,, +ranthipeptide,ripp,,,,, +ras-ripp,other,,,,, +redox-cofactor,other,,,,, +resorcinol,other,,,,, +ripp-like,ripp,,,,, +rre-containing,ripp,,,,, +saccharide,saccharide,,,,, +sactipeptide,ripp,,,,, +siderophore,other,,,,, +t1pks,pks,,,,, +t2pks,pks,,,,, +t3pks,pks,,,,, +terpene,terpene,,,,, +thioamitides,other,,,,, +thioamide-nrp,other,,,,, +thiopeptide,ripp,,,,, +transat-pks,pks,,,,, +transat-pks-like,pks,,,,, +tropodithietic-acid,other,,,,, +bacteriocin,ripp,,,,, +fused,other,,,,, +head_to_tail,other,,,,, +lanthidin,other,,,,, +lanthipeptide,ripp,,,,, +tfua-related,other,,,,, +otherks,other,,,,, +microcin,other,,,,, +cf_saccharide,saccharide,,,,, +cf_fatty_acid,other,,,,, +cf_putative,other,,,,, +class_iii_iv_lantipeptide,ripp,,,,, From ce73b0f672d4842f5c85d01b160618b4922bd467 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 11 Jul 2021 19:49:20 +0300 Subject: [PATCH 026/199] Added comments, deleted testing chunks Former-commit-id: b7ed7e6e701413b3288f65294697517ac4940ee2 --- app.R | 439 +++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 269 insertions(+), 170 deletions(-) diff --git a/app.R b/app.R index c3520a8..1dbadd3 100755 --- a/app.R +++ b/app.R @@ -4,8 +4,9 @@ # Author: Pavlo Hrab # Made as part of Cambridge bioinformatics hackaton # -# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH and RREFinder -# to visualized interception of those different annotations in one genome +# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH, RRE-Finder, +# GECCO, ARTS, SEMPI to visualized interception of those different annotations +# in one genome # # Upload required libraries @@ -20,8 +21,6 @@ library(rjson) library(stringr) library(DT) library(GenomicRanges) - -## TESTING # Define UI ui <- fluidPage( @@ -32,6 +31,7 @@ ui <- fluidPage( useShinyjs(), sidebarLayout( sidebarPanel( + # Define sidebar logic. Make it fixed and not overflow id = "tPanel",style = "overflow-y:scroll; max-height: 90vh; position:fixed; width:inherit;", # Data upload h3("Data upload and necesary input:"), @@ -92,7 +92,6 @@ ui <- fluidPage( checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), h3("Improve visualization:"), checkboxInput("hide_viz", "Hide improve visualization options"), - #Improve RREFinder annotated BCG visibility fileInput("rename_data", "Upload renaming and coloring scheme"), actionButton("rename", "Rename"), @@ -115,7 +114,6 @@ ui <- fluidPage( selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", "Cluster_type score" = "Cluster_Type"), selected = "avg_p"), - # Chose step for barplot (as a threshold to draw a bar) sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), h3(id="data_filter_header_gecco","Gecco data filtering:"), @@ -156,6 +154,7 @@ ui <- fluidPage( # Show plots mainPanel( + # Define tabs and their correcponding plots tabsetPanel( tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), tabPanel(title = "Compare data with Gecco", value = 5 ,plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), @@ -171,21 +170,9 @@ ui <- fluidPage( # Define server logic server <- function(input, output, session) { - #CLEAN THE DIRECTORY - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add remove them - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - file.remove(file_names) - } - } - options(shiny.maxRequestSize=100*1024^2) - # Small function to make integers zeros - is.integer0 <- function(x) - { - is.integer(x) && length(x) == 0L - } - + ##--------------------------------------------------------------- + ## Some lists of reactive values to listen later - + ##--------------------------------------------------------------- check_to_rename <- reactive({list(input$sempi_data, input$anti_data, input$prism_data, input$sempi_sco,input$anti_sco, input$prism_sco)}) biocircos_listen <- reactive({ @@ -210,7 +197,6 @@ server <- function(input, output, session) { - # Rective vals the app is using # Some dataframes that are used through the app + some vectors of untercepted values vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, @@ -225,13 +211,33 @@ server <- function(input, output, session) { df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list() + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F ) vals$computed <- list( anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) vals$rename_data <- read.csv("rename.csv") + ##---------------------------------------------------------------- + ## Helper functions - + ##---------------------------------------------------------------- + # Need to get them to a separate file later + # TODO + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add remove them + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + file.remove(file_names) + } + } + options(shiny.maxRequestSize=100*1024^2) + # Small function to make integers zeros + is.integer0 <- function(x) + { + is.integer(x) && length(x) == 0L + } + # Fix the duplicates in PRISM-Supp data. Therefore 1 row for 1 orf fix_duplicates <- function(test_score, order_vec, regul_genes_orfs){ dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) @@ -241,6 +247,7 @@ server <- function(input, output, session) { test_score[duplicated_values-1] <- paste(test_score[duplicated_values-1] , to_add, sep="/") return(test_score) } + # PRISM data processing process_prism_json_suppl <- function(data){ types <- sapply(data$prism_results$clusters, function(x){ tolower(x$type) @@ -337,6 +344,7 @@ server <- function(input, output, session) { rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) return(list(prism_data, final_reg)) } + # Filtering the DeepBGC filter_deepbgc <- function(){ score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) @@ -362,6 +370,7 @@ server <- function(input, output, session) { biocircos_deep['Cluster'] <- biocircos_deep$ID return(biocircos_deep) } + # Filtering GECCO filter_gecco <- function(){ score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) @@ -375,6 +384,7 @@ server <- function(input, output, session) { num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) return(gecco_data) } + # Renaming the vector for inout$rename event rename_vector <- function(data, renamed_dataframe){ type <- str_split(data$Type2, "__") type_2 <- sapply(type, function(x){ @@ -408,6 +418,8 @@ server <- function(input, output, session) { }) return(as.character(type_4)) } + # Adding the thickness to the visualization for SEMPI, + # ARTS, RRE, PRISN-Supp data correct_width <- function(data, label){ if ((label == 'SEMPI')&(input$sempi_width == T)){ data$Stop <- data$Stop + 30000 @@ -420,10 +432,33 @@ server <- function(input, output, session) { } return(data) } + disable_event_logic <- function(){ + vals$can_plot_deep_ref = F + vals$can_plot_biocircos = F + vals$can_plot_barplot_rank = F + vals$can_plot_group_table = F + } + enable_event_logic <- function(){ + vals$can_plot_deep_ref = T + vals$can_plot_biocircos = T + vals$can_plot_barplot_rank = T + vals$can_plot_group_table = T + } - # Upload example data + ########################################################################### + ########################################################################### + ### ### + ### DATA INPUT PROCESSING ### + ### ### + ########################################################################### + ########################################################################### + # TODO Make separate functions for different data types. + # For now you just have duplicated the code. Specifically for ARTS! + #---------------------------------------------------------------- + ## Loading and processing of example data - + ##---------------------------------------------------------------- observeEvent(input$anti_sco,{ - whereami::cat_where(whereami::whereami()) + anti_data <- read.csv("example_data/sco_antismash.csv") # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) @@ -451,6 +486,7 @@ server <- function(input, output, session) { choices = vals$choices$ref_comparison_gecco ) updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "Antismash" ) @@ -468,7 +504,7 @@ server <- function(input, output, session) { }) observeEvent(input$gecco_sco,{ - whereami::cat_where(whereami::whereami()) + gecco_data <- read.delim("example_data/sco_gecco.tsv") # Add chromosome column gecco_data$chromosome <- rep("G", length(gecco_data$type)) @@ -506,6 +542,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "GECCO" ) @@ -532,7 +569,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-supp" = "PRISM-supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") updateSelectInput(session, "ref", choices = vals$choices$ref ) updateSelectInput(session, "group_by", @@ -567,6 +604,7 @@ server <- function(input, output, session) { choices = vals$choices$ref_comparison_gecco ) updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "PRISM" ) @@ -582,7 +620,7 @@ server <- function(input, output, session) { }) observeEvent(input$sempi_sco,{ - whereami::cat_where(whereami::whereami()) + sempi_data <- read.csv("example_data/sco_sempi.csv") sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 @@ -610,6 +648,7 @@ server <- function(input, output, session) { choices = vals$choices$ref_comparison_gecco ) updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "SEMPI" ) @@ -628,7 +667,7 @@ server <- function(input, output, session) { observeEvent(input$arts_sco, { data <- read.delim("example_data/sco_duptable.tsv") - + disable_event_logic() get_location_duptable <- function(x, y){ test <- str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) @@ -736,6 +775,7 @@ server <- function(input, output, session) { }) observeEvent(input$deep_sco, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% @@ -760,6 +800,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "DeepBGC" ) @@ -773,7 +814,7 @@ server <- function(input, output, session) { }) observeEvent(input$rre_sco, { - whereami::cat_where(whereami::whereami()) + # Read data vals$rre_data <- read.delim("example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) @@ -801,6 +842,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "RRE-Finder" ) @@ -818,8 +860,12 @@ server <- function(input, output, session) { } }) - # Read the data + ##---------------------------------------------------------------- + ## Loading and processing user data - + ##---------------------------------------------------------------- observeEvent(input$anti_data,{ + + disable_event_logic() # Read data if (input$anti_input_options==T){ anti_data <- read.csv(input$anti_data$datapath) @@ -913,6 +959,7 @@ server <- function(input, output, session) { observeEvent(input$sempi_data,{ + sempi_data <- read.csv(input$sempi_data$datapath) sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 @@ -940,6 +987,7 @@ server <- function(input, output, session) { choices = vals$choices$ref_comparison_gecco ) updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "SEMPI" ) @@ -993,6 +1041,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "GECCO" ) @@ -1004,7 +1053,11 @@ server <- function(input, output, session) { }) + # These are for ARTS data processing + # input$known_data and inoput$dup_data observeEvent(input$known_data, { + disable_event_logic() + data <- read.delim(input$known_data$datapath) locations <- sapply(data$Sequence.description, function(x){ tail(str_split(x , "\\|")[[1]], 1) @@ -1073,6 +1126,8 @@ server <- function(input, output, session) { }) observeEvent(input$dup_data, { + disable_event_logic() + data <- read.delim(input$dup_data$datapath) get_location_duptable <- function(x, y){ @@ -1153,6 +1208,7 @@ server <- function(input, output, session) { }) observeEvent(input$prism_data,{ + # Read data if (input$prism_input_options == T){ prism_data <- read.csv(input$prism_data$datapath) @@ -1167,7 +1223,7 @@ server <- function(input, output, session) { vals$prism_json = T vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-supp" = "PRISM-supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") updateSelectInput(session, "ref", choices = vals$choices$ref ) updateSelectInput(session, "group_by", @@ -1203,6 +1259,7 @@ server <- function(input, output, session) { write.csv(vals$prism_data, "prism_data.csv", row.names = F) vals$prism_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "PRISM" ) @@ -1218,6 +1275,7 @@ server <- function(input, output, session) { }) observeEvent(input$deep_data, { + drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data vals$deep_data <- read.delim(input$deep_data$datapath) %>% @@ -1242,6 +1300,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "DeepBGC" ) @@ -1255,6 +1314,7 @@ server <- function(input, output, session) { }) observeEvent(input$rre_data, { + # Read data vals$rre_data <- read.delim(input$rre_data$datapath) # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) @@ -1281,6 +1341,7 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) + disable_event_logic() if (vals$data_upload_count == 1){ updateSelectInput(session, "ref", selected = "RRE-Finder" ) @@ -1298,14 +1359,25 @@ server <- function(input, output, session) { } }) + ############################################################################ + ############################################################################ + ### ### + ### INTERFACE LOGIC: WHAT TO SHOW AND WHEN ### + ### ### + ############################################################################ + ############################################################################ # Observe input of chromosome length observeEvent(input$chr_len,{ + vals$chr_len <- input$chr_len }) - - # Logic for showing/hiding UI when input + ##---------------------------------------------------------------- + ## Simple options showing/hiding logic for every data input - + ##---------------------------------------------------------------- + # SHOW rre_width parameter if data is available + # and hide_viz == F observeEvent(vals$rre_data_input, { - whereami::cat_where(whereami::whereami()) + if (vals$rre_data_input == T){ if (input$hide_viz == F){ showElement(selector = "#rre_width") @@ -1314,9 +1386,10 @@ server <- function(input, output, session) { hideElement(selector = "#rre_width") } }) - + # Show anti_hybrid option if data is available + # And checkbox is unchecked observeEvent(vals$anti_data_input, { - whereami::cat_where(whereami::whereami()) + if (vals$anti_data_input == T){ if (input$hide_anti == F){ showElement(selector = "#anti_header") @@ -1327,8 +1400,13 @@ server <- function(input, output, session) { hideElement(selector = "#anti_hybrid") } }) - + # Show prism options if data is available + # If hide anti is F (checkbox), then show them + # Only if prism_json file, then show Prism-Supp + # And if hide_viz == F, and prism_json, then + # show width observeEvent(vals$prism_data_input, { + if (vals$prism_data_input == T){ if (input$hide_anti == F){ showElement(selector = "#prism_header") @@ -1349,13 +1427,15 @@ server <- function(input, output, session) { hideElement(selector = "#prism_supp_data_input_width") } }) - + # Show SEMPI elements on data upload observeEvent(vals$sempi_data_input, { - whereami::cat_where(whereami::whereami()) + if (vals$sempi_data_input == T){ if (input$hide_anti == F){ showElement(selector = "#sempi_header") showElement(selector = "#sempi_hybrid") + } + if (input$hide_viz == F){ showElement(selector = "#sempi_width") } } else{ @@ -1364,8 +1444,9 @@ server <- function(input, output, session) { hideElement(selector = "#sempi_width") } }) - + # Show DeepBGC options if data is available observeEvent(vals$deep_data_input,{ + if (vals$deep_data_input == T){ showElement(selector = "#ref_comparison") showElement(selector = "#hide_data_comparison") @@ -1400,8 +1481,9 @@ server <- function(input, output, session) { hideElement(selector = "#data_filter_header") } }) - + # Show GECCO data options, if data is uploaded observeEvent(vals$gecco_data_input,{ + if (vals$gecco_data_input == T){ showElement(selector = "#data_comparison_header_gecco") showElement(selector = "#hide_data_comparison_gecco") @@ -1430,9 +1512,30 @@ server <- function(input, output, session) { hideElement(selector = "#prot_filter_gecco") } }) - + # Ahow ARTS data options, if data is available + observeEvent(vals$arts_data_input,{ + + if (vals$arts_data_input == T){ + if (input$hide_anti == F){ + showElement(selector = "#arts_header") + showElement(selector = "#dup_choice") + } + if (input$hide_viz == F){ + showElement(selector = "#arts_width") + } + } else { + hideElement(selector = "#arts_header") + hideElement(selector = "#dup_choice") + hideElement(selector = "#arts_width") + } + }) + ##--------------------------------------------------------------- + ## Data processing options show/hide - + ##--------------------------------------------------------------- + # Count data uploads, to show tabs and corresponding + # options observeEvent(vals$data_upload_count, { - whereami::cat_where(whereami::whereami()) + if (vals$data_upload_count <2){ hideTab("main", "2") hideTab("main", "3") @@ -1484,16 +1587,21 @@ server <- function(input, output, session) { } }) - + # Logic show/hide selectinput in Link coloring in + # Biocircos observeEvent(input$label_color_class, { + if (input$label_color_class == "R"){ showElement(selector = "#ref_col_biocircos") } else { hideElement(selector = "#ref_col_biocircos") } }) - + # Make hybrids from the data, if checkbox is checked + # TODO Put the function to the root. + # Tou have duplicated code observeEvent(input$anti_hybrid, { + hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") types <- sapply(data_split, function(x){ @@ -1513,8 +1621,8 @@ server <- function(input, output, session) { } }) - observeEvent(input$prism_hybrid, { + hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") types <- sapply(data_split, function(x){ @@ -1533,8 +1641,8 @@ server <- function(input, output, session) { vals$prism_data$Type2 <- vals$prism_type } }) - observeEvent(input$sempi_hybrid, { + hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") types <- sapply(data_split, function(x){ @@ -1555,25 +1663,9 @@ server <- function(input, output, session) { vals$sempi_data$Type2 <- vals$sempi_type } }) - - observeEvent(vals$arts_data_input,{ - if (vals$arts_data_input == T){ - if (input$hide_anti == F){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") - } - if (input$hide_viz == F){ - showElement(selector = "#arts_width") - } - } else { - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - hideElement(selector = "#arts_width") - } - }) - + # Rename the data, if button is clicked observeEvent(input$rename, { - whereami::cat_where(whereami::whereami()) + rename_data <- vals$rename_data if (vals$anti_data_input == T){ anti_data <- read.csv("anti_data.csv") @@ -1600,9 +1692,12 @@ server <- function(input, output, session) { vals$renamed <- T showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) }) + # When the new data is uploaded and renamed + # is T, then rename data on upload observeEvent(check_to_rename(), { + req(vals$renamed == T) - whereami::cat_where(whereami::whereami()) + rename_data <- vals$rename_data if (vals$anti_data_input == T){ anti_data <- read.csv("anti_data.csv") @@ -1625,8 +1720,9 @@ server <- function(input, output, session) { vals$prism_data <- prism_data } }) - + # Reset the renaming. Uncheck the hybrid checkboxes observeEvent(input$reset_name, { + vals$anti_data['Type2'] <- vals$anti_data['Type'] vals$sempi_data['Type2'] <- vals$sempi_data['Type'] vals$ prism_data['Type2'] <- vals$ prism_data['Type'] @@ -1637,13 +1733,15 @@ server <- function(input, output, session) { hideElement(selector = "#reset_name") vals$renamed <- F }) - + # Read the uploaded renaming scheme csv observeEvent(input$rename_data,{ + rename_data <- read.csv(input$rename_data$datapath) vals$rename_data <- rename_data }) - + # What to do, if hide uploads scheme is triggered observeEvent(input$hide_uploads, { + if (input$hide_uploads == T){ hideElement(selector = "#anti_input_options") hideElement(selector = "#anti_data") @@ -1698,8 +1796,9 @@ server <- function(input, output, session) { showElement(selector = "#gecco_sco") } }) - + # What to do, if hide data options scheme is triggered observeEvent(input$hide_anti, { + if (input$hide_anti== T){ hideElement(selector = "#anti_header") hideElement(selector = "#anti_hybrid") @@ -1745,8 +1844,9 @@ server <- function(input, output, session) { } } }) - + # What to do, if hide annotation plot options scheme is triggered observeEvent(input$hide_genes_on_chr, { + if (input$hide_genes_on_chr == T){ hideElement(selector = "#ref") } else { @@ -1758,8 +1858,9 @@ server <- function(input, output, session) { } } }) - + # What to do, if hide summarize tab options scheme is triggered observeEvent(input$hide_summarize, { + if (input$hide_summarize == T){ hideElement(selector = "#group_by") hideElement(selector = "#count_all") @@ -1775,8 +1876,9 @@ server <- function(input, output, session) { } }) - + # What to do, if hide improve visualization scheme is triggered observeEvent(input$hide_viz, { + if (input$hide_viz == T){ hideElement(selector = "#rename_data") hideElement(selector = "#rename") @@ -1834,8 +1936,9 @@ server <- function(input, output, session) { } }) - + # What to do, if hide DeepBGC comparison options scheme is triggered observeEvent(input$hide_data_comparison, { + if ((input$hide_data_comparison == T)){ hideElement(selector = "#ref_comparison") hideElement(selector = "#score_type") @@ -1853,8 +1956,9 @@ server <- function(input, output, session) { hideElement(selector = "#plot_start") } }) - + # What to do, if hide DeepBGC filtering options scheme is triggered observeEvent(input$hide_data_filter, { + if ((input$hide_data_filter == T)){ hideElement(selector = "#score_a") hideElement(selector = "#score_d") @@ -1881,8 +1985,9 @@ server <- function(input, output, session) { hideElement(selector = "#cluster_type") } }) - + # What to do, if hide GECCO comparison options scheme is triggered observeEvent(input$hide_data_comparison_gecco, { + if ((input$hide_data_comparison_gecco == T)){ hideElement(selector = "#ref_comparison_gecco") hideElement(selector = "#score_type_gecco") @@ -1900,8 +2005,9 @@ server <- function(input, output, session) { hideElement(selector = "#plot_start_gecco") } }) - + # What to do, if hide GECCO filtering options scheme is triggered observeEvent(input$hide_data_filter_gecco, { + if ((input$hide_data_filter_gecco == T)){ hideElement(selector = "#score_average_gecco") hideElement(selector = "#score_average_gecco") @@ -1920,9 +2026,19 @@ server <- function(input, output, session) { } }) + + ############################################################################ + ############################################################################ + ### ### + ### COMPUTATIONS ### + ### ### + ############################################################################ + ############################################################################ + # Compute all interceptions on data upload. + # Filter while ploting then. + # TODO make looop for data reading observeEvent(inputData(), { - req(vals$data_upload_count >1) - whereami::cat_where(whereami::whereami()) + # GENERATE DATA if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data @@ -2000,15 +2116,11 @@ server <- function(input, output, session) { } inters <- vals$inters - #inters_filtered <- vals$inters_filtered data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - #TESTING -# computed <- list( -# anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F -# ) + index = 1 for (i in data_uploads){ index_2 = 1 @@ -2023,9 +2135,6 @@ server <- function(input, output, session) { new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster inters[[j]][[x]] <- new_res inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) - #inters_filtered[[j]][[x]] <- new_res - #inters_filtered[[x]][[j]] <- list(from=new_res$to, to=new_res$from) - } } @@ -2040,48 +2149,19 @@ server <- function(input, output, session) { vals$inters <- inters if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ vals$inters_filtered <- inters + enable_event_logic() } else{ vals$need_filter <- T vals$filter_data <- T } - - -#### TESTING -# score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) -# score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) -# score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) -# -# deep_data <- vals$deep_data%>% -# mutate(score_a = score_a, score_d = score_d, score_c = score_c) %>% -# filter(score_a >= 0.5, score_c >=0.5 , score_d >= 0.8, num_domains >= 5, -# num_bio_domains>=3, num_proteins>=3) -# vals <- list( -# anti_data_input = T, -# sempi_data_input = T, -# prism_data_input = T, -# prism_supp = T, -# arts_data_input = T, -# deep_data_input = T, -# gecco_data_input = T, -# rre_data_input = T, -# anti_data = anti_data, -# deep_data = deep_data, -# prism_data = prism_data, -# rre_data = rre_data, -# arts_data = arts_data, -# sempi_data = sempi_data, -# gecco_data = gecco_data, -# prism_supp_data = prism_supp, -# rre_more = F, -# biocircos_gecco = gecco_data, -# computed=computed -# ) - - }) + }) + # Filter ARTS, DeepBGC, GECCO interception data + # and general dataframes to plot, if data filtering + # options are triggered observeEvent(dynamicInput(), { req(vals$data_upload_count>1) - whereami::cat_where(whereami::whereami()) + inters <- vals$inters if (vals$deep_data_input == TRUE){ if (vals$need_filter == F) { @@ -2156,11 +2236,15 @@ server <- function(input, output, session) { } vals$need_filter <- F vals$filter_data <- F + vals$can_plot_deep_ref = T + enable_event_logic() }) - + # Compute the Biociros plot. Store information to plot later observeEvent(biocircos_listen(), { req(vals$data_upload_count >=2) + req(vals$need_filter == F) + req(vals$can_plot_biocircos == T) initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ){ #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes[[name]] <- vals$chr_len @@ -2187,7 +2271,7 @@ server <- function(input, output, session) { arc_col <- c(arc_col,as.character(arc_colors) ) return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) } - whereami::cat_where(whereami::whereami()) + #BioCircos! Biocircos_chromosomes <- list() arcs_chromosomes <- c() @@ -2208,7 +2292,7 @@ server <- function(input, output, session) { "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) soft <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") index <- 1 # browser() for (upload in data_uploads){ @@ -2403,12 +2487,23 @@ server <- function(input, output, session) { vals$tracklist <- tracklist vals$Biocircos_chromosomes <- Biocircos_chromosomes }) - #Render output plots + + + ############################################################################ + ############################################################################ + ### ### + ### OUTPUT PLOTS ### + ### ### + ############################################################################ + ############################################################################ + ##---------------------------------------------------------------- + ## DeepBGC Comparison tab - + ##---------------------------------------------------------------- # Render barplot output$deep_barplot <- renderPlot({ req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - whereami::cat_where(whereami::whereami()) + # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -2511,7 +2606,7 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$deep_rate <- renderPlotly({ req(!is.null(vals$fullness_deep)) - whereami::cat_where(whereami::whereami()) + # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data @@ -2562,11 +2657,13 @@ server <- function(input, output, session) { xlab(paste(input$score_type,"Score threshold")), tooltip = c("Rate")) }) - + ##---------------------------------------------------------------- + ## GECCO Comparison tab - + ##---------------------------------------------------------------- # Render barplot output$gecco_barplot <- renderPlot({ req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - whereami::cat_where(whereami::whereami()) + # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") @@ -2667,7 +2764,7 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$gecco_rate <- renderPlotly({ req(!is.null(vals$fullness_gecco)) - whereami::cat_where(whereami::whereami()) + # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data # For more information please see previous renderPlot @@ -2717,12 +2814,17 @@ server <- function(input, output, session) { xlab(paste(input$score_type,"Score threshold")), tooltip = c("Rate")) }) + ##--------------------------------------------------------------- + ## Annotation on chromosome plots' tab - + ##--------------------------------------------------------------- # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type output$deep_reference <- renderPlotly({ req(vals$data_upload_count >=1) - whereami::cat_where(whereami::whereami()) + req(vals$need_filter == F) + req(vals$can_plot_deep_ref == T) + req(vals$data_upload_count >=1) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -2731,7 +2833,7 @@ server <- function(input, output, session) { abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") soft_ref <- c("Antismash","SEMPI","PRISM","PRISM-supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) soft_width <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" , + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" , "gecco_data_filtered", "rre_data") soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", "seg_df_ref_g", "seg_df_ref_r") @@ -3007,46 +3109,34 @@ server <- function(input, output, session) { sup_index <- sup_index +1 } vals$rename_y_axis <- rename_y_axis - + vals$can_plot_deep_ref_2 =T to_plot }) output$deep_reference_2 <- renderPlotly({ + req(vals$can_plot_deep_ref_2 == T) + vals$can_plot_deep_ref_2 == F req(vals$data_upload_count >=1) rename_y_axis <- vals$rename_y_axis - whereami::cat_where(whereami::whereami()) - if (vals$rre_data_input == TRUE){ - if (dim(vals$rre_data)[1]!= 0){ - data <- data.frame(vals$rre_data) - } - } else if (vals$arts_data_input == TRUE){ - if (dim(vals$arts_data_filtered)[1]!= 0){ - data <- vals$arts_data_filtered - } - } else if (vals$anti_data_input == TRUE){ - if (dim(vals$anti_data)[1]!= 0){ - data <- vals$anti_data %>% - mutate(ID = Cluster, Chr = chromosome) %>% - dplyr::select(ID,Chr ,Start, Stop, Type, Type2) - } - }else if (vals$deep_data_input == TRUE){ - if (dim(vals$deep_data_filtered)[1]!= 0){ - data <- vals$deep_data_filtered - } - }else if (vals$prism_data_input == TRUE){ - if (dim(vals$prism_data)[1]!= 0){ - data <- vals$prism_data - } - }else if (vals$sempi_data_input == TRUE){ - if (dim(vals$sempi_data)[1]!= 0){ - data <- vals$sempi_data - } - }else if (vals$gecco_data_input == TRUE){ - if (dim(vals$gecco_data_filtered)[1]!= 0){ - data <- vals$gecco_data_filtered + data <- NULL + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" , + "gecco_data_filtered", "rre_data") + + index <- 1 + for (upload in data_uploads){ + if (is.null(data)){ + if (vals[[upload]] == T){ + if (dim(vals[[data_to_use[index]]])[1] != 0){ + data <- vals[[data_to_use[index]]] + } + } } + index <- index+1 } + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", "Num_domains", "Num_proteins", "Average_p", "Max_p") @@ -3125,10 +3215,13 @@ server <- function(input, output, session) { title=list(text=' Cluster Types '))) }) + ##---------------------------------------------------------------- + ## Biocircos plot tab - + ##--------------------------------------------------------------- # Render Biocircos Plot for all-vs-all comparison output$biocircos <- renderBioCircos({ req(vals$data_upload_count >1) - whereami::cat_where(whereami::whereami()) + # Plot BioCircos BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) }) @@ -3136,7 +3229,7 @@ server <- function(input, output, session) { output$biocircos_legend <- renderDataTable({ req(vals$data_upload_count >=1) - whereami::cat_where(whereami::whereami()) + plot_data <- vals$rename_data new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) new_data <- new_data[!apply(new_data == "", 1, all),] @@ -3148,11 +3241,15 @@ server <- function(input, output, session) { }) - + ##--------------------------------------------------------------- + ## Summarize tab - + ##--------------------------------------------------------------- # Render barplot with number count of interception for BGC IDs output$barplot_rank <- renderPlotly({ req(vals$data_upload_count >1) - whereami::cat_where(whereami::whereami()) + req(vals$need_filter == F) + req(vals$can_plot_barplot_rank == T) + antismash_count <- NULL prism_count <- NULL deep_count <- NULL @@ -3214,7 +3311,9 @@ server <- function(input, output, session) { # Render table with data output$group_table <- renderTable({ req(vals$data_upload_count >1) - whereami::cat_where(whereami::whereami()) + req(vals$need_filter == F) + req(vals$can_plot_group_table == T) + refine_unique <- function(data){ n <- tail(data, n=1) data <- head(data, -1) From 48a07537a355a3c4dfb779d0f76e269f1669fb69 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 11 Jul 2021 20:22:03 +0300 Subject: [PATCH 027/199] DeepBGC and GECCO data do not crashe Former-commit-id: 8a201a8cb884196859646f0ca5d39cef22a0cba1 --- app.R | 89 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/app.R b/app.R index 1dbadd3..d59a3e5 100755 --- a/app.R +++ b/app.R @@ -2038,7 +2038,7 @@ server <- function(input, output, session) { # Filter while ploting then. # TODO make looop for data reading observeEvent(inputData(), { - + req(vals$data_upload_count>=1) # GENERATE DATA if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data @@ -2160,8 +2160,7 @@ server <- function(input, output, session) { # and general dataframes to plot, if data filtering # options are triggered observeEvent(dynamicInput(), { - req(vals$data_upload_count>1) - + req(vals$data_upload_count>=1) inters <- vals$inters if (vals$deep_data_input == TRUE){ if (vals$need_filter == F) { @@ -2170,20 +2169,22 @@ server <- function(input, output, session) { } else { biocircos_deep <- vals$deep_data_filtered } - new_deep <- lapply(inters$deep, function(x){ - new_to <- x$to[x$to %in% biocircos_deep$Cluster] - new_from <- x$from[x$to %in% biocircos_deep$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$deep) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from - new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + if (vals$data_upload_count!=1){ + new_deep <- lapply(inters$deep, function(x){ + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters } - new_inters$deep <- new_deep - vals$inters_filtered <- new_inters - inters <- new_inters } if (vals$gecco_data_input == TRUE){ if (vals$need_filter == F) { @@ -2192,39 +2193,43 @@ server <- function(input, output, session) { } else { gecco_data <- vals$gecco_data_filtered } - new_gecco <- lapply(inters$gecco, function(x){ - new_to <- x$to[x$to %in% gecco_data$Cluster] - new_from <- x$from[x$to %in% gecco_data$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$gecco) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from - new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to - } - new_inters$gecco <- new_gecco - vals$inters_filtered <- new_inters - inters <- new_inters - } - if (vals$arts_data_input == TRUE){ - if (input$dup_choice != "All"){ - vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") - new_arts <- lapply(inters$arts, function(x){ - new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] - new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + if (vals$data_upload_count!=1){ + new_gecco <- lapply(inters$gecco, function(x){ + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] list(from=new_from, to=new_to) }) new_inters <- inters - update_list <- names(inters$arts) + update_list <- names(inters$gecco) for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from - new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to } - new_inters$arts <- new_arts + new_inters$gecco <- new_gecco vals$inters_filtered <- new_inters inters <- new_inters + } + } + if (vals$arts_data_input == TRUE){ + if (input$dup_choice != "All"){ + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + if (vals$data_upload_count!=1){ + new_arts <- lapply(inters$arts, function(x){ + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } } else { vals$arts_data_filtered <- vals$arts_data vals$inters_filtered <- inters From 661db7d905852028884d99873fad5b07c8e01daa Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 21:27:35 +0300 Subject: [PATCH 028/199] Removed shiny library() statement, made :: Former-commit-id: 6b1498f25ce3fa2ddc8bf78874d3ad632000bf1a --- app.R | 653 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 325 insertions(+), 328 deletions(-) diff --git a/app.R b/app.R index d59a3e5..5848830 100755 --- a/app.R +++ b/app.R @@ -8,9 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # - -# Upload required libraries -library(shiny) library(tidyverse) library(plyr) library(plotly) @@ -22,146 +19,146 @@ library(stringr) library(DT) library(GenomicRanges) # Define UI -ui <- fluidPage( +ui <- shiny::fluidPage( # Application title - titlePanel("BGCViz"), + shiny::titlePanel("BGCViz"), # Sidebar - useShinyjs(), - sidebarLayout( - sidebarPanel( + shinyjs::useShinyjs(), + shiny::sidebarLayout( + shiny::sidebarPanel( # Define sidebar logic. Make it fixed and not overflow id = "tPanel",style = "overflow-y:scroll; max-height: 90vh; position:fixed; width:inherit;", # Data upload - h3("Data upload and necesary input:"), - checkboxInput("hide_uploads", "Hide upload fields"), - h5(id = "anti_header_upload","ANTISMASH:"), - checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), - fileInput("anti_data", + shiny::h3("Data upload and necesary input:"), + shiny::checkboxInput("hide_uploads", "Hide upload fields"), + shiny::h5(id = "anti_header_upload","ANTISMASH:"), + shiny::checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), + shiny::fileInput("anti_data", "Upload Antismash data"), - actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - h5(id = "prism_header_upload","PRISM:"), - checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), - fileInput("prism_data", + shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + shiny::h5(id = "prism_header_upload","PRISM:"), + shiny::checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), + shiny::fileInput("prism_data", "Upload PRISM data"), - actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - h5(id = "sempi_header_upload","SEMPI:"), - fileInput("sempi_data", + shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + shiny::h5(id = "sempi_header_upload","SEMPI:"), + shiny::fileInput("sempi_data", "Upload SEMPI 2.0 data"), - actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - h5(id = "deep_header_upload","DEEPBGC:"), - fileInput("deep_data", + shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + shiny::h5(id = "deep_header_upload","DEEPBGC:"), + shiny::fileInput("deep_data", "Upload DeepBGC data"), - actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - h5(id = "gecco_header_upload","GECCO:"), - fileInput("gecco_data", + shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + shiny::h5(id = "gecco_header_upload","GECCO:"), + shiny::fileInput("gecco_data", "Upload Gecco data"), - actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), - h5(id = "rre_header_upload","RRE-FINDER:"), - fileInput("rre_data", + shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), + shiny::h5(id = "rre_header_upload","RRE-FINDER:"), + shiny::fileInput("rre_data", "Upload RRE-Finder data"), - actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - h5(id = "arts_header_upload","ARTS:"), - fileInput("known_data", + shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + shiny::h5(id = "arts_header_upload","ARTS:"), + shiny::fileInput("known_data", "Upload ARTS knownhits data"), - fileInput("dup_data", + shiny::fileInput("dup_data", "Upload ARTS duptable data"), - actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), # Numeric input of chromosome length of analyzed sequence - numericInput("chr_len", "Please type chr len of an organism", value = 10000000), - h3("Data manipulation options"), - checkboxInput("hide_anti", "Hide data manipulation fields"), - h5(id = "anti_header","Antismash data options:"), - checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - h5(id = "prism_header","PRISM data options:"), - checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - h5(id = "sempi_header","SEMPI data options:"), - checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - h5(id = "arts_header","ARTS data options:"), - selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000), + shiny::h3("Data manipulation options"), + shiny::checkboxInput("hide_anti", "Hide data manipulation fields"), + shiny::h5(id = "anti_header","Antismash data options:"), + shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + shiny::h5(id = "prism_header","PRISM data options:"), + shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + shiny::h5(id = "sempi_header","SEMPI data options:"), + shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + shiny::h5(id = "arts_header","ARTS data options:"), + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), selected = "All"), - h3(id = "genes_on_chr","Genes on chromosome plot controls:"), - checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), - selectInput("ref", "Choose reference data", choices = c(""), + shiny::h3(id = "genes_on_chr","Genes on chromosome plot controls:"), + shiny::checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), + shiny::selectInput("ref", "Choose reference data", choices = c(""), selected = ""), - h3(id = "summarize","Summarize options:"), - checkboxInput("hide_summarize", "Hide summarize options"), - selectInput("group_by", "Group data by", choices = c(""), selected = ''), - checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - h3("Improve visualization:"), - checkboxInput("hide_viz", "Hide improve visualization options"), - fileInput("rename_data", + shiny::h3(id = "summarize","Summarize options:"), + shiny::checkboxInput("hide_summarize", "Hide summarize options"), + shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), + shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::h3("Improve visualization:"), + shiny::checkboxInput("hide_viz", "Hide improve visualization options"), + shiny::fileInput("rename_data", "Upload renaming and coloring scheme"), - actionButton("rename", "Rename"), - actionButton("reset_name", "Reset"), - checkboxInput("rre_width", "Add thickness to RRE results visualization"), - checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - checkboxInput("sempi_width", "Add thickness to SEMPI results visualization"), - checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + shiny::actionButton("rename", "Rename"), + shiny::actionButton("reset_name", "Reset"), + shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), + shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization"), + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", "Purity-based" = "P", "Reference column-based" = "R" ), selected = 'H'), - selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = ''), - h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), - checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), - selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), - selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = ''), + shiny::h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), + shiny::checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), + shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), + shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", "Cluster_type score" = "Cluster_Type"), selected = "avg_p"), - sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), - h3(id="data_filter_header_gecco","Gecco data filtering:"), + shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + shiny::h3(id="data_filter_header_gecco","Gecco data filtering:"), checkboxInput("hide_data_filter_gecco", "Hide Gecco data filtering options"), - sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), - h3(id="data_comparison_header","Comparison with DeepBGC plots:"), - checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), - selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::h3(id="data_comparison_header","Comparison with DeepBGC plots:"), + shiny::checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), + shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), # Score to use for thresholds - selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", + shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", "Cluster_type score" = "Cluster_Type", "DeepBGC score" = "DeepBGC"), selected = "Activity score"), # Chose step for barplot (as a threshold to draw a bar) - sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), # DeepBGC data filtering - h3(id="data_filter_header","DeepBGC data filtering:"), - checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), + shiny::h3(id="data_filter_header","DeepBGC data filtering:"), + shiny::checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), # Different score filtering. Remain >= of set threshold - sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), # Domains, biodomains and proteins filter. Remain >= of set threshold - sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), # Donwload currently used datasets - downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) + shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) ), # Show plots - mainPanel( + shiny::mainPanel( # Define tabs and their correcponding plots - tabsetPanel( - tabPanel(title = "Compare data with DeepBGC", value = 1 ,plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), - tabPanel(title = "Compare data with Gecco", value = 5 ,plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), - tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), + shiny::tabsetPanel( + shiny::tabPanel(title = "Compare data with DeepBGC", value = 1 ,shiny::plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), + shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), + shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), plotlyOutput("deep_reference", height = "500px")), - tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), dataTableOutput("biocircos_legend")), - tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),tableOutput("group_table")), + shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), shiny::dataTableOutput("biocircos_legend")), + shiny::tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), type = "tabs", id = "main" ) ) @@ -173,22 +170,22 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- ## Some lists of reactive values to listen later - ##--------------------------------------------------------------- - check_to_rename <- reactive({list(input$sempi_data, input$anti_data, input$prism_data, + check_to_rename <- shiny::reactive({list(input$sempi_data, input$anti_data, input$prism_data, input$sempi_sco,input$anti_sco, input$prism_sco)}) - biocircos_listen <- reactive({ + biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp, input$prism_supp_data_input_width, input$arts_width, input$sempi_width, input$rre_width ) }) - inputData <- reactive({ + inputData <- shiny::reactive({ list( input$sempi_data,input$rre_data, input$anti_data, input$prism_data, input$known_data,input$dup_data, input$prism_supp_data, input$deep_data, input$gecco_data, input$sempi_sco,input$rre_sco, input$anti_sco, input$prism_sco, input$arts_sco, input$prism_supp_sco, input$deep_sco, input$gecco_sco ) }) - dynamicInput <- reactive({ + dynamicInput <- shiny::reactive({ list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, input$prot_filter_gecco, input$dup_choice, vals$need_filter @@ -198,7 +195,7 @@ server <- function(input, output, session) { # Some dataframes that are used through the app + some vectors of untercepted values - vals <- reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, + vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, @@ -247,7 +244,7 @@ server <- function(input, output, session) { test_score[duplicated_values-1] <- paste(test_score[duplicated_values-1] , to_add, sep="/") return(test_score) } - # PRISM data processing + # PRISM JSON data processing process_prism_json_suppl <- function(data){ types <- sapply(data$prism_results$clusters, function(x){ tolower(x$type) @@ -384,7 +381,7 @@ server <- function(input, output, session) { num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) return(gecco_data) } - # Renaming the vector for inout$rename event + # Renaming the vector for inut$rename event rename_vector <- function(data, renamed_dataframe){ type <- str_split(data$Type2, "__") type_2 <- sapply(type, function(x){ @@ -392,9 +389,9 @@ server <- function(input, output, session) { if (y %in% renamed_dataframe$Code){ renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) if( (length(renamed) >1) & (!( as.character(y) %in% names(vals$renaming_notification)))){ - showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), type = "warning", duration = NULL) - showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) + shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) vals$renaming_notification[[as.character(y)]] <- renamed[[1]] } renamed[[1]] @@ -457,7 +454,7 @@ server <- function(input, output, session) { #---------------------------------------------------------------- ## Loading and processing of example data - ##---------------------------------------------------------------- - observeEvent(input$anti_sco,{ + shiny::observeEvent(input$anti_sco,{ anti_data <- read.csv("example_data/sco_antismash.csv") # Add chromosome column @@ -476,34 +473,34 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "Antismash" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "A" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "A") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "A") } }) - observeEvent(input$gecco_sco,{ + shiny::observeEvent(input$gecco_sco,{ gecco_data <- read.delim("example_data/sco_gecco.tsv") # Add chromosome column @@ -536,31 +533,31 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "GECCO" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "G") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "GECCO") } }) - observeEvent(input$prism_sco,{ + shiny::observeEvent(input$prism_sco,{ # Read data data <- fromJSON(file = "example_data/sco_prism.json") processed_data <- process_prism_json_suppl(data) - updateCheckboxInput(inputId = "prism_supp", value = T) + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) prism_data <- processed_data[[1]] vals$prism_supp_data_input = T vals$prism_supp <- processed_data[[2]] @@ -570,11 +567,11 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) prism_data$Type <- str_trim(tolower(prism_data$Type)) prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) @@ -594,32 +591,32 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "PRISM" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "P" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "P") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "P") } }) - observeEvent(input$sempi_sco,{ + shiny::observeEvent(input$sempi_sco,{ sempi_data <- read.csv("example_data/sco_sempi.csv") sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) @@ -638,33 +635,33 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "SEMPI" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "S" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "S") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "S") } }) - observeEvent(input$arts_sco, { + shiny::observeEvent(input$arts_sco, { data <- read.delim("example_data/sco_duptable.tsv") disable_event_logic() @@ -751,30 +748,30 @@ server <- function(input, output, session) { vals$arts_data_input <- T dup_table_id <- arts_data %>% filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", + shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) vals$upl_arts = T vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "ARTS" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") } }) - observeEvent(input$deep_sco, { + shiny::observeEvent(input$deep_sco, { drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data @@ -794,26 +791,26 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "DeepBGC" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = "DeepBGC", selected = "DeepBGC") } }) - observeEvent(input$rre_sco, { + shiny::observeEvent(input$rre_sco, { # Read data vals$rre_data <- read.delim("example_data/sco_rre.txt") @@ -836,19 +833,19 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = "RRE-Finder", selected = "RRE") @@ -863,7 +860,7 @@ server <- function(input, output, session) { ##---------------------------------------------------------------- ## Loading and processing user data - ##---------------------------------------------------------------- - observeEvent(input$anti_data,{ + shiny::observeEvent(input$anti_data,{ disable_event_logic() # Read data @@ -932,32 +929,32 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "Antismash" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "A" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "A") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "A") } }) - observeEvent(input$sempi_data,{ + shiny::observeEvent(input$sempi_data,{ sempi_data <- read.csv(input$sempi_data$datapath) @@ -977,33 +974,33 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "SEMPI" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "S" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "S") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "S") } }) - observeEvent(input$gecco_data,{ + shiny::observeEvent(input$gecco_data,{ gecco_data <- read.delim(input$gecco_data$datapath) gecco_data$chromosome <- rep("G", length(gecco_data$type)) @@ -1035,19 +1032,19 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "GECCO" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "G") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "GECCO") } @@ -1055,7 +1052,7 @@ server <- function(input, output, session) { # These are for ARTS data processing # input$known_data and inoput$dup_data - observeEvent(input$known_data, { + shiny::observeEvent(input$known_data, { disable_event_logic() data <- read.delim(input$known_data$datapath) @@ -1093,11 +1090,11 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) dup_table <- vals$dup_data known_table <- vals$known_data @@ -1110,22 +1107,22 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 dup_table_id <- arts_data %>% filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", + shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) vals$upl_arts = T if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "ARTS" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") } } }) - observeEvent(input$dup_data, { + shiny::observeEvent(input$dup_data, { disable_event_logic() data <- read.delim(input$dup_data$datapath) @@ -1175,11 +1172,11 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) dup_table <- vals$dup_data known_table <- vals$known_data @@ -1193,21 +1190,21 @@ server <- function(input, output, session) { vals$arts_data_input <- T dup_table_id <- arts_data %>% filter(Core != "Not_core") - updateSelectInput(session, "dup_choice", + shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "ARTS" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "AR" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") } } }) - observeEvent(input$prism_data,{ + shiny::observeEvent(input$prism_data,{ # Read data if (input$prism_input_options == T){ @@ -1215,7 +1212,7 @@ server <- function(input, output, session) { } else{ data <- fromJSON(file = input$prism_data$datapath) processed_data <- process_prism_json_suppl(data) - updateCheckboxInput(inputId = "prism_supp", value = T) + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) prism_data <- processed_data[[1]] vals$prism_supp <- processed_data[[2]] vals$prism_supp_data_input = T @@ -1224,11 +1221,11 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) } vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") @@ -1236,15 +1233,15 @@ server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) prism_data$Type <- str_trim(tolower(prism_data$Type)) prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) @@ -1261,20 +1258,20 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "PRISM" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "P" ) - updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "ref_comparison", selected = "P") - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") - updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "ref_comparison_gecco", selected = "P") } }) - observeEvent(input$deep_data, { + shiny::observeEvent(input$deep_data, { drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data @@ -1294,26 +1291,26 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "DeepBGC" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "D" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = "DeepBGC", selected = "DeepBGC") } }) - observeEvent(input$rre_data, { + shiny::observeEvent(input$rre_data, { # Read data vals$rre_data <- read.delim(input$rre_data$datapath) @@ -1335,19 +1332,19 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", choices = vals$choices$group_by ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) disable_event_logic() if (vals$data_upload_count == 1){ - updateSelectInput(session, "ref", + shiny::updateSelectInput(session, "ref", selected = "RRE-Finder" ) - updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_by", selected = "R" ) - updateSelectInput(session, "ref_col_biocircos", + shiny::updateSelectInput(session, "ref_col_biocircos", choices = "RRE-Finder", selected = "RRE") @@ -1367,7 +1364,7 @@ server <- function(input, output, session) { ############################################################################ ############################################################################ # Observe input of chromosome length - observeEvent(input$chr_len,{ + shiny::observeEvent(input$chr_len,{ vals$chr_len <- input$chr_len }) @@ -1376,7 +1373,7 @@ server <- function(input, output, session) { ##---------------------------------------------------------------- # SHOW rre_width parameter if data is available # and hide_viz == F - observeEvent(vals$rre_data_input, { + shiny::observeEvent(vals$rre_data_input, { if (vals$rre_data_input == T){ if (input$hide_viz == F){ @@ -1388,7 +1385,7 @@ server <- function(input, output, session) { }) # Show anti_hybrid option if data is available # And checkbox is unchecked - observeEvent(vals$anti_data_input, { + shiny::observeEvent(vals$anti_data_input, { if (vals$anti_data_input == T){ if (input$hide_anti == F){ @@ -1405,7 +1402,7 @@ server <- function(input, output, session) { # Only if prism_json file, then show Prism-Supp # And if hide_viz == F, and prism_json, then # show width - observeEvent(vals$prism_data_input, { + shiny::observeEvent(vals$prism_data_input, { if (vals$prism_data_input == T){ if (input$hide_anti == F){ @@ -1428,7 +1425,7 @@ server <- function(input, output, session) { } }) # Show SEMPI elements on data upload - observeEvent(vals$sempi_data_input, { + shiny::observeEvent(vals$sempi_data_input, { if (vals$sempi_data_input == T){ if (input$hide_anti == F){ @@ -1445,7 +1442,7 @@ server <- function(input, output, session) { } }) # Show DeepBGC options if data is available - observeEvent(vals$deep_data_input,{ + shiny::observeEvent(vals$deep_data_input,{ if (vals$deep_data_input == T){ showElement(selector = "#ref_comparison") @@ -1482,7 +1479,7 @@ server <- function(input, output, session) { } }) # Show GECCO data options, if data is uploaded - observeEvent(vals$gecco_data_input,{ + shiny::observeEvent(vals$gecco_data_input,{ if (vals$gecco_data_input == T){ showElement(selector = "#data_comparison_header_gecco") @@ -1513,7 +1510,7 @@ server <- function(input, output, session) { } }) # Ahow ARTS data options, if data is available - observeEvent(vals$arts_data_input,{ + shiny::observeEvent(vals$arts_data_input,{ if (vals$arts_data_input == T){ if (input$hide_anti == F){ @@ -1534,11 +1531,11 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- # Count data uploads, to show tabs and corresponding # options - observeEvent(vals$data_upload_count, { + shiny::observeEvent(vals$data_upload_count, { if (vals$data_upload_count <2){ - hideTab("main", "2") - hideTab("main", "3") + shiny::hideTab("main", "2") + shiny::hideTab("main", "3") }else if (vals$data_upload_count >=2){ if (input$hide_summarize == F) { @@ -1551,34 +1548,34 @@ server <- function(input, output, session) { showElement(selector = "#label_color") showElement(selector = "#label_color_class") } - showTab("main", "2") - showTab("main", "3") + shiny::showTab("main", "2") + shiny::showTab("main", "3") if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - showTab("main", "5") + shiny::showTab("main", "5") } else { - hideTab("main", "5") + shiny::hideTab("main", "5") if ((vals$gecco_data_input == T) & (vals$data_upload_count >1)){ - showNotification(paste("It seems that you would like to compare the GECCO data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) + shiny::showNotification(paste("It seems that you would like to compare the GECCO data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) } } if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - showTab("main", "1") + shiny::showTab("main", "1") } else { - hideTab("main", "1") + shiny::hideTab("main", "1") if ((vals$deep_data_input == T) & (vals$data_upload_count >1)){ - showNotification(paste("It seems that you would like to compare the DeepBGC data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) + shiny::showNotification(paste("It seems that you would like to compare the DeepBGC data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) } } } if (vals$data_upload_count <1){ - hideTab("main", "4") - hideTab(inputId = "main", target = "5") - hideTab(inputId = "main", target = "1") + shiny::hideTab("main", "4") + shiny::hideTab(inputId = "main", target = "5") + shiny::hideTab(inputId = "main", target = "1") hideElement(selector = "#genes_on_chr") hideElement(selector = "#hide_genes_on_chr") hideElement(selector = "#ref") }else{ - showTab("main", "4") + shiny::showTab("main", "4") if (input$hide_genes_on_chr == F){ showElement(selector = "#genes_on_chr") showElement(selector = "#hide_genes_on_chr") @@ -1589,7 +1586,7 @@ server <- function(input, output, session) { }) # Logic show/hide selectinput in Link coloring in # Biocircos - observeEvent(input$label_color_class, { + shiny::observeEvent(input$label_color_class, { if (input$label_color_class == "R"){ showElement(selector = "#ref_col_biocircos") @@ -1600,7 +1597,7 @@ server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code - observeEvent(input$anti_hybrid, { + shiny::observeEvent(input$anti_hybrid, { hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") @@ -1621,7 +1618,7 @@ server <- function(input, output, session) { } }) - observeEvent(input$prism_hybrid, { + shiny::observeEvent(input$prism_hybrid, { hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") @@ -1641,7 +1638,7 @@ server <- function(input, output, session) { vals$prism_data$Type2 <- vals$prism_type } }) - observeEvent(input$sempi_hybrid, { + shiny::observeEvent(input$sempi_hybrid, { hybrid_col <- function(data){ data_split <- str_split(data$Type2, "__") @@ -1664,7 +1661,7 @@ server <- function(input, output, session) { } }) # Rename the data, if button is clicked - observeEvent(input$rename, { + shiny::observeEvent(input$rename, { rename_data <- vals$rename_data if (vals$anti_data_input == T){ @@ -1690,13 +1687,13 @@ server <- function(input, output, session) { showElement(selector = "#reset_name") hideElement(selector = "#rename") vals$renamed <- T - showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) + shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) }) # When the new data is uploaded and renamed # is T, then rename data on upload - observeEvent(check_to_rename(), { + shiny::observeEvent(check_to_rename(), { - req(vals$renamed == T) + shiny::req(vals$renamed == T) rename_data <- vals$rename_data if (vals$anti_data_input == T){ @@ -1721,26 +1718,26 @@ server <- function(input, output, session) { } }) # Reset the renaming. Uncheck the hybrid checkboxes - observeEvent(input$reset_name, { + shiny::observeEvent(input$reset_name, { vals$anti_data['Type2'] <- vals$anti_data['Type'] vals$sempi_data['Type2'] <- vals$sempi_data['Type'] vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - updateCheckboxInput(inputId = "anti_hybrid", value = F) - updateCheckboxInput(inputId = "sempi_hybrid", value =F) - updateCheckboxInput(inputId = "prism_hybrid", value = F) + shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) + shiny::updateCheckboxInput(inputId = "sempi_hybrid", value =F) + shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) showElement(selector = "#rename") hideElement(selector = "#reset_name") vals$renamed <- F }) # Read the uploaded renaming scheme csv - observeEvent(input$rename_data,{ + shiny::observeEvent(input$rename_data,{ rename_data <- read.csv(input$rename_data$datapath) vals$rename_data <- rename_data }) # What to do, if hide uploads scheme is triggered - observeEvent(input$hide_uploads, { + shiny::observeEvent(input$hide_uploads, { if (input$hide_uploads == T){ hideElement(selector = "#anti_input_options") @@ -1797,7 +1794,7 @@ server <- function(input, output, session) { } }) # What to do, if hide data options scheme is triggered - observeEvent(input$hide_anti, { + shiny::observeEvent(input$hide_anti, { if (input$hide_anti== T){ hideElement(selector = "#anti_header") @@ -1845,7 +1842,7 @@ server <- function(input, output, session) { } }) # What to do, if hide annotation plot options scheme is triggered - observeEvent(input$hide_genes_on_chr, { + shiny::observeEvent(input$hide_genes_on_chr, { if (input$hide_genes_on_chr == T){ hideElement(selector = "#ref") @@ -1859,7 +1856,7 @@ server <- function(input, output, session) { } }) # What to do, if hide summarize tab options scheme is triggered - observeEvent(input$hide_summarize, { + shiny::observeEvent(input$hide_summarize, { if (input$hide_summarize == T){ hideElement(selector = "#group_by") @@ -1877,7 +1874,7 @@ server <- function(input, output, session) { } }) # What to do, if hide improve visualization scheme is triggered - observeEvent(input$hide_viz, { + shiny::observeEvent(input$hide_viz, { if (input$hide_viz == T){ hideElement(selector = "#rename_data") @@ -1937,7 +1934,7 @@ server <- function(input, output, session) { } }) # What to do, if hide DeepBGC comparison options scheme is triggered - observeEvent(input$hide_data_comparison, { + shiny::observeEvent(input$hide_data_comparison, { if ((input$hide_data_comparison == T)){ hideElement(selector = "#ref_comparison") @@ -1957,7 +1954,7 @@ server <- function(input, output, session) { } }) # What to do, if hide DeepBGC filtering options scheme is triggered - observeEvent(input$hide_data_filter, { + shiny::observeEvent(input$hide_data_filter, { if ((input$hide_data_filter == T)){ hideElement(selector = "#score_a") @@ -1986,7 +1983,7 @@ server <- function(input, output, session) { } }) # What to do, if hide GECCO comparison options scheme is triggered - observeEvent(input$hide_data_comparison_gecco, { + shiny::observeEvent(input$hide_data_comparison_gecco, { if ((input$hide_data_comparison_gecco == T)){ hideElement(selector = "#ref_comparison_gecco") @@ -2006,7 +2003,7 @@ server <- function(input, output, session) { } }) # What to do, if hide GECCO filtering options scheme is triggered - observeEvent(input$hide_data_filter_gecco, { + shiny::observeEvent(input$hide_data_filter_gecco, { if ((input$hide_data_filter_gecco == T)){ hideElement(selector = "#score_average_gecco") @@ -2037,8 +2034,8 @@ server <- function(input, output, session) { # Compute all interceptions on data upload. # Filter while ploting then. # TODO make looop for data reading - observeEvent(inputData(), { - req(vals$data_upload_count>=1) + shiny::observeEvent(inputData(), { + shiny::req(vals$data_upload_count>=1) # GENERATE DATA if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data @@ -2159,8 +2156,8 @@ server <- function(input, output, session) { # Filter ARTS, DeepBGC, GECCO interception data # and general dataframes to plot, if data filtering # options are triggered - observeEvent(dynamicInput(), { - req(vals$data_upload_count>=1) + shiny::observeEvent(dynamicInput(), { + shiny::req(vals$data_upload_count>=1) inters <- vals$inters if (vals$deep_data_input == TRUE){ if (vals$need_filter == F) { @@ -2246,10 +2243,10 @@ server <- function(input, output, session) { }) # Compute the Biociros plot. Store information to plot later - observeEvent(biocircos_listen(), { - req(vals$data_upload_count >=2) - req(vals$need_filter == F) - req(vals$can_plot_biocircos == T) + shiny::observeEvent(biocircos_listen(), { + shiny::req(vals$data_upload_count >=2) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_biocircos == T) initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ){ #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes[[name]] <- vals$chr_len @@ -2486,7 +2483,7 @@ server <- function(input, output, session) { link_pos_end_2, maxRadius = 0.85, labels = link_labels, displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) } else{ - showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) + shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) } vals$tracklist <- tracklist @@ -2506,8 +2503,8 @@ server <- function(input, output, session) { ## DeepBGC Comparison tab - ##---------------------------------------------------------------- # Render barplot - output$deep_barplot <- renderPlot({ - req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + output$deep_barplot <- shiny::renderPlot({ + shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) # Create empty dataframe to populate later @@ -2610,12 +2607,12 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$deep_rate <- renderPlotly({ - req(!is.null(vals$fullness_deep)) + shiny::req(!is.null(vals$fullness_deep)) # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous renderPlot + # For more information please see previous shiny::renderPlot fullnes_of_annotation <- data.frame(vals$fullness_deep) # Store dataframe into variable. Widen it to calculate rates @@ -2666,8 +2663,8 @@ server <- function(input, output, session) { ## GECCO Comparison tab - ##---------------------------------------------------------------- # Render barplot - output$gecco_barplot <- renderPlot({ - req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + output$gecco_barplot <- shiny::renderPlot({ + shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -2768,11 +2765,11 @@ server <- function(input, output, session) { # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$gecco_rate <- renderPlotly({ - req(!is.null(vals$fullness_gecco)) + shiny::req(!is.null(vals$fullness_gecco)) # Reuse stored dataframe from previous plot # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous renderPlot + # For more information please see previous shiny::renderPlot fullnes_of_annotation <- data.frame(vals$fullness_gecco) # Store dataframe into variable. Widen it to calculate rates @@ -2826,11 +2823,11 @@ server <- function(input, output, session) { # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type output$deep_reference <- renderPlotly({ - req(vals$data_upload_count >=1) - req(vals$need_filter == F) - req(vals$can_plot_deep_ref == T) + shiny::req(vals$data_upload_count >=1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_deep_ref == T) - req(vals$data_upload_count >=1) + shiny::req(vals$data_upload_count >=1) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) @@ -3119,9 +3116,9 @@ server <- function(input, output, session) { }) output$deep_reference_2 <- renderPlotly({ - req(vals$can_plot_deep_ref_2 == T) + shiny::req(vals$can_plot_deep_ref_2 == T) vals$can_plot_deep_ref_2 == F - req(vals$data_upload_count >=1) + shiny::req(vals$data_upload_count >=1) rename_y_axis <- vals$rename_y_axis data <- NULL data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", @@ -3225,7 +3222,7 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- # Render Biocircos Plot for all-vs-all comparison output$biocircos <- renderBioCircos({ - req(vals$data_upload_count >1) + shiny::req(vals$data_upload_count >1) # Plot BioCircos BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) @@ -3233,7 +3230,7 @@ server <- function(input, output, session) { output$biocircos_legend <- renderDataTable({ - req(vals$data_upload_count >=1) + shiny::req(vals$data_upload_count >=1) plot_data <- vals$rename_data new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) @@ -3251,9 +3248,9 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- # Render barplot with number count of interception for BGC IDs output$barplot_rank <- renderPlotly({ - req(vals$data_upload_count >1) - req(vals$need_filter == F) - req(vals$can_plot_barplot_rank == T) + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_barplot_rank == T) antismash_count <- NULL prism_count <- NULL @@ -3314,10 +3311,10 @@ server <- function(input, output, session) { }) # Render table with data - output$group_table <- renderTable({ - req(vals$data_upload_count >1) - req(vals$need_filter == F) - req(vals$can_plot_group_table == T) + output$group_table <- shiny::renderTable({ + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_group_table == T) refine_unique <- function(data){ n <- tail(data, n=1) @@ -3419,7 +3416,7 @@ server <- function(input, output, session) { }) # Download used datasets (as for BioCircos) - output$download <- downloadHandler(filename = function(){ + output$download <- shiny::downloadHandler(filename = function(){ paste("datasets.zip") }, content = function(file){ @@ -3443,4 +3440,4 @@ server <- function(input, output, session) { } # Run the application -shinyApp(ui = ui, server = server) +shiny::shinyApp(ui = ui, server = server) From 18db4488122bee4b0d2e7b5e6e6173ee2d60f6ff Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 21:31:48 +0300 Subject: [PATCH 029/199] Removed BioCircos library() statement, made :: Former-commit-id: 9774f9b62b5c77ff76dbed298251a5c9d9522229 --- app.R | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app.R b/app.R index 5848830..97183d4 100755 --- a/app.R +++ b/app.R @@ -11,7 +11,6 @@ library(tidyverse) library(plyr) library(plotly) -library(BioCircos) library(ggplot2) library(shinyjs) library(rjson) @@ -157,7 +156,7 @@ ui <- shiny::fluidPage( shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), plotlyOutput("deep_reference", height = "500px")), - shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircosOutput("biocircos", height = "1000px"), shiny::dataTableOutput("biocircos_legend")), + shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircos::BioCircosOutput("biocircos", height = "1000px"), shiny::dataTableOutput("biocircos_legend")), shiny::tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), type = "tabs", id = "main" ) @@ -2317,7 +2316,7 @@ server <- function(input, output, session) { index <- index +1 } # Add to tracklist. Then it can be populated with links - tracklist <- BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, + tracklist <- BioCircos::BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time @@ -2472,13 +2471,13 @@ server <- function(input, output, session) { group_colors <- count(unlist(label_color)) for (i in seq(1:dim(group_colors)[1])){ subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], displayLabel = FALSE, color = group_colors$x[i]) } } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ - tracklist = tracklist + BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, link_pos_start_1, chromosomes_end, link_pos_end, link_pos_end_2, maxRadius = 0.85, labels = link_labels, displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) @@ -3221,11 +3220,11 @@ server <- function(input, output, session) { ## Biocircos plot tab - ##--------------------------------------------------------------- # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- renderBioCircos({ + output$biocircos <- BioCircos::renderBioCircos({ shiny::req(vals$data_upload_count >1) # Plot BioCircos - BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) + BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) }) From c3611bdb924f4e61eb227168e435c59beab9e274 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:01:08 +0300 Subject: [PATCH 030/199] Removed tidyverse library() statement, made :: for tidyr, plyr and dplyr Former-commit-id: 915b14ee681ec88a42122d0075929c90545dc509 --- app.R | 152 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 75 insertions(+), 77 deletions(-) diff --git a/app.R b/app.R index 97183d4..3710cde 100755 --- a/app.R +++ b/app.R @@ -8,8 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(tidyverse) -library(plyr) library(plotly) library(ggplot2) library(shinyjs) @@ -137,7 +135,7 @@ ui <- shiny::fluidPage( shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins filter. Remain >= of set threshold + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), @@ -218,7 +216,7 @@ server <- function(input, output, session) { ##---------------------------------------------------------------- ## Helper functions - ##---------------------------------------------------------------- - # Need to get them to a separate file later + # Need to get them to a tidyr::separate file later # TODO files_in_dir <- list.files() # Iterate over those files and if found "_biocircos.csv" add remove them @@ -342,21 +340,21 @@ server <- function(input, output, session) { } # Filtering the DeepBGC filter_deepbgc <- function(){ - score_a <- apply(vals$deep_data %>% select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + score_a <- apply(vals$deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(vals$deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(vals$deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) deep_data_chromo <- vals$deep_data %>% - mutate(score = apply(vals$deep_data %>% - select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + dplyr::mutate(score = apply(vals$deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] # If max score is under_threshold, print "under_threshold" deep_data_chromo <- deep_data_chromo%>% - mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) #Finally store deepbgc data in plotting variable. Do final scores processing biocircos_deep <- deep_data_chromo%>% - mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) biocircos_deep['Start'] <- biocircos_deep$nucl_start @@ -368,15 +366,15 @@ server <- function(input, output, session) { } # Filtering GECCO filter_gecco <- function(){ - score_a_gecco <- apply(vals$gecco_data %>% select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(vals$gecco_data %>% select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + score_a_gecco <- apply(vals$gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(vals$gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) # Store master prism data in local variable gecco_data <- vals$gecco_data %>% - mutate(score = apply(vals$gecco_data %>% + dplyr::mutate(score = apply(vals$gecco_data %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) return(gecco_data) } @@ -448,7 +446,7 @@ server <- function(input, output, session) { ### ### ########################################################################### ########################################################################### - # TODO Make separate functions for different data types. + # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! #---------------------------------------------------------------- ## Loading and processing of example data - @@ -516,9 +514,9 @@ server <- function(input, output, session) { "terpene_probability", "nrp_probability" , "other_probability" ) # Read data gecco_data <- gecco_data %>% - mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - select(-one_of(drop_cols)) + dplyr::select(-dplyr::one_of(drop_cols)) gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" @@ -746,7 +744,7 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 vals$arts_data_input <- T dup_table_id <- arts_data %>% - filter(Core != "Not_core") + dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) @@ -775,9 +773,9 @@ server <- function(input, output, session) { drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + dplyr::mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) + dplyr::select(-dplyr::one_of(drop_cols)) # Add chromosome info column vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) # Add ID column as number seuquence of dataframe length @@ -815,8 +813,8 @@ server <- function(input, output, session) { vals$rre_data <- read.delim("example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") + tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") # Add chromosome info column vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) # Add ID column @@ -901,8 +899,8 @@ server <- function(input, output, session) { location <- data.frame(location) colnames(location) <- "split" anti_data <- location %>% - separate(split, c("Start", "Stop")) %>% - transmute(ID = rownames(location), Start, Stop) + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) anti_data <- cbind(anti_data, types) colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") @@ -1015,9 +1013,9 @@ server <- function(input, output, session) { "terpene_probability", "nrp_probability" , "other_probability" ) # Read data gecco_data <- gecco_data %>% - mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - select(-one_of(drop_cols)) + dplyr::select(-dplyr::one_of(drop_cols)) gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" @@ -1105,7 +1103,7 @@ server <- function(input, output, session) { vals$arts_data <- arts_data vals$data_upload_count <- vals$data_upload_count +1 dup_table_id <- arts_data %>% - filter(Core != "Not_core") + dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) @@ -1188,7 +1186,7 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 vals$arts_data_input <- T dup_table_id <- arts_data %>% - filter(Core != "Not_core") + dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) @@ -1275,9 +1273,9 @@ server <- function(input, output, session) { drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data vals$deep_data <- read.delim(input$deep_data$datapath) %>% - mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, + dplyr::mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - select(-one_of(drop_cols)) + dplyr::select(-dplyr::one_of(drop_cols)) # Add chromosome info column vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) # Add ID column as number seuquence of dataframe length @@ -1315,8 +1313,8 @@ server <- function(input, output, session) { vals$rre_data <- read.delim(input$rre_data$datapath) # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) vals$rre_data <- vals$rre_data %>% - separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - separate(Coordinates, c("Start", "Stop"),sep = "-") + tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") # Add chromosome info column vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) # Add ID column @@ -2031,7 +2029,7 @@ server <- function(input, output, session) { ############################################################################ ############################################################################ # Compute all interceptions on data upload. - # Filter while ploting then. + # dplyr::filter while ploting then. # TODO make looop for data reading shiny::observeEvent(inputData(), { shiny::req(vals$data_upload_count>=1) @@ -2039,14 +2037,14 @@ server <- function(input, output, session) { if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data anti_inter <- vals$anti_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } if (vals$deep_data_input == TRUE){ deep_data <- vals$deep_data deep_inter <- vals$deep_data %>% - select(nucl_start, nucl_end) + dplyr::select(nucl_start, nucl_end) deep_inter$seqnames <- "chr" } @@ -2058,7 +2056,7 @@ server <- function(input, output, session) { rre_data <- data.frame(vals$rre_data) # Start/Stop columns from rre data as matrix rre_inter <- rre_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) rre_inter$seqnames <- "chr" } if (vals$prism_data_input == TRUE){ @@ -2066,7 +2064,7 @@ server <- function(input, output, session) { prism_data <- vals$prism_data # Start/Stop columns from prism data as matrix prism_inter <- prism_data %>% - select(Start,Stop) + dplyr::select(Start,Stop) prism_inter$seqnames <- "chr" } if (vals$sempi_data_input == TRUE){ @@ -2074,13 +2072,13 @@ server <- function(input, output, session) { sempi_data <- vals$sempi_data # Start/Stop columns from prism data as matrix sempi_inter <- vals$sempi_data %>% - select(Start,Stop) + dplyr::select(Start,Stop) sempi_inter$seqnames <- "chr" } if (vals$prism_supp_data_input == T){ prism_supp_data <- vals$prism_supp_data prism_supp_inter <- vals$prism_supp_data %>% - select(Start,Stop) + dplyr::select(Start,Stop) prism_supp_inter$seqnames <- "chr" if (input$prism_supp_data_input_width == TRUE) { Stop_vals_prism_supp <- as.numeric(vals$prism_supp_data$Stop)+50000 @@ -2091,14 +2089,14 @@ server <- function(input, output, session) { if (vals$arts_data_input == T){ arts_data <- vals$arts_data arts_inter <- vals$arts_data %>% - select(Start,Stop) + dplyr::select(Start,Stop) arts_inter$seqnames <- "chr" } if (vals$gecco_data_input == TRUE){ gecco_data <- vals$gecco_data # Start/Stop columns from prism data as matrix gecco_inter <- vals$gecco_data %>% - select(Start,Stop) + dplyr::select(Start,Stop) gecco_inter$seqnames <- "chr" } @@ -2152,7 +2150,7 @@ server <- function(input, output, session) { } }) - # Filter ARTS, DeepBGC, GECCO interception data + # dplyr::filter ARTS, DeepBGC, GECCO interception data # and general dataframes to plot, if data filtering # options are triggered shiny::observeEvent(dynamicInput(), { @@ -2209,7 +2207,7 @@ server <- function(input, output, session) { if (vals$arts_data_input == TRUE){ if (input$dup_choice != "All"){ vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + dplyr::filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") if (vals$data_upload_count!=1){ new_arts <- lapply(inters$arts, function(x){ new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] @@ -2468,7 +2466,7 @@ server <- function(input, output, session) { # Add links and labels to the track list for subsequent visualization if ((input$label_color == T) & (length(chromosomes_start) > 0)){ - group_colors <- count(unlist(label_color)) + group_colors <- plyr::count(unlist(label_color)) for (i in seq(1:dim(group_colors)[1])){ subset <- unname( which(label_color %in% group_colors$x[i])) tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], @@ -2509,7 +2507,7 @@ server <- function(input, output, session) { # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- drop_na(fullnes_of_annotation) + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) deep_inter_1 <- vals$deep_data_filtered # Decide which score to use for basic thresholds on x axis @@ -2525,8 +2523,8 @@ server <- function(input, output, session) { for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ deep_inter <- deep_inter_1 %>% - filter(score>=dataframe_1/100) %>% - select(Start, Stop) + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) if (length(deep_inter$Start) > 0) { deep_inter$seqnames <- "chr" } @@ -2535,15 +2533,15 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix if (input$ref_comparison == 'A'){ anti_inter <- vals$anti_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'P'){ anti_inter <- vals$prism_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'S'){ anti_inter <- vals$sempi_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } @@ -2616,13 +2614,13 @@ server <- function(input, output, session) { # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% - pivot_wider(names_from = Source, values_from = Quantity) + tidyr::pivot_wider(names_from = Source, values_from = Quantity) if (input$ref_comparison == 'A'){ data <- vals$anti_data title <- ggtitle("Rates of DeepBGC/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2631,7 +2629,7 @@ server <- function(input, output, session) { data <- vals$prism_data title <- ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2640,7 +2638,7 @@ server <- function(input, output, session) { data <- vals$sempi_data title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") test <- test %>% - mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2649,7 +2647,7 @@ server <- function(input, output, session) { # Calculate rates and plot interactive plot with plotly ggplotly(test %>% - pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + geom_line(aes(color=Rates)) + geom_point(aes(shape=Rates), alpha = .4, size = 3) + @@ -2668,7 +2666,7 @@ server <- function(input, output, session) { # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- drop_na(fullnes_of_annotation) + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) gecco_inter_1 <- vals$gecco_data_filtered # Decide which score to use for basic thresholds on x axis @@ -2682,10 +2680,10 @@ server <- function(input, output, session) { # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - # Filter dataframe. Get only rows, which >= of a given thresholds. Select only start and stop of those rows as a matrix + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix gecco_inter <- gecco_inter_1 %>% - filter(score>=dataframe_1/100) %>% - select(Start, Stop) + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) if (length(gecco_inter$Start) > 0) { gecco_inter$seqnames <- "chr" } @@ -2694,15 +2692,15 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix if (input$ref_comparison_gecco == 'A'){ anti_inter <- vals$anti_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison_gecco == 'P'){ anti_inter <- vals$prism_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison_gecco == 'S'){ anti_inter <- vals$sempi_data %>% - select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } @@ -2773,13 +2771,13 @@ server <- function(input, output, session) { # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% - pivot_wider(names_from = Source, values_from = Quantity) + tidyr::pivot_wider(names_from = Source, values_from = Quantity) if (input$ref_comparison_gecco == 'A'){ data <- vals$anti_data title <- ggtitle("Rates of GECCO/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2788,7 +2786,7 @@ server <- function(input, output, session) { data <- vals$prism_data title <- ggtitle("Rates of GECCO/PRISM data annotation") test <- test %>% - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2797,7 +2795,7 @@ server <- function(input, output, session) { data <- vals$sempi_data title <- ggtitle("Rates of GECCO/SEMPI data annotation") test <- test %>% - mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed @@ -2806,7 +2804,7 @@ server <- function(input, output, session) { # Calculate rates and plot interactive plot with plotly ggplotly(test %>% - pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + geom_line(aes(color=Rates)) + geom_point(aes(shape=Rates), alpha = .4, size = 3) + @@ -3232,7 +3230,7 @@ server <- function(input, output, session) { shiny::req(vals$data_upload_count >=1) plot_data <- vals$rename_data - new_data <- drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) + new_data <- tidyr::drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) new_data <- new_data[!apply(new_data == "", 1, all),] colnames(new_data) <- c("Name", "Color") color_vec <- new_data$Color @@ -3245,7 +3243,7 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- ## Summarize tab - ##--------------------------------------------------------------- - # Render barplot with number count of interception for BGC IDs + # Render barplot with number plyr::count of interception for BGC IDs output$barplot_rank <- renderPlotly({ shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) @@ -3272,7 +3270,7 @@ server <- function(input, output, session) { ranking_data <- NULL for (upload in data_uploads){ if (vals[[upload]] == T){ - counts_var <-count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) + counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] # Add prefices to the ID to plot for a barplot. @@ -3371,7 +3369,7 @@ server <- function(input, output, session) { index <- index +1 } excluded_names <- soft_let[soft_let != as.name(soft_let[i])] - data <- df_test %>% group_by_if(colnames(df_test)==soft_let[i]) %>% summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + data <- df_test %>% dplyr::group_by_if(colnames(df_test)==soft_let[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), b=paste(eval(as.name(excluded_names[2])), collapse=","), c=paste(eval(as.name(excluded_names[3])), collapse=","), d=paste(eval(as.name(excluded_names[4])), collapse=","), @@ -3388,7 +3386,7 @@ server <- function(input, output, session) { for (f in seq(1:length(data_uploads))){ if (vals[[data_uploads[f]]] != TRUE){ data <- data %>% - select(-as.name(soft_namings[f])) + dplyr::select(-as.name(soft_namings[f])) } } From d9873e5d8e176fd4057b16c6ce4dcc1b776d2cc2 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:11:23 +0300 Subject: [PATCH 031/199] Removed DT library() statement, made :: Former-commit-id: 5d5226f45fa65bda6eb652c491eaa36d812ef2d0 --- app.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app.R b/app.R index 3710cde..63452e2 100755 --- a/app.R +++ b/app.R @@ -13,7 +13,6 @@ library(ggplot2) library(shinyjs) library(rjson) library(stringr) -library(DT) library(GenomicRanges) # Define UI ui <- shiny::fluidPage( @@ -154,7 +153,7 @@ ui <- shiny::fluidPage( shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), plotlyOutput("deep_reference", height = "500px")), - shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircos::BioCircosOutput("biocircos", height = "1000px"), shiny::dataTableOutput("biocircos_legend")), + shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircos::BioCircosOutput("biocircos", height = "1000px"), DT::dataTableOutput("biocircos_legend")), shiny::tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), type = "tabs", id = "main" ) @@ -3226,7 +3225,7 @@ server <- function(input, output, session) { }) - output$biocircos_legend <- renderDataTable({ + output$biocircos_legend <- DT::renderDataTable({ shiny::req(vals$data_upload_count >=1) plot_data <- vals$rename_data @@ -3235,8 +3234,8 @@ server <- function(input, output, session) { colnames(new_data) <- c("Name", "Color") color_vec <- new_data$Color options(DT.options = list(pageLength = 50)) - datatable(new_data, rownames = F) %>% formatStyle('Color', - backgroundColor=styleEqual(color_vec, color_vec)) + DT::datatable(new_data, rownames = F) %>% DT::formatStyle('Color', + backgroundColor=DT::styleEqual(color_vec, color_vec)) }) From c39f0e4aa7bd29416e2d26646790165e527abad6 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:16:23 +0300 Subject: [PATCH 032/199] Removed ggplot2 library() statement, made :: Former-commit-id: d35c24c3f3e206ff51d0e62df3a58f0d6dde31b9 --- app.R | 139 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 69 insertions(+), 70 deletions(-) diff --git a/app.R b/app.R index 63452e2..f33c7b7 100755 --- a/app.R +++ b/app.R @@ -9,7 +9,6 @@ # in one genome # library(plotly) -library(ggplot2) library(shinyjs) library(rjson) library(stringr) @@ -2563,15 +2562,15 @@ server <- function(input, output, session) { if (input$ref_comparison == 'A'){ used_antismash <- length(vals$anti_data$Cluster)-inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'P'){ used_antismash <- length(vals$prism_data$Cluster)-inter_bgc cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'S') { used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") } # Combine all vectors into one dataframe @@ -2593,12 +2592,12 @@ server <- function(input, output, session) { paste("Cluster type score:", as.character(input$score_c)), sep = "\n") # Plot the barplot - ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + - geom_bar(position="dodge", stat="identity")+ - geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + - xlab(paste(input$score_type,"Score")) + + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + title + - geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) }) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data @@ -2616,7 +2615,7 @@ server <- function(input, output, session) { tidyr::pivot_wider(names_from = Source, values_from = Quantity) if (input$ref_comparison == 'A'){ data <- vals$anti_data - title <- ggtitle("Rates of DeepBGC/Antismash data annotation") + title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), @@ -2626,7 +2625,7 @@ server <- function(input, output, session) { Skip_rate = test$`Only Antismash`/length(data$Cluster)) } else if (input$ref_comparison == 'P'){ data <- vals$prism_data - title <- ggtitle("Rates of DeepBGC/PRISM data annotation") + title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) @@ -2635,7 +2634,7 @@ server <- function(input, output, session) { Skip_rate = test$`Only PRISM`/length(data$Cluster)) } else if (input$ref_comparison == 'S'){ data <- vals$sempi_data - title <- ggtitle("Rates of DeepBGC/SEMPI data annotation") + title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) @@ -2647,12 +2646,12 @@ server <- function(input, output, session) { # Calculate rates and plot interactive plot with plotly ggplotly(test %>% tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - geom_line(aes(color=Rates)) + - geom_point(aes(shape=Rates), alpha = .4, size = 3) + + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + title + - ylab("Rate") + - xlab(paste(input$score_type,"Score threshold")), + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), tooltip = c("Rate")) }) ##---------------------------------------------------------------- @@ -2722,15 +2721,15 @@ server <- function(input, output, session) { if (input$ref_comparison_gecco == 'A'){ used_antismash <- length(vals$anti_data$Cluster)-inter_bgc cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") } else if (input$ref_comparison_gecco == 'P'){ used_antismash <- length(vals$prism_data$Cluster)-inter_bgc cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") - title <- ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") } else if (input$ref_comparison_gecco == 'S') { used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") - title <- ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") } # Combine all vectors into one dataframe @@ -2751,12 +2750,12 @@ server <- function(input, output, session) { paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") # Plot the barplot - ggplot(fullnes_of_annotation, aes(fill=Source, y=Quantity, x=Score)) + - geom_bar(position="dodge", stat="identity")+ - geom_text(aes(label=Quantity), position=position_dodge(width=0.9), vjust=-0.25) + - xlab(paste(input$score_type,"Score")) + + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + title + - geom_label(aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) }) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data @@ -2773,7 +2772,7 @@ server <- function(input, output, session) { tidyr::pivot_wider(names_from = Source, values_from = Quantity) if (input$ref_comparison_gecco == 'A'){ data <- vals$anti_data - title <- ggtitle("Rates of GECCO/Antismash data annotation") + title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), @@ -2783,7 +2782,7 @@ server <- function(input, output, session) { Skip_rate = test$`Only Antismash`/length(data$Cluster)) } else if (input$ref_comparison_gecco == 'P'){ data <- vals$prism_data - title <- ggtitle("Rates of GECCO/PRISM data annotation") + title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) @@ -2792,7 +2791,7 @@ server <- function(input, output, session) { Skip_rate = test$`Only PRISM`/length(data$Cluster)) } else if (input$ref_comparison_gecco == 'S'){ data <- vals$sempi_data - title <- ggtitle("Rates of GECCO/SEMPI data annotation") + title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) @@ -2804,12 +2803,12 @@ server <- function(input, output, session) { # Calculate rates and plot interactive plot with plotly ggplotly(test %>% tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot(aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - geom_line(aes(color=Rates)) + - geom_point(aes(shape=Rates), alpha = .4, size = 3) + + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + title + - ylab("Rate") + - xlab(paste(input$score_type,"Score threshold")), + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), tooltip = c("Rate")) }) ##--------------------------------------------------------------- @@ -2870,45 +2869,45 @@ server <- function(input, output, session) { } geom_anti <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } geom_prism <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } geom_deep <- function(data){ - geom_segment(data=data,aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, deepbgc_score = deepbgc_score,activity = activity ),size =3) } geom_rre <- function(data){ if (vals$rre_more == T){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, Probability = Probability),size = 3) } else { - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value ),size = 3) } } geom_sempi <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } geom_prism_supp <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score), size = 3) } geom_arts <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) } geom_gecco <- function(data){ - geom_segment(data=data, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) } @@ -3063,7 +3062,7 @@ server <- function(input, output, session) { seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) seg_ref <- seg_ref_g if (input$ref == soft_ref[sup_index]){ - plot <- ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), aes(x = vals$chr_len, y = Chr)) + + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) soft_let <- abbr[sup_index] lettrs <- lett[2:length(lett)] @@ -3082,12 +3081,12 @@ server <- function(input, output, session) { } plot <- plot + - scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("Annotations' comparison to the reference") + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("Annotations' comparison to the reference") to_plot <- ggplotly(plot, tooltip = tooltip) to_plot <- to_plot %>% layout(legend=list(font = list( @@ -3139,68 +3138,68 @@ server <- function(input, output, session) { "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", "Num_domains", "Num_proteins", "Average_p", "Max_p") - plot <- ggplot(data, aes(x = vals$chr_len, y = Chr)) + plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) if (vals$anti_data_input == TRUE){ plot <- plot + - geom_segment(data=vals$seg_df_ref_a, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$deep_data_input == TRUE){ if (dim(vals$seg_df_ref_d)[1] >0) { plot <- plot + - geom_segment(data=vals$seg_df_ref_d,aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, deepbgc_score = deepbgc_score,activity = activity ),size =3) } } if (vals$rre_data_input == TRUE){ if (vals$rre_more == T){ - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, Probability = Probability),size = 3) } else { - plot <- plot + geom_segment(data=vals$seg_df_ref_r, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) } } if (vals$prism_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$sempi_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (input$prism_supp == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_p_s, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score), size = 3) } if (vals$arts_data_input == TRUE){ - plot <- plot + geom_segment(data=vals$seg_df_ref_ar, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) } if (vals$gecco_data_input == TRUE){ if (dim(vals$seg_df_ref_g)[1] >0) { - plot <- plot + geom_segment(data = vals$seg_df_ref_g, aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) } } to_plot <- ggplotly(plot + - scale_y_discrete(labels = rename_y_axis) + - theme(axis.text.y = element_text(size = 10)) + - ylab("")+ - xlab("Chromosome length")+ - theme(legend.title = element_blank()) + - ggtitle("All annotations"), + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), # What actually to visualize in tooltip tooltip = tooltip ) @@ -3295,11 +3294,11 @@ server <- function(input, output, session) { # Fix column names in the master dataframe colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") # Plot - ggplotly(ggplot(ranking_data, aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - geom_bar(stat = "identity", aes(fill = Label)) + - theme(axis.text.x = element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = element_text(size = 14)) + - ggtitle("Number of times cluster is annotated with other tool"), + ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14)) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), tooltip=c("Type", "Start", "Stop") ) From 9d583844e6c0861c420b7dace5d75c4c72c13497 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:19:09 +0300 Subject: [PATCH 033/199] Removed plotly library() statement, made :: Former-commit-id: a34168485de4d79183e9102bf627172e27359b36 --- app.R | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/app.R b/app.R index f33c7b7..bbc6f42 100755 --- a/app.R +++ b/app.R @@ -8,7 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(plotly) library(shinyjs) library(rjson) library(stringr) @@ -148,12 +147,12 @@ ui <- shiny::fluidPage( shiny::mainPanel( # Define tabs and their correcponding plots shiny::tabsetPanel( - shiny::tabPanel(title = "Compare data with DeepBGC", value = 1 ,shiny::plotOutput("deep_barplot",height = "500px"), plotlyOutput("deep_rate")), - shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotlyOutput("gecco_rate")), - shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotlyOutput("deep_reference_2", height = "500px"), - plotlyOutput("deep_reference", height = "500px")), + shiny::tabPanel(title = "Compare data with DeepBGC", value = 1 ,shiny::plotOutput("deep_barplot",height = "500px"), plotly::plotlyOutput("deep_rate")), + shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotly::plotlyOutput("gecco_rate")), + shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotly::plotlyOutput("deep_reference_2", height = "500px"), + plotly::plotlyOutput("deep_reference", height = "500px")), shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircos::BioCircosOutput("biocircos", height = "1000px"), DT::dataTableOutput("biocircos_legend")), - shiny::tabPanel(title = "Summarize interception", value = 3,plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), + shiny::tabPanel(title = "Summarize interception", value = 3,plotly::plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), type = "tabs", id = "main" ) ) @@ -2601,7 +2600,7 @@ server <- function(input, output, session) { }) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$deep_rate <- renderPlotly({ + output$deep_rate <- plotly::renderPlotly({ shiny::req(!is.null(vals$fullness_deep)) @@ -2644,7 +2643,7 @@ server <- function(input, output, session) { } # Calculate rates and plot interactive plot with plotly - ggplotly(test %>% + plotly::ggplotly(test %>% tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + ggplot2::geom_line(ggplot2::aes(color=Rates)) + @@ -2759,7 +2758,7 @@ server <- function(input, output, session) { }) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$gecco_rate <- renderPlotly({ + output$gecco_rate <- plotly::renderPlotly({ shiny::req(!is.null(vals$fullness_gecco)) # Reuse stored dataframe from previous plot @@ -2801,7 +2800,7 @@ server <- function(input, output, session) { } # Calculate rates and plot interactive plot with plotly - ggplotly(test %>% + plotly::ggplotly(test %>% tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + ggplot2::geom_line(ggplot2::aes(color=Rates)) + @@ -2817,7 +2816,7 @@ server <- function(input, output, session) { # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type - output$deep_reference <- renderPlotly({ + output$deep_reference <- plotly::renderPlotly({ shiny::req(vals$data_upload_count >=1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_deep_ref == T) @@ -3087,9 +3086,9 @@ server <- function(input, output, session) { ggplot2::xlab("Chromosome length")+ ggplot2::theme(legend.title = ggplot2::element_blank()) + ggplot2::ggtitle("Annotations' comparison to the reference") - to_plot <- ggplotly(plot, tooltip = tooltip) + to_plot <- plotly::ggplotly(plot, tooltip = tooltip) to_plot <- to_plot %>% - layout(legend=list(font = list( + plotly::layout(legend=list(font = list( family = "sans-serif", size = 12, color = "#000"), @@ -3110,7 +3109,7 @@ server <- function(input, output, session) { to_plot }) - output$deep_reference_2 <- renderPlotly({ + output$deep_reference_2 <- plotly::renderPlotly({ shiny::req(vals$can_plot_deep_ref_2 == T) vals$can_plot_deep_ref_2 == F shiny::req(vals$data_upload_count >=1) @@ -3193,7 +3192,7 @@ server <- function(input, output, session) { Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) } } - to_plot <- ggplotly(plot + + to_plot <- plotly::ggplotly(plot + ggplot2::scale_y_discrete(labels = rename_y_axis) + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + ggplot2::ylab("")+ @@ -3203,7 +3202,7 @@ server <- function(input, output, session) { # What actually to visualize in tooltip tooltip = tooltip ) - to_plot %>% layout(legend=list(font = list( + to_plot %>% plotly::layout(legend=list(font = list( family = "sans-serif", size = 12, color = "#000"), @@ -3242,7 +3241,7 @@ server <- function(input, output, session) { ## Summarize tab - ##--------------------------------------------------------------- # Render barplot with number plyr::count of interception for BGC IDs - output$barplot_rank <- renderPlotly({ + output$barplot_rank <- plotly::renderPlotly({ shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_barplot_rank == T) @@ -3294,7 +3293,7 @@ server <- function(input, output, session) { # Fix column names in the master dataframe colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") # Plot - ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), axis.text.y = ggplot2::element_text(size = 14)) + From 7489a0355a78e973cff45bc00fd05bbc8cdb25a2 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:20:54 +0300 Subject: [PATCH 034/199] Removed shinyjs library() statement, made :: Former-commit-id: 1b0c8e0437014892b4c9e7ddba9a083479865119 --- app.R | 553 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 276 insertions(+), 277 deletions(-) diff --git a/app.R b/app.R index bbc6f42..154ba17 100755 --- a/app.R +++ b/app.R @@ -8,7 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(shinyjs) library(rjson) library(stringr) library(GenomicRanges) @@ -1371,10 +1370,10 @@ server <- function(input, output, session) { if (vals$rre_data_input == T){ if (input$hide_viz == F){ - showElement(selector = "#rre_width") + shinyjs::showElement(selector = "#rre_width") } } else{ - hideElement(selector = "#rre_width") + shinyjs::hideElement(selector = "#rre_width") } }) # Show anti_hybrid option if data is available @@ -1383,12 +1382,12 @@ server <- function(input, output, session) { if (vals$anti_data_input == T){ if (input$hide_anti == F){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") + shinyjs::showElement(selector = "#anti_header") + shinyjs::showElement(selector = "#anti_hybrid") } } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") + shinyjs::hideElement(selector = "#anti_header") + shinyjs::hideElement(selector = "#anti_hybrid") } }) # Show prism options if data is available @@ -1400,22 +1399,22 @@ server <- function(input, output, session) { if (vals$prism_data_input == T){ if (input$hide_anti == F){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") + shinyjs::showElement(selector = "#prism_header") + shinyjs::showElement(selector = "#prism_hybrid") if (vals$prism_json == T){ - showElement(selector = "#prism_supp") + shinyjs::showElement(selector = "#prism_supp") } } if (input$hide_viz == F){ if (vals$prism_json == T){ - showElement(selector = "#prism_supp_data_input_width") + shinyjs::showElement(selector = "#prism_supp_data_input_width") } } } else{ - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#prism_supp_data_input_width") + shinyjs::hideElement(selector = "#prism_header") + shinyjs::hideElement(selector = "#prism_hybrid") + shinyjs::hideElement(selector = "#prism_supp") + shinyjs::hideElement(selector = "#prism_supp_data_input_width") } }) # Show SEMPI elements on data upload @@ -1423,84 +1422,84 @@ server <- function(input, output, session) { if (vals$sempi_data_input == T){ if (input$hide_anti == F){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") + shinyjs::showElement(selector = "#sempi_header") + shinyjs::showElement(selector = "#sempi_hybrid") } if (input$hide_viz == F){ - showElement(selector = "#sempi_width") + shinyjs::showElement(selector = "#sempi_width") } } else{ - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - hideElement(selector = "#sempi_width") + shinyjs::hideElement(selector = "#sempi_header") + shinyjs::hideElement(selector = "#sempi_hybrid") + shinyjs::hideElement(selector = "#sempi_width") } }) # Show DeepBGC options if data is available shiny::observeEvent(vals$deep_data_input,{ if (vals$deep_data_input == T){ - showElement(selector = "#ref_comparison") - showElement(selector = "#hide_data_comparison") - showElement(selector = "#hide_data_filter") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") - showElement(selector = "#data_comparison_header") - showElement(selector = "#data_filter_header") + shinyjs::showElement(selector = "#ref_comparison") + shinyjs::showElement(selector = "#hide_data_comparison") + shinyjs::showElement(selector = "#hide_data_filter") + shinyjs::showElement(selector = "#score_type") + shinyjs::showElement(selector = "#plot_step") + shinyjs::showElement(selector = "#plot_start") + shinyjs::showElement(selector = "#score_a") + shinyjs::showElement(selector = "#score_d") + shinyjs::showElement(selector = "#score_c") + shinyjs::showElement(selector = "#domains_filter") + shinyjs::showElement(selector = "#biodomain_filter") + shinyjs::showElement(selector = "#gene_filter") + shinyjs::showElement(selector = "#cluster_type") + shinyjs::showElement(selector = "#data_comparison_header") + shinyjs::showElement(selector = "#data_filter_header") } else{ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#hide_data_comparison") - hideElement(selector = "#hide_data_filter") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") - hideElement(selector = "#data_comparison_header") - hideElement(selector = "#data_filter_header") + shinyjs::hideElement(selector = "#ref_comparison") + shinyjs::hideElement(selector = "#score_type") + shinyjs::hideElement(selector = "#hide_data_comparison") + shinyjs::hideElement(selector = "#hide_data_filter") + shinyjs::hideElement(selector = "#plot_step") + shinyjs::hideElement(selector = "#plot_start") + shinyjs::hideElement(selector = "#score_a") + shinyjs::hideElement(selector = "#score_d") + shinyjs::hideElement(selector = "#score_c") + shinyjs::hideElement(selector = "#domains_filter") + shinyjs::hideElement(selector = "#biodomain_filter") + shinyjs::hideElement(selector = "#gene_filter") + shinyjs::hideElement(selector = "#cluster_type") + shinyjs::hideElement(selector = "#data_comparison_header") + shinyjs::hideElement(selector = "#data_filter_header") } }) # Show GECCO data options, if data is uploaded shiny::observeEvent(vals$gecco_data_input,{ if (vals$gecco_data_input == T){ - showElement(selector = "#data_comparison_header_gecco") - showElement(selector = "#hide_data_comparison_gecco") - showElement(selector = "#ref_comparison_gecco") - showElement(selector = "#score_type_gecco") - showElement(selector = "#plot_step_gecco") - showElement(selector = "#plot_start_gecco") - showElement(selector = "#data_filter_header_gecco") - showElement(selector = "#hide_data_filter_gecco") - showElement(selector = "#score_average_gecco") - showElement(selector = "#score_cluster_gecco") - showElement(selector = "#domains_filter_gecco") - showElement(selector = "#prot_filter_gecco") + shinyjs::showElement(selector = "#data_comparison_header_gecco") + shinyjs::showElement(selector = "#hide_data_comparison_gecco") + shinyjs::showElement(selector = "#ref_comparison_gecco") + shinyjs::showElement(selector = "#score_type_gecco") + shinyjs::showElement(selector = "#plot_step_gecco") + shinyjs::showElement(selector = "#plot_start_gecco") + shinyjs::showElement(selector = "#data_filter_header_gecco") + shinyjs::showElement(selector = "#hide_data_filter_gecco") + shinyjs::showElement(selector = "#score_average_gecco") + shinyjs::showElement(selector = "#score_cluster_gecco") + shinyjs::showElement(selector = "#domains_filter_gecco") + shinyjs::showElement(selector = "#prot_filter_gecco") } else{ - hideElement(selector = "#data_comparison_header_gecco") - hideElement(selector = "#hide_data_comparison_gecco") - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") - hideElement(selector = "#data_filter_header_gecco") - hideElement(selector = "#hide_data_filter_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_cluster_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") + shinyjs::hideElement(selector = "#data_comparison_header_gecco") + shinyjs::hideElement(selector = "#hide_data_comparison_gecco") + shinyjs::hideElement(selector = "#ref_comparison_gecco") + shinyjs::hideElement(selector = "#score_type_gecco") + shinyjs::hideElement(selector = "#plot_step_gecco") + shinyjs::hideElement(selector = "#plot_start_gecco") + shinyjs::hideElement(selector = "#data_filter_header_gecco") + shinyjs::hideElement(selector = "#hide_data_filter_gecco") + shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#score_cluster_gecco") + shinyjs::hideElement(selector = "#domains_filter_gecco") + shinyjs::hideElement(selector = "#prot_filter_gecco") } }) # Ahow ARTS data options, if data is available @@ -1508,16 +1507,16 @@ server <- function(input, output, session) { if (vals$arts_data_input == T){ if (input$hide_anti == F){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") + shinyjs::showElement(selector = "#arts_header") + shinyjs::showElement(selector = "#dup_choice") } if (input$hide_viz == F){ - showElement(selector = "#arts_width") + shinyjs::showElement(selector = "#arts_width") } } else { - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") - hideElement(selector = "#arts_width") + shinyjs::hideElement(selector = "#arts_header") + shinyjs::hideElement(selector = "#dup_choice") + shinyjs::hideElement(selector = "#arts_width") } }) ##--------------------------------------------------------------- @@ -1533,14 +1532,14 @@ server <- function(input, output, session) { }else if (vals$data_upload_count >=2){ if (input$hide_summarize == F) { - showElement(selector = "#summarize") - showElement(selector = "#group_by") - showElement(selector = "#count_all") + shinyjs::showElement(selector = "#summarize") + shinyjs::showElement(selector = "#group_by") + shinyjs::showElement(selector = "#count_all") } if (input$hide_viz == F){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") + shinyjs::showElement(selector = "#biocircos_color") + shinyjs::showElement(selector = "#label_color") + shinyjs::showElement(selector = "#label_color_class") } shiny::showTab("main", "2") shiny::showTab("main", "3") @@ -1565,15 +1564,15 @@ server <- function(input, output, session) { shiny::hideTab("main", "4") shiny::hideTab(inputId = "main", target = "5") shiny::hideTab(inputId = "main", target = "1") - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#hide_genes_on_chr") - hideElement(selector = "#ref") + shinyjs::hideElement(selector = "#genes_on_chr") + shinyjs::hideElement(selector = "#hide_genes_on_chr") + shinyjs::hideElement(selector = "#ref") }else{ shiny::showTab("main", "4") if (input$hide_genes_on_chr == F){ - showElement(selector = "#genes_on_chr") - showElement(selector = "#hide_genes_on_chr") - showElement(selector = "#ref") + shinyjs::showElement(selector = "#genes_on_chr") + shinyjs::showElement(selector = "#hide_genes_on_chr") + shinyjs::showElement(selector = "#ref") } } @@ -1583,9 +1582,9 @@ server <- function(input, output, session) { shiny::observeEvent(input$label_color_class, { if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") + shinyjs::showElement(selector = "#ref_col_biocircos") } else { - hideElement(selector = "#ref_col_biocircos") + shinyjs::hideElement(selector = "#ref_col_biocircos") } }) # Make hybrids from the data, if checkbox is checked @@ -1678,8 +1677,8 @@ server <- function(input, output, session) { prism_data['Type2'] <- vals$prism_type vals$prism_data <- prism_data } - showElement(selector = "#reset_name") - hideElement(selector = "#rename") + shinyjs::showElement(selector = "#reset_name") + shinyjs::hideElement(selector = "#rename") vals$renamed <- T shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) }) @@ -1720,8 +1719,8 @@ server <- function(input, output, session) { shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) shiny::updateCheckboxInput(inputId = "sempi_hybrid", value =F) shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) - showElement(selector = "#rename") - hideElement(selector = "#reset_name") + shinyjs::showElement(selector = "#rename") + shinyjs::hideElement(selector = "#reset_name") vals$renamed <- F }) # Read the uploaded renaming scheme csv @@ -1734,104 +1733,104 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_uploads, { if (input$hide_uploads == T){ - hideElement(selector = "#anti_input_options") - hideElement(selector = "#anti_data") - hideElement(selector = "#prism_input_options") - hideElement(selector = "#anti_header_upload") - hideElement(selector = "#prism_header_upload") - hideElement(selector = "#prism_data") - hideElement(selector = "#sempi_header_upload") - hideElement(selector = "#sempi_data") - hideElement(selector = "#deep_header_upload") - hideElement(selector = "#deep_data") - hideElement(selector = "#gecco_header_upload") - hideElement(selector = "#gecco_data") - hideElement(selector = "#rre_header_upload") - hideElement(selector = "#rre_data") - hideElement(selector = "#chr_len") - hideElement(selector = "#arts_header_upload") - hideElement(selector = "#known_data") - hideElement(selector = "#dup_data") - hideElement(selector = "#anti_sco") - hideElement(selector = "#prism_sco") - hideElement(selector = "#arts_sco") - hideElement(selector = "#rre_sco") - hideElement(selector = "#sempi_sco") - hideElement(selector = "#deep_sco") - hideElement(selector = "#gecco_sco") + shinyjs::hideElement(selector = "#anti_input_options") + shinyjs::hideElement(selector = "#anti_data") + shinyjs::hideElement(selector = "#prism_input_options") + shinyjs::hideElement(selector = "#anti_header_upload") + shinyjs::hideElement(selector = "#prism_header_upload") + shinyjs::hideElement(selector = "#prism_data") + shinyjs::hideElement(selector = "#sempi_header_upload") + shinyjs::hideElement(selector = "#sempi_data") + shinyjs::hideElement(selector = "#deep_header_upload") + shinyjs::hideElement(selector = "#deep_data") + shinyjs::hideElement(selector = "#gecco_header_upload") + shinyjs::hideElement(selector = "#gecco_data") + shinyjs::hideElement(selector = "#rre_header_upload") + shinyjs::hideElement(selector = "#rre_data") + shinyjs::hideElement(selector = "#chr_len") + shinyjs::hideElement(selector = "#arts_header_upload") + shinyjs::hideElement(selector = "#known_data") + shinyjs::hideElement(selector = "#dup_data") + shinyjs::hideElement(selector = "#anti_sco") + shinyjs::hideElement(selector = "#prism_sco") + shinyjs::hideElement(selector = "#arts_sco") + shinyjs::hideElement(selector = "#rre_sco") + shinyjs::hideElement(selector = "#sempi_sco") + shinyjs::hideElement(selector = "#deep_sco") + shinyjs::hideElement(selector = "#gecco_sco") }else { - showElement(selector = "#anti_input_options") - showElement(selector = "#anti_data") - showElement(selector = "#prism_input_options") - showElement(selector = "#anti_header_upload") - showElement(selector = "#prism_header_upload") - showElement(selector = "#prism_data") - showElement(selector = "#sempi_header_upload") - showElement(selector = "#sempi_data") - showElement(selector = "#deep_header_upload") - showElement(selector = "#deep_data") - showElement(selector = "#gecco_header_upload") - showElement(selector = "#gecco_data") - showElement(selector = "#rre_header_upload") - showElement(selector = "#rre_data") - showElement(selector = "#chr_len") - showElement(selector = "#arts_header_upload") - showElement(selector = "#known_data") - showElement(selector = "#dup_data") - showElement(selector = "#anti_sco") - showElement(selector = "#prism_sco") - showElement(selector = "#arts_sco") - showElement(selector = "#rre_sco") - showElement(selector = "#sempi_sco") - showElement(selector = "#deep_sco") - showElement(selector = "#gecco_sco") + shinyjs::showElement(selector = "#anti_input_options") + shinyjs::showElement(selector = "#anti_data") + shinyjs::showElement(selector = "#prism_input_options") + shinyjs::showElement(selector = "#anti_header_upload") + shinyjs::showElement(selector = "#prism_header_upload") + shinyjs::showElement(selector = "#prism_data") + shinyjs::showElement(selector = "#sempi_header_upload") + shinyjs::showElement(selector = "#sempi_data") + shinyjs::showElement(selector = "#deep_header_upload") + shinyjs::showElement(selector = "#deep_data") + shinyjs::showElement(selector = "#gecco_header_upload") + shinyjs::showElement(selector = "#gecco_data") + shinyjs::showElement(selector = "#rre_header_upload") + shinyjs::showElement(selector = "#rre_data") + shinyjs::showElement(selector = "#chr_len") + shinyjs::showElement(selector = "#arts_header_upload") + shinyjs::showElement(selector = "#known_data") + shinyjs::showElement(selector = "#dup_data") + shinyjs::showElement(selector = "#anti_sco") + shinyjs::showElement(selector = "#prism_sco") + shinyjs::showElement(selector = "#arts_sco") + shinyjs::showElement(selector = "#rre_sco") + shinyjs::showElement(selector = "#sempi_sco") + shinyjs::showElement(selector = "#deep_sco") + shinyjs::showElement(selector = "#gecco_sco") } }) # What to do, if hide data options scheme is triggered shiny::observeEvent(input$hide_anti, { if (input$hide_anti== T){ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") + shinyjs::hideElement(selector = "#anti_header") + shinyjs::hideElement(selector = "#anti_hybrid") + shinyjs::hideElement(selector = "#sempi_header") + shinyjs::hideElement(selector = "#sempi_hybrid") + shinyjs::hideElement(selector = "#prism_header") + shinyjs::hideElement(selector = "#prism_hybrid") + shinyjs::hideElement(selector = "#prism_supp") + shinyjs::hideElement(selector = "#arts_header") + shinyjs::hideElement(selector = "#dup_choice") }else{ if (vals$anti_data_input == T){ - showElement(selector = "#anti_header") - showElement(selector = "#anti_hybrid") + shinyjs::showElement(selector = "#anti_header") + shinyjs::showElement(selector = "#anti_hybrid") } else{ - hideElement(selector = "#anti_header") - hideElement(selector = "#anti_hybrid") + shinyjs::hideElement(selector = "#anti_header") + shinyjs::hideElement(selector = "#anti_hybrid") } if (vals$prism_data_input == T){ - showElement(selector = "#prism_header") - showElement(selector = "#prism_hybrid") + shinyjs::showElement(selector = "#prism_header") + shinyjs::showElement(selector = "#prism_hybrid") if (vals$prism_json == T){ - showElement(selector = "#prism_supp") + shinyjs::showElement(selector = "#prism_supp") } } else { - hideElement(selector = "#prism_header") - hideElement(selector = "#prism_hybrid") - hideElement(selector = "#prism_supp") + shinyjs::hideElement(selector = "#prism_header") + shinyjs::hideElement(selector = "#prism_hybrid") + shinyjs::hideElement(selector = "#prism_supp") } if (vals$sempi_data_input == T){ - showElement(selector = "#sempi_header") - showElement(selector = "#sempi_hybrid") + shinyjs::showElement(selector = "#sempi_header") + shinyjs::showElement(selector = "#sempi_hybrid") } else { - hideElement(selector = "#sempi_header") - hideElement(selector = "#sempi_hybrid") + shinyjs::hideElement(selector = "#sempi_header") + shinyjs::hideElement(selector = "#sempi_hybrid") } if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - showElement(selector = "#dup_choice") + shinyjs::showElement(selector = "#arts_header") + shinyjs::showElement(selector = "#dup_choice") } else{ - hideElement(selector = "#arts_header") - hideElement(selector = "#dup_choice") + shinyjs::hideElement(selector = "#arts_header") + shinyjs::hideElement(selector = "#dup_choice") } } }) @@ -1839,13 +1838,13 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_genes_on_chr, { if (input$hide_genes_on_chr == T){ - hideElement(selector = "#ref") + shinyjs::hideElement(selector = "#ref") } else { if (vals$data_upload_count > 0){ - showElement(selector = "#ref") + shinyjs::showElement(selector = "#ref") } else { - hideElement(selector = "#genes_on_chr") - hideElement(selector = "#ref") + shinyjs::hideElement(selector = "#genes_on_chr") + shinyjs::hideElement(selector = "#ref") } } }) @@ -1853,16 +1852,16 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_summarize, { if (input$hide_summarize == T){ - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") + shinyjs::hideElement(selector = "#group_by") + shinyjs::hideElement(selector = "#count_all") } else { if (vals$data_upload_count > 1){ - showElement(selector = "#group_by") - showElement(selector = "#count_all") + shinyjs::showElement(selector = "#group_by") + shinyjs::showElement(selector = "#count_all") } else { - hideElement(selector = "#summarize") - hideElement(selector = "#group_by") - hideElement(selector = "#count_all") + shinyjs::hideElement(selector = "#summarize") + shinyjs::hideElement(selector = "#group_by") + shinyjs::hideElement(selector = "#count_all") } } @@ -1871,58 +1870,58 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_viz, { if (input$hide_viz == T){ - hideElement(selector = "#rename_data") - hideElement(selector = "#rename") - hideElement(selector = "#reset_name") - hideElement(selector = "#rre_width") - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") - hideElement(selector = "#ref_col_biocircos") - hideElement(selector = "#arts_header") - hideElement(selector = "#arts_width") - hideElement(selector = "#sempi_width") - hideElement(selector = "#prism_supp_data_input_width") + shinyjs::hideElement(selector = "#rename_data") + shinyjs::hideElement(selector = "#rename") + shinyjs::hideElement(selector = "#reset_name") + shinyjs::hideElement(selector = "#rre_width") + shinyjs::hideElement(selector = "#biocircos_color") + shinyjs::hideElement(selector = "#label_color") + shinyjs::hideElement(selector = "#label_color_class") + shinyjs::hideElement(selector = "#ref_col_biocircos") + shinyjs::hideElement(selector = "#arts_header") + shinyjs::hideElement(selector = "#arts_width") + shinyjs::hideElement(selector = "#sempi_width") + shinyjs::hideElement(selector = "#prism_supp_data_input_width") } else{ - showElement(selector = "#rename_data") - showElement(selector = "#rename") - showElement(selector = "#reset_name") + shinyjs::showElement(selector = "#rename_data") + shinyjs::showElement(selector = "#rename") + shinyjs::showElement(selector = "#reset_name") if (vals$rre_data_input == T){ - showElement(selector = "#rre_width") + shinyjs::showElement(selector = "#rre_width") } else { - hideElement(selector = "#rre_width") + shinyjs::hideElement(selector = "#rre_width") } if (vals$sempi_data_input == T){ - showElement(selector = "#sempi_width") + shinyjs::showElement(selector = "#sempi_width") } else { - hideElement(selector = "#sempi_width") + shinyjs::hideElement(selector = "#sempi_width") } if (vals$prism_json == T){ - showElement(selector = "#prism_supp_data_input_width") + shinyjs::showElement(selector = "#prism_supp_data_input_width") } else { - hideElement(selector = "#prism_supp_data_input_width") + shinyjs::hideElement(selector = "#prism_supp_data_input_width") } if (vals$data_upload_count > 1){ - showElement(selector = "#biocircos_color") - showElement(selector = "#label_color") - showElement(selector = "#label_color_class") + shinyjs::showElement(selector = "#biocircos_color") + shinyjs::showElement(selector = "#label_color") + shinyjs::showElement(selector = "#label_color_class") } else { - hideElement(selector = "#biocircos_color") - hideElement(selector = "#label_color") - hideElement(selector = "#label_color_class") + shinyjs::hideElement(selector = "#biocircos_color") + shinyjs::hideElement(selector = "#label_color") + shinyjs::hideElement(selector = "#label_color_class") } if (input$label_color_class == "R"){ - showElement(selector = "#ref_col_biocircos") + shinyjs::showElement(selector = "#ref_col_biocircos") } else { - hideElement(selector = "#ref_col_biocircos") + shinyjs::hideElement(selector = "#ref_col_biocircos") } if (vals$arts_data_input == T){ - showElement(selector = "#arts_header") - showElement(selector = "#arts_width") + shinyjs::showElement(selector = "#arts_header") + shinyjs::showElement(selector = "#arts_width") } else { - hideElement(selector = "#arts_header") - hideElement(selector = "#arts_width") + shinyjs::hideElement(selector = "#arts_header") + shinyjs::hideElement(selector = "#arts_width") } } @@ -1931,89 +1930,89 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_data_comparison, { if ((input$hide_data_comparison == T)){ - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") + shinyjs::hideElement(selector = "#ref_comparison") + shinyjs::hideElement(selector = "#score_type") + shinyjs::hideElement(selector = "#plot_step") + shinyjs::hideElement(selector = "#plot_start") } else if (vals$deep_data_input == T) { - showElement(selector = "#ref_comparison") - showElement(selector = "#score_type") - showElement(selector = "#plot_step") - showElement(selector = "#plot_start") + shinyjs::showElement(selector = "#ref_comparison") + shinyjs::showElement(selector = "#score_type") + shinyjs::showElement(selector = "#plot_step") + shinyjs::showElement(selector = "#plot_start") } else { - hideElement(selector = "#ref_comparison") - hideElement(selector = "#score_type") - hideElement(selector = "#plot_step") - hideElement(selector = "#plot_start") + shinyjs::hideElement(selector = "#ref_comparison") + shinyjs::hideElement(selector = "#score_type") + shinyjs::hideElement(selector = "#plot_step") + shinyjs::hideElement(selector = "#plot_start") } }) # What to do, if hide DeepBGC filtering options scheme is triggered shiny::observeEvent(input$hide_data_filter, { if ((input$hide_data_filter == T)){ - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") + shinyjs::hideElement(selector = "#score_a") + shinyjs::hideElement(selector = "#score_d") + shinyjs::hideElement(selector = "#score_c") + shinyjs::hideElement(selector = "#domains_filter") + shinyjs::hideElement(selector = "#biodomain_filter") + shinyjs::hideElement(selector = "#gene_filter") + shinyjs::hideElement(selector = "#cluster_type") } else if (vals$deep_data_input == T){ - showElement(selector = "#score_a") - showElement(selector = "#score_d") - showElement(selector = "#score_c") - showElement(selector = "#domains_filter") - showElement(selector = "#biodomain_filter") - showElement(selector = "#gene_filter") - showElement(selector = "#cluster_type") + shinyjs::showElement(selector = "#score_a") + shinyjs::showElement(selector = "#score_d") + shinyjs::showElement(selector = "#score_c") + shinyjs::showElement(selector = "#domains_filter") + shinyjs::showElement(selector = "#biodomain_filter") + shinyjs::showElement(selector = "#gene_filter") + shinyjs::showElement(selector = "#cluster_type") } else { - hideElement(selector = "#score_a") - hideElement(selector = "#score_d") - hideElement(selector = "#score_c") - hideElement(selector = "#domains_filter") - hideElement(selector = "#biodomain_filter") - hideElement(selector = "#gene_filter") - hideElement(selector = "#cluster_type") + shinyjs::hideElement(selector = "#score_a") + shinyjs::hideElement(selector = "#score_d") + shinyjs::hideElement(selector = "#score_c") + shinyjs::hideElement(selector = "#domains_filter") + shinyjs::hideElement(selector = "#biodomain_filter") + shinyjs::hideElement(selector = "#gene_filter") + shinyjs::hideElement(selector = "#cluster_type") } }) # What to do, if hide GECCO comparison options scheme is triggered shiny::observeEvent(input$hide_data_comparison_gecco, { if ((input$hide_data_comparison_gecco == T)){ - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") + shinyjs::hideElement(selector = "#ref_comparison_gecco") + shinyjs::hideElement(selector = "#score_type_gecco") + shinyjs::hideElement(selector = "#plot_step_gecco") + shinyjs::hideElement(selector = "#plot_start_gecco") } else if (vals$gecco_data_input == T) { - showElement(selector = "#ref_comparison_gecco") - showElement(selector = "#score_type_gecco") - showElement(selector = "#plot_step_gecco") - showElement(selector = "#plot_start_gecco") + shinyjs::showElement(selector = "#ref_comparison_gecco") + shinyjs::showElement(selector = "#score_type_gecco") + shinyjs::showElement(selector = "#plot_step_gecco") + shinyjs::showElement(selector = "#plot_start_gecco") } else { - hideElement(selector = "#ref_comparison_gecco") - hideElement(selector = "#score_type_gecco") - hideElement(selector = "#plot_step_gecco") - hideElement(selector = "#plot_start_gecco") + shinyjs::hideElement(selector = "#ref_comparison_gecco") + shinyjs::hideElement(selector = "#score_type_gecco") + shinyjs::hideElement(selector = "#plot_step_gecco") + shinyjs::hideElement(selector = "#plot_start_gecco") } }) # What to do, if hide GECCO filtering options scheme is triggered shiny::observeEvent(input$hide_data_filter_gecco, { if ((input$hide_data_filter_gecco == T)){ - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") + shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#domains_filter_gecco") + shinyjs::hideElement(selector = "#prot_filter_gecco") } else if (vals$gecco_data_input == T){ - showElement(selector = "#score_average_gecco") - showElement(selector = "#score_average_gecco") - showElement(selector = "#domains_filter_gecco") - showElement(selector = "#prot_filter_gecco") + shinyjs::showElement(selector = "#score_average_gecco") + shinyjs::showElement(selector = "#score_average_gecco") + shinyjs::showElement(selector = "#domains_filter_gecco") + shinyjs::showElement(selector = "#prot_filter_gecco") } else { - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#score_average_gecco") - hideElement(selector = "#domains_filter_gecco") - hideElement(selector = "#prot_filter_gecco") + shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#domains_filter_gecco") + shinyjs::hideElement(selector = "#prot_filter_gecco") } }) From c456b4a974147800f00ea2099d4609f725b0e103 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:22:21 +0300 Subject: [PATCH 035/199] Removed rjson library() statement, made :: Former-commit-id: de75a05c0213fb27ab0a891a52422a36bfbb569b --- app.R | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app.R b/app.R index 154ba17..afa5772 100755 --- a/app.R +++ b/app.R @@ -8,7 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(rjson) library(stringr) library(GenomicRanges) # Define UI @@ -548,7 +547,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$prism_sco,{ # Read data - data <- fromJSON(file = "example_data/sco_prism.json") + data <- rjson::fromJSON(file = "example_data/sco_prism.json") processed_data <- process_prism_json_suppl(data) shiny::updateCheckboxInput(inputId = "prism_supp", value = T) prism_data <- processed_data[[1]] @@ -860,7 +859,7 @@ server <- function(input, output, session) { if (input$anti_input_options==T){ anti_data <- read.csv(input$anti_data$datapath) }else{ - data <- fromJSON(file = input$anti_data$datapath) + data <- rjson::fromJSON(file = input$anti_data$datapath) types <- sapply(data$records, function(y){ lapply(y$features, function(x){ if (unlist(x$type == 'region')){ @@ -1203,7 +1202,7 @@ server <- function(input, output, session) { if (input$prism_input_options == T){ prism_data <- read.csv(input$prism_data$datapath) } else{ - data <- fromJSON(file = input$prism_data$datapath) + data <- rjson::fromJSON(file = input$prism_data$datapath) processed_data <- process_prism_json_suppl(data) shiny::updateCheckboxInput(inputId = "prism_supp", value = T) prism_data <- processed_data[[1]] From 721b2a4c5d9868d1f3ed6ed959d799746791fe4b Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:29:36 +0300 Subject: [PATCH 036/199] Removed stringr library() statement, made :: Former-commit-id: 3c9f736aa23b2da603fa7601c973ee69aa512ca0 --- app.R | 76 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/app.R b/app.R index afa5772..fc34dae 100755 --- a/app.R +++ b/app.R @@ -8,8 +8,8 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(stringr) library(GenomicRanges) +library(magrittr) # Define UI ui <- shiny::fluidPage( @@ -244,7 +244,7 @@ server <- function(input, output, session) { types <- sapply(types, function(x){ if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) gsub(" ", "__", tmp) }else{ x @@ -375,7 +375,7 @@ server <- function(input, output, session) { } # Renaming the vector for inut$rename event rename_vector <- function(data, renamed_dataframe){ - type <- str_split(data$Type2, "__") + type <- stringr::str_split(data$Type2, "__") type_2 <- sapply(type, function(x){ sapply(x, function(y){ if (y %in% renamed_dataframe$Code){ @@ -452,8 +452,8 @@ server <- function(input, output, session) { # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) vals$anti_type <- anti_data$Type2 vals$anti_data <- anti_data # Save file @@ -500,11 +500,11 @@ server <- function(input, output, session) { # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability" , "other_probability" ) # Read data @@ -512,8 +512,8 @@ server <- function(input, output, session) { dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" names(gecco_data)[names(gecco_data) == "end"] <- "Stop" vals$gecco_data <- gecco_data @@ -565,8 +565,8 @@ server <- function(input, output, session) { choices = vals$choices$group_by ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_data <- prism_data vals$prism_type <- prism_data$Type2 @@ -611,7 +611,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$sempi_sco,{ sempi_data <- read.csv("example_data/sco_sempi.csv") - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data # Add chromosome info column @@ -658,9 +658,9 @@ server <- function(input, output, session) { data <- read.delim("example_data/sco_duptable.tsv") disable_event_logic() get_location_duptable <- function(x, y){ - test <- str_split(x, ";") + test <- stringr::str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") + test3 <- stringr::str_split(test2, " ") res <- list() for (i in seq(1:length(test3))){ id <- paste('hit',as.character(i), sep = "_") @@ -700,14 +700,14 @@ server <- function(input, output, session) { data <- read.delim("example_data/sco_knownhits.tsv") locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) + tail(stringr::str_split(x , "\\|")[[1]], 1) }) start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] + stringr::str_split(x, "_")[[1]][1] }) stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] + stringr::str_split(x, "_")[[1]][2] }) known_table <- data.frame(cbind(start, stop)) @@ -872,7 +872,7 @@ server <- function(input, output, session) { types <- sapply(types, function(x){ if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) gsub(" ", "__", tmp) }else{ x @@ -908,8 +908,8 @@ server <- function(input, output, session) { # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic - anti_data$Type <- str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- str_trim(tolower(anti_data$Type)) + anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) vals$anti_type <- anti_data$Type2 vals$anti_data <- anti_data # Save file @@ -950,7 +950,7 @@ server <- function(input, output, session) { sempi_data <- read.csv(input$sempi_data$datapath) - sempi_data['Type2'] <- str_trim(tolower(sempi_data$Type)) + sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data # Add chromosome info column @@ -999,11 +999,11 @@ server <- function(input, output, session) { # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- str_trim(tolower(gecco_data$type)) + gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- str_trim(tolower(gecco_data$Type)) + gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability" , "other_probability" ) # Read data @@ -1011,8 +1011,8 @@ server <- function(input, output, session) { dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( str_split(as.character(gecco_data$domains), ";"), length) + gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" names(gecco_data)[names(gecco_data) == "end"] <- "Stop" vals$gecco_data <- gecco_data @@ -1049,14 +1049,14 @@ server <- function(input, output, session) { data <- read.delim(input$known_data$datapath) locations <- sapply(data$Sequence.description, function(x){ - tail(str_split(x , "\\|")[[1]], 1) + tail(stringr::str_split(x , "\\|")[[1]], 1) }) start <- sapply(locations, function(x){ - str_split(x, "_")[[1]][1] + stringr::str_split(x, "_")[[1]][1] }) stop <- sapply(locations, function(x){ - str_split(x, "_")[[1]][2] + stringr::str_split(x, "_")[[1]][2] }) known_table <- data.frame(cbind(start, stop)) @@ -1120,9 +1120,9 @@ server <- function(input, output, session) { data <- read.delim(input$dup_data$datapath) get_location_duptable <- function(x, y){ - test <- str_split(x, ";") + test <- stringr::str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- str_split(test2, " ") + test3 <- stringr::str_split(test2, " ") res <- list() for (i in seq(1:length(test3))){ id <- paste('hit',as.character(i), sep = "_") @@ -1235,8 +1235,8 @@ server <- function(input, output, session) { choices = vals$choices$ref_comparison_gecco ) shiny::updateSelectInput(session, "ref_comparison", choices = vals$choices$ref_comparison ) - prism_data$Type <- str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- str_trim(tolower(prism_data$Type)) + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_data <- prism_data vals$prism_type <- prism_data$Type2 @@ -1592,7 +1592,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$anti_hybrid, { hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") + data_split <- stringr::str_split(data$Type2, "__") types <- sapply(data_split, function(x){ if (length(unlist(x))>1){ "hybrid" @@ -1613,7 +1613,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$prism_hybrid, { hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") + data_split <- stringr::str_split(data$Type2, "__") types <- sapply(data_split, function(x){ if (length(unlist(x))>1){ "hybrid" @@ -1633,7 +1633,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$sempi_hybrid, { hybrid_col <- function(data){ - data_split <- str_split(data$Type2, "__") + data_split <- stringr::str_split(data$Type2, "__") types <- sapply(data_split, function(x){ if (length(unlist(x))>1){ "hybrid" @@ -2202,7 +2202,7 @@ server <- function(input, output, session) { if (vals$arts_data_input == TRUE){ if (input$dup_choice != "All"){ vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - dplyr::filter(Core == str_split(str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") if (vals$data_upload_count!=1){ new_arts <- lapply(inters$arts, function(x){ new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] @@ -3311,8 +3311,8 @@ server <- function(input, output, session) { refine_unique <- function(data){ n <- tail(data, n=1) data <- head(data, -1) - n_list <- str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(str_split(data, ","))}) + n_list <- stringr::str_split(n, ",") + out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) res <- sapply(out, function(x){ if (x==F){ x From d2a429a9ddb10138f976383f3b09f8bae596f93e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 7 Oct 2021 22:35:31 +0300 Subject: [PATCH 037/199] Removed GenomicRanges library() statement, made :: Former-commit-id: f6049c218eaae9de44d06fa5c58f99bc0b1e8441 --- app.R | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index fc34dae..a116072 100755 --- a/app.R +++ b/app.R @@ -8,7 +8,6 @@ # GECCO, ARTS, SEMPI to visualized interception of those different annotations # in one genome # -library(GenomicRanges) library(magrittr) # Define UI ui <- shiny::fluidPage( @@ -2096,9 +2095,9 @@ server <- function(input, output, session) { } get_inter <- function(inter1, inter2){ - query <- makeGRangesFromDataFrame(inter2) - subject <- makeGRangesFromDataFrame(inter1) - interseption <- findOverlaps(query,subject) + query <- GenomicRanges::makeGRangesFromDataFrame(inter2) + subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) + interseption <- GenomicRanges::findOverlaps(query,subject) inter_from <- interseption@from inter_to <- interseption@to return(list(from = inter_from, to = inter_to)) @@ -2545,9 +2544,9 @@ server <- function(input, output, session) { # Get the interception of two matrices if (length(deep_inter$Start) > 0) { - query <- makeGRangesFromDataFrame(deep_inter) - subject <- makeGRangesFromDataFrame(anti_inter) - interseption <- findOverlaps(query,subject) + query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) inter_bgc <- length(interseption@from) len_new <- length(deep_inter$seqnames) - inter_bgc } else { @@ -2704,9 +2703,9 @@ server <- function(input, output, session) { # Get the interception of two matrices if (length(gecco_inter$Start) > 0) { - query <- makeGRangesFromDataFrame(gecco_inter) - subject <- makeGRangesFromDataFrame(anti_inter) - interseption <- findOverlaps(query,subject) + query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) inter_bgc <- length(interseption@from) len_new <- length(gecco_inter$seqnames) - inter_bgc } else { From d29e6b8a802b577ac8c4ec087650bddcea411622 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 8 Oct 2021 10:13:04 +0300 Subject: [PATCH 038/199] data_uploads and similar lists used for iteration in app made global Former-commit-id: 82a08d3a04827be1ccf1418e001cdd65e6783593 --- app.R | 112 ++++++++++++++++++++++++---------------------------------- 1 file changed, 46 insertions(+), 66 deletions(-) diff --git a/app.R b/app.R index a116072..998ef89 100755 --- a/app.R +++ b/app.R @@ -207,6 +207,23 @@ server <- function(input, output, session) { anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) vals$rename_data <- read.csv("rename.csv") + # Variables, that holds data uploads boolean (so if data is present or not) + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + # Universal beginings for variables, used in the app for different data + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + # The Namings, meaning how to label the data on the plots + soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') + # Dataframes undes vals$list, that stored the data + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + # Used for software coding. Then just map to the soft namings + soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") + # Used in barplot on summarise tab + Annotation on chromosome plots + abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") + # Used for deep reference 2 plot + soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", + "seg_df_ref_g", "seg_df_ref_r") + ##---------------------------------------------------------------- ## Helper functions - ##---------------------------------------------------------------- @@ -555,8 +572,8 @@ server <- function(input, output, session) { vals$prism_supp_data <- processed_data[[2]] vals$prism_json = T - vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) @@ -1209,8 +1226,8 @@ server <- function(input, output, session) { vals$prism_supp_data_input = T vals$prism_supp_data <- processed_data[[2]] vals$prism_json = T - vals$choices$ref <- c(vals$choices$ref, "PRISM-supp" = "PRISM-supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-supp" = "PS") + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) @@ -2104,11 +2121,6 @@ server <- function(input, output, session) { } inters <- vals$inters - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - - index = 1 for (i in data_uploads){ index_2 = 1 @@ -2281,17 +2293,13 @@ server <- function(input, output, session) { rename_data <- vals$rename_data - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + index <- 1 # browser() for (upload in data_uploads){ if (vals[[upload]] == T){ # Store data in local variable - init_data <- initialize_biocircos(vals[[data_to_use[index]]], soft[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ) + init_data <- initialize_biocircos(vals[[data_to_use[index]]], soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ) #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes <- init_data[[1]] #Add arcs. Quantity of arcs is length of dataframes @@ -2415,7 +2423,7 @@ server <- function(input, output, session) { link_pos_end_2, label_1, label_2, label_color)) } data_uploads_2 <- data_uploads - soft_2 <- soft + soft_2 <- soft_namings soft_names_2 <- soft_names data_to_use_2 <- data_to_use index <- 1 @@ -2427,8 +2435,8 @@ server <- function(input, output, session) { index2 <- 1 if (vals[[upload]] == T){ for (upload2 in data_uploads_2){ - if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft[index] != soft_2[index2])){ - output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft[index], rename_data, input$label_color_class) + if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ + output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class) chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2819,34 +2827,23 @@ server <- function(input, output, session) { shiny::req(vals$can_plot_deep_ref == T) shiny::req(vals$data_upload_count >=1) - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft <- c("Antismash","SEMPI","PRISM","PRISM_SUPPORT","ARTS","DeepBGC","GECCO","RRE-Finder" ) - abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") - soft_ref <- c("Antismash","SEMPI","PRISM","PRISM-supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - soft_width <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" , - "gecco_data_filtered", "rre_data") - soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r") - + inters <- vals$inters_filtered # GENERATE DATA index <- 1 for (upload in data_uploads){ if (vals[[upload]] == T){ data<- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_width[index])) + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index])) } index <- index +1 } lett <- rev(LETTERS)[1:9] - simple_seg <- function(df, letter, software, soft_name ,soft, inter=T){ + simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T){ if (inter== T){ - data <- df[df$Cluster %in% inters[[soft]][[soft_name]]$from, ] + data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] } else{ data <- df } @@ -2913,14 +2910,14 @@ server <- function(input, output, session) { "Num_domains", "Num_proteins", "Average_p", "Max_p") - add_sempi <- function(seg_df, soft, df, inter = T){ + add_sempi <- function(seg_df, soft_namings, df, inter = T){ return(seg_df) } - add_arts <- function(seg_df, soft, df, inter=T){ + add_arts <- function(seg_df, soft_namings, df, inter=T){ if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft]]$arts$from, ] + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] }else{ subset_df <- df } @@ -2933,9 +2930,9 @@ server <- function(input, output, session) { seg_df$Model = subset_df$Model return(seg_df) } - add_prism_supp <- function(seg_df, soft, df, inter=T){ + add_prism_supp <- function(seg_df, soft_namings, df, inter=T){ if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft]]$prism_supp$from, ] + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] }else{ subset_df <- df } @@ -2945,9 +2942,9 @@ server <- function(input, output, session) { seg_df$Full_name = subset_df$Full_name return(seg_df) } - add_deep <- function(seg_df, soft, df, inter=T){ + add_deep <- function(seg_df, soft_namings, df, inter=T){ if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft]]$deep$from, ] + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] }else{ subset_df <- df } @@ -2956,9 +2953,9 @@ server <- function(input, output, session) { seg_df$activity = subset_df$product_activity return(seg_df) } - add_rre <- function(seg_df, soft, df, inter=T){ + add_rre <- function(seg_df, soft_namings, df, inter=T){ if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft]]$rre$from, ] + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] }else{ subset_df <- df } @@ -2978,9 +2975,9 @@ server <- function(input, output, session) { return(seg_df) } - add_gecco <- function(seg_df, soft, df, inter=T){ + add_gecco <- function(seg_df, soft_namings, df, inter=T){ if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft]]$gecco$from, ] + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] }else{ subset_df <- df } @@ -3046,7 +3043,7 @@ server <- function(input, output, session) { soft_lttrs <- lett rename_y_axis <- vals$rename_y_axis rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ - soft_lttrs[x]=soft[x] + soft_lttrs[x]=soft_namings[x] }) names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] for (upload in data_uploads){ @@ -3054,10 +3051,10 @@ server <- function(input, output, session) { soft_lttrs <- soft_lttrs[-1] if (vals[[upload]] == T){ soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft[sup_index], soft_names[sup_index],soft_major, inter = F) + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F) seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) seg_ref <- seg_ref_g - if (input$ref == soft_ref[sup_index]){ + if (input$ref == soft_namings[sup_index]){ plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) soft_let <- abbr[sup_index] @@ -3067,7 +3064,7 @@ server <- function(input, output, session) { for (i in data_uploads){ if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft[index], soft_names[index],soft_major) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major) seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) plot <- add_more_annot(seg_df, plot, soft_names, index) @@ -3112,10 +3109,6 @@ server <- function(input, output, session) { shiny::req(vals$data_upload_count >=1) rename_y_axis <- vals$rename_y_axis data <- NULL - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" , - "gecco_data_filtered", "rre_data") index <- 1 for (upload in data_uploads){ @@ -3253,13 +3246,6 @@ server <- function(input, output, session) { gecco_count <- NULL inters <- vals$inters_filtered - - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft <- c("Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder" ) - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data","deep_data_filtered" ,"gecco_data_filtered", "rre_data") - abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") index <- 1 ranking_data <- NULL for (upload in data_uploads){ @@ -3270,7 +3256,7 @@ server <- function(input, output, session) { # Add prefices to the ID to plot for a barplot. counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) # Add label column to the dataframe, from which we will plot - counts_var$label <- rep(soft[index], length(counts_var$x)) + counts_var$label <- rep(soft_namings[index], length(counts_var$x)) # Add type to the dataframe, from which we would plot (from annotation dataframe) counts_var$Type <- anot_var$Type # Add Start positions (to visualize on hover) @@ -3322,12 +3308,6 @@ server <- function(input, output, session) { } inters <- vals$inters_filtered - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") - soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') - df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) colnames(df_test) <- soft_let added_inters <- c(soft_names[match(input$group_by, soft_let)]) From 3c66486256e99f3d5c30de27a2cd9808a3364e7c Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 8 Oct 2021 13:11:21 +0300 Subject: [PATCH 039/199] GECCO ref comparison have full text description, not letter coding. update_ui_with_data is introduced Former-commit-id: da4c4beaea2d93e2bde2f648e5586c482bfb26e1 --- app.R | 228 ++++++++++++++++++---------------------------------------- 1 file changed, 69 insertions(+), 159 deletions(-) diff --git a/app.R b/app.R index 998ef89..5c766e0 100755 --- a/app.R +++ b/app.R @@ -459,6 +459,12 @@ server <- function(input, output, session) { ########################################################################### # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! + # Reading functions: + read_antismash <- function(file){ + + } + + #---------------------------------------------------------------- ## Loading and processing of example data - ##---------------------------------------------------------------- @@ -479,18 +485,9 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -502,7 +499,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "A") + selected = "Antismash") } @@ -541,12 +538,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -563,24 +555,19 @@ server <- function(input, output, session) { shiny::observeEvent(input$prism_sco,{ # Read data - data <- rjson::fromJSON(file = "example_data/sco_prism.json") - processed_data <- process_prism_json_suppl(data) - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - prism_data <- processed_data[[1]] - vals$prism_supp_data_input = T - vals$prism_supp <- processed_data[[2]] - vals$prism_supp_data <- processed_data[[2]] - vals$prism_json = T - - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + data <- rjson::fromJSON(file = "example_data/sco_prism.json") + processed_data <- process_prism_json_suppl(data) + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + prism_data <- processed_data[[1]] + vals$prism_supp_data_input = T + vals$prism_supp <- processed_data[[2]] + vals$prism_supp_data <- processed_data[[2]] + vals$prism_json = T + + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_data <- prism_data @@ -597,18 +584,9 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -620,7 +598,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "P") + selected = "PRISM") } }) @@ -641,18 +619,9 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -664,7 +633,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "S") + selected = "SEMPI") } }) @@ -763,12 +732,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "ARTS" ) @@ -799,12 +763,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -841,12 +800,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -935,18 +889,9 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "A") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "Antismash" ) @@ -957,7 +902,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "A") + selected = "Antismash") } }) @@ -980,18 +925,9 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "S") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -1003,7 +939,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "S") + selected = "SEMPI") } }) @@ -1040,12 +976,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -1098,12 +1029,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() dup_table <- vals$dup_data known_table <- vals$known_data arts_data <- rbind(dup_table, known_table) @@ -1180,12 +1106,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() dup_table <- vals$dup_data known_table <- vals$known_data arts_data <- rbind(dup_table, known_table) @@ -1229,28 +1150,14 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() } vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "P") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) + update_ui_with_data() prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_data <- prism_data @@ -1275,7 +1182,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "P") + selected = "PRISM") } }) @@ -1299,12 +1206,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -1340,12 +1242,7 @@ server <- function(input, output, session) { vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", @@ -1371,6 +1268,19 @@ server <- function(input, output, session) { ### ### ############################################################################ ############################################################################ + # Update choices + update_ui_with_data <- function(){ + shiny::updateSelectInput(session, "ref", + choices = vals$choices$ref ) + shiny::updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + shiny::updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + shiny::updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + shiny::updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + } # Observe input of chromosome length shiny::observeEvent(input$chr_len,{ @@ -2692,15 +2602,15 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == 'A'){ + if (input$ref_comparison_gecco == 'Antismash'){ anti_inter <- vals$anti_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'P'){ + } else if (input$ref_comparison_gecco == 'PRISM'){ anti_inter <- vals$prism_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'S'){ + } else if (input$ref_comparison_gecco == 'SEMPI'){ anti_inter <- vals$sempi_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" @@ -2722,15 +2632,15 @@ server <- function(input, output, session) { } - if (input$ref_comparison_gecco == 'A'){ + if (input$ref_comparison_gecco == 'Antismash'){ used_antismash <- length(vals$anti_data$Cluster)-inter_bgc cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'P'){ + } else if (input$ref_comparison_gecco == 'PRISM'){ used_antismash <- length(vals$prism_data$Cluster)-inter_bgc cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'S') { + } else if (input$ref_comparison_gecco == 'SEMPI') { used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") @@ -2774,7 +2684,7 @@ server <- function(input, output, session) { # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == 'A'){ + if (input$ref_comparison_gecco == 'Antismash'){ data <- vals$anti_data title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") test <- test %>% @@ -2784,7 +2694,7 @@ server <- function(input, output, session) { Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'P'){ + } else if (input$ref_comparison_gecco == 'PRISM'){ data <- vals$prism_data title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") test <- test %>% @@ -2793,7 +2703,7 @@ server <- function(input, output, session) { Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'S'){ + } else if (input$ref_comparison_gecco == 'SEMPI'){ data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") test <- test %>% From 27bfd3b2a4aa1d9f69fb6dcab057f7b7fdd8bfe5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 8 Oct 2021 14:12:41 +0300 Subject: [PATCH 040/199] Created reading functions for every type of input Former-commit-id: 1797cfda5dfeda81c98e67e8f91501bfc7d1e1ac --- app.R | 657 ++++++++++++++++++---------------------------------------- 1 file changed, 198 insertions(+), 459 deletions(-) diff --git a/app.R b/app.R index 5c766e0..6026149 100755 --- a/app.R +++ b/app.R @@ -460,17 +460,8 @@ server <- function(input, output, session) { # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - read_antismash <- function(file){ - - } - - - #---------------------------------------------------------------- - ## Loading and processing of example data - - ##---------------------------------------------------------------- - shiny::observeEvent(input$anti_sco,{ - - anti_data <- read.csv("example_data/sco_antismash.csv") + read_antismash <- function(data){ + anti_data <- data # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic @@ -491,24 +482,22 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "Antismash" ) + selected = "Antismash" ) shiny::updateSelectInput(session, "group_by", - selected = "A" ) + selected = "A" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "A") + selected = "A") shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") + selected = "Antismash") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "Antismash") - + selected = "Antismash") + } - - }) - - shiny::observeEvent(input$gecco_sco,{ - - gecco_data <- read.delim("example_data/sco_gecco.tsv") + return(anti_data) + } + read_gecco <- function(data){ # Add chromosome column + gecco_data <- data gecco_data$chromosome <- rep("G", length(gecco_data$type)) # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) @@ -523,7 +512,7 @@ server <- function(input, output, session) { # Read data gecco_data <- gecco_data %>% dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% dplyr::select(-dplyr::one_of(drop_cols)) gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) @@ -542,27 +531,24 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "GECCO" ) + selected = "GECCO" ) shiny::updateSelectInput(session, "group_by", - selected = "G") + selected = "G") shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") + selected = "GECCO") } - - }) - - shiny::observeEvent(input$prism_sco,{ - # Read data - - data <- rjson::fromJSON(file = "example_data/sco_prism.json") - processed_data <- process_prism_json_suppl(data) - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - prism_data <- processed_data[[1]] - vals$prism_supp_data_input = T - vals$prism_supp <- processed_data[[2]] - vals$prism_supp_data <- processed_data[[2]] - vals$prism_json = T + } + read_prism <- function(data, json=T){ + if (json==T){ + processed_data <- process_prism_json_suppl(data) + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + prism_data <- processed_data[[1]] + vals$prism_supp_data_input = T + vals$prism_supp <- processed_data[[2]] + vals$prism_supp_data <- processed_data[[2]] + vals$prism_json = T + } vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") @@ -590,21 +576,19 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "PRISM" ) + selected = "PRISM" ) shiny::updateSelectInput(session, "group_by", - selected = "P" ) + selected = "P" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "P") + selected = "P") shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") + selected = "PRISM") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "PRISM") + selected = "PRISM") } - }) - - shiny::observeEvent(input$sempi_sco,{ - - sempi_data <- read.csv("example_data/sco_sempi.csv") + } + read_sempi <- function(data){ + sempi_data <- data sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data @@ -625,23 +609,80 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "SEMPI" ) + selected = "SEMPI" ) shiny::updateSelectInput(session, "group_by", - selected = "S" ) + selected = "S" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "S") + selected = "S") shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") + selected = "SEMPI") shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "SEMPI") + selected = "SEMPI") } + } + read_arts_knownhits <- function(data){ + locations <- sapply(data$Sequence.description, function(x){ + tail(stringr::str_split(x , "\\|")[[1]], 1) + }) - }) - - shiny::observeEvent(input$arts_sco, { + start <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][2] + }) - data <- read.delim("example_data/sco_duptable.tsv") - disable_event_logic() + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + write.csv(vals$known_data, "knownhits_data.csv", row.names = F) + if ((vals$dup_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + dup_table_id <- arts_data %>% + dplyr::filter(Core != "Not_core") + shiny::updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "ARTS" ) + shiny::updateSelectInput(session, "group_by", + selected = "AR" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + + } + read_arts_dupdata <- function(data){ get_location_duptable <- function(x, y){ test <- stringr::str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) @@ -682,37 +723,12 @@ server <- function(input, output, session) { dup_table$Model <- "Core" vals$dup_data <- dup_table vals$dup_data_input = T - - data <- read.delim("example_data/sco_knownhits.tsv") - locations <- sapply(data$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE + write.csv(dup_table, "duptable_data.csv", row.names = F) + if ((vals$known_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() dup_table <- vals$dup_data known_table <- vals$known_data arts_data <- rbind(dup_table, known_table) @@ -720,38 +736,33 @@ server <- function(input, output, session) { dplyr::arrange(Start) arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data + vals$arts_data <- arts_data vals$data_upload_count <- vals$data_upload_count +1 vals$arts_data_input <- T dup_table_id <- arts_data %>% dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) + selected = "ARTS" ) shiny::updateSelectInput(session, "group_by", - selected = "AR" ) + selected = "AR" ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") + selected = "ARTS") } - }) - - shiny::observeEvent(input$deep_sco, { - + } + } + read_deep <- function(data){ drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") # Read data - vals$deep_data <- read.delim("example_data/sco_deep.tsv") %>% + deep_data <- data %>% dplyr::mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% dplyr::select(-dplyr::one_of(drop_cols)) # Add chromosome info column + vals$deep_data <- deep_data vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) # Add ID column as number seuquence of dataframe length vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) @@ -767,22 +778,18 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "DeepBGC" ) + selected = "DeepBGC" ) shiny::updateSelectInput(session, "group_by", - selected = "D" ) + selected = "D" ) shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") + choices = "DeepBGC", + selected = "DeepBGC") } - }) - - shiny::observeEvent(input$rre_sco, { - - # Read data - vals$rre_data <- read.delim("example_data/sco_rre.txt") + } + read_rre <- function(data){ # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% + vals$rre_data <- data %>% tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") # Add chromosome info column @@ -804,12 +811,12 @@ server <- function(input, output, session) { disable_event_logic() if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", - selected = "RRE-Finder" ) + selected = "RRE-Finder" ) shiny::updateSelectInput(session, "group_by", - selected = "R" ) + selected = "R" ) shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") + choices = "RRE-Finder", + selected = "RRE") } if (!is.null(vals$rre_data$Probability)){ @@ -817,6 +824,62 @@ server <- function(input, output, session) { } else { vals$rre_more = F } + } + + #---------------------------------------------------------------- + ## Loading and processing of example data - + ##---------------------------------------------------------------- + shiny::observeEvent(input$anti_sco,{ + + anti_data <- read.csv("example_data/sco_antismash.csv") + anti_data <- read_antismash(anti_data) + + }) + + shiny::observeEvent(input$gecco_sco,{ + + gecco_data <- read.delim("example_data/sco_gecco.tsv") + read_gecco(gecco_data) + + }) + + shiny::observeEvent(input$prism_sco,{ + # Read data + + data <- rjson::fromJSON(file = "example_data/sco_prism.json") + read_prism(data) + + }) + + shiny::observeEvent(input$sempi_sco,{ + + sempi_data <- read.csv("example_data/sco_sempi.csv") + read_sempi(sempi_data) + + }) + + shiny::observeEvent(input$arts_sco, { + + data <- read.delim("example_data/sco_duptable.tsv") + disable_event_logic() + read_arts_dupdata(data) + + data <- read.delim("example_data/sco_knownhits.tsv") + read_arts_knownhits(data) + }) + + shiny::observeEvent(input$deep_sco, { + + data <- read.delim("example_data/sco_deep.tsv") + read_deep(data) + }) + + shiny::observeEvent(input$rre_sco, { + + # Read data + data <- read.delim("example_data/sco_rre.txt") + read_rre(data) + }) ##---------------------------------------------------------------- @@ -875,35 +938,7 @@ server <- function(input, output, session) { } - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") - vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") - update_ui_with_data() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "Antismash" ) - shiny::updateSelectInput(session, "group_by", - selected = "A" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "A") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "Antismash") - } + read_antismash(anti_data) }) @@ -911,81 +946,14 @@ server <- function(input, output, session) { sempi_data <- read.csv(input$sempi_data$datapath) - sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") - vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "SEMPI" ) - shiny::updateSelectInput(session, "group_by", - selected = "S" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "S") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "SEMPI") - } + read_sempi(sempi_data) }) shiny::observeEvent(input$gecco_data,{ gecco_data <- read.delim(input$gecco_data$datapath) - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) - # Read data - gecco_data <- gecco_data %>% - dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" - vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco() - # Save file - write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) - vals$gecco_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") - vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "GECCO" ) - shiny::updateSelectInput(session, "group_by", - selected = "G") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") - } + read_gecco(gecco_data) }) @@ -995,65 +963,7 @@ server <- function(input, output, session) { disable_event_logic() data <- read.delim(input$known_data$datapath) - locations <- sapply(data$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - write.csv(vals$known_data, "knownhits_data.csv", row.names = F) - if ((vals$dup_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", - selected = "AR" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } + read_arts_knownhits(data) }) shiny::observeEvent(input$dup_data, { @@ -1061,76 +971,7 @@ server <- function(input, output, session) { data <- read.delim(input$dup_data$datapath) - get_location_duptable <- function(x, y){ - test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - write.csv(dup_table, "duptable_data.csv", row.names = F) - if ((vals$known_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", - selected = "AR" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } + read_arts_dupdata(data) }) shiny::observeEvent(input$prism_data,{ @@ -1138,127 +979,25 @@ server <- function(input, output, session) { # Read data if (input$prism_input_options == T){ prism_data <- read.csv(input$prism_data$datapath) + read_prism(prism_data, json=F) } else{ data <- rjson::fromJSON(file = input$prism_data$datapath) - processed_data <- process_prism_json_suppl(data) - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - prism_data <- processed_data[[1]] - vals$prism_supp <- processed_data[[2]] - vals$prism_supp_data_input = T - vals$prism_supp_data <- processed_data[[2]] - vals$prism_json = T - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - update_ui_with_data() + read_prism(data) } - vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") - update_ui_with_data() - prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism_data$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "PRISM" ) - shiny::updateSelectInput(session, "group_by", - selected = "P" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "P") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "PRISM") - } }) shiny::observeEvent(input$deep_data, { - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") - # Read data - vals$deep_data <- read.delim(input$deep_data$datapath) %>% - dplyr::mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - # Add chromosome info column - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$deep_data_filtered <- filter_deepbgc() - vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") - vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "DeepBGC" ) - shiny::updateSelectInput(session, "group_by", - selected = "D" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } + data <- read.delim(input$deep_data$datapath) + read_deep(data) }) shiny::observeEvent(input$rre_data, { # Read data - vals$rre_data <- read.delim(input$rre_data$datapath) - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- vals$rre_data %>% - tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - vals$rre_data['Type2'] <- 'ripp' - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") - vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - shiny::updateSelectInput(session, "group_by", - selected = "R" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } + rre_data <- read.delim(input$rre_data$datapath) + read_rre(rre_data) }) ############################################################################ From 9aaa17b86faecbebf6670517e94a97314d4d3445 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 09:26:34 +0300 Subject: [PATCH 041/199] Fixed RRE data loading and visualization bug Former-commit-id: fdaced9b38457bdc9e38b354092795b099728dd9 --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index 6026149..0e8c793 100755 --- a/app.R +++ b/app.R @@ -213,7 +213,7 @@ server <- function(input, output, session) { # Universal beginings for variables, used in the app for different data soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) # The Namings, meaning how to label the data on the plots - soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE_Finder') + soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE-Finder') # Dataframes undes vals$list, that stored the data data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") # Used for software coding. Then just map to the soft namings From 7cde51d8e2649e5eb6d5d0648bd0e33346ff2d35 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 10:34:27 +0300 Subject: [PATCH 042/199] Fixed duplicates function now is fixing duplicates. This solved PRISM json upload bug Former-commit-id: 69a6ceec90dbe6cb04c41e5041f9cb77dfbb4e30 --- app.R | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/app.R b/app.R index 0e8c793..600ce39 100755 --- a/app.R +++ b/app.R @@ -243,13 +243,38 @@ server <- function(input, output, session) { is.integer(x) && length(x) == 0L } # Fix the duplicates in PRISM-Supp data. Therefore 1 row for 1 orf - fix_duplicates <- function(test_score, order_vec, regul_genes_orfs){ + fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) test_score <- test_score[order_vec] to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] - test_score[duplicated_values-1] <- paste(test_score[duplicated_values-1] , to_add, sep="/") + iterate_one_more_time <- c() + should_iterate = F + for (i in seq(1:length(test_name))){ + if (test_name[i]==dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + iterate_one_more_time <- c(iterate_one_more_time, i) + } + } + if (length(iterate_one_more_time)>1){ + should_iterate = T + } + while (should_iterate == T) { + for (i in iterate_one_more_time){ + if (test_name[i] == dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + } + if (length(dupl_names)==0){ + should_iterate = F + break + } + } + } return(test_score) } # PRISM JSON data processing @@ -299,21 +324,22 @@ server <- function(input, output, session) { reg_genes$Type2 <- reg_genes$Type test_name <- names[names %in% regul_genes_orfs] + ref_names <- test_name order_vec <- order(match(regul_genes_orfs, test_name)) test_score <- sapply(data$prism_results$regulatory_genes, function(x){ x$score }) - reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs) + reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) test_name <- sapply(data$prism_results$regulatory_genes, function(x){ x$name }) - reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs) + reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ x$full_name }) - reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs) + reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ x$orf }) @@ -333,15 +359,15 @@ server <- function(input, output, session) { test_score <- sapply(data$prism_results$resistance_genes, function(x){ x$score }) - res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs) + res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) test_name <- sapply(data$prism_results$resistance_genes, function(x){ x$name }) - res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs) + res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ x$full_name }) - res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs) + res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) final_reg <- rbind(res_genes, reg_genes) final_reg$ID <- seq(1:dim(final_reg)[1]) From 35ba462418f69502a5414f83b836325a18ee7a99 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 10:46:01 +0300 Subject: [PATCH 043/199] Fixed duplicates function one more time. Works as expected Former-commit-id: b7140f11c54cfd0314808e341d18445062978d1d --- app.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index 600ce39..4b04114 100755 --- a/app.R +++ b/app.R @@ -252,6 +252,10 @@ server <- function(input, output, session) { iterate_one_more_time <- c() should_iterate = F for (i in seq(1:length(test_name))){ + if (length(dupl_names) == 0){ + should_iterate = F + break + } if (test_name[i]==dupl_names[1]){ dupl_names = dupl_names[-1] test_score[i] = paste0(test_score[i], "/" ,to_add[1]) @@ -259,7 +263,7 @@ server <- function(input, output, session) { iterate_one_more_time <- c(iterate_one_more_time, i) } } - if (length(iterate_one_more_time)>1){ + if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ should_iterate = T } while (should_iterate == T) { From 44f4ca0563980d6e6b3846720ba81c7121669673 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 10:57:40 +0300 Subject: [PATCH 044/199] Added accept value to fileInput fields Former-commit-id: 39b9427b18d7780a11e7ebe4ea597c8606f19711 --- app.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app.R b/app.R index 4b04114..6f9f1d0 100755 --- a/app.R +++ b/app.R @@ -27,24 +27,24 @@ ui <- shiny::fluidPage( shiny::h5(id = "anti_header_upload","ANTISMASH:"), shiny::checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), shiny::fileInput("anti_data", - "Upload Antismash data"), + "Upload Antismash data", accept = ".csv"), shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), shiny::h5(id = "prism_header_upload","PRISM:"), shiny::checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), shiny::fileInput("prism_data", - "Upload PRISM data"), + "Upload PRISM data", accept = ".csv"), shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), shiny::h5(id = "sempi_header_upload","SEMPI:"), shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data"), + "Upload SEMPI 2.0 data", accept = ".csv"), shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), shiny::h5(id = "deep_header_upload","DEEPBGC:"), shiny::fileInput("deep_data", - "Upload DeepBGC data"), + "Upload DeepBGC data", accept = ".tsv"), shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), shiny::h5(id = "gecco_header_upload","GECCO:"), shiny::fileInput("gecco_data", - "Upload Gecco data"), + "Upload Gecco data", accept = ".tsv"), shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), shiny::h5(id = "rre_header_upload","RRE-FINDER:"), shiny::fileInput("rre_data", @@ -52,9 +52,9 @@ ui <- shiny::fluidPage( shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), shiny::h5(id = "arts_header_upload","ARTS:"), shiny::fileInput("known_data", - "Upload ARTS knownhits data"), + "Upload ARTS knownhits data", accept = ".csv"), shiny::fileInput("dup_data", - "Upload ARTS duptable data"), + "Upload ARTS duptable data", accept = ".csv"), shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), # Numeric input of chromosome length of analyzed sequence shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000), @@ -81,7 +81,7 @@ ui <- shiny::fluidPage( shiny::h3("Improve visualization:"), shiny::checkboxInput("hide_viz", "Hide improve visualization options"), shiny::fileInput("rename_data", - "Upload renaming and coloring scheme"), + "Upload renaming and coloring scheme", accept = ".csv"), shiny::actionButton("rename", "Rename"), shiny::actionButton("reset_name", "Reset"), shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), From 78bc72ea709c8c2297c51b228968934c7d1ea518 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 11:08:35 +0300 Subject: [PATCH 045/199] Accept value now gathers json file for prism and antismash Former-commit-id: 1a61fcc91b43addb093946e6ebc7b951d8efc482 --- app.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.R b/app.R index 6f9f1d0..d5d326d 100755 --- a/app.R +++ b/app.R @@ -27,12 +27,12 @@ ui <- shiny::fluidPage( shiny::h5(id = "anti_header_upload","ANTISMASH:"), shiny::checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), shiny::fileInput("anti_data", - "Upload Antismash data", accept = ".csv"), + "Upload Antismash data", accept = list(".csv", ".json")), shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), shiny::h5(id = "prism_header_upload","PRISM:"), shiny::checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), shiny::fileInput("prism_data", - "Upload PRISM data", accept = ".csv"), + "Upload PRISM data", accept = list(".csv", ".json")), shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), shiny::h5(id = "sempi_header_upload","SEMPI:"), shiny::fileInput("sempi_data", From 9479e08e37e6fdf0c6e6f1c922504bded89aff7f Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 11:16:06 +0300 Subject: [PATCH 046/199] Added MIME type detection for antismash and prism data Former-commit-id: a0b7cee28f758d3534a3934398d3824f2a2a8a22 --- app.R | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/app.R b/app.R index d5d326d..2742398 100755 --- a/app.R +++ b/app.R @@ -25,12 +25,10 @@ ui <- shiny::fluidPage( shiny::h3("Data upload and necesary input:"), shiny::checkboxInput("hide_uploads", "Hide upload fields"), shiny::h5(id = "anti_header_upload","ANTISMASH:"), - shiny::checkboxInput("anti_input_options", "My AntiSMASH data is a dataframe, not json results file from antismash", value = T), shiny::fileInput("anti_data", "Upload Antismash data", accept = list(".csv", ".json")), shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), shiny::h5(id = "prism_header_upload","PRISM:"), - shiny::checkboxInput("prism_input_options", "My PRISM data is a dataframe, not json results file", value = T), shiny::fileInput("prism_data", "Upload PRISM data", accept = list(".csv", ".json")), shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), @@ -919,7 +917,7 @@ server <- function(input, output, session) { disable_event_logic() # Read data - if (input$anti_input_options==T){ + if (input$anti_data$type=="text/csv"){ anti_data <- read.csv(input$anti_data$datapath) }else{ data <- rjson::fromJSON(file = input$anti_data$datapath) @@ -1007,7 +1005,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$prism_data,{ # Read data - if (input$prism_input_options == T){ + if (input$prism_data$type == "text/csv"){ prism_data <- read.csv(input$prism_data$datapath) read_prism(prism_data, json=F) } else{ @@ -1427,9 +1425,7 @@ server <- function(input, output, session) { shiny::observeEvent(input$hide_uploads, { if (input$hide_uploads == T){ - shinyjs::hideElement(selector = "#anti_input_options") shinyjs::hideElement(selector = "#anti_data") - shinyjs::hideElement(selector = "#prism_input_options") shinyjs::hideElement(selector = "#anti_header_upload") shinyjs::hideElement(selector = "#prism_header_upload") shinyjs::hideElement(selector = "#prism_data") @@ -1453,9 +1449,7 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#deep_sco") shinyjs::hideElement(selector = "#gecco_sco") }else { - shinyjs::showElement(selector = "#anti_input_options") shinyjs::showElement(selector = "#anti_data") - shinyjs::showElement(selector = "#prism_input_options") shinyjs::showElement(selector = "#anti_header_upload") shinyjs::showElement(selector = "#prism_header_upload") shinyjs::showElement(selector = "#prism_data") From 673e9249dd37ffca5163101ffb17a502837a224e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 11:22:55 +0300 Subject: [PATCH 047/199] Add Start-Stop columns for DeepBGC data Former-commit-id: a80a2d7039c6ff4cd2ee79d67f8a98b5efe7228b --- app.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index 2742398..3c30d87 100755 --- a/app.R +++ b/app.R @@ -792,6 +792,8 @@ server <- function(input, output, session) { # Add chromosome info column vals$deep_data <- deep_data vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Start <- vals$deep_data$nucl_start + vals$deep_data$Stop <- vals$deep_data$nucl_end # Add ID column as number seuquence of dataframe length vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) vals$deep_data$Cluster <- vals$deep_data$ID @@ -1728,7 +1730,7 @@ server <- function(input, output, session) { if (vals$deep_data_input == TRUE){ deep_data <- vals$deep_data deep_inter <- vals$deep_data %>% - dplyr::select(nucl_start, nucl_end) + dplyr::select(Start, Stop) deep_inter$seqnames <- "chr" } From 694945f160366867d6b2217fe6fb5717422e6157 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 11:58:52 +0300 Subject: [PATCH 048/199] input now code names, not letters Former-commit-id: a36640a9fb46000d0a603fa1dba807135692fa12 --- app.R | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/app.R b/app.R index 3c30d87..139655c 100755 --- a/app.R +++ b/app.R @@ -502,7 +502,7 @@ server <- function(input, output, session) { vals$anti_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") - vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "A") + vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") @@ -512,7 +512,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "Antismash" ) shiny::updateSelectInput(session, "group_by", - selected = "A" ) + selected = "Antismash" ) shiny::updateSelectInput(session, "ref_comparison", selected = "A") shiny::updateSelectInput(session, "ref_col_biocircos", @@ -553,7 +553,7 @@ server <- function(input, output, session) { vals$gecco_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") - vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "G") + vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") update_ui_with_data() disable_event_logic() @@ -561,7 +561,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "GECCO" ) shiny::updateSelectInput(session, "group_by", - selected = "G") + selected = "GECCO") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "GECCO") @@ -579,7 +579,7 @@ server <- function(input, output, session) { } vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PS") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") update_ui_with_data() prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) @@ -596,7 +596,7 @@ server <- function(input, output, session) { vals$prism_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "P") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") @@ -606,7 +606,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "PRISM" ) shiny::updateSelectInput(session, "group_by", - selected = "P" ) + selected = "PRISM" ) shiny::updateSelectInput(session, "ref_comparison", selected = "P") shiny::updateSelectInput(session, "ref_col_biocircos", @@ -629,7 +629,7 @@ server <- function(input, output, session) { vals$sempi_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") - vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "S") + vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") @@ -639,7 +639,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "SEMPI" ) shiny::updateSelectInput(session, "group_by", - selected = "S" ) + selected = "SEMPI" ) shiny::updateSelectInput(session, "ref_comparison", selected = "S") shiny::updateSelectInput(session, "ref_col_biocircos", @@ -681,7 +681,7 @@ server <- function(input, output, session) { write.csv(vals$known_data, "knownhits_data.csv", row.names = F) if ((vals$dup_data_input == T)){ vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") update_ui_with_data() dup_table <- vals$dup_data @@ -703,7 +703,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "ARTS" ) shiny::updateSelectInput(session, "group_by", - selected = "AR" ) + selected = "ARTS" ) shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") } @@ -754,7 +754,7 @@ server <- function(input, output, session) { write.csv(dup_table, "duptable_data.csv", row.names = F) if ((vals$known_data_input == T)){ vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "AR") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") update_ui_with_data() dup_table <- vals$dup_data @@ -776,7 +776,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "ARTS" ) shiny::updateSelectInput(session, "group_by", - selected = "AR" ) + selected = "ARTS" ) shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") } @@ -802,7 +802,7 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 vals$deep_data_filtered <- filter_deepbgc() vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") - vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "D") + vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") update_ui_with_data() disable_event_logic() @@ -810,7 +810,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "DeepBGC" ) shiny::updateSelectInput(session, "group_by", - selected = "D" ) + selected = "DeepBGC" ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = "DeepBGC", selected = "DeepBGC") @@ -830,12 +830,16 @@ server <- function(input, output, session) { vals$rre_data <- data.frame(vals$rre_data) vals$rre_data['Type'] <- 'ripp' vals$rre_data['Type2'] <- 'ripp' + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + vals$rre_data <- data.frame(vals$rre_data) write.csv(vals$rre_data, "rre_data.csv", row.names = F) vals$rre_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") - vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "R") + vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") update_ui_with_data() disable_event_logic() @@ -843,7 +847,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "ref", selected = "RRE-Finder" ) shiny::updateSelectInput(session, "group_by", - selected = "R" ) + selected = "RRE-Finder" ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = "RRE-Finder", selected = "RRE") @@ -1716,7 +1720,6 @@ server <- function(input, output, session) { ############################################################################ # Compute all interceptions on data upload. # dplyr::filter while ploting then. - # TODO make looop for data reading shiny::observeEvent(inputData(), { shiny::req(vals$data_upload_count>=1) # GENERATE DATA @@ -1766,11 +1769,6 @@ server <- function(input, output, session) { prism_supp_inter <- vals$prism_supp_data %>% dplyr::select(Start,Stop) prism_supp_inter$seqnames <- "chr" - if (input$prism_supp_data_input_width == TRUE) { - Stop_vals_prism_supp <- as.numeric(vals$prism_supp_data$Stop)+50000 - } else{ - Stop_vals_prism_supp <- as.numeric(vals$prism_supp_data$Stop) - } } if (vals$arts_data_input == T){ arts_data <- vals$arts_data @@ -2985,15 +2983,15 @@ server <- function(input, output, session) { inters <- vals$inters_filtered df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) colnames(df_test) <- soft_let - added_inters <- c(soft_names[match(input$group_by, soft_let)]) + added_inters <- c(soft_names[match(input$group_by, soft_namings)]) add_inters <- list() if (input$count_all == F){ df_test[nrow(df_test)+1,] <- NA } else{ - if( (input$group_by == "D") | (input$group_by == "G")){ - selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data_filtered") + if( (input$group_by == "DeepBGC") | (input$group_by == "GECCO")){ + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] } else { - selected_dataframe <- paste0(soft_names[match(input$group_by, soft_let)], "_data") + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] } df_test <- data.frame(matrix(ncol = length(soft_let), nrow = length(vals[[selected_dataframe]]$Cluster))) colnames(df_test) <- soft_let @@ -3001,7 +2999,7 @@ server <- function(input, output, session) { df_test[nrow(df_test)+1,] <- NA } for (i in seq(1:length(data_uploads))){ - if (input$group_by==soft_let[[i]]){ + if (input$group_by==soft_namings[[i]]){ exclude <- i soft_n <- names(inters[[soft_names[i]]]) index <- 1 From f72f04ccc6500a02e485b868fd08c0af9647ffab Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 12:09:30 +0300 Subject: [PATCH 049/199] Fix RRE not coloring bug Former-commit-id: 0ce09ceeee64b082f66b4f10ef5660bd4ffed1e0 --- app.R | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/app.R b/app.R index 139655c..0ca4b8b 100755 --- a/app.R +++ b/app.R @@ -505,7 +505,7 @@ server <- function(input, output, session) { vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "A") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ @@ -514,7 +514,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "group_by", selected = "Antismash" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "A") + selected = "Antismash") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") shiny::updateSelectInput(session, "ref_comparison_gecco", @@ -599,7 +599,7 @@ server <- function(input, output, session) { vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "P") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ @@ -608,7 +608,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "group_by", selected = "PRISM" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "P") + selected = "PRISM") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") shiny::updateSelectInput(session, "ref_comparison_gecco", @@ -632,7 +632,7 @@ server <- function(input, output, session) { vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "S") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ @@ -641,7 +641,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "group_by", selected = "SEMPI" ) shiny::updateSelectInput(session, "ref_comparison", - selected = "S") + selected = "SEMPI") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") shiny::updateSelectInput(session, "ref_comparison_gecco", @@ -840,7 +840,7 @@ server <- function(input, output, session) { vals$data_upload_count <- vals$data_upload_count +1 vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1){ @@ -849,8 +849,7 @@ server <- function(input, output, session) { shiny::updateSelectInput(session, "group_by", selected = "RRE-Finder" ) shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "RRE-Finder", - selected = "RRE") + selected = "RRE-Finder") } if (!is.null(vals$rre_data$Probability)){ @@ -2206,15 +2205,15 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'A'){ + if (input$ref_comparison == 'Antismash'){ anti_inter <- vals$anti_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'P'){ + } else if (input$ref_comparison == 'PRISM'){ anti_inter <- vals$prism_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'S'){ + } else if (input$ref_comparison == 'SEMPI'){ anti_inter <- vals$sempi_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" @@ -2236,15 +2235,15 @@ server <- function(input, output, session) { } - if (input$ref_comparison == 'A'){ + if (input$ref_comparison == 'Antismash'){ used_antismash <- length(vals$anti_data$Cluster)-inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'P'){ + } else if (input$ref_comparison == 'PRISM'){ used_antismash <- length(vals$prism_data$Cluster)-inter_bgc cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'S') { + } else if (input$ref_comparison == 'SEMPI') { used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") @@ -2290,7 +2289,7 @@ server <- function(input, output, session) { # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'A'){ + if (input$ref_comparison == 'Antismash'){ data <- vals$anti_data title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") test <- test %>% @@ -2300,7 +2299,7 @@ server <- function(input, output, session) { Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'P'){ + } else if (input$ref_comparison == 'PRISM'){ data <- vals$prism_data title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% @@ -2309,7 +2308,7 @@ server <- function(input, output, session) { Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'S'){ + } else if (input$ref_comparison == 'SEMPI'){ data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") test <- test %>% From 4b49bf2bf9a2e024a0443cab5547de76242502c5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 9 Oct 2021 12:14:49 +0300 Subject: [PATCH 050/199] Deleted soft_let list used for coding. Now only abbr is used Former-commit-id: eeedd2d7bb4f49f074a3bba5eeefd26bad898553 --- app.R | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/app.R b/app.R index 0ca4b8b..d45a1ab 100755 --- a/app.R +++ b/app.R @@ -214,10 +214,8 @@ server <- function(input, output, session) { soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE-Finder') # Dataframes undes vals$list, that stored the data data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") - # Used for software coding. Then just map to the soft namings - soft_let <- c("A", "S", "P", "PS", "AR", "D", "G", "R") # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-supp", "AR", "D", "G", "RRE") + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") # Used for deep reference 2 plot soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", "seg_df_ref_g", "seg_df_ref_r") @@ -2980,8 +2978,8 @@ server <- function(input, output, session) { } inters <- vals$inters_filtered - df_test <- data.frame(matrix(ncol = length(soft_let), nrow = 0)) - colnames(df_test) <- soft_let + df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) + colnames(df_test) <- abbr added_inters <- c(soft_names[match(input$group_by, soft_namings)]) add_inters <- list() if (input$count_all == F){ @@ -2992,8 +2990,8 @@ server <- function(input, output, session) { } else { selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] } - df_test <- data.frame(matrix(ncol = length(soft_let), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- soft_let + df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- abbr df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster df_test[nrow(df_test)+1,] <- NA } @@ -3007,26 +3005,26 @@ server <- function(input, output, session) { df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) for (h in seq(1:length(soft_n))){ if (name==soft_names[match(soft_n, soft_names)][h]){ - colnames(df_tmp) <- c(soft_let[i],soft_let[match(soft_n, soft_names)][h]) + colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) df_test <- merge(df_test, df_tmp, all = T) } } index <- index +1 } - excluded_names <- soft_let[soft_let != as.name(soft_let[i])] - data <- df_test %>% dplyr::group_by_if(colnames(df_test)==soft_let[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + excluded_names <- abbr[abbr != as.name(abbr[i])] + data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), b=paste(eval(as.name(excluded_names[2])), collapse=","), c=paste(eval(as.name(excluded_names[3])), collapse=","), d=paste(eval(as.name(excluded_names[4])), collapse=","), e=paste(eval(as.name(excluded_names[5])), collapse=","), f=paste(eval(as.name(excluded_names[6])), collapse=","), g=paste(eval(as.name(excluded_names[7])), collapse=",")) - colnames(data) <- c(soft_let[i], excluded_names) - for (p in soft_let){ + colnames(data) <- c(abbr[i], excluded_names) + for (p in abbr){ data[[p]] <- gsub('NA,|,NA', '', data[[p]]) data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, soft_let)] + names(data)[names(data) == p] <- soft_namings[match(p, abbr)] } data["Group"] <- paste("group", rownames(data), sep = "_") for (f in seq(1:length(data_uploads))){ From efac8a6a55903bf8b0b5ff751d1e04003dde5e3e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 10 Oct 2021 09:33:56 +0300 Subject: [PATCH 051/199] Use of datatable for coloring, not the dataframe Former-commit-id: 84ac62a3d856957b4c588c3d40f64e3c5693e46f --- app.R | 77 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/app.R b/app.R index d45a1ab..b04b273 100755 --- a/app.R +++ b/app.R @@ -205,6 +205,11 @@ server <- function(input, output, session) { anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) vals$rename_data <- read.csv("rename.csv") + rename_data <- read.csv("rename.csv") + coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -1934,14 +1939,14 @@ server <- function(input, output, session) { arc_labels <- c(arc_labels, biocircos_anti$Type) if ((input$biocircos_color == T)){ arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% rename_data$Group_color){ - rename_data$Color[rename_data$Group_color == x] + if (x %in% coloring_datatable$x$data$Name){ + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] } else { - rename_data$Color[rename_data$Group_color == 'base'] + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] } }) } else { - arc_colors <- rename_data$Color[rename_data$Group_color == 'base'] + arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] } arc_col <- c(arc_col,as.character(arc_colors) ) return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) @@ -1963,6 +1968,7 @@ server <- function(input, output, session) { rename_data <- vals$rename_data + coloring_datatable <- vals$coloring_datatable index <- 1 # browser() @@ -2027,66 +2033,66 @@ server <- function(input, output, session) { if (class == 'P'){ subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) } else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } }))) if (length(label_color) != 0){ for (t in seq(1:length(label_color))){ if (!is.null(subset_vec[t])){ if (subset_vec[t] == F){ - label_color[t] <- as.character(rename_data$Color[rename_data$Group_color == 'base']) + label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } } } } } else if (class == 'H'){ - if (grep(paste0("^", data1_label, "$"), rename_data$Hierarchy) < (grep(paste0("^", data2_label, "$"), rename_data$Hierarchy))){ + if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) } else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } }))) } else { label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) } else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } }))) } }else if (class == 'R'){ if (data2_label == input$ref_col_biocircos){ label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) } else{ - as.character(rename_data$Color[rename_data$Group_color == 'base']) + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } }))) } else if (data1_label == input$ref_col_biocircos){ label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ - if (x %in% rename_data$Group_color) { - as.character(rename_data$Color[rename_data$Group_color == x]) + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) } else{ - as.character( rename_data$Color[rename_data$Group_color == 'base']) + as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } }))) } else{ - label_color <- as.character(rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) } } else { - label_color <-as.character( rep(rename_data$Color[rename_data$Group_color == 'base'], length(chromosomes_start))) + label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) } } return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, @@ -2150,7 +2156,7 @@ server <- function(input, output, session) { tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, link_pos_start_1, chromosomes_end, link_pos_end, link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = rename_data$Color[rename_data$Group_color == 'base']) + displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } else{ shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) } @@ -2885,17 +2891,24 @@ server <- function(input, output, session) { output$biocircos_legend <- DT::renderDataTable({ shiny::req(vals$data_upload_count >=1) - - plot_data <- vals$rename_data - new_data <- tidyr::drop_na(data.frame(cbind(as.character(plot_data$Group_color), as.character(plot_data$Color))) ) - new_data <- new_data[!apply(new_data == "", 1, all),] - colnames(new_data) <- c("Name", "Color") - color_vec <- new_data$Color + rownames = FALSE + new_data <- vals$coloring_datatable + color_vec <- new_data$x$data$Color options(DT.options = list(pageLength = 50)) - DT::datatable(new_data, rownames = F) %>% DT::formatStyle('Color', - backgroundColor=DT::styleEqual(color_vec, color_vec)) + new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) + }) + # TODO here!!!!! + proxy = DT::dataTableProxy('biocircos_legend') + shiny::observeEvent(input$biocircos_legend_cell_edit, { + info = input$x1_cell_edit + str(info) + i = info$row + j = info$col + 1 + v = info$value + vals$coloring_datatable[i, j] <<- DT:::coerceValue(v, vals$coloring_datatable[i, j]) + DT::replaceData(proxy, vals$coloring_datatable, resetPaging = FALSE, rownames = FALSE) }) ##--------------------------------------------------------------- ## Summarize tab - From f3cc1e959b611293be7ec0a4d82ddeacc5a6c1c1 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 10 Oct 2021 10:09:42 +0300 Subject: [PATCH 052/199] biocircos_legend datatable is now editable from shiny Former-commit-id: 83ff339f156084cdc2f90c0d3218cfd624009fe1 --- app.R | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index b04b273..5a5c967 100755 --- a/app.R +++ b/app.R @@ -154,6 +154,7 @@ ui <- shiny::fluidPage( ) ) + # Define server logic server <- function(input, output, session) { ##--------------------------------------------------------------- @@ -204,12 +205,14 @@ server <- function(input, output, session) { vals$computed <- list( anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) + # Making coloring datatable vals$rename_data <- read.csv("rename.csv") rename_data <- read.csv("rename.csv") coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) + # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -1428,6 +1431,10 @@ server <- function(input, output, session) { rename_data <- read.csv(input$rename_data$datapath) vals$rename_data <- rename_data + coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") }) # What to do, if hide uploads scheme is triggered shiny::observeEvent(input$hide_uploads, { @@ -2899,16 +2906,16 @@ server <- function(input, output, session) { }) - # TODO here!!!!! - proxy = DT::dataTableProxy('biocircos_legend') + + # Updating values in Datatable on edit shiny::observeEvent(input$biocircos_legend_cell_edit, { - info = input$x1_cell_edit - str(info) - i = info$row - j = info$col + 1 - v = info$value - vals$coloring_datatable[i, j] <<- DT:::coerceValue(v, vals$coloring_datatable[i, j]) - DT::replaceData(proxy, vals$coloring_datatable, resetPaging = FALSE, rownames = FALSE) + if (input$biocircos_legend_cell_edit$col[1] == 0){ + vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 1){ + vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 2){ + vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value + } }) ##--------------------------------------------------------------- ## Summarize tab - From 2fe1aec4ae737f8b9d7d5b454bd88e9bc300d1d2 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 11:54:05 +0300 Subject: [PATCH 053/199] Gecco data comparison ui is now not loading untill comparable dataframe is uploaded Former-commit-id: 99891d0582c3aff878c36ecc6ac564482fae960c --- app.R | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app.R b/app.R index 5a5c967..a6c1bf8 100755 --- a/app.R +++ b/app.R @@ -1178,12 +1178,6 @@ server <- function(input, output, session) { shiny::observeEvent(vals$gecco_data_input,{ if (vals$gecco_data_input == T){ - shinyjs::showElement(selector = "#data_comparison_header_gecco") - shinyjs::showElement(selector = "#hide_data_comparison_gecco") - shinyjs::showElement(selector = "#ref_comparison_gecco") - shinyjs::showElement(selector = "#score_type_gecco") - shinyjs::showElement(selector = "#plot_step_gecco") - shinyjs::showElement(selector = "#plot_start_gecco") shinyjs::showElement(selector = "#data_filter_header_gecco") shinyjs::showElement(selector = "#hide_data_filter_gecco") shinyjs::showElement(selector = "#score_average_gecco") @@ -1191,12 +1185,6 @@ server <- function(input, output, session) { shinyjs::showElement(selector = "#domains_filter_gecco") shinyjs::showElement(selector = "#prot_filter_gecco") } else{ - shinyjs::hideElement(selector = "#data_comparison_header_gecco") - shinyjs::hideElement(selector = "#hide_data_comparison_gecco") - shinyjs::hideElement(selector = "#ref_comparison_gecco") - shinyjs::hideElement(selector = "#score_type_gecco") - shinyjs::hideElement(selector = "#plot_step_gecco") - shinyjs::hideElement(selector = "#plot_start_gecco") shinyjs::hideElement(selector = "#data_filter_header_gecco") shinyjs::hideElement(selector = "#hide_data_filter_gecco") shinyjs::hideElement(selector = "#score_average_gecco") @@ -1248,8 +1236,20 @@ server <- function(input, output, session) { shiny::showTab("main", "3") if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ shiny::showTab("main", "5") + shinyjs::showElement(selector = "#data_comparison_header_gecco") + shinyjs::showElement(selector = "#hide_data_comparison_gecco") + shinyjs::showElement(selector = "#ref_comparison_gecco") + shinyjs::showElement(selector = "#score_type_gecco") + shinyjs::showElement(selector = "#plot_step_gecco") + shinyjs::showElement(selector = "#plot_start_gecco") } else { shiny::hideTab("main", "5") + shinyjs::hideElement(selector = "#data_comparison_header_gecco") + shinyjs::hideElement(selector = "#hide_data_comparison_gecco") + shinyjs::hideElement(selector = "#ref_comparison_gecco") + shinyjs::hideElement(selector = "#score_type_gecco") + shinyjs::hideElement(selector = "#plot_step_gecco") + shinyjs::hideElement(selector = "#plot_start_gecco") if ((vals$gecco_data_input == T) & (vals$data_upload_count >1)){ shiny::showNotification(paste("It seems that you would like to compare the GECCO data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) } @@ -1680,18 +1680,21 @@ server <- function(input, output, session) { }) # What to do, if hide GECCO comparison options scheme is triggered shiny::observeEvent(input$hide_data_comparison_gecco, { - if ((input$hide_data_comparison_gecco == T)){ shinyjs::hideElement(selector = "#ref_comparison_gecco") shinyjs::hideElement(selector = "#score_type_gecco") shinyjs::hideElement(selector = "#plot_step_gecco") shinyjs::hideElement(selector = "#plot_start_gecco") - } else if (vals$gecco_data_input == T) { + } else if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { + shinyjs::showElement(selector = "#data_comparison_header_gecco") + shinyjs::showElement(selector = "#hide_data_comparison_gecco") shinyjs::showElement(selector = "#ref_comparison_gecco") shinyjs::showElement(selector = "#score_type_gecco") shinyjs::showElement(selector = "#plot_step_gecco") shinyjs::showElement(selector = "#plot_start_gecco") } else { + shinyjs::hideElement(selector = "#data_comparison_header_gecco") + shinyjs::hideElement(selector = "#hide_data_comparison_gecco") shinyjs::hideElement(selector = "#ref_comparison_gecco") shinyjs::hideElement(selector = "#score_type_gecco") shinyjs::hideElement(selector = "#plot_step_gecco") From 6c9d45f8223f86c083033b00d7f5fce05ca55833 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 12:14:04 +0300 Subject: [PATCH 054/199] DeepBGC data comparison ui is now not loading untill comparable dataframe is uploaded Former-commit-id: 77e0a11f8c1b1209c93051e68c2e50858cfdfe62 --- app.R | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/app.R b/app.R index a6c1bf8..ed3d308 100755 --- a/app.R +++ b/app.R @@ -1141,12 +1141,7 @@ server <- function(input, output, session) { shiny::observeEvent(vals$deep_data_input,{ if (vals$deep_data_input == T){ - shinyjs::showElement(selector = "#ref_comparison") - shinyjs::showElement(selector = "#hide_data_comparison") shinyjs::showElement(selector = "#hide_data_filter") - shinyjs::showElement(selector = "#score_type") - shinyjs::showElement(selector = "#plot_step") - shinyjs::showElement(selector = "#plot_start") shinyjs::showElement(selector = "#score_a") shinyjs::showElement(selector = "#score_d") shinyjs::showElement(selector = "#score_c") @@ -1154,15 +1149,9 @@ server <- function(input, output, session) { shinyjs::showElement(selector = "#biodomain_filter") shinyjs::showElement(selector = "#gene_filter") shinyjs::showElement(selector = "#cluster_type") - shinyjs::showElement(selector = "#data_comparison_header") shinyjs::showElement(selector = "#data_filter_header") } else{ - shinyjs::hideElement(selector = "#ref_comparison") - shinyjs::hideElement(selector = "#score_type") - shinyjs::hideElement(selector = "#hide_data_comparison") shinyjs::hideElement(selector = "#hide_data_filter") - shinyjs::hideElement(selector = "#plot_step") - shinyjs::hideElement(selector = "#plot_start") shinyjs::hideElement(selector = "#score_a") shinyjs::hideElement(selector = "#score_d") shinyjs::hideElement(selector = "#score_c") @@ -1170,7 +1159,6 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#biodomain_filter") shinyjs::hideElement(selector = "#gene_filter") shinyjs::hideElement(selector = "#cluster_type") - shinyjs::hideElement(selector = "#data_comparison_header") shinyjs::hideElement(selector = "#data_filter_header") } }) @@ -1256,8 +1244,20 @@ server <- function(input, output, session) { } if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { shiny::showTab("main", "1") + shinyjs::showElement(selector = "#data_comparison_header") + shinyjs::showElement(selector = "#ref_comparison") + shinyjs::showElement(selector = "#hide_data_comparison") + shinyjs::showElement(selector = "#score_type") + shinyjs::showElement(selector = "#plot_step") + shinyjs::showElement(selector = "#plot_start") } else { shiny::hideTab("main", "1") + shinyjs::hideElement(selector = "#data_comparison_header") + shinyjs::hideElement(selector = "#ref_comparison") + shinyjs::hideElement(selector = "#score_type") + shinyjs::hideElement(selector = "#hide_data_comparison") + shinyjs::hideElement(selector = "#plot_step") + shinyjs::hideElement(selector = "#plot_start") if ((vals$deep_data_input == T) & (vals$data_upload_count >1)){ shiny::showNotification(paste("It seems that you would like to compare the DeepBGC data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) } @@ -1638,11 +1638,15 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#plot_step") shinyjs::hideElement(selector = "#plot_start") } else if (vals$deep_data_input == T) { + shinyjs::showElement(selector = "#data_comparison_header") + shinyjs::showElement(selector = "#hide_data_comparison") shinyjs::showElement(selector = "#ref_comparison") shinyjs::showElement(selector = "#score_type") shinyjs::showElement(selector = "#plot_step") shinyjs::showElement(selector = "#plot_start") } else { + shinyjs::hideElement(selector = "#data_comparison_header") + shinyjs::hideElement(selector = "#hide_data_comparison") shinyjs::hideElement(selector = "#ref_comparison") shinyjs::hideElement(selector = "#score_type") shinyjs::hideElement(selector = "#plot_step") From e54cf6196d1be025a0d00574aed7564382a6ad75 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 12:38:23 +0300 Subject: [PATCH 055/199] Fix deep_reference plotting error, when reference data is empty Former-commit-id: c734191412bb75e50e43b6febe489d4dd9e86ff0 --- app.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index ed3d308..f012f2e 100755 --- a/app.R +++ b/app.R @@ -2744,7 +2744,9 @@ server <- function(input, output, session) { seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F) seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) seg_ref <- seg_ref_g + if (input$ref == soft_namings[sup_index]){ + shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) soft_let <- abbr[sup_index] @@ -2762,7 +2764,6 @@ server <- function(input, output, session) { index = index +1 } - plot <- plot + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + From b814f43b60bd9dddc8f63c530a3f4083d3123264 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 12:47:33 +0300 Subject: [PATCH 056/199] Fix input is not hiding after input is triggered Former-commit-id: 641a41d54658b8238bd6fa507431f842f2efec52 --- app.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.R b/app.R index f012f2e..e27f15a 100755 --- a/app.R +++ b/app.R @@ -1710,17 +1710,17 @@ server <- function(input, output, session) { if ((input$hide_data_filter_gecco == T)){ shinyjs::hideElement(selector = "#score_average_gecco") - shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#score_cluster_gecco") shinyjs::hideElement(selector = "#domains_filter_gecco") shinyjs::hideElement(selector = "#prot_filter_gecco") } else if (vals$gecco_data_input == T){ shinyjs::showElement(selector = "#score_average_gecco") - shinyjs::showElement(selector = "#score_average_gecco") + shinyjs::showElement(selector = "#score_cluster_gecco") shinyjs::showElement(selector = "#domains_filter_gecco") shinyjs::showElement(selector = "#prot_filter_gecco") } else { shinyjs::hideElement(selector = "#score_average_gecco") - shinyjs::hideElement(selector = "#score_average_gecco") + shinyjs::hideElement(selector = "#score_cluster_gecco") shinyjs::hideElement(selector = "#domains_filter_gecco") shinyjs::hideElement(selector = "#prot_filter_gecco") } From 05e058fd0c94fd26d40f598423d430acf94a4e5b Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 12:51:04 +0300 Subject: [PATCH 057/199] Fix input and input trigger Biocircos replotting Former-commit-id: 737bb5d3a964b11a46e15f535c34e8489f74c0b0 --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index e27f15a..9671c55 100755 --- a/app.R +++ b/app.R @@ -165,7 +165,7 @@ server <- function(input, output, session) { biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp, input$prism_supp_data_input_width, - input$arts_width, input$sempi_width, input$rre_width + input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name ) }) inputData <- shiny::reactive({ From d8366bfa20721a3e37ce4abf14fc5b0051685712 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 13:04:15 +0300 Subject: [PATCH 058/199] Added warning that hybrid settings are resseted after reset names for Antismash, PRISM and SEMPI Former-commit-id: 155ed46d854f0afb7d911430f44e5f59d43c52b0 --- app.R | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/app.R b/app.R index 9671c55..2712a10 100755 --- a/app.R +++ b/app.R @@ -1293,7 +1293,7 @@ server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code - shiny::observeEvent(input$anti_hybrid, { + shiny::observeEvent(input$anti_hybrid, ignoreInit=T,{ hybrid_col <- function(data){ data_split <- stringr::str_split(data$Type2, "__") @@ -1314,7 +1314,7 @@ server <- function(input, output, session) { } }) - shiny::observeEvent(input$prism_hybrid, { + shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { hybrid_col <- function(data){ data_split <- stringr::str_split(data$Type2, "__") @@ -1334,7 +1334,7 @@ server <- function(input, output, session) { vals$prism_data$Type2 <- vals$prism_type } }) - shiny::observeEvent(input$sempi_hybrid, { + shiny::observeEvent(input$sempi_hybrid, ignoreInit=T,{ hybrid_col <- function(data){ data_split <- stringr::str_split(data$Type2, "__") @@ -1419,9 +1419,18 @@ server <- function(input, output, session) { vals$anti_data['Type2'] <- vals$anti_data['Type'] vals$sempi_data['Type2'] <- vals$sempi_data['Type'] vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) - shiny::updateCheckboxInput(inputId = "sempi_hybrid", value =F) - shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) + if (input$anti_hybrid==T){ + shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) + } + if (input$prism_hybrid==T){ + shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) + } + if (input$sempi_hybrid==T){ + shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) + } shinyjs::showElement(selector = "#rename") shinyjs::hideElement(selector = "#reset_name") vals$renamed <- F From d980bfd336e842e10f99593bd5b8a979899176db Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 13:19:02 +0300 Subject: [PATCH 059/199] Fix plots weren't loading at fresh app startup Former-commit-id: 07efd0b89195fbbe880215536fe614f38652e7a1 --- app.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.R b/app.R index 2712a10..b5474b3 100755 --- a/app.R +++ b/app.R @@ -1745,7 +1745,7 @@ server <- function(input, output, session) { ############################################################################ # Compute all interceptions on data upload. # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), { + shiny::observeEvent(inputData(), ignoreInit = T,{ shiny::req(vals$data_upload_count>=1) # GENERATE DATA if (vals$anti_data_input == TRUE){ @@ -1808,7 +1808,7 @@ server <- function(input, output, session) { dplyr::select(Start,Stop) gecco_inter$seqnames <- "chr" } - + get_inter <- function(inter1, inter2){ query <- GenomicRanges::makeGRangesFromDataFrame(inter2) subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) From f670b7530946afae58bb31b3b683b3a36dceee13 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 13:36:50 +0300 Subject: [PATCH 060/199] Fixed previous commit: added different triggers to inputData to trigger enable_event_logic Former-commit-id: 3ea3f9d8a4e3de05046c590113f14ef6b4ba0e07 --- app.R | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/app.R b/app.R index b5474b3..77c8ada 100755 --- a/app.R +++ b/app.R @@ -169,10 +169,8 @@ server <- function(input, output, session) { ) }) inputData <- shiny::reactive({ - list( input$sempi_data,input$rre_data, input$anti_data, input$prism_data, - input$known_data,input$dup_data, input$prism_supp_data, input$deep_data, input$gecco_data, - input$sempi_sco,input$rre_sco, input$anti_sco, input$prism_sco, - input$arts_sco, input$prism_supp_sco, input$deep_sco, input$gecco_sco + list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, + vals$known_data_input,vals$dup_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input ) }) dynamicInput <- shiny::reactive({ @@ -718,7 +716,7 @@ server <- function(input, output, session) { } read_arts_dupdata <- function(data){ get_location_duptable <- function(x, y){ - test <- stringr::str_split(x, ";") + test <- stringr:v:str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) test3 <- stringr::str_split(test2, " ") res <- list() @@ -1746,7 +1744,6 @@ server <- function(input, output, session) { # Compute all interceptions on data upload. # dplyr::filter while ploting then. shiny::observeEvent(inputData(), ignoreInit = T,{ - shiny::req(vals$data_upload_count>=1) # GENERATE DATA if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data From 4abf756f2ba676eb4ca2dd5cea4cd1d3ce13e1c4 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 13:42:14 +0300 Subject: [PATCH 061/199] Add prodigiosin as other to the rename.csv Former-commit-id: e91579b0ad18701cd9a59cb8e43d16437220c71a --- rename.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/rename.csv b/rename.csv index ef66ee8..48878d4 100644 --- a/rename.csv +++ b/rename.csv @@ -87,3 +87,4 @@ cf_saccharide,saccharide,,,,, cf_fatty_acid,other,,,,, cf_putative,other,,,,, class_iii_iv_lantipeptide,ripp,,,,, +prodigiosin,other,,,,, From 9ea7d9105fb390d147a20e5d3d19c62988958bd6 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 14:14:57 +0300 Subject: [PATCH 062/199] Fix arts_data_input increment (ARTS SCO data was not laoding correctly) Former-commit-id: 2011f28129f54cbd1bda3e2a52f82f857e4cfd83 --- app.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index 77c8ada..6508108 100755 --- a/app.R +++ b/app.R @@ -696,6 +696,7 @@ server <- function(input, output, session) { arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID vals$arts_data <- arts_data + vals$arts_data_input <- T vals$data_upload_count <- vals$data_upload_count +1 dup_table_id <- arts_data %>% dplyr::filter(Core != "Not_core") @@ -716,7 +717,7 @@ server <- function(input, output, session) { } read_arts_dupdata <- function(data){ get_location_duptable <- function(x, y){ - test <- stringr:v:str_split(x, ";") + test <- stringr::str_split(x, ";") test2<- sub(".*loc\\|", "", test[[1]]) test3 <- stringr::str_split(test2, " ") res <- list() From 73d85afe326faa5fd280184352a3960ec0a291eb Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 14:23:02 +0300 Subject: [PATCH 063/199] Fix prism_supp_data ID adding based on Start of gene (in ascending order) Former-commit-id: 6780f4bd73a7346f4b7c775fc302292064ecea16 --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index 6508108..a155397 100755 --- a/app.R +++ b/app.R @@ -375,7 +375,7 @@ server <- function(input, output, session) { }) res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) - final_reg <- rbind(res_genes, reg_genes) + final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) final_reg$ID <- seq(1:dim(final_reg)[1]) final_reg$Cluster <- final_reg$ID rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) From 8ff88282de3e089b9772387b262263f91eba916d Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 14:29:14 +0300 Subject: [PATCH 064/199] Fix edit of vals trigger Biocircos replotting Former-commit-id: a2f87bb35491bdc00d9d8d900f45817db54fe64a --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index a155397..f323c88 100755 --- a/app.R +++ b/app.R @@ -165,7 +165,7 @@ server <- function(input, output, session) { biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp, input$prism_supp_data_input_width, - input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name + input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name, vals$coloring_datatable ) }) inputData <- shiny::reactive({ From 9a43691f38c6a5922bb10d70f490cfe93fc15526 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 17:32:34 +0300 Subject: [PATCH 065/199] Fix PRISM-Supp checkbox. Now data can be hidden from plots Former-commit-id: acc0bbf0db9864475e0daf25e84b91d1a77bc611 --- app.R | 55 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index f323c88..5d5f389 100755 --- a/app.R +++ b/app.R @@ -164,8 +164,9 @@ server <- function(input, output, session) { input$sempi_sco,input$anti_sco, input$prism_sco)}) biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, - input$ref_col_biocircos, vals$inters_filtered, input$prism_supp, input$prism_supp_data_input_width, + input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name, vals$coloring_datatable + ) }) inputData <- shiny::reactive({ @@ -176,7 +177,7 @@ server <- function(input, output, session) { dynamicInput <- shiny::reactive({ list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, - input$prot_filter_gecco, input$dup_choice, vals$need_filter + input$prot_filter_gecco, input$dup_choice, vals$need_filter, input$prism_supp ) }) @@ -1742,6 +1743,26 @@ server <- function(input, output, session) { ### ### ############################################################################ ############################################################################ + shiny::observeEvent(input$prism_supp, ignoreInit = T,{ + if (input$prism_supp == T){ + vals$prism_supp_data_input = T + vals$need_filter <- T + if (!("PRISM-Supp" %in% names(vals$choices$ref))){ + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() + } + } else { + vals$prism_supp_data_input = F + vals$need_filter <- T + vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref)%in%c("PRISM-Supp"))] + vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by)%in%c("PRISM-Supp"))] + vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos)%in%c("PRISM-Supp"))] + update_ui_with_data() + } + }) + # Compute all interceptions on data upload. # dplyr::filter while ploting then. shiny::observeEvent(inputData(), ignoreInit = T,{ @@ -1932,6 +1953,12 @@ server <- function(input, output, session) { } } + if (input$prism_supp == FALSE){ + inters$prism_supp <- NULL + for (name in names(inters)) { + inters[[name]][which(names(inters[[name]])%in%c("prism_supp"))]<-NULL + } + } if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { vals$inters_filtered <- inters } @@ -2525,7 +2552,11 @@ server <- function(input, output, session) { shiny::req(vals$data_upload_count >=1) - inters <- vals$inters_filtered + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } # GENERATE DATA index <- 1 for (upload in data_uploads){ @@ -2950,7 +2981,11 @@ server <- function(input, output, session) { arts_count <- NULL gecco_count <- NULL - inters <- vals$inters_filtered + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } index <- 1 ranking_data <- NULL for (upload in data_uploads){ @@ -3012,7 +3047,11 @@ server <- function(input, output, session) { return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) } - inters <- vals$inters_filtered + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) colnames(df_test) <- abbr added_inters <- c(soft_names[match(input$group_by, soft_namings)]) @@ -3020,11 +3059,7 @@ server <- function(input, output, session) { if (input$count_all == F){ df_test[nrow(df_test)+1,] <- NA } else{ - if( (input$group_by == "DeepBGC") | (input$group_by == "GECCO")){ - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - } else { - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - } + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) colnames(df_test) <- abbr df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster From 4c08f0e38004d2577127b15f0c248c1cce5b4eb8 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 11 Oct 2021 21:47:05 +0300 Subject: [PATCH 066/199] Add basic debouncing for dynamicIutput Former-commit-id: 65e3ed7210d9293ecfc60fc0a32004549d982138 --- app.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.R b/app.R index 5d5f389..b50b423 100755 --- a/app.R +++ b/app.R @@ -179,7 +179,7 @@ server <- function(input, output, session) { input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, input$prot_filter_gecco, input$dup_choice, vals$need_filter, input$prism_supp ) - }) + }) %>% shiny::debounce(1000) @@ -3031,7 +3031,7 @@ server <- function(input, output, session) { output$group_table <- shiny::renderTable({ shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) + shiny::req(vals$can_plot_group_table == T) refine_unique <- function(data){ n <- tail(data, n=1) From 8eb9f2666d5c9521a51afb76cb876e1254437c03 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 12 Oct 2021 10:02:30 +0300 Subject: [PATCH 067/199] Added debouncing for DeepBGC and GECCO filtering. Decreased reactivity of deep_reference, by puting calculation into observeEvent Former-commit-id: 8f31ea64064b4df632c6d4879066d8047cabab47 --- app.R | 623 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 317 insertions(+), 306 deletions(-) diff --git a/app.R b/app.R index b50b423..83e7ce5 100755 --- a/app.R +++ b/app.R @@ -175,13 +175,20 @@ server <- function(input, output, session) { ) }) dynamicInput <- shiny::reactive({ - list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, - input$prot_filter_gecco, input$dup_choice, vals$need_filter, input$prism_supp + list( input$dup_choice, vals$need_filter, input$prism_supp ) - }) %>% shiny::debounce(1000) + }) + deep_reference <- shiny::reactive({ + list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, + input$prism_supp_data_input_width) + }) - + to_debounce <- shiny::reactive({ + list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, + input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, + input$prot_filter_gecco + ) + }) %>% shiny::debounce(500) # Some dataframes that are used through the app + some vectors of untercepted values vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, @@ -211,7 +218,7 @@ server <- function(input, output, session) { coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) - + # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -1743,7 +1750,7 @@ server <- function(input, output, session) { ### ### ############################################################################ ############################################################################ - shiny::observeEvent(input$prism_supp, ignoreInit = T,{ + shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ if (input$prism_supp == T){ vals$prism_supp_data_input = T vals$need_filter <- T @@ -1765,7 +1772,7 @@ server <- function(input, output, session) { # Compute all interceptions on data upload. # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), ignoreInit = T,{ + shiny::observeEvent(inputData(), ignoreInit = T,priority = 5,{ # GENERATE DATA if (vals$anti_data_input == TRUE){ anti_data <- vals$anti_data @@ -1876,7 +1883,9 @@ server <- function(input, output, session) { # dplyr::filter ARTS, DeepBGC, GECCO interception data # and general dataframes to plot, if data filtering # options are triggered - shiny::observeEvent(dynamicInput(), { + shiny::observeEvent({dynamicInput() + to_debounce() + }, ignoreInit = T, priority = 4 ,{ shiny::req(vals$data_upload_count>=1) inters <- vals$inters if (vals$deep_data_input == TRUE){ @@ -1969,7 +1978,7 @@ server <- function(input, output, session) { }) # Compute the Biociros plot. Store information to plot later - shiny::observeEvent(biocircos_listen(), { + shiny::observeEvent(biocircos_listen(), ignoreInit = T,priority = 3 ,{ shiny::req(vals$data_upload_count >=2) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_biocircos == T) @@ -2213,6 +2222,292 @@ server <- function(input, output, session) { vals$Biocircos_chromosomes <- Biocircos_chromosomes }) + shiny::observeEvent(deep_reference(), ignoreInit = T,{ + shiny::req(vals$data_upload_count >=1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_deep_ref == T) + shiny::req(input$ref != "") + shiny::req(vals$data_upload_count >=1) + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + # GENERATE DATA + index <- 1 + for (upload in data_uploads){ + if (vals[[upload]] == T){ + data<- vals[[data_to_use[index]]] + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index])) + } + index <- index +1 + } + + + lett <- rev(LETTERS)[1:9] + simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T){ + if (inter== T){ + data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] + } else{ + data <- df + } + + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df) + } + + geom_anti <- function(data){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism <- function(data){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_deep <- function(data){ + ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + geom_rre <- function(data){ + if (vals$rre_more == T){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } + } + geom_sempi <- function(data){ + + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + } + geom_prism_supp <- function(data){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + geom_arts <- function(data){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) + } + geom_gecco <- function(data){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + + add_sempi <- function(seg_df, soft_namings, df, inter = T){ + + return(seg_df) + } + + add_arts <- function(seg_df, soft_namings, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] + }else{ + subset_df <- df + } + seg_df$Hit = subset_df$Hit + seg_df$xend = as.numeric(subset_df$Stop) + seg_df$Core = subset_df$Core + seg_df$Count = subset_df$Count + seg_df$E_value = subset_df$Evalue + seg_df$Bitscore = subset_df$Bitscore + seg_df$Model = subset_df$Model + return(seg_df) + } + add_prism_supp <- function(seg_df, soft_namings, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] + }else{ + subset_df <- df + } + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Name = subset_df$Name + seg_df$Full_name = subset_df$Full_name + return(seg_df) + } + add_deep <- function(seg_df, soft_namings, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] + }else{ + subset_df <- df + } + seg_df$num_domains = subset_df$num_domains + seg_df$deepbgc_score = subset_df$deepbgc_score + seg_df$activity = subset_df$product_activity + return(seg_df) + } + add_rre <- function(seg_df, soft_namings, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] + }else{ + subset_df <- df + } + if (vals$rre_more == T){ + seg_df$xend=as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Stop = subset_df$Stop + seg_df$E_value = subset_df$E.value + seg_df$P_value = subset_df$P.value + seg_df$RRE_start = subset_df$RRE.start + seg_df$RRE_stop = subset_df$RRE.end + seg_df$Probability = subset_df$Probability + } else { + seg_df$xend=subset_df$Stop + seg_df$E_value = subset_df$E.value + } + + return(seg_df) + } + add_gecco <- function(seg_df, soft_namings, df, inter=T){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] + }else{ + subset_df <- df + } + seg_df$Num_proteins = subset_df$num_prot + seg_df$Num_domains = subset_df$num_domains + seg_df$Average_p = subset_df$average_p + seg_df$Max_p = subset_df$max_p + return(seg_df) + } + + add_more_annot <- function(seg_df, plot, soft_names, index){ + if (dim(seg_df)[1] > 0){ + if (soft_names[index] == "anti"){ + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } + else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } + else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } + else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } + else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } + else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df) + } else if (soft_names[index] == "gecco") { + plot <- plot+geom_gecco(seg_df) + } + return(plot) + } else{ + return(plot) + } + } + + define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T){ + if (inter == F){ + soft_major <- "Not applicable" + } + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ + seg_df <- add_prism_supp(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ + seg_df <- add_arts(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ + seg_df <- add_deep(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ + seg_df <- add_gecco(seg_df, soft_major, df, inter) + } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ + seg_df <- add_rre(seg_df, soft_major, df, inter) + }else if ((soft_names[index] == "sempi")& (soft_names[index] != soft_major)){ + seg_df <- add_sempi(seg_df, soft_major, df, inter) + } + return(seg_df) + } + + # MAKE COMPUTATIONS + sup_index <- 1 + soft_lttrs <- lett + rename_y_axis <- vals$rename_y_axis + rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ + soft_lttrs[x]=soft_namings[x] + }) + names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] + for (upload in data_uploads){ + soft_lttr <- soft_lttrs[1] + soft_lttrs <- soft_lttrs[-1] + if (vals[[upload]] == T){ + soft_major <- soft_names[sup_index] + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) + seg_ref <- seg_ref_g + + if (input$ref == soft_namings[sup_index]){ + shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) + soft_let <- abbr[sup_index] + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index) + } + index = index +1 + + } + plot <- plot + + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("Annotations' comparison to the reference") + to_plot <- plotly::ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + plotly::layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) + + + } + seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + vals[[soft_datafr[sup_index]]] <- seg_ref + } + sup_index <- sup_index +1 + } + vals$rename_y_axis <- rename_y_axis + vals$deep_reference_to_plot <- to_plot + }) + ############################################################################ ############################################################################ @@ -2257,21 +2552,20 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'Antismash'){ - anti_inter <- vals$anti_data %>% + if (input$ref_comparison == 'Antismash'){ + anti_inter <- shiny::isolate(vals$anti_data) %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'PRISM'){ - anti_inter <- vals$prism_data %>% + anti_inter <- shiny::isolate(vals$prism_data) %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'SEMPI'){ - anti_inter <- vals$sempi_data %>% + anti_inter <- shiny::isolate(vals$sempi_data) %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } - # Get the interception of two matrices @@ -2286,17 +2580,16 @@ server <- function(input, output, session) { len_new <- 0 } - if (input$ref_comparison == 'Antismash'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'PRISM'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") } else if (input$ref_comparison == 'SEMPI') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") } @@ -2546,297 +2839,15 @@ server <- function(input, output, session) { # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type output$deep_reference <- plotly::renderPlotly({ - shiny::req(vals$data_upload_count >=1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_deep_ref == T) - - shiny::req(vals$data_upload_count >=1) - - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - # GENERATE DATA - index <- 1 - for (upload in data_uploads){ - if (vals[[upload]] == T){ - data<- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index])) - } - index <- index +1 - } - - - lett <- rev(LETTERS)[1:9] - simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T){ - if (inter== T){ - data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] - } else{ - data <- df - } - - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) - } - - geom_anti <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_deep <- function(data){ - ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - geom_rre <- function(data){ - if (vals$rre_more == T){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) - } - } - geom_sempi <- function(data){ - - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism_supp <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - geom_arts <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) - } - geom_gecco <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - - add_sempi <- function(seg_df, soft_namings, df, inter = T){ - - return(seg_df) - } - - add_arts <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] - }else{ - subset_df <- df - } - seg_df$Hit = subset_df$Hit - seg_df$xend = as.numeric(subset_df$Stop) - seg_df$Core = subset_df$Core - seg_df$Count = subset_df$Count - seg_df$E_value = subset_df$Evalue - seg_df$Bitscore = subset_df$Bitscore - seg_df$Model = subset_df$Model - return(seg_df) - } - add_prism_supp <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] - }else{ - subset_df <- df - } - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Name = subset_df$Name - seg_df$Full_name = subset_df$Full_name - return(seg_df) - } - add_deep <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] - }else{ - subset_df <- df - } - seg_df$num_domains = subset_df$num_domains - seg_df$deepbgc_score = subset_df$deepbgc_score - seg_df$activity = subset_df$product_activity - return(seg_df) - } - add_rre <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] - }else{ - subset_df <- df - } - if (vals$rre_more == T){ - seg_df$xend=as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Stop = subset_df$Stop - seg_df$E_value = subset_df$E.value - seg_df$P_value = subset_df$P.value - seg_df$RRE_start = subset_df$RRE.start - seg_df$RRE_stop = subset_df$RRE.end - seg_df$Probability = subset_df$Probability - } else { - seg_df$xend=subset_df$Stop - seg_df$E_value = subset_df$E.value - } - - return(seg_df) - } - add_gecco <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] - }else{ - subset_df <- df - } - seg_df$Num_proteins = subset_df$num_prot - seg_df$Num_domains = subset_df$num_domains - seg_df$Average_p = subset_df$average_p - seg_df$Max_p = subset_df$max_p - return(seg_df) - } - - add_more_annot <- function(seg_df, plot, soft_names, index){ - if (dim(seg_df)[1] > 0){ - if (soft_names[index] == "anti"){ - plot <- plot + geom_anti(seg_df) - } else if (soft_names[index] == "sempi") { - plot <- plot + geom_sempi(seg_df) - } - else if (soft_names[index] == "prism") { - plot <- plot + geom_prism(seg_df) - } - else if (soft_names[index] == "prism_supp") { - plot <- plot + geom_prism_supp(seg_df) - } - else if (soft_names[index] == "arts") { - plot <- plot + geom_arts(seg_df) - } - else if (soft_names[index] == "deep") { - plot <- plot + geom_deep(seg_df) - } - else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df) - } else if (soft_names[index] == "gecco") { - plot <- plot+geom_gecco(seg_df) - } - return(plot) - } else{ - return(plot) - } - } - - define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T){ - if (inter == F){ - soft_major <- "Not applicable" - } - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ - seg_df <- add_prism_supp(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ - seg_df <- add_arts(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ - seg_df <- add_deep(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ - seg_df <- add_gecco(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ - seg_df <- add_rre(seg_df, soft_major, df, inter) - }else if ((soft_names[index] == "sempi")& (soft_names[index] != soft_major)){ - seg_df <- add_sempi(seg_df, soft_major, df, inter) - } - return(seg_df) - } - -# MAKE COMPUTATIONS - sup_index <- 1 - soft_lttrs <- lett - rename_y_axis <- vals$rename_y_axis - rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ - soft_lttrs[x]=soft_namings[x] - }) - names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] - for (upload in data_uploads){ - soft_lttr <- soft_lttrs[1] - soft_lttrs <- soft_lttrs[-1] - if (vals[[upload]] == T){ - soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) - seg_ref <- seg_ref_g - - if (input$ref == soft_namings[sup_index]){ - shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) - plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) - soft_let <- abbr[sup_index] - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) - } - index = index +1 - - } - plot <- plot + - ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("Annotations' comparison to the reference") - to_plot <- plotly::ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - - - } - seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - vals[[soft_datafr[sup_index]]] <- seg_ref - } - sup_index <- sup_index +1 - } - vals$rename_y_axis <- rename_y_axis - vals$can_plot_deep_ref_2 =T - to_plot + shiny::req(vals$deep_reference_to_plot) + vals$can_plot_deep_ref_2 <- T + vals$deep_reference_to_plot }) output$deep_reference_2 <- plotly::renderPlotly({ shiny::req(vals$can_plot_deep_ref_2 == T) vals$can_plot_deep_ref_2 == F - shiny::req(vals$data_upload_count >=1) - rename_y_axis <- vals$rename_y_axis + rename_y_axis <- shiny::isolate(vals$rename_y_axis) data <- NULL index <- 1 @@ -2928,7 +2939,7 @@ server <- function(input, output, session) { bordercolor = "#FFFFFF", borderwidth = 2, title=list(text=' Cluster Types '))) - }) + }) #%>% shiny::debounce(200) ##---------------------------------------------------------------- ## Biocircos plot tab - From 82d675d94b31a4d707cbbff96fb656718d40ce62 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 12 Oct 2021 12:27:25 +0300 Subject: [PATCH 068/199] Add input data validation for antismash, prism and sempi Former-commit-id: bb4f61e9b941062d9e68b88b0245132cb4f17f9b --- app.R | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/app.R b/app.R index 83e7ce5..2f71ab7 100755 --- a/app.R +++ b/app.R @@ -218,7 +218,58 @@ server <- function(input, output, session) { coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) - + # Validation + check_if_column_exists <- function(data_names,column_name){ + if (column_name %in% stringr::str_to_lower(data_names)){ + data_names[stringr::str_to_lower(data_names) %in% column_name] <- stringr::str_to_title(column_name) + return(TRUE) + } else { + shiny::showNotification( paste0("Data have no ", column_name, " column."),type = "warning") + return(FALSE) + } + } + validate_basic_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'cluster'))){ + shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (!(check_if_column_exists(data_names, 'start'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'stop'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'type'))){ + return(FALSE) + } + if (length(unique(data$Cluster)) != length(data$Cluster)){ + shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ + shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") + return(FALSE) + } + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ + shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") + data$Type[is.na(data$Type)] <- 'unknown' + data$Type["" %in% data$Type] <- 'unknown' + } + if (!(is.numeric(data$Cluster))){ + data$Cluster <- as.numeric(data$Cluster) + } + if (!(is.numeric(data$Start))){ + data$Start <- as.numeric(data$Start) + } + if (!(is.numeric(data$Stop))){ + data$Stop <- as.numeric(data$Stop) + } + if (!(is.character(data$Type))){ + data$Type <- as.character(data$Type) + } + return(list(TRUE, data)) + } # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -502,6 +553,13 @@ server <- function(input, output, session) { # Reading functions: read_antismash <- function(data){ anti_data <- data + res_validation <- validate_basic_input(anti_data) + if (!(res_validation[[1]])){ + anti_data <- NULL + return(NULL) + } else{ + anti_data <- res_validation[[2]] + } # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic @@ -588,8 +646,16 @@ server <- function(input, output, session) { vals$prism_supp <- processed_data[[2]] vals$prism_supp_data <- processed_data[[2]] vals$prism_json = T + } else { + prism_data <- data + } + res_validation <- validate_basic_input(prism_data) + if (!(res_validation[[1]])){ + prism_data <- NULL + return(NULL) + } else{ + prism_data <- res_validation[[2]] } - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") @@ -629,6 +695,13 @@ server <- function(input, output, session) { } read_sempi <- function(data){ sempi_data <- data + res_validation <- validate_basic_input(sempi_data) + if (!(res_validation[[1]])){ + sempi_data <- NULL + return(NULL) + } else{ + sempi_data <- res_validation[[2]] + } sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data From 1f9ce286ec14347b847e56954af1857d883e654a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 12 Oct 2021 14:10:19 +0300 Subject: [PATCH 069/199] Add RRE input data validation Former-commit-id: 5254666b4ffa501c7efc3c02da2ff92948299c8b --- app.R | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index 2f71ab7..67059ad 100755 --- a/app.R +++ b/app.R @@ -219,9 +219,12 @@ server <- function(input, output, session) { colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) # Validation + check_if_column_exists <- function(data_names,column_name){ if (column_name %in% stringr::str_to_lower(data_names)){ - data_names[stringr::str_to_lower(data_names) %in% column_name] <- stringr::str_to_title(column_name) + if (F %in% grepl('rre', column_name)){ + data_names[stringr::str_to_lower(data_names) %in% column_name] <- stringr::str_to_title(column_name) + } return(TRUE) } else { shiny::showNotification( paste0("Data have no ", column_name, " column."),type = "warning") @@ -270,6 +273,49 @@ server <- function(input, output, session) { } return(list(TRUE, data)) } + validate_rre_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'gene.name'))){ + return(FALSE) + } + if (F %in% grepl("__", data$Gene.name)){ + shiny::showNotification( paste0("Gene.name column contain no '__' delimiter. Please refer to the documentation on how to prepare RRE-Finder data"),type = "error") + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'e.value'))){ + return(FALSE) + } else { + data$E.value <- as.numeric(data$E.value) + } + if (!is.null(data$Probability)){ + if (!(check_if_column_exists(data_names, 'score'))){ + return(FALSE) + } else{ + data$Score <- as.numeric(data$Score) + } + if (!(check_if_column_exists(data_names, 'p.value'))){ + return(FALSE) + } else { + data$P.value <- as.numeric(data$P.value) + } + if (!(check_if_column_exists(data_names, 'rre.start'))){ + return(FALSE) + } else { + data$RRE.start <- as.numeric(data$RRE.start) + } + if (!(check_if_column_exists(data_names, 'rre.end'))){ + return(FALSE) + } else { + data$RRE.end <- as.numeric(data$RRE.end) + } + if (!(check_if_column_exists(data_names, 'probability'))){ + return(FALSE) + } else { + data$Probability <- as.numeric(data$Probability) + } + } + return(list(TRUE, data)) + } # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -904,6 +950,13 @@ server <- function(input, output, session) { } } read_rre <- function(data){ + res_validation <- validate_rre_input(data) + if (!(res_validation[[1]])){ + data <- NULL + return(NULL) + } else{ + data <- res_validation[[2]] + } # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) vals$rre_data <- data %>% tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% From 65bb2b097527de6d10be0f02469aef4fedb5cc50 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 19 Oct 2021 20:50:25 +0300 Subject: [PATCH 070/199] Initial dashboard working prototype Former-commit-id: d48e2095ac971cf6bc049a29cd1990bc9efb22b1 --- app.R | 1456 +++++++++++++++++++++++++++------------------------------ 1 file changed, 676 insertions(+), 780 deletions(-) diff --git a/app.R b/app.R index 67059ad..aa59f58 100755 --- a/app.R +++ b/app.R @@ -10,164 +10,414 @@ # library(magrittr) # Define UI -ui <- shiny::fluidPage( - - # Application title - shiny::titlePanel("BGCViz"), - - # Sidebar - shinyjs::useShinyjs(), - shiny::sidebarLayout( - shiny::sidebarPanel( - # Define sidebar logic. Make it fixed and not overflow - id = "tPanel",style = "overflow-y:scroll; max-height: 90vh; position:fixed; width:inherit;", - # Data upload - shiny::h3("Data upload and necesary input:"), - shiny::checkboxInput("hide_uploads", "Hide upload fields"), - shiny::h5(id = "anti_header_upload","ANTISMASH:"), - shiny::fileInput("anti_data", - "Upload Antismash data", accept = list(".csv", ".json")), - shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - shiny::h5(id = "prism_header_upload","PRISM:"), - shiny::fileInput("prism_data", - "Upload PRISM data", accept = list(".csv", ".json")), - shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - shiny::h5(id = "sempi_header_upload","SEMPI:"), - shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data", accept = ".csv"), - shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - shiny::h5(id = "deep_header_upload","DEEPBGC:"), - shiny::fileInput("deep_data", - "Upload DeepBGC data", accept = ".tsv"), - shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - shiny::h5(id = "gecco_header_upload","GECCO:"), - shiny::fileInput("gecco_data", - "Upload Gecco data", accept = ".tsv"), - shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), - shiny::h5(id = "rre_header_upload","RRE-FINDER:"), - shiny::fileInput("rre_data", - "Upload RRE-Finder data"), - shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - shiny::h5(id = "arts_header_upload","ARTS:"), - shiny::fileInput("known_data", - "Upload ARTS knownhits data", accept = ".csv"), - shiny::fileInput("dup_data", - "Upload ARTS duptable data", accept = ".csv"), - shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), - # Numeric input of chromosome length of analyzed sequence - shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000), - shiny::h3("Data manipulation options"), - shiny::checkboxInput("hide_anti", "Hide data manipulation fields"), - shiny::h5(id = "anti_header","Antismash data options:"), - shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - shiny::h5(id = "prism_header","PRISM data options:"), - shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - shiny::h5(id = "sempi_header","SEMPI data options:"), - shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - shiny::h5(id = "arts_header","ARTS data options:"), - shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All"), - shiny::h3(id = "genes_on_chr","Genes on chromosome plot controls:"), - shiny::checkboxInput("hide_genes_on_chr", "Hide 'Genes on chromosome plot' fields"), - shiny::selectInput("ref", "Choose reference data", choices = c(""), - selected = ""), - shiny::h3(id = "summarize","Summarize options:"), - shiny::checkboxInput("hide_summarize", "Hide summarize options"), - shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), - shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::h3("Improve visualization:"), - shiny::checkboxInput("hide_viz", "Hide improve visualization options"), - shiny::fileInput("rename_data", - "Upload renaming and coloring scheme", accept = ".csv"), - shiny::actionButton("rename", "Rename"), - shiny::actionButton("reset_name", "Reset"), - shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), - shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization"), - shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = ''), - shiny::h3(id="data_comparison_header_gecco","Comparison with Gecco plots:"), - shiny::checkboxInput("hide_data_comparison_gecco", "Hide Gecco data comparison options"), - shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), - shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c("Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type"), +ui <- shinydashboard::dashboardPage( + shinydashboard::dashboardHeader(title = "BGCViz"), + shinydashboard::dashboardSidebar( + shinydashboard::sidebarMenu( + tags$div( + id="menu_items", + div(id = "id6",shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("th"))), + div(id = "id7",shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("th"))), + div(id = "id1",shinydashboard::menuItemOutput("deep_sidemenu_out")), + div(id = "id2",shinydashboard::menuItemOutput("gecco_sidemenu_out")), + div(id = "id3",shinydashboard::menuItemOutput("anno_sidemenu_out")), + div(id = "id4",shinydashboard::menuItemOutput("biocircos_sidemenu_out")), + div(id = "id5",shinydashboard::menuItemOutput("summarize_sidemenu_out")) + )), + sortable::sortable_js("menu_items") + ), + shinydashboard::dashboardBody( + shinyjs::useShinyjs(), + shinydashboard::tabItems( + shinydashboard::tabItem( tabName = "deep_sidemenu", + shiny::fluidRow( + tags$div( + id = "deep_data1", + div(id = "id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "DeepBGC comparison", + collapsible = TRUE, + height = "500px", + shiny::plotOutput("deep_barplot") + ))), + div(id = "id2", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "DeepBGC rate", + collapsible = TRUE, + plotly::plotlyOutput("deep_rate") + ))))), + shiny::fluidRow( + tags$div( id = "deep_data2", + div(id = "id1", + shinyjqui::jqui_resizable(shinydashboard::box( + id = "test", + title = "DeepBGC comparison controls", + collapsible = TRUE, + shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), + # Score to use for thresholds + shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC"), + selected = "Activity score"), + # Chose step for barplot (as a threshold to draw a bar) + shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + ))) + )), + sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), + sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) + ), + shinydashboard::tabItem( + tabName = "gecco_sidemenu", + shiny::fluidRow( + tags$div( + id = "gecco_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "GECCO comparison", + collapsible = TRUE, + height = "500px", + shiny::plotOutput("gecco_barplot") + )) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "GECCO rate", + collapsible = TRUE, + plotly::plotlyOutput("gecco_rate") + )) + ), + ) + ), + shiny::fluidRow( + tags$div( + id = "gecco_data2", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "GECCO comparison controls", + collapsible = TRUE, + shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), + shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c( + "Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type"), selected = "avg_p"), - shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), - shiny::h3(id="data_filter_header_gecco","Gecco data filtering:"), - checkboxInput("hide_data_filter_gecco", "Hide Gecco data filtering options"), - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::h3(id="data_comparison_header","Comparison with DeepBGC plots:"), - shiny::checkboxInput("hide_data_comparison", "Hide DeepBGC data comparison options"), - shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), - # Score to use for thresholds - shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), - - # DeepBGC data filtering - shiny::h3(id="data_filter_header","DeepBGC data filtering:"), - shiny::checkboxInput("hide_data_filter", "Hide DeepBGC data filtering options"), - # Different score filtering. Remain >= of set threshold - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50), - - # Donwload currently used datasets - shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - - ), - - # Show plots - shiny::mainPanel( - # Define tabs and their correcponding plots - shiny::tabsetPanel( - shiny::tabPanel(title = "Compare data with DeepBGC", value = 1 ,shiny::plotOutput("deep_barplot",height = "500px"), plotly::plotlyOutput("deep_rate")), - shiny::tabPanel(title = "Compare data with Gecco", value = 5 ,shiny::plotOutput("gecco_barplot",height = "500px"), plotly::plotlyOutput("gecco_rate")), - shiny::tabPanel(title = "Annotation visualization and comparison", value = 4,plotly::plotlyOutput("deep_reference_2", height = "500px"), - plotly::plotlyOutput("deep_reference", height = "500px")), - shiny::tabPanel(title = "Biocircos plot", value = 2, BioCircos::BioCircosOutput("biocircos", height = "1000px"), DT::dataTableOutput("biocircos_legend")), - shiny::tabPanel(title = "Summarize interception", value = 3,plotly::plotlyOutput("barplot_rank", height = "600px"),shiny::tableOutput("group_table")), - type = "tabs", id = "main" + shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + )) + ) + ) + ), + sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), + sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) + ), + shinydashboard::tabItem( + tabName = "anno_sidemenu", + shiny::fluidRow( + tags$div( + id="anno_data1", + div( + id="id1", + shinydashboard::box( + title = "Annotations reference", + collapsible = TRUE, + shinyjqui::jqui_resizable(plotly::plotlyOutput("deep_reference_2")) + ) + ), + div( + id="id2", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Annotation comparison to the reference", + collapsible = TRUE, + height = "500px", + plotly::plotlyOutput("deep_reference") + )) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "anno_data2", + div( + id="id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Annotation to the reference comparison plot controls", + collapsible = TRUE, + shiny::selectInput("ref", "Choose reference data", choices = c(""), + selected = "") + )) + ) + ) + ), + sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), + sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) + ), + shinydashboard::tabItem( + tabName = "biocircos_sidemenu", + shiny::fluidRow( + tags$div( + id = "biocircos_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "Biocircos plot", + collapsible = TRUE, + width = 12, + height = "700px", + shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), + BioCircos::BioCircosOutput("biocircos") + )) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "biocircos_data2", + div( + id = "id1", + shiny::uiOutput("biocircos_coloring") + ), + div( + id="id2", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Biocircos options", + collapsible = T, + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') + )) + ) + ) + ), + sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), + sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) + ), + shinydashboard::tabItem( + tabName = "summarize_sidemenu", + shiny::fluidRow( + tags$div( + id="summarize_data1", + div( + id="id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Ranking barplot", + collapsible = TRUE, + height = "600px", + plotly::plotlyOutput("barplot_rank") + )) + ), + div( + id="id2", + shinyjqui::jqui_resizable( shinydashboard::box( + title = "Group table", + collapsible = TRUE, + height = "600px", + shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), + shiny::tableOutput("group_table") + )) + ) + ) + ), + sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) + ), + shinydashboard::tabItem( + tabName = "uploaddata_sidemenu", + shiny::fluidRow( + tags$div( + id="upload_data1", + div( + id = "id1", + shinydashboard::box( + title = "Upload Antismash data", + collapsible = TRUE, + shiny::fileInput("anti_data", + "Upload Antismash data", accept = list(".csv", ".json")) + ) + ), + div( + id = "id2", + shinydashboard::box( + title = "Upload PRISM data", + collapsible = TRUE, + shiny::fileInput("prism_data", + "Upload PRISM data", accept = list(".csv", ".json")) + ) + ), + div( + id = "id3", + shinydashboard::box( + title = "Upload SEMPI 2.0 data", + collapsible = TRUE, + shiny::fileInput("sempi_data", + "Upload SEMPI 2.0 data", accept = ".csv") + ) + ), + div( + id = "id4", + shinydashboard::box( + title = "Upload DeepBGC data", + collapsible = TRUE, + shiny::fileInput("deep_data", + "Upload DeepBGC data", accept = ".tsv") + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id="upload_data2", + div( + id = "id1", + shinydashboard::box( + title = "Upload Gecco data", + collapsible = TRUE, + shiny::fileInput("gecco_data", + "Upload Gecco data", accept = ".tsv") + ) + ), + div( + id = "id2", + shinydashboard::box( + title = "Upload RRE-Finder data", + collapsible = TRUE, + shiny::fileInput("rre_data", + "Upload RRE-Finder data") + ) + ), + div( + id = "id3", + shinydashboard::box( + title = "Upload ARTS data", + collapsible = TRUE, + shiny::fileInput("known_data", + "Upload ARTS knownhits data", accept = ".csv"), + shiny::fileInput("dup_data", + "Upload ARTS duptable data", accept = ".csv") + ) + ), + div( + id = "id4", + shinydashboard::box( + title = "Use Example data", + collapsible = TRUE, + shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), + shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) + ) + ) + ) + ), + sortable::sortable_js("upload_data1", options = sortable::sortable_options(swap = TRUE, group = "upload_data")), + sortable::sortable_js("upload_data2", options = sortable::sortable_options(swap = TRUE, group = "upload_data")) + ), + shinydashboard::tabItem( + tabName = "options_sidemenu", + shiny::fluidRow( + tags$div( + id="options_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Rename", + collapsible = TRUE, + shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + shiny::fileInput("rename_data", + "Upload renaming and coloring scheme", accept = ".csv"), + shiny::actionButton("rename", "Rename"), + shiny::actionButton("reset_name", "Reset") + )) + ), + div( + id = "id2", + shinyjqui::jqui_resizable( shinydashboard::box( + title = "DeepBGC filtering", + collapsible = TRUE, + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + )) + ), + div( + id = "id3", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "GECCO filtering", + collapsible = TRUE, + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + )) + ), + div( + id = "id4", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Prism supplement + ARTS options", + collapsible = TRUE, + shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + selected = "All") + )) + ), + div( + id = "id5", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Improve global visualization", + collapsible = TRUE, + shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), + shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") + )) + ), + div( + id = "id6", + shinyjqui::jqui_resizable(shinydashboard::box( + title = "Download data", + collapsible = TRUE, + shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) + )) + ) + ) + ), + sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE)) ) - ) + ) ) ) - # Define server logic server <- function(input, output, session) { ##--------------------------------------------------------------- ## Some lists of reactive values to listen later - ##--------------------------------------------------------------- check_to_rename <- shiny::reactive({list(input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco,input$anti_sco, input$prism_sco)}) + input$sempi_sco,input$anti_sco, input$prism_sco)}) biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name, vals$coloring_datatable - ) + ) }) inputData <- shiny::reactive({ list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, @@ -189,24 +439,24 @@ server <- function(input, output, session) { input$prot_filter_gecco ) }) %>% shiny::debounce(500) - + # Some dataframes that are used through the app + some vectors of untercepted values vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, - biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, - anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F - ) + biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F + ) vals$computed <- list( anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F @@ -219,7 +469,6 @@ server <- function(input, output, session) { colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) # Validation - check_if_column_exists <- function(data_names,column_name){ if (column_name %in% stringr::str_to_lower(data_names)){ if (F %in% grepl('rre', column_name)){ @@ -232,46 +481,46 @@ server <- function(input, output, session) { } } validate_basic_input <- function(data){ - data_names <- names(data) - if (!(check_if_column_exists(data_names, 'cluster'))){ - shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (!(check_if_column_exists(data_names, 'start'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'stop'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'type'))){ - return(FALSE) - } - if (length(unique(data$Cluster)) != length(data$Cluster)){ - shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ - shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") - return(FALSE) - } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ - shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") - data$Type[is.na(data$Type)] <- 'unknown' - data$Type["" %in% data$Type] <- 'unknown' - } - if (!(is.numeric(data$Cluster))){ - data$Cluster <- as.numeric(data$Cluster) - } - if (!(is.numeric(data$Start))){ - data$Start <- as.numeric(data$Start) - } - if (!(is.numeric(data$Stop))){ - data$Stop <- as.numeric(data$Stop) - } - if (!(is.character(data$Type))){ - data$Type <- as.character(data$Type) - } - return(list(TRUE, data)) + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'cluster'))){ + shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (!(check_if_column_exists(data_names, 'start'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'stop'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'type'))){ + return(FALSE) + } + if (length(unique(data$Cluster)) != length(data$Cluster)){ + shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ + shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") + return(FALSE) + } + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ + shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") + data$Type[is.na(data$Type)] <- 'unknown' + data$Type["" %in% data$Type] <- 'unknown' + } + if (!(is.numeric(data$Cluster))){ + data$Cluster <- as.numeric(data$Cluster) + } + if (!(is.numeric(data$Start))){ + data$Start <- as.numeric(data$Start) + } + if (!(is.numeric(data$Stop))){ + data$Stop <- as.numeric(data$Stop) + } + if (!(is.character(data$Type))){ + data$Type <- as.character(data$Type) + } + return(list(TRUE, data)) } validate_rre_input <- function(data){ data_names <- names(data) @@ -414,7 +663,7 @@ server <- function(input, output, session) { prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ x$orf }) @@ -493,7 +742,7 @@ server <- function(input, output, session) { score_c <- apply(vals$deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) deep_data_chromo <- vals$deep_data %>% dplyr::mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) # Cluster_type column. Here extract colnames, and assign max value to a new column deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] # If max score is under_threshold, print "under_threshold" @@ -503,8 +752,8 @@ server <- function(input, output, session) { biocircos_deep <- deep_data_chromo%>% dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% dplyr::filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) biocircos_deep['Start'] <- biocircos_deep$nucl_start biocircos_deep['Stop'] <- biocircos_deep$nucl_end biocircos_deep['Type'] <- biocircos_deep$product_class @@ -519,11 +768,11 @@ server <- function(input, output, session) { # Store master prism data in local variable gecco_data <- vals$gecco_data %>% dplyr::mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% dplyr::filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) return(gecco_data) } # Renaming the vector for inut$rename event @@ -535,7 +784,7 @@ server <- function(input, output, session) { renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) if( (length(renamed) >1) & (!( as.character(y) %in% names(vals$renaming_notification)))){ shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), - type = "warning", duration = NULL) + type = "warning", duration = NULL) shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) vals$renaming_notification[[as.character(y)]] <- renamed[[1]] } @@ -1064,54 +1313,54 @@ server <- function(input, output, session) { if (input$anti_data$type=="text/csv"){ anti_data <- read.csv(input$anti_data$datapath) }else{ - data <- rjson::fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - tolower(x$qualifiers$product) - } - }) - }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x + data <- rjson::fromJSON(file = input$anti_data$datapath) + types <- sapply(data$records, function(y){ + lapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + tolower(x$qualifiers$product) } }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - unlist(x$location) - } - }) - ) + }) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + location <- sapply(data$records, function(y){ + unlist(sapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + unlist(x$location) + } }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - tidyr::separate(split, c("Start", "Stop")) %>% - dplyr::transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - + ) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + } - + read_antismash(anti_data) - + }) shiny::observeEvent(input$sempi_data,{ @@ -1135,7 +1384,7 @@ server <- function(input, output, session) { disable_event_logic() data <- read.delim(input$known_data$datapath) - read_arts_knownhits(data) + read_arts_knownhits(data) }) shiny::observeEvent(input$dup_data, { @@ -1161,8 +1410,8 @@ server <- function(input, output, session) { shiny::observeEvent(input$deep_data, { - data <- read.delim(input$deep_data$datapath) - read_deep(data) + data <- read.delim(input$deep_data$datapath) + read_deep(data) }) shiny::observeEvent(input$rre_data, { @@ -1205,9 +1454,7 @@ server <- function(input, output, session) { shiny::observeEvent(vals$rre_data_input, { if (vals$rre_data_input == T){ - if (input$hide_viz == F){ - shinyjs::showElement(selector = "#rre_width") - } + shinyjs::showElement(selector = "#rre_width") } else{ shinyjs::hideElement(selector = "#rre_width") } @@ -1217,12 +1464,8 @@ server <- function(input, output, session) { shiny::observeEvent(vals$anti_data_input, { if (vals$anti_data_input == T){ - if (input$hide_anti == F){ - shinyjs::showElement(selector = "#anti_header") - shinyjs::showElement(selector = "#anti_hybrid") - } + shinyjs::showElement(selector = "#anti_hybrid") } else{ - shinyjs::hideElement(selector = "#anti_header") shinyjs::hideElement(selector = "#anti_hybrid") } }) @@ -1232,19 +1475,13 @@ server <- function(input, output, session) { # And if hide_viz == F, and prism_json, then # show width shiny::observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T){ - if (input$hide_anti == F){ - shinyjs::showElement(selector = "#prism_header") - shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp") - } + shinyjs::showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + shinyjs::showElement(selector = "#prism_supp") } - if (input$hide_viz == F){ - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp_data_input_width") - } + if (vals$prism_json == T){ + shinyjs::showElement(selector = "#prism_supp_data_input_width") } } else{ shinyjs::hideElement(selector = "#prism_header") @@ -1257,15 +1494,9 @@ server <- function(input, output, session) { shiny::observeEvent(vals$sempi_data_input, { if (vals$sempi_data_input == T){ - if (input$hide_anti == F){ - shinyjs::showElement(selector = "#sempi_header") - shinyjs::showElement(selector = "#sempi_hybrid") - } - if (input$hide_viz == F){ - shinyjs::showElement(selector = "#sempi_width") - } + shinyjs::showElement(selector = "#sempi_hybrid") + shinyjs::showElement(selector = "#sempi_width") } else{ - shinyjs::hideElement(selector = "#sempi_header") shinyjs::hideElement(selector = "#sempi_hybrid") shinyjs::hideElement(selector = "#sempi_width") } @@ -1274,7 +1505,6 @@ server <- function(input, output, session) { shiny::observeEvent(vals$deep_data_input,{ if (vals$deep_data_input == T){ - shinyjs::showElement(selector = "#hide_data_filter") shinyjs::showElement(selector = "#score_a") shinyjs::showElement(selector = "#score_d") shinyjs::showElement(selector = "#score_c") @@ -1282,9 +1512,7 @@ server <- function(input, output, session) { shinyjs::showElement(selector = "#biodomain_filter") shinyjs::showElement(selector = "#gene_filter") shinyjs::showElement(selector = "#cluster_type") - shinyjs::showElement(selector = "#data_filter_header") } else{ - shinyjs::hideElement(selector = "#hide_data_filter") shinyjs::hideElement(selector = "#score_a") shinyjs::hideElement(selector = "#score_d") shinyjs::hideElement(selector = "#score_c") @@ -1292,22 +1520,17 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#biodomain_filter") shinyjs::hideElement(selector = "#gene_filter") shinyjs::hideElement(selector = "#cluster_type") - shinyjs::hideElement(selector = "#data_filter_header") } }) # Show GECCO data options, if data is uploaded shiny::observeEvent(vals$gecco_data_input,{ if (vals$gecco_data_input == T){ - shinyjs::showElement(selector = "#data_filter_header_gecco") - shinyjs::showElement(selector = "#hide_data_filter_gecco") shinyjs::showElement(selector = "#score_average_gecco") shinyjs::showElement(selector = "#score_cluster_gecco") shinyjs::showElement(selector = "#domains_filter_gecco") shinyjs::showElement(selector = "#prot_filter_gecco") } else{ - shinyjs::hideElement(selector = "#data_filter_header_gecco") - shinyjs::hideElement(selector = "#hide_data_filter_gecco") shinyjs::hideElement(selector = "#score_average_gecco") shinyjs::hideElement(selector = "#score_cluster_gecco") shinyjs::hideElement(selector = "#domains_filter_gecco") @@ -1318,15 +1541,9 @@ server <- function(input, output, session) { shiny::observeEvent(vals$arts_data_input,{ if (vals$arts_data_input == T){ - if (input$hide_anti == F){ - shinyjs::showElement(selector = "#arts_header") - shinyjs::showElement(selector = "#dup_choice") - } - if (input$hide_viz == F){ - shinyjs::showElement(selector = "#arts_width") - } + shinyjs::showElement(selector = "#dup_choice") + shinyjs::showElement(selector = "#arts_width") } else { - shinyjs::hideElement(selector = "#arts_header") shinyjs::hideElement(selector = "#dup_choice") shinyjs::hideElement(selector = "#arts_width") } @@ -1336,83 +1553,49 @@ server <- function(input, output, session) { ##--------------------------------------------------------------- # Count data uploads, to show tabs and corresponding # options - shiny::observeEvent(vals$data_upload_count, { - - if (vals$data_upload_count <2){ - shiny::hideTab("main", "2") - shiny::hideTab("main", "3") - - }else if (vals$data_upload_count >=2){ - if (input$hide_summarize == F) { - shinyjs::showElement(selector = "#summarize") - shinyjs::showElement(selector = "#group_by") - shinyjs::showElement(selector = "#count_all") - } - if (input$hide_viz == F){ - shinyjs::showElement(selector = "#biocircos_color") - shinyjs::showElement(selector = "#label_color") - shinyjs::showElement(selector = "#label_color_class") + + output$deep_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("dashboard")) } - shiny::showTab("main", "2") - shiny::showTab("main", "3") + } + }) + output$gecco_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - shiny::showTab("main", "5") - shinyjs::showElement(selector = "#data_comparison_header_gecco") - shinyjs::showElement(selector = "#hide_data_comparison_gecco") + shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco_sidemenu", icon = icon("th")) shinyjs::showElement(selector = "#ref_comparison_gecco") - shinyjs::showElement(selector = "#score_type_gecco") - shinyjs::showElement(selector = "#plot_step_gecco") - shinyjs::showElement(selector = "#plot_start_gecco") - } else { - shiny::hideTab("main", "5") - shinyjs::hideElement(selector = "#data_comparison_header_gecco") - shinyjs::hideElement(selector = "#hide_data_comparison_gecco") - shinyjs::hideElement(selector = "#ref_comparison_gecco") - shinyjs::hideElement(selector = "#score_type_gecco") - shinyjs::hideElement(selector = "#plot_step_gecco") - shinyjs::hideElement(selector = "#plot_start_gecco") - if ((vals$gecco_data_input == T) & (vals$data_upload_count >1)){ - shiny::showNotification(paste("It seems that you would like to compare the GECCO data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) - } - } - if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shiny::showTab("main", "1") - shinyjs::showElement(selector = "#data_comparison_header") - shinyjs::showElement(selector = "#ref_comparison") - shinyjs::showElement(selector = "#hide_data_comparison") - shinyjs::showElement(selector = "#score_type") - shinyjs::showElement(selector = "#plot_step") - shinyjs::showElement(selector = "#plot_start") - } else { - shiny::hideTab("main", "1") - shinyjs::hideElement(selector = "#data_comparison_header") - shinyjs::hideElement(selector = "#ref_comparison") - shinyjs::hideElement(selector = "#score_type") - shinyjs::hideElement(selector = "#hide_data_comparison") - shinyjs::hideElement(selector = "#plot_step") - shinyjs::hideElement(selector = "#plot_start") - if ((vals$deep_data_input == T) & (vals$data_upload_count >1)){ - shiny::showNotification(paste("It seems that you would like to compare the DeepBGC data to the reference (in a new tab)? Please upload Antismash, SEMPI or PRISM datasets to do that."), type = "message", duration=10) - } } } - if (vals$data_upload_count <1){ - shiny::hideTab("main", "4") - shiny::hideTab(inputId = "main", target = "5") - shiny::hideTab(inputId = "main", target = "1") - shinyjs::hideElement(selector = "#genes_on_chr") - shinyjs::hideElement(selector = "#hide_genes_on_chr") - shinyjs::hideElement(selector = "#ref") - }else{ - shiny::showTab("main", "4") - if (input$hide_genes_on_chr == F){ - shinyjs::showElement(selector = "#genes_on_chr") - shinyjs::showElement(selector = "#hide_genes_on_chr") - shinyjs::showElement(selector = "#ref") - } - + + }) + output$anno_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=1){ + shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("th")) + } + }) + output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("th")) } }) + output$summarize_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("th")) + } + }) + output$biocircos_coloring <- renderUI({ + if (input$ShowBiocircosColoring == T){ + shinydashboardPlus::box( + title = "Biocircos coloring scheme", + closable = TRUE, + collapsible = TRUE, + DT::dataTableOutput("biocircos_legend") + ) + } + }) + # Logic show/hide selectinput in Link coloring in # Biocircos shiny::observeEvent(input$label_color_class, { @@ -1446,7 +1629,7 @@ server <- function(input, output, session) { vals$anti_data$Type2 <- vals$anti_type } - }) + }) shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { hybrid_col <- function(data){ @@ -1511,13 +1694,13 @@ server <- function(input, output, session) { prism_data <- read.csv("prism_data.csv") vals$prism_type <- rename_vector(prism_data, rename_data) prism_data['Type2'] <- vals$prism_type - vals$prism_data <- prism_data + vals$prism_data <- prism_data } - shinyjs::showElement(selector = "#reset_name") - shinyjs::hideElement(selector = "#rename") + shinyjs::showElement(selector = "#reset_name") + shinyjs::hideElement(selector = "#rename") vals$renamed <- T shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) - }) + }) # When the new data is uploaded and renamed # is T, then rename data on upload shiny::observeEvent(check_to_rename(), { @@ -1564,8 +1747,8 @@ server <- function(input, output, session) { shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) } - shinyjs::showElement(selector = "#rename") - shinyjs::hideElement(selector = "#reset_name") + shinyjs::showElement(selector = "#rename") + shinyjs::hideElement(selector = "#reset_name") vals$renamed <- F }) # Read the uploaded renaming scheme csv @@ -1578,295 +1761,9 @@ server <- function(input, output, session) { colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") }) - # What to do, if hide uploads scheme is triggered - shiny::observeEvent(input$hide_uploads, { - - if (input$hide_uploads == T){ - shinyjs::hideElement(selector = "#anti_data") - shinyjs::hideElement(selector = "#anti_header_upload") - shinyjs::hideElement(selector = "#prism_header_upload") - shinyjs::hideElement(selector = "#prism_data") - shinyjs::hideElement(selector = "#sempi_header_upload") - shinyjs::hideElement(selector = "#sempi_data") - shinyjs::hideElement(selector = "#deep_header_upload") - shinyjs::hideElement(selector = "#deep_data") - shinyjs::hideElement(selector = "#gecco_header_upload") - shinyjs::hideElement(selector = "#gecco_data") - shinyjs::hideElement(selector = "#rre_header_upload") - shinyjs::hideElement(selector = "#rre_data") - shinyjs::hideElement(selector = "#chr_len") - shinyjs::hideElement(selector = "#arts_header_upload") - shinyjs::hideElement(selector = "#known_data") - shinyjs::hideElement(selector = "#dup_data") - shinyjs::hideElement(selector = "#anti_sco") - shinyjs::hideElement(selector = "#prism_sco") - shinyjs::hideElement(selector = "#arts_sco") - shinyjs::hideElement(selector = "#rre_sco") - shinyjs::hideElement(selector = "#sempi_sco") - shinyjs::hideElement(selector = "#deep_sco") - shinyjs::hideElement(selector = "#gecco_sco") - }else { - shinyjs::showElement(selector = "#anti_data") - shinyjs::showElement(selector = "#anti_header_upload") - shinyjs::showElement(selector = "#prism_header_upload") - shinyjs::showElement(selector = "#prism_data") - shinyjs::showElement(selector = "#sempi_header_upload") - shinyjs::showElement(selector = "#sempi_data") - shinyjs::showElement(selector = "#deep_header_upload") - shinyjs::showElement(selector = "#deep_data") - shinyjs::showElement(selector = "#gecco_header_upload") - shinyjs::showElement(selector = "#gecco_data") - shinyjs::showElement(selector = "#rre_header_upload") - shinyjs::showElement(selector = "#rre_data") - shinyjs::showElement(selector = "#chr_len") - shinyjs::showElement(selector = "#arts_header_upload") - shinyjs::showElement(selector = "#known_data") - shinyjs::showElement(selector = "#dup_data") - shinyjs::showElement(selector = "#anti_sco") - shinyjs::showElement(selector = "#prism_sco") - shinyjs::showElement(selector = "#arts_sco") - shinyjs::showElement(selector = "#rre_sco") - shinyjs::showElement(selector = "#sempi_sco") - shinyjs::showElement(selector = "#deep_sco") - shinyjs::showElement(selector = "#gecco_sco") - } - }) - # What to do, if hide data options scheme is triggered - shiny::observeEvent(input$hide_anti, { - - if (input$hide_anti== T){ - shinyjs::hideElement(selector = "#anti_header") - shinyjs::hideElement(selector = "#anti_hybrid") - shinyjs::hideElement(selector = "#sempi_header") - shinyjs::hideElement(selector = "#sempi_hybrid") - shinyjs::hideElement(selector = "#prism_header") - shinyjs::hideElement(selector = "#prism_hybrid") - shinyjs::hideElement(selector = "#prism_supp") - shinyjs::hideElement(selector = "#arts_header") - shinyjs::hideElement(selector = "#dup_choice") - }else{ - if (vals$anti_data_input == T){ - shinyjs::showElement(selector = "#anti_header") - shinyjs::showElement(selector = "#anti_hybrid") - } else{ - shinyjs::hideElement(selector = "#anti_header") - shinyjs::hideElement(selector = "#anti_hybrid") - } - if (vals$prism_data_input == T){ - shinyjs::showElement(selector = "#prism_header") - shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp") - } - } else { - shinyjs::hideElement(selector = "#prism_header") - shinyjs::hideElement(selector = "#prism_hybrid") - shinyjs::hideElement(selector = "#prism_supp") - } - if (vals$sempi_data_input == T){ - shinyjs::showElement(selector = "#sempi_header") - shinyjs::showElement(selector = "#sempi_hybrid") - } else { - shinyjs::hideElement(selector = "#sempi_header") - shinyjs::hideElement(selector = "#sempi_hybrid") - } - if (vals$arts_data_input == T){ - shinyjs::showElement(selector = "#arts_header") - shinyjs::showElement(selector = "#dup_choice") - } else{ - shinyjs::hideElement(selector = "#arts_header") - shinyjs::hideElement(selector = "#dup_choice") - } - } - }) - # What to do, if hide annotation plot options scheme is triggered - shiny::observeEvent(input$hide_genes_on_chr, { - - if (input$hide_genes_on_chr == T){ - shinyjs::hideElement(selector = "#ref") - } else { - if (vals$data_upload_count > 0){ - shinyjs::showElement(selector = "#ref") - } else { - shinyjs::hideElement(selector = "#genes_on_chr") - shinyjs::hideElement(selector = "#ref") - } - } - }) - # What to do, if hide summarize tab options scheme is triggered - shiny::observeEvent(input$hide_summarize, { - - if (input$hide_summarize == T){ - shinyjs::hideElement(selector = "#group_by") - shinyjs::hideElement(selector = "#count_all") - } else { - if (vals$data_upload_count > 1){ - shinyjs::showElement(selector = "#group_by") - shinyjs::showElement(selector = "#count_all") - } else { - shinyjs::hideElement(selector = "#summarize") - shinyjs::hideElement(selector = "#group_by") - shinyjs::hideElement(selector = "#count_all") - } - - } - }) - # What to do, if hide improve visualization scheme is triggered - shiny::observeEvent(input$hide_viz, { - - if (input$hide_viz == T){ - shinyjs::hideElement(selector = "#rename_data") - shinyjs::hideElement(selector = "#rename") - shinyjs::hideElement(selector = "#reset_name") - shinyjs::hideElement(selector = "#rre_width") - shinyjs::hideElement(selector = "#biocircos_color") - shinyjs::hideElement(selector = "#label_color") - shinyjs::hideElement(selector = "#label_color_class") - shinyjs::hideElement(selector = "#ref_col_biocircos") - shinyjs::hideElement(selector = "#arts_header") - shinyjs::hideElement(selector = "#arts_width") - shinyjs::hideElement(selector = "#sempi_width") - shinyjs::hideElement(selector = "#prism_supp_data_input_width") - } else{ - shinyjs::showElement(selector = "#rename_data") - shinyjs::showElement(selector = "#rename") - shinyjs::showElement(selector = "#reset_name") - if (vals$rre_data_input == T){ - shinyjs::showElement(selector = "#rre_width") - } else { - shinyjs::hideElement(selector = "#rre_width") - } - if (vals$sempi_data_input == T){ - shinyjs::showElement(selector = "#sempi_width") - } else { - shinyjs::hideElement(selector = "#sempi_width") - } - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp_data_input_width") - } - else { - shinyjs::hideElement(selector = "#prism_supp_data_input_width") - } - if (vals$data_upload_count > 1){ - shinyjs::showElement(selector = "#biocircos_color") - shinyjs::showElement(selector = "#label_color") - shinyjs::showElement(selector = "#label_color_class") - } else { - shinyjs::hideElement(selector = "#biocircos_color") - shinyjs::hideElement(selector = "#label_color") - shinyjs::hideElement(selector = "#label_color_class") - } - if (input$label_color_class == "R"){ - shinyjs::showElement(selector = "#ref_col_biocircos") - } else { - shinyjs::hideElement(selector = "#ref_col_biocircos") - } - if (vals$arts_data_input == T){ - shinyjs::showElement(selector = "#arts_header") - shinyjs::showElement(selector = "#arts_width") - } else { - shinyjs::hideElement(selector = "#arts_header") - shinyjs::hideElement(selector = "#arts_width") - } - - } - }) + + # What to do, if hide DeepBGC comparison options scheme is triggered - shiny::observeEvent(input$hide_data_comparison, { - - if ((input$hide_data_comparison == T)){ - shinyjs::hideElement(selector = "#ref_comparison") - shinyjs::hideElement(selector = "#score_type") - shinyjs::hideElement(selector = "#plot_step") - shinyjs::hideElement(selector = "#plot_start") - } else if (vals$deep_data_input == T) { - shinyjs::showElement(selector = "#data_comparison_header") - shinyjs::showElement(selector = "#hide_data_comparison") - shinyjs::showElement(selector = "#ref_comparison") - shinyjs::showElement(selector = "#score_type") - shinyjs::showElement(selector = "#plot_step") - shinyjs::showElement(selector = "#plot_start") - } else { - shinyjs::hideElement(selector = "#data_comparison_header") - shinyjs::hideElement(selector = "#hide_data_comparison") - shinyjs::hideElement(selector = "#ref_comparison") - shinyjs::hideElement(selector = "#score_type") - shinyjs::hideElement(selector = "#plot_step") - shinyjs::hideElement(selector = "#plot_start") - } - }) - # What to do, if hide DeepBGC filtering options scheme is triggered - shiny::observeEvent(input$hide_data_filter, { - - if ((input$hide_data_filter == T)){ - shinyjs::hideElement(selector = "#score_a") - shinyjs::hideElement(selector = "#score_d") - shinyjs::hideElement(selector = "#score_c") - shinyjs::hideElement(selector = "#domains_filter") - shinyjs::hideElement(selector = "#biodomain_filter") - shinyjs::hideElement(selector = "#gene_filter") - shinyjs::hideElement(selector = "#cluster_type") - } else if (vals$deep_data_input == T){ - shinyjs::showElement(selector = "#score_a") - shinyjs::showElement(selector = "#score_d") - shinyjs::showElement(selector = "#score_c") - shinyjs::showElement(selector = "#domains_filter") - shinyjs::showElement(selector = "#biodomain_filter") - shinyjs::showElement(selector = "#gene_filter") - shinyjs::showElement(selector = "#cluster_type") - } else { - shinyjs::hideElement(selector = "#score_a") - shinyjs::hideElement(selector = "#score_d") - shinyjs::hideElement(selector = "#score_c") - shinyjs::hideElement(selector = "#domains_filter") - shinyjs::hideElement(selector = "#biodomain_filter") - shinyjs::hideElement(selector = "#gene_filter") - shinyjs::hideElement(selector = "#cluster_type") - } - }) - # What to do, if hide GECCO comparison options scheme is triggered - shiny::observeEvent(input$hide_data_comparison_gecco, { - if ((input$hide_data_comparison_gecco == T)){ - shinyjs::hideElement(selector = "#ref_comparison_gecco") - shinyjs::hideElement(selector = "#score_type_gecco") - shinyjs::hideElement(selector = "#plot_step_gecco") - shinyjs::hideElement(selector = "#plot_start_gecco") - } else if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinyjs::showElement(selector = "#data_comparison_header_gecco") - shinyjs::showElement(selector = "#hide_data_comparison_gecco") - shinyjs::showElement(selector = "#ref_comparison_gecco") - shinyjs::showElement(selector = "#score_type_gecco") - shinyjs::showElement(selector = "#plot_step_gecco") - shinyjs::showElement(selector = "#plot_start_gecco") - } else { - shinyjs::hideElement(selector = "#data_comparison_header_gecco") - shinyjs::hideElement(selector = "#hide_data_comparison_gecco") - shinyjs::hideElement(selector = "#ref_comparison_gecco") - shinyjs::hideElement(selector = "#score_type_gecco") - shinyjs::hideElement(selector = "#plot_step_gecco") - shinyjs::hideElement(selector = "#plot_start_gecco") - } - }) - # What to do, if hide GECCO filtering options scheme is triggered - shiny::observeEvent(input$hide_data_filter_gecco, { - - if ((input$hide_data_filter_gecco == T)){ - shinyjs::hideElement(selector = "#score_average_gecco") - shinyjs::hideElement(selector = "#score_cluster_gecco") - shinyjs::hideElement(selector = "#domains_filter_gecco") - shinyjs::hideElement(selector = "#prot_filter_gecco") - } else if (vals$gecco_data_input == T){ - shinyjs::showElement(selector = "#score_average_gecco") - shinyjs::showElement(selector = "#score_cluster_gecco") - shinyjs::showElement(selector = "#domains_filter_gecco") - shinyjs::showElement(selector = "#prot_filter_gecco") - } else { - shinyjs::hideElement(selector = "#score_average_gecco") - shinyjs::hideElement(selector = "#score_cluster_gecco") - shinyjs::hideElement(selector = "#domains_filter_gecco") - shinyjs::hideElement(selector = "#prot_filter_gecco") - } - }) ############################################################################ @@ -1960,7 +1857,7 @@ server <- function(input, output, session) { dplyr::select(Start,Stop) gecco_inter$seqnames <- "chr" } - + get_inter <- function(inter1, inter2){ query <- GenomicRanges::makeGRangesFromDataFrame(inter2) subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) @@ -1988,30 +1885,30 @@ server <- function(input, output, session) { } } - index_2 = index_2 +1 + index_2 = index_2 +1 } if (vals[[i]] == TRUE){ vals$computed[[j]] <- TRUE } index = index +1 } - - vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ - vals$inters_filtered <- inters - enable_event_logic() - } else{ - vals$need_filter <- T - vals$filter_data <- T - } - + + vals$inters <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ + vals$inters_filtered <- inters + enable_event_logic() + } else{ + vals$need_filter <- T + vals$filter_data <- T + } + }) # dplyr::filter ARTS, DeepBGC, GECCO interception data # and general dataframes to plot, if data filtering # options are triggered shiny::observeEvent({dynamicInput() to_debounce() - }, ignoreInit = T, priority = 4 ,{ + }, ignoreInit = T, priority = 4 ,{ shiny::req(vals$data_upload_count>=1) inters <- vals$inters if (vals$deep_data_input == TRUE){ @@ -2152,9 +2049,9 @@ server <- function(input, output, session) { rename_data <- vals$rename_data coloring_datatable <- vals$coloring_datatable - + index <- 1 - # browser() + # browser() for (upload in data_uploads){ if (vals[[upload]] == T){ # Store data in local variable @@ -2176,7 +2073,7 @@ server <- function(input, output, session) { } # Add to tracklist. Then it can be populated with links tracklist <- BioCircos::BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time @@ -2318,7 +2215,7 @@ server <- function(input, output, session) { } index <- index +1 } - + @@ -2331,15 +2228,15 @@ server <- function(input, output, session) { for (i in seq(1:dim(group_colors)[1])){ subset <- unname( which(label_color %in% group_colors$x[i])) tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) } } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) } else{ shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) } @@ -2642,7 +2539,7 @@ server <- function(input, output, session) { ### ### ############################################################################ ############################################################################ - + ##---------------------------------------------------------------- ## DeepBGC Comparison tab - ##---------------------------------------------------------------- @@ -2668,7 +2565,7 @@ server <- function(input, output, session) { deep_inter_1$score <- deep_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - + deep_inter <- deep_inter_1 %>% dplyr::filter(score>=dataframe_1/100) %>% dplyr::select(Start, Stop) @@ -2678,9 +2575,9 @@ server <- function(input, output, session) { # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'Antismash'){ + if (input$ref_comparison == 'Antismash'){ anti_inter <- shiny::isolate(vals$anti_data) %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == 'PRISM'){ anti_inter <- shiny::isolate(vals$prism_data) %>% @@ -2692,7 +2589,7 @@ server <- function(input, output, session) { anti_inter$seqnames <- "chr" } - + # Get the interception of two matrices if (length(deep_inter$Start) > 0) { @@ -2719,7 +2616,7 @@ server <- function(input, output, session) { cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") } - + # Combine all vectors into one dataframe fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), cols, c(used_antismash, inter_bgc, len_new)) @@ -2766,40 +2663,40 @@ server <- function(input, output, session) { test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) } else if (input$ref_comparison == 'PRISM'){ data <- vals$prism_data title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) } else if (input$ref_comparison == 'SEMPI'){ data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) } # Calculate rates and plot interactive plot with plotly plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) }) ##---------------------------------------------------------------- ## GECCO Comparison tab - @@ -2824,7 +2721,7 @@ server <- function(input, output, session) { # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix gecco_inter <- gecco_inter_1 %>% dplyr::filter(score>=dataframe_1/100) %>% @@ -2923,40 +2820,40 @@ server <- function(input, output, session) { test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) } else if (input$ref_comparison_gecco == 'PRISM'){ data <- vals$prism_data title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) } else if (input$ref_comparison_gecco == 'SEMPI'){ data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") test <- test %>% dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) } # Calculate rates and plot interactive plot with plotly plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) }) ##--------------------------------------------------------------- ## Annotation on chromosome plots' tab - @@ -2975,7 +2872,7 @@ server <- function(input, output, session) { vals$can_plot_deep_ref_2 == F rename_y_axis <- shiny::isolate(vals$rename_y_axis) data <- NULL - + index <- 1 for (upload in data_uploads){ if (is.null(data)){ @@ -2997,66 +2894,66 @@ server <- function(input, output, session) { if (vals$anti_data_input == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$deep_data_input == TRUE){ if (dim(vals$seg_df_ref_d)[1] >0) { - plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) + plot <- plot + + ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) } } if (vals$rre_data_input == TRUE){ if (vals$rre_more == T){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) } else { plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) } } if (vals$prism_data_input == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$sempi_data_input == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (input$prism_supp == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) } if (vals$arts_data_input == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) } if (vals$gecco_data_input == TRUE){ if (dim(vals$seg_df_ref_g)[1] >0) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } } to_plot <- plotly::ggplotly(plot + - ggplot2::scale_y_discrete(labels = rename_y_axis) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip ) to_plot %>% plotly::layout(legend=list(font = list( family = "sans-serif", @@ -3089,7 +2986,7 @@ server <- function(input, output, session) { }) - + # Updating values in Datatable on edit shiny::observeEvent(input$biocircos_legend_cell_edit, { if (input$biocircos_legend_cell_edit$col[1] == 0){ @@ -3117,7 +3014,7 @@ server <- function(input, output, session) { prism_supp_count <- NULL arts_count <- NULL gecco_count <- NULL - + if (is.null(vals$inters_filtered)){ inters <- vals$inters } else { @@ -3127,7 +3024,7 @@ server <- function(input, output, session) { ranking_data <- NULL for (upload in data_uploads){ if (vals[[upload]] == T){ - counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) + counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) # Check if ID is in dataframe and if it is - extract all information about to the local dataframe anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] # Add prefices to the ID to plot for a barplot. @@ -3149,18 +3046,18 @@ server <- function(input, output, session) { index <- index +1 } - + # Fix column names in the master dataframe colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") # Plot plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + - ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = ggplot2::element_text(size = 14)) + - ggplot2::ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") - ) - + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14)) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), + tooltip=c("Type", "Start", "Stop") + ) + }) @@ -3168,7 +3065,7 @@ server <- function(input, output, session) { output$group_table <- shiny::renderTable({ shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) + shiny::req(vals$can_plot_group_table == T) refine_unique <- function(data){ n <- tail(data, n=1) @@ -3199,7 +3096,7 @@ server <- function(input, output, session) { selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) colnames(df_test) <- abbr - df_test[[input$group_by]]<- vals[[selected_dataframe]]$Cluster + df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster df_test[nrow(df_test)+1,] <- NA } for (i in seq(1:length(data_uploads))){ @@ -3221,12 +3118,12 @@ server <- function(input, output, session) { } excluded_names <- abbr[abbr != as.name(abbr[i])] data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), - b=paste(eval(as.name(excluded_names[2])), collapse=","), - c=paste(eval(as.name(excluded_names[3])), collapse=","), - d=paste(eval(as.name(excluded_names[4])), collapse=","), - e=paste(eval(as.name(excluded_names[5])), collapse=","), - f=paste(eval(as.name(excluded_names[6])), collapse=","), - g=paste(eval(as.name(excluded_names[7])), collapse=",")) + b=paste(eval(as.name(excluded_names[2])), collapse=","), + c=paste(eval(as.name(excluded_names[3])), collapse=","), + d=paste(eval(as.name(excluded_names[4])), collapse=","), + e=paste(eval(as.name(excluded_names[5])), collapse=","), + f=paste(eval(as.name(excluded_names[6])), collapse=","), + g=paste(eval(as.name(excluded_names[7])), collapse=",")) colnames(data) <- c(abbr[i], excluded_names) for (p in abbr){ data[[p]] <- gsub('NA,|,NA', '', data[[p]]) @@ -3284,7 +3181,6 @@ server <- function(input, output, session) { #create the zip file from flst vector zip(file, flst) }, contentType = "application/zip" ) - } # Run the application From 86eb2edb64b64fcfc32881199c3a2c8f6ced2376 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 20 Oct 2021 12:41:20 +0300 Subject: [PATCH 071/199] Added scrollbars to group_by table Former-commit-id: 5dbf198c0e8304e4dae6d9eff7280bc4a3f5c82f --- app.R | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/app.R b/app.R index aa59f58..79e3239 100755 --- a/app.R +++ b/app.R @@ -119,21 +119,23 @@ ui <- shinydashboard::dashboardPage( tags$div( id="anno_data1", div( - id="id1", - shinydashboard::box( + id="anno_div_1", + shinyjqui::jqui_resizable(shinydashboard::box( title = "Annotations reference", + id = "anno_box_1", + height = "100%", collapsible = TRUE, - shinyjqui::jqui_resizable(plotly::plotlyOutput("deep_reference_2")) - ) + plotly::plotlyOutput("deep_reference_2") + )) ), div( id="id2", shinyjqui::jqui_resizable(shinydashboard::box( title = "Annotation comparison to the reference", collapsible = TRUE, - height = "500px", + height = "100%", plotly::plotlyOutput("deep_reference") - )) + )), ) ) ), @@ -165,9 +167,8 @@ ui <- shinydashboard::dashboardPage( title = "Biocircos plot", collapsible = TRUE, width = 12, - height = "700px", shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), - BioCircos::BioCircosOutput("biocircos") + BioCircos::BioCircosOutput("biocircos", height = "900px") )) ) ) @@ -209,8 +210,7 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable(shinydashboard::box( title = "Ranking barplot", collapsible = TRUE, - height = "600px", - plotly::plotlyOutput("barplot_rank") + plotly::plotlyOutput("barplot_rank", height = "600px") )) ), div( @@ -218,7 +218,7 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable( shinydashboard::box( title = "Group table", collapsible = TRUE, - height = "600px", + style='overflow-x: scroll;height:700px;overflow-y: scroll;', shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), shiny::tableOutput("group_table") @@ -357,6 +357,7 @@ ui <- shinydashboard::dashboardPage( shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) )) ), + div( id = "id3", shinyjqui::jqui_resizable(shinydashboard::box( @@ -1557,7 +1558,9 @@ server <- function(input, output, session) { output$deep_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("dashboard")) + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("dashboard") + ) + } } }) @@ -1565,7 +1568,6 @@ server <- function(input, output, session) { if (vals$data_upload_count >=2){ if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco_sidemenu", icon = icon("th")) - shinyjs::showElement(selector = "#ref_comparison_gecco") } } @@ -2961,7 +2963,8 @@ server <- function(input, output, session) { color = "#000"), bordercolor = "#FFFFFF", borderwidth = 2, - title=list(text=' Cluster Types '))) + title=list(text=' Cluster Types ')), + autosize=TRUE) }) #%>% shiny::debounce(200) ##---------------------------------------------------------------- From c734eacb670d1930e0a98ef687644019194f5280 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 20 Oct 2021 12:48:06 +0300 Subject: [PATCH 072/199] Fix box resizebility. Also added heigth = 100% Former-commit-id: 0e6fab901fc6c139d97b4783de9f628db636dd85 --- app.R | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app.R b/app.R index 79e3239..d649ccd 100755 --- a/app.R +++ b/app.R @@ -37,14 +37,15 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable(shinydashboard::box( title = "DeepBGC comparison", collapsible = TRUE, - height = "500px", - shiny::plotOutput("deep_barplot") + height = "100%", + shiny::plotOutput("deep_barplot", height = "500px",) ))), div(id = "id2", shinyjqui::jqui_resizable(shinydashboard::box( title = "DeepBGC rate", collapsible = TRUE, - plotly::plotlyOutput("deep_rate") + height = "100%", + plotly::plotlyOutput("deep_rate", height = "500px",) ))))), shiny::fluidRow( tags$div( id = "deep_data2", @@ -77,8 +78,8 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable(shinydashboard::box( title = "GECCO comparison", collapsible = TRUE, - height = "500px", - shiny::plotOutput("gecco_barplot") + height = "100%", + shiny::plotOutput("gecco_barplot", height = "500px") )) ), div( @@ -86,7 +87,8 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable(shinydashboard::box( title = "GECCO rate", collapsible = TRUE, - plotly::plotlyOutput("gecco_rate") + height = "100%", + plotly::plotlyOutput("gecco_rate", height = "500px",) )) ), ) @@ -122,7 +124,6 @@ ui <- shinydashboard::dashboardPage( id="anno_div_1", shinyjqui::jqui_resizable(shinydashboard::box( title = "Annotations reference", - id = "anno_box_1", height = "100%", collapsible = TRUE, plotly::plotlyOutput("deep_reference_2") @@ -163,13 +164,13 @@ ui <- shinydashboard::dashboardPage( id = "biocircos_data1", div( id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinydashboardPlus::box( title = "Biocircos plot", collapsible = TRUE, width = 12, shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), BioCircos::BioCircosOutput("biocircos", height = "900px") - )) + ) ) ) ), @@ -182,7 +183,7 @@ ui <- shinydashboard::dashboardPage( ), div( id="id2", - shinyjqui::jqui_resizable(shinydashboard::box( + shinydashboard::box( title = "Biocircos options", collapsible = T, shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), @@ -193,7 +194,7 @@ ui <- shinydashboard::dashboardPage( ), selected = 'H'), shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') - )) + ) ) ) ), @@ -210,6 +211,7 @@ ui <- shinydashboard::dashboardPage( shinyjqui::jqui_resizable(shinydashboard::box( title = "Ranking barplot", collapsible = TRUE, + height = "100%", plotly::plotlyOutput("barplot_rank", height = "600px") )) ), @@ -219,6 +221,7 @@ ui <- shinydashboard::dashboardPage( title = "Group table", collapsible = TRUE, style='overflow-x: scroll;height:700px;overflow-y: scroll;', + height = "100%", shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), shiny::tableOutput("group_table") From 82510862b3f954682bad3057883a63ac292efc91 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 20 Oct 2021 15:37:15 +0300 Subject: [PATCH 073/199] Fix DeepBGC and Gecco filtering boxes showing after data upload Former-commit-id: 0b1992fd30fd6ced6efc68f49d6460e235997136 --- app.R | 159 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 80 insertions(+), 79 deletions(-) diff --git a/app.R b/app.R index d649ccd..904b31b 100755 --- a/app.R +++ b/app.R @@ -347,30 +347,12 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id2", - shinyjqui::jqui_resizable( shinydashboard::box( - title = "DeepBGC filtering", - collapsible = TRUE, - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - )) + shinyjqui::jqui_resizable(shiny::uiOutput("deep_filter_box")) ), div( id = "id3", - shinyjqui::jqui_resizable(shinydashboard::box( - title = "GECCO filtering", - collapsible = TRUE, - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - )) + shinyjqui::jqui_resizable(shiny::uiOutput("gecco_filter_box")) ), div( id = "id4", @@ -744,20 +726,38 @@ server <- function(input, output, session) { score_a <- apply(vals$deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) score_d <- apply(vals$deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) score_c <- apply(vals$deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - deep_data_chromo <- vals$deep_data %>% - dplyr::mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + if (is.null(input$cluster_type)){ + deep_data_chromo <- vals$deep_data %>% + dplyr::mutate(score = apply(vals$deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + score_d >= 50/100, num_domains >= 5, + num_bio_domains>=1, num_proteins>=1) + } else { + deep_data_chromo <- vals$deep_data %>% + dplyr::mutate(score = apply(vals$deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , + score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, + num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) + } + biocircos_deep['Start'] <- biocircos_deep$nucl_start biocircos_deep['Stop'] <- biocircos_deep$nucl_end biocircos_deep['Type'] <- biocircos_deep$product_class @@ -769,14 +769,23 @@ server <- function(input, output, session) { filter_gecco <- function(){ score_a_gecco <- apply(vals$gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) score_c_gecco <- apply(vals$gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - # Store master prism data in local variable - gecco_data <- vals$gecco_data %>% - dplyr::mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + if (is.null(input$score_cluster_gecco)){ + gecco_data <- vals$gecco_data %>% + dplyr::mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + num_domains >= 1, num_prot>=1) + } else{ + gecco_data <- vals$gecco_data %>% + dplyr::mutate(score = apply(vals$gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , + num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) + } return(gecco_data) } # Renaming the vector for inut$rename event @@ -1505,42 +1514,6 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#sempi_width") } }) - # Show DeepBGC options if data is available - shiny::observeEvent(vals$deep_data_input,{ - - if (vals$deep_data_input == T){ - shinyjs::showElement(selector = "#score_a") - shinyjs::showElement(selector = "#score_d") - shinyjs::showElement(selector = "#score_c") - shinyjs::showElement(selector = "#domains_filter") - shinyjs::showElement(selector = "#biodomain_filter") - shinyjs::showElement(selector = "#gene_filter") - shinyjs::showElement(selector = "#cluster_type") - } else{ - shinyjs::hideElement(selector = "#score_a") - shinyjs::hideElement(selector = "#score_d") - shinyjs::hideElement(selector = "#score_c") - shinyjs::hideElement(selector = "#domains_filter") - shinyjs::hideElement(selector = "#biodomain_filter") - shinyjs::hideElement(selector = "#gene_filter") - shinyjs::hideElement(selector = "#cluster_type") - } - }) - # Show GECCO data options, if data is uploaded - shiny::observeEvent(vals$gecco_data_input,{ - - if (vals$gecco_data_input == T){ - shinyjs::showElement(selector = "#score_average_gecco") - shinyjs::showElement(selector = "#score_cluster_gecco") - shinyjs::showElement(selector = "#domains_filter_gecco") - shinyjs::showElement(selector = "#prot_filter_gecco") - } else{ - shinyjs::hideElement(selector = "#score_average_gecco") - shinyjs::hideElement(selector = "#score_cluster_gecco") - shinyjs::hideElement(selector = "#domains_filter_gecco") - shinyjs::hideElement(selector = "#prot_filter_gecco") - } - }) # Ahow ARTS data options, if data is available shiny::observeEvent(vals$arts_data_input,{ @@ -1590,7 +1563,7 @@ server <- function(input, output, session) { shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("th")) } }) - output$biocircos_coloring <- renderUI({ + output$biocircos_coloring <- shiny::renderUI({ if (input$ShowBiocircosColoring == T){ shinydashboardPlus::box( title = "Biocircos coloring scheme", @@ -1600,6 +1573,34 @@ server <- function(input, output, session) { ) } }) + output$deep_filter_box <- shiny::renderUI({ + if (vals$deep_data_input == T){ + shinydashboard::box( + title = "DeepBGC filtering", + collapsible = TRUE, + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + } + }) + output$gecco_filter_box <- shiny::renderUI({ + if (vals$gecco_data_input == T){ + shinydashboard::box( + title = "GECCO filtering", + collapsible = TRUE, + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + } + }) # Logic show/hide selectinput in Link coloring in # Biocircos From b6bb3e5a7c566cd5bd1beb0b22daa43123875f6f Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 20 Oct 2021 15:59:48 +0300 Subject: [PATCH 074/199] Added icons for sidebar Former-commit-id: 7a08c516924cf6f3d51b446f29ae1c8dd37dd0f9 --- app.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app.R b/app.R index 904b31b..5f072b0 100755 --- a/app.R +++ b/app.R @@ -16,8 +16,8 @@ ui <- shinydashboard::dashboardPage( shinydashboard::sidebarMenu( tags$div( id="menu_items", - div(id = "id6",shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("th"))), - div(id = "id7",shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("th"))), + div(id = "id6",shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload"))), + div(id = "id7",shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs"))), div(id = "id1",shinydashboard::menuItemOutput("deep_sidemenu_out")), div(id = "id2",shinydashboard::menuItemOutput("gecco_sidemenu_out")), div(id = "id3",shinydashboard::menuItemOutput("anno_sidemenu_out")), @@ -1534,7 +1534,7 @@ server <- function(input, output, session) { output$deep_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("dashboard") + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("fab fa-dyalog") ) } From c9d92ec05081c2388b4d9d0e96879763dd487b8f Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Oct 2021 11:26:46 +0300 Subject: [PATCH 075/199] Added loaders, DeepBGC data validation and disconnect message Former-commit-id: d6ce1848b7034296e4aee6193f795a4df8bf133b --- app.R | 102 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 77 insertions(+), 25 deletions(-) diff --git a/app.R b/app.R index 5f072b0..048d7a9 100755 --- a/app.R +++ b/app.R @@ -9,6 +9,8 @@ # in one genome # library(magrittr) + +options(spinner.type=6) # Define UI ui <- shinydashboard::dashboardPage( shinydashboard::dashboardHeader(title = "BGCViz"), @@ -28,6 +30,19 @@ ui <- shinydashboard::dashboardPage( ), shinydashboard::dashboardBody( shinyjs::useShinyjs(), + shinydisconnect::disconnectMessage( + text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", + refresh = "Refresh", + background = "#FFFFFF", + colour = "#444444", + refreshColour = "#337AB7", + overlayColour = "#000000", + overlayOpacity = 0.6, + width = 450, + top = 50, + size = 22, + css = "" + ), shinydashboard::tabItems( shinydashboard::tabItem( tabName = "deep_sidemenu", shiny::fluidRow( @@ -38,14 +53,16 @@ ui <- shinydashboard::dashboardPage( title = "DeepBGC comparison", collapsible = TRUE, height = "100%", - shiny::plotOutput("deep_barplot", height = "500px",) + shiny::plotOutput("deep_barplot", height = "500px",) %>% + shinycssloaders::withSpinner() ))), div(id = "id2", shinyjqui::jqui_resizable(shinydashboard::box( title = "DeepBGC rate", collapsible = TRUE, height = "100%", - plotly::plotlyOutput("deep_rate", height = "500px",) + plotly::plotlyOutput("deep_rate", height = "500px",) %>% + shinycssloaders::withSpinner() ))))), shiny::fluidRow( tags$div( id = "deep_data2", @@ -79,7 +96,8 @@ ui <- shinydashboard::dashboardPage( title = "GECCO comparison", collapsible = TRUE, height = "100%", - shiny::plotOutput("gecco_barplot", height = "500px") + shiny::plotOutput("gecco_barplot", height = "500px") %>% + shinycssloaders::withSpinner() )) ), div( @@ -88,7 +106,8 @@ ui <- shinydashboard::dashboardPage( title = "GECCO rate", collapsible = TRUE, height = "100%", - plotly::plotlyOutput("gecco_rate", height = "500px",) + plotly::plotlyOutput("gecco_rate", height = "500px",)%>% + shinycssloaders::withSpinner() )) ), ) @@ -126,7 +145,8 @@ ui <- shinydashboard::dashboardPage( title = "Annotations reference", height = "100%", collapsible = TRUE, - plotly::plotlyOutput("deep_reference_2") + plotly::plotlyOutput("deep_reference_2") %>% + shinycssloaders::withSpinner() )) ), div( @@ -135,7 +155,8 @@ ui <- shinydashboard::dashboardPage( title = "Annotation comparison to the reference", collapsible = TRUE, height = "100%", - plotly::plotlyOutput("deep_reference") + plotly::plotlyOutput("deep_reference") %>% + shinycssloaders::withSpinner() )), ) ) @@ -169,7 +190,8 @@ ui <- shinydashboard::dashboardPage( collapsible = TRUE, width = 12, shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), - BioCircos::BioCircosOutput("biocircos", height = "900px") + BioCircos::BioCircosOutput("biocircos", height = "900px")%>% + shinycssloaders::withSpinner() ) ) ) @@ -212,7 +234,8 @@ ui <- shinydashboard::dashboardPage( title = "Ranking barplot", collapsible = TRUE, height = "100%", - plotly::plotlyOutput("barplot_rank", height = "600px") + plotly::plotlyOutput("barplot_rank", height = "600px")%>% + shinycssloaders::withSpinner() )) ), div( @@ -224,7 +247,8 @@ ui <- shinydashboard::dashboardPage( height = "100%", shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), - shiny::tableOutput("group_table") + shiny::tableOutput("group_table")%>% + shinycssloaders::withSpinner() )) ) ) @@ -457,12 +481,9 @@ server <- function(input, output, session) { # Validation check_if_column_exists <- function(data_names,column_name){ if (column_name %in% stringr::str_to_lower(data_names)){ - if (F %in% grepl('rre', column_name)){ - data_names[stringr::str_to_lower(data_names) %in% column_name] <- stringr::str_to_title(column_name) - } return(TRUE) } else { - shiny::showNotification( paste0("Data have no ", column_name, " column."),type = "warning") + shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") return(FALSE) } } @@ -514,7 +535,6 @@ server <- function(input, output, session) { return(FALSE) } if (F %in% grepl("__", data$Gene.name)){ - shiny::showNotification( paste0("Gene.name column contain no '__' delimiter. Please refer to the documentation on how to prepare RRE-Finder data"),type = "error") return(FALSE) } if (!(check_if_column_exists(data_names, 'e.value'))){ @@ -551,6 +571,33 @@ server <- function(input, output, session) { } return(list(TRUE, data)) } + validate_deep_input <- function(data){ + data_names <- names(data) + col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", + "bgc_candidate_id", "sequence_id") + num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") + if (!('cluster' %in% stringr::str_to_lower(data_names))){ + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names){ + if (!(check_if_column_exists(data_names, column_name))){ + return(FALSE) + } + if ( T %in% is.na(data[[column_name]])){ + return(FALSE) + } + if ( "" %in% data[[column_name]]){ + return(FALSE) + } + if (column_name %in% num_columns){ + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) + } # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -1177,11 +1224,17 @@ server <- function(input, output, session) { } } read_deep <- function(data){ - drop_cols <- c("Alkaloid", "NRP","Other","Polyketide","RiPP","Saccharide","Terpene") + res_validation <- validate_deep_input(data) + if (!(res_validation[[1]])){ + deep_data <- NULL + return(NULL) + } else{ + deep_data <- res_validation[[2]] + } + drop_cols <- c("nrp","polyketide") # Read data - deep_data <- data %>% - dplyr::mutate(pks=Polyketide, other = Other, nrps = NRP, alkaloid = Alkaloid, - terpene = Terpene, saccharide = Saccharide, ripp = RiPP) %>% + deep_data <- deep_data %>% + dplyr::mutate(pks=polyketide, nrps = nrp ) %>% dplyr::select(-dplyr::one_of(drop_cols)) # Add chromosome info column vals$deep_data <- deep_data @@ -1271,7 +1324,6 @@ server <- function(input, output, session) { }) shiny::observeEvent(input$gecco_sco,{ - gecco_data <- read.delim("example_data/sco_gecco.tsv") read_gecco(gecco_data) @@ -1286,7 +1338,6 @@ server <- function(input, output, session) { }) shiny::observeEvent(input$sempi_sco,{ - sempi_data <- read.csv("example_data/sco_sempi.csv") read_sempi(sempi_data) @@ -1543,24 +1594,24 @@ server <- function(input, output, session) { output$gecco_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco_sidemenu", icon = icon("th")) + shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco_sidemenu", icon = icon("fas fa-dragon")) } } }) output$anno_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=1){ - shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("th")) + shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) } }) output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ - shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("th")) + shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) } }) output$summarize_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ - shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("th")) + shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) } }) output$biocircos_coloring <- shiny::renderUI({ @@ -1569,7 +1620,8 @@ server <- function(input, output, session) { title = "Biocircos coloring scheme", closable = TRUE, collapsible = TRUE, - DT::dataTableOutput("biocircos_legend") + DT::dataTableOutput("biocircos_legend") %>% + shinycssloaders::withSpinner() ) } }) From a8dc9878e4763c44d87377d099c7f96b1cc9aa76 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Oct 2021 12:56:48 +0300 Subject: [PATCH 076/199] Added DeepBGC filtering to the sidebar Former-commit-id: 8fd8ae4e740db13cb428b4df3a6fa4b43500bbf5 --- app.R | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 80 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index 048d7a9..63f81fa 100755 --- a/app.R +++ b/app.R @@ -9,7 +9,7 @@ # in one genome # library(magrittr) - +#options(repos = BiocManager::repositories()) options(spinner.type=6) # Define UI ui <- shinydashboard::dashboardPage( @@ -1585,7 +1585,11 @@ server <- function(input, output, session) { output$deep_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = icon("fab fa-dyalog") + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep", icon = icon("fab fa-dyalog"), + shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = icon("far fa-chart-pie-alt")), + shinydashboard::menuItem("Filtering options", tabName = "deep_filter", + shiny::uiOutput("deep_filter_UI_sidemenu") + ) ) } @@ -1630,14 +1634,7 @@ server <- function(input, output, session) { shinydashboard::box( title = "DeepBGC filtering", collapsible = TRUE, - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + shiny::uiOutput("deep_filter_UI") ) } }) @@ -1653,6 +1650,79 @@ server <- function(input, output, session) { ) } }) + output$deep_filter_UI_sidemenu <- shiny::renderUI({ + shiny::tagList( + shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type_sidemenu","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + }) + output$deep_filter_UI <- shiny::renderUI({ + shiny::tagList( + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + }) + + + observeEvent(input$score_a,{ + + shiny::updateSliderInput(session, "score_a_sidemenu", NULL, input$score_a) + }) + observeEvent(input$score_d,{ + shiny::updateSliderInput(session, "score_d_sidemenu", NULL, input$score_d) + }) + observeEvent(input$score_c,{ + shiny::updateSliderInput(session, "score_c_sidemenu", NULL, input$score_c) + }) + observeEvent(input$domains_filter,{ + shiny::updateSliderInput(session, "domains_filter_sidemenu", NULL, input$domains_filter) + }) + observeEvent(input$biodomain_filter,{ + shiny::updateSliderInput(session, "biodomain_filter_sidemenu", NULL, input$biodomain_filter) + }) + observeEvent(input$gene_filter,{ + shiny::updateSliderInput(session, "gene_filter_sidemenu", NULL, input$gene_filter) + }) + observeEvent(input$cluster_type,{ + shiny::updateSliderInput(session, "cluster_type_sidemenu", NULL, input$cluster_type) + }) + observeEvent(input$score_a_sidemenu,{ + shiny::updateSliderInput(session, "score_a", NULL, input$score_a_sidemenu) + }) + observeEvent(input$score_d_sidemenu,{ + shiny::updateSliderInput(session, "score_d", NULL, input$score_d_sidemenu) + }) + observeEvent(input$score_c_sidemenu,{ + shiny::updateSliderInput(session, "score_c", NULL, input$score_c_sidemenu) + }) + observeEvent(input$domains_filter_sidemenu,{ + shiny::updateSliderInput(session, "domains_filter", NULL, input$domains_filter_sidemenu) + }) + observeEvent(input$biodomain_filter_sidemenu,{ + shiny::updateSliderInput(session, "biodomain_filter", NULL, input$biodomain_filter_sidemenu) + }) + observeEvent(input$gene_filter_sidemenu,{ + shiny::updateSliderInput(session, "gene_filter", NULL, input$gene_filter_sidemenu) + }) + observeEvent(input$cluster_type_sidemenu,{ + shiny::updateSliderInput(session, "cluster_type", NULL, input$cluster_type_sidemenu) + }) + + + + # Logic show/hide selectinput in Link coloring in # Biocircos From 10e77d5efaaa79003fac4f8ae331cf0b32539fbb Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Oct 2021 13:06:28 +0300 Subject: [PATCH 077/199] Fixed icons for DeepBGC menuItems Former-commit-id: b9793123167c69d8b16ee4217571000ad8e4618b --- app.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app.R b/app.R index 63f81fa..9abe2a2 100755 --- a/app.R +++ b/app.R @@ -1585,8 +1585,8 @@ server <- function(input, output, session) { output$deep_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep", icon = icon("fab fa-dyalog"), - shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = icon("far fa-chart-pie-alt")), + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), + shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), shinydashboard::menuItem("Filtering options", tabName = "deep_filter", shiny::uiOutput("deep_filter_UI_sidemenu") ) From bc263802fdc24af0f71cd2e75b7cece1cae164c1 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Oct 2021 13:14:07 +0300 Subject: [PATCH 078/199] Added GECCO filtering to the sidebar Former-commit-id: 015418c6640e0f6c84b4780b0e8efd0cc09bfd1b --- app.R | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/app.R b/app.R index 9abe2a2..e789f65 100755 --- a/app.R +++ b/app.R @@ -1587,7 +1587,7 @@ server <- function(input, output, session) { if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", tabName = "deep_filter", + shinydashboard::menuItem("Filtering options", tabName = "deep_filter", icon = shiny::icon("filter"), shiny::uiOutput("deep_filter_UI_sidemenu") ) ) @@ -1598,7 +1598,11 @@ server <- function(input, output, session) { output$gecco_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >=2){ if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco_sidemenu", icon = icon("fas fa-dragon")) + shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco", icon = icon("fas fa-dragon"), + shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", tabName = "gecco_filter", icon = shiny::icon("filter"), + shiny::uiOutput("gecco_filter_UI_sidemenu") + )) } } @@ -1643,10 +1647,7 @@ server <- function(input, output, session) { shinydashboard::box( title = "GECCO filtering", collapsible = TRUE, - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + shiny::uiOutput("gecco_filter_UI") ) } }) @@ -1674,6 +1675,22 @@ server <- function(input, output, session) { shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) ) }) + output$gecco_filter_UI_sidemenu <- shiny::renderUI({ + shiny::tagList( + shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + }) + output$gecco_filter_UI <- shiny::renderUI({ + shiny::tagList( + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + }) observeEvent(input$score_a,{ @@ -1721,6 +1738,31 @@ server <- function(input, output, session) { }) + observeEvent(input$score_average_gecco,{ + shiny::updateSliderInput(session, "score_average_gecco_sidemenu", NULL, input$score_average_gecco) + }) + observeEvent(input$score_cluster_gecco,{ + shiny::updateSliderInput(session, "score_cluster_gecco_sidemenu", NULL, input$score_cluster_gecco) + }) + observeEvent(input$domains_filter_gecco,{ + shiny::updateSliderInput(session, "domains_filter_gecco_sidemenu", NULL, input$domains_filter_gecco) + }) + observeEvent(input$prot_filter_gecco,{ + shiny::updateSliderInput(session, "prot_filter_gecco_sidemenu", NULL, input$prot_filter_gecco) + }) + observeEvent(input$score_average_gecco_sidemenu,{ + shiny::updateSliderInput(session, "score_average_gecco", NULL, input$score_average_gecco_sidemenu) + }) + observeEvent(input$score_cluster_gecco_sidemenu,{ + shiny::updateSliderInput(session, "score_cluster_gecco", NULL, input$score_cluster_gecco_sidemenu) + }) + observeEvent(input$domains_filter_gecco_sidemenu,{ + shiny::updateSliderInput(session, "domains_filter_gecco", NULL, input$domains_filter_gecco_sidemenu) + }) + observeEvent(input$prot_filter_gecco_sidemenu,{ + shiny::updateSliderInput(session, "prot_filter_gecco", NULL, input$prot_filter_gecco_sidemenu) + }) + From bb13c344bed42f5a02ac8bdb6a72dadd2c0df325 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 26 Oct 2021 13:56:36 +0300 Subject: [PATCH 079/199] Sidebar is not reorderable, but looks better Former-commit-id: 419d045ed80658195a3c857e511f32ef893e3437 --- app.R | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app.R b/app.R index e789f65..00583bb 100755 --- a/app.R +++ b/app.R @@ -15,20 +15,23 @@ options(spinner.type=6) ui <- shinydashboard::dashboardPage( shinydashboard::dashboardHeader(title = "BGCViz"), shinydashboard::dashboardSidebar( + width = 350, shinydashboard::sidebarMenu( - tags$div( id="menu_items", - div(id = "id6",shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload"))), - div(id = "id7",shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs"))), - div(id = "id1",shinydashboard::menuItemOutput("deep_sidemenu_out")), - div(id = "id2",shinydashboard::menuItemOutput("gecco_sidemenu_out")), - div(id = "id3",shinydashboard::menuItemOutput("anno_sidemenu_out")), - div(id = "id4",shinydashboard::menuItemOutput("biocircos_sidemenu_out")), - div(id = "id5",shinydashboard::menuItemOutput("summarize_sidemenu_out")) - )), - sortable::sortable_js("menu_items") + style = "white-space: normal;", + shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), + shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), + shinydashboard::menuItemOutput("deep_sidemenu_out"), + shinydashboard::menuItemOutput("gecco_sidemenu_out"), + shinydashboard::menuItemOutput("anno_sidemenu_out"), + shinydashboard::menuItemOutput("biocircos_sidemenu_out"), + shinydashboard::menuItemOutput("summarize_sidemenu_out") + ) ), shinydashboard::dashboardBody( + tags$head( + tags$style(HTML(".main-sidebar { font-size: 15px; }")) #change the font size to 20 + ), shinyjs::useShinyjs(), shinydisconnect::disconnectMessage( text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", From a37f2168cce3916967fdfb3fdaa5ab09518bdb21 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 29 Oct 2021 16:27:59 +0300 Subject: [PATCH 080/199] Move validation functions to a separate file Former-commit-id: 4f353b07be839c9e6dbffd8e2b8b5ef0eceb0020 --- app.R | 122 +----------------------------- src/validate_functions.R | 155 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 119 deletions(-) create mode 100644 src/validate_functions.R diff --git a/app.R b/app.R index 00583bb..9bdbf4c 100755 --- a/app.R +++ b/app.R @@ -482,125 +482,7 @@ server <- function(input, output, session) { colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) # Validation - check_if_column_exists <- function(data_names,column_name){ - if (column_name %in% stringr::str_to_lower(data_names)){ - return(TRUE) - } else { - shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") - return(FALSE) - } - } - validate_basic_input <- function(data){ - data_names <- names(data) - if (!(check_if_column_exists(data_names, 'cluster'))){ - shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (!(check_if_column_exists(data_names, 'start'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'stop'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'type'))){ - return(FALSE) - } - if (length(unique(data$Cluster)) != length(data$Cluster)){ - shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ - shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") - return(FALSE) - } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ - shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") - data$Type[is.na(data$Type)] <- 'unknown' - data$Type["" %in% data$Type] <- 'unknown' - } - if (!(is.numeric(data$Cluster))){ - data$Cluster <- as.numeric(data$Cluster) - } - if (!(is.numeric(data$Start))){ - data$Start <- as.numeric(data$Start) - } - if (!(is.numeric(data$Stop))){ - data$Stop <- as.numeric(data$Stop) - } - if (!(is.character(data$Type))){ - data$Type <- as.character(data$Type) - } - return(list(TRUE, data)) - } - validate_rre_input <- function(data){ - data_names <- names(data) - if (!(check_if_column_exists(data_names, 'gene.name'))){ - return(FALSE) - } - if (F %in% grepl("__", data$Gene.name)){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'e.value'))){ - return(FALSE) - } else { - data$E.value <- as.numeric(data$E.value) - } - if (!is.null(data$Probability)){ - if (!(check_if_column_exists(data_names, 'score'))){ - return(FALSE) - } else{ - data$Score <- as.numeric(data$Score) - } - if (!(check_if_column_exists(data_names, 'p.value'))){ - return(FALSE) - } else { - data$P.value <- as.numeric(data$P.value) - } - if (!(check_if_column_exists(data_names, 'rre.start'))){ - return(FALSE) - } else { - data$RRE.start <- as.numeric(data$RRE.start) - } - if (!(check_if_column_exists(data_names, 'rre.end'))){ - return(FALSE) - } else { - data$RRE.end <- as.numeric(data$RRE.end) - } - if (!(check_if_column_exists(data_names, 'probability'))){ - return(FALSE) - } else { - data$Probability <- as.numeric(data$Probability) - } - } - return(list(TRUE, data)) - } - validate_deep_input <- function(data){ - data_names <- names(data) - col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", - "bgc_candidate_id", "sequence_id") - num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") - if (!('cluster' %in% stringr::str_to_lower(data_names))){ - data$Cluster <- seq(1:dim(data)[1]) - } - for (column_name in col_names){ - if (!(check_if_column_exists(data_names, column_name))){ - return(FALSE) - } - if ( T %in% is.na(data[[column_name]])){ - return(FALSE) - } - if ( "" %in% data[[column_name]]){ - return(FALSE) - } - if (column_name %in% num_columns){ - names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name - data[[column_name]] <- as.numeric(data[[column_name]]) - } - } - return(list(TRUE, data)) - } + source("src/validate_functions.R") # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") @@ -909,6 +791,7 @@ server <- function(input, output, session) { # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: + read_antismash <- function(data){ anti_data <- data res_validation <- validate_basic_input(anti_data) @@ -954,6 +837,7 @@ server <- function(input, output, session) { read_gecco <- function(data){ # Add chromosome column gecco_data <- data + gecco_data$chromosome <- rep("G", length(gecco_data$type)) # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) diff --git a/src/validate_functions.R b/src/validate_functions.R new file mode 100644 index 0000000..91df855 --- /dev/null +++ b/src/validate_functions.R @@ -0,0 +1,155 @@ +# Basic check if column exists for undelying functions +check_if_column_exists <- function(data_names,column_name){ + if (column_name %in% stringr::str_to_lower(data_names)){ + return(TRUE) + } else { + shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") + return(FALSE) + } +} +# The functions below are used to validate if all the columns exist, +# that are used for underlying analysis. +# Also basic check of data is numeric is done for respective colunms + +# Validation of basic input like PRISM, Antismash and SEMPI +validate_basic_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'cluster'))){ + shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (!(check_if_column_exists(data_names, 'start'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'stop'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'type'))){ + return(FALSE) + } + if (length(unique(data$Cluster)) != length(data$Cluster)){ + shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ + shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") + return(FALSE) + } + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ + shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") + data$Type[is.na(data$Type)] <- 'unknown' + data$Type["" %in% data$Type] <- 'unknown' + } + if (!(is.numeric(data$Cluster))){ + data$Cluster <- as.numeric(data$Cluster) + } + if (!(is.numeric(data$Start))){ + data$Start <- as.numeric(data$Start) + } + if (!(is.numeric(data$Stop))){ + data$Stop <- as.numeric(data$Stop) + } + if (!(is.character(data$Type))){ + data$Type <- as.character(data$Type) + } + return(list(TRUE, data)) +} +#Validation of RRE-Finder input +validate_rre_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'gene.name'))){ + return(FALSE) + } + if (F %in% grepl("__", data$Gene.name)){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'e.value'))){ + return(FALSE) + } else { + data$E.value <- as.numeric(data$E.value) + } + if (!is.null(data$Probability)){ + if (!(check_if_column_exists(data_names, 'score'))){ + return(FALSE) + } else{ + data$Score <- as.numeric(data$Score) + } + if (!(check_if_column_exists(data_names, 'p.value'))){ + return(FALSE) + } else { + data$P.value <- as.numeric(data$P.value) + } + if (!(check_if_column_exists(data_names, 'rre.start'))){ + return(FALSE) + } else { + data$RRE.start <- as.numeric(data$RRE.start) + } + if (!(check_if_column_exists(data_names, 'rre.end'))){ + return(FALSE) + } else { + data$RRE.end <- as.numeric(data$RRE.end) + } + if (!(check_if_column_exists(data_names, 'probability'))){ + return(FALSE) + } else { + data$Probability <- as.numeric(data$Probability) + } + } + return(list(TRUE, data)) +} +#Validation of DeepBGC input +validate_deep_input <- function(data){ + data_names <- names(data) + col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", + "bgc_candidate_id", "sequence_id") + num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") + if (!('cluster' %in% stringr::str_to_lower(data_names))){ + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names){ + if (!(check_if_column_exists(data_names, column_name))){ + return(FALSE) + } + if ( T %in% is.na(data[[column_name]])){ + return(FALSE) + } + if ( "" %in% data[[column_name]]){ + return(FALSE) + } + if (column_name %in% num_columns){ + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) +} +#Validation of GECCO input +validate_gecco_input <- function(data){ + data_names <- names(data) + col_names <- c("start", "end","average_p", "max_p", "type","alkaloid_probability","polyketide_probability", + "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability", + "proteins","domains") + num_columns <- c("start", "end","average_p", "max_p", "alkaloid_probability","polyketide_probability", + "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability") + if (!('cluster' %in% stringr::str_to_lower(data_names))){ + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names){ + if (!(check_if_column_exists(data_names, column_name))){ + return(FALSE) + } + if ( T %in% is.na(data[[column_name]])){ + return(FALSE) + } + if ( "" %in% data[[column_name]]){ + return(FALSE) + } + if (column_name %in% num_columns){ + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) +} \ No newline at end of file From 7db60cd251a9042d7818f67a631f1d6662f46448 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 30 Oct 2021 10:04:31 +0300 Subject: [PATCH 081/199] Move helper functions to a separate file Former-commit-id: cd1a426e1bbd694ae0bbf6214ba7411852d86690 --- app.R | 337 ++++------------------------------------- src/helper_functions.R | 268 ++++++++++++++++++++++++++++++++ 2 files changed, 297 insertions(+), 308 deletions(-) create mode 100644 src/helper_functions.R diff --git a/app.R b/app.R index 9bdbf4c..48d2fb3 100755 --- a/app.R +++ b/app.R @@ -428,7 +428,8 @@ server <- function(input, output, session) { biocircos_listen <- shiny::reactive({ list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, - input$arts_width, input$sempi_width, input$rre_width, input$rename, input$reset_name, vals$coloring_datatable + input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, + vals$coloring_datatable ) }) @@ -443,7 +444,7 @@ server <- function(input, output, session) { }) deep_reference <- shiny::reactive({ list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width) + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data) }) to_debounce <- shiny::reactive({ @@ -512,262 +513,8 @@ server <- function(input, output, session) { } options(shiny.maxRequestSize=100*1024^2) # Small function to make integers zeros - is.integer0 <- function(x) - { - is.integer(x) && length(x) == 0L - } - # Fix the duplicates in PRISM-Supp data. Therefore 1 row for 1 orf - fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ - dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] - duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) - test_score <- test_score[order_vec] - to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] - test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] - iterate_one_more_time <- c() - should_iterate = F - for (i in seq(1:length(test_name))){ - if (length(dupl_names) == 0){ - should_iterate = F - break - } - if (test_name[i]==dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] - iterate_one_more_time <- c(iterate_one_more_time, i) - } - } - if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ - should_iterate = T - } - while (should_iterate == T) { - for (i in iterate_one_more_time){ - if (test_name[i] == dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] - } - if (length(dupl_names)==0){ - should_iterate = F - break - } - } - } - return(test_score) - } - # PRISM JSON data processing - process_prism_json_suppl <- function(data){ - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - - prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - y$name - }) - coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - y$coordinates - }) - - test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) - - - reg_genes <-data.frame(t(test_coords)) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - - test_name <- names[names %in% regul_genes_orfs] - ref_names <- test_name - order_vec <- order(match(regul_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) - - - res_genes <-data.frame(t(test_coords_res)) - - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - test_name <- names[names %in% resist_genes_orfs] - order_vec <- order(match(resist_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) - - final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - return(list(prism_data, final_reg)) - } - # Filtering the DeepBGC - filter_deepbgc <- function(){ - score_a <- apply(vals$deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(vals$deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(vals$deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(input$cluster_type)){ - deep_data_chromo <- vals$deep_data %>% - dplyr::mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - score_d >= 50/100, num_domains >= 5, - num_bio_domains>=1, num_proteins>=1) - } else { - deep_data_chromo <- vals$deep_data %>% - dplyr::mutate(score = apply(vals$deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= as.numeric(input$score_a )/ 100, score_c >=as.numeric(input$score_c)/100 , - score_d >= as.numeric(input$score_d)/100, num_domains >= input$domains_filter, - num_bio_domains>=input$biodomain_filter, num_proteins>=input$gene_filter) - } - - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - return(biocircos_deep) - } - # Filtering GECCO - filter_gecco <- function(){ - score_a_gecco <- apply(vals$gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(vals$gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(input$score_cluster_gecco)){ - gecco_data <- vals$gecco_data %>% - dplyr::mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - num_domains >= 1, num_prot>=1) - } else{ - gecco_data <- vals$gecco_data %>% - dplyr::mutate(score = apply(vals$gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(input$score_cluster_gecco)/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= as.numeric(input$score_average_gecco )/ 100, score_c >=as.numeric(input$score_cluster_gecco)/100 , - num_domains >= input$domains_filter_gecco, num_prot>=input$prot_filter_gecco) - } - return(gecco_data) - } - # Renaming the vector for inut$rename event - rename_vector <- function(data, renamed_dataframe){ - type <- stringr::str_split(data$Type2, "__") - type_2 <- sapply(type, function(x){ - sapply(x, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) - if( (length(renamed) >1) & (!( as.character(y) %in% names(vals$renaming_notification)))){ - shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), - type = "warning", duration = NULL) - shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) - vals$renaming_notification[[as.character(y)]] <- renamed[[1]] - } - renamed[[1]] - } else { - y - } - - }) - - }) - type_3 <- sapply(type_2, function(x){ - dupl <- x[!duplicated(x)] - paste(dupl, collapse = "__") - }) - type_4 <- sapply(type_3, function(y){ - if (y %in% as.character(renamed_dataframe$Code)){ - as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] - } else { - y - } - }) - return(as.character(type_4)) - } - # Adding the thickness to the visualization for SEMPI, - # ARTS, RRE, PRISN-Supp data - correct_width <- function(data, label){ - if ((label == 'SEMPI')&(input$sempi_width == T)){ - data$Stop <- data$Stop + 30000 - } else if ((label == 'PRISM-Supp')&(input$prism_supp_data_input_width == T)){ - data$Stop <- data$Stop + 20000 - } else if ((label == 'ARTS')&(input$arts_width == T)){ - data$Stop <- data$Stop + 30000 - } else if ((label == 'RRE-Finder')&(input$rre_width == T)){ - data$Stop <- data$Stop + 50000 - } - return(data) - } + source("src/helper_functions.R") + disable_event_logic <- function(){ vals$can_plot_deep_ref = F vals$can_plot_biocircos = F @@ -859,7 +606,7 @@ server <- function(input, output, session) { names(gecco_data)[names(gecco_data) == "start"] <- "Start" names(gecco_data)[names(gecco_data) == "end"] <- "Stop" vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco() + vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,input$score_cluster_gecco,input$score_average_gecco,input$domains_filter_gecco,input$prot_filter_gecco) # Save file write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) vals$gecco_data_input = TRUE @@ -1134,7 +881,7 @@ server <- function(input, output, session) { write.csv(vals$deep_data, "deep_data.csv", row.names = F) vals$deep_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 - vals$deep_data_filtered <- filter_deepbgc() + vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,input$cluster_type,input$score_a,input$score_c,input$score_d,input$domains_filter,input$biodomain_filter,input$gene_filter) vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") @@ -1668,18 +1415,6 @@ server <- function(input, output, session) { # Tou have duplicated code shiny::observeEvent(input$anti_hybrid, ignoreInit=T,{ - hybrid_col <- function(data){ - data_split <- stringr::str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - if (input$anti_hybrid==T){ vals$anti_data$Type2 <- hybrid_col(vals$anti_data) }else { @@ -1689,18 +1424,6 @@ server <- function(input, output, session) { }) shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { - hybrid_col <- function(data){ - data_split <- stringr::str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) - } - if (input$prism_hybrid==T){ vals$prism_data$Type2 <- hybrid_col(vals$prism_data) }else { @@ -1709,20 +1432,6 @@ server <- function(input, output, session) { }) shiny::observeEvent(input$sempi_hybrid, ignoreInit=T,{ - hybrid_col <- function(data){ - data_split <- stringr::str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else if (unlist(x) == 'nrps-pks'){ - "hybrid" - } else { - x - } - }) - return(types) - } - if (input$sempi_hybrid==T){ vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) }else { @@ -1735,21 +1444,27 @@ server <- function(input, output, session) { rename_data <- vals$rename_data if (vals$anti_data_input == T){ anti_data <- read.csv("anti_data.csv") - vals$anti_type <- rename_vector(anti_data, rename_data) + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] anti_data['Type2'] <- vals$anti_type vals$anti_data <- anti_data } if (vals$sempi_data_input == T){ sempi_data <- read.csv("sempi_data.csv") - vals$sempi_type <- rename_vector(sempi_data, rename_data) + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] sempi_data['Type2'] <- vals$sempi_type vals$sempi_data <- sempi_data } if(vals$prism_data_input == T){ prism_data <- read.csv("prism_data.csv") - vals$prism_type <- rename_vector(prism_data, rename_data) + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] prism_data['Type2'] <- vals$prism_type vals$prism_data <- prism_data } @@ -1767,21 +1482,27 @@ server <- function(input, output, session) { rename_data <- vals$rename_data if (vals$anti_data_input == T){ anti_data <- read.csv("anti_data.csv") - vals$anti_type <- rename_vector(anti_data, rename_data) + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] anti_data['Type2'] <- vals$anti_type vals$anti_data <- anti_data } if (vals$sempi_data_input == T){ sempi_data <- read.csv("sempi_data.csv") - vals$sempi_type <- rename_vector(sempi_data, rename_data) + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] sempi_data['Type2'] <- vals$sempi_type vals$sempi_data <- sempi_data } if(vals$prism_data_input == T){ prism_data <- read.csv("prism_data.csv") - vals$prism_type <- rename_vector(prism_data, rename_data) + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] prism_data['Type2'] <- vals$prism_type vals$prism_data <- prism_data } @@ -1970,7 +1691,7 @@ server <- function(input, output, session) { inters <- vals$inters if (vals$deep_data_input == TRUE){ if (vals$need_filter == F) { - biocircos_deep <- filter_deepbgc() + biocircos_deep <- filter_deepbgc(vals$deep_data,input$cluster_type,input$score_a,input$score_c,input$score_d,input$domains_filter,input$biodomain_filter,input$gene_filter) vals$deep_data_filtered <- biocircos_deep } else { biocircos_deep <- vals$deep_data_filtered @@ -1994,7 +1715,7 @@ server <- function(input, output, session) { } if (vals$gecco_data_input == TRUE){ if (vals$need_filter == F) { - gecco_data <- filter_gecco() + gecco_data <- filter_gecco(vals$gecco_data,input$score_cluster_gecco,input$score_average_gecco,input$domains_filter_gecco,input$prot_filter_gecco) vals$gecco_data_filtered <- gecco_data } else { gecco_data <- vals$gecco_data_filtered @@ -2070,7 +1791,7 @@ server <- function(input, output, session) { # Add arcs begin positions. (Start column) arcs_begin <- c(arcs_begin, biocircos_anti$Start) # Stop position of arcs. - biocircos_anti <- correct_width(biocircos_anti, name) + biocircos_anti <- correct_width(biocircos_anti, name,input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width) arcs_end <- c(arcs_end, biocircos_anti$Stop ) # Add Arcs labels. Can add only one label... arc_labels <- c(arc_labels, biocircos_anti$Type) @@ -2319,7 +2040,7 @@ server <- function(input, output, session) { for (upload in data_uploads){ if (vals[[upload]] == T){ data<- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index])) + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index],input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width)) } index <- index +1 } diff --git a/src/helper_functions.R b/src/helper_functions.R new file mode 100644 index 0000000..9de229e --- /dev/null +++ b/src/helper_functions.R @@ -0,0 +1,268 @@ +is.integer0 <- function(x) +{ + is.integer(x) && length(x) == 0L +} +# Fix the duplicates in PRISM-Supp data. Therefore 1 row for 1 orf +fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ + dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] + duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) + test_score <- test_score[order_vec] + to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] + test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] + iterate_one_more_time <- c() + should_iterate = F + for (i in seq(1:length(test_name))){ + if (length(dupl_names) == 0){ + should_iterate = F + break + } + if (test_name[i]==dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + iterate_one_more_time <- c(iterate_one_more_time, i) + } + } + if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ + should_iterate = T + } + while (should_iterate == T) { + for (i in iterate_one_more_time){ + if (test_name[i] == dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + } + if (length(dupl_names)==0){ + should_iterate = F + break + } + } + } + return(test_score) +} +# PRISM JSON data processing +process_prism_json_suppl <- function(data){ + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$name + }) + coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$coordinates + }) + + test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) + + + reg_genes <-data.frame(t(test_coords)) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + + test_name <- names[names %in% regul_genes_orfs] + ref_names <- test_name + order_vec <- order(match(regul_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) + test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) + + + res_genes <-data.frame(t(test_coords_res)) + + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + test_name <- names[names %in% resist_genes_orfs] + order_vec <- order(match(resist_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) + test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) + + final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + return(list(prism_data, final_reg)) +} +# Filtering the DeepBGC +filter_deepbgc <- function(deep_data,cluster_type,score_a,score_c,score_d,domains_filter,biodomain_filter,gene_filter){ + score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + if (is.null(cluster_type)){ + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + score_d >= 50/100, num_domains >= 5, + num_bio_domains>=1, num_proteins>=1) + } else { + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(cluster_type)/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= as.numeric(score_a )/ 100, score_c >=as.numeric(score_c)/100 , + score_d >= as.numeric(score_d)/100, num_domains >= domains_filter, + num_bio_domains>=biodomain_filter, num_proteins>=gene_filter) + } + + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + return(biocircos_deep) +} +# Filtering GECCO +filter_gecco <- function(gecco_data,score_cluster_gecco,score_average_gecco,domains_filter_gecco,prot_filter_gecco){ + score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + if (is.null(score_cluster_gecco)){ + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + num_domains >= 1, num_prot>=1) + } else{ + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(score_cluster_gecco)/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= as.numeric(score_average_gecco )/ 100, score_c >=as.numeric(score_cluster_gecco)/100 , + num_domains >= domains_filter_gecco, num_prot>=prot_filter_gecco) + } + return(gecco_data) +} +# Renaming the vector for inut$rename event +rename_vector <- function(data, renamed_dataframe, renaming_notification){ + type <- stringr::str_split(data$Type2, "__") + type_2 <- sapply(type, function(x){ + sapply(x, function(y){ + if (y %in% renamed_dataframe$Code){ + renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) + if( (length(renamed) >1) & (!( as.character(y) %in% names(renaming_notification)))){ + shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + type = "warning", duration = NULL) + shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) + renaming_notification[[as.character(y)]] <- renamed[[1]] + } + renamed[[1]] + } else { + y + } + + }) + + }) + type_3 <- sapply(type_2, function(x){ + dupl <- x[!duplicated(x)] + paste(dupl, collapse = "__") + }) + type_4 <- sapply(type_3, function(y){ + if (y %in% as.character(renamed_dataframe$Code)){ + as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] + } else { + y + } + }) + return(list(as.character(type_4), renaming_notification)) +} +# Adding the thickness to the visualization for SEMPI, +# ARTS, RRE, PRISN-Supp data +correct_width <- function(data, label, sempi_width,prism_supp_data_input_width,arts_width,rre_width){ + if ((label == 'SEMPI')&(sempi_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'PRISM-Supp')&(prism_supp_data_input_width == T)){ + data$Stop <- data$Stop + 20000 + } else if ((label == 'ARTS')&(arts_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'RRE-Finder')&(rre_width == T)){ + data$Stop <- data$Stop + 50000 + } + return(data) +} + +hybrid_col <- function(data){ + data_split <- stringr::str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) +} \ No newline at end of file From f7962b8646f714b692454bdc4f85cdcf733ad5e6 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 30 Oct 2021 11:44:25 +0300 Subject: [PATCH 082/199] Add close action to boxes and restore button Former-commit-id: 4070810c4e07b8e997e1ad15c0276edef6782306 --- app.R | 214 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 139 insertions(+), 75 deletions(-) diff --git a/app.R b/app.R index 48d2fb3..bf50ce1 100755 --- a/app.R +++ b/app.R @@ -12,21 +12,23 @@ library(magrittr) #options(repos = BiocManager::repositories()) options(spinner.type=6) # Define UI -ui <- shinydashboard::dashboardPage( - shinydashboard::dashboardHeader(title = "BGCViz"), - shinydashboard::dashboardSidebar( +ui <- shinydashboardPlus::dashboardPage( + shinydashboardPlus::dashboardHeader(title = "BGCViz"), + shinydashboardPlus::dashboardSidebar( width = 350, shinydashboard::sidebarMenu( - id="menu_items", - style = "white-space: normal;", - shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), - shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), - shinydashboard::menuItemOutput("deep_sidemenu_out"), - shinydashboard::menuItemOutput("gecco_sidemenu_out"), - shinydashboard::menuItemOutput("anno_sidemenu_out"), - shinydashboard::menuItemOutput("biocircos_sidemenu_out"), - shinydashboard::menuItemOutput("summarize_sidemenu_out") - ) + id="menu_items", + style = "white-space: normal;", + shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), + shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), + shinydashboard::menuItemOutput("deep_sidemenu_out"), + shinydashboard::menuItemOutput("gecco_sidemenu_out"), + shinydashboard::menuItemOutput("anno_sidemenu_out"), + shinydashboard::menuItemOutput("biocircos_sidemenu_out"), + shinydashboard::menuItemOutput("summarize_sidemenu_out"), + shinydashboard::menuItem(tabName = "restore_boxes", + actionButton("restore_box", "Restore all boxes", class = "bg-success")) + ) ), shinydashboard::dashboardBody( tags$head( @@ -52,17 +54,20 @@ ui <- shinydashboard::dashboardPage( tags$div( id = "deep_data1", div(id = "id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "DeepBGC comparison", - collapsible = TRUE, + id = "deep_comparison_box", + collapsible = TRUE, + closable = TRUE, height = "100%", shiny::plotOutput("deep_barplot", height = "500px",) %>% shinycssloaders::withSpinner() ))), div(id = "id2", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "DeepBGC rate", - collapsible = TRUE, + id = "deep_rate_box", + collapsible = TRUE, height = "100%", plotly::plotlyOutput("deep_rate", height = "500px",) %>% shinycssloaders::withSpinner() @@ -70,10 +75,11 @@ ui <- shinydashboard::dashboardPage( shiny::fluidRow( tags$div( id = "deep_data2", div(id = "id1", - shinyjqui::jqui_resizable(shinydashboard::box( - id = "test", + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "DeepBGC comparison controls", - collapsible = TRUE, + id = "deep_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), # Score to use for thresholds shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", @@ -82,7 +88,7 @@ ui <- shinydashboard::dashboardPage( selected = "Activity score"), # Chose step for barplot (as a threshold to draw a bar) shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) ))) )), sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), @@ -95,9 +101,11 @@ ui <- shinydashboard::dashboardPage( id = "gecco_data1", div( id = "id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO comparison", - collapsible = TRUE, + id = "gecco_comparison_box", + collapsible = TRUE, + closable = TRUE, height = "100%", shiny::plotOutput("gecco_barplot", height = "500px") %>% shinycssloaders::withSpinner() @@ -105,9 +113,11 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id2", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO rate", - collapsible = TRUE, + id = "gecco_rate_box", + collapsible = TRUE, + closable = TRUE, height = "100%", plotly::plotlyOutput("gecco_rate", height = "500px",)%>% shinycssloaders::withSpinner() @@ -120,16 +130,18 @@ ui <- shinydashboard::dashboardPage( id = "gecco_data2", div( id = "id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO comparison controls", - collapsible = TRUE, + id = "gecco_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c( "Average p-value" = "avg_p", "Cluster_type score" = "Cluster_Type"), selected = "avg_p"), shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0), + shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) )) ) ) @@ -144,19 +156,23 @@ ui <- shinydashboard::dashboardPage( id="anno_data1", div( id="anno_div_1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Annotations reference", + id = "annotation_reference_box", height = "100%", - collapsible = TRUE, + collapsible = TRUE, + closable = TRUE, plotly::plotlyOutput("deep_reference_2") %>% shinycssloaders::withSpinner() )) ), div( id="id2", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Annotation comparison to the reference", - collapsible = TRUE, + id = "annotation_reference_comparison_box", + collapsible = TRUE, + closable = TRUE, height = "100%", plotly::plotlyOutput("deep_reference") %>% shinycssloaders::withSpinner() @@ -169,9 +185,11 @@ ui <- shinydashboard::dashboardPage( id = "anno_data2", div( id="id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Annotation to the reference comparison plot controls", - collapsible = TRUE, + id = "annotation_reference_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, shiny::selectInput("ref", "Choose reference data", choices = c(""), selected = "") )) @@ -190,7 +208,9 @@ ui <- shinydashboard::dashboardPage( id = "id1", shinydashboardPlus::box( title = "Biocircos plot", - collapsible = TRUE, + id = "biocircos_plot_box", + collapsible = TRUE, + closable = TRUE, width = 12, shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), BioCircos::BioCircosOutput("biocircos", height = "900px")%>% @@ -208,9 +228,11 @@ ui <- shinydashboard::dashboardPage( ), div( id="id2", - shinydashboard::box( + shinydashboardPlus::box( title = "Biocircos options", - collapsible = T, + collapsible = TRUE, + closable = TRUE, + id = "biocircos_controls_box", shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", @@ -233,9 +255,11 @@ ui <- shinydashboard::dashboardPage( id="summarize_data1", div( id="id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Ranking barplot", - collapsible = TRUE, + id = "ranking_barplot_box", + collapsible = TRUE, + closable = TRUE, height = "100%", plotly::plotlyOutput("barplot_rank", height = "600px")%>% shinycssloaders::withSpinner() @@ -243,9 +267,11 @@ ui <- shinydashboard::dashboardPage( ), div( id="id2", - shinyjqui::jqui_resizable( shinydashboard::box( + shinyjqui::jqui_resizable( shinydashboardPlus::box( title = "Group table", - collapsible = TRUE, + id = "group_table_box", + collapsible = TRUE, + closable = TRUE, style='overflow-x: scroll;height:700px;overflow-y: scroll;', height = "100%", shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), @@ -265,36 +291,44 @@ ui <- shinydashboard::dashboardPage( id="upload_data1", div( id = "id1", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload Antismash data", - collapsible = TRUE, + id = "upload_anti_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("anti_data", "Upload Antismash data", accept = list(".csv", ".json")) ) ), div( id = "id2", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload PRISM data", - collapsible = TRUE, + id = "upload_prism_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("prism_data", "Upload PRISM data", accept = list(".csv", ".json")) ) ), div( id = "id3", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload SEMPI 2.0 data", - collapsible = TRUE, + id = "upload_sempi_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("sempi_data", "Upload SEMPI 2.0 data", accept = ".csv") ) ), div( id = "id4", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload DeepBGC data", - collapsible = TRUE, + id = "upload_deep_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("deep_data", "Upload DeepBGC data", accept = ".tsv") ) @@ -306,27 +340,33 @@ ui <- shinydashboard::dashboardPage( id="upload_data2", div( id = "id1", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload Gecco data", - collapsible = TRUE, + id = "upload_gecco_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("gecco_data", "Upload Gecco data", accept = ".tsv") ) ), div( id = "id2", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload RRE-Finder data", - collapsible = TRUE, + id = "upload_rre_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("rre_data", "Upload RRE-Finder data") ) ), div( id = "id3", - shinydashboard::box( + shinydashboardPlus::box( title = "Upload ARTS data", - collapsible = TRUE, + id = "upload_arts_box", + collapsible = TRUE, + closable = TRUE, shiny::fileInput("known_data", "Upload ARTS knownhits data", accept = ".csv"), shiny::fileInput("dup_data", @@ -335,9 +375,11 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id4", - shinydashboard::box( + shinydashboardPlus::box( title = "Use Example data", - collapsible = TRUE, + id = "use_example_data_box", + collapsible = TRUE, + closable = TRUE, shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), @@ -360,9 +402,11 @@ ui <- shinydashboard::dashboardPage( id="options_data1", div( id = "id1", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Rename", - collapsible = TRUE, + id = "rename_box", + collapsible = TRUE, + closable = TRUE, shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), @@ -383,9 +427,11 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id4", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Prism supplement + ARTS options", - collapsible = TRUE, + id = "prism_supplement_arts_box", + collapsible = TRUE, + closable = TRUE, shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), selected = "All") @@ -393,9 +439,11 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id5", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Improve global visualization", - collapsible = TRUE, + id = "improve_visualization_box", + collapsible = TRUE, + closable = TRUE, shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), @@ -404,9 +452,11 @@ ui <- shinydashboard::dashboardPage( ), div( id = "id6", - shinyjqui::jqui_resizable(shinydashboard::box( + shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "Download data", - collapsible = TRUE, + id = "download_data_box", + collapsible = TRUE, + closable = TRUE, shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) )) ) @@ -417,7 +467,6 @@ ui <- shinydashboard::dashboardPage( ) ) ) - # Define server logic server <- function(input, output, session) { ##--------------------------------------------------------------- @@ -1261,7 +1310,7 @@ server <- function(input, output, session) { shinydashboardPlus::box( title = "Biocircos coloring scheme", closable = TRUE, - collapsible = TRUE, + collapsible = TRUE, DT::dataTableOutput("biocircos_legend") %>% shinycssloaders::withSpinner() ) @@ -1269,18 +1318,22 @@ server <- function(input, output, session) { }) output$deep_filter_box <- shiny::renderUI({ if (vals$deep_data_input == T){ - shinydashboard::box( - title = "DeepBGC filtering", - collapsible = TRUE, - shiny::uiOutput("deep_filter_UI") - ) + shinydashboardPlus::box( + title = "DeepBGC filtering", + id = "deep_filtering_box", + collapsible = TRUE, + closable = TRUE, + shiny::uiOutput("deep_filter_UI") + ) } }) output$gecco_filter_box <- shiny::renderUI({ if (vals$gecco_data_input == T){ - shinydashboard::box( + shinydashboardPlus::box( title = "GECCO filtering", - collapsible = TRUE, + id = "gecco_filtering_box", + collapsible = TRUE, + closable = TRUE, shiny::uiOutput("gecco_filter_UI") ) } @@ -1397,7 +1450,18 @@ server <- function(input, output, session) { shiny::updateSliderInput(session, "prot_filter_gecco", NULL, input$prot_filter_gecco_sidemenu) }) - + shiny::observeEvent(input$restore_box,{ + box_ids <- c("deep_comparison_box", "deep_rate_box","deep_comparison_controls_box","gecco_comparison_box", + "gecco_rate_box","gecco_comparison_controls_box","annotation_reference_box","annotation_reference_comparison_box", + "annotation_reference_comparison_controls_box","biocircos_plot_box","biocircos_controls_box", + "ranking_barplot_box","group_table_box","upload_anti_box","upload_prism_box", + "upload_sempi_box","upload_deep_box","upload_gecco_box","upload_rre_box","upload_arts_box", + "use_example_data_box","rename_box","prism_supplement_arts_box", "improve_visualization_box", + "download_data_box","gecco_filtering_box","deep_filtering_box") + for (id in box_ids){ + shinydashboardPlus::updateBox(id, action = "restore") + } + }) # Logic show/hide selectinput in Link coloring in From 283ed3c9c9a66677f41fed0e6fbbc37ebd20d2f8 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 08:29:24 +0200 Subject: [PATCH 083/199] move biocircos, deep_reference and group_rable functions into separate files Former-commit-id: f80d1fd9647e6e67e7f772cd6f1c16ad95d5e27d --- app.R | 338 ++------------------------------- src/biocircos_functions.R | 118 ++++++++++++ src/deep_reference_functions.R | 190 ++++++++++++++++++ src/group_table_functions.R | 14 ++ 4 files changed, 334 insertions(+), 326 deletions(-) create mode 100644 src/biocircos_functions.R create mode 100644 src/deep_reference_functions.R create mode 100644 src/group_table_functions.R diff --git a/app.R b/app.R index bf50ce1..7d84627 100755 --- a/app.R +++ b/app.R @@ -1847,33 +1847,7 @@ server <- function(input, output, session) { shiny::req(vals$data_upload_count >=2) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_biocircos == T) - initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ){ - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[[name]] <- vals$chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - biocircos_anti <- correct_width(biocircos_anti, name,input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width) - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((input$biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% coloring_datatable$x$data$Name){ - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] - } else { - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] - } - }) - } else { - arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) - } - + source("src/biocircos_functions.R") #BioCircos! Biocircos_chromosomes <- list() arcs_chromosomes <- c() @@ -1897,7 +1871,8 @@ server <- function(input, output, session) { for (upload in data_uploads){ if (vals[[upload]] == T){ # Store data in local variable - init_data <- initialize_biocircos(vals[[data_to_use[index]]], soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data ) + corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) + init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color , coloring_datatable) #Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes <- init_data[[1]] #Add arcs. Quantity of arcs is length of dataframes @@ -1933,93 +1908,6 @@ server <- function(input, output, session) { # ----------------------------------------- - add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class){ - inter_s_rre_n <- data1_inter - inter_rre_s <- data2_inter - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) - #browser() - if (!is.null(inter_rre_s)){ - if (class == 'P'){ - subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - } - } - } - } else if (class == 'H'){ - if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else { - label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } - }else if (class == 'R'){ - if (data2_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else if (data1_label == input$ref_col_biocircos){ - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else{ - label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) - } - } else { - label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) - } - } - return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) - } data_uploads_2 <- data_uploads soft_2 <- soft_namings soft_names_2 <- soft_names @@ -2034,7 +1922,7 @@ server <- function(input, output, session) { if (vals[[upload]] == T){ for (upload2 in data_uploads_2){ if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ - output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class) + output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -2099,6 +1987,7 @@ server <- function(input, output, session) { } else { inters <- vals$inters_filtered } + source("src/deep_reference_functions.R") # GENERATE DATA index <- 1 for (upload in data_uploads){ @@ -2111,202 +2000,13 @@ server <- function(input, output, session) { lett <- rev(LETTERS)[1:9] - simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T){ - if (inter== T){ - data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] - } else{ - data <- df - } - - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) - } - - geom_anti <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_deep <- function(data){ - ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - geom_rre <- function(data){ - if (vals$rre_more == T){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) - } - } - geom_sempi <- function(data){ - - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - geom_prism_supp <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - geom_arts <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) - } - geom_gecco <- function(data){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", "Num_domains", "Num_proteins", "Average_p", "Max_p") - add_sempi <- function(seg_df, soft_namings, df, inter = T){ - - return(seg_df) - } - add_arts <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] - }else{ - subset_df <- df - } - seg_df$Hit = subset_df$Hit - seg_df$xend = as.numeric(subset_df$Stop) - seg_df$Core = subset_df$Core - seg_df$Count = subset_df$Count - seg_df$E_value = subset_df$Evalue - seg_df$Bitscore = subset_df$Bitscore - seg_df$Model = subset_df$Model - return(seg_df) - } - add_prism_supp <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] - }else{ - subset_df <- df - } - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Name = subset_df$Name - seg_df$Full_name = subset_df$Full_name - return(seg_df) - } - add_deep <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] - }else{ - subset_df <- df - } - seg_df$num_domains = subset_df$num_domains - seg_df$deepbgc_score = subset_df$deepbgc_score - seg_df$activity = subset_df$product_activity - return(seg_df) - } - add_rre <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] - }else{ - subset_df <- df - } - if (vals$rre_more == T){ - seg_df$xend=as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Stop = subset_df$Stop - seg_df$E_value = subset_df$E.value - seg_df$P_value = subset_df$P.value - seg_df$RRE_start = subset_df$RRE.start - seg_df$RRE_stop = subset_df$RRE.end - seg_df$Probability = subset_df$Probability - } else { - seg_df$xend=subset_df$Stop - seg_df$E_value = subset_df$E.value - } - - return(seg_df) - } - add_gecco <- function(seg_df, soft_namings, df, inter=T){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] - }else{ - subset_df <- df - } - seg_df$Num_proteins = subset_df$num_prot - seg_df$Num_domains = subset_df$num_domains - seg_df$Average_p = subset_df$average_p - seg_df$Max_p = subset_df$max_p - return(seg_df) - } - - add_more_annot <- function(seg_df, plot, soft_names, index){ - if (dim(seg_df)[1] > 0){ - if (soft_names[index] == "anti"){ - plot <- plot + geom_anti(seg_df) - } else if (soft_names[index] == "sempi") { - plot <- plot + geom_sempi(seg_df) - } - else if (soft_names[index] == "prism") { - plot <- plot + geom_prism(seg_df) - } - else if (soft_names[index] == "prism_supp") { - plot <- plot + geom_prism_supp(seg_df) - } - else if (soft_names[index] == "arts") { - plot <- plot + geom_arts(seg_df) - } - else if (soft_names[index] == "deep") { - plot <- plot + geom_deep(seg_df) - } - else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df) - } else if (soft_names[index] == "gecco") { - plot <- plot+geom_gecco(seg_df) - } - return(plot) - } else{ - return(plot) - } - } - - define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T){ - if (inter == F){ - soft_major <- "Not applicable" - } - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ - seg_df <- add_prism_supp(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ - seg_df <- add_arts(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ - seg_df <- add_deep(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ - seg_df <- add_gecco(seg_df, soft_major, df, inter) - } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ - seg_df <- add_rre(seg_df, soft_major, df, inter) - }else if ((soft_names[index] == "sempi")& (soft_names[index] != soft_major)){ - seg_df <- add_sempi(seg_df, soft_major, df, inter) - } - return(seg_df) - } # MAKE COMPUTATIONS sup_index <- 1 @@ -2321,14 +2021,14 @@ server <- function(input, output, session) { soft_lttrs <- soft_lttrs[-1] if (vals[[upload]] == T){ soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F) + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F,inters) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more,inters) seg_ref <- seg_ref_g if (input$ref == soft_namings[sup_index]){ shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref) + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more) soft_let <- abbr[sup_index] lettrs <- lett[2:length(lett)] labels_1 <- list() @@ -2336,10 +2036,10 @@ server <- function(input, output, session) { for (i in data_uploads){ if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major,inter = T, inters) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df,inter = T, vals$rre_more, inters) labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index) + plot <- add_more_annot(seg_df, plot, soft_names, index, vals$rre_more) } index = index +1 @@ -2909,21 +2609,7 @@ server <- function(input, output, session) { shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_group_table == T) - - refine_unique <- function(data){ - n <- tail(data, n=1) - data <- head(data, -1) - n_list <- stringr::str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) - res <- sapply(out, function(x){ - if (x==F){ - x - } - }) - - return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) - } - + source("src/group_table_functions.R") if (is.null(vals$inters_filtered)){ inters <- vals$inters } else { diff --git a/src/biocircos_functions.R b/src/biocircos_functions.R new file mode 100644 index 0000000..e209374 --- /dev/null +++ b/src/biocircos_functions.R @@ -0,0 +1,118 @@ + +# Function to initialize biocircos chromosomes +initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable){ + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[[name]] <- chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% coloring_datatable$x$data$Name){ + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] + } else { + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + } + }) + } else { + arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) +} + + + +# Adding correct data to the plot +add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable){ + inter_s_rre_n <- data1_inter + inter_rre_s <- data2_inter + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) + #browser() + if (!is.null(inter_rre_s)){ + if (class == 'P'){ + subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + if (length(label_color) != 0){ + for (t in seq(1:length(label_color))){ + if (!is.null(subset_vec[t])){ + if (subset_vec[t] == F){ + label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + } + } + } + } else if (class == 'H'){ + if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else { + label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } + }else if (class == 'R'){ + if (data2_label == ref_col_biocircos){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else if (data1_label == ref_col_biocircos){ + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else{ + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + } + } else { + label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + } + } + return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) +} \ No newline at end of file diff --git a/src/deep_reference_functions.R b/src/deep_reference_functions.R new file mode 100644 index 0000000..8477514 --- /dev/null +++ b/src/deep_reference_functions.R @@ -0,0 +1,190 @@ +# Simple segment dataframe generation + +simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T, inters){ + if (inter== T){ + data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] + } else{ + data <- df + } + + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df) +} + +# Geom generating functions +geom_anti <- function(data, rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +geom_prism <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +geom_deep <- function(data,rre_more){ + ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) +} +geom_rre <- function(data, rre_more){ + if (rre_more == T){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } +} +geom_sempi <- function(data,rre_more){ + + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +geom_prism_supp <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) +} +geom_arts <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) +} +geom_gecco <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) +} + +# Functions to add more information to segment datadrame + +add_arts <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] + }else{ + subset_df <- df + } + seg_df$Hit = subset_df$Hit + seg_df$xend = as.numeric(subset_df$Stop) + seg_df$Core = subset_df$Core + seg_df$Count = subset_df$Count + seg_df$E_value = subset_df$Evalue + seg_df$Bitscore = subset_df$Bitscore + seg_df$Model = subset_df$Model + return(seg_df) +} +add_prism_supp <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] + }else{ + subset_df <- df + } + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Name = subset_df$Name + seg_df$Full_name = subset_df$Full_name + return(seg_df) +} +add_deep <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] + }else{ + subset_df <- df + } + seg_df$num_domains = subset_df$num_domains + seg_df$deepbgc_score = subset_df$deepbgc_score + seg_df$activity = subset_df$product_activity + return(seg_df) +} +add_rre <- function(seg_df, soft_namings, df, inter=T, rre_more,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] + }else{ + subset_df <- df + } + if (rre_more == T){ + seg_df$xend=as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Stop = subset_df$Stop + seg_df$E_value = subset_df$E.value + seg_df$P_value = subset_df$P.value + seg_df$RRE_start = subset_df$RRE.start + seg_df$RRE_stop = subset_df$RRE.end + seg_df$Probability = subset_df$Probability + } else { + seg_df$xend=subset_df$Stop + seg_df$E_value = subset_df$E.value + } + + return(seg_df) +} +add_gecco <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] + }else{ + subset_df <- df + } + seg_df$Num_proteins = subset_df$num_prot + seg_df$Num_domains = subset_df$num_domains + seg_df$Average_p = subset_df$average_p + seg_df$Max_p = subset_df$max_p + return(seg_df) +} + +add_more_annot <- function(seg_df, plot, soft_names, index, rre_more){ + if (dim(seg_df)[1] > 0){ + if (soft_names[index] == "anti"){ + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } + else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } + else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } + else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } + else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } + else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df,rre_more) + } else if (soft_names[index] == "gecco") { + plot <- plot+geom_gecco(seg_df) + } + return(plot) + } else{ + return(plot) + } +} + + +define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T, rre_more,inters){ + if (inter == F){ + soft_major <- "Not applicable" + } + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ + seg_df <- add_prism_supp(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ + seg_df <- add_arts(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ + seg_df <- add_deep(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ + seg_df <- add_gecco(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ + seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more,inters) + } + return(seg_df) +} \ No newline at end of file diff --git a/src/group_table_functions.R b/src/group_table_functions.R new file mode 100644 index 0000000..885b623 --- /dev/null +++ b/src/group_table_functions.R @@ -0,0 +1,14 @@ +# Refining unique values for table to out in one row +refine_unique <- function(data){ + n <- tail(data, n=1) + data <- head(data, -1) + n_list <- stringr::str_split(n, ",") + out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) + res <- sapply(out, function(x){ + if (x==F){ + x + } + }) + + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) +} From 120c913dbea6896dc00351921920e630a095d802 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 08:52:31 +0200 Subject: [PATCH 084/199] Add draggable events for Annotation on chromosome and group_table plots Former-commit-id: 4857f3f02c57ca1bc1f5103bc59a6fdcf3bdf7e2 --- app.R | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/app.R b/app.R index 7d84627..17cefdc 100755 --- a/app.R +++ b/app.R @@ -156,7 +156,9 @@ ui <- shinydashboardPlus::dashboardPage( id="anno_data1", div( id="anno_div_1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinyjqui::jqui_resizable( + shinyjqui::jqui_draggable( + shinydashboardPlus::box( title = "Annotations reference", id = "annotation_reference_box", height = "100%", @@ -164,11 +166,13 @@ ui <- shinydashboardPlus::dashboardPage( closable = TRUE, plotly::plotlyOutput("deep_reference_2") %>% shinycssloaders::withSpinner() - )) + ))) ), div( id="id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinyjqui::jqui_resizable( + shinyjqui::jqui_draggable( + shinydashboardPlus::box( title = "Annotation comparison to the reference", id = "annotation_reference_comparison_box", collapsible = TRUE, @@ -176,9 +180,10 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("deep_reference") %>% shinycssloaders::withSpinner() - )), + ), options = list(handles="w,e")), ) ) + ) ), shiny::fluidRow( tags$div( @@ -255,7 +260,9 @@ ui <- shinydashboardPlus::dashboardPage( id="summarize_data1", div( id="id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinyjqui::jqui_resizable( + shinyjqui::jqui_draggable( + shinydashboardPlus::box( title = "Ranking barplot", id = "ranking_barplot_box", collapsible = TRUE, @@ -263,11 +270,13 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("barplot_rank", height = "600px")%>% shinycssloaders::withSpinner() - )) + ))) ), div( id="id2", - shinyjqui::jqui_resizable( shinydashboardPlus::box( + shinyjqui::jqui_resizable( + shinyjqui::jqui_draggable( + shinydashboardPlus::box( title = "Group table", id = "group_table_box", collapsible = TRUE, @@ -278,7 +287,7 @@ ui <- shinydashboardPlus::dashboardPage( shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), shiny::tableOutput("group_table")%>% shinycssloaders::withSpinner() - )) + ))) ) ) ), @@ -402,7 +411,8 @@ ui <- shinydashboardPlus::dashboardPage( id="options_data1", div( id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinyjqui::jqui_resizable( + shinydashboardPlus::box( title = "Rename", id = "rename_box", collapsible = TRUE, From 556598766df265ae47702046aaf66abf86618fb2 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 09:23:57 +0200 Subject: [PATCH 085/199] boxes are now resizable only in 2 direction Former-commit-id: 1d25478523f25fdbbd5366bd3367e859167aac06 --- app.R | 49 +++++++++++++++++-------------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/app.R b/app.R index 17cefdc..af31793 100755 --- a/app.R +++ b/app.R @@ -62,7 +62,7 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", shiny::plotOutput("deep_barplot", height = "500px",) %>% shinycssloaders::withSpinner() - ))), + ),options = list(handles="w,e"))), div(id = "id2", shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "DeepBGC rate", @@ -71,7 +71,7 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("deep_rate", height = "500px",) %>% shinycssloaders::withSpinner() - ))))), + ),options = list(handles="w,e"))))), shiny::fluidRow( tags$div( id = "deep_data2", div(id = "id1", @@ -89,7 +89,7 @@ ui <- shinydashboardPlus::dashboardPage( # Chose step for barplot (as a threshold to draw a bar) shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ))) + ),options = list(handles="w,e"))) )), sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) @@ -109,7 +109,7 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", shiny::plotOutput("gecco_barplot", height = "500px") %>% shinycssloaders::withSpinner() - )) + ),options = list(handles="w,e")) ), div( id = "id2", @@ -121,7 +121,7 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("gecco_rate", height = "500px",)%>% shinycssloaders::withSpinner() - )) + ),options = list(handles="w,e")) ), ) ), @@ -142,7 +142,7 @@ ui <- shinydashboardPlus::dashboardPage( selected = "avg_p"), shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - )) + ), options = list(handles="w,e")) ) ) ), @@ -166,7 +166,7 @@ ui <- shinydashboardPlus::dashboardPage( closable = TRUE, plotly::plotlyOutput("deep_reference_2") %>% shinycssloaders::withSpinner() - ))) + )), options = list(handles="w,e")) ), div( id="id2", @@ -178,26 +178,11 @@ ui <- shinydashboardPlus::dashboardPage( collapsible = TRUE, closable = TRUE, height = "100%", + shiny::selectInput("ref", "Choose reference data", choices = c(""), + selected = ""), plotly::plotlyOutput("deep_reference") %>% shinycssloaders::withSpinner() - ), options = list(handles="w,e")), - ) - ) - ) - ), - shiny::fluidRow( - tags$div( - id = "anno_data2", - div( - id="id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "Annotation to the reference comparison plot controls", - id = "annotation_reference_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput("ref", "Choose reference data", choices = c(""), - selected = "") - )) + )), options = list(handles="w,e")), ) ) ), @@ -270,7 +255,7 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("barplot_rank", height = "600px")%>% shinycssloaders::withSpinner() - ))) + )),options = list(handles="w,e")) ), div( id="id2", @@ -287,7 +272,7 @@ ui <- shinydashboardPlus::dashboardPage( shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), shiny::tableOutput("group_table")%>% shinycssloaders::withSpinner() - ))) + )),options = list(handles="w,e")) ) ) ), @@ -424,16 +409,16 @@ ui <- shinydashboardPlus::dashboardPage( "Upload renaming and coloring scheme", accept = ".csv"), shiny::actionButton("rename", "Rename"), shiny::actionButton("reset_name", "Reset") - )) + ),options = list(handles="w,e")) ), div( id = "id2", - shinyjqui::jqui_resizable(shiny::uiOutput("deep_filter_box")) + shinyjqui::jqui_resizable(shiny::uiOutput("deep_filter_box"),options = list(handles="w,e")) ), div( id = "id3", - shinyjqui::jqui_resizable(shiny::uiOutput("gecco_filter_box")) + shinyjqui::jqui_resizable(shiny::uiOutput("gecco_filter_box"),options = list(handles="w,e")) ), div( id = "id4", @@ -445,7 +430,7 @@ ui <- shinydashboardPlus::dashboardPage( shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), selected = "All") - )) + ),options = list(handles="w,e")) ), div( id = "id5", @@ -468,7 +453,7 @@ ui <- shinydashboardPlus::dashboardPage( collapsible = TRUE, closable = TRUE, shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - )) + ),options = list(handles="w,e")) ) ) ), From fef79ae122d0868ea63dcbbbc42702dc656ddac1 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 09:28:49 +0200 Subject: [PATCH 086/199] Added box sidebar for Biocircos plot Former-commit-id: 2d10d1e7eecedd8b8cfb28131f45df3584960cb9 --- app.R | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/app.R b/app.R index af31793..dd9383c 100755 --- a/app.R +++ b/app.R @@ -203,6 +203,18 @@ ui <- shinydashboardPlus::dashboardPage( closable = TRUE, width = 12, shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), + sidebar = shinydashboardPlus::boxSidebar( + id = "biocircos_box_sidebar", + width = 25, + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') + ), BioCircos::BioCircosOutput("biocircos", height = "900px")%>% shinycssloaders::withSpinner() ) @@ -215,23 +227,6 @@ ui <- shinydashboardPlus::dashboardPage( div( id = "id1", shiny::uiOutput("biocircos_coloring") - ), - div( - id="id2", - shinydashboardPlus::box( - title = "Biocircos options", - collapsible = TRUE, - closable = TRUE, - id = "biocircos_controls_box", - shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') - ) ) ) ), @@ -443,7 +438,7 @@ ui <- shinydashboardPlus::dashboardPage( shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") - )) + ),options = list(handles="w,e")) ), div( id = "id6", From b100f6fb1901a4ab4b62f921dc59719e52595992 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 09:33:16 +0200 Subject: [PATCH 087/199] Remove draggable events (interfere with plotly select events) Former-commit-id: 3f2d23a21961577ca76055e058a463be0280a999 --- app.R | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/app.R b/app.R index dd9383c..80d5f2a 100755 --- a/app.R +++ b/app.R @@ -157,7 +157,6 @@ ui <- shinydashboardPlus::dashboardPage( div( id="anno_div_1", shinyjqui::jqui_resizable( - shinyjqui::jqui_draggable( shinydashboardPlus::box( title = "Annotations reference", id = "annotation_reference_box", @@ -166,12 +165,11 @@ ui <- shinydashboardPlus::dashboardPage( closable = TRUE, plotly::plotlyOutput("deep_reference_2") %>% shinycssloaders::withSpinner() - )), options = list(handles="w,e")) + ), options = list(handles="w,e")) ), div( id="id2", shinyjqui::jqui_resizable( - shinyjqui::jqui_draggable( shinydashboardPlus::box( title = "Annotation comparison to the reference", id = "annotation_reference_comparison_box", @@ -182,7 +180,7 @@ ui <- shinydashboardPlus::dashboardPage( selected = ""), plotly::plotlyOutput("deep_reference") %>% shinycssloaders::withSpinner() - )), options = list(handles="w,e")), + ), options = list(handles="w,e")), ) ) ), @@ -241,7 +239,6 @@ ui <- shinydashboardPlus::dashboardPage( div( id="id1", shinyjqui::jqui_resizable( - shinyjqui::jqui_draggable( shinydashboardPlus::box( title = "Ranking barplot", id = "ranking_barplot_box", @@ -250,12 +247,11 @@ ui <- shinydashboardPlus::dashboardPage( height = "100%", plotly::plotlyOutput("barplot_rank", height = "600px")%>% shinycssloaders::withSpinner() - )),options = list(handles="w,e")) + ),options = list(handles="w,e")) ), div( id="id2", shinyjqui::jqui_resizable( - shinyjqui::jqui_draggable( shinydashboardPlus::box( title = "Group table", id = "group_table_box", @@ -267,7 +263,7 @@ ui <- shinydashboardPlus::dashboardPage( shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), shiny::tableOutput("group_table")%>% shinycssloaders::withSpinner() - )),options = list(handles="w,e")) + ),options = list(handles="w,e")) ) ) ), From 50c0b7abf59e78a757bc2087af9cf0212f5e4eca Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 10:24:20 +0200 Subject: [PATCH 088/199] Annotation on chromosome plots are in column layout now Former-commit-id: 672266499c1463c4bec597a05b2ae17f7280cd2d --- app.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app.R b/app.R index 80d5f2a..5222d67 100755 --- a/app.R +++ b/app.R @@ -154,6 +154,8 @@ ui <- shinydashboardPlus::dashboardPage( shiny::fluidRow( tags$div( id="anno_data1", + shiny::column( + width = 12, div( id="anno_div_1", shinyjqui::jqui_resizable( @@ -161,6 +163,7 @@ ui <- shinydashboardPlus::dashboardPage( title = "Annotations reference", id = "annotation_reference_box", height = "100%", + width = NULL, collapsible = TRUE, closable = TRUE, plotly::plotlyOutput("deep_reference_2") %>% @@ -175,6 +178,7 @@ ui <- shinydashboardPlus::dashboardPage( id = "annotation_reference_comparison_box", collapsible = TRUE, closable = TRUE, + width = NULL, height = "100%", shiny::selectInput("ref", "Choose reference data", choices = c(""), selected = ""), @@ -183,7 +187,7 @@ ui <- shinydashboardPlus::dashboardPage( ), options = list(handles="w,e")), ) ) - ), + )), sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) ), From 9ac9d0f0496a67b855b195cacccbb4baca1c0cc5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 10:51:26 +0200 Subject: [PATCH 089/199] Add Improve visualization box hiding if no data, that is used, were uploaded Former-commit-id: 748686360c694f8a1677085c7f53585ebd21f698 --- app.R | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app.R b/app.R index 5222d67..11f9510 100755 --- a/app.R +++ b/app.R @@ -1249,6 +1249,14 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#arts_width") } }) + + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)){ + shinyjs::showElement(selector = "#improve_visualization_box") + } else { + shinyjs::hideElement(selector = "#improve_visualization_box") + } + }) ##--------------------------------------------------------------- ## Data processing options show/hide - ##--------------------------------------------------------------- From bcc0932badd4042d83fa02b06d142ea4b0bc4256 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 10:53:52 +0200 Subject: [PATCH 090/199] Add prism_supplement_arts_box hiding if no data, that is used, were uploaded Former-commit-id: c16fd6795031e8ce76387cce097c64eb2d35657b --- app.R | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app.R b/app.R index 11f9510..3afad68 100755 --- a/app.R +++ b/app.R @@ -1257,6 +1257,13 @@ server <- function(input, output, session) { shinyjs::hideElement(selector = "#improve_visualization_box") } }) + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$prism_supp_data_input == T) ){ + shinyjs::showElement(selector = "#prism_supplement_arts_box") + } else { + shinyjs::hideElement(selector = "#prism_supplement_arts_box") + } + }) ##--------------------------------------------------------------- ## Data processing options show/hide - ##--------------------------------------------------------------- From ff663b2e9501dd14724f0348317c81a29b2526aa Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 1 Nov 2021 11:36:18 +0200 Subject: [PATCH 091/199] Fixed DeepBGC filtering Former-commit-id: c6263f0d3949ab3ffaf544ae9063b9e94b7cf5cf --- src/helper_functions.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helper_functions.R b/src/helper_functions.R index 9de229e..74b9f78 100644 --- a/src/helper_functions.R +++ b/src/helper_functions.R @@ -140,7 +140,7 @@ process_prism_json_suppl <- function(data){ return(list(prism_data, final_reg)) } # Filtering the DeepBGC -filter_deepbgc <- function(deep_data,cluster_type,score_a,score_c,score_d,domains_filter,biodomain_filter,gene_filter){ +filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,score_d_input,domains_filter,biodomain_filter,gene_filter){ score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) @@ -171,8 +171,8 @@ filter_deepbgc <- function(deep_data,cluster_type,score_a,score_c,score_d,domain #Finally store deepbgc data in plotting variable. Do final scores processing biocircos_deep <- deep_data_chromo%>% dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= as.numeric(score_a )/ 100, score_c >=as.numeric(score_c)/100 , - score_d >= as.numeric(score_d)/100, num_domains >= domains_filter, + dplyr::filter(score_a >= as.numeric(score_a_input )/ 100, score_c >=as.numeric(score_c_input)/100 , + score_d >= as.numeric(score_d_input)/100, num_domains >= domains_filter, num_bio_domains>=biodomain_filter, num_proteins>=gene_filter) } From b5b2e8efe5e400d8ef53bc9710e1a21f876fed39 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 2 Nov 2021 08:54:47 +0200 Subject: [PATCH 092/199] Add global filtering values to compare. Filtering can be done right from sidebar Former-commit-id: 105b02d1ad75d9acaa063d2d0b4be18ef6852648 --- app.R | 80 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 30 deletions(-) diff --git a/app.R b/app.R index 3afad68..94c082f 100755 --- a/app.R +++ b/app.R @@ -487,9 +487,9 @@ server <- function(input, output, session) { }) to_debounce <- shiny::reactive({ - list( input$cluster_type, input$gene_filter,input$biodomain_filter, input$score_c, input$score_d, - input$score_a, input$score_average_gecco,input$score_cluster_gecco, input$domains_filter_gecco, - input$prot_filter_gecco + list( vals$cluster_type, vals$gene_filter,vals$biodomain_filter, vals$score_c, vals$score_d, + vals$score_a, vals$score_average_gecco,vals$score_cluster_gecco, vals$domains_filter_gecco, + vals$prot_filter_gecco ) }) %>% shiny::debounce(500) @@ -538,6 +538,17 @@ server <- function(input, output, session) { soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", "seg_df_ref_g", "seg_df_ref_r") + vals$score_a <- 50 + vals$score_d <- 50 + vals$score_c <- 50 + vals$domains_filter <- 5 + vals$biodomain_filter <- 1 + vals$gene_filter <- 1 + vals$cluster_type <- 50 + vals$score_average_gecco <- 50 + vals$score_cluster_gecco <- 50 + vals$domains_filter_gecco <- 1 + vals$prot_filter_gecco <- 1 ##---------------------------------------------------------------- ## Helper functions - ##---------------------------------------------------------------- @@ -645,7 +656,7 @@ server <- function(input, output, session) { names(gecco_data)[names(gecco_data) == "start"] <- "Start" names(gecco_data)[names(gecco_data) == "end"] <- "Stop" vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,input$score_cluster_gecco,input$score_average_gecco,input$domains_filter_gecco,input$prot_filter_gecco) + vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) # Save file write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) vals$gecco_data_input = TRUE @@ -920,7 +931,7 @@ server <- function(input, output, session) { write.csv(vals$deep_data, "deep_data.csv", row.names = F) vals$deep_data_input = TRUE vals$data_upload_count <- vals$data_upload_count +1 - vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,input$cluster_type,input$score_a,input$score_c,input$score_d,input$domains_filter,input$biodomain_filter,input$gene_filter) + vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") @@ -1385,74 +1396,83 @@ server <- function(input, output, session) { }) + update_filter_values <- function(listening_value, comparing_values, updating_value){ + if (as.numeric(listening_value) != comparing_values){ + shiny::updateSliderInput(session, updating_value, NULL, listening_value) + return(as.numeric(listening_value)) + } else{ + return(comparing_values) + } + } + observeEvent(input$score_a,{ - - shiny::updateSliderInput(session, "score_a_sidemenu", NULL, input$score_a) + vals$score_a <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu" ) }) observeEvent(input$score_d,{ - shiny::updateSliderInput(session, "score_d_sidemenu", NULL, input$score_d) + vals$score_d <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu" ) }) observeEvent(input$score_c,{ - shiny::updateSliderInput(session, "score_c_sidemenu", NULL, input$score_c) + vals$score_c <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu" ) }) observeEvent(input$domains_filter,{ - shiny::updateSliderInput(session, "domains_filter_sidemenu", NULL, input$domains_filter) + vals$domains_filter <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu" ) }) observeEvent(input$biodomain_filter,{ - shiny::updateSliderInput(session, "biodomain_filter_sidemenu", NULL, input$biodomain_filter) + vals$biodomain_filter <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" ) }) observeEvent(input$gene_filter,{ - shiny::updateSliderInput(session, "gene_filter_sidemenu", NULL, input$gene_filter) + vals$gene_filter <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu" ) }) observeEvent(input$cluster_type,{ - shiny::updateSliderInput(session, "cluster_type_sidemenu", NULL, input$cluster_type) + vals$cluster_type <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu" ) }) observeEvent(input$score_a_sidemenu,{ - shiny::updateSliderInput(session, "score_a", NULL, input$score_a_sidemenu) + vals$score_a <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a" ) }) observeEvent(input$score_d_sidemenu,{ - shiny::updateSliderInput(session, "score_d", NULL, input$score_d_sidemenu) + vals$score_d <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" ) }) observeEvent(input$score_c_sidemenu,{ - shiny::updateSliderInput(session, "score_c", NULL, input$score_c_sidemenu) + vals$score_c <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" ) }) observeEvent(input$domains_filter_sidemenu,{ - shiny::updateSliderInput(session, "domains_filter", NULL, input$domains_filter_sidemenu) + vals$domains_filter <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" ) }) observeEvent(input$biodomain_filter_sidemenu,{ - shiny::updateSliderInput(session, "biodomain_filter", NULL, input$biodomain_filter_sidemenu) + vals$biodomain_filter <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" ) }) observeEvent(input$gene_filter_sidemenu,{ - shiny::updateSliderInput(session, "gene_filter", NULL, input$gene_filter_sidemenu) + vals$gene_filter <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter" ) }) observeEvent(input$cluster_type_sidemenu,{ - shiny::updateSliderInput(session, "cluster_type", NULL, input$cluster_type_sidemenu) + vals$cluster_type <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type" ) }) + observeEvent(input$score_average_gecco,{ - shiny::updateSliderInput(session, "score_average_gecco_sidemenu", NULL, input$score_average_gecco) + vals$score_average_gecco <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu" ) }) observeEvent(input$score_cluster_gecco,{ - shiny::updateSliderInput(session, "score_cluster_gecco_sidemenu", NULL, input$score_cluster_gecco) + vals$score_cluster_gecco <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu" ) }) observeEvent(input$domains_filter_gecco,{ - shiny::updateSliderInput(session, "domains_filter_gecco_sidemenu", NULL, input$domains_filter_gecco) + vals$domains_filter_gecco <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ) }) observeEvent(input$prot_filter_gecco,{ - shiny::updateSliderInput(session, "prot_filter_gecco_sidemenu", NULL, input$prot_filter_gecco) + vals$prot_filter_gecco <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ) }) observeEvent(input$score_average_gecco_sidemenu,{ - shiny::updateSliderInput(session, "score_average_gecco", NULL, input$score_average_gecco_sidemenu) + vals$score_average_gecco <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco" ) }) observeEvent(input$score_cluster_gecco_sidemenu,{ - shiny::updateSliderInput(session, "score_cluster_gecco", NULL, input$score_cluster_gecco_sidemenu) + vals$score_cluster_gecco <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco" ) }) observeEvent(input$domains_filter_gecco_sidemenu,{ - shiny::updateSliderInput(session, "domains_filter_gecco", NULL, input$domains_filter_gecco_sidemenu) + vals$domains_filter_gecco <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco" ) }) observeEvent(input$prot_filter_gecco_sidemenu,{ - shiny::updateSliderInput(session, "prot_filter_gecco", NULL, input$prot_filter_gecco_sidemenu) + vals$prot_filter_gecco <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco" ) }) shiny::observeEvent(input$restore_box,{ @@ -1760,7 +1780,7 @@ server <- function(input, output, session) { inters <- vals$inters if (vals$deep_data_input == TRUE){ if (vals$need_filter == F) { - biocircos_deep <- filter_deepbgc(vals$deep_data,input$cluster_type,input$score_a,input$score_c,input$score_d,input$domains_filter,input$biodomain_filter,input$gene_filter) + biocircos_deep <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) vals$deep_data_filtered <- biocircos_deep } else { biocircos_deep <- vals$deep_data_filtered @@ -1784,7 +1804,7 @@ server <- function(input, output, session) { } if (vals$gecco_data_input == TRUE){ if (vals$need_filter == F) { - gecco_data <- filter_gecco(vals$gecco_data,input$score_cluster_gecco,input$score_average_gecco,input$domains_filter_gecco,input$prot_filter_gecco) + gecco_data <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) vals$gecco_data_filtered <- gecco_data } else { gecco_data <- vals$gecco_data_filtered From f89b6800b489e63ad0b716c313392db489b5947a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 2 Nov 2021 10:01:35 +0200 Subject: [PATCH 093/199] Fix filtering value change after initial UI rendering, if in another place they have been changed Former-commit-id: 78e583095a5f4e2b1153b3e888e0893cdf90b84b --- app.R | 111 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 85 insertions(+), 26 deletions(-) diff --git a/app.R b/app.R index 94c082f..aa29dd1 100755 --- a/app.R +++ b/app.R @@ -549,6 +549,10 @@ server <- function(input, output, session) { vals$score_cluster_gecco <- 50 vals$domains_filter_gecco <- 1 vals$prot_filter_gecco <- 1 + vals$gecco_sidebar <- FALSE + vals$deep_sidebar <- FALSE + vals$deep_global <- FALSE + vals$gecco_global <- FALSE ##---------------------------------------------------------------- ## Helper functions - ##---------------------------------------------------------------- @@ -1354,7 +1358,9 @@ server <- function(input, output, session) { ) } }) + output$deep_filter_UI_sidemenu <- shiny::renderUI({ + vals$deep_sidebar <- T shiny::tagList( shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), @@ -1367,6 +1373,7 @@ server <- function(input, output, session) { ) }) output$deep_filter_UI <- shiny::renderUI({ + vals$deep_global <- T shiny::tagList( shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), @@ -1379,6 +1386,7 @@ server <- function(input, output, session) { ) }) output$gecco_filter_UI_sidemenu <- shiny::renderUI({ + vals$gecco_sidebar <- T shiny::tagList( shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), @@ -1387,6 +1395,7 @@ server <- function(input, output, session) { ) }) output$gecco_filter_UI <- shiny::renderUI({ + vals$gecco_global <- T shiny::tagList( shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), @@ -1396,83 +1405,133 @@ server <- function(input, output, session) { }) - update_filter_values <- function(listening_value, comparing_values, updating_value){ - if (as.numeric(listening_value) != comparing_values){ + update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check){ + if( (as.numeric(listening_value) != comparing_values) && (rendering_check == F)){ shiny::updateSliderInput(session, updating_value, NULL, listening_value) - return(as.numeric(listening_value)) + return(list(as.numeric(listening_value),F)) } else{ - return(comparing_values) + if (grepl("sidemenu", updating_value) == T){ + shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + }else{ + shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + } + return(list(comparing_values, F)) } } + observeEvent(input$score_a,{ - vals$score_a <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu" ) + res <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu", vals$deep_sidebar) + vals$score_a <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$score_d,{ - vals$score_d <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu" ) + res <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu", vals$deep_sidebar ) + vals$score_d <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$score_c,{ - vals$score_c <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu" ) + res <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu", vals$deep_sidebar ) + vals$score_c <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$domains_filter,{ - vals$domains_filter <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu" ) + res <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar ) + vals$domains_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$biodomain_filter,{ - vals$biodomain_filter <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" ) + res <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" , vals$deep_sidebar) + vals$biodomain_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$gene_filter,{ - vals$gene_filter <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu" ) + res <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar ) + vals$gene_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$cluster_type,{ - vals$cluster_type <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu" ) + res <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar ) + vals$cluster_type <-res[[1]] + vals$deep_sidebar <- res[[2]] }) observeEvent(input$score_a_sidemenu,{ - vals$score_a <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a" ) + res <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a", vals$deep_global ) + vals$score_a <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$score_d_sidemenu,{ - vals$score_d <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" ) + res <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" , vals$deep_global ) + vals$score_d <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$score_c_sidemenu,{ - vals$score_c <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" ) + res <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" , vals$deep_global ) + vals$score_c <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$domains_filter_sidemenu,{ - vals$domains_filter <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" ) + res <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" , vals$deep_global ) + vals$domains_filter <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$biodomain_filter_sidemenu,{ - vals$biodomain_filter <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" ) + res <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" , vals$deep_global ) + vals$biodomain_filter <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$gene_filter_sidemenu,{ - vals$gene_filter <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter" ) + res <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter", vals$deep_global ) + vals$gene_filter <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$cluster_type_sidemenu,{ - vals$cluster_type <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type" ) + res <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type", vals$deep_global ) + vals$cluster_type <- res[[1]] + vals$deep_global <- res[[2]] }) observeEvent(input$score_average_gecco,{ - vals$score_average_gecco <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu" ) + res <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu",vals$gecco_sidebar ) + vals$score_average_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] }) observeEvent(input$score_cluster_gecco,{ - vals$score_cluster_gecco <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu" ) + res <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu",vals$gecco_sidebar ) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] }) observeEvent(input$domains_filter_gecco,{ - vals$domains_filter_gecco <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ) + res <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ,vals$gecco_sidebar) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] }) observeEvent(input$prot_filter_gecco,{ - vals$prot_filter_gecco <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ) + res <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ,vals$gecco_sidebar) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] }) observeEvent(input$score_average_gecco_sidemenu,{ - vals$score_average_gecco <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco" ) + res <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco",vals$gecco_global ) + vals$score_average_gecco <- res[[1]] + vals$gecco_global <- res[[2]] }) observeEvent(input$score_cluster_gecco_sidemenu,{ - vals$score_cluster_gecco <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco" ) + res <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco",vals$gecco_global ) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_global <- res[[2]] }) observeEvent(input$domains_filter_gecco_sidemenu,{ - vals$domains_filter_gecco <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco" ) + res <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco",vals$gecco_global ) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] }) observeEvent(input$prot_filter_gecco_sidemenu,{ - vals$prot_filter_gecco <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco" ) + res <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco",vals$gecco_global ) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] }) shiny::observeEvent(input$restore_box,{ From 3bf57553dada7bb44be31de4f68627a780c20f56 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 2 Nov 2021 10:50:42 +0200 Subject: [PATCH 094/199] Add column-based global options layout. Boxes there are not resizable now Former-commit-id: 38d010728cb21b68ac61ded2ad85d0a85a53bcef --- app.R | 103 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 52 insertions(+), 51 deletions(-) diff --git a/app.R b/app.R index aa29dd1..2fb8228 100755 --- a/app.R +++ b/app.R @@ -387,16 +387,18 @@ ui <- shinydashboardPlus::dashboardPage( shinydashboard::tabItem( tabName = "options_sidemenu", shiny::fluidRow( - tags$div( - id="options_data1", + shiny::column( + width = 6, + tags$div( + id="options_data1", div( id = "id1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( + shinydashboardPlus::box( title = "Rename", id = "rename_box", collapsible = TRUE, closable = TRUE, + width = NULL, shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), @@ -404,55 +406,63 @@ ui <- shinydashboardPlus::dashboardPage( "Upload renaming and coloring scheme", accept = ".csv"), shiny::actionButton("rename", "Rename"), shiny::actionButton("reset_name", "Reset") - ),options = list(handles="w,e")) + ) ), div( id = "id2", - shinyjqui::jqui_resizable(shiny::uiOutput("deep_filter_box"),options = list(handles="w,e")) - ), - + shiny::uiOutput("deep_filter_box") + ))), + shiny::column( + width = 6, + tags$div( + id="options_data2", div( id = "id3", - shinyjqui::jqui_resizable(shiny::uiOutput("gecco_filter_box"),options = list(handles="w,e")) - ), - div( - id = "id4", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "Prism supplement + ARTS options", - id = "prism_supplement_arts_box", - collapsible = TRUE, - closable = TRUE, - shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All") - ),options = list(handles="w,e")) + shiny::uiOutput("gecco_filter_box") ), div( id = "id5", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinydashboardPlus::box( title = "Improve global visualization", id = "improve_visualization_box", collapsible = TRUE, closable = TRUE, + width = NULL, shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") - ),options = list(handles="w,e")) + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Prism supplement + ARTS options", + id = "prism_supplement_arts_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + selected = "All") + ) ), div( id = "id6", - shinyjqui::jqui_resizable(shinydashboardPlus::box( + shinydashboardPlus::box( title = "Download data", id = "download_data_box", collapsible = TRUE, closable = TRUE, + width = NULL, shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - ),options = list(handles="w,e")) + ) + ) ) ) ), - sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE)) + sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE, group = "options_data")), + sortable::sortable_js("options_data2", options = sortable::sortable_options(swap = TRUE, group = "options_data")) ) ) ) @@ -1338,23 +1348,37 @@ server <- function(input, output, session) { }) output$deep_filter_box <- shiny::renderUI({ if (vals$deep_data_input == T){ + vals$deep_global <- T shinydashboardPlus::box( title = "DeepBGC filtering", id = "deep_filtering_box", collapsible = TRUE, closable = TRUE, - shiny::uiOutput("deep_filter_UI") + width = NULL, + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) ) } }) output$gecco_filter_box <- shiny::renderUI({ if (vals$gecco_data_input == T){ + vals$gecco_global <- T shinydashboardPlus::box( title = "GECCO filtering", id = "gecco_filtering_box", collapsible = TRUE, closable = TRUE, - shiny::uiOutput("gecco_filter_UI") + width = NULL, + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) ) } }) @@ -1372,19 +1396,6 @@ server <- function(input, output, session) { shiny::sliderInput("cluster_type_sidemenu","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) ) }) - output$deep_filter_UI <- shiny::renderUI({ - vals$deep_global <- T - shiny::tagList( - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - ) - }) output$gecco_filter_UI_sidemenu <- shiny::renderUI({ vals$gecco_sidebar <- T shiny::tagList( @@ -1394,16 +1405,6 @@ server <- function(input, output, session) { shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) ) }) - output$gecco_filter_UI <- shiny::renderUI({ - vals$gecco_global <- T - shiny::tagList( - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - ) - }) - update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check){ if( (as.numeric(listening_value) != comparing_values) && (rendering_check == F)){ From 024c04838450a7817ed85c998fc22333ea239db6 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Tue, 2 Nov 2021 13:03:05 +0200 Subject: [PATCH 095/199] Fix app hanging on window close Former-commit-id: 043801074608bfb0d444b6b84f0bba5a845bbf52 --- app.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app.R b/app.R index 2fb8228..3300a1f 100755 --- a/app.R +++ b/app.R @@ -2795,6 +2795,9 @@ server <- function(input, output, session) { #create the zip file from flst vector zip(file, flst) }, contentType = "application/zip" ) + shiny::onSessionEnded(function() { + shiny::stopApp() + }) } # Run the application From 7c3491e4475b8bb992acaf64a3f4c6e773400388 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 3 Nov 2021 10:56:15 +0200 Subject: [PATCH 096/199] Initial commit of golem-structured app Former-commit-id: 8216b69c81cf5c012b1ddc7a114495ca1cbefe47 --- .Rbuildignore | 17 + .gitignore | 0 BGCViz.Rproj | 18 + CODE_OF_CONDUCT.md | 128 + DESCRIPTION | 43 + NAMESPACE | 12 + R/app_config.R | 43 + R/app_server.R | 2338 +++++++++++++++++ R/app_ui.R | 494 ++++ R/fct_biocircos.R | 128 + R/fct_deep_reference.R | 164 ++ R/fct_filtering.R | 79 + R/fct_format_transformation.R | 122 + R/fct_group_table.R | 20 + R/fct_helpers.R | 78 + R/fct_reading_processing.R | 150 ++ R/fct_validation.R | 184 ++ R/run_app.R | 28 + R/utils-pipe.R | 14 + R/utils_deep_reference.R | 135 + R/utils_helpers.R | 11 + README.md | 87 +- dev/01_start.R | 65 + dev/02_dev.R | 124 + dev/03_deploy.R | 42 + dev/run_dev.R | 12 + inst/WORDLIST | 5 + inst/app/www/favicon.ico | Bin 0 -> 3774 bytes inst/extdata/rename.csv | 90 + inst/extdata/sco_antismash.csv | 28 + .../extdata/sco_antismash.json.REMOVED.git-id | 1 + inst/extdata/sco_deep.tsv | 173 ++ inst/extdata/sco_duptable.tsv | 73 + inst/extdata/sco_gecco.tsv | 21 + inst/extdata/sco_knownhits.tsv | 48 + inst/extdata/sco_prism.json.REMOVED.git-id | 1 + inst/extdata/sco_rre.txt | 3 + inst/extdata/sco_sempi.csv | 34 + inst/golem-config.yml | 8 + inst/scripts/group.py | 95 + man/pipe.Rd | 20 + man/run_app.Rd | 41 + tests/spelling.R | 3 + tests/testthat.R | 4 + tests/testthat/test-app.R | 3 + tests/testthat/test-golem-recommended.R | 26 + 46 files changed, 5180 insertions(+), 33 deletions(-) create mode 100644 .Rbuildignore create mode 100644 .gitignore create mode 100644 BGCViz.Rproj create mode 100644 CODE_OF_CONDUCT.md create mode 100644 DESCRIPTION create mode 100644 NAMESPACE create mode 100644 R/app_config.R create mode 100644 R/app_server.R create mode 100644 R/app_ui.R create mode 100644 R/fct_biocircos.R create mode 100644 R/fct_deep_reference.R create mode 100644 R/fct_filtering.R create mode 100644 R/fct_format_transformation.R create mode 100644 R/fct_group_table.R create mode 100644 R/fct_helpers.R create mode 100644 R/fct_reading_processing.R create mode 100644 R/fct_validation.R create mode 100644 R/run_app.R create mode 100644 R/utils-pipe.R create mode 100644 R/utils_deep_reference.R create mode 100644 R/utils_helpers.R create mode 100644 dev/01_start.R create mode 100644 dev/02_dev.R create mode 100644 dev/03_deploy.R create mode 100644 dev/run_dev.R create mode 100644 inst/WORDLIST create mode 100644 inst/app/www/favicon.ico create mode 100644 inst/extdata/rename.csv create mode 100644 inst/extdata/sco_antismash.csv create mode 100644 inst/extdata/sco_antismash.json.REMOVED.git-id create mode 100644 inst/extdata/sco_deep.tsv create mode 100644 inst/extdata/sco_duptable.tsv create mode 100644 inst/extdata/sco_gecco.tsv create mode 100644 inst/extdata/sco_knownhits.tsv create mode 100644 inst/extdata/sco_prism.json.REMOVED.git-id create mode 100644 inst/extdata/sco_rre.txt create mode 100644 inst/extdata/sco_sempi.csv create mode 100644 inst/golem-config.yml create mode 100644 inst/scripts/group.py create mode 100644 man/pipe.Rd create mode 100644 man/run_app.Rd create mode 100644 tests/spelling.R create mode 100644 tests/testthat.R create mode 100644 tests/testthat/test-app.R create mode 100644 tests/testthat/test-golem-recommended.R diff --git a/.Rbuildignore b/.Rbuildignore new file mode 100644 index 0000000..a290af7 --- /dev/null +++ b/.Rbuildignore @@ -0,0 +1,17 @@ +^.*\.Rproj$ +^\.Rproj\.user$ +^data-raw$ +dev_history.R +^dev$ +$run_dev.* +^LICENSE\.md$ +^README\.Rmd$ +^CODE_OF_CONDUCT\.md$ +^app\.R$ +^rsconnect$ +^Dockerfile$ +^\.dockerignore$ +^docs$ +^images$ +^README\.md$ +^\.gitignore$ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/BGCViz.Rproj b/BGCViz.Rproj new file mode 100644 index 0000000..cc1983d --- /dev/null +++ b/BGCViz.Rproj @@ -0,0 +1,18 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: XeLaTeX + +BuildType: Package +PackageUseDevtools: Yes +PackageInstallArgs: --no-multiarch --with-keep.source +PackageRoxygenize: rd,collate,namespace diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..b36903f --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, +and learning from the experience +* Focusing on what is best not just for us as individuals, but for the overall +community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or +advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email +address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a +professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards +of acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies +when an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at [INSERT CONTACT +METHOD]. All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series of +actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within the +community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, +available at https://www.contributor-covenant.org/version/2/0/ +code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at https:// +www.contributor-covenant.org/translations. diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..4212ca1 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,43 @@ +Package: BGCViz +Title: BGCViz +Version: 0.0.0.9000 +Authors@R: person('Pavlo', 'Hrab', email = 'pavlo.hrab@gmail.com', role = c('cre', 'aut')) +Description: PKG_DESC. +License: MIT + file LICENSE +biocViews: +Imports: + BioCircos, + config (>= 0.3.1), + dplyr, + DT, + GenomicRanges, + ggplot2, + golem (>= 0.3.1), + magrittr, + pkgload, + plotly, + plyr, + processx, + rjson, + RSQLite, + shiny (>= 1.7.1), + shinycssloaders, + shinydashboard, + shinydashboardPlus, + shinydisconnect, + shinyjqui, + shinyjs, + sortable, + stringi, + stringr, + tidyr +Encoding: UTF-8 +LazyData: true +RoxygenNote: 7.1.1 +URL: https://github.com/ostash-group/BGCViz +BugReports: https://github.com/ostash-group/BGCViz/issues +Suggests: + spelling, + testthat (>= 3.0.0) +Config/testthat/edition: 3 +Language: en-US diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..da9e7bc --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,12 @@ +# Generated by roxygen2: do not edit by hand + +export("%>%") +export(run_app) +import(shiny) +importFrom(golem,activate_js) +importFrom(golem,add_resource_path) +importFrom(golem,bundle_resources) +importFrom(golem,favicon) +importFrom(golem,with_golem_options) +importFrom(magrittr,"%>%") +importFrom(shiny,shinyApp) diff --git a/R/app_config.R b/R/app_config.R new file mode 100644 index 0000000..b4dbb7d --- /dev/null +++ b/R/app_config.R @@ -0,0 +1,43 @@ +#' Access files in the current app +#' +#' NOTE: If you manually change your package name in the DESCRIPTION, +#' don't forget to change it here too, and in the config file. +#' For a safer name change mechanism, use the `golem::set_golem_name()` function. +#' +#' @param ... character vectors, specifying subdirectory and file(s) +#' within your package. The default, none, returns the root of the app. +#' +#' @noRd +app_sys <- function(...){ + system.file(..., package = "BGCViz") +} + + +#' Read App Config +#' +#' @param value Value to retrieve from the config file. +#' @param config GOLEM_CONFIG_ACTIVE value. If unset, R_CONFIG_ACTIVE. +#' If unset, "default". +#' @param use_parent Logical, scan the parent directory for config file. +#' +#' @noRd +get_golem_config <- function( + value, + config = Sys.getenv( + "GOLEM_CONFIG_ACTIVE", + Sys.getenv( + "R_CONFIG_ACTIVE", + "default" + ) + ), + use_parent = TRUE +){ + config::get( + value = value, + config = config, + # Modify this if your config file is somewhere else: + file = app_sys("golem-config.yml"), + use_parent = use_parent + ) +} + diff --git a/R/app_server.R b/R/app_server.R new file mode 100644 index 0000000..46e6261 --- /dev/null +++ b/R/app_server.R @@ -0,0 +1,2338 @@ +#' The application server-side +#' +#' @param input,output,session Internal parameters for {shiny}. +#' DO NOT REMOVE. +#' @import shiny +#' @noRd +app_server <- function( input, output, session ) { + # Your application server logic + ##--------------------------------------------------------------- + ## Some lists of reactive values to listen later - + ##--------------------------------------------------------------- + check_to_rename <- shiny::reactive({list(input$sempi_data, input$anti_data, input$prism_data, + input$sempi_sco,input$anti_sco, input$prism_sco)}) + biocircos_listen <- shiny::reactive({ + list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, + input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, + input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, + vals$coloring_datatable + + ) + }) + inputData <- shiny::reactive({ + list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, + vals$known_data_input,vals$dup_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input + ) + }) + dynamicInput <- shiny::reactive({ + list( input$dup_choice, vals$need_filter, input$prism_supp + ) + }) + deep_reference <- shiny::reactive({ + list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data) + }) + + to_debounce <- shiny::reactive({ + list( vals$cluster_type, vals$gene_filter,vals$biodomain_filter, vals$score_c, vals$score_d, + vals$score_a, vals$score_average_gecco,vals$score_cluster_gecco, vals$domains_filter_gecco, + vals$prot_filter_gecco + ) + }) %>% shiny::debounce(500) + + # Some dataframes that are used through the app + some vectors of untercepted values + vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, + biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F + ) + + vals$computed <- list( + anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F + ) + # Making coloring datatable + vals$rename_data <- read.csv("inst/extdata/rename.csv") + rename_data <- read.csv("inst/extdata/rename.csv") + coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) + # Validation + #source("src/validate_functions.R") + # Variables, that holds data uploads boolean (so if data is present or not) + data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + # Universal beginings for variables, used in the app for different data + soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + # The Namings, meaning how to label the data on the plots + soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE-Finder') + # Dataframes undes vals$list, that stored the data + data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") + # Used in barplot on summarise tab + Annotation on chromosome plots + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") + # Used for deep reference 2 plot + soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", + "seg_df_ref_g", "seg_df_ref_r") + + vals$score_a <- 50 + vals$score_d <- 50 + vals$score_c <- 50 + vals$domains_filter <- 5 + vals$biodomain_filter <- 1 + vals$gene_filter <- 1 + vals$cluster_type <- 50 + vals$score_average_gecco <- 50 + vals$score_cluster_gecco <- 50 + vals$domains_filter_gecco <- 1 + vals$prot_filter_gecco <- 1 + vals$gecco_sidebar <- FALSE + vals$deep_sidebar <- FALSE + vals$deep_global <- FALSE + vals$gecco_global <- FALSE + ##---------------------------------------------------------------- + ## Helper functions - + ##---------------------------------------------------------------- + # Need to get them to a tidyr::separate file later + # TODO + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add remove them + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + file.remove(file_names) + } + } + options(shiny.maxRequestSize=100*1024^2) + # Small function to make integers zeros + #source("src/helper_functions.R") + + disable_event_logic <- function(){ + vals$can_plot_deep_ref = F + vals$can_plot_biocircos = F + vals$can_plot_barplot_rank = F + vals$can_plot_group_table = F + } + enable_event_logic <- function(){ + vals$can_plot_deep_ref = T + vals$can_plot_biocircos = T + vals$can_plot_barplot_rank = T + vals$can_plot_group_table = T + } + + ########################################################################### + ########################################################################### + ### ### + ### DATA INPUT PROCESSING ### + ### ### + ########################################################################### + ########################################################################### + # TODO Make tidyr::separate functions for different data types. + # For now you just have duplicated the code. Specifically for ARTS! + # Reading functions: + + read_antismash <- function(data){ + anti_data <- data + res_validation <- validate_basic_input(anti_data) + if (!(res_validation[[1]])){ + anti_data <- NULL + return(NULL) + } else{ + anti_data <- res_validation[[2]] + } + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + # Save file + #write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") + vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "Antismash" ) + shiny::updateSelectInput(session, "group_by", + selected = "Antismash" ) + shiny::updateSelectInput(session, "ref_comparison", + selected = "Antismash") + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash") + shiny::updateSelectInput(session, "ref_comparison_gecco", + selected = "Antismash") + + } + return(anti_data) + } + read_gecco <- function(data){ + # Add chromosome column + gecco_data <- data + + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + vals$gecco_data <- gecco_data + vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) + # Save file + #write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") + vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "GECCO" ) + shiny::updateSelectInput(session, "group_by", + selected = "GECCO") + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO") + + } + } + read_prism <- function(data, json=T){ + if (json==T){ + processed_data <- process_prism_json_suppl(data) + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + prism_data <- processed_data[[1]] + vals$prism_supp_data_input = T + vals$prism_supp <- processed_data[[2]] + vals$prism_supp_data <- processed_data[[2]] + vals$prism_json = T + } else { + prism_data <- data + } + res_validation <- validate_basic_input(prism_data) + if (!(res_validation[[1]])){ + prism_data <- NULL + return(NULL) + } else{ + prism_data <- res_validation[[2]] + } + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism_data$Cluster + # Save file + #write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "PRISM" ) + shiny::updateSelectInput(session, "group_by", + selected = "PRISM" ) + shiny::updateSelectInput(session, "ref_comparison", + selected = "PRISM") + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM") + shiny::updateSelectInput(session, "ref_comparison_gecco", + selected = "PRISM") + } + } + read_sempi <- function(data){ + sempi_data <- data + res_validation <- validate_basic_input(sempi_data) + if (!(res_validation[[1]])){ + sempi_data <- NULL + return(NULL) + } else{ + sempi_data <- res_validation[[2]] + } + sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + # Save file + #write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") + vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "SEMPI" ) + shiny::updateSelectInput(session, "group_by", + selected = "SEMPI" ) + shiny::updateSelectInput(session, "ref_comparison", + selected = "SEMPI") + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI") + shiny::updateSelectInput(session, "ref_comparison_gecco", + selected = "SEMPI") + } + } + read_arts_knownhits <- function(data){ + locations <- sapply(data$Sequence.description, function(x){ + tail(stringr::str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][2] + }) + + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- data$Description + known_table$Model <- data$X.Model + known_table$Evalue <- data$evalue + known_table$Bitscore <- data$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + vals$known_data <- known_table + vals$known_data_input <- TRUE + #write.csv(vals$known_data, "knownhits_data.csv", row.names = F) + if ((vals$dup_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$arts_data_input <- T + vals$data_upload_count <- vals$data_upload_count +1 + dup_table_id <- arts_data %>% + dplyr::filter(Core != "Not_core") + shiny::updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + vals$upl_arts = T + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "ARTS" ) + shiny::updateSelectInput(session, "group_by", + selected = "ARTS" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + + } + read_arts_dupdata <- function(data){ + get_location_duptable <- function(x, y){ + test <- stringr::str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(data)[1])){ + lst <- get_location_duptable(data$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- data$X.Core_gene[i] + fin_data$Description <- data$Description[i] + fin_data$Count <- data$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + vals$dup_data <- dup_table + vals$dup_data_input = T + #write.csv(dup_table, "duptable_data.csv", row.names = F) + if ((vals$known_data_input == T)){ + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() + dup_table <- vals$dup_data + known_table <- vals$known_data + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + vals$arts_data <- arts_data + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- arts_data %>% + dplyr::filter(Core != "Not_core") + shiny::updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "ARTS" ) + shiny::updateSelectInput(session, "group_by", + selected = "ARTS" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } + } + } + read_deep <- function(data){ + res_validation <- validate_deep_input(data) + if (!(res_validation[[1]])){ + deep_data <- NULL + return(NULL) + } else{ + deep_data <- res_validation[[2]] + } + drop_cols <- c("nrp","polyketide") + # Read data + deep_data <- deep_data %>% + dplyr::mutate(pks=polyketide, nrps = nrp ) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + # Add chromosome info column + vals$deep_data <- deep_data + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Start <- vals$deep_data$nucl_start + vals$deep_data$Stop <- vals$deep_data$nucl_end + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + #write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) + vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") + vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "DeepBGC" ) + shiny::updateSelectInput(session, "group_by", + selected = "DeepBGC" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC") + + } + } + read_rre <- function(data){ + res_validation <- validate_rre_input(data) + if (!(res_validation[[1]])){ + data <- NULL + return(NULL) + } else{ + data <- res_validation[[2]] + } + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + vals$rre_data <- data %>% + tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) + # Add ID column + vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) + vals$rre_data$Cluster <- vals$rre_data$ID + vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data['Type'] <- 'ripp' + vals$rre_data['Type2'] <- 'ripp' + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + vals$rre_data <- data.frame(vals$rre_data) + #write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input = TRUE + vals$data_upload_count <- vals$data_upload_count +1 + vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") + vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "RRE-Finder" ) + shiny::updateSelectInput(session, "group_by", + selected = "RRE-Finder" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "RRE-Finder") + + } + if (!is.null(vals$rre_data$Probability)){ + vals$rre_more = T + } else { + vals$rre_more = F + } + } + + #---------------------------------------------------------------- + ## Loading and processing of example data - + ##---------------------------------------------------------------- + shiny::observeEvent(input$anti_sco,{ + + anti_data <- read.csv("inst/extdata/sco_antismash.csv") + anti_data <- read_antismash(anti_data) + + }) + + shiny::observeEvent(input$gecco_sco,{ + gecco_data <- read.delim("inst/extdata/sco_gecco.tsv") + read_gecco(gecco_data) + + }) + + shiny::observeEvent(input$prism_sco,{ + # Read data + + data <- rjson::fromJSON(file = "inst/extdata/sco_prism.json") + read_prism(data) + + }) + + shiny::observeEvent(input$sempi_sco,{ + sempi_data <- read.csv("inst/extdata/sco_sempi.csv") + read_sempi(sempi_data) + + }) + + shiny::observeEvent(input$arts_sco, { + + data <- read.delim("inst/extdata/sco_duptable.tsv") + disable_event_logic() + read_arts_dupdata(data) + + data <- read.delim("inst/extdata/sco_knownhits.tsv") + read_arts_knownhits(data) + }) + + shiny::observeEvent(input$deep_sco, { + + data <- read.delim("inst/extdata/sco_deep.tsv") + read_deep(data) + }) + + shiny::observeEvent(input$rre_sco, { + + # Read data + data <- read.delim("inst/extdata/sco_rre.txt") + read_rre(data) + + }) + + ##---------------------------------------------------------------- + ## Loading and processing user data - + ##---------------------------------------------------------------- + shiny::observeEvent(input$anti_data,{ + + disable_event_logic() + # Read data + if (input$anti_data$type=="text/csv"){ + anti_data <- read.csv(input$anti_data$datapath) + }else{ + data <- rjson::fromJSON(file = input$anti_data$datapath) + types <- sapply(data$records, function(y){ + lapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + tolower(x$qualifiers$product) + } + }) + }) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + location <- sapply(data$records, function(y){ + unlist(sapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + unlist(x$location) + } + }) + ) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + + } + + read_antismash(anti_data) + + }) + + shiny::observeEvent(input$sempi_data,{ + + + sempi_data <- read.csv(input$sempi_data$datapath) + read_sempi(sempi_data) + + }) + + shiny::observeEvent(input$gecco_data,{ + + gecco_data <- read.delim(input$gecco_data$datapath) + read_gecco(gecco_data) + + }) + + # These are for ARTS data processing + # input$known_data and inoput$dup_data + shiny::observeEvent(input$known_data, { + disable_event_logic() + + data <- read.delim(input$known_data$datapath) + read_arts_knownhits(data) + }) + + shiny::observeEvent(input$dup_data, { + disable_event_logic() + + data <- read.delim(input$dup_data$datapath) + + read_arts_dupdata(data) + }) + + shiny::observeEvent(input$prism_data,{ + + # Read data + if (input$prism_data$type == "text/csv"){ + prism_data <- read.csv(input$prism_data$datapath) + read_prism(prism_data, json=F) + } else{ + data <- rjson::fromJSON(file = input$prism_data$datapath) + read_prism(data) + } + + }) + + shiny::observeEvent(input$deep_data, { + + data <- read.delim(input$deep_data$datapath) + read_deep(data) + }) + + shiny::observeEvent(input$rre_data, { + + # Read data + rre_data <- read.delim(input$rre_data$datapath) + read_rre(rre_data) + }) + + ############################################################################ + ############################################################################ + ### ### + ### INTERFACE LOGIC: WHAT TO SHOW AND WHEN ### + ### ### + ############################################################################ + ############################################################################ + # Update choices + update_ui_with_data <- function(){ + shiny::updateSelectInput(session, "ref", + choices = vals$choices$ref ) + shiny::updateSelectInput(session, "group_by", + choices = vals$choices$group_by ) + shiny::updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos ) + shiny::updateSelectInput(session, "ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco ) + shiny::updateSelectInput(session, "ref_comparison", + choices = vals$choices$ref_comparison ) + } + # Observe input of chromosome length + shiny::observeEvent(input$chr_len,{ + + vals$chr_len <- input$chr_len + }) + ##---------------------------------------------------------------- + ## Simple options showing/hiding logic for every data input - + ##---------------------------------------------------------------- + # SHOW rre_width parameter if data is available + # and hide_viz == F + shiny::observeEvent(vals$rre_data_input, { + + if (vals$rre_data_input == T){ + shinyjs::showElement(selector = "#rre_width") + } else{ + shinyjs::hideElement(selector = "#rre_width") + } + }) + # Show anti_hybrid option if data is available + # And checkbox is unchecked + shiny::observeEvent(vals$anti_data_input, { + + if (vals$anti_data_input == T){ + shinyjs::showElement(selector = "#anti_hybrid") + } else{ + shinyjs::hideElement(selector = "#anti_hybrid") + } + }) + # Show prism options if data is available + # If hide anti is F (checkbox), then show them + # Only if prism_json file, then show Prism-Supp + # And if hide_viz == F, and prism_json, then + # show width + shiny::observeEvent(vals$prism_data_input, { + if (vals$prism_data_input == T){ + shinyjs::showElement(selector = "#prism_hybrid") + if (vals$prism_json == T){ + shinyjs::showElement(selector = "#prism_supp") + } + if (vals$prism_json == T){ + shinyjs::showElement(selector = "#prism_supp_data_input_width") + } + } else{ + shinyjs::hideElement(selector = "#prism_header") + shinyjs::hideElement(selector = "#prism_hybrid") + shinyjs::hideElement(selector = "#prism_supp") + shinyjs::hideElement(selector = "#prism_supp_data_input_width") + } + }) + # Show SEMPI elements on data upload + shiny::observeEvent(vals$sempi_data_input, { + + if (vals$sempi_data_input == T){ + shinyjs::showElement(selector = "#sempi_hybrid") + shinyjs::showElement(selector = "#sempi_width") + } else{ + shinyjs::hideElement(selector = "#sempi_hybrid") + shinyjs::hideElement(selector = "#sempi_width") + } + }) + # Ahow ARTS data options, if data is available + shiny::observeEvent(vals$arts_data_input,{ + + if (vals$arts_data_input == T){ + shinyjs::showElement(selector = "#dup_choice") + shinyjs::showElement(selector = "#arts_width") + } else { + shinyjs::hideElement(selector = "#dup_choice") + shinyjs::hideElement(selector = "#arts_width") + } + }) + + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)){ + shinyjs::showElement(selector = "#improve_visualization_box") + } else { + shinyjs::hideElement(selector = "#improve_visualization_box") + } + }) + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$prism_supp_data_input == T) ){ + shinyjs::showElement(selector = "#prism_supplement_arts_box") + } else { + shinyjs::hideElement(selector = "#prism_supplement_arts_box") + } + }) + ##--------------------------------------------------------------- + ## Data processing options show/hide - + ##--------------------------------------------------------------- + # Count data uploads, to show tabs and corresponding + # options + + output$deep_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { + shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), + shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", tabName = "deep_filter", icon = shiny::icon("filter"), + shiny::uiOutput("deep_filter_UI_sidemenu") + ) + ) + + } + } + }) + output$gecco_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ + shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco", icon = icon("fas fa-dragon"), + shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", tabName = "gecco_filter", icon = shiny::icon("filter"), + shiny::uiOutput("gecco_filter_UI_sidemenu") + )) + } + } + + }) + output$anno_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=1){ + shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) + } + }) + output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) + } + }) + output$summarize_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >=2){ + shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) + } + }) + output$biocircos_coloring <- shiny::renderUI({ + if (input$ShowBiocircosColoring == T){ + shinydashboardPlus::box( + title = "Biocircos coloring scheme", + closable = TRUE, + collapsible = TRUE, + DT::dataTableOutput("biocircos_legend") %>% + shinycssloaders::withSpinner() + ) + } + }) + output$deep_filter_box <- shiny::renderUI({ + if (vals$deep_data_input == T){ + vals$deep_global <- T + shinydashboardPlus::box( + title = "DeepBGC filtering", + id = "deep_filtering_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + } + }) + output$gecco_filter_box <- shiny::renderUI({ + if (vals$gecco_data_input == T){ + vals$gecco_global <- T + shinydashboardPlus::box( + title = "GECCO filtering", + id = "gecco_filtering_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + } + }) + + output$deep_filter_UI_sidemenu <- shiny::renderUI({ + vals$deep_sidebar <- T + shiny::tagList( + shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type_sidemenu","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + }) + output$gecco_filter_UI_sidemenu <- shiny::renderUI({ + vals$gecco_sidebar <- T + shiny::tagList( + shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + }) + + update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check){ + if( (as.numeric(listening_value) != comparing_values) && (rendering_check == F)){ + shiny::updateSliderInput(session, updating_value, NULL, listening_value) + return(list(as.numeric(listening_value),F)) + } else{ + if (grepl("sidemenu", updating_value) == T){ + shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + }else{ + shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + } + return(list(comparing_values, F)) + } + } + + + shiny::observeEvent(input$score_a,{ + res <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu", vals$deep_sidebar) + vals$score_a <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_d,{ + res <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu", vals$deep_sidebar ) + vals$score_d <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_c,{ + res <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu", vals$deep_sidebar ) + vals$score_c <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$domains_filter,{ + res <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar ) + vals$domains_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$biodomain_filter,{ + res <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" , vals$deep_sidebar) + vals$biodomain_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$gene_filter,{ + res <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar ) + vals$gene_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$cluster_type,{ + res <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar ) + vals$cluster_type <-res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_a_sidemenu,{ + res <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a", vals$deep_global ) + vals$score_a <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$score_d_sidemenu,{ + res <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" , vals$deep_global ) + vals$score_d <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$score_c_sidemenu,{ + res <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" , vals$deep_global ) + vals$score_c <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_sidemenu,{ + res <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" , vals$deep_global ) + vals$domains_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$biodomain_filter_sidemenu,{ + res <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" , vals$deep_global ) + vals$biodomain_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$gene_filter_sidemenu,{ + res <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter", vals$deep_global ) + vals$gene_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$cluster_type_sidemenu,{ + res <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type", vals$deep_global ) + vals$cluster_type <- res[[1]] + vals$deep_global <- res[[2]] + }) + + + + shiny::observeEvent(input$score_average_gecco,{ + res <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu",vals$gecco_sidebar ) + vals$score_average_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_cluster_gecco,{ + res <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu",vals$gecco_sidebar ) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_gecco,{ + res <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ,vals$gecco_sidebar) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$prot_filter_gecco,{ + res <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ,vals$gecco_sidebar) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_average_gecco_sidemenu,{ + res <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco",vals$gecco_global ) + vals$score_average_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$score_cluster_gecco_sidemenu,{ + res <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco",vals$gecco_global ) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_gecco_sidemenu,{ + res <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco",vals$gecco_global ) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$prot_filter_gecco_sidemenu,{ + res <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco",vals$gecco_global ) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + + shiny::observeEvent(input$restore_box,{ + box_ids <- c("deep_comparison_box", "deep_rate_box","deep_comparison_controls_box","gecco_comparison_box", + "gecco_rate_box","gecco_comparison_controls_box","annotation_reference_box","annotation_reference_comparison_box", + "annotation_reference_comparison_controls_box","biocircos_plot_box","biocircos_controls_box", + "ranking_barplot_box","group_table_box","upload_anti_box","upload_prism_box", + "upload_sempi_box","upload_deep_box","upload_gecco_box","upload_rre_box","upload_arts_box", + "use_example_data_box","rename_box","prism_supplement_arts_box", "improve_visualization_box", + "download_data_box","gecco_filtering_box","deep_filtering_box") + for (id in box_ids){ + shinydashboardPlus::updateBox(id, action = "restore") + } + }) + + + # Logic show/hide selectinput in Link coloring in + # Biocircos + shiny::observeEvent(input$label_color_class, { + + if (input$label_color_class == "R"){ + shinyjs::showElement(selector = "#ref_col_biocircos") + } else { + shinyjs::hideElement(selector = "#ref_col_biocircos") + } + }) + # Make hybrids from the data, if checkbox is checked + # TODO Put the function to the root. + # Tou have duplicated code + shiny::observeEvent(input$anti_hybrid, ignoreInit=T,{ + + if (input$anti_hybrid==T){ + vals$anti_data$Type2 <- hybrid_col(vals$anti_data) + }else { + vals$anti_data$Type2 <- vals$anti_type + } + + }) + shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { + + if (input$prism_hybrid==T){ + vals$prism_data$Type2 <- hybrid_col(vals$prism_data) + }else { + vals$prism_data$Type2 <- vals$prism_type + } + }) + shiny::observeEvent(input$sempi_hybrid, ignoreInit=T,{ + + if (input$sempi_hybrid==T){ + vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) + }else { + vals$sempi_data$Type2 <- vals$sempi_type + } + }) + # Rename the data, if button is clicked + shiny::observeEvent(input$rename, { + + rename_data <- vals$rename_data + if (vals$anti_data_input == T){ + anti_data <- read.csv("anti_data.csv") + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] + anti_data['Type2'] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T){ + sempi_data <- read.csv("sempi_data.csv") + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] + sempi_data['Type2'] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if(vals$prism_data_input == T){ + prism_data <- read.csv("prism_data.csv") + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] + prism_data['Type2'] <- vals$prism_type + vals$prism_data <- prism_data + } + shinyjs::showElement(selector = "#reset_name") + shinyjs::hideElement(selector = "#rename") + vals$renamed <- T + shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) + }) + # When the new data is uploaded and renamed + # is T, then rename data on upload + shiny::observeEvent(check_to_rename(), { + + shiny::req(vals$renamed == T) + + rename_data <- vals$rename_data + if (vals$anti_data_input == T){ + anti_data <- read.csv("anti_data.csv") + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] + anti_data['Type2'] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T){ + sempi_data <- read.csv("sempi_data.csv") + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] + sempi_data['Type2'] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if(vals$prism_data_input == T){ + prism_data <- read.csv("prism_data.csv") + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] + prism_data['Type2'] <- vals$prism_type + vals$prism_data <- prism_data + } + }) + # Reset the renaming. Uncheck the hybrid checkboxes + shiny::observeEvent(input$reset_name, { + + vals$anti_data['Type2'] <- vals$anti_data['Type'] + vals$sempi_data['Type2'] <- vals$sempi_data['Type'] + vals$ prism_data['Type2'] <- vals$ prism_data['Type'] + if (input$anti_hybrid==T){ + shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) + } + if (input$prism_hybrid==T){ + shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) + } + if (input$sempi_hybrid==T){ + shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) + } + shinyjs::showElement(selector = "#rename") + shinyjs::hideElement(selector = "#reset_name") + vals$renamed <- F + }) + # Read the uploaded renaming scheme csv + shiny::observeEvent(input$rename_data,{ + + rename_data <- read.csv(input$rename_data$datapath) + vals$rename_data <- rename_data + coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") + }) + + + # What to do, if hide DeepBGC comparison options scheme is triggered + + + ############################################################################ + ############################################################################ + ### ### + ### COMPUTATIONS ### + ### ### + ############################################################################ + ############################################################################ + shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ + if (input$prism_supp == T){ + vals$prism_supp_data_input = T + vals$need_filter <- T + if (!("PRISM-Supp" %in% names(vals$choices$ref))){ + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() + } + } else { + vals$prism_supp_data_input = F + vals$need_filter <- T + vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref)%in%c("PRISM-Supp"))] + vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by)%in%c("PRISM-Supp"))] + vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos)%in%c("PRISM-Supp"))] + update_ui_with_data() + } + }) + + # Compute all interceptions on data upload. + # dplyr::filter while ploting then. + shiny::observeEvent(inputData(), ignoreInit = T,priority = 5,{ + # GENERATE DATA + if (vals$anti_data_input == TRUE){ + anti_data <- vals$anti_data + anti_inter <- vals$anti_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + + } + if (vals$deep_data_input == TRUE){ + deep_data <- vals$deep_data + deep_inter <- vals$deep_data %>% + dplyr::select(Start, Stop) + + deep_inter$seqnames <- "chr" + } + if (vals$rre_data_input == TRUE){ + # Convert numeric columns in a dataframe as a numeric + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(vals$rre_data) + # Start/Stop columns from rre data as matrix + rre_inter <- rre_data %>% + dplyr::select(Start, Stop) + rre_inter$seqnames <- "chr" + } + if (vals$prism_data_input == TRUE){ + # Store master prism data in local variable + prism_data <- vals$prism_data + # Start/Stop columns from prism data as matrix + prism_inter <- prism_data %>% + dplyr::select(Start,Stop) + prism_inter$seqnames <- "chr" + } + if (vals$sempi_data_input == TRUE){ + # Store master prism data in local variable + sempi_data <- vals$sempi_data + # Start/Stop columns from prism data as matrix + sempi_inter <- vals$sempi_data %>% + dplyr::select(Start,Stop) + sempi_inter$seqnames <- "chr" + } + if (vals$prism_supp_data_input == T){ + prism_supp_data <- vals$prism_supp_data + prism_supp_inter <- vals$prism_supp_data %>% + dplyr::select(Start,Stop) + prism_supp_inter$seqnames <- "chr" + } + if (vals$arts_data_input == T){ + arts_data <- vals$arts_data + arts_inter <- vals$arts_data %>% + dplyr::select(Start,Stop) + arts_inter$seqnames <- "chr" + } + if (vals$gecco_data_input == TRUE){ + gecco_data <- vals$gecco_data + # Start/Stop columns from prism data as matrix + gecco_inter <- vals$gecco_data %>% + dplyr::select(Start,Stop) + gecco_inter$seqnames <- "chr" + } + + get_inter <- function(inter1, inter2){ + query <- GenomicRanges::makeGRangesFromDataFrame(inter2) + subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) + interseption <- GenomicRanges::findOverlaps(query,subject) + inter_from <- interseption@from + inter_to <- interseption@to + return(list(from = inter_from, to = inter_to)) + } + + inters <- vals$inters + index = 1 + for (i in data_uploads){ + index_2 = 1 + j = soft_names[index] + for (p in data_uploads){ + x = soft_names[index_2] + if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ + if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ + res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) + new_res <- list() + new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster + new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster + inters[[j]][[x]] <- new_res + inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + } + + } + index_2 = index_2 +1 + } + if (vals[[i]] == TRUE){ + vals$computed[[j]] <- TRUE + } + index = index +1 + } + + vals$inters <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ + vals$inters_filtered <- inters + enable_event_logic() + } else{ + vals$need_filter <- T + vals$filter_data <- T + } + + }) + # dplyr::filter ARTS, DeepBGC, GECCO interception data + # and general dataframes to plot, if data filtering + # options are triggered + shiny::observeEvent({dynamicInput() + to_debounce() + }, ignoreInit = T, priority = 4 ,{ + shiny::req(vals$data_upload_count>=1) + inters <- vals$inters + if (vals$deep_data_input == TRUE){ + if (vals$need_filter == F) { + biocircos_deep <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) + vals$deep_data_filtered <- biocircos_deep + } else { + biocircos_deep <- vals$deep_data_filtered + } + if (vals$data_upload_count!=1){ + new_deep <- lapply(inters$deep, function(x){ + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters + } + } + if (vals$gecco_data_input == TRUE){ + if (vals$need_filter == F) { + gecco_data <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) + vals$gecco_data_filtered <- gecco_data + } else { + gecco_data <- vals$gecco_data_filtered + } + if (vals$data_upload_count!=1){ + new_gecco <- lapply(inters$gecco, function(x){ + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$gecco) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to + } + new_inters$gecco <- new_gecco + vals$inters_filtered <- new_inters + inters <- new_inters + } + } + if (vals$arts_data_input == TRUE){ + if (input$dup_choice != "All"){ + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + if (vals$data_upload_count!=1){ + new_arts <- lapply(inters$arts, function(x){ + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from=new_from, to=new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))){ + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } + } else { + vals$arts_data_filtered <- vals$arts_data + vals$inters_filtered <- inters + + } + } + if (input$prism_supp == FALSE){ + inters$prism_supp <- NULL + for (name in names(inters)) { + inters[[name]][which(names(inters[[name]])%in%c("prism_supp"))]<-NULL + } + } + if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { + vals$inters_filtered <- inters + } + vals$need_filter <- F + vals$filter_data <- F + vals$can_plot_deep_ref = T + enable_event_logic() + + }) + # Compute the Biociros plot. Store information to plot later + shiny::observeEvent(biocircos_listen(), ignoreInit = T,priority = 3 ,{ + shiny::req(vals$data_upload_count >=2) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_biocircos == T) + ##source("src/biocircos_functions.R") + #BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + + + rename_data <- vals$rename_data + coloring_datatable <- vals$coloring_datatable + + index <- 1 + # browser() + for (upload in data_uploads){ + if (vals[[upload]] == T){ + # Store data in local variable + corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) + init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color , coloring_datatable) + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes <- init_data[[1]] + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- init_data[[2]] + # Add arcs begin positions. (Start column) + arcs_begin <- init_data[[3]] + # Stop position of arcs. + arcs_end <- init_data[[4]] + # Add Arcs labels. Can add only one label... + arc_labels <- init_data[[5]] + + arc_col <- init_data[[6]] + } + index <- index +1 + } + # Add to tracklist. Then it can be populated with links + tracklist <- BioCircos::BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + # from second one. IDs are duplicated, if intercepted more than one time + + chromosomes_start <- c() + chromosomes_end <- c() + link_pos_start <- c() + link_pos_start_1 <- c() + link_pos_end <- c() + link_pos_end_2 <- c() + label_1 <- c() + label_2 <- c() + label_color <- c() + + #CALCULATIONS + # ----------------------------------------- + + + data_uploads_2 <- data_uploads + soft_2 <- soft_namings + soft_names_2 <- soft_names + data_to_use_2 <- data_to_use + index <- 1 + for (upload in data_uploads){ + data_uploads_2 <- data_uploads_2[-1] + soft_2 <- soft_2[-1] + soft_names_2 <- soft_names_2[-1] + data_to_use_2 <- data_to_use_2[-1] + index2 <- 1 + if (vals[[upload]] == T){ + for (upload2 in data_uploads_2){ + if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ + output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) + + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color = c(label_color, output[[11]] ) + } + index2 <- index2 +1 + } + write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) + } + index <- index +1 + } + + + + + # Combine labels with mapply to one list + link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) + + # Add links and labels to the track list for subsequent visualization + if ((input$label_color == T) & (length(chromosomes_start) > 0)){ + group_colors <- plyr::count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])){ + subset <- unname( which(label_color %in% group_colors$x[i])) + tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i]) + } + } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ + tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else{ + shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) + } + + vals$tracklist <- tracklist + vals$Biocircos_chromosomes <- Biocircos_chromosomes + }) + + shiny::observeEvent(deep_reference(), ignoreInit = T,{ + shiny::req(vals$data_upload_count >=1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_deep_ref == T) + shiny::req(input$ref != "") + shiny::req(vals$data_upload_count >=1) + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + ##source("src/deep_reference_functions.R") + # GENERATE DATA + index <- 1 + for (upload in data_uploads){ + if (vals[[upload]] == T){ + data<- vals[[data_to_use[index]]] + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index],input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width)) + } + index <- index +1 + } + + + lett <- rev(LETTERS)[1:9] + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + + + + # MAKE COMPUTATIONS + sup_index <- 1 + soft_lttrs <- lett + rename_y_axis <- vals$rename_y_axis + rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ + soft_lttrs[x]=soft_namings[x] + }) + names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] + for (upload in data_uploads){ + soft_lttr <- soft_lttrs[1] + soft_lttrs <- soft_lttrs[-1] + if (vals[[upload]] == T){ + soft_major <- soft_names[sup_index] + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F,inters) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more,inters) + seg_ref <- seg_ref_g + + if (input$ref == soft_namings[sup_index]){ + shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + + eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more) + soft_let <- abbr[sup_index] + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index = 1 + for (i in data_uploads){ + if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major,inter = T, inters) + seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df,inter = T, vals$rre_more, inters) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- add_more_annot(seg_df, plot, soft_names, index, vals$rre_more) + } + index = index +1 + + } + plot <- plot + + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("Annotations' comparison to the reference") + suppressWarnings(to_plot <- plotly::ggplotly(plot, tooltip = tooltip)) + to_plot <- to_plot %>% + plotly::layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types '))) + + + } + seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + vals[[soft_datafr[sup_index]]] <- seg_ref + } + sup_index <- sup_index +1 + } + vals$rename_y_axis <- rename_y_axis + vals$deep_reference_to_plot <- to_plot + }) + + + ############################################################################ + ############################################################################ + ### ### + ### OUTPUT PLOTS ### + ### ### + ############################################################################ + ############################################################################ + + ##---------------------------------------------------------------- + ## DeepBGC Comparison tab - + ##---------------------------------------------------------------- + # Render barplot + output$deep_barplot <- shiny::renderPlot({ + shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + deep_inter_1 <- vals$deep_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type == "Activity") { + score <- "score_a" + } else if (input$score_type == "DeepBGC") { + score <- "score_d" + } else if (input$score_type == "Cluster_Type") { + score <- "score_c" + } + deep_inter_1$score <- deep_inter_1[[score]] + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ + + deep_inter <- deep_inter_1 %>% + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison == 'Antismash'){ + anti_inter <- shiny::isolate(vals$anti_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'PRISM'){ + anti_inter <- shiny::isolate(vals$prism_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'SEMPI'){ + anti_inter <- shiny::isolate(vals$sempi_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + # Get the interception of two matrices + if (length(deep_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + if (input$ref_comparison == 'Antismash'){ + used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'PRISM'){ + used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc + cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'SEMPI') { + used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc + cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_deep <- data.frame(fullnes_of_annotation) + #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), + paste("DeepBGC score:", as.character(input$score_d)), + paste("Cluster type score:", as.character(input$score_c)), sep = "\n") + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$deep_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_deep)) + + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_deep) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison == 'Antismash'){ + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison == 'PRISM'){ + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison == 'SEMPI'){ + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + ##---------------------------------------------------------------- + ## GECCO Comparison tab - + ##---------------------------------------------------------------- + # Render barplot + output$gecco_barplot <- shiny::renderPlot({ + shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + gecco_inter_1 <- vals$gecco_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score <- "score_a" + } else if (input$score_type_gecco == "Cluster_Type") { + score <- "score_c" + } + gecco_inter_1$score <- gecco_inter_1[[score]] + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ + + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix + gecco_inter <- gecco_inter_1 %>% + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) + if (length(gecco_inter$Start) > 0) { + gecco_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison_gecco == 'Antismash'){ + anti_inter <- vals$anti_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'PRISM'){ + anti_inter <- vals$prism_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'SEMPI'){ + anti_inter <- vals$sempi_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(gecco_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(gecco_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison_gecco == 'Antismash'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'PRISM'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'SEMPI') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_gecco <- data.frame(fullnes_of_annotation) + #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), + paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$gecco_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_gecco)) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_gecco) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison_gecco == 'Antismash'){ + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'PRISM'){ + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'SEMPI'){ + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + ##--------------------------------------------------------------- + ## Annotation on chromosome plots' tab - + ##--------------------------------------------------------------- + + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information + # For antismash and PRISM data showed only ID, Start, Stop, Type + output$deep_reference <- plotly::renderPlotly({ + shiny::req(vals$deep_reference_to_plot) + vals$can_plot_deep_ref_2 <- T + vals$deep_reference_to_plot + }) + + output$deep_reference_2 <- plotly::renderPlotly({ + shiny::req(vals$can_plot_deep_ref_2 == T) + vals$can_plot_deep_ref_2 == F + rename_y_axis <- shiny::isolate(vals$rename_y_axis) + data <- NULL + + index <- 1 + for (upload in data_uploads){ + if (is.null(data)){ + if (vals[[upload]] == T){ + if (dim(vals[[data_to_use[index]]])[1] != 0){ + data <- vals[[data_to_use[index]]] + } + } + } + index <- index+1 + } + + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) + if (vals$anti_data_input == TRUE){ + suppressWarnings(plot <- plot + + ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + } + if (vals$deep_data_input == TRUE){ + if (dim(vals$seg_df_ref_d)[1] >0) { + plot <- plot + + ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + } + if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + } + } + if (vals$prism_data_input == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (vals$sempi_data_input == TRUE){ + suppressWarnings(plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + + + } + if (input$prism_supp == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + if (vals$arts_data_input == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) + } + if (vals$gecco_data_input == TRUE){ + if (dim(vals$seg_df_ref_g)[1] >0) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + } + to_plot <- plotly::ggplotly(plot + + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot %>% plotly::layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types ')), + autosize=TRUE) + }) #%>% shiny::debounce(200) + + ##---------------------------------------------------------------- + ## Biocircos plot tab - + ##--------------------------------------------------------------- + # Render Biocircos Plot for all-vs-all comparison + output$biocircos <- BioCircos::renderBioCircos({ + shiny::req(vals$data_upload_count >1) + + # Plot BioCircos + BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) + }) + + + output$biocircos_legend <- DT::renderDataTable({ + shiny::req(vals$data_upload_count >=1) + rownames = FALSE + new_data <- vals$coloring_datatable + color_vec <- new_data$x$data$Color + options(DT.options = list(pageLength = 50)) + new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) + + + }) + + # Updating values in Datatable on edit + shiny::observeEvent(input$biocircos_legend_cell_edit, { + if (input$biocircos_legend_cell_edit$col[1] == 0){ + vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 1){ + vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 2){ + vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value + } + }) + ##--------------------------------------------------------------- + ## Summarize tab - + ##--------------------------------------------------------------- + # Render barplot with number plyr::count of interception for BGC IDs + output$barplot_rank <- plotly::renderPlotly({ + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_barplot_rank == T) + + antismash_count <- NULL + prism_count <- NULL + deep_count <- NULL + rre_count <- NULL + sempi_count <- NULL + prism_supp_count <- NULL + arts_count <- NULL + gecco_count <- NULL + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + index <- 1 + ranking_data <- NULL + for (upload in data_uploads){ + if (vals[[upload]] == T){ + counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] + # Add prefices to the ID to plot for a barplot. + counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) + # Add label column to the dataframe, from which we will plot + counts_var$label <- rep(soft_namings[index], length(counts_var$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + counts_var$Type <- anot_var$Type + # Add Start positions (to visualize on hover) + counts_var$Start <- anot_var$Start + # Add Stop positions (to visualize on hover) + counts_var$Stop <- anot_var$Stop + if (is.null(ranking_data)){ + ranking_data <- counts_var + } else{ + ranking_data <- rbind(ranking_data, counts_var) + } + } + index <- index +1 + } + + + # Fix column names in the master dataframe + colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") + # Plot + plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14)) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), + tooltip=c("Type", "Start", "Stop") + ) + + + }) + + # Render table with data + output$group_table <- shiny::renderTable({ + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_group_table == T) + #source("src/group_table_functions.R") + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) + colnames(df_test) <- abbr + added_inters <- c(soft_names[match(input$group_by, soft_namings)]) + add_inters <- list() + if (input$count_all == F){ + df_test[nrow(df_test)+1,] <- NA + } else{ + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] + df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- abbr + df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test)+1,] <- NA + } + for (i in seq(1:length(data_uploads))){ + if (input$group_by==soft_namings[[i]]){ + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))){ + if (name==soft_names[match(soft_n, soft_names)][h]){ + colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) + } + } + + index <- index +1 + } + excluded_names <- abbr[abbr != as.name(abbr[i])] + data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + b=paste(eval(as.name(excluded_names[2])), collapse=","), + c=paste(eval(as.name(excluded_names[3])), collapse=","), + d=paste(eval(as.name(excluded_names[4])), collapse=","), + e=paste(eval(as.name(excluded_names[5])), collapse=","), + f=paste(eval(as.name(excluded_names[6])), collapse=","), + g=paste(eval(as.name(excluded_names[7])), collapse=",")) + colnames(data) <- c(abbr[i], excluded_names) + for (p in abbr){ + data[[p]] <- gsub('NA,|,NA', '', data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, abbr)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))){ + if (vals[[data_uploads[f]]] != TRUE){ + data <- data %>% + dplyr::select(-as.name(soft_namings[f])) + } + } + + } else { + if ( !(soft_names[i] %in% added_inters)){ + matched_v <- match(added_inters,names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])){ + if (!(inter %in% added_inters)){ + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } + } + added_inters <- c(added_inters, soft_names[i])} + } + } + + for (name in names( add_inters) ){ + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + write.csv(data, "group_by.csv", row.names = F) + data + }) + + # Download used datasets (as for BioCircos) + output$download <- shiny::downloadHandler(filename = function(){ + paste("datasets.zip") + }, + content = function(file){ + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } else if (grepl('inst/scripts/group.py', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } + } + #create the zip file from flst vector + zip(file, flst) }, + contentType = "application/zip" ) + shiny::onSessionEnded(function() { + shiny::stopApp() + }) +} diff --git a/R/app_ui.R b/R/app_ui.R new file mode 100644 index 0000000..55da11e --- /dev/null +++ b/R/app_ui.R @@ -0,0 +1,494 @@ +#' The application User-Interface +#' +#' @param request Internal parameter for `{shiny}`. +#' DO NOT REMOVE. +#' @import shiny +#' @noRd +app_ui <- function(request) { + tagList( + # Leave this function for adding external resources + golem_add_external_resources(), + # Your application UI logic + shinydashboardPlus::dashboardPage( + shinydashboardPlus::dashboardHeader(title = "BGCViz"), + shinydashboardPlus::dashboardSidebar( + width = 350, + shinydashboard::sidebarMenu( + id="menu_items", + style = "white-space: normal;", + shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), + shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), + shinydashboard::menuItemOutput("deep_sidemenu_out"), + shinydashboard::menuItemOutput("gecco_sidemenu_out"), + shinydashboard::menuItemOutput("anno_sidemenu_out"), + shinydashboard::menuItemOutput("biocircos_sidemenu_out"), + shinydashboard::menuItemOutput("summarize_sidemenu_out"), + shinydashboard::menuItem(tabName = "restore_boxes", + actionButton("restore_box", "Restore all boxes", class = "bg-success")) + ) + ), + shinydashboard::dashboardBody( + tags$head( + tags$style(HTML(".main-sidebar { font-size: 15px; }")) #change the font size to 20 + ), + shinyjs::useShinyjs(), + shinydisconnect::disconnectMessage( + text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", + refresh = "Refresh", + background = "#FFFFFF", + colour = "#444444", + refreshColour = "#337AB7", + overlayColour = "#000000", + overlayOpacity = 0.6, + width = 450, + top = 50, + size = 22, + css = "" + ), + shinydashboard::tabItems( + shinydashboard::tabItem( tabName = "deep_sidemenu", + shiny::fluidRow( + tags$div( + id = "deep_data1", + div(id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison", + id = "deep_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput("deep_barplot", height = "500px",) %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e"))), + div(id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC rate", + id = "deep_rate_box", + collapsible = TRUE, + height = "100%", + plotly::plotlyOutput("deep_rate", height = "500px",) %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e"))))), + shiny::fluidRow( + tags$div( id = "deep_data2", + div(id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison controls", + id = "deep_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), + # Score to use for thresholds + shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC"), + selected = "Activity score"), + # Chose step for barplot (as a threshold to draw a bar) + shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ),options = list(handles="w,e"))) + )), + sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), + sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) + ), + shinydashboard::tabItem( + tabName = "gecco_sidemenu", + shiny::fluidRow( + tags$div( + id = "gecco_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison", + id = "gecco_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput("gecco_barplot", height = "500px") %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO rate", + id = "gecco_rate_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput("gecco_rate", height = "500px",)%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ), + ) + ), + shiny::fluidRow( + tags$div( + id = "gecco_data2", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison controls", + id = "gecco_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), + shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c( + "Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type"), + selected = "avg_p"), + shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ), options = list(handles="w,e")) + ) + ) + ), + sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), + sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) + ), + shinydashboard::tabItem( + tabName = "anno_sidemenu", + shiny::fluidRow( + tags$div( + id="anno_data1", + shiny::column( + width = 12, + div( + id="anno_div_1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotations reference", + id = "annotation_reference_box", + height = "100%", + width = NULL, + collapsible = TRUE, + closable = TRUE, + plotly::plotlyOutput("deep_reference_2") %>% + shinycssloaders::withSpinner() + ), options = list(handles="w,e")) + ), + div( + id="id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotation comparison to the reference", + id = "annotation_reference_comparison_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + height = "100%", + shiny::selectInput("ref", "Choose reference data", choices = c(""), + selected = ""), + plotly::plotlyOutput("deep_reference") %>% + shinycssloaders::withSpinner() + ), options = list(handles="w,e")), + ) + ) + )), + sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), + sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) + ), + shinydashboard::tabItem( + tabName = "biocircos_sidemenu", + shiny::fluidRow( + tags$div( + id = "biocircos_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Biocircos plot", + id = "biocircos_plot_box", + collapsible = TRUE, + closable = TRUE, + width = 12, + shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), + sidebar = shinydashboardPlus::boxSidebar( + id = "biocircos_box_sidebar", + width = 25, + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') + ), + BioCircos::BioCircosOutput("biocircos", height = "900px")%>% + shinycssloaders::withSpinner() + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "biocircos_data2", + div( + id = "id1", + shiny::uiOutput("biocircos_coloring") + ) + ) + ), + sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), + sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) + ), + shinydashboard::tabItem( + tabName = "summarize_sidemenu", + shiny::fluidRow( + tags$div( + id="summarize_data1", + div( + id="id1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Ranking barplot", + id = "ranking_barplot_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput("barplot_rank", height = "600px")%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ), + div( + id="id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Group table", + id = "group_table_box", + collapsible = TRUE, + closable = TRUE, + style='overflow-x: scroll;height:700px;overflow-y: scroll;', + height = "100%", + shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), + shiny::tableOutput("group_table")%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ) + ) + ), + sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) + ), + shinydashboard::tabItem( + tabName = "uploaddata_sidemenu", + shiny::fluidRow( + tags$div( + id="upload_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Upload Antismash data", + id = "upload_anti_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("anti_data", + "Upload Antismash data", accept = list(".csv", ".json")) + ) + ), + div( + id = "id2", + shinydashboardPlus::box( + title = "Upload PRISM data", + id = "upload_prism_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("prism_data", + "Upload PRISM data", accept = list(".csv", ".json")) + ) + ), + div( + id = "id3", + shinydashboardPlus::box( + title = "Upload SEMPI 2.0 data", + id = "upload_sempi_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("sempi_data", + "Upload SEMPI 2.0 data", accept = ".csv") + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Upload DeepBGC data", + id = "upload_deep_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("deep_data", + "Upload DeepBGC data", accept = ".tsv") + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id="upload_data2", + div( + id = "id1", + shinydashboardPlus::box( + title = "Upload Gecco data", + id = "upload_gecco_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("gecco_data", + "Upload Gecco data", accept = ".tsv") + ) + ), + div( + id = "id2", + shinydashboardPlus::box( + title = "Upload RRE-Finder data", + id = "upload_rre_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("rre_data", + "Upload RRE-Finder data") + ) + ), + div( + id = "id3", + shinydashboardPlus::box( + title = "Upload ARTS data", + id = "upload_arts_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("known_data", + "Upload ARTS knownhits data", accept = ".csv"), + shiny::fileInput("dup_data", + "Upload ARTS duptable data", accept = ".csv") + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Use Example data", + id = "use_example_data_box", + collapsible = TRUE, + closable = TRUE, + shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), + shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) + ) + ) + ) + ), + sortable::sortable_js("upload_data1", options = sortable::sortable_options(swap = TRUE, group = "upload_data")), + sortable::sortable_js("upload_data2", options = sortable::sortable_options(swap = TRUE, group = "upload_data")) + ), + shinydashboard::tabItem( + tabName = "options_sidemenu", + shiny::fluidRow( + shiny::column( + width = 6, + tags$div( + id="options_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Rename", + id = "rename_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + shiny::fileInput("rename_data", + "Upload renaming and coloring scheme", accept = ".csv"), + shiny::actionButton("rename", "Rename"), + shiny::actionButton("reset_name", "Reset") + ) + ), + div( + id = "id2", + shiny::uiOutput("deep_filter_box") + ))), + shiny::column( + width = 6, + tags$div( + id="options_data2", + div( + id = "id3", + shiny::uiOutput("gecco_filter_box") + ), + div( + id = "id5", + shinydashboardPlus::box( + title = "Improve global visualization", + id = "improve_visualization_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), + shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Prism supplement + ARTS options", + id = "prism_supplement_arts_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), + selected = "All") + ) + ), + div( + id = "id6", + shinydashboardPlus::box( + title = "Download data", + id = "download_data_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) + ) + ) + ) + ) + ), + sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE, group = "options_data")), + sortable::sortable_js("options_data2", options = sortable::sortable_options(swap = TRUE, group = "options_data")) + ) + ) + ) + ) + ) +} + +#' Add external Resources to the Application +#' +#' This function is internally used to add external +#' resources inside the Shiny application. +#' +#' @import shiny +#' @importFrom golem add_resource_path activate_js favicon bundle_resources +#' @noRd +golem_add_external_resources <- function(){ + + add_resource_path( + 'www', app_sys('app/www') + ) + + tags$head( + favicon(), + bundle_resources( + path = app_sys('app/www'), + app_title = 'BGCViz' + ) + # Add here other external resources + # for example, you can add shinyalert::useShinyalert() + ) +} + diff --git a/R/fct_biocircos.R b/R/fct_biocircos.R new file mode 100644 index 0000000..cb17076 --- /dev/null +++ b/R/fct_biocircos.R @@ -0,0 +1,128 @@ +#' initialize_biocircos +#' +#' @description Function, that initialized biocircos plot, setting proper chromosomes, length, arcs and their parameters +#' +#' @return Biocircos chromosomes, arcs, their start, end, labels, color in hexadecimal format +#' +#' @noRd +initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable){ + #Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[[name]] <- chr_len + #Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((biocircos_color == T)){ + arc_colors <- sapply(biocircos_anti$Type2, function(x){ + if (x %in% coloring_datatable$x$data$Name){ + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] + } else { + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + } + }) + } else { + arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + } + arc_col <- c(arc_col,as.character(arc_colors) ) + return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) +} + +#' add_biocircos_data +#' +#' @description Function, that adds data to the biocircos plot. It get the interception, make links between chromosomes and labels and color them (according to a chosen scheme) +#' +#' @return Chromosomes start and end, link start, end, and their color in hexadecimal format +#' +#' @noRd + +add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable){ + inter_s_rre_n <- data1_inter + inter_rre_s <- data2_inter + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) + label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) + label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) + #browser() + if (!is.null(inter_rre_s)){ + if (class == 'P'){ + subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + if (length(label_color) != 0){ + for (t in seq(1:length(label_color))){ + if (!is.null(subset_vec[t])){ + if (subset_vec[t] == F){ + label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + } + } + } + } else if (class == 'H'){ + if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else { + label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } + }else if (class == 'R'){ + if (data2_label == ref_col_biocircos){ + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else if (data1_label == ref_col_biocircos){ + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } + else{ + as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } + }))) + } else{ + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + } + } else { + label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + } + } + return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color)) +} \ No newline at end of file diff --git a/R/fct_deep_reference.R b/R/fct_deep_reference.R new file mode 100644 index 0000000..b96550b --- /dev/null +++ b/R/fct_deep_reference.R @@ -0,0 +1,164 @@ +#' simple_seg +#' +#' @description Function, that creates simple dataframe for values to plot in deep_reference. +#' +#' @return dataframe, with the fields: x (start of the cluster), y (arbitrary letter to change to the software further), +#' xend (End of a cluster), yend (arvitrary letter), Type (permanent), Type2 (which is temporary, if the data is renamed, +#' used for coloring and legend), Software, ID (unique number), Start, Stop (of a cluster, to show on mouse hover) +#' +#' @noRd +simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T, inters){ + if (inter== T){ + data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] + } else{ + data <- df + } + + seg_df <- data.frame(x=as.numeric(data$Start), + y=rep(letter, length(data$Cluster)), + xend=as.numeric( data$Stop), + yend=rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop) + return(seg_df) +} + + +#' add_arts +#' +#' @description Function, that add arts-specific data to the simple dataframe +#' +#' @return dataframe with the fields, specified in simple_seg() + added Hit, Core, Count, E_value, Bitscore, Model. +#' +#' @noRd +add_arts <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] + }else{ + subset_df <- df + } + seg_df$Hit = subset_df$Hit + seg_df$xend = as.numeric(subset_df$Stop) + seg_df$Core = subset_df$Core + seg_df$Count = subset_df$Count + seg_df$E_value = subset_df$Evalue + seg_df$Bitscore = subset_df$Bitscore + seg_df$Model = subset_df$Model + return(seg_df) +} +#' add_prism_supp +#' +#' @description Function, that add prism-supplement-specific data to the simple dataframe +#' +#' @return dataframe with the fields, specified in simple_seg() + added Score, Name and Full_Name +#' +#' @noRd +add_prism_supp <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] + }else{ + subset_df <- df + } + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Name = subset_df$Name + seg_df$Full_name = subset_df$Full_name + return(seg_df) +} +#' add_deep +#' +#' @description Function, that add deepbgc-specific data to the simple dataframe +#' +#' @return dataframe with the fields, specified in simpl_seg() + added Num_domains, deepbgc_score, activity +#' +#' @noRd +add_deep <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] + }else{ + subset_df <- df + } + seg_df$num_domains = subset_df$num_domains + seg_df$deepbgc_score = subset_df$deepbgc_score + seg_df$activity = subset_df$product_activity + return(seg_df) +} +#' add_rre +#' +#' @description Function, that add rre-finder-specific data to the simple dataframe. The function also checks if RRE +#' data is in the long format, or in the short one. It depends on RRE-Finder run parameters +#' +#' @return dataframe with the fields, specified in simple_seg() + added E_values in short format, or + Score, E_value, +#' P_value, RRE_Start, RRE_stop and Probability in long format +#' +#' @noRd +add_rre <- function(seg_df, soft_namings, df, inter=T, rre_more,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] + }else{ + subset_df <- df + } + if (rre_more == T){ + seg_df$xend=as.numeric(subset_df$Stop) + seg_df$Score = subset_df$Score + seg_df$Stop = subset_df$Stop + seg_df$E_value = subset_df$E.value + seg_df$P_value = subset_df$P.value + seg_df$RRE_start = subset_df$RRE.start + seg_df$RRE_stop = subset_df$RRE.end + seg_df$Probability = subset_df$Probability + } else { + seg_df$xend=subset_df$Stop + seg_df$E_value = subset_df$E.value + } + + return(seg_df) +} +#' add_gecco +#' +#' @description Function, that add gecco-specific data to the simple dataframe. +#' +#' @return dataframe with the fields, specified in simple_seg() + Num_proteins, Num_domains, Average_p, Max_p +#' +#' @noRd +add_gecco <- function(seg_df, soft_namings, df, inter=T,inters){ + if (inter == T){ + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] + }else{ + subset_df <- df + } + seg_df$Num_proteins = subset_df$num_prot + seg_df$Num_domains = subset_df$num_domains + seg_df$Average_p = subset_df$average_p + seg_df$Max_p = subset_df$max_p + return(seg_df) +} + +#' define_spec_seg_df +#' +#' @description Master function, which invokes the appropriate add_ function, based on a label. +#' +#' @return dataframe with the fields, specified in simple_seg() + specific to the software. +#' +#' @noRd +define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T, rre_more,inters){ + if (inter == F){ + soft_major <- "Not applicable" + } + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ + seg_df <- add_prism_supp(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ + seg_df <- add_arts(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ + seg_df <- add_deep(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ + seg_df <- add_gecco(seg_df, soft_major, df, inter,inters) + } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ + seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more,inters) + } + return(seg_df) +} \ No newline at end of file diff --git a/R/fct_filtering.R b/R/fct_filtering.R new file mode 100644 index 0000000..dcfff68 --- /dev/null +++ b/R/fct_filtering.R @@ -0,0 +1,79 @@ +#' filter_deepbgc +#' +#' @description Function, that given the deepbgc dataframe and input values as filter, will return filtered dataframe +#' +#' @return Filtered deepbgc dataframe +#' +#' @noRd +filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,score_d_input,domains_filter,biodomain_filter,gene_filter){ + score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) + score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) + score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + if (is.null(cluster_type)){ + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + score_d >= 50/100, num_domains >= 5, + num_bio_domains>=1, num_proteins>=1) + } else { + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo%>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(cluster_type)/100, Cluster_type, "under_threshold")) + #Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo%>% + dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter(score_a >= as.numeric(score_a_input )/ 100, score_c >=as.numeric(score_c_input)/100 , + score_d >= as.numeric(score_d_input)/100, num_domains >= domains_filter, + num_bio_domains>=biodomain_filter, num_proteins>=gene_filter) + } + + biocircos_deep['Start'] <- biocircos_deep$nucl_start + biocircos_deep['Stop'] <- biocircos_deep$nucl_end + biocircos_deep['Type'] <- biocircos_deep$product_class + biocircos_deep['Type2'] <- biocircos_deep$product_class + biocircos_deep['Cluster'] <- biocircos_deep$ID + return(biocircos_deep) +} +#' filter_gecco +#' +#' @description Function, that given the gecco dataframe and input values as filter, will return filtered dataframe +#' +#' @return Filtered gecco dataframe +#' +#' @noRd +filter_gecco <- function(gecco_data,score_cluster_gecco,score_average_gecco,domains_filter_gecco,prot_filter_gecco){ + score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) + score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) + if (is.null(score_cluster_gecco)){ + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , + num_domains >= 1, num_prot>=1) + } else{ + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score>as.numeric(score_cluster_gecco)/100, Type2, "under_threshold")) %>% + dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter(score_a >= as.numeric(score_average_gecco )/ 100, score_c >=as.numeric(score_cluster_gecco)/100 , + num_domains >= domains_filter_gecco, num_prot>=prot_filter_gecco) + } + return(gecco_data) +} \ No newline at end of file diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R new file mode 100644 index 0000000..f160b40 --- /dev/null +++ b/R/fct_format_transformation.R @@ -0,0 +1,122 @@ +#' sempi_to_df +#' +#' @description Function, which transforms Track.db file into dataframe, which could be then written to csv +#' +#' @return dataframe object with sempi results +#' +#' @noRd +sempi_to_df <- function(data){ +conn <- RSQLite::dbConnect(RSQLite::SQLite(), data) + +data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + + +data <- data %>% + dplyr::filter(trackid==6) + +types <- sapply(data$name, function(x){ + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) +}) + +sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) +colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") +sempi_data$Cluster <- as.numeric(sempi_data$Cluster) +sempi_data$Start <- as.numeric(sempi_data$Start) +sempi_data$Stop <- as.numeric(sempi_data$Stop) +sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) +return(sempi_data) +} +#' prism_to_df +#' +#' @description Function, that transforms prism json object into dataframe, which could be written to the csv file +#' +#' @return dataframe object +#' +#' @noRd +prism_to_df <- function(data){ +data <- rjson::fromJSON(file =args[1]) + + +types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) +}) + +types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } +}) + +start <- sapply(data$prism_results$clusters, function(x){ + x$start + +}) +end <- sapply(data$prism_results$clusters, function(x){ + x$end + +}) + +prism_data <- data.frame(cbind(start, end, types)) +prism_data <- prism_data %>% + dplyr::transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) +return(prism_data) +} + +#' antismash_to_df +#' +#' @description Function, that returns dataframe, out of supplied antismash json file +#' +#' @return dataframe object +#' +#' @noRd +antismash_to_df <- function(data){ + data <- rjson::fromJSON(file = data) + types <- sapply(data$records, function(y){ + lapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + tolower(x$qualifiers$product) + } + }) + }) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + location <- sapply(data$records, function(y){ + unlist(sapply(y$features, function(x){ + if (unlist(x$type == 'region')){ + unlist(x$location) + } + }) + ) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + return(anti_data) +} \ No newline at end of file diff --git a/R/fct_group_table.R b/R/fct_group_table.R new file mode 100644 index 0000000..8b2689e --- /dev/null +++ b/R/fct_group_table.R @@ -0,0 +1,20 @@ +#' refine_unique +#' +#' @description A function, that deletes identical values in a string, were numbers are separated with ',' +#' +#' @return List, were all same numbers are deleted, only one instance is left +#' +#' @noRd +refine_unique <- function(data){ + n <- tail(data, n=1) + data <- head(data, -1) + n_list <- stringr::str_split(n, ",") + out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) + res <- sapply(out, function(x){ + if (x==F){ + x + } + }) + + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) +} diff --git a/R/fct_helpers.R b/R/fct_helpers.R new file mode 100644 index 0000000..f452eae --- /dev/null +++ b/R/fct_helpers.R @@ -0,0 +1,78 @@ +#' rename_vector +#' +#' @description Function, that given the dataframe, and renaming dataframe, returns renamed vector. +#' +#' @return list of renamed values in a vector + notification +#' +#' @noRd +rename_vector <- function(data, renamed_dataframe, renaming_notification){ + type <- stringr::str_split(data$Type2, "__") + type_2 <- sapply(type, function(x){ + sapply(x, function(y){ + if (y %in% renamed_dataframe$Code){ + renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) + if( (length(renamed) >1) & (!( as.character(y) %in% names(renaming_notification)))){ + shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + type = "warning", duration = NULL) + shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) + renaming_notification[[as.character(y)]] <- renamed[[1]] + } + renamed[[1]] + } else { + y + } + + }) + + }) + type_3 <- sapply(type_2, function(x){ + dupl <- x[!duplicated(x)] + paste(dupl, collapse = "__") + }) + type_4 <- sapply(type_3, function(y){ + if (y %in% as.character(renamed_dataframe$Code)){ + as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] + } else { + y + } + }) + return(list(as.character(type_4), renaming_notification)) +} +#' correct_width +#' +#' @description Function, that checks if the width of RRE-Finder, ARTS< SEMPI and PRISM-Supp data should be increases +#' to improve visualization +#' +#' @return data with the corrected width +#' +#' @noRd +correct_width <- function(data, label, sempi_width,prism_supp_data_input_width,arts_width,rre_width){ + if ((label == 'SEMPI')&(sempi_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'PRISM-Supp')&(prism_supp_data_input_width == T)){ + data$Stop <- data$Stop + 20000 + } else if ((label == 'ARTS')&(arts_width == T)){ + data$Stop <- data$Stop + 30000 + } else if ((label == 'RRE-Finder')&(rre_width == T)){ + data$Stop <- data$Stop + 50000 + } + return(data) +} +#' hybrid_col +#' +#' @description Function, that substitute type with "hybrid", if it contains "__" (therefore cluster have multiple types) +#' +#' @return Vector of substituted types +#' +#' @noRd +hybrid_col <- function(data){ + data_split <- stringr::str_split(data$Type2, "__") + types <- sapply(data_split, function(x){ + if (length(unlist(x))>1){ + "hybrid" + } else{ + x + } + }) + return(types) +} \ No newline at end of file diff --git a/R/fct_reading_processing.R b/R/fct_reading_processing.R new file mode 100644 index 0000000..73ed7ee --- /dev/null +++ b/R/fct_reading_processing.R @@ -0,0 +1,150 @@ +#' fix_duplicates +#' +#' @description Function, that fix duplicates in Prism_supp data. (Is certain orf have 2 hits to a model in a data, then +#' they will be combined under one orf, but not the 2 separate records) +#' +#' @return Vector without duplicates +#' +#' @noRd +fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ + dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] + duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) + test_score <- test_score[order_vec] + to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] + test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] + iterate_one_more_time <- c() + should_iterate = F + for (i in seq(1:length(test_name))){ + if (length(dupl_names) == 0){ + should_iterate = F + break + } + if (test_name[i]==dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + iterate_one_more_time <- c(iterate_one_more_time, i) + } + } + if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ + should_iterate = T + } + while (should_iterate == T) { + for (i in iterate_one_more_time){ + if (test_name[i] == dupl_names[1]){ + dupl_names = dupl_names[-1] + test_score[i] = paste0(test_score[i], "/" ,to_add[1]) + to_add = to_add[-1] + } + if (length(dupl_names)==0){ + should_iterate = F + break + } + } + } + return(test_score) +} +#' process_prism_json_suppl +#' +#' @description Function, that processes the json prism file. +#' +#' @return list of prism data and prism_supplement data +#' +#' @noRd +process_prism_json_suppl <- function(data){ + types <- sapply(data$prism_results$clusters, function(x){ + tolower(x$type) + }) + + types <- sapply(types, function(x){ + if (length(unlist(x))>1){ + tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + gsub(" ", "__", tmp) + }else{ + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x){ + x$start + + }) + end <- sapply(data$prism_results$clusters, function(x){ + x$end + + }) + + + prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + x$orf + }) + + names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$name + }) + coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + y$coordinates + }) + + test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) + + + reg_genes <-data.frame(t(test_coords)) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- 'regulatory' + reg_genes$Type2 <- reg_genes$Type + + test_name <- names[names %in% regul_genes_orfs] + ref_names <- test_name + order_vec <- order(match(regul_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$regulatory_genes, function(x){ + x$score + }) + reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$regulatory_genes, function(x){ + x$name + }) + reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) + test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ + x$full_name + }) + reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + x$orf + }) + + test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) + + + res_genes <-data.frame(t(test_coords_res)) + + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- 'resistance' + res_genes$Type2 <- res_genes$Type + test_name <- names[names %in% resist_genes_orfs] + order_vec <- order(match(resist_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$resistance_genes, function(x){ + x$score + }) + res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$resistance_genes, function(x){ + x$name + }) + res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) + test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ + x$full_name + }) + res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) + + final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + return(list(prism_data, final_reg)) +} \ No newline at end of file diff --git a/R/fct_validation.R b/R/fct_validation.R new file mode 100644 index 0000000..0701906 --- /dev/null +++ b/R/fct_validation.R @@ -0,0 +1,184 @@ +#' check_if_column_exists +#' +#' @description Function, that is used in other validation function, in order to check if the column exists in a dataframe. +#' +#' @return True, column exists, False and Notification message, if not. +#' +#' @noRd +check_if_column_exists <- function(data_names,column_name){ + if (column_name %in% stringr::str_to_lower(data_names)){ + return(TRUE) + } else { + shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") + return(FALSE) + } +} +#' validate_basic_input +#' +#' @description Function, that checks if all the columns in Antismash, PRISM or SEMPI inputs are presents and if the +#' Start and Stop columns contain numeric values. Also check for any missing values in a given columns +#' +#' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails +#' +#' @noRd +validate_basic_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'cluster'))){ + shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (!(check_if_column_exists(data_names, 'start'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'stop'))){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'type'))){ + return(FALSE) + } + if (length(unique(data$Cluster)) != length(data$Cluster)){ + shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ + shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") + return(FALSE) + } + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ + shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") + data$Type[is.na(data$Type)] <- 'unknown' + data$Type["" %in% data$Type] <- 'unknown' + } + if (!(is.numeric(data$Cluster))){ + data$Cluster <- as.numeric(data$Cluster) + } + if (!(is.numeric(data$Start))){ + data$Start <- as.numeric(data$Start) + } + if (!(is.numeric(data$Stop))){ + data$Stop <- as.numeric(data$Stop) + } + if (!(is.character(data$Type))){ + data$Type <- as.character(data$Type) + } + return(list(TRUE, data)) +} +#' validate_rre_input +#' +#' @description Function, that checks if all the columns in RRE-Finder input exists +#' +#' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails +#' +#' @noRd +validate_rre_input <- function(data){ + data_names <- names(data) + if (!(check_if_column_exists(data_names, 'gene.name'))){ + return(FALSE) + } + if (F %in% grepl("__", data$Gene.name)){ + return(FALSE) + } + if (!(check_if_column_exists(data_names, 'e.value'))){ + return(FALSE) + } else { + data$E.value <- as.numeric(data$E.value) + } + if (!is.null(data$Probability)){ + if (!(check_if_column_exists(data_names, 'score'))){ + return(FALSE) + } else{ + data$Score <- as.numeric(data$Score) + } + if (!(check_if_column_exists(data_names, 'p.value'))){ + return(FALSE) + } else { + data$P.value <- as.numeric(data$P.value) + } + if (!(check_if_column_exists(data_names, 'rre.start'))){ + return(FALSE) + } else { + data$RRE.start <- as.numeric(data$RRE.start) + } + if (!(check_if_column_exists(data_names, 'rre.end'))){ + return(FALSE) + } else { + data$RRE.end <- as.numeric(data$RRE.end) + } + if (!(check_if_column_exists(data_names, 'probability'))){ + return(FALSE) + } else { + data$Probability <- as.numeric(data$Probability) + } + } + return(list(TRUE, data)) +} +#' validate_deep_input +#' +#' @description Function, that checks if all the columns in DeepBGC input exists, checks if there are any missing values +#' and converts columns, that should be numeric to numeric type. +#' +#' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails +#' +#' @noRd +validate_deep_input <- function(data){ + data_names <- names(data) + col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", + "bgc_candidate_id", "sequence_id") + num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", + "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") + if (!('cluster' %in% stringr::str_to_lower(data_names))){ + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names){ + if (!(check_if_column_exists(data_names, column_name))){ + return(FALSE) + } + if ( T %in% is.na(data[[column_name]])){ + return(FALSE) + } + if ( "" %in% data[[column_name]]){ + return(FALSE) + } + if (column_name %in% num_columns){ + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) +} +#' validate_gecco_input +#' +#' @description Function, that checks if all the columns in GECCO input exists, checks if there are any missing values +#' and converts columns, that should be numeric to numeric type. +#' +#' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails +#' +#' @noRd +validate_gecco_input <- function(data){ + data_names <- names(data) + col_names <- c("start", "end","average_p", "max_p", "type","alkaloid_probability","polyketide_probability", + "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability", + "proteins","domains") + num_columns <- c("start", "end","average_p", "max_p", "alkaloid_probability","polyketide_probability", + "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability") + if (!('cluster' %in% stringr::str_to_lower(data_names))){ + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names){ + if (!(check_if_column_exists(data_names, column_name))){ + return(FALSE) + } + if ( T %in% is.na(data[[column_name]])){ + return(FALSE) + } + if ( "" %in% data[[column_name]]){ + return(FALSE) + } + if (column_name %in% num_columns){ + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) +} \ No newline at end of file diff --git a/R/run_app.R b/R/run_app.R new file mode 100644 index 0000000..dba59cf --- /dev/null +++ b/R/run_app.R @@ -0,0 +1,28 @@ +#' Run the Shiny Application +#' +#' @param ... arguments to pass to golem_opts. +#' See `?golem::get_golem_options` for more details. +#' @inheritParams shiny::shinyApp +#' +#' @export +#' @importFrom shiny shinyApp +#' @importFrom golem with_golem_options +run_app <- function( + onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ... +) { + with_golem_options( + app = shinyApp( + ui = app_ui, + server = app_server, + onStart = onStart, + options = options, + enableBookmarking = enableBookmarking, + uiPattern = uiPattern + ), + golem_opts = list(...) + ) +} diff --git a/R/utils-pipe.R b/R/utils-pipe.R new file mode 100644 index 0000000..fd0b1d1 --- /dev/null +++ b/R/utils-pipe.R @@ -0,0 +1,14 @@ +#' Pipe operator +#' +#' See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. +#' +#' @name %>% +#' @rdname pipe +#' @keywords internal +#' @export +#' @importFrom magrittr %>% +#' @usage lhs \%>\% rhs +#' @param lhs A value or the magrittr placeholder. +#' @param rhs A function call using the magrittr semantics. +#' @return The result of calling `rhs(lhs)`. +NULL diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R new file mode 100644 index 0000000..a2484dc --- /dev/null +++ b/R/utils_deep_reference.R @@ -0,0 +1,135 @@ +#' geom_anti +#' +#' @description A function, that returns antismash geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_anti <- function(data, rre_more){ +ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +#' geom_prism +#' +#' @description A function, that returns prism geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_prism <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +#' geom_deep +#' +#' @description A function, that returns deepbgc geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_deep <- function(data,rre_more){ + ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) +} +#' geom_rre +#' +#' @description A function, that returns RRE-Finder geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_rre <- function(data, rre_more){ + if (rre_more == T){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ),size = 3) + } +} +#' geom_sempi +#' +#' @description A function, that returns SEMPI geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_sempi <- function(data,rre_more){ + + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) +} +#' deep_reference +#' +#' @description A function, that returns Prism-Supplement geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_prism_supp <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) +} +#' geom_arts +#' +#' @description A function, that returns ARTS geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_arts <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) +} +#' geom_gecco +#' +#' @description A function, that returns GECCO geom with the legend, specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_gecco <- function(data,rre_more){ + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) +} +#' add_more_annot +#' +#' @description A function, that that adds specific geom to the plot object +#' +#' @return plot oblect with added geom_segment +#' +#' @noRd +add_more_annot <- function(seg_df, plot, soft_names, index, rre_more){ + if (dim(seg_df)[1] > 0){ + if (soft_names[index] == "anti"){ + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } + else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } + else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } + else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } + else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } + else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df,rre_more) + } else if (soft_names[index] == "gecco") { + plot <- plot+geom_gecco(seg_df) + } + return(plot) + } else{ + return(plot) + } +} diff --git a/R/utils_helpers.R b/R/utils_helpers.R new file mode 100644 index 0000000..4cea6e7 --- /dev/null +++ b/R/utils_helpers.R @@ -0,0 +1,11 @@ +#' is.integer0 +#' +#' @description Function, that checks if certain integer is 0 +#' +#' @return TRUE if 0, FALSE if not +#' +#' @noRd +is.integer0 <- function(x) +{ + is.integer(x) && length(x) == 0L +} \ No newline at end of file diff --git a/README.md b/README.md index 56b007f..bd8bdec 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,89 @@ + + + # BGCViz -![Visitor count](https://shields-io-visitor-counter.herokuapp.com/badge?page=ostash-group.BGCViz&style=for-the-badge) + + +[![Lifecycle: +experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) +![Visitor +count](https://shields-io-visitor-counter.herokuapp.com/badge?page=ostash-group.BGCViz&style=for-the-badge) ![GitHub](https://img.shields.io/github/license/ostash-group/BGCViz?style=for-the-badge) -![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/ostash-group/BGCViz?include_prereleases&style=for-the-badge) -![GitHub issues](https://img.shields.io/github/issues/ostash-group/BGCViz?style=for-the-badge) -![GitHub Repo stars](https://img.shields.io/github/stars/ostash-group/BGCViz?style=for-the-badge) -![GitHub contributors](https://img.shields.io/github/contributors/ostash-group/BGCViz?style=for-the-badge) +![GitHub release (latest by date including +pre-releases)](https://img.shields.io/github/v/release/ostash-group/BGCViz?include_prereleases&style=for-the-badge) +![GitHub +issues](https://img.shields.io/github/issues/ostash-group/BGCViz?style=for-the-badge) +![GitHub Repo +stars](https://img.shields.io/github/stars/ostash-group/BGCViz?style=for-the-badge) +![GitHub +contributors](https://img.shields.io/github/contributors/ostash-group/BGCViz?style=for-the-badge) ![DOI](http://img.shields.io/badge/DOI-10.13140%20%2F%20RG.2.2.23431.01444-blue.svg?style=for-the-badge) + -BGCViz is a shiny application (can be run locally, or via [website](https://ostash-group.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: +BGCViz is a shiny application (can be run locally, or via +[website](https://ostash-group.shinyapps.io/BGCViz/)), which uses +genomic coordinates of BGC annotations from different sources to +visualize interception between them in one sequence (genome). This +integrative approach could point to both: - - "regions of interest", annotated with more than one tool. + - “regions of interest”, annotated with more than one tool.  - novel regions, annotated only by one of the methods. - - -This app is written as a part of **Cambridge Bioinformatics Hackathon 2020** ([link](https://cambiohack.uk)).  - - -**All the documentation is available on our [site](https://ostash-group.github.io/BGCViz)** +This app is written as a part of **Cambridge Bioinformatics Hackathon +2020** ([link](https://cambiohack.uk)).  +**All the documentation is available on our +[site](https://ostash-group.github.io/BGCViz)** ![Biocircos](images/biocircos.png) - - Currently, the app supports annotations from such sources: -1. Antismash (both json and csv) - -2. PRISM (both json and csv) +1. Antismash (both json and csv) -3. SEMPI (only csv) +2. PRISM (both json and csv) -4. DeepBGC (raw tsv file) +3. SEMPI (only csv) -5. RRE-Finder (modified txt file) - -6. ARTS (raw tsv files) +4. DeepBGC (raw tsv file) +5. RRE-Finder (modified txt file) +6. ARTS (raw tsv files) # Contributing -There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement anything from our TO-DO list.  +There are no contributing guidelines yet. But feel free to resolve any +posted issue on +[repository](https://github.com/ostash-group/BGCViz/issues) or implement +anything from our TO-DO list.  -If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) +If you have any questions, suggestions, or bugs with the BGCViz please +let us know via Issues section of the repo on +[GitHub](https://github.com/ostash-group/BGCViz/issues) # TO-DO list -1. Write all group information in one GenBank file (for know separate files are generated. More info [here](Additional_analysis.md)) - -2. Add BigFAM information parsing +1. Write all group information in one GenBank file (for know separate + files are generated. More info [here](Additional_analysis.md)) -3. Add generation of json files for an input to `--sideload` flag on antismash v. 6.0.  Then the data can be analyzed in details using antismash interface. +2. Add BigFAM information parsing -4. Provide parsing of SQLite file from SEMPI (raw output). This is possible locally, but the web version crashes. +3. Add generation of json files for an input to `--sideload` flag on + antismash v. 6.0.  Then the data can be analyzed in details using + antismash interface. - +4. Provide parsing of SQLite file from SEMPI (raw output). This is + possible locally, but the web version crashes. # Citation -This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: +This project is still a work in progress, so there is no official +publication. If it was useful you can cite it as: -P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: +, doi: +10.13140/RG.2.2.23431.01444 diff --git a/dev/01_start.R b/dev/01_start.R new file mode 100644 index 0000000..b36d56c --- /dev/null +++ b/dev/01_start.R @@ -0,0 +1,65 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +######################################## +#### CURRENT FILE: ON START SCRIPT ##### +######################################## + +## Fill the DESCRIPTION ---- +## Add meta data about your application +## +## /!\ Note: if you want to change the name of your app during development, +## either re-run this function, call golem::set_golem_name(), or don't forget +## to change the name in the app_sys() function in app_config.R /!\ +## +golem::fill_desc( + pkg_name = "BGCViz", # The Name of the package containing the App + pkg_title = "BGCViz", # The Title of the package containing the App + pkg_description = "PKG_DESC.", # The Description of the package containing the App + author_first_name = "Pavlo", # Your First Name + author_last_name = "Hrab", # Your Last Name + author_email = "pavlo.hrab@gmail.com", # Your Email + repo_url = "https://github.com/ostash-group/BGCViz" # The URL of the GitHub Repo (optional) +) + +## Set {golem} options ---- +golem::set_golem_options() + +## Create Common Files ---- +## See ?usethis for more information +usethis::use_mit_license( "Pavlo Hrab" ) # You can set another license here +usethis::use_readme_rmd( open = FALSE ) +usethis::use_code_of_conduct() +usethis::use_lifecycle_badge( "Experimental" ) +usethis::use_news_md( open = FALSE ) + +## Use git ---- +usethis::use_git() + +## Init Testing Infrastructure ---- +## Create a template for tests +golem::use_recommended_tests() + +## Use Recommended Packages ---- +golem::use_recommended_deps() + +## Favicon ---- +# If you want to change the favicon (default is golem's one) +golem::use_favicon() # path = "path/to/ico". Can be an online file. +golem::remove_favicon() + +## Add helper functions ---- +golem::use_utils_ui() +golem::use_utils_server() + +# You're now set! ---- + +# go to dev/02_dev.R +rstudioapi::navigateToFile( "dev/02_dev.R" ) + diff --git a/dev/02_dev.R b/dev/02_dev.R new file mode 100644 index 0000000..431eab8 --- /dev/null +++ b/dev/02_dev.R @@ -0,0 +1,124 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +################################### +#### CURRENT FILE: DEV SCRIPT ##### +################################### + +# Engineering + +## Dependencies ---- +## Add one line by package you want to add as dependency +usethis::use_package( "ggplot2" ) +usethis::use_package( "shiny" ) +usethis::use_package( "shinydashboard" ) +usethis::use_package( "shinydashboardPlus" ) +usethis::use_package( "shinyjqui" ) +usethis::use_package( "shinydisconnect" ) +usethis::use_package( "BioCircos" ) +usethis::use_package( "plotly" ) +usethis::use_package( "plyr" ) +usethis::use_package( "dplyr" ) +usethis::use_package( "DT" ) +usethis::use_package( "rjson" ) +usethis::use_package( "stringr" ) +usethis::use_package( "shinyjs" ) +usethis::use_package( "GenomicRanges" ) +usethis::use_pipe() +usethis::use_package( "shinycssloaders" ) +usethis::use_package( "sortable" ) +usethis::use_package( "tidyr" ) +usethis::use_package( "stringi" ) +usethis::use_package( "RSQLite" ) + + +## Add modules ---- +## Create a module infrastructure in R/ +golem::add_module( name = "name_of_module1" ) # Name of the module +golem::add_module( name = "name_of_module2" ) # Name of the module + +## Add helper functions ---- +## Creates fct_* and utils_* +golem::add_fct( "biocircos" ) +golem::add_fct( "deep_reference" ) +golem::add_fct( "group_table" ) +golem::add_fct( "validation" ) +golem::add_fct( "filtering" ) +golem::add_fct( "reading_processing" ) +golem::add_fct( "helpers" ) +golem::add_fct( "format_transformation" ) +golem::add_utils( "deep_reference" ) +golem::add_utils( "helpers" ) + +## External resources +## Creates .js and .css files at inst/app/www +#golem::add_js_file( "script" ) +#golem::add_js_handler( "handlers" ) +#golem::add_css_file( "custom" ) + +## Add internal datasets ---- +## If you have data in your package +#usethis::use_data_raw( name = "my_dataset", open = FALSE ) + +## Tests ---- +## Add one line by test you want to create +#usethis::use_test( "app" ) + +# Documentation + +## Vignette ---- +usethis::use_vignette("BGCViz") +devtools::build_vignettes() + +## Code Coverage---- +## Set the code coverage service ("codecov" or "coveralls") +usethis::use_coverage() + +# Create a summary readme for the testthat subdirectory +covrpage::covrpage() + +## CI ---- +## Use this part of the script if you need to set up a CI +## service for your application +## +## (You'll need GitHub there) +usethis::use_github() + +# GitHub Actions +usethis::use_github_action() +# Chose one of the three +# See https://usethis.r-lib.org/reference/use_github_action.html +usethis::use_github_action_check_release() +usethis::use_github_action_check_standard() +usethis::use_github_action_check_full() +# Add action for PR +usethis::use_github_action_pr_commands() + +# Travis CI +usethis::use_travis() +usethis::use_travis_badge() + +# AppVeyor +usethis::use_appveyor() +usethis::use_appveyor_badge() + +# Circle CI +usethis::use_circleci() +usethis::use_circleci_badge() + +# Jenkins +usethis::use_jenkins() + +# GitLab CI +usethis::use_gitlab_ci() + +# You're now set! ---- +# go to dev/03_deploy.R +rstudioapi::navigateToFile("dev/03_deploy.R") + diff --git a/dev/03_deploy.R b/dev/03_deploy.R new file mode 100644 index 0000000..6933b01 --- /dev/null +++ b/dev/03_deploy.R @@ -0,0 +1,42 @@ +# Building a Prod-Ready, Robust Shiny Application. +# +# README: each step of the dev files is optional, and you don't have to +# fill every dev scripts before getting started. +# 01_start.R should be filled at start. +# 02_dev.R should be used to keep track of your development during the project. +# 03_deploy.R should be used once you need to deploy your app. +# +# +###################################### +#### CURRENT FILE: DEPLOY SCRIPT ##### +###################################### + +# Test your app + +## Run checks ---- +## Check the package before sending to prod +devtools::check() +rhub::check_for_cran() + +# Deploy + +## Local, CRAN or Package Manager ---- +## This will build a tar.gz that can be installed locally, +## sent to CRAN, or to a package manager +devtools::build() + +## RStudio ---- +## If you want to deploy on RStudio related platforms +golem::add_rstudioconnect_file() +golem::add_shinyappsio_file() +golem::add_shinyserver_file() + +## Docker ---- +## If you want to deploy via a generic Dockerfile +golem::add_dockerfile() + +## If you want to deploy to ShinyProxy +golem::add_dockerfile_shinyproxy() + +## If you want to deploy to Heroku +golem::add_dockerfile_heroku() diff --git a/dev/run_dev.R b/dev/run_dev.R new file mode 100644 index 0000000..6729c32 --- /dev/null +++ b/dev/run_dev.R @@ -0,0 +1,12 @@ +# Set options here +options(golem.app.prod = FALSE) # TRUE = production mode, FALSE = development mode + +# Detach all loaded packages and clean your environment +golem::detach_all_attached() +# rm(list=ls(all.names = TRUE)) + +# Document and reload your package +golem::document_and_reload() + +# Run the application +run_app() diff --git a/inst/WORDLIST b/inst/WORDLIST new file mode 100644 index 0000000..404d683 --- /dev/null +++ b/inst/WORDLIST @@ -0,0 +1,5 @@ +DESC +Lifecycle +github +golem +https diff --git a/inst/app/www/favicon.ico b/inst/app/www/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4c0982c026551c9cf45043e2a9ce56f58ef9a817 GIT binary patch literal 3774 zcmbVPdr(y872nKcrvJ2QC*wGsRAiTzSg?>?a93a#c7X+#W!dKiG!!9-K;-=tQB24B zjCRt*m|)Ua)YO>z3>9P*6txqRm>Lrwkkqj?lGd6A&{ie}em&`PU%m*_j3tXjwR`&S-$5?iV3ruH0Kv-77nWteuL2Tvk3J369Jwf8iNx?pg_C@Un11n zg#g12#6@X_9j2)Bj>JXbQ(;Rwo-<6^9}w@0DREHU3ECgZgw41bagC{=eChg;Ch9`4U4EoO_qa5%z9u#X7=ovt; z`!ht^Phg(w27=swC(e5^-g^ji-$Crs_mG?SD})Pw7Waa(zJkC06{w>#usA;M4q-2| z8nv^Sm10PDnzWsX20Q!>yPAHz4!<7_se`}5#7Tb%M zn>j-9agBz=dW8|b%JXkAW)Bf@?XD)%4?%iGYhaT^i~KE-_d#j&&Z z;rMwT!tHn-+jHF@t|3oyEDo2ifZMqPb3MZ%HrFOl7(l3-&PTXEu49>F=erZ=`4V9c zsu{%=MDl{H+febo>l&^3Zu#!j6ZX5v^=!kj%3`>aV@GJ9v%VbF*^T&#K;bA`C*4w203P-icl^A%BMKR?@F5UF1erR9CmhT~INE~0s9B~H|p zGvC+D*HK@I_UdAkJ60e(PL=*fq-t`vW$tr*X*y^i?nt8lup3P;M8p{KEe za<0OuRn>Sd+l}zVRW{O}SP5 zFCTGsjPdf!!`o1WSMqZ(KdK5!C-=f2l(tVOr@zv<_L0o@e+d4L&!LVg#IcGMV%(BH z=OAJd)^T5cqkNw2wS2xl4#`%UPc@W5tI3AH{Wby|x3DCC6;g6`BeV1{QkT2{WyTEz zIB&xhFW?NFkK`wx8C%9Tdi)#sdYWpH^kghlj(*Ht`~l{~?t;Jh43w#7@I>tEP}y%G z$kmSmQv%haW`=wf)8^ORSc_*8^$1RA_4Nk#2j5|FaIetc7~K|Z6dYo`<#|c6FTYB@ zFMOVq-}HQZm(H%K!+Jr0()uy=*n@FCCCNdlJ!r|x#_83yQ|88;%*Qq3+I<_J6k~T| zC5r5&2uVGKS;?32gL;bls+0Qq@6p%MhQ9VTeDM0K_|)5h58r6T<^6Bq>d}KZy?z}&errG8Yk3Km_O;^Nw$11u z-*Fs~&le--N8b+jURs`ucB-LQ&dGdRHsIoGE%@loeYke?FnVZx{p}-^?_R?GEqaf) zp=Z;2TyHxja&Zi7Bj;mGzW+N5bNPLApWcD?Omkd!jmL_;D+_Uw&PK}LySk2Y+&~z= zME5V&im{)2ZWG?$^)kBFHR1gBt>W4K@%e2yw|$EkpSP*rcgB<#W9@mS5H)Tq1aq91 zxNQ86PccNzvYB+tvdsEBP1z3W70Q)s!uN$_F!+U@=akpt+hpcqU&bJ;9fbLPIfo?Eo+K*LjoNT) z!ost~HuG@n%H?9L(iu<1$9tU597-e{XEtbZ={xeBwb{j+3+yu$mZY0%mUB{VXPe^G<+&E)_2wl`94IeA*Qy$Eyj4+xXP3IL z%wp^#n@XzDcmAH2_?c7AYu0O2RQJ_+X{Lu8as+J3%|w2hX_R!$v=<=x@hta~>t`a% zed(L^QL4YvnHY0``u32`qz$kd7k;Pz$8fWG0H@;zp!ngysN#DA!-_`+ZYmTN>lBI~ W%_N?g*f7>j!engbU@no9xc>v_w5JCE literal 0 HcmV?d00001 diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv new file mode 100644 index 0000000..48878d4 --- /dev/null +++ b/inst/extdata/rename.csv @@ -0,0 +1,90 @@ +Code,Group,Group_color,Color,Vacant_colors,Hierarchy, +polyketide,pks,pks,#a6cee3,,SEMPI,SEMPI +nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM, +melanin,melanin,ripp,#b2df8a,,Antismash, +ectoine,other,saccharide,#33a02c,,DeepBGC, +pentangular_polyphenol,other,melanin,#fb9a99,,GECCO, +nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder, +angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp, +angucycline,pks,alkaloid,#ff7f00,,ARTS, +butyrolactone,ripp,hybrid,#cab2d6,,, +class_i_lantipeptide,ripp,core,#6a3d9a,,, +lasso_peptide,ripp,regulatory,#ffff99,,, +nis_synthase,other,resistance,#b15928,,, +acyl_amino_acids,other,base,#d4ced6,,, +aminocoumarin,other,,,,, +amglyccycl,other,,,,, +arylpolyene,other,,,,, +betalactone,other,,,,, +blactam,other,,,,, +bottromycin,other,,,,, +cdps,other,,,,, +cyanobactin,other,,,,, +fatty_acid,other,,,,, +furan,other,,,,, +fungal-ripp,ripp,,,,, +glycocin,ripp,,,,, +guanidinotides,other,,,,, +halogenated,other,,,,, +hgle-ks,pks,,,,, +hserlactone,other,,,,, +indole,other,,,,, +lap,ripp,,,,, +ladderane,other,,,,, +lanthipeptide-class-i,ripp,,,,, +lanthipeptide-class-ii,ripp,,,,, +lanthipeptide-class-iii,ripp,,,,, +lanthipeptide-class-iv,ripp,,,,, +lanthipeptide-class-v,ripp,,,,, +lassopeptide,ripp,,,,, +linaridin,other,,,,, +lipolanthine,other,,,,, +microviridin,other,,,,, +naggn,other,,,,, +napaa,other,,,,, +nrps,nrps,,,,, +nrps-like,nrps,,,,, +nucleoside,other,,,,, +oligosaccharide,saccharide,,,,, +other,other,,,,, +pbde,other,,,,, +phenazine,other,,,,, +phosphoglycolipid,other,,,,, +phosphonate,other,,,,, +pks-like,pks,,,,, +ppys-ks,other,,,,, +proteusin,other,,,,, +pufa,other,,,,, +pyrrolidine,other,,,,, +ranthipeptide,ripp,,,,, +ras-ripp,other,,,,, +redox-cofactor,other,,,,, +resorcinol,other,,,,, +ripp-like,ripp,,,,, +rre-containing,ripp,,,,, +saccharide,saccharide,,,,, +sactipeptide,ripp,,,,, +siderophore,other,,,,, +t1pks,pks,,,,, +t2pks,pks,,,,, +t3pks,pks,,,,, +terpene,terpene,,,,, +thioamitides,other,,,,, +thioamide-nrp,other,,,,, +thiopeptide,ripp,,,,, +transat-pks,pks,,,,, +transat-pks-like,pks,,,,, +tropodithietic-acid,other,,,,, +bacteriocin,ripp,,,,, +fused,other,,,,, +head_to_tail,other,,,,, +lanthidin,other,,,,, +lanthipeptide,ripp,,,,, +tfua-related,other,,,,, +otherks,other,,,,, +microcin,other,,,,, +cf_saccharide,saccharide,,,,, +cf_fatty_acid,other,,,,, +cf_putative,other,,,,, +class_iii_iv_lantipeptide,ripp,,,,, +prodigiosin,other,,,,, diff --git a/inst/extdata/sco_antismash.csv b/inst/extdata/sco_antismash.csv new file mode 100644 index 0000000..4ade4cd --- /dev/null +++ b/inst/extdata/sco_antismash.csv @@ -0,0 +1,28 @@ +"Cluster","Start","Stop","Type" +1,86693,139654,"hgle-ks__t1pks" +2,166700,191657,"terpene" +3,246867,270397,"lanthipeptide-class-i" +4,494259,544087,"nrps" +5,791700,799942,"ripp-like" +6,1258217,1297040,"t3pks" +7,1995499,2005898,"ectoine" +8,2939305,2949875,"melanin" +9,3034430,3045603,"siderophore" +10,3524827,3603907,"nrps" +11,5496473,5567376,"t2pks" +12,5671274,5691836,"terpene" +13,5751944,5824487,"t2pks" +14,6336090,6346443,"siderophore" +15,6429574,6475291,"nrps-like__t1pks__prodigiosin" +16,6632342,6643659,"ripp-like" +17,6656903,6676224,"terpene" +18,6842314,6855522,"siderophore" +19,6881334,6951537,"t1pks__butyrolactone" +20,7088263,7142447,"thioamide-nrp__nrps" +21,7409741,7432456,"lanthipeptide-class-iii" +22,7506307,7532117,"terpene" +23,7570411,7618555,"pks-like__t1pks" +24,7682906,7709360,"lanthipeptide-class-i" +25,7973469,8047403,"other__t3pks" +26,8269636,8290764,"indole" +27,8475101,8548352,"t3pks__nrps__terpene" diff --git a/inst/extdata/sco_antismash.json.REMOVED.git-id b/inst/extdata/sco_antismash.json.REMOVED.git-id new file mode 100644 index 0000000..710b80c --- /dev/null +++ b/inst/extdata/sco_antismash.json.REMOVED.git-id @@ -0,0 +1 @@ +ed38ed0a829ca3d7134cb1ac60d1c93a8d4a5f62 \ No newline at end of file diff --git a/inst/extdata/sco_deep.tsv b/inst/extdata/sco_deep.tsv new file mode 100644 index 0000000..37bcee4 --- /dev/null +++ b/inst/extdata/sco_deep.tsv @@ -0,0 +1,173 @@ +sequence_id detector detector_version detector_label bgc_candidate_id nucl_start nucl_end nucl_length num_proteins num_domains num_bio_domains deepbgc_score product_activity antibacterial cytotoxic inhibitor antifungal product_class Alkaloid NRP Other Polyketide RiPP Saccharide Terpene protein_ids bio_pfam_ids pfam_ids +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1143-9307.1 1143 9307 8164 4 8 0 0.55675 antibacterial 0.85 0.09 0.16 0.28 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_2;NC_003888.3_NC_003888.3_3;NC_003888.3_NC_003888.3_4;NC_003888.3_NC_003888.3_5 PF00270;PF04851;PF03457;PF06527;PF03457;PF13565;PF00665;PF09299 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_10406-33357.1 10406 33357 22951 24 27 1 0.69541 antibacterial 0.74 0.14 0.06 0.10 0.01 0.04 0.19 0.08 0.40 0.21 0.07 NC_003888.3_NC_003888.3_7;NC_003888.3_NC_003888.3_8;NC_003888.3_NC_003888.3_9;NC_003888.3_NC_003888.3_10;NC_003888.3_NC_003888.3_11;NC_003888.3_NC_003888.3_12;NC_003888.3_NC_003888.3_13;NC_003888.3_NC_003888.3_14;NC_003888.3_NC_003888.3_15;NC_003888.3_NC_003888.3_16;NC_003888.3_NC_003888.3_17;NC_003888.3_NC_003888.3_18;NC_003888.3_NC_003888.3_19;NC_003888.3_NC_003888.3_20;NC_003888.3_NC_003888.3_21;NC_003888.3_NC_003888.3_22;NC_003888.3_NC_003888.3_23;NC_003888.3_NC_003888.3_24;NC_003888.3_NC_003888.3_25;NC_003888.3_NC_003888.3_26;NC_003888.3_NC_003888.3_27;NC_003888.3_NC_003888.3_28;NC_003888.3_NC_003888.3_29;NC_003888.3_NC_003888.3_30 PF04101 PF06527;PF06965;PF00999;PF01590;PF13492;PF03861;PF14690;PF01610;PF01695;PF01695;PF13555;PF13191;PF13304;PF12079;PF00932;PF03984;PF13088;PF03457;PF12680;PF08281;PF04545;PF04542;PF01734;PF13579;PF13439;PF00201;PF04101 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_37613-39812.1 37613 39812 2199 3 6 0 0.54026 antibacterial 0.73 0.15 0.13 0.28 0.00 0.18 0.27 0.31 0.15 0.01 0.10 NC_003888.3_NC_003888.3_36;NC_003888.3_NC_003888.3_37;NC_003888.3_NC_003888.3_38 PF13463;PF12802;PF01047;PF01978;PF12697;PF03861 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_45266-121371.1 45266 121371 76105 55 118 11 0.83590 0.49 0.32 0.22 0.19 Polyketide 0.05 0.14 0.15 0.67 0.08 0.02 0.05 NC_003888.3_NC_003888.3_46;NC_003888.3_NC_003888.3_47;NC_003888.3_NC_003888.3_48;NC_003888.3_NC_003888.3_49;NC_003888.3_NC_003888.3_50;NC_003888.3_NC_003888.3_51;NC_003888.3_NC_003888.3_52;NC_003888.3_NC_003888.3_53;NC_003888.3_NC_003888.3_54;NC_003888.3_NC_003888.3_55;NC_003888.3_NC_003888.3_56;NC_003888.3_NC_003888.3_57;NC_003888.3_NC_003888.3_58;NC_003888.3_NC_003888.3_59;NC_003888.3_NC_003888.3_60;NC_003888.3_NC_003888.3_61;NC_003888.3_NC_003888.3_62;NC_003888.3_NC_003888.3_63;NC_003888.3_NC_003888.3_64;NC_003888.3_NC_003888.3_65;NC_003888.3_NC_003888.3_66;NC_003888.3_NC_003888.3_67;NC_003888.3_NC_003888.3_68;NC_003888.3_NC_003888.3_69;NC_003888.3_NC_003888.3_70;NC_003888.3_NC_003888.3_71;NC_003888.3_NC_003888.3_72;NC_003888.3_NC_003888.3_73;NC_003888.3_NC_003888.3_74;NC_003888.3_NC_003888.3_75;NC_003888.3_NC_003888.3_76;NC_003888.3_NC_003888.3_77;NC_003888.3_NC_003888.3_78;NC_003888.3_NC_003888.3_79;NC_003888.3_NC_003888.3_80;NC_003888.3_NC_003888.3_81;NC_003888.3_NC_003888.3_82;NC_003888.3_NC_003888.3_83;NC_003888.3_NC_003888.3_84;NC_003888.3_NC_003888.3_85;NC_003888.3_NC_003888.3_86;NC_003888.3_NC_003888.3_87;NC_003888.3_NC_003888.3_88;NC_003888.3_NC_003888.3_89;NC_003888.3_NC_003888.3_90;NC_003888.3_NC_003888.3_91;NC_003888.3_NC_003888.3_92;NC_003888.3_NC_003888.3_93;NC_003888.3_NC_003888.3_94;NC_003888.3_NC_003888.3_95;NC_003888.3_NC_003888.3_96;NC_003888.3_NC_003888.3_97;NC_003888.3_NC_003888.3_98;NC_003888.3_NC_003888.3_99;NC_003888.3_NC_003888.3_100 PF01266;PF02801;PF00106;PF08240;PF08659;PF00698;PF00109;PF01243;PF07993;PF00107;PF01370 PF08240;PF00208;PF00107;PF13602;PF13602;PF06824;PF13377;PF00532;PF13407;PF00356;PF00480;PF01547;PF13416;PF00528;PF00528;PF03663;PF01074;PF07748;PF05593;PF12802;PF13340;PF06779;PF07690;PF00083;PF12832;PF08974;PF13586;PF01609;PF13340;PF01609;PF13586;PF01068;PF03747;PF12706;PF13483;PF00753;PF13354;PF00144;PF00126;PF03466;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF13683;PF00665;PF13276;PF13565;PF01527;PF13011;PF13551;PF13518;PF13384;PF13586;PF01609;PF13340;PF13340;PF10946;PF00042;PF00970;PF00175;PF01243;PF00457;PF13340;PF13560;PF00106;PF01370;PF08659;PF13561;PF13340;PF00440;PF00106;PF01370;PF13561;PF13460;PF04616;PF14028;PF12698;PF00005;PF13191;PF13304;PF13476;PF00743;PF07992;PF13738;PF13450;PF01266;PF13434;PF06974;PF03007;PF01370;PF07993;PF16363;PF01073;PF03060;PF01645;PF00109;PF02801;PF16197;PF00698;PF00550;PF08659;PF00106;PF13561;PF01073;PF14765;PF00109;PF02801;PF16197;PF00698;PF07977;PF00753;PF12706 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_122742-128290.1 122742 128290 5548 4 8 1 0.53313 antibacterial 0.58 0.05 0.07 0.34 0.00 0.38 0.29 0.15 0.12 0.01 0.06 NC_003888.3_NC_003888.3_102;NC_003888.3_NC_003888.3_103;NC_003888.3_NC_003888.3_104;NC_003888.3_NC_003888.3_105 PF00561 PF13191;PF13401;PF00196;PF13384;PF12146;PF00561;PF12697;PF12695 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_170910-191657.1 170910 191657 20747 19 75 11 0.66526 cytotoxic 0.23 0.63 0.12 0.08 Terpene 0.09 0.02 0.05 0.11 0.01 0.09 0.71 NC_003888.3_NC_003888.3_149;NC_003888.3_NC_003888.3_150;NC_003888.3_NC_003888.3_151;NC_003888.3_NC_003888.3_152;NC_003888.3_NC_003888.3_153;NC_003888.3_NC_003888.3_154;NC_003888.3_NC_003888.3_155;NC_003888.3_NC_003888.3_156;NC_003888.3_NC_003888.3_157;NC_003888.3_NC_003888.3_158;NC_003888.3_NC_003888.3_159;NC_003888.3_NC_003888.3_160;NC_003888.3_NC_003888.3_161;NC_003888.3_NC_003888.3_162;NC_003888.3_NC_003888.3_163;NC_003888.3_NC_003888.3_164;NC_003888.3_NC_003888.3_165;NC_003888.3_NC_003888.3_166;NC_003888.3_NC_003888.3_167 PF01266;PF08242;PF00494;PF08240;PF01494;PF08241;PF00348;PF02737;PF00107;PF00355;PF01593 PF11066;PF03441;PF04244;PF00348;PF13738;PF01266;PF01946;PF03486;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF01593;PF01266;PF13450;PF12831;PF00890;PF03486;PF00070;PF01946;PF07992;PF01262;PF01134;PF02737;PF01494;PF01209;PF13489;PF13847;PF13578;PF08241;PF08242;PF13649;PF05175;PF05834;PF07992;PF01266;PF00890;PF13450;PF01593;PF01266;PF13450;PF01946;PF12831;PF03486;PF00890;PF05834;PF07992;PF01494;PF01134;PF02310;PF02607;PF13411;PF12728;PF13518;PF00376;PF13384;PF01527;PF04542;PF08281;PF04545;PF13412;PF14344;PF10099;PF12900;PF00582;PF13602;PF00107;PF01262;PF08240;PF00582;PF07681 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_194759-195461.1 194759 195461 702 1 6 0 0.50176 antibacterial 0.81 0.07 0.10 0.20 0.00 0.06 0.15 0.31 0.35 0.01 0.17 NC_003888.3_NC_003888.3_170 PF00196;PF08281;PF04545;PF13412;PF13936;PF00072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_211747-220764.1 211747 220764 9017 10 16 4 0.74452 antibacterial 0.67 0.13 0.25 0.24 Polyketide 0.02 0.05 0.12 0.61 0.05 0.04 0.16 NC_003888.3_NC_003888.3_183;NC_003888.3_NC_003888.3_184;NC_003888.3_NC_003888.3_185;NC_003888.3_NC_003888.3_186;NC_003888.3_NC_003888.3_187;NC_003888.3_NC_003888.3_188;NC_003888.3_NC_003888.3_189;NC_003888.3_NC_003888.3_190;NC_003888.3_NC_003888.3_191;NC_003888.3_NC_003888.3_192 PF00583;PF00106;PF01370;PF08659 PF02613;PF02665;PF12680;PF14534;PF07366;PF13586;PF13302;PF00583;PF14027;PF02909;PF08659;PF01370;PF00106;PF13561;PF13460;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_245985-247869.1 245985 247869 1884 2 4 2 0.52321 antibacterial 0.82 0.07 0.18 0.12 Terpene 0.01 0.03 0.01 0.06 0.38 0.00 0.51 NC_003888.3_NC_003888.3_217;NC_003888.3_NC_003888.3_218 PF00106;PF08659 PF00106;PF08659;PF13561;PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_248676-249702.1 248676 249702 1026 1 3 2 0.53282 inhibitor 0.29 0.05 0.66 0.06 Polyketide 0.00 0.20 0.05 0.80 0.01 0.00 0.01 NC_003888.3_NC_003888.3_220 PF00107;PF08240 PF08240;PF00107;PF13602 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_251763-262319.1 251763 262319 10556 9 20 6 0.71258 antibacterial 0.78 0.11 0.08 0.15 RiPP 0.01 0.15 0.12 0.17 0.53 0.04 0.01 NC_003888.3_NC_003888.3_224;NC_003888.3_NC_003888.3_225;NC_003888.3_NC_003888.3_226;NC_003888.3_NC_003888.3_227;NC_003888.3_NC_003888.3_228;NC_003888.3_NC_003888.3_229;NC_003888.3_NC_003888.3_230;NC_003888.3_NC_003888.3_231;NC_003888.3_NC_003888.3_232 PF00903;PF00975;PF01408;PF05147;PF00561;PF04738 PF01408;PF01978;PF12802;PF01047;PF13412;PF09339;PF00392;PF13545;PF00903;PF12833;PF00561;PF00975;PF12697;PF12146;PF12695;PF07819;PF04738;PF14028;PF05147;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_297514-309131.1 297514 309131 11617 9 13 2 0.61725 antibacterial 0.60 0.06 0.04 0.18 0.00 0.35 0.24 0.32 0.09 0.01 0.02 NC_003888.3_NC_003888.3_263;NC_003888.3_NC_003888.3_264;NC_003888.3_NC_003888.3_265;NC_003888.3_NC_003888.3_266;NC_003888.3_NC_003888.3_267;NC_003888.3_NC_003888.3_268;NC_003888.3_NC_003888.3_269;NC_003888.3_NC_003888.3_270;NC_003888.3_NC_003888.3_271 PF00501;PF00903 PF00440;PF12681;PF00903;PF08937;PF13676;PF12697;PF13560;PF01381;PF00144;PF14278;PF00440;PF00501;PF13193 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_320109-322255.1 320109 322255 2146 2 5 1 0.56163 antibacterial 0.54 0.10 0.38 0.14 Polyketide 0.04 0.14 0.12 0.57 0.12 0.00 0.08 NC_003888.3_NC_003888.3_279;NC_003888.3_NC_003888.3_280 PF00107 PF00107;PF13602;PF00135;PF07859;PF00326 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_329437-331365.1 329437 331365 1928 3 6 0 0.55903 antibacterial 0.75 0.05 0.15 0.31 0.00 0.13 0.08 0.31 0.20 0.03 0.30 NC_003888.3_NC_003888.3_286;NC_003888.3_NC_003888.3_287;NC_003888.3_NC_003888.3_288 PF13340;PF01609;PF13359;PF13612;PF13586;PF00144 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_332310-341318.1 332310 341318 9008 7 15 3 0.58710 antibacterial 0.81 0.07 0.15 0.33 Polyketide 0.01 0.03 0.06 0.76 0.02 0.00 0.14 NC_003888.3_NC_003888.3_290;NC_003888.3_NC_003888.3_291;NC_003888.3_NC_003888.3_292;NC_003888.3_NC_003888.3_293;NC_003888.3_NC_003888.3_294;NC_003888.3_NC_003888.3_295;NC_003888.3_NC_003888.3_296 PF00106;PF01370;PF08659 PF00106;PF08659;PF01370;PF13561;PF13460;PF00440;PF13022;PF16859;PF03055;PF10518;PF14200;PF00754;PF03435;PF13460;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_345816-347706.1 345816 347706 1890 1 2 0 0.60335 antibacterial 0.87 0.06 0.17 0.26 0.00 0.08 0.04 0.28 0.19 0.18 0.28 NC_003888.3_NC_003888.3_301 PF13229;PF05048 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_349418-351352.1 349418 351352 1934 2 5 0 0.52089 antibacterial 0.85 0.09 0.17 0.24 0.00 0.09 0.19 0.28 0.20 0.02 0.27 NC_003888.3_NC_003888.3_303;NC_003888.3_NC_003888.3_304 PF01614;PF12802;PF09339;PF07436;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_353791-355686.1 353791 355686 1895 2 2 1 0.52221 antibacterial 0.92 0.10 0.05 0.21 Terpene 0.05 0.09 0.04 0.15 0.06 0.02 0.61 NC_003888.3_NC_003888.3_307;NC_003888.3_NC_003888.3_308 PF00248 PF00248;PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_364558-366795.1 364558 366795 2237 2 4 0 0.52680 antibacterial 0.81 0.07 0.22 0.24 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_318;NC_003888.3_NC_003888.3_319 PF13377;PF00532;PF00356;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_370065-372478.1 370065 372478 2413 3 9 4 0.57281 antibacterial 0.76 0.04 0.19 0.36 Polyketide 0.01 0.03 0.01 0.92 0.02 0.03 0.02 NC_003888.3_NC_003888.3_323;NC_003888.3_NC_003888.3_324;NC_003888.3_NC_003888.3_325 PF02737;PF00106;PF01370;PF08659 PF00106;PF01370;PF08659;PF03435;PF05368;PF02737;PF13561;PF14486;PF06912 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_395938-429403.1 395938 429403 33465 28 74 19 0.94701 0.48 0.29 0.29 0.22 Saccharide 0.02 0.03 0.20 0.06 0.00 0.69 0.01 NC_003888.3_NC_003888.3_339;NC_003888.3_NC_003888.3_340;NC_003888.3_NC_003888.3_341;NC_003888.3_NC_003888.3_342;NC_003888.3_NC_003888.3_343;NC_003888.3_NC_003888.3_344;NC_003888.3_NC_003888.3_345;NC_003888.3_NC_003888.3_346;NC_003888.3_NC_003888.3_347;NC_003888.3_NC_003888.3_348;NC_003888.3_NC_003888.3_349;NC_003888.3_NC_003888.3_350;NC_003888.3_NC_003888.3_351;NC_003888.3_NC_003888.3_352;NC_003888.3_NC_003888.3_353;NC_003888.3_NC_003888.3_354;NC_003888.3_NC_003888.3_355;NC_003888.3_NC_003888.3_356;NC_003888.3_NC_003888.3_357;NC_003888.3_NC_003888.3_358;NC_003888.3_NC_003888.3_359;NC_003888.3_NC_003888.3_360;NC_003888.3_NC_003888.3_361;NC_003888.3_NC_003888.3_362;NC_003888.3_NC_003888.3_363;NC_003888.3_NC_003888.3_364;NC_003888.3_NC_003888.3_365;NC_003888.3_NC_003888.3_366 PF08242;PF02585;PF00107;PF01370;PF00202;PF01408;PF03720;PF03721;PF00535;PF08241;PF00534;PF08421;PF00908;PF04321;PF00984;PF02706;PF00702;PF02397;PF08484 PF13727;PF02397;PF03721;PF01262;PF00984;PF03720;PF13477;PF13579;PF13439;PF00534;PF13692;PF13524;PF02706;PF02706;PF13522;PF13537;PF12481;PF00733;PF03054;PF02826;PF02254;PF00107;PF01408;PF03447;PF16889;PF05426;PF07940;PF13229;PF05048;PF13439;PF13579;PF00534;PF13692;PF13524;PF08421;PF13489;PF08242;PF08241;PF08484;PF12804;PF02585;PF04321;PF01370;PF16363;PF13460;PF01073;PF16254;PF09940;PF04389;PF16221;PF13641;PF00535;PF10111;PF13704;PF04230;PF00908;PF00202;PF01569;PF14378;PF11706;PF07336;PF00702;PF13419;PF13242;PF04672;PF13646;PF00376;PF13411;PF09278;PF13646;PF13489;PF08241;PF08242;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_431961-437224.1 431961 437224 5263 7 11 2 0.66524 inhibitor 0.31 0.09 0.53 0.10 Polyketide 0.00 0.18 0.17 0.69 0.02 0.00 0.01 NC_003888.3_NC_003888.3_371;NC_003888.3_NC_003888.3_372;NC_003888.3_NC_003888.3_373;NC_003888.3_NC_003888.3_374;NC_003888.3_NC_003888.3_375;NC_003888.3_NC_003888.3_376;NC_003888.3_NC_003888.3_377 PF00107;PF08240 PF05719;PF12680;PF14534;PF08281;PF04542;PF06197;PF08894;PF01872;PF08240;PF00107;PF13602 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_438996-446144.1 438996 446144 7148 6 13 1 0.58250 antibacterial 0.63 0.07 0.09 0.28 0.00 0.35 0.23 0.27 0.10 0.01 0.04 NC_003888.3_NC_003888.3_380;NC_003888.3_NC_003888.3_381;NC_003888.3_NC_003888.3_382;NC_003888.3_NC_003888.3_383;NC_003888.3_NC_003888.3_384;NC_003888.3_NC_003888.3_385 PF00561 PF02518;PF13581;PF07730;PF03176;PF00873;PF12349;PF14100;PF03403;PF00561;PF12146;PF12697;PF00440;PF13305 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_466428-467909.1 466428 467909 1481 2 4 0 0.51567 antibacterial-antifungal 0.78 0.02 0.18 0.60 Polyketide 0.02 0.01 0.04 0.90 0.03 0.00 0.01 NC_003888.3_NC_003888.3_405;NC_003888.3_NC_003888.3_406 PF07690;PF00083;PF07690;PF05977 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_490450-492881.1 490450 492881 2431 3 8 2 0.60069 antibacterial 0.52 0.16 0.10 0.38 0.00 0.40 0.16 0.36 0.05 0.02 0.03 NC_003888.3_NC_003888.3_428;NC_003888.3_NC_003888.3_429;NC_003888.3_NC_003888.3_430 PF00975;PF00561 PF02627;PF00561;PF00975;PF12697;PF12146;PF00756;PF12833;PF00165 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_497374-537512.1 497374 537512 40138 29 71 6 0.82418 0.45 0.46 0.14 0.14 NRP 0.03 0.84 0.07 0.03 0.02 0.02 0.01 NC_003888.3_NC_003888.3_435;NC_003888.3_NC_003888.3_436;NC_003888.3_NC_003888.3_437;NC_003888.3_NC_003888.3_438;NC_003888.3_NC_003888.3_439;NC_003888.3_NC_003888.3_440;NC_003888.3_NC_003888.3_441;NC_003888.3_NC_003888.3_442;NC_003888.3_NC_003888.3_443;NC_003888.3_NC_003888.3_444;NC_003888.3_NC_003888.3_445;NC_003888.3_NC_003888.3_446;NC_003888.3_NC_003888.3_447;NC_003888.3_NC_003888.3_448;NC_003888.3_NC_003888.3_449;NC_003888.3_NC_003888.3_450;NC_003888.3_NC_003888.3_451;NC_003888.3_NC_003888.3_452;NC_003888.3_NC_003888.3_453;NC_003888.3_NC_003888.3_454;NC_003888.3_NC_003888.3_455;NC_003888.3_NC_003888.3_456;NC_003888.3_NC_003888.3_457;NC_003888.3_NC_003888.3_458;NC_003888.3_NC_003888.3_459;NC_003888.3_NC_003888.3_460;NC_003888.3_NC_003888.3_461;NC_003888.3_NC_003888.3_462;NC_003888.3_NC_003888.3_463 PF01266;PF00903;PF01494;PF00668;PF00501;PF00561 PF00005;PF13175;PF13555;PF13476;PF13304;PF00903;PF13669;PF12902;PF00459;PF03067;PF00182;PF01494;PF01266;PF01262;PF03486;PF13450;PF07992;PF13738;PF00440;PF01494;PF12802;PF13463;PF09339;PF01047;PF02082;PF08531;PF05592;PF17389;PF17390;PF03621;PF11806;PF00756;PF00561;PF00005;PF00664;PF00550;PF00668;PF13193;PF00501;PF00005;PF00664;PF01497;PF13191;PF13604;PF00005;PF13238;PF13175;PF13401;PF02456;PF13555;PF13304;PF09818;PF13476;PF01032;PF01032;PF07992;PF13434;PF13454;PF00551;PF00148;PF13439;PF02911;PF17227;PF08530;PF02129;PF04123;PF09656;PF12740;PF07224;PF12697;PF03403 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_539122-542131.1 539122 542131 3009 1 4 0 0.59738 antibacterial 0.86 0.06 0.16 0.27 0.00 0.09 0.07 0.32 0.21 0.04 0.31 NC_003888.3_NC_003888.3_465 PF07691;PF16990;PF03422;PF06439 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_543544-544087.1 543544 544087 543 1 1 0 0.54283 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_468 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_548967-549621.1 548967 549621 654 1 2 0 0.52716 antibacterial 0.87 0.07 0.17 0.26 0.00 0.10 0.07 0.33 0.21 0.03 0.31 NC_003888.3_NC_003888.3_474 PF12867;PF11716 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_586986-589546.1 586986 589546 2560 3 5 4 0.65291 antibacterial 0.60 0.07 0.26 0.20 Polyketide 0.00 0.35 0.03 0.77 0.00 0.00 0.17 NC_003888.3_NC_003888.3_506;NC_003888.3_NC_003888.3_507;NC_003888.3_NC_003888.3_508 PF00698;PF02801;PF00108;PF00109 PF00698;PF02801;PF00109;PF00108;PF00550 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_605121-610356.1 605121 610356 5235 5 8 1 0.58996 0.49 0.02 0.40 0.20 Polyketide-Terpene 0.00 0.03 0.00 0.79 0.00 0.02 0.91 NC_003888.3_NC_003888.3_522;NC_003888.3_NC_003888.3_523;NC_003888.3_NC_003888.3_524;NC_003888.3_NC_003888.3_525;NC_003888.3_NC_003888.3_526 PF00348 PF13360;PF13570;PF05406;PF09995;PF00348;PF13340;PF01609;PF13586 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_618787-637824.1 618787 637824 19037 20 39 3 0.75081 0.40 0.37 0.23 0.09 0.01 0.05 0.43 0.12 0.14 0.03 0.26 NC_003888.3_NC_003888.3_536;NC_003888.3_NC_003888.3_537;NC_003888.3_NC_003888.3_538;NC_003888.3_NC_003888.3_539;NC_003888.3_NC_003888.3_540;NC_003888.3_NC_003888.3_541;NC_003888.3_NC_003888.3_542;NC_003888.3_NC_003888.3_543;NC_003888.3_NC_003888.3_544;NC_003888.3_NC_003888.3_545;NC_003888.3_NC_003888.3_546;NC_003888.3_NC_003888.3_547;NC_003888.3_NC_003888.3_548;NC_003888.3_NC_003888.3_549;NC_003888.3_NC_003888.3_550;NC_003888.3_NC_003888.3_551;NC_003888.3_NC_003888.3_552;NC_003888.3_NC_003888.3_553;NC_003888.3_NC_003888.3_554;NC_003888.3_NC_003888.3_555 PF08241;PF08242;PF00067 PF01261;PF00121;PF02502;PF02734;PF02733;PF00083;PF07690;PF03825;PF00392;PF13545;PF09339;PF07729;PF00067;PF00067;PF03029;PF00071;PF00025;PF00009;PF08477;PF05331;PF03259;PF02518;PF03466;PF00126;PF02567;PF05544;PF01183;PF00941;PF13489;PF13847;PF05401;PF01209;PF08241;PF05175;PF08242;PF13649;PF03358;PF02525;PF00210 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_680495-696168.1 680495 696168 15673 20 43 8 0.78120 0.44 0.38 0.24 0.14 Polyketide 0.02 0.17 0.12 0.70 0.04 0.02 0.07 NC_003888.3_NC_003888.3_597;NC_003888.3_NC_003888.3_598;NC_003888.3_NC_003888.3_599;NC_003888.3_NC_003888.3_600;NC_003888.3_NC_003888.3_601;NC_003888.3_NC_003888.3_602;NC_003888.3_NC_003888.3_603;NC_003888.3_NC_003888.3_604;NC_003888.3_NC_003888.3_605;NC_003888.3_NC_003888.3_606;NC_003888.3_NC_003888.3_607;NC_003888.3_NC_003888.3_608;NC_003888.3_NC_003888.3_609;NC_003888.3_NC_003888.3_610;NC_003888.3_NC_003888.3_611;NC_003888.3_NC_003888.3_612;NC_003888.3_NC_003888.3_613;NC_003888.3_NC_003888.3_614;NC_003888.3_NC_003888.3_615;NC_003888.3_NC_003888.3_616 PF08242;PF00106;PF08240;PF08659;PF08241;PF00107;PF01370;PF03364 PF01435;PF03965;PF01978;PF12802;PF02342;PF13424;PF07719;PF03067;PF09362;PF13602;PF00107;PF08240;PF00440;PF16859;PF00106;PF01370;PF08659;PF13561;PF13460;PF01135;PF02353;PF06325;PF13489;PF05724;PF01728;PF01209;PF13847;PF05401;PF13649;PF08241;PF08242;PF05148;PF05800;PF00741;PF06386;PF05120;PF10604;PF03364;PF08327;PF00741;PF06386;PF00741;PF05121 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_720031-722964.1 720031 722964 2933 4 7 0 0.56907 inhibitor 0.24 0.02 0.70 0.14 0.02 0.22 0.06 0.34 0.27 0.01 0.09 NC_003888.3_NC_003888.3_635;NC_003888.3_NC_003888.3_636;NC_003888.3_NC_003888.3_637;NC_003888.3_NC_003888.3_638 PF01374;PF05532;PF07690;PF06609;PF00083;PF06779;PF05977 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_736311-749279.1 736311 749279 12968 16 19 0 0.69926 antibacterial 0.63 0.14 0.08 0.10 RiPP 0.00 0.01 0.10 0.04 0.85 0.00 0.00 NC_003888.3_NC_003888.3_652;NC_003888.3_NC_003888.3_653;NC_003888.3_NC_003888.3_654;NC_003888.3_NC_003888.3_655;NC_003888.3_NC_003888.3_656;NC_003888.3_NC_003888.3_657;NC_003888.3_NC_003888.3_658;NC_003888.3_NC_003888.3_659;NC_003888.3_NC_003888.3_660;NC_003888.3_NC_003888.3_661;NC_003888.3_NC_003888.3_662;NC_003888.3_NC_003888.3_663;NC_003888.3_NC_003888.3_664;NC_003888.3_NC_003888.3_665;NC_003888.3_NC_003888.3_666;NC_003888.3_NC_003888.3_667 PF14404;PF10027;PF01965;PF00165;PF17196;PF02463;PF13191;PF00005;PF13555;PF03193;PF00664;PF02518;PF13581;PF04149;PF04672;PF13458;PF13433;PF02653;PF02653 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_753317-757246.1 753317 757246 3929 2 9 0 0.50999 antibacterial 0.69 0.07 0.13 0.31 0.00 0.23 0.13 0.43 0.15 0.02 0.07 NC_003888.3_NC_003888.3_672;NC_003888.3_NC_003888.3_673 PF00196;PF13384;PF13936;PF13424;PF12697;PF12695;PF01738;PF03403;PF12146 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_797776-809813.1 797776 809813 12037 10 28 2 0.70473 0.47 0.32 0.32 0.05 RiPP 0.00 0.07 0.13 0.02 0.71 0.01 0.06 NC_003888.3_NC_003888.3_716;NC_003888.3_NC_003888.3_717;NC_003888.3_NC_003888.3_718;NC_003888.3_NC_003888.3_719;NC_003888.3_NC_003888.3_720;NC_003888.3_NC_003888.3_721;NC_003888.3_NC_003888.3_722;NC_003888.3_NC_003888.3_723;NC_003888.3_NC_003888.3_724;NC_003888.3_NC_003888.3_725 PF08241;PF08242 PF12385;PF03412;PF00664;PF00005;PF02463;PF00664;PF00005;PF13191;PF02463;PF02541;PF14518;PF05175;PF06325;PF13489;PF12847;PF03602;PF13847;PF13649;PF08241;PF08242;PF01170;PF09360;PF00720;PF01070;PF00478;PF01645;PF00652;PF14200 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_815933-824058.1 815933 824058 8125 9 20 2 0.76996 antibacterial 0.66 0.05 0.06 0.08 Polyketide 0.12 0.00 0.12 0.51 0.10 0.02 0.31 NC_003888.3_NC_003888.3_728;NC_003888.3_NC_003888.3_729;NC_003888.3_NC_003888.3_730;NC_003888.3_NC_003888.3_731;NC_003888.3_NC_003888.3_732;NC_003888.3_NC_003888.3_733;NC_003888.3_NC_003888.3_734;NC_003888.3_NC_003888.3_735;NC_003888.3_NC_003888.3_736 PF00067;PF00248 PF00989;PF13188;PF08448;PF13426;PF13185;PF01590;PF07228;PF13581;PF14016;PF00248;PF02441;PF07080;PF12680;PF14534;PF00440;PF06902;PF13459;PF13370;PF00067;PF04075 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_847648-849232.1 847648 849232 1584 1 1 1 0.68118 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 NC_003888.3_NC_003888.3_762 PF00067 PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_943850-964941.1 943850 964941 21091 21 45 5 0.76853 0.49 0.13 0.13 0.31 0.03 0.12 0.21 0.17 0.24 0.21 0.02 NC_003888.3_NC_003888.3_861;NC_003888.3_NC_003888.3_862;NC_003888.3_NC_003888.3_863;NC_003888.3_NC_003888.3_864;NC_003888.3_NC_003888.3_865;NC_003888.3_NC_003888.3_866;NC_003888.3_NC_003888.3_867;NC_003888.3_NC_003888.3_868;NC_003888.3_NC_003888.3_869;NC_003888.3_NC_003888.3_870;NC_003888.3_NC_003888.3_871;NC_003888.3_NC_003888.3_872;NC_003888.3_NC_003888.3_873;NC_003888.3_NC_003888.3_874;NC_003888.3_NC_003888.3_875;NC_003888.3_NC_003888.3_876;NC_003888.3_NC_003888.3_877;NC_003888.3_NC_003888.3_878;NC_003888.3_NC_003888.3_879;NC_003888.3_NC_003888.3_880;NC_003888.3_NC_003888.3_881 PF00903;PF01488;PF01243;PF02737;PF00561 PF03704;PF13424;PF13432;PF14559;PF00486;PF00561;PF12697;PF12146;PF05977;PF07690;PF13347;PF00903;PF03551;PF10070;PF03176;PF12900;PF01243;PF14833;PF03446;PF13579;PF07991;PF02826;PF02423;PF03807;PF02558;PF01488;PF01210;PF02737;PF02452;PF10021;PF04107;PF12867;PF03781;PF13230;PF13522;PF10017;PF13416;PF01547;PF07311;PF03767;PF12710;PF00296;PF00005;PF13555;PF13191 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1048129-1049368.1 1048129 1049368 1239 1 2 0 0.53429 antibacterial 0.87 0.06 0.16 0.25 0.00 0.08 0.24 0.23 0.20 0.04 0.27 NC_003888.3_NC_003888.3_954 PF02655;PF13535 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1050594-1054583.1 1050594 1054583 3989 4 26 2 0.68095 antibacterial 0.54 0.42 0.15 0.02 RiPP 0.01 0.07 0.15 0.07 0.66 0.01 0.04 NC_003888.3_NC_003888.3_956;NC_003888.3_NC_003888.3_957;NC_003888.3_NC_003888.3_958;NC_003888.3_NC_003888.3_959 PF08241;PF08242 PF02475;PF05401;PF02353;PF13489;PF05724;PF01135;PF01728;PF05175;PF01209;PF13847;PF03848;PF00398;PF13649;PF08241;PF08242;PF01497;PF01032;PF00950;PF00005;PF13604;PF13191;PF13555;PF02463;PF13175;PF13304;PF13476 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1058376-1058961.1 1058376 1058961 585 1 2 0 0.53564 antibacterial 0.59 0.05 0.12 0.19 0.00 0.05 0.46 0.17 0.14 0.03 0.19 NC_003888.3_NC_003888.3_963 PF00440;PF16859 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1222187-1222787.1 1222187 1222787 600 1 8 2 0.57647 0.43 0.38 0.24 0.03 Other 0.00 0.00 0.56 0.04 0.14 0.00 0.26 NC_003888.3_NC_003888.3_1119 PF08241;PF08242 PF01135;PF13489;PF01209;PF13847;PF08003;PF13649;PF08241;PF08242 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1275829-1279960.1 1275829 1279960 4131 4 7 4 0.63375 antibacterial 0.61 0.02 0.04 0.21 Terpene 0.00 0.04 0.15 0.10 0.00 0.01 0.77 NC_003888.3_NC_003888.3_1162;NC_003888.3_NC_003888.3_1163;NC_003888.3_NC_003888.3_1164;NC_003888.3_NC_003888.3_1165 PF08545;PF00171;PF00067;PF08541 PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1281883-1282540.1 1281883 1282540 657 1 1 0 0.50955 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1168 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1314725-1314968.1 1314725 1314968 243 1 1 0 0.66569 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_1201 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1319886-1320564.1 1319886 1320564 678 1 6 2 0.62377 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_1206 PF08241;PF08242 PF13489;PF13847;PF13649;PF08241;PF08242;PF01209 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1324335-1326727.1 1324335 1326727 2392 2 4 0 0.51368 antibacterial 0.87 0.06 0.18 0.25 0.00 0.06 0.12 0.36 0.20 0.02 0.28 NC_003888.3_NC_003888.3_1212;NC_003888.3_NC_003888.3_1213 PF00657;PF13472;PF00206;PF10397 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1327990-1363153.1 1327990 1363153 35163 34 86 17 0.83900 antibacterial 0.66 0.40 0.12 0.04 Polyketide 0.00 0.23 0.12 0.57 0.09 0.10 0.05 NC_003888.3_NC_003888.3_1216;NC_003888.3_NC_003888.3_1217;NC_003888.3_NC_003888.3_1218;NC_003888.3_NC_003888.3_1219;NC_003888.3_NC_003888.3_1220;NC_003888.3_NC_003888.3_1221;NC_003888.3_NC_003888.3_1222;NC_003888.3_NC_003888.3_1223;NC_003888.3_NC_003888.3_1224;NC_003888.3_NC_003888.3_1225;NC_003888.3_NC_003888.3_1226;NC_003888.3_NC_003888.3_1227;NC_003888.3_NC_003888.3_1228;NC_003888.3_NC_003888.3_1229;NC_003888.3_NC_003888.3_1230;NC_003888.3_NC_003888.3_1231;NC_003888.3_NC_003888.3_1232;NC_003888.3_NC_003888.3_1233;NC_003888.3_NC_003888.3_1234;NC_003888.3_NC_003888.3_1235;NC_003888.3_NC_003888.3_1236;NC_003888.3_NC_003888.3_1237;NC_003888.3_NC_003888.3_1238;NC_003888.3_NC_003888.3_1239;NC_003888.3_NC_003888.3_1240;NC_003888.3_NC_003888.3_1241;NC_003888.3_NC_003888.3_1242;NC_003888.3_NC_003888.3_1243;NC_003888.3_NC_003888.3_1244;NC_003888.3_NC_003888.3_1245;NC_003888.3_NC_003888.3_1246;NC_003888.3_NC_003888.3_1247;NC_003888.3_NC_003888.3_1248;NC_003888.3_NC_003888.3_1249 PF01266;PF02801;PF01636;PF08545;PF00202;PF04321;PF02770;PF00155;PF01494;PF00108;PF08541;PF00109;PF07993;PF04820;PF01370;PF03364;PF00561 PF12679;PF12730;PF13304;PF00005;PF13555;PF07730;PF00072;PF04545;PF08281;PF00196;PF01047;PF13463;PF12802;PF09339;PF01978;PF00480;PF07702;PF00392;PF13545;PF12680;PF14534;PF08281;PF04545;PF04542;PF00561;PF12697;PF12146;PF12697;PF12146;PF01674;PF00561;PF05057;PF02801;PF00109;PF00108;PF00550;PF00198;PF00364;PF02780;PF02779;PF00676;PF00456;PF02775;PF13292;PF08541;PF08545;PF00108;PF10501;PF00550;PF07993;PF01370;PF01966;PF07992;PF01494;PF13450;PF04820;PF01266;PF04542;PF08281;PF03109;PF01636;PF01163;PF04072;PF03007;PF01266;PF00890;PF01946;PF13450;PF13454;PF05834;PF07992;PF01613;PF10604;PF03364;PF00202;PF07993;PF01370;PF13460;PF04321;PF02770;PF09924;PF14079;PF00392;PF00155;PF16655;PF09423 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1405030-1412625.1 1405030 1412625 7595 6 13 4 0.56512 antibacterial 0.61 0.11 0.19 0.16 Polyketide 0.01 0.13 0.22 0.60 0.04 0.01 0.03 NC_003888.3_NC_003888.3_1290;NC_003888.3_NC_003888.3_1291;NC_003888.3_NC_003888.3_1292;NC_003888.3_NC_003888.3_1293;NC_003888.3_NC_003888.3_1294;NC_003888.3_NC_003888.3_1295 PF00106;PF00501;PF01370;PF08659 PF00501;PF13191;PF00931;PF13401;PF00196;PF08281;PF08281;PF10101;PF10935;PF13561;PF00106;PF08659;PF01370 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1988459-1989701.1 1988459 1989701 1242 1 3 1 0.51579 antibacterial 0.64 0.14 0.11 0.14 0.00 0.03 0.15 0.19 0.36 0.00 0.26 NC_003888.3_NC_003888.3_1819 PF08241 PF00590;PF13649;PF08241 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1991526-2027953.1 1991526 2027953 36427 36 54 7 0.73986 0.42 0.20 0.30 0.13 Other 0.05 0.07 0.67 0.05 0.06 0.12 0.02 NC_003888.3_NC_003888.3_1821;NC_003888.3_NC_003888.3_1822;NC_003888.3_NC_003888.3_1823;NC_003888.3_NC_003888.3_1824;NC_003888.3_NC_003888.3_1825;NC_003888.3_NC_003888.3_1826;NC_003888.3_NC_003888.3_1827;NC_003888.3_NC_003888.3_1828;NC_003888.3_NC_003888.3_1829;NC_003888.3_NC_003888.3_1830;NC_003888.3_NC_003888.3_1831;NC_003888.3_NC_003888.3_1832;NC_003888.3_NC_003888.3_1833;NC_003888.3_NC_003888.3_1834;NC_003888.3_NC_003888.3_1835;NC_003888.3_NC_003888.3_1836;NC_003888.3_NC_003888.3_1837;NC_003888.3_NC_003888.3_1838;NC_003888.3_NC_003888.3_1839;NC_003888.3_NC_003888.3_1840;NC_003888.3_NC_003888.3_1841;NC_003888.3_NC_003888.3_1842;NC_003888.3_NC_003888.3_1843;NC_003888.3_NC_003888.3_1844;NC_003888.3_NC_003888.3_1845;NC_003888.3_NC_003888.3_1846;NC_003888.3_NC_003888.3_1847;NC_003888.3_NC_003888.3_1848;NC_003888.3_NC_003888.3_1849;NC_003888.3_NC_003888.3_1850;NC_003888.3_NC_003888.3_1851;NC_003888.3_NC_003888.3_1852;NC_003888.3_NC_003888.3_1853;NC_003888.3_NC_003888.3_1854;NC_003888.3_NC_003888.3_1855;NC_003888.3_NC_003888.3_1856 PF00155;PF00171;PF00903;PF01408;PF06339;PF00583;PF00202 PF01903;PF00155;PF01979;PF07969;PF00266;PF13302;PF00583;PF13508;PF13673;PF14542;PF08445;PF00202;PF06339;PF12852;PF05721;PF00266;PF01323;PF13462;PF07081;PF00171;PF09339;PF01978;PF01614;PF13302;PF13420;PF00583;PF12746;PF00905;PF04542;PF08281;PF04545;PF03767;PF01095;PF00544;PF13229;PF00657;PF13472;PF13416;PF01547;PF04616;PF14100;PF01408;PF00528;PF00528;PF00920;PF00701;PF07729;PF00392;PF01325;PF11716;PF07690;PF13347;PF12681;PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2038268-2038841.1 2038268 2038841 573 1 2 0 0.50377 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1867 PF00440;PF02796 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2058373-2060092.1 2058373 2060092 1719 2 10 1 0.62310 antibacterial 0.83 0.14 0.16 0.20 0.00 0.05 0.45 0.26 0.14 0.06 0.11 NC_003888.3_NC_003888.3_1889;NC_003888.3_NC_003888.3_1890 PF02522 PF13814;PF06224;PF01978;PF12840;PF12802;PF01022;PF13412;PF09339;PF01047;PF02522 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2061088-2061898.1 2061088 2061898 810 1 4 0 0.50115 antibacterial 0.61 0.10 0.29 0.14 0.00 0.06 0.10 0.23 0.42 0.02 0.22 NC_003888.3_NC_003888.3_1892 PF01061;PF12730;PF12698;PF12679 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2412354-2454993.1 2412354 2454993 42639 41 81 2 0.82982 0.43 0.17 0.30 0.10 0.01 0.16 0.15 0.14 0.45 0.11 0.02 NC_003888.3_NC_003888.3_2204;NC_003888.3_NC_003888.3_2205;NC_003888.3_NC_003888.3_2206;NC_003888.3_NC_003888.3_2207;NC_003888.3_NC_003888.3_2208;NC_003888.3_NC_003888.3_2209;NC_003888.3_NC_003888.3_2210;NC_003888.3_NC_003888.3_2211;NC_003888.3_NC_003888.3_2212;NC_003888.3_NC_003888.3_2213;NC_003888.3_NC_003888.3_2214;NC_003888.3_NC_003888.3_2215;NC_003888.3_NC_003888.3_2216;NC_003888.3_NC_003888.3_2217;NC_003888.3_NC_003888.3_2218;NC_003888.3_NC_003888.3_2219;NC_003888.3_NC_003888.3_2220;NC_003888.3_NC_003888.3_2221;NC_003888.3_NC_003888.3_2222;NC_003888.3_NC_003888.3_2223;NC_003888.3_NC_003888.3_2224;NC_003888.3_NC_003888.3_2225;NC_003888.3_NC_003888.3_2226;NC_003888.3_NC_003888.3_2227;NC_003888.3_NC_003888.3_2228;NC_003888.3_NC_003888.3_2229;NC_003888.3_NC_003888.3_2230;NC_003888.3_NC_003888.3_2231;NC_003888.3_NC_003888.3_2232;NC_003888.3_NC_003888.3_2233;NC_003888.3_NC_003888.3_2234;NC_003888.3_NC_003888.3_2235;NC_003888.3_NC_003888.3_2236;NC_003888.3_NC_003888.3_2237;NC_003888.3_NC_003888.3_2238;NC_003888.3_NC_003888.3_2239;NC_003888.3_NC_003888.3_2240;NC_003888.3_NC_003888.3_2241;NC_003888.3_NC_003888.3_2242;NC_003888.3_NC_003888.3_2243;NC_003888.3_NC_003888.3_2244 PF01636;PF00106 PF00440;PF13305;PF08450;PF00400;PF07714;PF00069;PF01636;PF04149;PF13560;PF16571;PF00753;PF04149;PF13560;PF06779;PF07690;PF00083;PF03372;PF02548;PF13714;PF00005;PF13555;PF13191;PF13304;PF02702;PF13732;PF01061;PF12730;PF12698;PF12679;PF00931;PF13191;PF13401;PF03704;PF00486;PF02163;PF03807;PF03446;PF02153;PF07991;PF10727;PF02826;PF00106;PF05977;PF07690;PF00557;PF01126;PF02567;PF04213;PF04213;PF01497;PF01032;PF10003;PF00950;PF00005;PF13555;PF13191;PF13481;PF03193;PF13476;PF13521;PF13304;PF02463;PF13473;PF09375;PF04261;PF03239;PF09250;PF16859;PF00440;PF13022;PF00196;PF08281;PF00072;PF09243;PF13649;PF00144;PF07690;PF03137;PF06609;PF13347;PF00083 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2457953-2460026.1 2457953 2460026 2073 3 8 2 0.59109 antibacterial 0.75 0.07 0.17 0.16 0.02 0.01 0.06 0.24 0.28 0.02 0.38 NC_003888.3_NC_003888.3_2247;NC_003888.3_NC_003888.3_2248;NC_003888.3_NC_003888.3_2249 PF00106;PF08659 PF00106;PF08659;PF13561;PF13460;PF08643;PF12680;PF14534;PF07681 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2477018-2499570.1 2477018 2499570 22552 21 54 5 0.77903 antibacterial 0.50 0.32 0.29 0.16 0.03 0.07 0.16 0.06 0.21 0.42 0.07 NC_003888.3_NC_003888.3_2268;NC_003888.3_NC_003888.3_2269;NC_003888.3_NC_003888.3_2270;NC_003888.3_NC_003888.3_2271;NC_003888.3_NC_003888.3_2272;NC_003888.3_NC_003888.3_2273;NC_003888.3_NC_003888.3_2274;NC_003888.3_NC_003888.3_2275;NC_003888.3_NC_003888.3_2276;NC_003888.3_NC_003888.3_2277;NC_003888.3_NC_003888.3_2278;NC_003888.3_NC_003888.3_2279;NC_003888.3_NC_003888.3_2280;NC_003888.3_NC_003888.3_2281;NC_003888.3_NC_003888.3_2282;NC_003888.3_NC_003888.3_2283;NC_003888.3_NC_003888.3_2284;NC_003888.3_NC_003888.3_2285;NC_003888.3_NC_003888.3_2286;NC_003888.3_NC_003888.3_2287;NC_003888.3_NC_003888.3_2288 PF01636;PF08242;PF00432;PF08241;PF00534 PF00072;PF00196;PF04545;PF13551;PF13542;PF13384;PF08281;PF07690;PF00083;PF06609;PF07690;PF13347;PF00083;PF06779;PF12832;PF10670;PF13620;PF13578;PF01520;PF13243;PF13489;PF07021;PF13847;PF01135;PF03141;PF01209;PF08241;PF08242;PF13649;PF05175;PF03602;PF02353;PF03848;PF13524;PF00534;PF13692;PF13439;PF13579;PF00440;PF01636;PF13243;PF00432;PF02361;PF13481;PF13191;PF03193;PF00005;PF13555;PF01926;PF13304;PF12822;PF01464;PF01427;PF02557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2500696-2501287.1 2500696 2501287 591 1 1 1 0.50136 antibacterial 0.86 0.07 0.17 0.28 0.00 0.09 0.11 0.31 0.21 0.01 0.30 NC_003888.3_NC_003888.3_2290 PF00857 PF00857 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2501756-2502536.1 2501756 2502536 780 1 5 2 0.51687 antibacterial 0.56 0.07 0.07 0.44 0.00 0.39 0.15 0.40 0.02 0.02 0.03 NC_003888.3_NC_003888.3_2292 PF00975;PF00561 PF12697;PF00975;PF12146;PF00561;PF08386 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2520563-2524270.1 2520563 2524270 3707 6 6 1 0.61421 antibacterial 0.71 0.06 0.27 0.20 0.03 0.02 0.35 0.21 0.17 0.03 0.24 NC_003888.3_NC_003888.3_2309;NC_003888.3_NC_003888.3_2310;NC_003888.3_NC_003888.3_2311;NC_003888.3_NC_003888.3_2312;NC_003888.3_NC_003888.3_2313;NC_003888.3_NC_003888.3_2314 PF00583 PF07681;PF09335;PF10041;PF13302;PF00583;PF13349 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2538716-2546691.1 2538716 2546691 7975 6 8 0 0.67281 inhibitor 0.20 0.04 0.67 0.14 0.03 0.23 0.10 0.34 0.27 0.00 0.05 NC_003888.3_NC_003888.3_2328;NC_003888.3_NC_003888.3_2329;NC_003888.3_NC_003888.3_2330;NC_003888.3_NC_003888.3_2331;NC_003888.3_NC_003888.3_2332;NC_003888.3_NC_003888.3_2333 PF11253;PF00456;PF07690;PF06609;PF00083;PF00440;PF13022;PF06259 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2549403-2569910.1 2549403 2569910 20507 19 36 8 0.83648 antibacterial 0.52 0.24 0.19 0.25 Polyketide 0.00 0.23 0.14 0.69 0.02 0.01 0.09 NC_003888.3_NC_003888.3_2337;NC_003888.3_NC_003888.3_2338;NC_003888.3_NC_003888.3_2339;NC_003888.3_NC_003888.3_2340;NC_003888.3_NC_003888.3_2341;NC_003888.3_NC_003888.3_2342;NC_003888.3_NC_003888.3_2343;NC_003888.3_NC_003888.3_2344;NC_003888.3_NC_003888.3_2345;NC_003888.3_NC_003888.3_2346;NC_003888.3_NC_003888.3_2347;NC_003888.3_NC_003888.3_2348;NC_003888.3_NC_003888.3_2349;NC_003888.3_NC_003888.3_2350;NC_003888.3_NC_003888.3_2351;NC_003888.3_NC_003888.3_2352;NC_003888.3_NC_003888.3_2353;NC_003888.3_NC_003888.3_2354;NC_003888.3_NC_003888.3_2355 PF02801;PF08545;PF00108;PF08541;PF00107;PF00698;PF00109;PF00583 PF13302;PF00583;PF13508;PF13527;PF08445;PF13673;PF00144;PF13560;PF04149;PF00652;PF14200;PF03498;PF14440;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08392;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF07264;PF02566;PF13602;PF00107;PF16884 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2790361-2791648.1 2790361 2791648 1287 1 1 1 0.60537 antibacterial 0.83 0.06 0.17 0.30 0.00 0.11 0.08 0.32 0.20 0.03 0.31 NC_003888.3_NC_003888.3_2543 PF00171 PF00171 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2934113-2967589.1 2934113 2967589 33476 32 50 6 0.94003 antibacterial 0.55 0.04 0.18 0.17 Saccharide 0.02 0.08 0.17 0.02 0.04 0.66 0.01 NC_003888.3_NC_003888.3_2652;NC_003888.3_NC_003888.3_2653;NC_003888.3_NC_003888.3_2654;NC_003888.3_NC_003888.3_2655;NC_003888.3_NC_003888.3_2656;NC_003888.3_NC_003888.3_2657;NC_003888.3_NC_003888.3_2658;NC_003888.3_NC_003888.3_2659;NC_003888.3_NC_003888.3_2660;NC_003888.3_NC_003888.3_2661;NC_003888.3_NC_003888.3_2662;NC_003888.3_NC_003888.3_2663;NC_003888.3_NC_003888.3_2664;NC_003888.3_NC_003888.3_2665;NC_003888.3_NC_003888.3_2666;NC_003888.3_NC_003888.3_2667;NC_003888.3_NC_003888.3_2668;NC_003888.3_NC_003888.3_2669;NC_003888.3_NC_003888.3_2670;NC_003888.3_NC_003888.3_2671;NC_003888.3_NC_003888.3_2672;NC_003888.3_NC_003888.3_2673;NC_003888.3_NC_003888.3_2674;NC_003888.3_NC_003888.3_2675;NC_003888.3_NC_003888.3_2676;NC_003888.3_NC_003888.3_2677;NC_003888.3_NC_003888.3_2678;NC_003888.3_NC_003888.3_2679;NC_003888.3_NC_003888.3_2680;NC_003888.3_NC_003888.3_2681;NC_003888.3_NC_003888.3_2682;NC_003888.3_NC_003888.3_2683 PF02706;PF04932;PF02397;PF02668;PF00534;PF00501 PF07690;PF12832;PF06813;PF13360;PF00400;PF12894;PF02668;PF03781;PF00389;PF02826;PF03446;PF09860;PF08843;PF03777;PF00264;PF06236;PF03205;PF03777;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF09849;PF03777;PF03777;PF00501;PF12034;PF00092;PF13768;PF13519;PF12450;PF12679;PF12730 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3073684-3086671.1 3073684 3086671 12987 11 16 0 0.65922 antibacterial 0.61 0.07 0.11 0.17 0.00 0.07 0.40 0.19 0.16 0.03 0.19 NC_003888.3_NC_003888.3_2775;NC_003888.3_NC_003888.3_2776;NC_003888.3_NC_003888.3_2777;NC_003888.3_NC_003888.3_2778;NC_003888.3_NC_003888.3_2779;NC_003888.3_NC_003888.3_2780;NC_003888.3_NC_003888.3_2781;NC_003888.3_NC_003888.3_2782;NC_003888.3_NC_003888.3_2783;NC_003888.3_NC_003888.3_2784;NC_003888.3_NC_003888.3_2785 PF00440;PF00296;PF00563;PF00990;PF08448;PF00989;PF13426;PF13188;PF09250;PF14592;PF00544;PF01177;PF01177;PF00389;PF02826;PF01425 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3130824-3150744.1 3130824 3150744 19920 20 31 3 0.67402 antibacterial 0.62 0.12 0.23 0.13 0.00 0.10 0.20 0.16 0.47 0.05 0.04 NC_003888.3_NC_003888.3_2837;NC_003888.3_NC_003888.3_2838;NC_003888.3_NC_003888.3_2839;NC_003888.3_NC_003888.3_2840;NC_003888.3_NC_003888.3_2841;NC_003888.3_NC_003888.3_2842;NC_003888.3_NC_003888.3_2843;NC_003888.3_NC_003888.3_2844;NC_003888.3_NC_003888.3_2845;NC_003888.3_NC_003888.3_2846;NC_003888.3_NC_003888.3_2847;NC_003888.3_NC_003888.3_2848;NC_003888.3_NC_003888.3_2849;NC_003888.3_NC_003888.3_2850;NC_003888.3_NC_003888.3_2851;NC_003888.3_NC_003888.3_2852;NC_003888.3_NC_003888.3_2853;NC_003888.3_NC_003888.3_2854;NC_003888.3_NC_003888.3_2855;NC_003888.3_NC_003888.3_2856 PF00903;PF00067;PF00561 PF12158;PF03259;PF05331;PF08784;PF12802;PF09339;PF03029;PF00067;PF02627;PF03096;PF12697;PF00561;PF12146;PF12681;PF00903;PF00083;PF07690;PF06779;PF12832;PF04286;PF00657;PF13472;PF17182;PF09922;PF08044;PF13304;PF00005;PF03308;PF13555;PF06182;PF06182 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3316757-3320498.1 3316757 3320498 3741 1 3 0 0.50004 antibacterial 0.81 0.06 0.21 0.24 0.00 0.07 0.07 0.21 0.13 0.33 0.23 NC_003888.3_NC_003888.3_2989 PF13632;PF13641;PF13506 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3526136-3603907.1 3526136 3603907 77771 35 87 19 0.94701 antibacterial 0.74 0.25 0.08 0.10 NRP 0.00 0.90 0.04 0.14 0.00 0.00 0.01 NC_003888.3_NC_003888.3_3169;NC_003888.3_NC_003888.3_3170;NC_003888.3_NC_003888.3_3171;NC_003888.3_NC_003888.3_3172;NC_003888.3_NC_003888.3_3173;NC_003888.3_NC_003888.3_3174;NC_003888.3_NC_003888.3_3175;NC_003888.3_NC_003888.3_3176;NC_003888.3_NC_003888.3_3177;NC_003888.3_NC_003888.3_3178;NC_003888.3_NC_003888.3_3179;NC_003888.3_NC_003888.3_3180;NC_003888.3_NC_003888.3_3181;NC_003888.3_NC_003888.3_3182;NC_003888.3_NC_003888.3_3183;NC_003888.3_NC_003888.3_3184;NC_003888.3_NC_003888.3_3185;NC_003888.3_NC_003888.3_3186;NC_003888.3_NC_003888.3_3187;NC_003888.3_NC_003888.3_3188;NC_003888.3_NC_003888.3_3189;NC_003888.3_NC_003888.3_3190;NC_003888.3_NC_003888.3_3191;NC_003888.3_NC_003888.3_3192;NC_003888.3_NC_003888.3_3193;NC_003888.3_NC_003888.3_3194;NC_003888.3_NC_003888.3_3195;NC_003888.3_NC_003888.3_3196;NC_003888.3_NC_003888.3_3197;NC_003888.3_NC_003888.3_3198;NC_003888.3_NC_003888.3_3199;NC_003888.3_NC_003888.3_3200;NC_003888.3_NC_003888.3_3201;NC_003888.3_NC_003888.3_3202;NC_003888.3_NC_003888.3_3203 PF02770;PF00441;PF00501;PF00155;PF08545;PF08028;PF00903;PF00975;PF01494;PF00668;PF01266;PF01636;PF02801;PF00702;PF08541;PF02668;PF00109;PF04820;PF00561 PF00122;PF00702;PF08282;PF00689;PF00486;PF03704;PF13191;PF00931;PF13401;PF03621;PF03403;PF02153;PF01266;PF09056;PF12679;PF12730;PF13304;PF00005;PF13476;PF13555;PF07730;PF00072;PF00196;PF08281;PF14493;PF00155;PF12897;PF01070;PF01645;PF00977;PF00478;PF03060;PF00903;PF13669;PF14696;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00668;PF00501;PF13193;PF00550;PF00975;PF12697;PF00561;PF00561;PF12146;PF12697;PF01636;PF02463;PF00005;PF13555;PF00664;PF02668;PF01663;PF01261;PF02126;PF01026;PF01261;PF01040;PF07994;PF01658;PF01494;PF05834;PF04820;PF00070;PF07992;PF00890;PF01266;PF12831;PF13450;PF01134;PF08541;PF08545;PF00441;PF08028;PF02770;PF02801;PF00109;PF00550;PF00589;PF14659 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3661247-3661991.1 3661247 3661991 744 1 1 0 0.53431 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_3260 PF14016 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3782902-3788943.1 3782902 3788943 6041 7 14 1 0.63217 antibacterial 0.55 0.17 0.20 0.16 RiPP 0.00 0.01 0.03 0.04 0.92 0.00 0.00 NC_003888.3_NC_003888.3_3369;NC_003888.3_NC_003888.3_3370;NC_003888.3_NC_003888.3_3371;NC_003888.3_NC_003888.3_3372;NC_003888.3_NC_003888.3_3373;NC_003888.3_NC_003888.3_3374;NC_003888.3_NC_003888.3_3375 PF00171 PF12698;PF01061;PF13732;PF02702;PF13304;PF00005;PF13191;PF13555;PF03551;PF00171;PF13560;PF12844;PF13581;PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3812960-3814873.1 3812960 3814873 1913 2 7 0 0.58767 antibacterial 0.78 0.05 0.11 0.17 RiPP 0.00 0.02 0.13 0.05 0.76 0.01 0.03 NC_003888.3_NC_003888.3_3403;NC_003888.3_NC_003888.3_3404 PF08402;PF13304;PF13191;PF00005;PF01078;PF03215;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3818490-3826210.1 3818490 3826210 7720 8 31 5 0.63426 cytotoxic 0.27 0.60 0.15 0.04 0.05 0.08 0.16 0.07 0.05 0.31 0.38 NC_003888.3_NC_003888.3_3409;NC_003888.3_NC_003888.3_3410;NC_003888.3_NC_003888.3_3411;NC_003888.3_NC_003888.3_3412;NC_003888.3_NC_003888.3_3413;NC_003888.3_NC_003888.3_3414;NC_003888.3_NC_003888.3_3415;NC_003888.3_NC_003888.3_3416 PF01266;PF08242;PF08241;PF04055;PF00535 PF13489;PF01209;PF13847;PF08241;PF08242;PF13649;PF07992;PF01946;PF03486;PF01134;PF12831;PF01266;PF00890;PF01262;PF13450;PF00070;PF02852;PF07291;PF04055;PF01048;PF01983;PF12804;PF09837;PF13641;PF00535;PF10111;PF13506;PF13632;PF13340;PF01609;PF13586 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4013072-4023169.1 4013072 4023169 10097 11 28 3 0.73000 antibacterial 0.63 0.09 0.09 0.13 0.02 0.11 0.24 0.30 0.20 0.01 0.22 NC_003888.3_NC_003888.3_3579;NC_003888.3_NC_003888.3_3580;NC_003888.3_NC_003888.3_3581;NC_003888.3_NC_003888.3_3582;NC_003888.3_NC_003888.3_3583;NC_003888.3_NC_003888.3_3584;NC_003888.3_NC_003888.3_3585;NC_003888.3_NC_003888.3_3586;NC_003888.3_NC_003888.3_3587;NC_003888.3_NC_003888.3_3588;NC_003888.3_NC_003888.3_3589 PF01757;PF00067;PF00561 PF07883;PF00067;PF01925;PF02956;PF00196;PF04545;PF08281;PF13936;PF00072;PF07730;PF00196;PF08281;PF04545;PF14493;PF13936;PF00072;PF07730;PF01757;PF12697;PF06259;PF12697;PF07859;PF00561;PF00756;PF12146;PF00326;PF01764;PF00135 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4024590-4025406.1 4024590 4025406 816 1 1 0 0.53602 antibacterial 0.83 0.07 0.19 0.27 0.05 0.09 0.07 0.32 0.20 0.03 0.29 NC_003888.3_NC_003888.3_3591 PF03301 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4026216-4027671.1 4026216 4027671 1455 1 5 0 0.51398 inhibitor 0.27 0.05 0.59 0.11 0.02 0.19 0.25 0.29 0.22 0.00 0.03 NC_003888.3_NC_003888.3_3593 PF13347;PF07690;PF05977;PF00083;PF06609 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4115027-4137513.1 4115027 4137513 22486 20 36 3 0.90015 antibacterial 0.62 0.15 0.09 0.11 RiPP 0.00 0.08 0.14 0.14 0.58 0.02 0.09 NC_003888.3_NC_003888.3_3686;NC_003888.3_NC_003888.3_3687;NC_003888.3_NC_003888.3_3688;NC_003888.3_NC_003888.3_3689;NC_003888.3_NC_003888.3_3690;NC_003888.3_NC_003888.3_3691;NC_003888.3_NC_003888.3_3692;NC_003888.3_NC_003888.3_3693;NC_003888.3_NC_003888.3_3694;NC_003888.3_NC_003888.3_3695;NC_003888.3_NC_003888.3_3696;NC_003888.3_NC_003888.3_3697;NC_003888.3_NC_003888.3_3698;NC_003888.3_NC_003888.3_3699;NC_003888.3_NC_003888.3_3700;NC_003888.3_NC_003888.3_3701;NC_003888.3_NC_003888.3_3702;NC_003888.3_NC_003888.3_3703;NC_003888.3_NC_003888.3_3704;NC_003888.3_NC_003888.3_3705 PF08241;PF08242;PF01757 PF05175;PF13489;PF07021;PF13847;PF13649;PF08241;PF08242;PF05724;PF00174;PF13231;PF00313;PF02518;PF07730;PF13796;PF00005;PF13555;PF13191;PF13401;PF13304;PF02687;PF12704;PF02687;PF12704;PF00005;PF13304;PF13555;PF00196;PF08281;PF04545;PF00072;PF07730;PF00487;PF01757;PF06259;PF10756;PF02342 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4142256-4144254.1 4142256 4144254 1998 2 2 1 0.55784 antibacterial 0.75 0.00 0.03 0.00 Polyketide-Terpene 0.00 0.00 0.18 0.56 0.01 0.02 0.64 NC_003888.3_NC_003888.3_3711;NC_003888.3_NC_003888.3_3712 PF00067 PF00440;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4584105-4584870.1 4584105 4584870 765 1 3 2 0.51264 antibacterial 0.81 0.01 0.18 0.07 0.01 0.01 0.02 0.06 0.41 0.00 0.49 NC_003888.3_NC_003888.3_4107 PF00106;PF08659 PF00106;PF08659;PF13561 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4589507-4589801.1 4589507 4589801 294 1 1 0 0.50763 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4115 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4628356-4628737.1 4628356 4628737 381 1 1 1 0.53370 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_4161 PF00903 PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4629723-4630965.1 4629723 4630965 1242 1 1 1 0.59882 antibacterial 0.78 0.02 0.27 0.18 0.00 0.07 0.04 0.22 0.49 0.02 0.19 NC_003888.3_NC_003888.3_4163 PF05147 PF05147 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4670419-4671589.1 4670419 4671589 1170 1 3 0 0.52337 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4197 PF00652;PF14200;PF03498 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4769019-4804183.1 4769019 4804183 35164 34 81 13 0.83564 antibacterial 0.52 0.26 0.18 0.19 0.01 0.27 0.19 0.13 0.42 0.04 0.02 NC_003888.3_NC_003888.3_4291;NC_003888.3_NC_003888.3_4292;NC_003888.3_NC_003888.3_4293;NC_003888.3_NC_003888.3_4294;NC_003888.3_NC_003888.3_4295;NC_003888.3_NC_003888.3_4296;NC_003888.3_NC_003888.3_4297;NC_003888.3_NC_003888.3_4298;NC_003888.3_NC_003888.3_4299;NC_003888.3_NC_003888.3_4300;NC_003888.3_NC_003888.3_4301;NC_003888.3_NC_003888.3_4302;NC_003888.3_NC_003888.3_4303;NC_003888.3_NC_003888.3_4304;NC_003888.3_NC_003888.3_4305;NC_003888.3_NC_003888.3_4306;NC_003888.3_NC_003888.3_4307;NC_003888.3_NC_003888.3_4308;NC_003888.3_NC_003888.3_4309;NC_003888.3_NC_003888.3_4310;NC_003888.3_NC_003888.3_4311;NC_003888.3_NC_003888.3_4312;NC_003888.3_NC_003888.3_4313;NC_003888.3_NC_003888.3_4314;NC_003888.3_NC_003888.3_4315;NC_003888.3_NC_003888.3_4316;NC_003888.3_NC_003888.3_4317;NC_003888.3_NC_003888.3_4318;NC_003888.3_NC_003888.3_4319;NC_003888.3_NC_003888.3_4320;NC_003888.3_NC_003888.3_4321;NC_003888.3_NC_003888.3_4322;NC_003888.3_NC_003888.3_4323;NC_003888.3_NC_003888.3_4324 PF01636;PF00378;PF02770;PF02786;PF00289;PF01039;PF08028;PF00441;PF02771;PF01243;PF02785;PF00501;PF04738 PF05685;PF01909;PF13427;PF14606;PF00657;PF13472;PF02909;PF00440;PF00005;PF13604;PF02702;PF13304;PF13732;PF01061;PF12698;PF07730;PF13581;PF00072;PF04545;PF00196;PF08281;PF13412;PF14534;PF12680;PF07366;PF00266;PF01565;PF02913;PF13183;PF13534;PF03403;PF12740;PF13517;PF01839;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF04978;PF12867;PF14435;PF00293;PF00892;PF12802;PF01047;PF13463;PF13545;PF01638;PF04738;PF00069;PF07714;PF01636;PF11716;PF04978;PF12867;PF08608;PF07287;PF01039;PF00289;PF02786;PF02655;PF07478;PF02222;PF02785;PF00364;PF02771;PF02770;PF00441;PF08028;PF00501;PF13193;PF00378;PF16113;PF00440;PF10590;PF01243 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4869136-4875516.1 4869136 4875516 6380 6 5 0 0.58407 antibacterial 0.60 0.05 0.09 0.31 Polyketide 0.00 0.00 0.20 0.67 0.08 0.00 0.04 NC_003888.3_NC_003888.3_4384;NC_003888.3_NC_003888.3_4385;NC_003888.3_NC_003888.3_4386;NC_003888.3_NC_003888.3_4387;NC_003888.3_NC_003888.3_4388;NC_003888.3_NC_003888.3_4389 PF07228;PF00440;PF07690;PF08281;PF04542 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4876022-4876625.1 4876022 4876625 603 1 1 0 0.57178 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_4391 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4882031-4884893.1 4882031 4884893 2862 4 5 1 0.57462 antibacterial 0.55 0.08 0.11 0.30 0.00 0.02 0.45 0.48 0.02 0.02 0.03 NC_003888.3_NC_003888.3_4398;NC_003888.3_NC_003888.3_4399;NC_003888.3_NC_003888.3_4400;NC_003888.3_NC_003888.3_4401 PF00857 PF13977;PF00440;PF07690;PF13347;PF00857 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4895197-4896619.1 4895197 4896619 1422 1 1 1 0.63385 antibacterial 0.63 0.07 0.40 0.23 0.00 0.46 0.09 0.23 0.06 0.03 0.18 NC_003888.3_NC_003888.3_4412 PF00668 PF00668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4897543-4901975.1 4897543 4901975 4432 4 17 3 0.53438 0.19 0.07 0.13 0.29 0.00 0.23 0.40 0.22 0.14 0.00 0.02 NC_003888.3_NC_003888.3_4414;NC_003888.3_NC_003888.3_4415;NC_003888.3_NC_003888.3_4416;NC_003888.3_NC_003888.3_4417 PF01636;PF00975;PF00561 PF01135;PF13847;PF13578;PF12697;PF00975;PF00561;PF10230;PF03096;PF12695;PF12146;PF16859;PF00440;PF00069;PF07714;PF01636;PF14200;PF00652 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4903478-4914412.1 4903478 4914412 10934 11 35 3 0.57988 antibacterial 0.53 0.12 0.11 0.19 0.02 0.05 0.41 0.07 0.33 0.04 0.11 NC_003888.3_NC_003888.3_4420;NC_003888.3_NC_003888.3_4421;NC_003888.3_NC_003888.3_4422;NC_003888.3_NC_003888.3_4423;NC_003888.3_NC_003888.3_4424;NC_003888.3_NC_003888.3_4425;NC_003888.3_NC_003888.3_4426;NC_003888.3_NC_003888.3_4427;NC_003888.3_NC_003888.3_4428;NC_003888.3_NC_003888.3_4429;NC_003888.3_NC_003888.3_4430 PF01636;PF04055;PF00903 PF13564;PF13280;PF02082;PF08279;PF12840;PF08220;PF09339;PF13412;PF12802;PF13542;PF13551;PF13384;PF13518;PF13404;PF00903;PF12681;PF00069;PF07714;PF01636;PF13385;PF00069;PF07714;PF01636;PF00652;PF13396;PF01977;PF01040;PF02441;PF12802;PF01047;PF13412;PF13404;PF13545;PF01037;PF04055 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4915291-4973632.1 4915291 4973632 58341 57 75 13 0.85901 0.40 0.27 0.26 0.18 0.00 0.22 0.18 0.42 0.04 0.32 0.02 NC_003888.3_NC_003888.3_4432;NC_003888.3_NC_003888.3_4433;NC_003888.3_NC_003888.3_4434;NC_003888.3_NC_003888.3_4435;NC_003888.3_NC_003888.3_4436;NC_003888.3_NC_003888.3_4437;NC_003888.3_NC_003888.3_4438;NC_003888.3_NC_003888.3_4439;NC_003888.3_NC_003888.3_4440;NC_003888.3_NC_003888.3_4441;NC_003888.3_NC_003888.3_4442;NC_003888.3_NC_003888.3_4443;NC_003888.3_NC_003888.3_4444;NC_003888.3_NC_003888.3_4445;NC_003888.3_NC_003888.3_4446;NC_003888.3_NC_003888.3_4447;NC_003888.3_NC_003888.3_4448;NC_003888.3_NC_003888.3_4449;NC_003888.3_NC_003888.3_4450;NC_003888.3_NC_003888.3_4451;NC_003888.3_NC_003888.3_4452;NC_003888.3_NC_003888.3_4453;NC_003888.3_NC_003888.3_4454;NC_003888.3_NC_003888.3_4455;NC_003888.3_NC_003888.3_4456;NC_003888.3_NC_003888.3_4457;NC_003888.3_NC_003888.3_4458;NC_003888.3_NC_003888.3_4459;NC_003888.3_NC_003888.3_4460;NC_003888.3_NC_003888.3_4461;NC_003888.3_NC_003888.3_4462;NC_003888.3_NC_003888.3_4463;NC_003888.3_NC_003888.3_4464;NC_003888.3_NC_003888.3_4465;NC_003888.3_NC_003888.3_4466;NC_003888.3_NC_003888.3_4467;NC_003888.3_NC_003888.3_4468;NC_003888.3_NC_003888.3_4469;NC_003888.3_NC_003888.3_4470;NC_003888.3_NC_003888.3_4471;NC_003888.3_NC_003888.3_4472;NC_003888.3_NC_003888.3_4473;NC_003888.3_NC_003888.3_4474;NC_003888.3_NC_003888.3_4475;NC_003888.3_NC_003888.3_4476;NC_003888.3_NC_003888.3_4477;NC_003888.3_NC_003888.3_4478;NC_003888.3_NC_003888.3_4479;NC_003888.3_NC_003888.3_4480;NC_003888.3_NC_003888.3_4481;NC_003888.3_NC_003888.3_4482;NC_003888.3_NC_003888.3_4483;NC_003888.3_NC_003888.3_4484;NC_003888.3_NC_003888.3_4485;NC_003888.3_NC_003888.3_4486;NC_003888.3_NC_003888.3_4487;NC_003888.3_NC_003888.3_4488 PF01636;PF02803;PF08242;PF00106;PF00108;PF08659;PF08241;PF00109;PF04055;PF00583;PF00501;PF01370;PF00535 PF13420;PF13673;PF00583;PF13508;PF13527;PF08445;PF14542;PF14012;PF00375;PF00440;PF01575;PF13561;PF00106;PF08659;PF01370;PF03435;PF00108;PF00109;PF02803;PF00501;PF13489;PF13847;PF08241;PF08242;PF13649;PF05175;PF00313;PF08206;PF02621;PF00069;PF07714;PF01636;PF01580;PF13401;PF02456;PF13555;PF16697;PF10224;PF06013;PF10824;PF14256;PF10099;PF16976;PF00437;PF01580;PF00005;PF06414;PF01926;PF13238;PF00482;PF00482;PF07811;PF13400;PF07811;PF13400;PF06013;PF06013;PF04149;PF13560;PF12844;PF13581;PF03704;PF13428;PF01478;PF04055;PF00704;PF01522;PF13641;PF00535;PF10111;PF13704;PF12804;PF13506;PF03142;PF13632 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4974811-4975796.1 4974811 4975796 985 2 7 2 0.72112 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_4490;NC_003888.3_NC_003888.3_4491 PF08241;PF08242 PF01209;PF13489;PF13847;PF13649;PF08241;PF08242;PF03793 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5055827-5059681.1 5055827 5059681 3854 2 10 2 0.66280 antibacterial 0.59 0.18 0.32 0.32 Polyketide 0.01 0.36 0.20 0.53 0.05 0.02 0.04 NC_003888.3_NC_003888.3_4566;NC_003888.3_NC_003888.3_4567 PF00107;PF01370 PF13676;PF00931;PF13401;PF13424;PF13374;PF13460;PF05368;PF01073;PF01370;PF00107 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5061858-5063669.1 5061858 5063669 1811 3 9 2 0.55600 0.40 0.25 0.23 0.05 0.01 0.09 0.26 0.05 0.21 0.00 0.38 NC_003888.3_NC_003888.3_4570;NC_003888.3_NC_003888.3_4571;NC_003888.3_NC_003888.3_4572 PF08241;PF08242 PF13452;PF01575;PF13452;PF01575;PF13847;PF13489;PF08241;PF08242;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5297580-5307574.1 5297580 5307574 9994 7 20 4 0.74276 0.26 0.39 0.16 0.11 0.04 0.00 0.15 0.12 0.03 0.33 0.41 NC_003888.3_NC_003888.3_4799;NC_003888.3_NC_003888.3_4800;NC_003888.3_NC_003888.3_4801;NC_003888.3_NC_003888.3_4802;NC_003888.3_NC_003888.3_4803;NC_003888.3_NC_003888.3_4804;NC_003888.3_NC_003888.3_4805 PF01266;PF01494;PF01593;PF00535 PF01642;PF01494;PF05834;PF03486;PF01593;PF07992;PF01266;PF00890;PF13450;PF01946;PF13738;PF00440;PF02909;PF13489;PF13578;PF13578;PF09586;PF13641;PF00535;PF10111 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5510515-5536994.1 5510515 5536994 26479 28 70 17 0.86345 antibacterial 0.56 0.41 0.15 0.20 Polyketide 0.02 0.09 0.05 0.90 0.00 0.05 0.01 NC_003888.3_NC_003888.3_4999;NC_003888.3_NC_003888.3_5000;NC_003888.3_NC_003888.3_5001;NC_003888.3_NC_003888.3_5002;NC_003888.3_NC_003888.3_5003;NC_003888.3_NC_003888.3_5004;NC_003888.3_NC_003888.3_5005;NC_003888.3_NC_003888.3_5006;NC_003888.3_NC_003888.3_5007;NC_003888.3_NC_003888.3_5008;NC_003888.3_NC_003888.3_5009;NC_003888.3_NC_003888.3_5010;NC_003888.3_NC_003888.3_5011;NC_003888.3_NC_003888.3_5012;NC_003888.3_NC_003888.3_5013;NC_003888.3_NC_003888.3_5014;NC_003888.3_NC_003888.3_5015;NC_003888.3_NC_003888.3_5016;NC_003888.3_NC_003888.3_5017;NC_003888.3_NC_003888.3_5018;NC_003888.3_NC_003888.3_5019;NC_003888.3_NC_003888.3_5020;NC_003888.3_NC_003888.3_5021;NC_003888.3_NC_003888.3_5022;NC_003888.3_NC_003888.3_5023;NC_003888.3_NC_003888.3_5024;NC_003888.3_NC_003888.3_5025;NC_003888.3_NC_003888.3_5026 PF02801;PF08242;PF00106;PF02770;PF08240;PF00725;PF08659;PF08028;PF00109;PF00441;PF08241;PF01243;PF03992;PF02737;PF00107;PF01370;PF03364 PF00440;PF16884;PF08240;PF00107;PF13602;PF00246;PF13577;PF12680;PF02737;PF00725;PF08240;PF00107;PF13602;PF08240;PF00107;PF13602;PF07690;PF00083;PF05977;PF13347;PF01243;PF12900;PF05368;PF01370;PF16363;PF13460;PF02770;PF08028;PF00441;PF03992;PF02909;PF00440;PF07690;PF06779;PF00083;PF03176;PF12349;PF00486;PF03704;PF13561;PF00106;PF08659;PF01370;PF00109;PF02801;PF00109;PF02801;PF00550;PF10604;PF03364;PF00753;PF01613;PF04978;PF12867;PF13489;PF13847;PF01209;PF05175;PF08241;PF13578;PF08242;PF13649;PF03848;PF05724;PF13560;PF12844;PF13443;PF13413;PF01381;PF07883 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5577211-5580068.1 5577211 5580068 2857 3 12 0 0.54923 antibacterial 0.59 0.10 0.23 0.07 RiPP 0.00 0.01 0.04 0.03 0.91 0.00 0.01 NC_003888.3_NC_003888.3_5060;NC_003888.3_NC_003888.3_5061;NC_003888.3_NC_003888.3_5062 PF00005;PF13555;PF13304;PF12679;PF01061;PF12730;PF12698;PF13346;PF03379;PF06182;PF07730;PF13581 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5715871-5718468.1 5715871 5718468 2597 3 17 3 0.71334 0.48 0.36 0.17 0.07 RiPP 0.02 0.06 0.10 0.12 0.66 0.02 0.04 NC_003888.3_NC_003888.3_5189;NC_003888.3_NC_003888.3_5190;NC_003888.3_NC_003888.3_5191 PF08241;PF08242;PF00891 PF13489;PF05175;PF02353;PF00891;PF13847;PF00398;PF01209;PF13649;PF08241;PF08242;PF02463;PF13304;PF00005;PF13191;PF13476;PF13555;PF00528 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5765662-5797479.1 5765662 5797479 31817 37 60 9 0.74897 antibacterial 0.58 0.46 0.18 0.14 Polyketide 0.02 0.07 0.07 0.84 0.04 0.02 0.02 NC_003888.3_NC_003888.3_5224;NC_003888.3_NC_003888.3_5225;NC_003888.3_NC_003888.3_5226;NC_003888.3_NC_003888.3_5227;NC_003888.3_NC_003888.3_5228;NC_003888.3_NC_003888.3_5229;NC_003888.3_NC_003888.3_5230;NC_003888.3_NC_003888.3_5231;NC_003888.3_NC_003888.3_5232;NC_003888.3_NC_003888.3_5233;NC_003888.3_NC_003888.3_5234;NC_003888.3_NC_003888.3_5235;NC_003888.3_NC_003888.3_5236;NC_003888.3_NC_003888.3_5237;NC_003888.3_NC_003888.3_5238;NC_003888.3_NC_003888.3_5239;NC_003888.3_NC_003888.3_5240;NC_003888.3_NC_003888.3_5241;NC_003888.3_NC_003888.3_5242;NC_003888.3_NC_003888.3_5243;NC_003888.3_NC_003888.3_5244;NC_003888.3_NC_003888.3_5245;NC_003888.3_NC_003888.3_5246;NC_003888.3_NC_003888.3_5247;NC_003888.3_NC_003888.3_5248;NC_003888.3_NC_003888.3_5249;NC_003888.3_NC_003888.3_5250;NC_003888.3_NC_003888.3_5251;NC_003888.3_NC_003888.3_5252;NC_003888.3_NC_003888.3_5253;NC_003888.3_NC_003888.3_5254;NC_003888.3_NC_003888.3_5255;NC_003888.3_NC_003888.3_5256;NC_003888.3_NC_003888.3_5257;NC_003888.3_NC_003888.3_5258;NC_003888.3_NC_003888.3_5259;NC_003888.3_NC_003888.3_5260 PF01266;PF02801;PF01494;PF00108;PF00109;PF01243;PF03992;PF01050;PF03364 PF05331;PF03029;PF07992;PF01494;PF00070;PF00877;PF07813;PF13560;PF00440;PF09339;PF13340;PF01609;PF13359;PF13612;PF13586;PF11583;PF11695;PF00905;PF01098;PF08239;PF02518;PF00512;PF00672;PF00782;PF05706;PF08378;PF02735;PF13628;PF01243;PF16242;PF11350;PF04673;PF10604;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF12852;PF11699;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF01266;PF01734;PF01037;PF13412;PF12802;PF09339;PF13404;PF00881;PF13613;PF04545;PF01609;PF13359 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5852345-5852987.1 5852345 5852987 642 1 1 0 0.57111 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5315 PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5933595-5938532.1 5933595 5938532 4937 3 17 0 0.55002 antibacterial 0.74 0.10 0.12 0.11 RiPP 0.00 0.04 0.08 0.03 0.85 0.00 0.00 NC_003888.3_NC_003888.3_5381;NC_003888.3_NC_003888.3_5382;NC_003888.3_NC_003888.3_5383 PF13401;PF00005;PF13191;PF06414;PF01935;PF00664;PF02463;PF00005;PF13191;PF00664;PF00005;PF13481;PF13604;PF13476;PF13191;PF02702;PF13304 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5970587-5971837.1 5970587 5971837 1250 3 3 0 0.59048 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5414;NC_003888.3_NC_003888.3_5415;NC_003888.3_NC_003888.3_5416 PF00440;PF14012;PF13828 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6027788-6046270.1 6027788 6046270 18482 15 22 1 0.74782 antibacterial 0.64 0.07 0.12 0.18 0.00 0.05 0.38 0.21 0.18 0.02 0.19 NC_003888.3_NC_003888.3_5463;NC_003888.3_NC_003888.3_5464;NC_003888.3_NC_003888.3_5465;NC_003888.3_NC_003888.3_5466;NC_003888.3_NC_003888.3_5467;NC_003888.3_NC_003888.3_5468;NC_003888.3_NC_003888.3_5469;NC_003888.3_NC_003888.3_5470;NC_003888.3_NC_003888.3_5471;NC_003888.3_NC_003888.3_5472;NC_003888.3_NC_003888.3_5473;NC_003888.3_NC_003888.3_5474;NC_003888.3_NC_003888.3_5475;NC_003888.3_NC_003888.3_5476;NC_003888.3_NC_003888.3_5477 PF01039 PF00440;PF04264;PF08124;PF02278;PF02884;PF01039;PF06833;PF13822;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF10370;PF01557 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6242667-6244234.1 6242667 6244234 1567 2 2 0 0.63827 antibacterial 0.87 0.09 0.17 0.29 RiPP 0.00 0.01 0.02 0.04 0.89 0.02 0.04 NC_003888.3_NC_003888.3_5653;NC_003888.3_NC_003888.3_5654 PF00082;PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6432592-6469131.1 6432592 6469131 36539 26 87 23 0.94502 0.48 0.43 0.14 0.24 NRP-Polyketide 0.01 0.69 0.02 0.94 0.00 0.02 0.00 NC_003888.3_NC_003888.3_5808;NC_003888.3_NC_003888.3_5809;NC_003888.3_NC_003888.3_5810;NC_003888.3_NC_003888.3_5811;NC_003888.3_NC_003888.3_5812;NC_003888.3_NC_003888.3_5813;NC_003888.3_NC_003888.3_5814;NC_003888.3_NC_003888.3_5815;NC_003888.3_NC_003888.3_5816;NC_003888.3_NC_003888.3_5817;NC_003888.3_NC_003888.3_5818;NC_003888.3_NC_003888.3_5819;NC_003888.3_NC_003888.3_5820;NC_003888.3_NC_003888.3_5821;NC_003888.3_NC_003888.3_5822;NC_003888.3_NC_003888.3_5823;NC_003888.3_NC_003888.3_5824;NC_003888.3_NC_003888.3_5825;NC_003888.3_NC_003888.3_5826;NC_003888.3_NC_003888.3_5827;NC_003888.3_NC_003888.3_5828;NC_003888.3_NC_003888.3_5829;NC_003888.3_NC_003888.3_5830;NC_003888.3_NC_003888.3_5831;NC_003888.3_NC_003888.3_5832;NC_003888.3_NC_003888.3_5833 PF08242;PF00106;PF02770;PF00108;PF00891;PF00698;PF00441;PF00501;PF01370;PF00155;PF08545;PF08028;PF07993;PF00355;PF02719;PF00975;PF01553;PF08241;PF02771;PF04321;PF02801;PF08541;PF00109 PF00486;PF03704;PF00109;PF00108;PF02801;PF16197;PF02771;PF02770;PF00441;PF08028;PF11639;PF00196;PF08281;PF04545;PF13936;PF00072;PF01648;PF09534;PF02801;PF00109;PF00108;PF00550;PF00108;PF08545;PF08541;PF00550;PF00550;PF00155;PF01053;PF01212;PF00501;PF13193;PF00501;PF00550;PF00109;PF00108;PF02801;PF16197;PF00698;PF00155;PF01053;PF04321;PF01370;PF02719;PF05368;PF00106;PF16363;PF01073;PF13460;PF07993;PF00975;PF12697;PF12147;PF00891;PF13489;PF06080;PF05175;PF12847;PF01209;PF02353;PF13847;PF08003;PF05401;PF02390;PF08241;PF13578;PF08242;PF13649;PF01739;PF01326;PF00391;PF00355;PF00848;PF01222;PF06966;PF02544;PF04191;PF01553;PF13520;PF02705;PF01938;PF01135;PF05175;PF13847;PF13649;PF02254;PF05958 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6514552-6529472.1 6514552 6529472 14920 11 23 1 0.59311 0.36 0.15 0.42 0.16 0.07 0.10 0.32 0.29 0.18 0.02 0.07 NC_003888.3_NC_003888.3_5876;NC_003888.3_NC_003888.3_5877;NC_003888.3_NC_003888.3_5878;NC_003888.3_NC_003888.3_5879;NC_003888.3_NC_003888.3_5880;NC_003888.3_NC_003888.3_5881;NC_003888.3_NC_003888.3_5882;NC_003888.3_NC_003888.3_5883;NC_003888.3_NC_003888.3_5884;NC_003888.3_NC_003888.3_5885;NC_003888.3_NC_003888.3_5886 PF01494 PF07690;PF00083;PF13347;PF01494;PF00070;PF06353;PF07690;PF00083;PF06609;PF00440;PF16859;PF01925;PF08937;PF13676;PF01582;PF00400;PF00553;PF00041;PF00704;PF00440;PF07690;PF05977;PF13347 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6552934-6557688.1 6552934 6557688 4754 4 9 2 0.58364 antibacterial 0.67 0.16 0.20 0.24 Polyketide 0.01 0.02 0.30 0.61 0.06 0.01 0.03 NC_003888.3_NC_003888.3_5907;NC_003888.3_NC_003888.3_5908;NC_003888.3_NC_003888.3_5909;NC_003888.3_NC_003888.3_5910 PF00378;PF01494 PF13581;PF00378;PF16113;PF01494;PF07992;PF13450;PF00724;PF00685;PF13469 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6558618-6560310.1 6558618 6560310 1692 1 2 1 0.54471 antibacterial 0.92 0.01 0.04 0.07 Polyketide 0.00 0.23 0.23 0.54 0.00 0.00 0.00 NC_003888.3_NC_003888.3_5912 PF00501 PF13193;PF00501 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6730692-6730926.1 6730692 6730926 234 1 1 0 0.67083 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6060 PF04149 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6731916-6732270.1 6731916 6732270 354 1 1 0 0.53821 antibacterial 0.87 0.07 0.17 0.26 0.00 0.07 0.06 0.37 0.24 0.02 0.28 NC_003888.3_NC_003888.3_6062 PF13581 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6740465-6743446.1 6740465 6743446 2981 4 9 0 0.64534 antibacterial 0.79 0.07 0.07 0.27 0.00 0.11 0.09 0.31 0.32 0.02 0.19 NC_003888.3_NC_003888.3_6071;NC_003888.3_NC_003888.3_6072;NC_003888.3_NC_003888.3_6073;NC_003888.3_NC_003888.3_6074 PF07730;PF00072;PF00196;PF08281;PF04545;PF13384;PF14351;PF11716;PF12867 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6780614-6817281.1 6780614 6817281 36667 27 75 10 0.91087 0.39 0.22 0.18 0.24 Saccharide 0.01 0.22 0.17 0.10 0.01 0.52 0.01 NC_003888.3_NC_003888.3_6107;NC_003888.3_NC_003888.3_6108;NC_003888.3_NC_003888.3_6109;NC_003888.3_NC_003888.3_6110;NC_003888.3_NC_003888.3_6111;NC_003888.3_NC_003888.3_6112;NC_003888.3_NC_003888.3_6113;NC_003888.3_NC_003888.3_6114;NC_003888.3_NC_003888.3_6115;NC_003888.3_NC_003888.3_6116;NC_003888.3_NC_003888.3_6117;NC_003888.3_NC_003888.3_6118;NC_003888.3_NC_003888.3_6119;NC_003888.3_NC_003888.3_6120;NC_003888.3_NC_003888.3_6121;NC_003888.3_NC_003888.3_6122;NC_003888.3_NC_003888.3_6123;NC_003888.3_NC_003888.3_6124;NC_003888.3_NC_003888.3_6125;NC_003888.3_NC_003888.3_6126;NC_003888.3_NC_003888.3_6127;NC_003888.3_NC_003888.3_6128;NC_003888.3_NC_003888.3_6129;NC_003888.3_NC_003888.3_6130;NC_003888.3_NC_003888.3_6131;NC_003888.3_NC_003888.3_6132;NC_003888.3_NC_003888.3_6133 PF00106;PF02719;PF00702;PF00535;PF01075;PF00534;PF00501;PF01370;PF04321;PF00561 PF12697;PF12146;PF00561;PF03372;PF10604;PF01522;PF04321;PF01370;PF00106;PF16363;PF01073;PF13460;PF02254;PF02719;PF02543;PF16861;PF13641;PF00535;PF13506;PF13632;PF02709;PF13344;PF13419;PF00702;PF13242;PF01075;PF00534;PF13692;PF13524;PF13439;PF13579;PF13477;PF08323;PF13692;PF00534;PF13524;PF13580;PF01380;PF00294;PF01467;PF01075;PF13641;PF00535;PF13506;PF13632;PF13641;PF00535;PF04230;PF06224;PF00196;PF08281;PF14559;PF13401;PF13191;PF13481;PF05729;PF13604;PF00005;PF00196;PF04545;PF13185;PF01590;PF13492;PF00501;PF13193;PF00501;PF13193;PF03752;PF00089;PF13365;PF13517;PF01839;PF02776;PF00205;PF02775 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6821468-6822308.1 6821468 6822308 840 1 1 0 0.55098 antibacterial 0.80 0.06 0.16 0.25 0.00 0.09 0.11 0.30 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6138 PF01261 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6831345-6850522.1 6831345 6850522 19177 10 14 3 0.68857 0.36 0.21 0.17 0.11 Other 0.01 0.31 0.53 0.20 0.01 0.06 0.03 NC_003888.3_NC_003888.3_6150;NC_003888.3_NC_003888.3_6151;NC_003888.3_NC_003888.3_6152;NC_003888.3_NC_003888.3_6153;NC_003888.3_NC_003888.3_6154;NC_003888.3_NC_003888.3_6155;NC_003888.3_NC_003888.3_6156;NC_003888.3_NC_003888.3_6157;NC_003888.3_NC_003888.3_6158;NC_003888.3_NC_003888.3_6159 PF04183;PF00155;PF01041 PF00300;PF13385;PF05593;PF00155;PF00266;PF01041;PF01638;PF02036;PF00092;PF13519;PF06276;PF04183;PF04183;PF06276 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6859657-6862082.1 6859657 6862082 2425 4 7 0 0.61623 antibacterial 0.81 0.12 0.15 0.30 0.00 0.06 0.09 0.29 0.35 0.02 0.22 NC_003888.3_NC_003888.3_6167;NC_003888.3_NC_003888.3_6168;NC_003888.3_NC_003888.3_6169;NC_003888.3_NC_003888.3_6170 PF04149;PF13560;PF01381;PF12844;PF13581;PF11716;PF07398 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6889623-6949758.1 6889623 6949758 60135 26 107 23 0.84593 antibacterial 0.67 0.30 0.06 0.09 Polyketide 0.00 0.08 0.01 0.97 0.02 0.04 0.01 NC_003888.3_NC_003888.3_6196;NC_003888.3_NC_003888.3_6197;NC_003888.3_NC_003888.3_6198;NC_003888.3_NC_003888.3_6199;NC_003888.3_NC_003888.3_6200;NC_003888.3_NC_003888.3_6201;NC_003888.3_NC_003888.3_6202;NC_003888.3_NC_003888.3_6203;NC_003888.3_NC_003888.3_6204;NC_003888.3_NC_003888.3_6205;NC_003888.3_NC_003888.3_6206;NC_003888.3_NC_003888.3_6207;NC_003888.3_NC_003888.3_6208;NC_003888.3_NC_003888.3_6209;NC_003888.3_NC_003888.3_6210;NC_003888.3_NC_003888.3_6211;NC_003888.3_NC_003888.3_6212;NC_003888.3_NC_003888.3_6213;NC_003888.3_NC_003888.3_6214;NC_003888.3_NC_003888.3_6215;NC_003888.3_NC_003888.3_6216;NC_003888.3_NC_003888.3_6217;NC_003888.3_NC_003888.3_6218;NC_003888.3_NC_003888.3_6219;NC_003888.3_NC_003888.3_6220;NC_003888.3_NC_003888.3_6221 PF00106;PF02786;PF00108;PF00289;PF00698;PF08990;PF01370;PF00202;PF03756;PF01039;PF07993;PF02719;PF00975;PF01494;PF02737;PF02785;PF04321;PF01266;PF02801;PF08659;PF00109;PF04820;PF00561 PF00106;PF08659;PF13561;PF00440;PF03756;PF05368;PF03435;PF01370;PF13460;PF02518;PF13581;PF07730;PF02775;PF17147;PF01855;PF02776;PF01558;PF00364;PF13533;PF02785;PF02786;PF15632;PF02222;PF07478;PF00289;PF10518;PF01565;PF08031;PF07993;PF01370;PF16363;PF04321;PF01073;PF00550;PF08659;PF00106;PF13561;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00698;PF00109;PF00108;PF00550;PF08659;PF00106;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF08990;PF00550;PF08659;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF00109;PF00108;PF00106;PF00698;PF01494;PF12831;PF00890;PF00561;PF12697;PF12146;PF07690;PF12832;PF03209;PF05977;PF00083;PF13347;PF00202;PF00486;PF03704;PF10518;PF01565;PF08031;PF13561;PF00106;PF08659;PF13460;PF05368;PF01039;PF13822;PF00440;PF00975;PF12697;PF03959;PF00486;PF03704;PF01266;PF01262;PF07992;PF02737;PF00890;PF13450;PF04820 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6962348-6966485.1 6962348 6966485 4137 4 9 3 0.54483 antibacterial 0.64 0.28 0.06 0.23 0.05 0.03 0.22 0.23 0.03 0.07 0.44 NC_003888.3_NC_003888.3_6234;NC_003888.3_NC_003888.3_6235;NC_003888.3_NC_003888.3_6236;NC_003888.3_NC_003888.3_6237 PF01593;PF01494;PF00903 PF01557;PF00903;PF13468;PF04909;PF01494;PF01593;PF07992;PF00890;PF13450 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7078584-7118257.1 7078584 7118257 39673 25 58 6 0.86082 antibacterial 0.66 0.24 0.15 0.14 NRP 0.02 0.81 0.14 0.05 0.01 0.03 0.00 NC_003888.3_NC_003888.3_6336;NC_003888.3_NC_003888.3_6337;NC_003888.3_NC_003888.3_6338;NC_003888.3_NC_003888.3_6339;NC_003888.3_NC_003888.3_6340;NC_003888.3_NC_003888.3_6341;NC_003888.3_NC_003888.3_6342;NC_003888.3_NC_003888.3_6343;NC_003888.3_NC_003888.3_6344;NC_003888.3_NC_003888.3_6345;NC_003888.3_NC_003888.3_6346;NC_003888.3_NC_003888.3_6347;NC_003888.3_NC_003888.3_6348;NC_003888.3_NC_003888.3_6349;NC_003888.3_NC_003888.3_6350;NC_003888.3_NC_003888.3_6351;NC_003888.3_NC_003888.3_6352;NC_003888.3_NC_003888.3_6353;NC_003888.3_NC_003888.3_6354;NC_003888.3_NC_003888.3_6355;NC_003888.3_NC_003888.3_6356;NC_003888.3_NC_003888.3_6357;NC_003888.3_NC_003888.3_6358;NC_003888.3_NC_003888.3_6359;NC_003888.3_NC_003888.3_6360 PF00975;PF06339;PF00668;PF01050;PF00501;PF00202 PF00202;PF07905;PF13556;PF00795;PF01979;PF07969;PF00296;PF02133;PF13229;PF05048;PF12708;PF12218;PF12079;PF02627;PF07730;PF13581;PF00072;PF08281;PF04545;PF00196;PF03099;PF13581;PF07730;PF00672;PF12833;PF00165;PF05977;PF07690;PF01569;PF00041;PF03422;PF07971;PF14403;PF04174;PF05977;PF07690;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00975;PF05899;PF07883;PF13434;PF07992;PF07883;PF06339;PF01050;PF11699;PF00190;PF02311;PF05899;PF12852;PF14525 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7126476-7127388.1 7126476 7127388 912 1 1 0 0.53113 antibacterial 0.88 0.06 0.16 0.24 0.00 0.08 0.07 0.34 0.22 0.03 0.31 NC_003888.3_NC_003888.3_6368 PF04072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7233668-7252420.1 7233668 7252420 18752 13 37 8 0.82411 0.29 0.34 0.32 0.12 0.04 0.24 0.20 0.40 0.06 0.06 0.12 NC_003888.3_NC_003888.3_6465;NC_003888.3_NC_003888.3_6466;NC_003888.3_NC_003888.3_6467;NC_003888.3_NC_003888.3_6468;NC_003888.3_NC_003888.3_6469;NC_003888.3_NC_003888.3_6470;NC_003888.3_NC_003888.3_6471;NC_003888.3_NC_003888.3_6472;NC_003888.3_NC_003888.3_6473;NC_003888.3_NC_003888.3_6474;NC_003888.3_NC_003888.3_6475;NC_003888.3_NC_003888.3_6476;NC_003888.3_NC_003888.3_6477 PF08242;PF00106;PF02719;PF00248;PF08659;PF08241;PF00501;PF01370 PF01329;PF13489;PF05401;PF01209;PF13847;PF02353;PF08241;PF05148;PF08242;PF13649;PF13517;PF01839;PF10099;PF00553;PF15902;PF02011;PF16640;PF00553;PF00553;PF01341;PF13489;PF13847;PF13649;PF08241;PF08242;PF00106;PF08659;PF02719;PF01370;PF03807;PF13460;PF13561;PF00248;PF00501;PF07690;PF00083;PF06609 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7385659-7388675.1 7385659 7388675 3016 3 7 1 0.64353 antibacterial 0.51 0.16 0.12 0.15 Saccharide 0.00 0.01 0.02 0.01 0.21 0.71 0.04 NC_003888.3_NC_003888.3_6571;NC_003888.3_NC_003888.3_6572;NC_003888.3_NC_003888.3_6573 PF00534 PF01242;PF13579;PF13439;PF00534;PF13692;PF13847;PF13649 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7422738-7424568.1 7422738 7424568 1830 1 3 0 0.50924 antibacterial 0.71 0.03 0.12 0.16 RiPP 0.00 0.02 0.09 0.02 0.84 0.00 0.03 NC_003888.3_NC_003888.3_6604 PF00664;PF00005;PF13191 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7426395-7426995.1 7426395 7426995 600 1 10 0 0.50130 antibacterial 0.80 0.11 0.10 0.26 0.00 0.08 0.21 0.23 0.36 0.01 0.16 NC_003888.3_NC_003888.3_6606 PF00196;PF08279;PF04545;PF08281;PF14493;PF09339;PF13384;PF13412;PF13518;PF00072 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7513979-7524428.1 7513979 7524428 10449 10 28 7 0.71486 0.33 0.43 0.12 0.05 Terpene 0.04 0.04 0.10 0.03 0.25 0.04 0.55 NC_003888.3_NC_003888.3_6677;NC_003888.3_NC_003888.3_6678;NC_003888.3_NC_003888.3_6679;NC_003888.3_NC_003888.3_6680;NC_003888.3_NC_003888.3_6681;NC_003888.3_NC_003888.3_6682;NC_003888.3_NC_003888.3_6683;NC_003888.3_NC_003888.3_6684;NC_003888.3_NC_003888.3_6685;NC_003888.3_NC_003888.3_6686 PF01266;PF00494;PF01494;PF00432;PF00348;PF04055;PF01593 PF01061;PF12698;PF00005;PF13555;PF13401;PF13304;PF13476;PF00494;PF00494;PF07992;PF01266;PF00070;PF00890;PF03486;PF12831;PF01494;PF01134;PF13450;PF01593;PF00348;PF13249;PF13243;PF00432;PF01048;PF04055;PF13394;PF13353;PF11946 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7527583-7528969.1 7527583 7528969 1386 1 1 1 0.51596 antibacterial 0.85 0.06 0.20 0.27 0.00 0.01 0.50 0.02 0.02 0.00 0.45 NC_003888.3_NC_003888.3_6689 PF00202 PF00202 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7529794-7530592.1 7529794 7530592 798 1 1 0 0.51222 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6692 PF13350 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7532360-7533986.1 7532360 7533986 1626 2 6 0 0.52073 antibacterial 0.59 0.05 0.13 0.19 Other 0.00 0.05 0.52 0.18 0.09 0.03 0.17 NC_003888.3_NC_003888.3_6694;NC_003888.3_NC_003888.3_6695 PF00657;PF13472;PF13977;PF16859;PF13305;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7536361-7558856.1 7536361 7558856 22495 19 43 14 0.71909 0.36 0.20 0.27 0.26 Polyketide 0.00 0.31 0.15 0.61 0.05 0.02 0.05 NC_003888.3_NC_003888.3_6698;NC_003888.3_NC_003888.3_6699;NC_003888.3_NC_003888.3_6700;NC_003888.3_NC_003888.3_6701;NC_003888.3_NC_003888.3_6702;NC_003888.3_NC_003888.3_6703;NC_003888.3_NC_003888.3_6704;NC_003888.3_NC_003888.3_6705;NC_003888.3_NC_003888.3_6706;NC_003888.3_NC_003888.3_6707;NC_003888.3_NC_003888.3_6708;NC_003888.3_NC_003888.3_6709;NC_003888.3_NC_003888.3_6710;NC_003888.3_NC_003888.3_6711;NC_003888.3_NC_003888.3_6712;NC_003888.3_NC_003888.3_6713;NC_003888.3_NC_003888.3_6714;NC_003888.3_NC_003888.3_6715;NC_003888.3_NC_003888.3_6716 PF02803;PF00378;PF00171;PF02770;PF08240;PF00725;PF00108;PF08028;PF00109;PF00441;PF02771;PF02737;PF00107;PF00501 PF14246;PF00440;PF08279;PF13384;PF09995;PF00440;PF13602;PF00107;PF16912;PF00291;PF08240;PF14232;PF14231;PF00440;PF02515;PF00296;PF02771;PF14749;PF02770;PF00441;PF08028;PF00108;PF00109;PF02803;PF00378;PF16113;PF02737;PF03446;PF00725;PF00501;PF00441;PF08028;PF02770;PF02771;PF00440;PF13309;PF00356;PF00171;PF02518;PF03259;PF05331;PF09339;PF03029 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7614563-7615928.1 7614563 7615928 1365 1 1 0 0.59332 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6760 PF03771 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7623284-7715706.1 7623284 7715706 92422 100 87 10 0.84839 antibacterial 0.52 0.14 0.13 0.20 RiPP 0.00 0.07 0.26 0.10 0.51 0.10 0.01 NC_003888.3_NC_003888.3_6768;NC_003888.3_NC_003888.3_6769;NC_003888.3_NC_003888.3_6770;NC_003888.3_NC_003888.3_6771;NC_003888.3_NC_003888.3_6772;NC_003888.3_NC_003888.3_6773;NC_003888.3_NC_003888.3_6774;NC_003888.3_NC_003888.3_6775;NC_003888.3_NC_003888.3_6776;NC_003888.3_NC_003888.3_6777;NC_003888.3_NC_003888.3_6778;NC_003888.3_NC_003888.3_6779;NC_003888.3_NC_003888.3_6780;NC_003888.3_NC_003888.3_6781;NC_003888.3_NC_003888.3_6782;NC_003888.3_NC_003888.3_6783;NC_003888.3_NC_003888.3_6784;NC_003888.3_NC_003888.3_6785;NC_003888.3_NC_003888.3_6786;NC_003888.3_NC_003888.3_6787;NC_003888.3_NC_003888.3_6788;NC_003888.3_NC_003888.3_6789;NC_003888.3_NC_003888.3_6790;NC_003888.3_NC_003888.3_6791;NC_003888.3_NC_003888.3_6792;NC_003888.3_NC_003888.3_6793;NC_003888.3_NC_003888.3_6794;NC_003888.3_NC_003888.3_6795;NC_003888.3_NC_003888.3_6796;NC_003888.3_NC_003888.3_6797;NC_003888.3_NC_003888.3_6798;NC_003888.3_NC_003888.3_6799;NC_003888.3_NC_003888.3_6800;NC_003888.3_NC_003888.3_6801;NC_003888.3_NC_003888.3_6802;NC_003888.3_NC_003888.3_6803;NC_003888.3_NC_003888.3_6804;NC_003888.3_NC_003888.3_6805;NC_003888.3_NC_003888.3_6806;NC_003888.3_NC_003888.3_6807;NC_003888.3_NC_003888.3_6808;NC_003888.3_NC_003888.3_6809;NC_003888.3_NC_003888.3_6810;NC_003888.3_NC_003888.3_6811;NC_003888.3_NC_003888.3_6812;NC_003888.3_NC_003888.3_6813;NC_003888.3_NC_003888.3_6814;NC_003888.3_NC_003888.3_6815;NC_003888.3_NC_003888.3_6816;NC_003888.3_NC_003888.3_6817;NC_003888.3_NC_003888.3_6818;NC_003888.3_NC_003888.3_6819;NC_003888.3_NC_003888.3_6820;NC_003888.3_NC_003888.3_6821;NC_003888.3_NC_003888.3_6822;NC_003888.3_NC_003888.3_6823;NC_003888.3_NC_003888.3_6824;NC_003888.3_NC_003888.3_6825;NC_003888.3_NC_003888.3_6826;NC_003888.3_NC_003888.3_6827;NC_003888.3_NC_003888.3_6828;NC_003888.3_NC_003888.3_6829;NC_003888.3_NC_003888.3_6830;NC_003888.3_NC_003888.3_6831;NC_003888.3_NC_003888.3_6832;NC_003888.3_NC_003888.3_6833;NC_003888.3_NC_003888.3_6834;NC_003888.3_NC_003888.3_6835;NC_003888.3_NC_003888.3_6836;NC_003888.3_NC_003888.3_6837;NC_003888.3_NC_003888.3_6838;NC_003888.3_NC_003888.3_6839;NC_003888.3_NC_003888.3_6840;NC_003888.3_NC_003888.3_6841;NC_003888.3_NC_003888.3_6842;NC_003888.3_NC_003888.3_6843;NC_003888.3_NC_003888.3_6844;NC_003888.3_NC_003888.3_6845;NC_003888.3_NC_003888.3_6846;NC_003888.3_NC_003888.3_6847;NC_003888.3_NC_003888.3_6848;NC_003888.3_NC_003888.3_6849;NC_003888.3_NC_003888.3_6850;NC_003888.3_NC_003888.3_6851;NC_003888.3_NC_003888.3_6852;NC_003888.3_NC_003888.3_6853;NC_003888.3_NC_003888.3_6854;NC_003888.3_NC_003888.3_6855;NC_003888.3_NC_003888.3_6856;NC_003888.3_NC_003888.3_6857;NC_003888.3_NC_003888.3_6858;NC_003888.3_NC_003888.3_6859;NC_003888.3_NC_003888.3_6860;NC_003888.3_NC_003888.3_6861;NC_003888.3_NC_003888.3_6862;NC_003888.3_NC_003888.3_6863;NC_003888.3_NC_003888.3_6864;NC_003888.3_NC_003888.3_6865;NC_003888.3_NC_003888.3_6866;NC_003888.3_NC_003888.3_6867 PF01636;PF02770;PF02786;PF00702;PF08028;PF00441;PF02771;PF05147;PF00535;PF04738 PF03771;PF03771;PF03771;PF00069;PF07714;PF01636;PF01163;PF00656;PF05762;PF13519;PF05496;PF07728;PF07726;PF00004;PF13191;PF00535;PF02195;PF12846;PF11203;PF00877;PF01555;PF16259;PF08239;PF01638;PF07690;PF15632;PF01071;PF13549;PF02786;PF02655;PF02222;PF07478;PF13535;PF07690;PF13419;PF00702;PF13242;PF03771;PF03771;PF13620;PF14686;PF13634;PF01068;PF13586;PF01609;PF13340;PF13340;PF01609;PF13586;PF03771;PF03771;PF03432;PF05713;PF02467;PF13730;PF13560;PF01135;PF13649;PF01209;PF00398;PF05175;PF13847;PF14028;PF05147;PF14028;PF04738;PF00196;PF13556;PF08279;PF08281;PF00441;PF08028;PF02770;PF02771;PF01590;PF03029;PF00009;PF05331;PF03259;PF02518;PF13581;PF00723;PF13424;PF01980;PF13581;PF01636;PF03881 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7725809-7731922.1 7725809 7731922 6113 8 8 0 0.55681 antibacterial 0.98 0.12 0.02 0.15 Terpene 0.00 0.09 0.06 0.15 0.06 0.03 0.64 NC_003888.3_NC_003888.3_6874;NC_003888.3_NC_003888.3_6875;NC_003888.3_NC_003888.3_6876;NC_003888.3_NC_003888.3_6877;NC_003888.3_NC_003888.3_6878;NC_003888.3_NC_003888.3_6879;NC_003888.3_NC_003888.3_6880;NC_003888.3_NC_003888.3_6881 PF04066;PF03334;PF16262;PF00293;PF04909;PF00120;PF16952;PF11338 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7733253-7734441.1 7733253 7734441 1188 1 3 3 0.50221 antibacterial 0.60 0.05 0.20 0.33 Polyketide 0.00 0.39 0.12 0.67 0.06 0.01 0.09 NC_003888.3_NC_003888.3_6884 PF02803;PF00109;PF00108 PF00108;PF00109;PF02803 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7759824-7770083.1 7759824 7770083 10259 7 11 1 0.67889 antibacterial 0.68 0.07 0.07 0.17 0.00 0.04 0.09 0.26 0.43 0.00 0.34 NC_003888.3_NC_003888.3_6909;NC_003888.3_NC_003888.3_6910;NC_003888.3_NC_003888.3_6911;NC_003888.3_NC_003888.3_6912;NC_003888.3_NC_003888.3_6913;NC_003888.3_NC_003888.3_6914;NC_003888.3_NC_003888.3_6915 PF00067 PF01400;PF13191;PF08281;PF00196;PF13384;PF12770;PF13424;PF13432;PF00082;PF04542;PF00067 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7845510-7847365.1 7845510 7847365 1855 2 8 0 0.60306 antibacterial 0.82 0.06 0.17 0.25 0.00 0.06 0.16 0.21 0.33 0.00 0.26 NC_003888.3_NC_003888.3_6974;NC_003888.3_NC_003888.3_6975 PF00392;PF14502;PF13545;PF13518;PF08220;PF08279;PF05448;PF00326 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7902487-7918281.1 7902487 7918281 15794 13 35 9 0.71780 0.41 0.48 0.26 0.05 0.09 0.26 0.28 0.16 0.07 0.08 0.12 NC_003888.3_NC_003888.3_7027;NC_003888.3_NC_003888.3_7028;NC_003888.3_NC_003888.3_7029;NC_003888.3_NC_003888.3_7030;NC_003888.3_NC_003888.3_7031;NC_003888.3_NC_003888.3_7032;NC_003888.3_NC_003888.3_7033;NC_003888.3_NC_003888.3_7034;NC_003888.3_NC_003888.3_7035;NC_003888.3_NC_003888.3_7036;NC_003888.3_NC_003888.3_7037;NC_003888.3_NC_003888.3_7038;NC_003888.3_NC_003888.3_7039 PF01266;PF08242;PF02585;PF00171;PF08241;PF00583;PF00501;PF01370;PF04321 PF17197;PF00171;PF00501;PF02585;PF14759;PF07992;PF13738;PF00070;PF03486;PF01266;PF13450;PF01262;PF13489;PF08241;PF08242;PF13649;PF05891;PF02826;PF00033;PF14358;PF13631;PF12697;PF12695;PF12146;PF13673;PF00583;PF13508;PF00198;PF00364;PF00456;PF05368;PF13460;PF10021;PF01370;PF04321 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7919132-7921208.1 7919132 7921208 2076 2 10 1 0.50408 0.32 0.04 0.47 0.08 0.04 0.10 0.39 0.23 0.15 0.06 0.07 NC_003888.3_NC_003888.3_7041;NC_003888.3_NC_003888.3_7042 PF01050 PF02311;PF00190;PF07883;PF01050;PF13347;PF07690;PF00083;PF05977;PF06609;PF12832 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7922096-7922885.1 7922096 7922885 789 1 1 0 0.50917 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7044 PF04248 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7928147-7929485.1 7928147 7929485 1338 2 4 1 0.53907 antibacterial 0.83 0.13 0.15 0.41 Polyketide 0.01 0.17 0.04 0.56 0.17 0.03 0.12 NC_003888.3_NC_003888.3_7049;NC_003888.3_NC_003888.3_7050 PF01370 PF02566;PF05368;PF01370;PF13460 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7955999-7956833.1 7955999 7956833 834 1 1 0 0.58086 antibacterial 0.98 0.11 0.04 0.17 Terpene 0.00 0.10 0.04 0.15 0.06 0.02 0.65 NC_003888.3_NC_003888.3_7074 PF04909 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7966014-7973441.1 7966014 7973441 7427 5 12 1 0.58093 antibacterial 0.68 0.06 0.10 0.30 0.00 0.08 0.26 0.15 0.22 0.12 0.18 NC_003888.3_NC_003888.3_7083;NC_003888.3_NC_003888.3_7084;NC_003888.3_NC_003888.3_7085;NC_003888.3_NC_003888.3_7086;NC_003888.3_NC_003888.3_7087 PF00903 PF07602;PF05048;PF13229;PF03422;PF00903;PF13191;PF13401;PF08281;PF13936;PF00196;PF13384;PF04686 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7977962-7981423.1 7977962 7981423 3461 3 7 1 0.59622 antibacterial 0.81 0.10 0.13 0.29 0.00 0.28 0.13 0.39 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7089;NC_003888.3_NC_003888.3_7090;NC_003888.3_NC_003888.3_7091 PF03992 PF13384;PF00196;PF13518;PF08279;PF13542;PF01510;PF03992 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8003570-8072654.1 8003570 8072654 69084 63 123 12 0.74116 cytotoxic 0.29 0.51 0.17 0.10 0.06 0.33 0.16 0.24 0.08 0.09 0.12 NC_003888.3_NC_003888.3_7110;NC_003888.3_NC_003888.3_7111;NC_003888.3_NC_003888.3_7112;NC_003888.3_NC_003888.3_7113;NC_003888.3_NC_003888.3_7114;NC_003888.3_NC_003888.3_7115;NC_003888.3_NC_003888.3_7116;NC_003888.3_NC_003888.3_7117;NC_003888.3_NC_003888.3_7118;NC_003888.3_NC_003888.3_7119;NC_003888.3_NC_003888.3_7120;NC_003888.3_NC_003888.3_7121;NC_003888.3_NC_003888.3_7122;NC_003888.3_NC_003888.3_7123;NC_003888.3_NC_003888.3_7124;NC_003888.3_NC_003888.3_7125;NC_003888.3_NC_003888.3_7126;NC_003888.3_NC_003888.3_7127;NC_003888.3_NC_003888.3_7128;NC_003888.3_NC_003888.3_7129;NC_003888.3_NC_003888.3_7130;NC_003888.3_NC_003888.3_7131;NC_003888.3_NC_003888.3_7132;NC_003888.3_NC_003888.3_7133;NC_003888.3_NC_003888.3_7134;NC_003888.3_NC_003888.3_7135;NC_003888.3_NC_003888.3_7136;NC_003888.3_NC_003888.3_7137;NC_003888.3_NC_003888.3_7138;NC_003888.3_NC_003888.3_7139;NC_003888.3_NC_003888.3_7140;NC_003888.3_NC_003888.3_7141;NC_003888.3_NC_003888.3_7142;NC_003888.3_NC_003888.3_7143;NC_003888.3_NC_003888.3_7144;NC_003888.3_NC_003888.3_7145;NC_003888.3_NC_003888.3_7146;NC_003888.3_NC_003888.3_7147;NC_003888.3_NC_003888.3_7148;NC_003888.3_NC_003888.3_7149;NC_003888.3_NC_003888.3_7150;NC_003888.3_NC_003888.3_7151;NC_003888.3_NC_003888.3_7152;NC_003888.3_NC_003888.3_7153;NC_003888.3_NC_003888.3_7154;NC_003888.3_NC_003888.3_7155;NC_003888.3_NC_003888.3_7156;NC_003888.3_NC_003888.3_7157;NC_003888.3_NC_003888.3_7158;NC_003888.3_NC_003888.3_7159;NC_003888.3_NC_003888.3_7160;NC_003888.3_NC_003888.3_7161;NC_003888.3_NC_003888.3_7162;NC_003888.3_NC_003888.3_7163;NC_003888.3_NC_003888.3_7164;NC_003888.3_NC_003888.3_7165;NC_003888.3_NC_003888.3_7166;NC_003888.3_NC_003888.3_7167;NC_003888.3_NC_003888.3_7168;NC_003888.3_NC_003888.3_7169;NC_003888.3_NC_003888.3_7170;NC_003888.3_NC_003888.3_7171;NC_003888.3_NC_003888.3_7172 PF01636;PF01266;PF08545;PF02894;PF01408;PF01494;PF08241;PF00501;PF01593;PF01370;PF03364;PF00561 PF04075;PF12802;PF01047;PF13463;PF09339;PF01325;PF14342;PF00561;PF12697;PF12146;PF12158;PF10604;PF03364;PF00652;PF14200;PF06439;PF06283;PF00652;PF14200;PF03422;PF00801;PF07995;PF01135;PF13489;PF01209;PF13847;PF13649;PF08241;PF13578;PF12698;PF12051;PF04229;PF01032;PF13476;PF00005;PF13555;PF13191;PF13304;PF06414;PF13671;PF01497;PF00300;PF13581;PF02518;PF07228;PF08448;PF08545;PF08392;PF00195;PF02909;PF00440;PF01494;PF07681;PF03067;PF02839;PF01957;PF01145;PF13229;PF07602;PF16990;PF03422;PF11350;PF00072;PF00486;PF00672;PF00512;PF02518;PF00115;PF12270;PF13631;PF00033;PF01292;PF03860;PF09995;PF00069;PF07714;PF01163;PF06293;PF01636;PF13374;PF13424;PF01946;PF01494;PF01266;PF12831;PF00890;PF07992;PF03486;PF01134;PF00070;PF13450;PF01593;PF05547;PF00144;PF00501;PF13193;PF00561;PF12697;PF12146;PF03096;PF04149;PF00582;PF07336;PF11706;PF01510;PF01636;PF01633;PF07228;PF08448;PF08447;PF02894;PF01408;PF08386;PF00561;PF03777;PF14437;PF00383;PF07992;PF01494;PF03807;PF01370;PF13460;PF03779 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8074200-8075100.1 8074200 8075100 900 1 1 1 0.50574 antibacterial 0.83 0.05 0.16 0.29 0.05 0.08 0.07 0.30 0.21 0.03 0.31 NC_003888.3_NC_003888.3_7175 PF00248 PF00248 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8078531-8079047.1 8078531 8079047 516 1 3 0 0.57140 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7180 PF04978;PF05163;PF12867 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8080100-8081558.1 8080100 8081558 1458 2 2 1 0.63624 antibacterial 0.82 0.05 0.14 0.27 0.05 0.07 0.13 0.29 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7182;NC_003888.3_NC_003888.3_7183 PF00248 PF00248;PF12680 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8088495-8089903.1 8088495 8089903 1408 2 2 1 0.57086 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7193;NC_003888.3_NC_003888.3_7194 PF00903 PF06983;PF00903 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8090750-8092010.1 8090750 8092010 1260 1 3 1 0.53063 antibacterial 0.72 0.12 0.25 0.34 0.11 0.01 0.14 0.46 0.26 0.00 0.08 NC_003888.3_NC_003888.3_7196 PF01494 PF13450;PF01494;PF08491 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8094133-8097306.1 8094133 8097306 3173 3 4 0 0.62085 0.40 0.04 0.30 0.15 0.00 0.11 0.07 0.32 0.25 0.03 0.29 NC_003888.3_NC_003888.3_7200;NC_003888.3_NC_003888.3_7201;NC_003888.3_NC_003888.3_7202 PF04686;PF00296;PF07714;PF00069 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8168061-8170689.1 8168061 8170689 2628 3 3 2 0.59075 antibacterial 0.83 0.05 0.17 0.28 0.05 0.07 0.26 0.21 0.17 0.02 0.25 NC_003888.3_NC_003888.3_7264;NC_003888.3_NC_003888.3_7265;NC_003888.3_NC_003888.3_7266 PF02668;PF00248 PF13298;PF00248;PF02668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8172313-8173069.1 8172313 8173069 756 1 6 2 0.63484 antibacterial 0.52 0.07 0.10 0.44 0.00 0.38 0.18 0.38 0.02 0.02 0.03 NC_003888.3_NC_003888.3_7268 PF00975;PF00561 PF01738;PF12697;PF02230;PF12146;PF00561;PF00975 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8173886-8184384.1 8173886 8184384 10498 10 19 5 0.61466 0.46 0.10 0.39 0.11 Polyketide 0.03 0.20 0.11 0.65 0.00 0.03 0.03 NC_003888.3_NC_003888.3_7270;NC_003888.3_NC_003888.3_7271;NC_003888.3_NC_003888.3_7272;NC_003888.3_NC_003888.3_7273;NC_003888.3_NC_003888.3_7274;NC_003888.3_NC_003888.3_7275;NC_003888.3_NC_003888.3_7276;NC_003888.3_NC_003888.3_7277;NC_003888.3_NC_003888.3_7278;NC_003888.3_NC_003888.3_7279 PF00106;PF08240;PF08659;PF00107;PF01370 PF13556;PF13602;PF00107;PF16912;PF02254;PF08240;PF13561;PF00106;PF08659;PF00440;PF11716;PF07398;PF03600;PF02040;PF05977;PF07690;PF01370;PF16363;PF01073 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8190449-8218007.1 8190449 8218007 27558 29 63 9 0.75172 0.45 0.44 0.19 0.08 0.02 0.09 0.27 0.31 0.17 0.11 0.13 NC_003888.3_NC_003888.3_7286;NC_003888.3_NC_003888.3_7287;NC_003888.3_NC_003888.3_7288;NC_003888.3_NC_003888.3_7289;NC_003888.3_NC_003888.3_7290;NC_003888.3_NC_003888.3_7291;NC_003888.3_NC_003888.3_7292;NC_003888.3_NC_003888.3_7293;NC_003888.3_NC_003888.3_7294;NC_003888.3_NC_003888.3_7295;NC_003888.3_NC_003888.3_7296;NC_003888.3_NC_003888.3_7297;NC_003888.3_NC_003888.3_7298;NC_003888.3_NC_003888.3_7299;NC_003888.3_NC_003888.3_7300;NC_003888.3_NC_003888.3_7301;NC_003888.3_NC_003888.3_7302;NC_003888.3_NC_003888.3_7303;NC_003888.3_NC_003888.3_7304;NC_003888.3_NC_003888.3_7305;NC_003888.3_NC_003888.3_7306;NC_003888.3_NC_003888.3_7307;NC_003888.3_NC_003888.3_7308;NC_003888.3_NC_003888.3_7309;NC_003888.3_NC_003888.3_7310;NC_003888.3_NC_003888.3_7311;NC_003888.3_NC_003888.3_7312;NC_003888.3_NC_003888.3_7313;NC_003888.3_NC_003888.3_7314 PF01266;PF00106;PF01494;PF08659;PF01243;PF04055;PF01593;PF03364;PF00561 PF04972;PF14907;PF07228;PF10604;PF09297;PF00999;PF13493;PF00089;PF02983;PF10604;PF03364;PF01266;PF01946;PF03486;PF12831;PF00890;PF01494;PF00070;PF13450;PF01593;PF00106;PF08659;PF13561;PF01593;PF01266;PF01946;PF00070;PF07992;PF01494;PF12831;PF00890;PF13450;PF01593;PF00892;PF00083;PF13347;PF07690;PF03583;PF12697;PF00561;PF12146;PF05448;PF00326;PF00929;PF01032;PF01497;PF13401;PF00005;PF13191;PF13604;PF13304;PF13671;PF02492;PF13555;PF02463;PF13175;PF13476;PF01243;PF04055;PF04672;PF14602;PF00132;PF12464 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8228870-8235982.1 8228870 8235982 7112 8 11 3 0.67244 antibacterial 0.80 0.06 0.19 0.16 Terpene 0.10 0.02 0.04 0.20 0.14 0.01 0.55 NC_003888.3_NC_003888.3_7322;NC_003888.3_NC_003888.3_7323;NC_003888.3_NC_003888.3_7324;NC_003888.3_NC_003888.3_7325;NC_003888.3_NC_003888.3_7326;NC_003888.3_NC_003888.3_7327;NC_003888.3_NC_003888.3_7328;NC_003888.3_NC_003888.3_7329 PF00106;PF00067;PF08659 PF00106;PF08659;PF13561;PF13460;PF03631;PF02746;PF13378;PF00067;PF03029;PF13479;PF05331 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8241247-8241685.1 8241247 8241685 438 1 1 0 0.52761 antibacterial 0.89 0.01 0.03 0.09 0.00 0.01 0.05 0.02 0.46 0.01 0.46 NC_003888.3_NC_003888.3_7335 PF07883 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8242354-8286428.1 8242354 8286428 44074 46 107 13 0.73889 0.29 0.47 0.33 0.14 0.06 0.36 0.31 0.20 0.11 0.01 0.04 NC_003888.3_NC_003888.3_7337;NC_003888.3_NC_003888.3_7338;NC_003888.3_NC_003888.3_7339;NC_003888.3_NC_003888.3_7340;NC_003888.3_NC_003888.3_7341;NC_003888.3_NC_003888.3_7342;NC_003888.3_NC_003888.3_7343;NC_003888.3_NC_003888.3_7344;NC_003888.3_NC_003888.3_7345;NC_003888.3_NC_003888.3_7346;NC_003888.3_NC_003888.3_7347;NC_003888.3_NC_003888.3_7348;NC_003888.3_NC_003888.3_7349;NC_003888.3_NC_003888.3_7350;NC_003888.3_NC_003888.3_7351;NC_003888.3_NC_003888.3_7352;NC_003888.3_NC_003888.3_7353;NC_003888.3_NC_003888.3_7354;NC_003888.3_NC_003888.3_7355;NC_003888.3_NC_003888.3_7356;NC_003888.3_NC_003888.3_7357;NC_003888.3_NC_003888.3_7358;NC_003888.3_NC_003888.3_7359;NC_003888.3_NC_003888.3_7360;NC_003888.3_NC_003888.3_7361;NC_003888.3_NC_003888.3_7362;NC_003888.3_NC_003888.3_7363;NC_003888.3_NC_003888.3_7364;NC_003888.3_NC_003888.3_7365;NC_003888.3_NC_003888.3_7366;NC_003888.3_NC_003888.3_7367;NC_003888.3_NC_003888.3_7368;NC_003888.3_NC_003888.3_7369;NC_003888.3_NC_003888.3_7370;NC_003888.3_NC_003888.3_7371;NC_003888.3_NC_003888.3_7372;NC_003888.3_NC_003888.3_7373;NC_003888.3_NC_003888.3_7374;NC_003888.3_NC_003888.3_7375;NC_003888.3_NC_003888.3_7376;NC_003888.3_NC_003888.3_7377;NC_003888.3_NC_003888.3_7378;NC_003888.3_NC_003888.3_7379;NC_003888.3_NC_003888.3_7380;NC_003888.3_NC_003888.3_7381;NC_003888.3_NC_003888.3_7382 PF08242;PF00171;PF00857;PF00975;PF01494;PF00891;PF03061;PF08241;PF03992;PF00583;PF00501;PF00067;PF00561 PF11563;PF00042;PF00970;PF08030;PF00175;PF01955;PF06532;PF02031;PF05547;PF00413;PF00126;PF13556;PF03466;PF03413;PF06779;PF07690;PF00083;PF06609;PF13347;PF00171;PF02775;PF00205;PF02776;PF00126;PF13556;PF03466;PF03575;PF12697;PF12146;PF00561;PF03096;PF00975;PF00440;PF02878;PF02879;PF02880;PF00408;PF00067;PF05175;PF13489;PF02353;PF13847;PF07021;PF13649;PF08241;PF08242;PF13578;PF13581;PF13302;PF00583;PF00989;PF13188;PF08448;PF13426;PF01590;PF13185;PF13492;PF07228;PF04203;PF03992;PF04486;PF04673;PF00891;PF13649;PF16864;PF08100;PF13229;PF07602;PF12708;PF05048;PF02659;PF04471;PF13156;PF00857;PF06737;PF00005;PF13555;PF13304;PF12128;PF00089;PF13365;PF09342;PF01925;PF13581;PF13589;PF02518;PF03259;PF05331;PF00009;PF08477;PF00071;PF01926;PF03029;PF11991;PF00743;PF07992;PF13738;PF13434;PF13450;PF00890;PF01494;PF14535;PF00501;PF03061;PF05138;PF06243;PF05138 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8288250-8293976.1 8288250 8293976 5726 5 6 1 0.61630 antibacterial 0.66 0.04 0.13 0.40 Polyketide 0.01 0.00 0.17 0.69 0.05 0.06 0.03 NC_003888.3_NC_003888.3_7385;NC_003888.3_NC_003888.3_7386;NC_003888.3_NC_003888.3_7387;NC_003888.3_NC_003888.3_7388;NC_003888.3_NC_003888.3_7389 PF01636 PF05426;PF01636;PF05977;PF09835;PF07690;PF11706 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8311491-8314671.1 8311491 8314671 3180 2 2 0 0.52537 antibacterial 0.86 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7409;NC_003888.3_NC_003888.3_7410 PF02133;PF04616 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8319173-8321994.1 8319173 8321994 2821 2 4 1 0.61003 antibacterial 0.87 0.06 0.18 0.25 0.00 0.07 0.27 0.23 0.17 0.02 0.27 NC_003888.3_NC_003888.3_7415;NC_003888.3_NC_003888.3_7416 PF02668 PF02837;PF00703;PF02836;PF02668 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8438150-8466318.1 8438150 8466318 28168 27 48 3 0.69385 0.44 0.44 0.18 0.13 0.08 0.01 0.40 0.20 0.10 0.14 0.25 NC_003888.3_NC_003888.3_7519;NC_003888.3_NC_003888.3_7520;NC_003888.3_NC_003888.3_7521;NC_003888.3_NC_003888.3_7522;NC_003888.3_NC_003888.3_7523;NC_003888.3_NC_003888.3_7524;NC_003888.3_NC_003888.3_7525;NC_003888.3_NC_003888.3_7526;NC_003888.3_NC_003888.3_7527;NC_003888.3_NC_003888.3_7528;NC_003888.3_NC_003888.3_7529;NC_003888.3_NC_003888.3_7530;NC_003888.3_NC_003888.3_7531;NC_003888.3_NC_003888.3_7532;NC_003888.3_NC_003888.3_7533;NC_003888.3_NC_003888.3_7534;NC_003888.3_NC_003888.3_7535;NC_003888.3_NC_003888.3_7536;NC_003888.3_NC_003888.3_7537;NC_003888.3_NC_003888.3_7538;NC_003888.3_NC_003888.3_7539;NC_003888.3_NC_003888.3_7540;NC_003888.3_NC_003888.3_7541;NC_003888.3_NC_003888.3_7542;NC_003888.3_NC_003888.3_7543;NC_003888.3_NC_003888.3_7544;NC_003888.3_NC_003888.3_7545 PF01266;PF02585;PF01494 PF04029;PF04264;PF13581;PF13560;PF13413;PF01381;PF04149;PF04672;PF09339;PF12802;PF13412;PF01614;PF01740;PF13466;PF04343;PF14534;PF12680;PF02233;PF12769;PF01262;PF05222;PF02909;PF00440;PF00070;PF03486;PF07992;PF01494;PF01266;PF13450;PF13738;PF01494;PF03486;PF01872;PF07995;PF02746;PF13378;PF00300;PF13385;PF02210;PF00149;PF02585;PF00704;PF09346;PF14568;PF02031;PF00413;PF00150;PF00553 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8468384-8563058.1 8468384 8563058 94674 88 209 23 0.91964 cytotoxic 0.48 0.54 0.21 0.15 NRP 0.01 0.64 0.08 0.42 0.00 0.04 0.02 NC_003888.3_NC_003888.3_7547;NC_003888.3_NC_003888.3_7548;NC_003888.3_NC_003888.3_7549;NC_003888.3_NC_003888.3_7550;NC_003888.3_NC_003888.3_7551;NC_003888.3_NC_003888.3_7552;NC_003888.3_NC_003888.3_7553;NC_003888.3_NC_003888.3_7554;NC_003888.3_NC_003888.3_7555;NC_003888.3_NC_003888.3_7556;NC_003888.3_NC_003888.3_7557;NC_003888.3_NC_003888.3_7558;NC_003888.3_NC_003888.3_7559;NC_003888.3_NC_003888.3_7560;NC_003888.3_NC_003888.3_7561;NC_003888.3_NC_003888.3_7562;NC_003888.3_NC_003888.3_7563;NC_003888.3_NC_003888.3_7564;NC_003888.3_NC_003888.3_7565;NC_003888.3_NC_003888.3_7566;NC_003888.3_NC_003888.3_7567;NC_003888.3_NC_003888.3_7568;NC_003888.3_NC_003888.3_7569;NC_003888.3_NC_003888.3_7570;NC_003888.3_NC_003888.3_7571;NC_003888.3_NC_003888.3_7572;NC_003888.3_NC_003888.3_7573;NC_003888.3_NC_003888.3_7574;NC_003888.3_NC_003888.3_7575;NC_003888.3_NC_003888.3_7576;NC_003888.3_NC_003888.3_7577;NC_003888.3_NC_003888.3_7578;NC_003888.3_NC_003888.3_7579;NC_003888.3_NC_003888.3_7580;NC_003888.3_NC_003888.3_7581;NC_003888.3_NC_003888.3_7582;NC_003888.3_NC_003888.3_7583;NC_003888.3_NC_003888.3_7584;NC_003888.3_NC_003888.3_7585;NC_003888.3_NC_003888.3_7586;NC_003888.3_NC_003888.3_7587;NC_003888.3_NC_003888.3_7588;NC_003888.3_NC_003888.3_7589;NC_003888.3_NC_003888.3_7590;NC_003888.3_NC_003888.3_7591;NC_003888.3_NC_003888.3_7592;NC_003888.3_NC_003888.3_7593;NC_003888.3_NC_003888.3_7594;NC_003888.3_NC_003888.3_7595;NC_003888.3_NC_003888.3_7596;NC_003888.3_NC_003888.3_7597;NC_003888.3_NC_003888.3_7598;NC_003888.3_NC_003888.3_7599;NC_003888.3_NC_003888.3_7600;NC_003888.3_NC_003888.3_7601;NC_003888.3_NC_003888.3_7602;NC_003888.3_NC_003888.3_7603;NC_003888.3_NC_003888.3_7604;NC_003888.3_NC_003888.3_7605;NC_003888.3_NC_003888.3_7606;NC_003888.3_NC_003888.3_7607;NC_003888.3_NC_003888.3_7608;NC_003888.3_NC_003888.3_7609;NC_003888.3_NC_003888.3_7610;NC_003888.3_NC_003888.3_7611;NC_003888.3_NC_003888.3_7612;NC_003888.3_NC_003888.3_7613;NC_003888.3_NC_003888.3_7614;NC_003888.3_NC_003888.3_7615;NC_003888.3_NC_003888.3_7616;NC_003888.3_NC_003888.3_7617;NC_003888.3_NC_003888.3_7618;NC_003888.3_NC_003888.3_7619;NC_003888.3_NC_003888.3_7620;NC_003888.3_NC_003888.3_7621;NC_003888.3_NC_003888.3_7622;NC_003888.3_NC_003888.3_7623;NC_003888.3_NC_003888.3_7624;NC_003888.3_NC_003888.3_7625;NC_003888.3_NC_003888.3_7626;NC_003888.3_NC_003888.3_7627;NC_003888.3_NC_003888.3_7628;NC_003888.3_NC_003888.3_7629;NC_003888.3_NC_003888.3_7630;NC_003888.3_NC_003888.3_7631;NC_003888.3_NC_003888.3_7632;NC_003888.3_NC_003888.3_7633;NC_003888.3_NC_003888.3_7634 PF08242;PF00106;PF00891;PF00107;PF00583;PF00501;PF01370;PF03364;PF01408;PF00903;PF00975;PF01494;PF00248;PF08241;PF00668;PF00067;PF01266;PF01636;PF00857;PF08240;PF08541;PF08659;PF00561 PF12802;PF01047;PF13463;PF12840;PF03466;PF00126;PF03446;PF12893;PF00903;PF08922;PF16653;PF03435;PF01113;PF02254;PF00440;PF02909;PF13828;PF13499;PF13833;PF13405;PF00036;PF13202;PF00196;PF08281;PF00072;PF07730;PF00561;PF08386;PF13977;PF16859;PF00440;PF13302;PF13420;PF00583;PF00903;PF00248;PF00248;PF13563;PF01186;PF01494;PF01266;PF13450;PF07885;PF00520;PF01872;PF07690;PF06779;PF01035;PF04343;PF11160;PF08240;PF00107;PF13602;PF01966;PF01494;PF05834;PF03486;PF07992;PF01946;PF01266;PF12831;PF00890;PF13450;PF01134;PF13738;PF04191;PF04140;PF08541;PF02797;PF00195;PF08392;PF01040;PF03640;PF13473;PF00127;PF06902;PF13459;PF13370;PF00496;PF00528;PF00528;PF13304;PF00005;PF13481;PF13191;PF13401;PF00004;PF02463;PF13193;PF00501;PF00550;PF00668;PF00501;PF13193;PF00668;PF00501;PF13489;PF01209;PF13847;PF13649;PF08242;PF08241;PF13193;PF00550;PF12697;PF00975;PF00561;PF01738;PF03435;PF01370;PF13460;PF01408;PF00891;PF13489;PF13649;PF08241;PF08242;PF00067;PF00975;PF12697;PF12146;PF13489;PF05219;PF13649;PF08242;PF08241;PF00664;PF00005;PF13555;PF13191;PF13401;PF13479;PF02463;PF00664;PF00005;PF13555;PF13191;PF02463;PF00425;PF13561;PF00106;PF01370;PF08659;PF00440;PF00903;PF12802;PF01047;PF09339;PF13412;PF13545;PF02333;PF01209;PF13649;PF08241;PF08242;PF09278;PF13411;PF00376;PF00027;PF02353;PF08241;PF13649;PF00392;PF07729;PF07690;PF00440;PF02909;PF07992;PF13450;PF01494;PF13560;PF01381;PF11512;PF13483;PF12706;PF12802;PF13463;PF01047;PF12840;PF13412;PF13545;PF01636;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13302;PF00583;PF04672;PF08327;PF10604;PF03364;PF00440;PF13384;PF11716;PF12867;PF07398;PF04978;PF12867;PF13560;PF09339;PF13404;PF00857;PF01978;PF13463;PF12802;PF01047 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8563624-8572470.1 8563624 8572470 8846 7 12 0 0.52668 antibacterial 0.78 0.07 0.13 0.33 0.00 0.07 0.16 0.22 0.31 0.04 0.24 NC_003888.3_NC_003888.3_7636;NC_003888.3_NC_003888.3_7637;NC_003888.3_NC_003888.3_7638;NC_003888.3_NC_003888.3_7639;NC_003888.3_NC_003888.3_7640;NC_003888.3_NC_003888.3_7641;NC_003888.3_NC_003888.3_7642 PF02678;PF05726;PF14542;PF03795;PF12844;PF13560;PF01381;PF01381;PF13384;PF13542;PF04632;PF13515 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8577480-8584200.1 8577480 8584200 6720 6 9 0 0.54096 antibacterial 0.76 0.13 0.17 0.23 0.00 0.05 0.33 0.25 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7648;NC_003888.3_NC_003888.3_7649;NC_003888.3_NC_003888.3_7650;NC_003888.3_NC_003888.3_7651;NC_003888.3_NC_003888.3_7652;NC_003888.3_NC_003888.3_7653 PF01978;PF12802;PF13463;PF01047;PF13340;PF07228;PF07228;PF02607;PF02310 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8584660-8586017.1 8584660 8586017 1357 2 6 0 0.52045 antibacterial 0.81 0.10 0.17 0.22 0.00 0.07 0.40 0.19 0.20 0.02 0.16 NC_003888.3_NC_003888.3_7655;NC_003888.3_NC_003888.3_7656 PF12802;PF01047;PF13412;PF01325;PF09339;PF08570 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8607538-8608480.1 8607538 8608480 942 1 4 0 0.53548 antibacterial 0.81 0.06 0.16 0.29 0.00 0.11 0.11 0.29 0.21 0.04 0.29 NC_003888.3_NC_003888.3_7680 PF14525;PF13384;PF12833;PF00165 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8610787-8635487.1 8610787 8635487 24700 30 42 5 0.83777 antibacterial 0.54 0.26 0.20 0.31 Polyketide 0.01 0.08 0.12 0.68 0.08 0.03 0.08 NC_003888.3_NC_003888.3_7682;NC_003888.3_NC_003888.3_7683;NC_003888.3_NC_003888.3_7684;NC_003888.3_NC_003888.3_7685;NC_003888.3_NC_003888.3_7686;NC_003888.3_NC_003888.3_7687;NC_003888.3_NC_003888.3_7688;NC_003888.3_NC_003888.3_7689;NC_003888.3_NC_003888.3_7690;NC_003888.3_NC_003888.3_7691;NC_003888.3_NC_003888.3_7692;NC_003888.3_NC_003888.3_7693;NC_003888.3_NC_003888.3_7694;NC_003888.3_NC_003888.3_7695;NC_003888.3_NC_003888.3_7696;NC_003888.3_NC_003888.3_7697;NC_003888.3_NC_003888.3_7698;NC_003888.3_NC_003888.3_7699;NC_003888.3_NC_003888.3_7700;NC_003888.3_NC_003888.3_7701;NC_003888.3_NC_003888.3_7702;NC_003888.3_NC_003888.3_7703;NC_003888.3_NC_003888.3_7704;NC_003888.3_NC_003888.3_7705;NC_003888.3_NC_003888.3_7706;NC_003888.3_NC_003888.3_7707;NC_003888.3_NC_003888.3_7708;NC_003888.3_NC_003888.3_7709;NC_003888.3_NC_003888.3_7710;NC_003888.3_NC_003888.3_7711 PF00106;PF01494;PF08659;PF00107;PF01370 PF00881;PF02909;PF13358;PF09076;PF01494;PF07992;PF00890;PF01494;PF00890;PF07992;PF00107;PF00440;PF02909;PF13586;PF01609;PF10756;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF14145;PF01548;PF13022;PF00440;PF00356;PF00106;PF08659;PF01370;PF13561;PF06197;PF13359;PF01609;PF13613;PF04072;PF13561;PF00106;PF00440 +NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8642713-8643713.1 8642713 8643713 1000 2 3 0 0.54261 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_7719;NC_003888.3_NC_003888.3_7720 PF14079;PF13305;PF00440 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_31460-41750.1 31460 41750 10290 13 23 4 0.61532 antibacterial 0.76 0.13 0.12 0.31 Polyketide 0.02 0.07 0.15 0.58 0.01 0.08 0.12 NC_003903.1_NC_003903.1_34;NC_003903.1_NC_003903.1_35;NC_003903.1_NC_003903.1_36;NC_003903.1_NC_003903.1_37;NC_003903.1_NC_003903.1_38;NC_003903.1_NC_003903.1_39;NC_003903.1_NC_003903.1_40;NC_003903.1_NC_003903.1_41;NC_003903.1_NC_003903.1_42;NC_003903.1_NC_003903.1_43;NC_003903.1_NC_003903.1_44;NC_003903.1_NC_003903.1_45;NC_003903.1_NC_003903.1_46 PF02585;PF00106;PF01370;PF08659 PF07228;PF02585;PF12833;PF00165;PF12852;PF00106;PF01370;PF08659;PF13561;PF13460;PF13586;PF01609;PF13340;PF07228;PF16859;PF16925;PF00440;PF00106;PF08659;PF01370;PF16363;PF13460;PF13561 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_60518-60743.1 60518 60743 225 1 1 0 0.60639 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003903.1_NC_003903.1_70 PF04149 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_63898-66577.1 63898 66577 2679 1 1 0 0.52239 antibacterial 0.76 0.06 0.17 0.24 0.00 0.08 0.23 0.20 0.20 0.00 0.31 NC_003903.1_NC_003903.1_75 PF13191 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_159898-165658.1 159898 165658 5760 6 5 1 0.55200 antibacterial 0.76 0.06 0.18 0.24 0.00 0.07 0.26 0.20 0.20 0.00 0.28 NC_003903.1_NC_003903.1_184;NC_003903.1_NC_003903.1_185;NC_003903.1_NC_003903.1_186;NC_003903.1_NC_003903.1_187;NC_003903.1_NC_003903.1_188;NC_003903.1_NC_003903.1_189 PF00903 PF00903;PF13144;PF08666;PF00437;PF13191 +NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_230262-324563.1 230262 324563 94301 108 113 20 0.85951 antibacterial 0.59 0.48 0.14 0.14 0.10 0.22 0.34 0.36 0.01 0.09 0.05 NC_003903.1_NC_003903.1_253;NC_003903.1_NC_003903.1_254;NC_003903.1_NC_003903.1_255;NC_003903.1_NC_003903.1_256;NC_003903.1_NC_003903.1_257;NC_003903.1_NC_003903.1_258;NC_003903.1_NC_003903.1_259;NC_003903.1_NC_003903.1_260;NC_003903.1_NC_003903.1_261;NC_003903.1_NC_003903.1_262;NC_003903.1_NC_003903.1_263;NC_003903.1_NC_003903.1_264;NC_003903.1_NC_003903.1_265;NC_003903.1_NC_003903.1_266;NC_003903.1_NC_003903.1_267;NC_003903.1_NC_003903.1_268;NC_003903.1_NC_003903.1_269;NC_003903.1_NC_003903.1_270;NC_003903.1_NC_003903.1_271;NC_003903.1_NC_003903.1_272;NC_003903.1_NC_003903.1_273;NC_003903.1_NC_003903.1_274;NC_003903.1_NC_003903.1_275;NC_003903.1_NC_003903.1_276;NC_003903.1_NC_003903.1_277;NC_003903.1_NC_003903.1_278;NC_003903.1_NC_003903.1_279;NC_003903.1_NC_003903.1_280;NC_003903.1_NC_003903.1_281;NC_003903.1_NC_003903.1_282;NC_003903.1_NC_003903.1_283;NC_003903.1_NC_003903.1_284;NC_003903.1_NC_003903.1_285;NC_003903.1_NC_003903.1_286;NC_003903.1_NC_003903.1_287;NC_003903.1_NC_003903.1_288;NC_003903.1_NC_003903.1_289;NC_003903.1_NC_003903.1_290;NC_003903.1_NC_003903.1_291;NC_003903.1_NC_003903.1_292;NC_003903.1_NC_003903.1_293;NC_003903.1_NC_003903.1_294;NC_003903.1_NC_003903.1_295;NC_003903.1_NC_003903.1_296;NC_003903.1_NC_003903.1_297;NC_003903.1_NC_003903.1_298;NC_003903.1_NC_003903.1_299;NC_003903.1_NC_003903.1_300;NC_003903.1_NC_003903.1_301;NC_003903.1_NC_003903.1_302;NC_003903.1_NC_003903.1_303;NC_003903.1_NC_003903.1_304;NC_003903.1_NC_003903.1_305;NC_003903.1_NC_003903.1_306;NC_003903.1_NC_003903.1_307;NC_003903.1_NC_003903.1_308;NC_003903.1_NC_003903.1_309;NC_003903.1_NC_003903.1_310;NC_003903.1_NC_003903.1_311;NC_003903.1_NC_003903.1_312;NC_003903.1_NC_003903.1_313;NC_003903.1_NC_003903.1_314;NC_003903.1_NC_003903.1_315;NC_003903.1_NC_003903.1_316;NC_003903.1_NC_003903.1_317;NC_003903.1_NC_003903.1_318;NC_003903.1_NC_003903.1_319;NC_003903.1_NC_003903.1_320;NC_003903.1_NC_003903.1_321;NC_003903.1_NC_003903.1_322;NC_003903.1_NC_003903.1_323;NC_003903.1_NC_003903.1_324;NC_003903.1_NC_003903.1_325;NC_003903.1_NC_003903.1_326;NC_003903.1_NC_003903.1_327;NC_003903.1_NC_003903.1_328;NC_003903.1_NC_003903.1_329;NC_003903.1_NC_003903.1_330;NC_003903.1_NC_003903.1_331;NC_003903.1_NC_003903.1_332;NC_003903.1_NC_003903.1_333;NC_003903.1_NC_003903.1_334;NC_003903.1_NC_003903.1_335;NC_003903.1_NC_003903.1_336;NC_003903.1_NC_003903.1_337;NC_003903.1_NC_003903.1_338;NC_003903.1_NC_003903.1_339;NC_003903.1_NC_003903.1_340;NC_003903.1_NC_003903.1_341;NC_003903.1_NC_003903.1_342;NC_003903.1_NC_003903.1_343;NC_003903.1_NC_003903.1_344;NC_003903.1_NC_003903.1_345;NC_003903.1_NC_003903.1_346;NC_003903.1_NC_003903.1_347;NC_003903.1_NC_003903.1_348;NC_003903.1_NC_003903.1_349;NC_003903.1_NC_003903.1_350;NC_003903.1_NC_003903.1_351;NC_003903.1_NC_003903.1_352;NC_003903.1_NC_003903.1_353;NC_003903.1_NC_003903.1_354;NC_003903.1_NC_003903.1_355;NC_003903.1_NC_003903.1_356;NC_003903.1_NC_003903.1_357;NC_003903.1_NC_003903.1_358;NC_003903.1_NC_003903.1_359;NC_003903.1_NC_003903.1_360 PF02585;PF00106;PF02770;PF00441;PF00583;PF01370;PF08545;PF01408;PF03756;PF08028;PF01118;PF00975;PF02771;PF02737;PF01636;PF01266;PF02894;PF00702;PF08541;PF08659 PF01370;PF01613;PF13577;PF13560;PF10727;PF02826;PF03807;PF03446;PF02558;PF02737;PF00724;PF05655;PF13521;PF08545;PF08541;PF00550;PF12710;PF08282;PF13521;PF13238;PF13347;PF07690;PF12840;PF01022;PF02894;PF01408;PF13380;PF00296;PF00975;PF12697;PF00440;PF03756;PF02771;PF02770;PF00441;PF08028;PF12710;PF00702;PF08282;PF00440;PF13646;PF00932;PF00872;PF10551;PF00932;PF07510;PF00583;PF13302;PF13517;PF05593;PF14690;PF13005;PF01610;PF05534;PF08681;PF08239;PF02735;PF01402;PF13191;PF06414;PF13671;PF13191;PF14267;PF04149;PF12844;PF13560;PF01381;PF13443;PF13744;PF13581;PF01557;PF01118;PF09290;PF00682;PF07836;PF03328;PF15617;PF01575;PF13527;PF13530;PF01636;PF02585;PF07690;PF05977;PF00083;PF07992;PF00890;PF01266;PF03486;PF13450;PF13460;PF13561;PF00106;PF08659;PF01370;PF16363;PF00440;PF16925;PF16859;PF07228;PF13340;PF01609;PF13586;PF13561;PF00106;PF01370;PF08659;PF13460;PF12852;PF00165;PF12833;PF02585;PF07228 diff --git a/inst/extdata/sco_duptable.tsv b/inst/extdata/sco_duptable.tsv new file mode 100644 index 0000000..81ca146 --- /dev/null +++ b/inst/extdata/sco_duptable.tsv @@ -0,0 +1,73 @@ +#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description +TIGR01358 2.0 1.0 0.134 0.8474 0.8632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2272072 2273419 -1 # ID=1_2079|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3519448 3520903 -1 # ID=1_3163|Type=CDS|transl_table=11] DAHP_synth_II: 3-deoxy-7-phosphoheptulonate synthase +TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791175 3791412 1 # ID=1_3380|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6062058 6062244 -1 # ID=1_5496|Type=CDS|transl_table=11] L28: ribosomal protein bL28 +TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6206674 6207832 1 # ID=1_5627|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7524432 7525587 1 # ID=1_6687|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase +TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2753869 2755006 -1 # ID=1_2512|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4048920 4050120 -1 # ID=1_3613|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ +TIGR02200 2.0 1.0 0.0 0.6737 0.6737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3804031 3804376 1 # ID=1_3393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5644428 5644671 -1 # ID=1_5118|Type=CDS|transl_table=11] GlrX_actino: glutaredoxin-like protein +TIGR00663 2.0 1.0 0.333 0.8684 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4268712 4269843 -1 # ID=1_3822|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|112311 113430 1 # ID=2_7877|Type=CDS|transl_table=11] TIGR00663: dnan: DNA polymerase III, beta subunit +TIGR01048 2.0 1.0 0.4252 0.7263 0.8895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5820661 5822053 1 # ID=1_5284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7121124 7122447 1 # ID=1_6363|Type=CDS|transl_table=11] lysA: diaminopimelate decarboxylase +TIGR00546 2.0 1.0 0.5356 0.5368 0.7579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1069701 1071315 -1 # ID=1_974|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1412773 1414348 1 # ID=1_1296|Type=CDS|transl_table=11] lnt: apolipoprotein N-acyltransferase +TIGR00544 2.0 1.0 0.401 0.8947 0.9632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2185227 2186259 -1 # ID=1_1997|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8641684 8642638 -1 # ID=1_7718|Type=CDS|transl_table=11] lgt: prolipoprotein diacylglyceryl transferase +TIGR00260 2.0 1.0 0.4739 0.6421 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4708600 4709893 1 # ID=1_4231|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5823510 5824569 1 # ID=1_5286|Type=CDS|transl_table=11] thrC: threonine synthase +TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2068834 2069953 1 # ID=1_1899|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7399382 7400528 -1 # ID=1_6583|Type=CDS|transl_table=11] tal_mycobact: transaldolase +TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3789247 3789487 -1 # ID=1_3376|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4304257 4304494 1 # ID=1_3851|Type=CDS|transl_table=11] S18: ribosomal protein bS18 +TIGR00494 2.0 1.0 0.4687 0.3579 0.4842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7835927 7836392 1 # ID=1_6962|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7836729 7837104 1 # ID=1_6964|Type=CDS|transl_table=11] crcB: protein CrcB +TIGR00193 2.0 1.0 0.5356 0.4737 0.5737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1310292 1310595 -1 # ID=1_1194|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6019303 6019987 1 # ID=1_5456|Type=CDS|transl_table=11] urease_gam: urease, gamma subunit +TIGR00872 2.0 1.0 0.4307 0.5684 0.6421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4267593 4268469 -1 # ID=1_3821|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7394147 7395029 -1 # ID=1_6579|Type=CDS|transl_table=11] gnd_rel: 6-phosphogluconate dehydrogenase (decarboxylating) +TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5671274 5672591 -1 # ID=1_5144|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7580931 7582254 -1 # ID=1_6738|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase +TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2069956 2071480 1 # ID=1_1900|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7397607 7399386 -1 # ID=1_6582|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase +TIGR03954 3.0 2.0 0.4551 0.2421 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5880227 5880572 1 # ID=1_5340|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5883320 5883662 1 # ID=1_5345|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6470908 6473461 -1 # ID=1_5836|Type=CDS|transl_table=11] integ_memb_HG: integral membrane protein +TIGR00534 2.0 1.0 0.424 0.2526 0.3 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2071476 2072532 1 # ID=1_1901|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7396675 7397611 -1 # ID=1_6581|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA +TIGR01129 2.0 1.0 0.3282 0.7895 0.9 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1621003 1622815 -1 # ID=1_1476|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6762661 6765049 -1 # ID=1_6092|Type=CDS|transl_table=11] secD: protein-export membrane protein SecD +TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1401206 1402082 1 # ID=1_1285|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7837143 7837980 1 # ID=1_6965|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP +TIGR00759 3.0 1.0 0.4291 0.6895 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2348739 2351439 1 # ID=1_2146|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2539575 2542332 1 # ID=1_2329|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7914736 7917424 -1 # ID=1_7038|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type +TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5670248 5671262 -1 # ID=1_5143|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6750130 6751231 1 # ID=1_6081|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A +TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2162745 2165244 -1 # ID=1_1981|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2861629 2864203 1 # ID=1_2596|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2873769 2876343 1 # ID=1_2604|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N +TIGR03181 2.0 1.0 0.5945 0.3368 0.6105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4195942 4197196 -1 # ID=1_3760|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4213271 4214438 -1 # ID=1_3775|Type=CDS|transl_table=11] PDH_E1_alph_x: pyruvate dehydrogenase (acetyl-transferring) E1 component, alpha subunit +TIGR01311 2.0 1.0 0.7691 0.6474 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|544193 545717 1 # ID=1_469|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1778725 1780264 1 # ID=1_1621|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase +TIGR00575 2.0 1.0 0.3226 0.8263 0.9368 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5978784 5980992 1 # ID=1_5425|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8337388 8339491 -1 # ID=1_7431|Type=CDS|transl_table=11] dnlj: DNA ligase, NAD-dependent +TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1636965 1638942 -1 # ID=1_1491|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4153188 4154442 1 # ID=1_3721|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase +TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5832393 5833041 1 # ID=1_5293|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8173118 8173739 -1 # ID=1_7269|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family +TIGR01263 2.0 1.0 0.609 0.2579 0.3579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3178619 3179765 -1 # ID=1_2885|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3541950 3543027 -1 # ID=1_3182|Type=CDS|transl_table=11] 4HPPD: 4-hydroxyphenylpyruvate dioxygenase +TIGR00465 2.0 1.0 0.1928 0.9158 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6005642 6006641 1 # ID=1_5445|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7947902 7948901 -1 # ID=1_7068|Type=CDS|transl_table=11] ilvC: ketol-acid reductoisomerase +TIGR01828 2.0 1.0 0.2247 0.3737 0.3947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|197220 199917 1 # ID=1_173|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2684903 2687633 -1 # ID=1_2452|Type=CDS|transl_table=11] pyru_phos_dikin: pyruvate, phosphate dikinase +TIGR01292 2.0 1.0 0.4096 0.8684 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4280582 4281551 -1 # ID=1_3833|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7605260 7606241 -1 # ID=1_6752|Type=CDS|transl_table=11] TRX_reduct: thioredoxin-disulfide reductase +TIGR00180 3.0 1.0 0.4697 0.8579 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4278314 4279181 1 # ID=1_3830|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|130086 131214 1 # ID=2_7896|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|222644 223790 1 # ID=2_7984|Type=CDS|transl_table=11] parB_part: ParB/RepB/Spo0J family partition protein +TIGR01296 2.0 1.0 0.4279 0.7211 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2870835 2871858 1 # ID=1_2601|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3993329 3994418 -1 # ID=1_3558|Type=CDS|transl_table=11] asd_B: aspartate-semialdehyde dehydrogenase +TIGR02227 3.0 1.0 1.1572 0.5579 0.9789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6099895 6100675 1 # ID=1_5529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6101640 6102651 1 # ID=1_5531|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6102755 6103532 1 # ID=1_5532|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I +TIGR00232 2.0 1.0 0.3575 0.8263 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2066712 2068800 1 # ID=1_1898|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7400591 7402688 -1 # ID=1_6584|Type=CDS|transl_table=11] tktlase_bact: transketolase +TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3691373 3692384 1 # ID=1_3284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5271518 5272538 1 # ID=1_4770|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase +TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1662891 1666530 -1 # ID=1_1516|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2338273 2339347 1 # ID=1_2138|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase +SHMT 4.0 1.0 0.8787 0.5842 0.9474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5269285 5270731 1 # ID=1_4768|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5833805 5835062 1 # ID=1_5295|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5955946 5957209 -1 # ID=1_5401|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7560697 7561891 1 # ID=1_6719|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase +TIGR02133 2.0 1.0 0.6088 0.6895 0.8526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|620366 620879 -1 # ID=1_538|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2854111 2854597 -1 # ID=1_2588|Type=CDS|transl_table=11] RPI_actino: ribose 5-phosphate isomerase +TIGR02138 2.0 1.0 0.3956 0.7895 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4555527 4556538 -1 # ID=1_4078|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7576035 7577847 -1 # ID=1_6734|Type=CDS|transl_table=11] phosphate_pstC: phosphate ABC transporter, permease protein PstC +TIGR00247 2.0 1.0 0.3281 0.7526 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1201485 1202247 -1 # ID=1_1100|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1600713 1602462 -1 # ID=1_1459|Type=CDS|transl_table=11] TIGR00247: conserved hypothetical protein, YceG family +TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3043785 3045603 1 # ID=1_2749|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5153333 5155181 1 # ID=1_4673|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) +Cpn10 2.0 1.0 0.519 0.6211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3153869 3154226 -1 # ID=1_2859|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5172736 5173045 1 # ID=1_4694|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit +TIGR01428 2.0 1.0 0.5276 0.2105 0.2789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|425290 425983 1 # ID=1_362|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3808428 3809106 -1 # ID=1_3396|Type=CDS|transl_table=11] HAD_type_II: haloacid dehalogenase, type II +Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791411 3791717 1 # ID=1_3381|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5134359 5134545 1 # ID=1_4648|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e +TIGR01490 4.0 2.0 0.9067 0.2526 0.8316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3673972 3674866 1 # ID=1_3272|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3933751 3934558 1 # ID=1_3504|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|239675 240374 1 # ID=2_8002|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|249460 250255 1 # ID=2_8012|Type=CDS|transl_table=11] HAD-SF-IB-hyp1: HAD hydrolase, family IB +TIGR03356 5.0 2.0 1.4956 0.2105 0.4526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1116446 1117826 1 # ID=1_1017|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2728979 2730326 1 # ID=1_2489|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3054669 3056109 1 # ID=1_2758|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7324810 7326169 1 # ID=1_6529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8380678 8382118 1 # ID=1_7467|Type=CDS|transl_table=11] BGL: beta-galactosidase +TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6594925 6596854 1 # ID=1_5942|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7525612 7527583 1 # ID=1_6688|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase +TIGR01179 2.0 1.0 0.6237 0.6947 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3257699 3258680 1 # ID=1_2945|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3437661 3438627 -1 # ID=1_3092|Type=CDS|transl_table=11] galE: UDP-glucose 4-epimerase GalE +TIGR01031 2.0 1.0 0.4408 0.7316 0.9579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|457483 457654 1 # ID=1_393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6069793 6069967 1 # ID=1_5503|Type=CDS|transl_table=11] rpmF_bact: ribosomal protein bL32 +TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1210321 1210594 1 # ID=1_1107|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790677 3790932 -1 # ID=1_3378|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5830019 5830244 1 # ID=1_5290|Type=CDS|transl_table=11] L31: ribosomal protein bL31 +TIGR00674 2.0 1.0 0.6145 0.7737 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2048211 2049129 1 # ID=1_1875|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6266752 6267652 1 # ID=1_5674|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase +TIGR01515 2.0 1.0 0.2643 0.8105 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5914594 5916919 -1 # ID=1_5371|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8143093 8145319 -1 # ID=1_7243|Type=CDS|transl_table=11] branching_enzym: 1,4-alpha-glucan branching enzyme +TIGR01513 2.0 1.0 0.2556 0.9053 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|161236 162553 1 # ID=1_137|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3166795 3168142 1 # ID=1_2875|Type=CDS|transl_table=11] NAPRTase_put: nicotinate phosphoribosyltransferase +TIGR00773 3.0 1.0 0.6807 0.4263 0.6895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|16069 17302 -1 # ID=1_13|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3943389 3944814 1 # ID=1_3510|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8650205 8651438 1 # ID=1_7726|Type=CDS|transl_table=11] NhaA: Na+/H+ antiporter NhaA +TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2745001 2746024 -1 # ID=1_2504|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5068591 5069623 -1 # ID=1_4578|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5334545 5335736 1 # ID=1_4831|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6161551 6162613 -1 # ID=1_5593|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8077470 8078550 1 # ID=1_7179|Type=CDS|transl_table=11] aden_deam: adenosine deaminase +TIGR02891 2.0 1.0 0.9994 0.4474 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2316757 2318494 -1 # ID=1_2119|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8041765 8043442 1 # ID=1_7145|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I +TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1282581 1283121 -1 # ID=1_1169|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4977868 4978495 -1 # ID=1_4494|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5680106 5680757 1 # ID=1_5153|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase +TIGR01023 3.0 1.0 0.6482 0.5737 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|612155 612320 -1 # ID=1_529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790938 3791103 -1 # ID=1_3379|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5061598 5061763 1 # ID=1_4569|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 +TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2445704 2446967 1 # ID=1_2236|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4363347 4364685 -1 # ID=1_3906|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme +TIGR01245 2.0 1.0 0.1699 0.8579 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2308850 2309915 -1 # ID=1_2111|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3521672 3522704 -1 # ID=1_3165|Type=CDS|transl_table=11] trpD: anthranilate phosphoribosyltransferase +TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1923749 1924289 1 # ID=1_1756|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4413741 4414275 -1 # ID=1_3955|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family +TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1396237 1397416 -1 # ID=1_1280|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5092129 5093323 1 # ID=1_4596|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu +TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5089829 5091956 1 # ID=1_4595|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7301062 7303123 1 # ID=1_6514|Type=CDS|transl_table=11] EF-G: translation elongation factor G +TIGR01701 2.0 1.0 0.6849 0.3526 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2144638 2146918 1 # ID=1_1967|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8342695 8344990 1 # ID=1_7434|Type=CDS|transl_table=11] Fdhalpha-like: oxidoreductase alpha (molybdopterin) subunit +TIGR00212 2.0 1.0 0.3216 0.7947 0.8789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3669716 3670676 -1 # ID=1_3268|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8156603 8157545 -1 # ID=1_7254|Type=CDS|transl_table=11] hemC: hydroxymethylbilane synthase +TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2156336 2157773 -1 # ID=1_1977|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5892974 5894405 -1 # ID=1_5354|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase +TIGR01060 2.0 1.0 0.3455 0.9 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3390540 3391821 -1 # ID=1_3053|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8466853 8468158 -1 # ID=1_7546|Type=CDS|transl_table=11] eno: phosphopyruvate hydratase +TIGR01344 2.0 1.0 0.5307 0.2684 0.4 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1035207 1036800 1 # ID=1_944|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6865735 6867358 -1 # ID=1_6175|Type=CDS|transl_table=11] malate_syn_A: malate synthase A +TIGR01534 3.0 1.0 0.6895 0.6737 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2080142 2081153 -1 # ID=1_1910|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7832789 7834235 -1 # ID=1_6958|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8325356 8326355 -1 # ID=1_7420|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/inst/extdata/sco_gecco.tsv b/inst/extdata/sco_gecco.tsv new file mode 100644 index 0000000..60d5eed --- /dev/null +++ b/inst/extdata/sco_gecco.tsv @@ -0,0 +1,21 @@ +sequence_id bgc_id start end average_p max_p type alkaloid_probability polyketide_probability ripp_probability saccharide_probability terpene_probability nrp_probability other_probability proteins domains +AL645882.2 AL645882.2_cluster_1 103781 121371 0.8192887299726135 0.9994207183607371 Polyketide 0.010000000000000009 0.65 0.0 0.030000000000000027 0.010000000000000009 0.07999999999999996 0.31999999999999995 AL645882.2_97;AL645882.2_98;AL645882.2_99;AL645882.2_100;AL645882.2_101;AL645882.2_102 PF00106;PF00109;PF00550;PF00698;PF00753;PF01370;PF02801;PF07977;PF07993;PF08659;PF13561;PF14765;PF16197;TIGR00128;TIGR01181;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR02813;TIGR02814;TIGR02816;TIGR03131;TIGR03150;TIGR03443;TIGR03466;TIGR03971 +AL645882.2 AL645882.2_cluster_2 168705 177496 0.6591589380928025 0.8501282383918205 Terpene 0.010000000000000009 0.08999999999999997 0.0 0.0 0.87 0.0 0.040000000000000036 AL645882.2_148;AL645882.2_149;AL645882.2_150;AL645882.2_151;AL645882.2_152;AL645882.2_153;AL645882.2_154;AL645882.2_155 PF00348;PF00494;PF00582;PF00890;PF01266;PF01593;PF11066;PF13450;TIGR02730;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03464;TIGR03465;TIGR03467 +AL645882.2 AL645882.2_cluster_3 255311 262319 0.7562788359477977 0.8688657410419955 Unknown 0.0 0.26 0.47 0.0 0.0 0.0 0.27 AL645882.2_231;AL645882.2_232;AL645882.2_233;AL645882.2_234;AL645882.2_235 PF00528;PF00561;PF00975;PF04738;PF05147;PF12146;PF12697;PF14028;TIGR00969;TIGR01581;TIGR01738;TIGR02427;TIGR03056;TIGR03262;TIGR03611;TIGR03695;TIGR03891;TIGR03897 +AL645882.2 AL645882.2_cluster_4 498683 533448 0.7693747042622983 0.9999696830916295 NRP 0.0 0.10999999999999999 0.12 0.030000000000000027 0.020000000000000018 0.7 0.040000000000000036 AL645882.2_440;AL645882.2_441;AL645882.2_442;AL645882.2_443;AL645882.2_444;AL645882.2_445;AL645882.2_446;AL645882.2_447;AL645882.2_448;AL645882.2_449;AL645882.2_450;AL645882.2_451;AL645882.2_452;AL645882.2_453;AL645882.2_454;AL645882.2_455;AL645882.2_456;AL645882.2_457;AL645882.2_458;AL645882.2_459;AL645882.2_460;AL645882.2_461 PF00005;PF00440;PF00501;PF00550;PF00664;PF00668;PF01266;PF01494;PF03621;PF07992;PF09339;PF12802;PF12902;PF13191;PF13193;PF13304;PF13434;PF13450;TIGR00630;TIGR00655;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01318;TIGR01720;TIGR01733;TIGR01734;TIGR01842;TIGR01846;TIGR01923;TIGR01978;TIGR01984;TIGR01988;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02372;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03375;TIGR03384;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03968;TIGR04406;TIGR04439;TIGR04520;TIGR04521 +AL645882.2 AL645882.2_cluster_6 1335695 1361419 0.8473264250182975 0.902810689697336 Polyketide 0.050000000000000044 0.53 0.030000000000000027 0.020000000000000018 0.020000000000000018 0.15000000000000002 0.28 AL645882.2_1225;AL645882.2_1226;AL645882.2_1227;AL645882.2_1228;AL645882.2_1229;AL645882.2_1230;AL645882.2_1231;AL645882.2_1232;AL645882.2_1233;AL645882.2_1234;AL645882.2_1235;AL645882.2_1236;AL645882.2_1237;AL645882.2_1238;AL645882.2_1239;AL645882.2_1240;AL645882.2_1241;AL645882.2_1242;AL645882.2_1243;AL645882.2_1244;AL645882.2_1245;AL645882.2_1246;AL645882.2_1247;AL645882.2_1248;AL645882.2_1249 PF00109;PF00155;PF00202;PF00364;PF00392;PF00550;PF00561;PF00676;PF00890;PF01266;PF01370;PF01494;PF01613;PF01674;PF01946;PF02089;PF02770;PF02775;PF02801;PF03109;PF03364;PF04072;PF04321;PF04820;PF07993;PF08281;PF08541;PF08545;PF10604;PF12697;PF13292;PF13450;PF13460;TIGR00027;TIGR00292;TIGR00508;TIGR00517;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR00747;TIGR00748;TIGR01214;TIGR01265;TIGR01347;TIGR01348;TIGR01746;TIGR01835;TIGR01885;TIGR01982;TIGR02018;TIGR02032;TIGR02296;TIGR02325;TIGR02352;TIGR02404;TIGR02407;TIGR02813;TIGR02937;TIGR02946;TIGR02959;TIGR03150;TIGR03181;TIGR03182;TIGR03197;TIGR03246;TIGR03251;TIGR03338;TIGR03364;TIGR03372;TIGR03443;TIGR03466;TIGR03615;TIGR03695;TIGR03947;TIGR04022;TIGR04544 +AL645882.2 AL645882.2_cluster_7 1998468 2002980 0.8034485206666728 0.9107236204333993 Other 0.030000000000000027 0.020000000000000018 0.0 0.0 0.0 0.0 0.95 AL645882.2_1826;AL645882.2_1827;AL645882.2_1828;AL645882.2_1829;AL645882.2_1830 PF00202;PF00266;PF00583;PF05721;PF06339;PF13508;TIGR00508;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR01762;TIGR01885;TIGR01976;TIGR01977;TIGR02406;TIGR02407;TIGR02408;TIGR03246;TIGR03251;TIGR03372 +AL645882.2 AL645882.2_cluster_8 2931776 2950345 0.7951811973663155 0.9993573020515812 Saccharide 0.0 0.020000000000000018 0.0 0.74 0.020000000000000018 0.050000000000000044 0.18000000000000005 AL645882.2_2651;AL645882.2_2652;AL645882.2_2653;AL645882.2_2654;AL645882.2_2655;AL645882.2_2656;AL645882.2_2657;AL645882.2_2658;AL645882.2_2659;AL645882.2_2660;AL645882.2_2661;AL645882.2_2662;AL645882.2_2663;AL645882.2_2664;AL645882.2_2665;AL645882.2_2666;AL645882.2_2667;AL645882.2_2668;AL645882.2_2669 PF00264;PF00383;PF00389;PF00400;PF00534;PF00535;PF02397;PF02668;PF02826;PF03777;PF06236;PF07690;PF12832;PF12894;PF13439;PF13477;PF13506;PF13524;PF13579;PF13632;PF13641;PF13692;PF13727;PF14437;TIGR00227;TIGR00326;TIGR00900;TIGR01327;TIGR01508;TIGR02095;TIGR02149;TIGR03013;TIGR03022;TIGR03023;TIGR03025;TIGR03030;TIGR03087;TIGR03088;TIGR03449;TIGR03469;TIGR03937;TIGR03946;TIGR03965;TIGR03999;TIGR04047;TIGR04063;TIGR04157 +AL645882.2 AL645882.2_cluster_9 3032065 3040682 0.7962707288747192 0.9058104647132605 Other 0.010000000000000009 0.24 0.010000000000000009 0.0 0.030000000000000027 0.020000000000000018 0.7 AL645882.2_2741;AL645882.2_2742;AL645882.2_2743;AL645882.2_2744;AL645882.2_2745;AL645882.2_2746;AL645882.2_2747 PF00266;PF00282;PF00441;PF02770;PF02771;PF04183;PF04954;PF05889;PF06276;PF08021;PF08028;PF13434;PF13523;PF13738;TIGR03203;TIGR03204;TIGR03207;TIGR03799;TIGR03811;TIGR03812;TIGR04022;TIGR04046;TIGR04431;TIGR04439 +AL645882.2 AL645882.2_cluster_10 3524828 3602320 0.752421552194178 0.9999999998258269 NRP 0.0 0.19499999999999995 0.0 0.010000000000000009 0.0 0.97 0.0 AL645882.2_3170;AL645882.2_3171;AL645882.2_3172;AL645882.2_3173;AL645882.2_3174;AL645882.2_3175;AL645882.2_3176;AL645882.2_3177;AL645882.2_3178;AL645882.2_3179;AL645882.2_3180;AL645882.2_3181;AL645882.2_3182;AL645882.2_3183;AL645882.2_3184;AL645882.2_3185;AL645882.2_3186;AL645882.2_3187;AL645882.2_3188;AL645882.2_3189;AL645882.2_3190;AL645882.2_3191;AL645882.2_3192;AL645882.2_3193;AL645882.2_3194;AL645882.2_3195;AL645882.2_3196;AL645882.2_3197;AL645882.2_3198;AL645882.2_3199;AL645882.2_3200;AL645882.2_3201;AL645882.2_3202;AL645882.2_3203;AL645882.2_3204 PF00005;PF00072;PF00109;PF00122;PF00155;PF00196;PF00441;PF00486;PF00501;PF00550;PF00561;PF00664;PF00668;PF00702;PF00903;PF00931;PF00975;PF01026;PF01040;PF01070;PF01261;PF01266;PF01494;PF01636;PF01663;PF02153;PF02668;PF02770;PF02801;PF03403;PF03621;PF03704;PF07730;PF07994;PF08241;PF08541;PF08545;PF09056;PF12146;PF12679;PF12697;PF12730;PF12897;PF13193;PF13304;PF13450;PF13489;PF13649;PF13669;PF14696;TIGR00010;TIGR00517;TIGR00747;TIGR00748;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01106;TIGR01116;TIGR01140;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01249;TIGR01257;TIGR01263;TIGR01264;TIGR01265;TIGR01271;TIGR01277;TIGR01288;TIGR01387;TIGR01473;TIGR01474;TIGR01476;TIGR01494;TIGR01497;TIGR01511;TIGR01512;TIGR01517;TIGR01522;TIGR01523;TIGR01524;TIGR01525;TIGR01647;TIGR01657;TIGR01720;TIGR01733;TIGR01734;TIGR01738;TIGR01818;TIGR01835;TIGR01842;TIGR01846;TIGR01923;TIGR01934;TIGR01978;TIGR01984;TIGR01988;TIGR02032;TIGR02056;TIGR02142;TIGR02151;TIGR02154;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02335;TIGR02372;TIGR02427;TIGR02633;TIGR02673;TIGR02708;TIGR02769;TIGR02770;TIGR02813;TIGR02857;TIGR02868;TIGR02875;TIGR02915;TIGR02956;TIGR02982;TIGR03005;TIGR03020;TIGR03056;TIGR03081;TIGR03098;TIGR03150;TIGR03197;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03343;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03467;TIGR03522;TIGR03540;TIGR03541;TIGR03608;TIGR03611;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03946;TIGR03947;TIGR03966;TIGR04406;TIGR04520;TIGR04521;TIGR04544 +AL645882.2 AL645882.2_cluster_11 5515246 5536994 0.7130191148104835 0.868896297725067 Polyketide 0.020000000000000018 0.89 0.030000000000000027 0.07999999999999996 0.020000000000000018 0.020000000000000018 0.050000000000000044 AL645882.2_5009;AL645882.2_5010;AL645882.2_5011;AL645882.2_5012;AL645882.2_5013;AL645882.2_5014;AL645882.2_5015;AL645882.2_5016;AL645882.2_5017;AL645882.2_5018;AL645882.2_5019;AL645882.2_5020;AL645882.2_5021;AL645882.2_5022;AL645882.2_5023;AL645882.2_5024;AL645882.2_5025;AL645882.2_5026;AL645882.2_5027;AL645882.2_5028;AL645882.2_5029;AL645882.2_5030;AL645882.2_5031 PF00106;PF00107;PF00109;PF00440;PF00486;PF00550;PF00753;PF01243;PF01370;PF01381;PF01613;PF02801;PF02909;PF03364;PF03704;PF03848;PF03992;PF04978;PF05175;PF05368;PF05724;PF07690;PF07883;PF08028;PF08240;PF08241;PF08242;PF08659;PF10604;PF12349;PF12844;PF13443;PF13460;PF13489;PF13561;PF13602;PF13649;PF13847;TIGR00477;TIGR00517;TIGR00692;TIGR00710;TIGR00711;TIGR00833;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00916;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01963;TIGR02296;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02818;TIGR02823;TIGR02824;TIGR02825;TIGR03070;TIGR03150;TIGR03201;TIGR03206;TIGR03325;TIGR03366;TIGR03451;TIGR03466;TIGR03480;TIGR03534;TIGR03615;TIGR03618;TIGR03668;TIGR03971;TIGR03989;TIGR04022;TIGR04023;TIGR04316;TIGR04504;TIGR04558 +AL645882.2 AL645882.2_cluster_12 5785753 5791297 0.5764920236167602 0.6184351199586162 Polyketide 0.0 0.91 0.0 0.0 0.020000000000000018 0.010000000000000009 0.06000000000000005 AL645882.2_5252;AL645882.2_5253;AL645882.2_5254;AL645882.2_5255;AL645882.2_5256;AL645882.2_5257;AL645882.2_5258 PF00109;PF00550;PF02311;PF02801;PF03364;PF03992;PF04486;PF04673;PF07883;PF10604;TIGR01930;TIGR02813;TIGR03150;TIGR03214 +AL645882.2 AL645882.2_cluster_13 6432593 6467702 0.909289567375217 0.9999999584431769 Polyketide 0.020000000000000018 0.76 0.020000000000000018 0.010000000000000009 0.0 0.45999999999999996 0.10999999999999999 AL645882.2_5815;AL645882.2_5816;AL645882.2_5817;AL645882.2_5818;AL645882.2_5819;AL645882.2_5820;AL645882.2_5821;AL645882.2_5822;AL645882.2_5823;AL645882.2_5824;AL645882.2_5825;AL645882.2_5826;AL645882.2_5827;AL645882.2_5828;AL645882.2_5829;AL645882.2_5830;AL645882.2_5831;AL645882.2_5832;AL645882.2_5833;AL645882.2_5834;AL645882.2_5835;AL645882.2_5836;AL645882.2_5837;AL645882.2_5838;AL645882.2_5839 PF00108;PF00109;PF00155;PF00196;PF00355;PF00441;PF00486;PF00501;PF00550;PF00698;PF00891;PF00975;PF01053;PF01073;PF01222;PF01326;PF01370;PF02353;PF02544;PF02770;PF02771;PF02801;PF03704;PF04191;PF04321;PF05368;PF05401;PF07993;PF08028;PF08241;PF08242;PF08281;PF08541;PF08545;PF11639;PF12697;PF13193;PF13460;PF13489;PF13520;PF13649;PF13847;PF16197;PF16363;PF17837;TIGR00128;TIGR00517;TIGR00536;TIGR00747;TIGR00748;TIGR00858;TIGR01179;TIGR01181;TIGR01214;TIGR01733;TIGR01734;TIGR01746;TIGR01777;TIGR01821;TIGR01822;TIGR01825;TIGR01923;TIGR01930;TIGR01983;TIGR02072;TIGR02188;TIGR02197;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR02813;TIGR02937;TIGR03020;TIGR03056;TIGR03098;TIGR03131;TIGR03150;TIGR03203;TIGR03204;TIGR03205;TIGR03207;TIGR03208;TIGR03443;TIGR03466;TIGR03533;TIGR03534;TIGR03541;TIGR03589;TIGR04022;TIGR04180;TIGR04543 +AL645882.2 AL645882.2_cluster_14 6847315 6863275 0.739858389200434 0.9589701630281311 Polyketide 0.0 0.62 0.09999999999999998 0.020000000000000018 0.030000000000000027 0.030000000000000027 0.21999999999999997 AL645882.2_6167;AL645882.2_6168;AL645882.2_6169;AL645882.2_6170;AL645882.2_6171;AL645882.2_6172;AL645882.2_6173;AL645882.2_6174;AL645882.2_6175;AL645882.2_6176;AL645882.2_6177;AL645882.2_6178;AL645882.2_6179;AL645882.2_6180 PF00150;PF00356;PF00528;PF00532;PF01381;PF01547;PF04183;PF04542;PF06276;PF07398;PF08281;PF11716;PF12680;PF13377;PF13416;PF13581;PF19054;TIGR00969;TIGR01481;TIGR01581;TIGR02139;TIGR02140;TIGR02141;TIGR02405;TIGR02417;TIGR02937;TIGR02939;TIGR02947;TIGR02948;TIGR02957;TIGR03070;TIGR03083;TIGR03086;TIGR03226;TIGR03262;TIGR03850 +AL645882.2 AL645882.2_cluster_15 6889594 6948414 0.8739774761888223 0.9999999998409312 Polyketide 0.0 0.99 0.010000000000000009 0.040000000000000036 0.0 0.06000000000000005 0.0 AL645882.2_6205;AL645882.2_6206;AL645882.2_6207;AL645882.2_6208;AL645882.2_6209;AL645882.2_6210;AL645882.2_6211;AL645882.2_6212;AL645882.2_6213;AL645882.2_6214;AL645882.2_6215;AL645882.2_6216;AL645882.2_6217;AL645882.2_6218;AL645882.2_6219;AL645882.2_6220;AL645882.2_6221;AL645882.2_6222;AL645882.2_6223;AL645882.2_6224;AL645882.2_6225;AL645882.2_6226;AL645882.2_6227;AL645882.2_6228;AL645882.2_6229 PF00106;PF00108;PF00109;PF00202;PF00364;PF00440;PF00486;PF00550;PF00561;PF00698;PF00975;PF01039;PF01370;PF01494;PF01565;PF02775;PF02786;PF02801;PF03704;PF03756;PF05368;PF07690;PF07730;PF07993;PF08031;PF08659;PF08990;PF12697;PF12831;PF13460;PF13561;PF13581;PF14765;PF16197;PF17147;TIGR00128;TIGR00508;TIGR00513;TIGR00515;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00710;TIGR00711;TIGR00713;TIGR00880;TIGR00881;TIGR00893;TIGR00895;TIGR00898;TIGR00900;TIGR01108;TIGR01117;TIGR01249;TIGR01500;TIGR01738;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01885;TIGR01930;TIGR01963;TIGR02407;TIGR02415;TIGR02427;TIGR02430;TIGR02632;TIGR02685;TIGR02813;TIGR03056;TIGR03131;TIGR03133;TIGR03134;TIGR03150;TIGR03206;TIGR03246;TIGR03251;TIGR03297;TIGR03325;TIGR03343;TIGR03372;TIGR03384;TIGR03443;TIGR03466;TIGR03611;TIGR03613;TIGR03649;TIGR03695;TIGR03968;TIGR03971;TIGR04316;TIGR04504 +AL645882.2 AL645882.2_cluster_16 7106284 7117874 0.7837623334517632 0.9998563052677049 NRP 0.010000000000000009 0.030000000000000027 0.0 0.010000000000000009 0.0 0.92 0.06000000000000005 AL645882.2_6364;AL645882.2_6365;AL645882.2_6366;AL645882.2_6367;AL645882.2_6368 PF00501;PF00550;PF00668;PF00975;PF05899;PF05977;PF07690;PF12697;PF13193;PF13434;TIGR00900;TIGR01733;TIGR01734;TIGR01738;TIGR01923;TIGR02188;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR03098;TIGR03205;TIGR03208;TIGR03443;TIGR04439 +AL645882.2 AL645882.2_cluster_17 7516017 7523399 0.939298768070374 0.9999997444668459 Terpene 0.010000000000000009 0.030000000000000027 0.010000000000000009 0.0 0.9 0.0 0.050000000000000044 AL645882.2_6688;AL645882.2_6689;AL645882.2_6690;AL645882.2_6691;AL645882.2_6692;AL645882.2_6693;AL645882.2_6694 PF00348;PF00432;PF00494;PF00890;PF01048;PF01266;PF01593;PF07992;PF12831;PF13243;PF13249;PF13450;TIGR01507;TIGR01559;TIGR01787;TIGR02731;TIGR02732;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03197;TIGR03463;TIGR03464;TIGR03465;TIGR03467;TIGR03468;TIGR04277 +AL645882.2 AL645882.2_cluster_18 7586410 7601569 0.832626210768822 0.9983263560779447 Polyketide 0.0 0.92 0.0 0.0 0.020000000000000018 0.030000000000000027 0.050000000000000044 AL645882.2_6750;AL645882.2_6751;AL645882.2_6752;AL645882.2_6753;AL645882.2_6754;AL645882.2_6755;AL645882.2_6756;AL645882.2_6757 PF00083;PF00106;PF00107;PF00109;PF00550;PF00698;PF01370;PF02775;PF02801;PF05977;PF07690;PF07992;PF08240;PF08541;PF08659;PF09335;PF12832;PF12840;PF13460;PF13561;PF13602;PF13738;PF14765;PF16197;TIGR00128;TIGR00710;TIGR00711;TIGR00747;TIGR00879;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00898;TIGR00900;TIGR01289;TIGR01299;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01930;TIGR01963;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02823;TIGR02824;TIGR02825;TIGR03131;TIGR03150;TIGR03206;TIGR03297;TIGR03325;TIGR03845;TIGR03971;TIGR04316;TIGR04504 +AL645882.2 AL645882.2_cluster_19 7660990 7703887 0.8723160842685086 0.9884977283394043 Unknown 0.0024999999999999467 0.16000000000000003 0.31000000000000005 0.0 0.030000000000000027 0.06999999999999995 0.4375 AL645882.2_6824;AL645882.2_6825;AL645882.2_6826;AL645882.2_6827;AL645882.2_6828;AL645882.2_6829;AL645882.2_6830;AL645882.2_6831;AL645882.2_6832;AL645882.2_6833;AL645882.2_6834;AL645882.2_6835;AL645882.2_6836;AL645882.2_6837;AL645882.2_6838;AL645882.2_6839;AL645882.2_6840;AL645882.2_6841;AL645882.2_6842;AL645882.2_6843;AL645882.2_6844;AL645882.2_6845;AL645882.2_6846;AL645882.2_6847;AL645882.2_6848;AL645882.2_6849;AL645882.2_6850;AL645882.2_6851;AL645882.2_6852;AL645882.2_6853;AL645882.2_6854;AL645882.2_6855;AL645882.2_6856;AL645882.2_6857;AL645882.2_6858;AL645882.2_6859;AL645882.2_6860;AL645882.2_6861;AL645882.2_6862;AL645882.2_6863;AL645882.2_6864;AL645882.2_6865 PF00196;PF00441;PF00702;PF01071;PF01135;PF01609;PF02467;PF02655;PF02770;PF02771;PF02786;PF03432;PF04738;PF05147;PF05713;PF07690;PF08028;PF13340;PF13535;PF13586;PF13620;PF13649;PF13847;PF14028;PF15632;PF18130;PF18603;TIGR00080;TIGR00768;TIGR00900;TIGR01142;TIGR02144;TIGR02469;TIGR02752;TIGR03203;TIGR03204;TIGR03207;TIGR03891;TIGR03909;TIGR04022;TIGR04188;TIGR04364 +AL645882.2 AL645882.2_cluster_20 8258333 8283623 0.8350377509828413 0.8974035790126855 RiPP 0.020000000000000018 0.06999999999999995 0.55 0.10999999999999999 0.030000000000000027 0.050000000000000044 0.18999999999999995 AL645882.2_7365;AL645882.2_7366;AL645882.2_7367;AL645882.2_7368;AL645882.2_7369;AL645882.2_7370;AL645882.2_7371;AL645882.2_7372;AL645882.2_7373;AL645882.2_7374;AL645882.2_7375;AL645882.2_7376;AL645882.2_7377;AL645882.2_7378;AL645882.2_7379;AL645882.2_7380;AL645882.2_7381;AL645882.2_7382;AL645882.2_7383;AL645882.2_7384;AL645882.2_7385;AL645882.2_7386;AL645882.2_7387;AL645882.2_7388;AL645882.2_7389;AL645882.2_7390 PF00005;PF00009;PF00067;PF00089;PF00501;PF00583;PF00743;PF00857;PF00891;PF00989;PF01925;PF03029;PF03259;PF03992;PF04203;PF04486;PF05175;PF05331;PF07992;PF08241;PF08242;PF08448;PF11991;PF13426;PF13434;PF13450;PF13489;PF13581;PF13649;PF13738;PF13847;PF14535;PF16864;TIGR00229;TIGR00231;TIGR00955;TIGR00956;TIGR00958;TIGR00968;TIGR00972;TIGR01076;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01842;TIGR01846;TIGR01978;TIGR01983;TIGR02142;TIGR02155;TIGR02203;TIGR02204;TIGR02211;TIGR02314;TIGR02315;TIGR02323;TIGR02324;TIGR02633;TIGR02673;TIGR02716;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03258;TIGR03265;TIGR03269;TIGR03335;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03429;TIGR03522;TIGR03608;TIGR03614;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR04018;TIGR04046;TIGR04406;TIGR04520;TIGR04521;TIGR04538;TIGR04543 +AL645882.2 AL645882.2_cluster_21 8493549 8542072 0.912955287850247 0.9999999998816349 NRP 0.010000000000000009 0.15000000000000002 0.06999999999999995 0.020000000000000018 0.040000000000000036 0.74 0.09999999999999998 AL645882.2_7588;AL645882.2_7589;AL645882.2_7590;AL645882.2_7591;AL645882.2_7592;AL645882.2_7593;AL645882.2_7594;AL645882.2_7595;AL645882.2_7596;AL645882.2_7597;AL645882.2_7598;AL645882.2_7599;AL645882.2_7600;AL645882.2_7601;AL645882.2_7602;AL645882.2_7603;AL645882.2_7604;AL645882.2_7605;AL645882.2_7606;AL645882.2_7607;AL645882.2_7608;AL645882.2_7609;AL645882.2_7610;AL645882.2_7611;AL645882.2_7612;AL645882.2_7613;AL645882.2_7614;AL645882.2_7615;AL645882.2_7616;AL645882.2_7617;AL645882.2_7618;AL645882.2_7619;AL645882.2_7620;AL645882.2_7621;AL645882.2_7622;AL645882.2_7623 PF00005;PF00027;PF00067;PF00106;PF00195;PF00376;PF00392;PF00425;PF00440;PF00496;PF00501;PF00528;PF00550;PF00664;PF00668;PF00890;PF00903;PF00975;PF01040;PF01266;PF01370;PF01408;PF01494;PF02353;PF02463;PF02797;PF02909;PF03435;PF04140;PF04191;PF05834;PF06902;PF07690;PF07729;PF07992;PF08241;PF08242;PF08392;PF08541;PF12697;PF12802;PF12831;PF13191;PF13193;PF13370;PF13401;PF13411;PF13412;PF13459;PF13460;PF13489;PF13561;PF13649;PF13847;PF18563;PF19086;TIGR00543;TIGR00553;TIGR00564;TIGR00565;TIGR00630;TIGR00747;TIGR00896;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01289;TIGR01292;TIGR01733;TIGR01734;TIGR01761;TIGR01815;TIGR01820;TIGR01823;TIGR01824;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01842;TIGR01846;TIGR01923;TIGR01963;TIGR01978;TIGR01988;TIGR02018;TIGR02023;TIGR02032;TIGR02043;TIGR02044;TIGR02047;TIGR02051;TIGR02054;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02294;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02325;TIGR02372;TIGR02404;TIGR02415;TIGR02469;TIGR02632;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02789;TIGR02790;TIGR02812;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03206;TIGR03208;TIGR03258;TIGR03265;TIGR03269;TIGR03338;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03494;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03971;TIGR04028;TIGR04316;TIGR04406;TIGR04458;TIGR04515;TIGR04520;TIGR04521;TIGR04538 diff --git a/inst/extdata/sco_knownhits.tsv b/inst/extdata/sco_knownhits.tsv new file mode 100644 index 0000000..422e5f6 --- /dev/null +++ b/inst/extdata/sco_knownhits.tsv @@ -0,0 +1,48 @@ +#Model Description Sequence id evalue bitscore Sequence description +RF0002 AAC3 1890 3.6e-54 182.5 lcl|1890|scaffold_1|source|scaffold_1|loc|2059303_2060092_1 +RF0007 ABC_efflux 2723 4.8e-170 565.4 lcl|2723|scaffold_1|source|scaffold_1|loc|3010976_3014708_-1 +RF0007 ABC_efflux 2422 4.8e-95 318.0 lcl|2422|scaffold_1|source|scaffold_1|loc|2651102_2653031_1 +RF0007 ABC_efflux 1101 8.7e-81 270.9 lcl|1101|scaffold_1|source|scaffold_1|loc|1202479_1204282_-1 +RF0007 ABC_efflux 6925 2e-80 269.8 lcl|6925|scaffold_1|source|scaffold_1|loc|7782654_7784535_1 +RF0007 ABC_efflux 659 4.1e-74 248.9 lcl|659|scaffold_1|source|scaffold_1|loc|740313_742083_-1 +RF0051 Chlor_Efflux_Pump 7569 1.3e-124 415.2 lcl|7569|scaffold_1|source|scaffold_1|loc|8488517_8489696_1 +RF0051 Chlor_Efflux_Pump 7435 5.2e-112 373.7 lcl|7435|scaffold_1|source|scaffold_1|loc|8345037_8346285_1 +RF0054 ClassB 5022 7.4e-26 89.8 lcl|5022|scaffold_1|source|scaffold_1|loc|5533652_5534546_1 +RF0154 vanR 3534 6e-82 273.4 lcl|3534|scaffold_1|source|scaffold_1|loc|3967921_3968617_-1 +RF0155 vanS 3533 3e-88 295.1 lcl|3533|scaffold_1|source|scaffold_1|loc|3966834_3967929_-1 +RF0158 vanX 3540 4e-98 325.8 lcl|3540|scaffold_1|source|scaffold_1|loc|3973353_3973962_1 +PF00044.19 Gp_dh_N 1910 2.1e-61 205.4 lcl|1910|scaffold_1|source|scaffold_1|loc|2080142_2081153_-1 +PF00044.19 Gp_dh_N 7420 1.6e-53 179.9 lcl|7420|scaffold_1|source|scaffold_1|loc|8325356_8326355_-1 +PF00044.19 Gp_dh_N 6958 4.2e-39 133.0 lcl|6958|scaffold_1|source|scaffold_1|loc|7832789_7834235_-1 +PF00183.13 HSP90 7425 1e-116 389.6 lcl|7425|scaffold_1|source|scaffold_1|loc|8329971_8331888_1 +PF00183.13 HSP90 1365 3.8e-07 28.0 lcl|1365|scaffold_1|source|scaffold_1|loc|1494023_1495871_-1 +PF00185.19 OTCace 5905 3.9e-47 159.2 lcl|5905|scaffold_1|source|scaffold_1|loc|6550398_6551406_1 +PF00185.19 OTCace 1447 5.1e-37 126.3 lcl|1447|scaffold_1|source|scaffold_1|loc|1590406_1591387_-1 +PF00204.20 DNA_gyraseB 3818 2.4e-61 205.0 lcl|3818|scaffold_1|source|scaffold_1|loc|4263377_4265462_-1 +PF00204.20 DNA_gyraseB 5753 1.3e-50 170.1 lcl|5753|scaffold_1|source|scaffold_1|loc|6371005_6373129_1 +PF00227.21 Proteasome 1605 2e-38 130.7 lcl|1605|scaffold_1|source|scaffold_1|loc|1758474_1759251_-1 +PF00227.21 Proteasome 1604 1.7e-26 91.8 lcl|1604|scaffold_1|source|scaffold_1|loc|1757648_1758377_-1 +PF00364.17 Biotin_lipoyl 2144 9.1e-46 152.5 lcl|2144|scaffold_1|source|scaffold_1|loc|2345795_2347568_1 +PF00364.17 Biotin_lipoyl 3758 3.8e-23 80.0 lcl|3758|scaffold_1|source|scaffold_1|loc|4193531_4194941_-1 +PF00364.17 Biotin_lipoyl 7037 8.6e-23 78.9 lcl|7037|scaffold_1|source|scaffold_1|loc|7913373_7914627_-1 +PF00364.17 Biotin_lipoyl 2737 8.4e-20 69.3 lcl|2737|scaffold_1|source|scaffold_1|loc|3029141_3031109_1 +PF00364.17 Biotin_lipoyl 3773 5.7e-18 63.4 lcl|3773|scaffold_1|source|scaffold_1|loc|4210795_4212271_-1 +PF00364.17 Biotin_lipoyl 4851 7.4e-17 59.9 lcl|4851|scaffold_1|source|scaffold_1|loc|5355282_5357055_-1 +PF00364.17 Biotin_lipoyl 6203 7.4e-17 59.9 lcl|6203|scaffold_1|source|scaffold_1|loc|6897088_6898861_-1 +PF00364.17 Biotin_lipoyl 505 4.9e-15 54.0 lcl|505|scaffold_1|source|scaffold_1|loc|583522_586897_-1 +PF00364.17 Biotin_lipoyl 4318 1.6e-14 52.4 lcl|4318|scaffold_1|source|scaffold_1|loc|4796696_4798541_1 +PF00364.17 Biotin_lipoyl 1227 7.8e-09 34.2 lcl|1227|scaffold_1|source|scaffold_1|loc|1338247_1339366_-1 +PF00364.17 Biotin_lipoyl 715 4.1e-06 25.4 lcl|715|scaffold_1|source|scaffold_1|loc|796916_797723_1 +PF00364.17 Biotin_lipoyl 5402 2.1e-05 23.2 lcl|5402|scaffold_1|source|scaffold_1|loc|5957223_5957601_-1 +PF00521.15 DNA_topoisoIV 3817 3e-148 493.3 lcl|3817|scaffold_1|source|scaffold_1|loc|4260740_4263335_-1 +PF00521.15 DNA_topoisoIV 5767 7.4e-147 488.7 lcl|5767|scaffold_1|source|scaffold_1|loc|6386423_6388880_-1 +PF01039.17 Carboxyl_trans 5466 1.6e-201 669.0 lcl|5466|scaffold_1|source|scaffold_1|loc|6031664_6033248_1 +PF01039.17 Carboxyl_trans 4856 1.2e-199 662.9 lcl|4856|scaffold_1|source|scaffold_1|loc|5359017_5360610_-1 +PF01039.17 Carboxyl_trans 6216 2e-191 635.7 lcl|6216|scaffold_1|source|scaffold_1|loc|6943672_6945265_1 +PF01039.17 Carboxyl_trans 2736 3.3e-164 546.0 lcl|2736|scaffold_1|source|scaffold_1|loc|3027513_3029130_1 +PF01039.17 Carboxyl_trans 4317 6.6e-139 462.5 lcl|4317|scaffold_1|source|scaffold_1|loc|4795084_4796683_1 +PF01039.17 Carboxyl_trans 2403 2.8e-27 94.4 lcl|2403|scaffold_1|source|scaffold_1|loc|2624025_2625402_1 +PF13599.1 Pentapeptide_4 4206 2.2e-18 64.9 lcl|4206|scaffold_1|source|scaffold_1|loc|4684242_4684947_1 +TIGR02013 TIGR02013 4588 0 1814.6 lcl|4588|scaffold_1|source|scaffold_1|loc|5078060_5081546_1 +TIGR00663 TIGR00663 3822 9e-90 300.1 lcl|3822|scaffold_1|source|scaffold_1|loc|4268712_4269843_-1 +TIGR00663 TIGR00663 7877 6.8e-75 251.1 lcl|7877|scaffold_2|source|scaffold_2|loc|112311_113430_1 diff --git a/inst/extdata/sco_prism.json.REMOVED.git-id b/inst/extdata/sco_prism.json.REMOVED.git-id new file mode 100644 index 0000000..5ddd7e1 --- /dev/null +++ b/inst/extdata/sco_prism.json.REMOVED.git-id @@ -0,0 +1 @@ +ebe4530db1e6b558531c87481cc34f3348903515 \ No newline at end of file diff --git a/inst/extdata/sco_rre.txt b/inst/extdata/sco_rre.txt new file mode 100644 index 0000000..496d413 --- /dev/null +++ b/inst/extdata/sco_rre.txt @@ -0,0 +1,3 @@ +Gene name BGC ID BGC product Domain name E-value Bitscore Start End +NC_003888.3__256525-259687__SCO0269 N\A N\A Lanthipeptide_RRE 1.1999999999999999e-11 43.9 159 240 +NC_003888.3__7696261-7699360__SCO6930 N\A N\A Lanthipeptide_RRE 2.7e-20 71.5 160 253 diff --git a/inst/extdata/sco_sempi.csv b/inst/extdata/sco_sempi.csv new file mode 100644 index 0000000..4da5344 --- /dev/null +++ b/inst/extdata/sco_sempi.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type" +1,106723,110434,"pks" +2,307598,308816,"nrps" +3,513997,524488,"nrps" +4,1405117,1405750,"nrps" +5,1477976,1479275,"nrps" +6,2290771,2292100,"nrps" +7,2559357,2561673,"pks" +8,2622623,2623751,"nrps" +9,2762807,2764220,"nrps" +10,2963180,2964527,"nrps" +11,3328396,3329098,"nrps" +12,3543364,3584771,"nrps" +13,3797561,3798752,"nrps" +14,3941523,3942822,"nrps" +15,4398632,4399859,"nrps" +16,4799973,4801182,"nrps" +17,4923207,4924557,"nrps" +18,5531212,5532682,"pks" +19,5786632,5788168,"pks" +20,6447994,6454855,"nrps-pks" +21,6558978,6560136,"nrps" +22,6804366,6807194,"nrps" +23,6901254,6931905,"pks" +24,7004464,7004725,"nrps" +25,7108290,7116050,"nrps" +26,7249252,7250602,"nrps" +27,7549538,7550897,"nrps" +28,7591514,7598516,"pks" +29,7734541,7735729,"nrps" +30,8053551,8054721,"nrps" +31,8140076,8141438,"nrps" +32,8282564,8283500,"nrps" +33,8504751,8523677,"nrps" diff --git a/inst/golem-config.yml b/inst/golem-config.yml new file mode 100644 index 0000000..76bdff6 --- /dev/null +++ b/inst/golem-config.yml @@ -0,0 +1,8 @@ +default: + golem_name: BGCViz + golem_version: 0.0.0.9000 + app_prod: no +production: + app_prod: yes +dev: + golem_wd: !expr here::here() diff --git a/inst/scripts/group.py b/inst/scripts/group.py new file mode 100644 index 0000000..f702aa7 --- /dev/null +++ b/inst/scripts/group.py @@ -0,0 +1,95 @@ +from Bio import SeqIO +import sys +import os +import pandas as pd + + +def write_gbs(group_by, data, label, seq_file): + for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): + start = [] + stop = [] + list_l = row[label].split(",") + for i in range(len(list_l)): + list_l[i] = int(list_l[i]) + start.append(data[list_l[i] == data['Cluster']].Start.item()) + stop.append(data[list_l[i] == data['Cluster']].Stop.item()) + group = group_by.Group[index] + if os.path.isdir(group): + pass + else: + os.mkdir(group) + file = SeqIO.parse(open(seq_file), "genbank") + print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) + for record in file: + loci = [feat for feat in record.features if feat.type == "CDS"] + start_new = int(start[i]) + end_new = int(stop[i]) + subrecord = record[start_new:end_new] + annotation={"molecule_type":"DNA"} + subrecord.annotations = annotation + SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") + +def main(): + group_by = pd.read_csv("group_by.csv", dtype = str) + seq_file = sys.argv[1] + + print("Searching for antismash files...") + if os.path.exists("antismash_biocircos.csv"): + print("Found!") + data = pd.read_csv("antismash_biocircos.csv") + label = "Antismash" + write_gbs(group_by, data, label, seq_file) + + print("Searching for deepbcg files...") + if os.path.exists("deepbgc_biocircos.csv"): + print("Found!") + data = pd.read_csv("deepbgc_biocircos.csv") + label = "DeepBGC" + write_gbs(group_by, data, label, seq_file) + + print("Searching for prism files...") + if os.path.exists("prism_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_biocircos.csv") + label = "PRISM" + write_gbs(group_by, data, label, seq_file) + + print("Searching for rre-finder files...") + if os.path.exists("rre_biocircos.csv"): + print("Found!") + data = pd.read_csv("rre_biocircos.csv") + label = "RRE-Finder" + write_gbs(group_by, data, label, seq_file) + + print("Searching for sempi files...") + if os.path.exists("sempi_biocircos.csv"): + print("Found!") + data = pd.read_csv("sempi_biocircos.csv") + label = "SEMPI" + write_gbs(group_by, data, label, seq_file) + + print("Searching for ARTS files...") + if os.path.exists("arts_biocircos.csv"): + print("Found!") + data = pd.read_csv("arts_biocircos.csv") + label = "ARTS" + write_gbs(group_by, data, label, seq_file) + + print("Searching for PRISM supplement files...") + if os.path.exists("prism_supp_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_supp_biocircos.csv") + label = "PRISM-supp" + write_gbs(group_by, data, label, seq_file) + + print("Searching for GECCO files...") + if os.path.exists("gecco_biocircos.csv"): + print("Found!") + data = pd.read_csv("gecco_biocircos.csv") + label = "GECCO" + write_gbs(group_by, data, label, seq_file) + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/man/pipe.Rd b/man/pipe.Rd new file mode 100644 index 0000000..1f8f237 --- /dev/null +++ b/man/pipe.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils-pipe.R +\name{\%>\%} +\alias{\%>\%} +\title{Pipe operator} +\usage{ +lhs \%>\% rhs +} +\arguments{ +\item{lhs}{A value or the magrittr placeholder.} + +\item{rhs}{A function call using the magrittr semantics.} +} +\value{ +The result of calling `rhs(lhs)`. +} +\description{ +See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. +} +\keyword{internal} diff --git a/man/run_app.Rd b/man/run_app.Rd new file mode 100644 index 0000000..6be75ea --- /dev/null +++ b/man/run_app.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/run_app.R +\name{run_app} +\alias{run_app} +\title{Run the Shiny Application} +\usage{ +run_app( + onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ... +) +} +\arguments{ +\item{onStart}{A function that will be called before the app is actually run. +This is only needed for \code{shinyAppObj}, since in the \code{shinyAppDir} +case, a \code{global.R} file can be used for this purpose.} + +\item{options}{Named options that should be passed to the \code{runApp} call +(these can be any of the following: "port", "launch.browser", "host", "quiet", +"display.mode" and "test.mode"). You can also specify \code{width} and +\code{height} parameters which provide a hint to the embedding environment +about the ideal height/width for the app.} + +\item{enableBookmarking}{Can be one of \code{"url"}, \code{"server"}, or +\code{"disable"}. The default value, \code{NULL}, will respect the setting from +any previous calls to \code{\link[shiny:enableBookmarking]{enableBookmarking()}}. See \code{\link[shiny:enableBookmarking]{enableBookmarking()}} +for more information on bookmarking your app.} + +\item{uiPattern}{A regular expression that will be applied to each \code{GET} +request to determine whether the \code{ui} should be used to handle the +request. Note that the entire request path must match the regular +expression in order for the match to be considered successful.} + +\item{...}{arguments to pass to golem_opts. +See `?golem::get_golem_options` for more details.} +} +\description{ +Run the Shiny Application +} diff --git a/tests/spelling.R b/tests/spelling.R new file mode 100644 index 0000000..6713838 --- /dev/null +++ b/tests/spelling.R @@ -0,0 +1,3 @@ +if(requireNamespace('spelling', quietly = TRUE)) + spelling::spell_check_test(vignettes = TRUE, error = FALSE, + skip_on_cran = TRUE) diff --git a/tests/testthat.R b/tests/testthat.R new file mode 100644 index 0000000..7275521 --- /dev/null +++ b/tests/testthat.R @@ -0,0 +1,4 @@ +library(testthat) +library(BGCViz) + +test_check("BGCViz") diff --git a/tests/testthat/test-app.R b/tests/testthat/test-app.R new file mode 100644 index 0000000..8849056 --- /dev/null +++ b/tests/testthat/test-app.R @@ -0,0 +1,3 @@ +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R new file mode 100644 index 0000000..3d5aeaf --- /dev/null +++ b/tests/testthat/test-golem-recommended.R @@ -0,0 +1,26 @@ +test_that("app ui", { + ui <- app_ui() + golem::expect_shinytaglist(ui) + # Check that formals have not been removed + fmls <- formals(app_ui) + for (i in c("request")){ + expect_true(i %in% names(fmls)) + } +}) + +test_that("app server", { + server <- app_server + expect_is(server, "function") + # Check that formals have not been removed + fmls <- formals(app_server) + for (i in c("input", "output", "session")){ + expect_true(i %in% names(fmls)) + } +}) + +# Configure this test to fit your need +test_that( + "app launches",{ + golem::expect_running(sleep = 5) + } +) From afc8770c820be0ffbcf150caf05b1fcda610e62e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 4 Nov 2021 09:14:18 +0200 Subject: [PATCH 097/199] Read example data should work now Former-commit-id: c9a69f752ee52c1924d43895e41f675a55b16aa8 --- R/app_server.R | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 46e6261..de446da 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -62,8 +62,8 @@ app_server <- function( input, output, session ) { anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) # Making coloring datatable - vals$rename_data <- read.csv("inst/extdata/rename.csv") - rename_data <- read.csv("inst/extdata/rename.csv") + vals$rename_data <- read.csv("extdata/rename.csv") + rename_data <- read.csv("extdata/rename.csv") coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") @@ -553,13 +553,13 @@ app_server <- function( input, output, session ) { ##---------------------------------------------------------------- shiny::observeEvent(input$anti_sco,{ - anti_data <- read.csv("inst/extdata/sco_antismash.csv") + anti_data <- read.csv("extdata/sco_antismash.csv") anti_data <- read_antismash(anti_data) }) shiny::observeEvent(input$gecco_sco,{ - gecco_data <- read.delim("inst/extdata/sco_gecco.tsv") + gecco_data <- read.delim("extdata/sco_gecco.tsv") read_gecco(gecco_data) }) @@ -567,37 +567,37 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$prism_sco,{ # Read data - data <- rjson::fromJSON(file = "inst/extdata/sco_prism.json") + data <- rjson::fromJSON(file = "extdata/sco_prism.json") read_prism(data) }) shiny::observeEvent(input$sempi_sco,{ - sempi_data <- read.csv("inst/extdata/sco_sempi.csv") + sempi_data <- read.csv("extdata/sco_sempi.csv") read_sempi(sempi_data) }) shiny::observeEvent(input$arts_sco, { - data <- read.delim("inst/extdata/sco_duptable.tsv") + data <- read.delim("extdata/sco_duptable.tsv") disable_event_logic() read_arts_dupdata(data) - data <- read.delim("inst/extdata/sco_knownhits.tsv") + data <- read.delim("extdata/sco_knownhits.tsv") read_arts_knownhits(data) }) shiny::observeEvent(input$deep_sco, { - data <- read.delim("inst/extdata/sco_deep.tsv") + data <- read.delim("extdata/sco_deep.tsv") read_deep(data) }) shiny::observeEvent(input$rre_sco, { # Read data - data <- read.delim("inst/extdata/sco_rre.txt") + data <- read.delim("extdata/sco_rre.txt") read_rre(data) }) @@ -2325,14 +2325,24 @@ app_server <- function( input, output, session ) { flst <- c(flst, file_names) } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ flst <- c(flst, file_names) - } else if (grepl('inst/scripts/group.py', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } + } } #create the zip file from flst vector + flst <- c(flst, 'scripts/group.py') zip(file, flst) }, contentType = "application/zip" ) shiny::onSessionEnded(function() { + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + file.remove(file_names) + } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + file.remove(file_names) + } + } + shiny::stopApp() }) } From 789c2b5aa8ae0804409272df1a5c46ef88d4000d Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 4 Nov 2021 09:48:55 +0200 Subject: [PATCH 098/199] Refined reading example data from package Former-commit-id: 44d0e5a5ac2a06023e6f7f9f9489cc0766dfe532 --- R/app_server.R | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index de446da..a5e74fc 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -62,8 +62,9 @@ app_server <- function( input, output, session ) { anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F ) # Making coloring datatable - vals$rename_data <- read.csv("extdata/rename.csv") - rename_data <- read.csv("extdata/rename.csv") + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + vals$rename_data <- read.csv(rename_file) + rename_data <- read.csv(rename_file) coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") @@ -552,52 +553,54 @@ app_server <- function( input, output, session ) { ## Loading and processing of example data - ##---------------------------------------------------------------- shiny::observeEvent(input$anti_sco,{ - - anti_data <- read.csv("extdata/sco_antismash.csv") + anti_file <- system.file("extdata", "sco_antismash.csv", package = "BGCViz") + anti_data <- read.csv(anti_file) anti_data <- read_antismash(anti_data) }) shiny::observeEvent(input$gecco_sco,{ - gecco_data <- read.delim("extdata/sco_gecco.tsv") + gecco_file <- system.file("extdata", "sco_gecco.tsv", package = "BGCViz") + gecco_data <- read.delim(gecco_file) read_gecco(gecco_data) }) shiny::observeEvent(input$prism_sco,{ # Read data - - data <- rjson::fromJSON(file = "extdata/sco_prism.json") + prism_file <- system.file("extdata", "sco_prism.json", package = "BGCViz") + data <- rjson::fromJSON(file = prism_file) read_prism(data) }) shiny::observeEvent(input$sempi_sco,{ - sempi_data <- read.csv("extdata/sco_sempi.csv") + sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") + sempi_data <- read.csv(sempi_file) read_sempi(sempi_data) }) shiny::observeEvent(input$arts_sco, { - - data <- read.delim("extdata/sco_duptable.tsv") + dup_data_file <- system.file("extdata", "sco_duptable.tsv", package = "BGCViz") + data <- read.delim(dup_data_file) disable_event_logic() read_arts_dupdata(data) - - data <- read.delim("extdata/sco_knownhits.tsv") + knownhits_file <- system.file("extdata", "sco_knownhits.tsv", package = "BGCViz") + data <- read.delim(knownhits_file) read_arts_knownhits(data) }) shiny::observeEvent(input$deep_sco, { - - data <- read.delim("extdata/sco_deep.tsv") + deep_file <- system.file("extdata", "sco_deep.tsv", package = "BGCViz") + data <- read.delim(deep_file) read_deep(data) }) shiny::observeEvent(input$rre_sco, { - # Read data - data <- read.delim("extdata/sco_rre.txt") + rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") + data <- read.delim(sco_rre.txt) read_rre(data) }) @@ -1129,7 +1132,7 @@ app_server <- function( input, output, session ) { rename_data <- vals$rename_data if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") + anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -1138,7 +1141,7 @@ app_server <- function( input, output, session ) { } if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") + sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -1147,7 +1150,7 @@ app_server <- function( input, output, session ) { } if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") + prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -1167,7 +1170,7 @@ app_server <- function( input, output, session ) { rename_data <- vals$rename_data if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") + anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -1176,7 +1179,7 @@ app_server <- function( input, output, session ) { } if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") + sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -1185,7 +1188,7 @@ app_server <- function( input, output, session ) { } if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") + prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] vals$renaming_notification <- res[[2]] @@ -2328,7 +2331,8 @@ app_server <- function( input, output, session ) { } } #create the zip file from flst vector - flst <- c(flst, 'scripts/group.py') + group_by_script <- system.file("scripts", "group.py", package = "BGCViz") + flst <- c(flst, group_by_script) zip(file, flst) }, contentType = "application/zip" ) shiny::onSessionEnded(function() { From 2d39bdad99bedf2da2896b88036e8baeec8472be Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 4 Nov 2021 10:06:44 +0200 Subject: [PATCH 099/199] Pipe operator should not be exported Former-commit-id: d17e53ec10dd74def23cc4753dcbedfc010d5c1f --- R/utils-pipe.R | 1 - 1 file changed, 1 deletion(-) diff --git a/R/utils-pipe.R b/R/utils-pipe.R index fd0b1d1..89692f9 100644 --- a/R/utils-pipe.R +++ b/R/utils-pipe.R @@ -5,7 +5,6 @@ #' @name %>% #' @rdname pipe #' @keywords internal -#' @export #' @importFrom magrittr %>% #' @usage lhs \%>\% rhs #' @param lhs A value or the magrittr placeholder. From 2bc046c95f5f047108a04b90454a43fbca7e35f8 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 4 Nov 2021 10:45:39 +0200 Subject: [PATCH 100/199] Fixed .gitignore file Former-commit-id: 0c7d3cdec3c93d8e109d8aade2695036f21844ed --- .gitignore | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/.gitignore b/.gitignore index e69de29..2ce0104 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,51 @@ +### R ### +# History files +.Rhistory +.Rapp.history + +# Session Data files +.RData + +# User-specific files +.Ruserdata + +# Example code in package build process +*-Ex.R + +# Output files from R CMD build +/*.tar.gz + +# Output files from R CMD check +/*.Rcheck/ + +# RStudio files +.Rproj.user/ + +# produced vignettes +vignettes/*.html +vignettes/*.pdf + +# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 +.httr-oauth + +# knitr and R markdown default cache directories +*_cache/ +/cache/ + +# Temporary files created by R markdown +*.utf8.md +*.knit.md + +# R Environment Variables +.Renviron + +# pkgdown site +docs/ + +# translation temp files +po/*~ + +### R.Bookdown Stack ### +# R package: bookdown caching files +/*_files/ + From bcd81c9c44976cb67e6356c807aa2461343ab87b Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 4 Nov 2021 10:46:26 +0200 Subject: [PATCH 101/199] Export tranformation to csv function. Fixed package structure Former-commit-id: e1273eb5587f2ad3ae00da377970f2b6749cbd23 --- .dockerignore | 7 + NAMESPACE | 4 +- R/fct_format_transformation.R | 43 +-- README.Rmd | 87 ++++++ example_data/sco_antismash.csv | 28 -- .../sco_antismash.json.REMOVED.git-id | 1 - example_data/sco_deep.tsv | 173 ----------- example_data/sco_duptable.tsv | 73 ----- example_data/sco_gecco.tsv | 21 -- example_data/sco_knownhits.tsv | 48 ---- example_data/sco_prism.json.REMOVED.git-id | 1 - example_data/sco_rre.txt | 3 - example_data/sco_sempi.csv | 34 --- group.py | 95 ------- man/antismash_to_csv.Rd | 19 ++ man/prism_to_csv.Rd | 19 ++ man/sempi_to_csv.Rd | 19 ++ rename.csv | 90 ------ scripts/.Rhistory | 0 scripts/antismash.R | 51 ---- scripts/prism.R | 38 --- scripts/sempi.R | 27 -- src/biocircos_functions.R | 118 -------- src/deep_reference_functions.R | 190 ------------- src/group_table_functions.R | 14 - src/helper_functions.R | 268 ------------------ src/validate_functions.R | 155 ---------- 27 files changed, 181 insertions(+), 1445 deletions(-) create mode 100644 .dockerignore create mode 100644 README.Rmd delete mode 100644 example_data/sco_antismash.csv delete mode 100644 example_data/sco_antismash.json.REMOVED.git-id delete mode 100644 example_data/sco_deep.tsv delete mode 100644 example_data/sco_duptable.tsv delete mode 100644 example_data/sco_gecco.tsv delete mode 100644 example_data/sco_knownhits.tsv delete mode 100644 example_data/sco_prism.json.REMOVED.git-id delete mode 100644 example_data/sco_rre.txt delete mode 100644 example_data/sco_sempi.csv delete mode 100644 group.py create mode 100644 man/antismash_to_csv.Rd create mode 100644 man/prism_to_csv.Rd create mode 100644 man/sempi_to_csv.Rd delete mode 100644 rename.csv delete mode 100644 scripts/.Rhistory delete mode 100644 scripts/antismash.R delete mode 100644 scripts/prism.R delete mode 100644 scripts/sempi.R delete mode 100644 src/biocircos_functions.R delete mode 100644 src/deep_reference_functions.R delete mode 100644 src/group_table_functions.R delete mode 100644 src/helper_functions.R delete mode 100644 src/validate_functions.R diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bf55e9f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,7 @@ +.RData +.Rhistory +.git +.gitignore +manifest.json +rsconnect/ +Rproj.user diff --git a/NAMESPACE b/NAMESPACE index da9e7bc..720c1be 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,9 @@ # Generated by roxygen2: do not edit by hand -export("%>%") +export(antismash_to_csv) +export(prism_to_csv) export(run_app) +export(sempi_to_csv) import(shiny) importFrom(golem,activate_js) importFrom(golem,add_resource_path) diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index f160b40..3f4d11d 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -1,15 +1,18 @@ #' sempi_to_df #' #' @description Function, which transforms Track.db file into dataframe, which could be then written to csv +#' +#' @param file - path to a json file, +#' @param write_to - path where to write generated csv file #' -#' @return dataframe object with sempi results +#' @return csv file in specified location #' -#' @noRd -sempi_to_df <- function(data){ -conn <- RSQLite::dbConnect(RSQLite::SQLite(), data) +#' @export +sempi_to_csv <- function(file, write_to = getwd()){ +conn <- RSQLite::dbConnect(RSQLite::SQLite(), file) data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") - +RSQLite::dbDisconnect(conn) data <- data %>% dplyr::filter(trackid==6) @@ -26,17 +29,21 @@ sempi_data$Cluster <- as.numeric(sempi_data$Cluster) sempi_data$Start <- as.numeric(sempi_data$Start) sempi_data$Stop <- as.numeric(sempi_data$Stop) sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) -return(sempi_data) +write.csv(sempi_data, paste0(write_to,"/sempi.csv"), row.names = FALSE) } + #' prism_to_df #' #' @description Function, that transforms prism json object into dataframe, which could be written to the csv file +#' +#' @param file - path to a json file, +#' @param write_to - path where to write generated csv file #' -#' @return dataframe object +#' @return csv file in specified location #' -#' @noRd -prism_to_df <- function(data){ -data <- rjson::fromJSON(file =args[1]) +#' @export +prism_to_csv <- function(file, write_to = getwd()){ +data <- rjson::fromJSON(file =file) types <- sapply(data$prism_results$clusters, function(x){ @@ -64,18 +71,22 @@ end <- sapply(data$prism_results$clusters, function(x){ prism_data <- data.frame(cbind(start, end, types)) prism_data <- prism_data %>% dplyr::transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) -return(prism_data) +write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) + } #' antismash_to_df #' #' @description Function, that returns dataframe, out of supplied antismash json file +#' +#' @param file - path to a json file, +#' @param write_to - path where to write generated csv file #' -#' @return dataframe object +#' @return csv file in specified location #' -#' @noRd -antismash_to_df <- function(data){ - data <- rjson::fromJSON(file = data) +#' @export +antismash_to_csv <- function(file, write_to = getwd()){ + data <- rjson::fromJSON(file = file) types <- sapply(data$records, function(y){ lapply(y$features, function(x){ if (unlist(x$type == 'region')){ @@ -118,5 +129,5 @@ antismash_to_df <- function(data){ anti_data$Cluster <- as.numeric(anti_data$Cluster) anti_data$Start <- as.numeric(anti_data$Start) anti_data$Stop <- as.numeric(anti_data$Stop) - return(anti_data) + write.csv(anti_data, paste0(write_to,"/antismash.csv"), row.names = FALSE) } \ No newline at end of file diff --git a/README.Rmd b/README.Rmd new file mode 100644 index 0000000..fa139a8 --- /dev/null +++ b/README.Rmd @@ -0,0 +1,87 @@ +--- +output: github_document +--- + + + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>", + fig.path = "man/figures/README-", + out.width = "100%" +) +``` + +# BGCViz + + +[![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://lifecycle.r-lib.org/articles/stages.html#experimental) +![Visitor count](https://shields-io-visitor-counter.herokuapp.com/badge?page=ostash-group.BGCViz&style=for-the-badge) +![GitHub](https://img.shields.io/github/license/ostash-group/BGCViz?style=for-the-badge) +![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/ostash-group/BGCViz?include_prereleases&style=for-the-badge) +![GitHub issues](https://img.shields.io/github/issues/ostash-group/BGCViz?style=for-the-badge) +![GitHub Repo stars](https://img.shields.io/github/stars/ostash-group/BGCViz?style=for-the-badge) +![GitHub contributors](https://img.shields.io/github/contributors/ostash-group/BGCViz?style=for-the-badge) + +![DOI](http://img.shields.io/badge/DOI-10.13140%20%2F%20RG.2.2.23431.01444-blue.svg?style=for-the-badge) + + + +BGCViz is a shiny application (can be run locally, or via [website](https://ostash-group.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: + + - "regions of interest", annotated with more than one tool. + + - novel regions, annotated only by one of the methods. + + + +This app is written as a part of **Cambridge Bioinformatics Hackathon 2020** ([link](https://cambiohack.uk)).  + + +**All the documentation is available on our [site](https://ostash-group.github.io/BGCViz)** + + +![Biocircos](images/biocircos.png) + + + +Currently, the app supports annotations from such sources: + +1. Antismash (both json and csv) + +2. PRISM (both json and csv) + +3. SEMPI (only csv) + +4. DeepBGC (raw tsv file) + +5. RRE-Finder (modified txt file) + +6. ARTS (raw tsv files) + + + +# Contributing + +There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement anything from our TO-DO list.  + +If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) + +# TO-DO list + +1. Write all group information in one GenBank file (for know separate files are generated. More info [here](Additional_analysis.md)) + +2. Add BigFAM information parsing + +3. Add generation of json files for an input to `--sideload` flag on antismash v. 6.0.  Then the data can be analyzed in details using antismash interface. + +4. Provide parsing of SQLite file from SEMPI (raw output). This is possible locally, but the web version crashes. + + + +# Citation + +This project is still a work in progress, so there is no official publication. If it was useful you can cite it as: + +P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/ostash-group/BGCViz, doi: 10.13140/RG.2.2.23431.01444 diff --git a/example_data/sco_antismash.csv b/example_data/sco_antismash.csv deleted file mode 100644 index 4ade4cd..0000000 --- a/example_data/sco_antismash.csv +++ /dev/null @@ -1,28 +0,0 @@ -"Cluster","Start","Stop","Type" -1,86693,139654,"hgle-ks__t1pks" -2,166700,191657,"terpene" -3,246867,270397,"lanthipeptide-class-i" -4,494259,544087,"nrps" -5,791700,799942,"ripp-like" -6,1258217,1297040,"t3pks" -7,1995499,2005898,"ectoine" -8,2939305,2949875,"melanin" -9,3034430,3045603,"siderophore" -10,3524827,3603907,"nrps" -11,5496473,5567376,"t2pks" -12,5671274,5691836,"terpene" -13,5751944,5824487,"t2pks" -14,6336090,6346443,"siderophore" -15,6429574,6475291,"nrps-like__t1pks__prodigiosin" -16,6632342,6643659,"ripp-like" -17,6656903,6676224,"terpene" -18,6842314,6855522,"siderophore" -19,6881334,6951537,"t1pks__butyrolactone" -20,7088263,7142447,"thioamide-nrp__nrps" -21,7409741,7432456,"lanthipeptide-class-iii" -22,7506307,7532117,"terpene" -23,7570411,7618555,"pks-like__t1pks" -24,7682906,7709360,"lanthipeptide-class-i" -25,7973469,8047403,"other__t3pks" -26,8269636,8290764,"indole" -27,8475101,8548352,"t3pks__nrps__terpene" diff --git a/example_data/sco_antismash.json.REMOVED.git-id b/example_data/sco_antismash.json.REMOVED.git-id deleted file mode 100644 index 710b80c..0000000 --- a/example_data/sco_antismash.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -ed38ed0a829ca3d7134cb1ac60d1c93a8d4a5f62 \ No newline at end of file diff --git a/example_data/sco_deep.tsv b/example_data/sco_deep.tsv deleted file mode 100644 index 37bcee4..0000000 --- a/example_data/sco_deep.tsv +++ /dev/null @@ -1,173 +0,0 @@ -sequence_id detector detector_version detector_label bgc_candidate_id nucl_start nucl_end nucl_length num_proteins num_domains num_bio_domains deepbgc_score product_activity antibacterial cytotoxic inhibitor antifungal product_class Alkaloid NRP Other Polyketide RiPP Saccharide Terpene protein_ids bio_pfam_ids pfam_ids -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1143-9307.1 1143 9307 8164 4 8 0 0.55675 antibacterial 0.85 0.09 0.16 0.28 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_2;NC_003888.3_NC_003888.3_3;NC_003888.3_NC_003888.3_4;NC_003888.3_NC_003888.3_5 PF00270;PF04851;PF03457;PF06527;PF03457;PF13565;PF00665;PF09299 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_10406-33357.1 10406 33357 22951 24 27 1 0.69541 antibacterial 0.74 0.14 0.06 0.10 0.01 0.04 0.19 0.08 0.40 0.21 0.07 NC_003888.3_NC_003888.3_7;NC_003888.3_NC_003888.3_8;NC_003888.3_NC_003888.3_9;NC_003888.3_NC_003888.3_10;NC_003888.3_NC_003888.3_11;NC_003888.3_NC_003888.3_12;NC_003888.3_NC_003888.3_13;NC_003888.3_NC_003888.3_14;NC_003888.3_NC_003888.3_15;NC_003888.3_NC_003888.3_16;NC_003888.3_NC_003888.3_17;NC_003888.3_NC_003888.3_18;NC_003888.3_NC_003888.3_19;NC_003888.3_NC_003888.3_20;NC_003888.3_NC_003888.3_21;NC_003888.3_NC_003888.3_22;NC_003888.3_NC_003888.3_23;NC_003888.3_NC_003888.3_24;NC_003888.3_NC_003888.3_25;NC_003888.3_NC_003888.3_26;NC_003888.3_NC_003888.3_27;NC_003888.3_NC_003888.3_28;NC_003888.3_NC_003888.3_29;NC_003888.3_NC_003888.3_30 PF04101 PF06527;PF06965;PF00999;PF01590;PF13492;PF03861;PF14690;PF01610;PF01695;PF01695;PF13555;PF13191;PF13304;PF12079;PF00932;PF03984;PF13088;PF03457;PF12680;PF08281;PF04545;PF04542;PF01734;PF13579;PF13439;PF00201;PF04101 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_37613-39812.1 37613 39812 2199 3 6 0 0.54026 antibacterial 0.73 0.15 0.13 0.28 0.00 0.18 0.27 0.31 0.15 0.01 0.10 NC_003888.3_NC_003888.3_36;NC_003888.3_NC_003888.3_37;NC_003888.3_NC_003888.3_38 PF13463;PF12802;PF01047;PF01978;PF12697;PF03861 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_45266-121371.1 45266 121371 76105 55 118 11 0.83590 0.49 0.32 0.22 0.19 Polyketide 0.05 0.14 0.15 0.67 0.08 0.02 0.05 NC_003888.3_NC_003888.3_46;NC_003888.3_NC_003888.3_47;NC_003888.3_NC_003888.3_48;NC_003888.3_NC_003888.3_49;NC_003888.3_NC_003888.3_50;NC_003888.3_NC_003888.3_51;NC_003888.3_NC_003888.3_52;NC_003888.3_NC_003888.3_53;NC_003888.3_NC_003888.3_54;NC_003888.3_NC_003888.3_55;NC_003888.3_NC_003888.3_56;NC_003888.3_NC_003888.3_57;NC_003888.3_NC_003888.3_58;NC_003888.3_NC_003888.3_59;NC_003888.3_NC_003888.3_60;NC_003888.3_NC_003888.3_61;NC_003888.3_NC_003888.3_62;NC_003888.3_NC_003888.3_63;NC_003888.3_NC_003888.3_64;NC_003888.3_NC_003888.3_65;NC_003888.3_NC_003888.3_66;NC_003888.3_NC_003888.3_67;NC_003888.3_NC_003888.3_68;NC_003888.3_NC_003888.3_69;NC_003888.3_NC_003888.3_70;NC_003888.3_NC_003888.3_71;NC_003888.3_NC_003888.3_72;NC_003888.3_NC_003888.3_73;NC_003888.3_NC_003888.3_74;NC_003888.3_NC_003888.3_75;NC_003888.3_NC_003888.3_76;NC_003888.3_NC_003888.3_77;NC_003888.3_NC_003888.3_78;NC_003888.3_NC_003888.3_79;NC_003888.3_NC_003888.3_80;NC_003888.3_NC_003888.3_81;NC_003888.3_NC_003888.3_82;NC_003888.3_NC_003888.3_83;NC_003888.3_NC_003888.3_84;NC_003888.3_NC_003888.3_85;NC_003888.3_NC_003888.3_86;NC_003888.3_NC_003888.3_87;NC_003888.3_NC_003888.3_88;NC_003888.3_NC_003888.3_89;NC_003888.3_NC_003888.3_90;NC_003888.3_NC_003888.3_91;NC_003888.3_NC_003888.3_92;NC_003888.3_NC_003888.3_93;NC_003888.3_NC_003888.3_94;NC_003888.3_NC_003888.3_95;NC_003888.3_NC_003888.3_96;NC_003888.3_NC_003888.3_97;NC_003888.3_NC_003888.3_98;NC_003888.3_NC_003888.3_99;NC_003888.3_NC_003888.3_100 PF01266;PF02801;PF00106;PF08240;PF08659;PF00698;PF00109;PF01243;PF07993;PF00107;PF01370 PF08240;PF00208;PF00107;PF13602;PF13602;PF06824;PF13377;PF00532;PF13407;PF00356;PF00480;PF01547;PF13416;PF00528;PF00528;PF03663;PF01074;PF07748;PF05593;PF12802;PF13340;PF06779;PF07690;PF00083;PF12832;PF08974;PF13586;PF01609;PF13340;PF01609;PF13586;PF01068;PF03747;PF12706;PF13483;PF00753;PF13354;PF00144;PF00126;PF03466;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF13683;PF00665;PF13276;PF13565;PF01527;PF13011;PF13551;PF13518;PF13384;PF13586;PF01609;PF13340;PF13340;PF10946;PF00042;PF00970;PF00175;PF01243;PF00457;PF13340;PF13560;PF00106;PF01370;PF08659;PF13561;PF13340;PF00440;PF00106;PF01370;PF13561;PF13460;PF04616;PF14028;PF12698;PF00005;PF13191;PF13304;PF13476;PF00743;PF07992;PF13738;PF13450;PF01266;PF13434;PF06974;PF03007;PF01370;PF07993;PF16363;PF01073;PF03060;PF01645;PF00109;PF02801;PF16197;PF00698;PF00550;PF08659;PF00106;PF13561;PF01073;PF14765;PF00109;PF02801;PF16197;PF00698;PF07977;PF00753;PF12706 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_122742-128290.1 122742 128290 5548 4 8 1 0.53313 antibacterial 0.58 0.05 0.07 0.34 0.00 0.38 0.29 0.15 0.12 0.01 0.06 NC_003888.3_NC_003888.3_102;NC_003888.3_NC_003888.3_103;NC_003888.3_NC_003888.3_104;NC_003888.3_NC_003888.3_105 PF00561 PF13191;PF13401;PF00196;PF13384;PF12146;PF00561;PF12697;PF12695 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_170910-191657.1 170910 191657 20747 19 75 11 0.66526 cytotoxic 0.23 0.63 0.12 0.08 Terpene 0.09 0.02 0.05 0.11 0.01 0.09 0.71 NC_003888.3_NC_003888.3_149;NC_003888.3_NC_003888.3_150;NC_003888.3_NC_003888.3_151;NC_003888.3_NC_003888.3_152;NC_003888.3_NC_003888.3_153;NC_003888.3_NC_003888.3_154;NC_003888.3_NC_003888.3_155;NC_003888.3_NC_003888.3_156;NC_003888.3_NC_003888.3_157;NC_003888.3_NC_003888.3_158;NC_003888.3_NC_003888.3_159;NC_003888.3_NC_003888.3_160;NC_003888.3_NC_003888.3_161;NC_003888.3_NC_003888.3_162;NC_003888.3_NC_003888.3_163;NC_003888.3_NC_003888.3_164;NC_003888.3_NC_003888.3_165;NC_003888.3_NC_003888.3_166;NC_003888.3_NC_003888.3_167 PF01266;PF08242;PF00494;PF08240;PF01494;PF08241;PF00348;PF02737;PF00107;PF00355;PF01593 PF11066;PF03441;PF04244;PF00348;PF13738;PF01266;PF01946;PF03486;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF01593;PF01266;PF13450;PF12831;PF00890;PF03486;PF00070;PF01946;PF07992;PF01262;PF01134;PF02737;PF01494;PF01209;PF13489;PF13847;PF13578;PF08241;PF08242;PF13649;PF05175;PF05834;PF07992;PF01266;PF00890;PF13450;PF01593;PF01266;PF13450;PF01946;PF12831;PF03486;PF00890;PF05834;PF07992;PF01494;PF01134;PF02310;PF02607;PF13411;PF12728;PF13518;PF00376;PF13384;PF01527;PF04542;PF08281;PF04545;PF13412;PF14344;PF10099;PF12900;PF00582;PF13602;PF00107;PF01262;PF08240;PF00582;PF07681 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_194759-195461.1 194759 195461 702 1 6 0 0.50176 antibacterial 0.81 0.07 0.10 0.20 0.00 0.06 0.15 0.31 0.35 0.01 0.17 NC_003888.3_NC_003888.3_170 PF00196;PF08281;PF04545;PF13412;PF13936;PF00072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_211747-220764.1 211747 220764 9017 10 16 4 0.74452 antibacterial 0.67 0.13 0.25 0.24 Polyketide 0.02 0.05 0.12 0.61 0.05 0.04 0.16 NC_003888.3_NC_003888.3_183;NC_003888.3_NC_003888.3_184;NC_003888.3_NC_003888.3_185;NC_003888.3_NC_003888.3_186;NC_003888.3_NC_003888.3_187;NC_003888.3_NC_003888.3_188;NC_003888.3_NC_003888.3_189;NC_003888.3_NC_003888.3_190;NC_003888.3_NC_003888.3_191;NC_003888.3_NC_003888.3_192 PF00583;PF00106;PF01370;PF08659 PF02613;PF02665;PF12680;PF14534;PF07366;PF13586;PF13302;PF00583;PF14027;PF02909;PF08659;PF01370;PF00106;PF13561;PF13460;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_245985-247869.1 245985 247869 1884 2 4 2 0.52321 antibacterial 0.82 0.07 0.18 0.12 Terpene 0.01 0.03 0.01 0.06 0.38 0.00 0.51 NC_003888.3_NC_003888.3_217;NC_003888.3_NC_003888.3_218 PF00106;PF08659 PF00106;PF08659;PF13561;PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_248676-249702.1 248676 249702 1026 1 3 2 0.53282 inhibitor 0.29 0.05 0.66 0.06 Polyketide 0.00 0.20 0.05 0.80 0.01 0.00 0.01 NC_003888.3_NC_003888.3_220 PF00107;PF08240 PF08240;PF00107;PF13602 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_251763-262319.1 251763 262319 10556 9 20 6 0.71258 antibacterial 0.78 0.11 0.08 0.15 RiPP 0.01 0.15 0.12 0.17 0.53 0.04 0.01 NC_003888.3_NC_003888.3_224;NC_003888.3_NC_003888.3_225;NC_003888.3_NC_003888.3_226;NC_003888.3_NC_003888.3_227;NC_003888.3_NC_003888.3_228;NC_003888.3_NC_003888.3_229;NC_003888.3_NC_003888.3_230;NC_003888.3_NC_003888.3_231;NC_003888.3_NC_003888.3_232 PF00903;PF00975;PF01408;PF05147;PF00561;PF04738 PF01408;PF01978;PF12802;PF01047;PF13412;PF09339;PF00392;PF13545;PF00903;PF12833;PF00561;PF00975;PF12697;PF12146;PF12695;PF07819;PF04738;PF14028;PF05147;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_297514-309131.1 297514 309131 11617 9 13 2 0.61725 antibacterial 0.60 0.06 0.04 0.18 0.00 0.35 0.24 0.32 0.09 0.01 0.02 NC_003888.3_NC_003888.3_263;NC_003888.3_NC_003888.3_264;NC_003888.3_NC_003888.3_265;NC_003888.3_NC_003888.3_266;NC_003888.3_NC_003888.3_267;NC_003888.3_NC_003888.3_268;NC_003888.3_NC_003888.3_269;NC_003888.3_NC_003888.3_270;NC_003888.3_NC_003888.3_271 PF00501;PF00903 PF00440;PF12681;PF00903;PF08937;PF13676;PF12697;PF13560;PF01381;PF00144;PF14278;PF00440;PF00501;PF13193 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_320109-322255.1 320109 322255 2146 2 5 1 0.56163 antibacterial 0.54 0.10 0.38 0.14 Polyketide 0.04 0.14 0.12 0.57 0.12 0.00 0.08 NC_003888.3_NC_003888.3_279;NC_003888.3_NC_003888.3_280 PF00107 PF00107;PF13602;PF00135;PF07859;PF00326 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_329437-331365.1 329437 331365 1928 3 6 0 0.55903 antibacterial 0.75 0.05 0.15 0.31 0.00 0.13 0.08 0.31 0.20 0.03 0.30 NC_003888.3_NC_003888.3_286;NC_003888.3_NC_003888.3_287;NC_003888.3_NC_003888.3_288 PF13340;PF01609;PF13359;PF13612;PF13586;PF00144 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_332310-341318.1 332310 341318 9008 7 15 3 0.58710 antibacterial 0.81 0.07 0.15 0.33 Polyketide 0.01 0.03 0.06 0.76 0.02 0.00 0.14 NC_003888.3_NC_003888.3_290;NC_003888.3_NC_003888.3_291;NC_003888.3_NC_003888.3_292;NC_003888.3_NC_003888.3_293;NC_003888.3_NC_003888.3_294;NC_003888.3_NC_003888.3_295;NC_003888.3_NC_003888.3_296 PF00106;PF01370;PF08659 PF00106;PF08659;PF01370;PF13561;PF13460;PF00440;PF13022;PF16859;PF03055;PF10518;PF14200;PF00754;PF03435;PF13460;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_345816-347706.1 345816 347706 1890 1 2 0 0.60335 antibacterial 0.87 0.06 0.17 0.26 0.00 0.08 0.04 0.28 0.19 0.18 0.28 NC_003888.3_NC_003888.3_301 PF13229;PF05048 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_349418-351352.1 349418 351352 1934 2 5 0 0.52089 antibacterial 0.85 0.09 0.17 0.24 0.00 0.09 0.19 0.28 0.20 0.02 0.27 NC_003888.3_NC_003888.3_303;NC_003888.3_NC_003888.3_304 PF01614;PF12802;PF09339;PF07436;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_353791-355686.1 353791 355686 1895 2 2 1 0.52221 antibacterial 0.92 0.10 0.05 0.21 Terpene 0.05 0.09 0.04 0.15 0.06 0.02 0.61 NC_003888.3_NC_003888.3_307;NC_003888.3_NC_003888.3_308 PF00248 PF00248;PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_364558-366795.1 364558 366795 2237 2 4 0 0.52680 antibacterial 0.81 0.07 0.22 0.24 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_318;NC_003888.3_NC_003888.3_319 PF13377;PF00532;PF00356;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_370065-372478.1 370065 372478 2413 3 9 4 0.57281 antibacterial 0.76 0.04 0.19 0.36 Polyketide 0.01 0.03 0.01 0.92 0.02 0.03 0.02 NC_003888.3_NC_003888.3_323;NC_003888.3_NC_003888.3_324;NC_003888.3_NC_003888.3_325 PF02737;PF00106;PF01370;PF08659 PF00106;PF01370;PF08659;PF03435;PF05368;PF02737;PF13561;PF14486;PF06912 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_395938-429403.1 395938 429403 33465 28 74 19 0.94701 0.48 0.29 0.29 0.22 Saccharide 0.02 0.03 0.20 0.06 0.00 0.69 0.01 NC_003888.3_NC_003888.3_339;NC_003888.3_NC_003888.3_340;NC_003888.3_NC_003888.3_341;NC_003888.3_NC_003888.3_342;NC_003888.3_NC_003888.3_343;NC_003888.3_NC_003888.3_344;NC_003888.3_NC_003888.3_345;NC_003888.3_NC_003888.3_346;NC_003888.3_NC_003888.3_347;NC_003888.3_NC_003888.3_348;NC_003888.3_NC_003888.3_349;NC_003888.3_NC_003888.3_350;NC_003888.3_NC_003888.3_351;NC_003888.3_NC_003888.3_352;NC_003888.3_NC_003888.3_353;NC_003888.3_NC_003888.3_354;NC_003888.3_NC_003888.3_355;NC_003888.3_NC_003888.3_356;NC_003888.3_NC_003888.3_357;NC_003888.3_NC_003888.3_358;NC_003888.3_NC_003888.3_359;NC_003888.3_NC_003888.3_360;NC_003888.3_NC_003888.3_361;NC_003888.3_NC_003888.3_362;NC_003888.3_NC_003888.3_363;NC_003888.3_NC_003888.3_364;NC_003888.3_NC_003888.3_365;NC_003888.3_NC_003888.3_366 PF08242;PF02585;PF00107;PF01370;PF00202;PF01408;PF03720;PF03721;PF00535;PF08241;PF00534;PF08421;PF00908;PF04321;PF00984;PF02706;PF00702;PF02397;PF08484 PF13727;PF02397;PF03721;PF01262;PF00984;PF03720;PF13477;PF13579;PF13439;PF00534;PF13692;PF13524;PF02706;PF02706;PF13522;PF13537;PF12481;PF00733;PF03054;PF02826;PF02254;PF00107;PF01408;PF03447;PF16889;PF05426;PF07940;PF13229;PF05048;PF13439;PF13579;PF00534;PF13692;PF13524;PF08421;PF13489;PF08242;PF08241;PF08484;PF12804;PF02585;PF04321;PF01370;PF16363;PF13460;PF01073;PF16254;PF09940;PF04389;PF16221;PF13641;PF00535;PF10111;PF13704;PF04230;PF00908;PF00202;PF01569;PF14378;PF11706;PF07336;PF00702;PF13419;PF13242;PF04672;PF13646;PF00376;PF13411;PF09278;PF13646;PF13489;PF08241;PF08242;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_431961-437224.1 431961 437224 5263 7 11 2 0.66524 inhibitor 0.31 0.09 0.53 0.10 Polyketide 0.00 0.18 0.17 0.69 0.02 0.00 0.01 NC_003888.3_NC_003888.3_371;NC_003888.3_NC_003888.3_372;NC_003888.3_NC_003888.3_373;NC_003888.3_NC_003888.3_374;NC_003888.3_NC_003888.3_375;NC_003888.3_NC_003888.3_376;NC_003888.3_NC_003888.3_377 PF00107;PF08240 PF05719;PF12680;PF14534;PF08281;PF04542;PF06197;PF08894;PF01872;PF08240;PF00107;PF13602 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_438996-446144.1 438996 446144 7148 6 13 1 0.58250 antibacterial 0.63 0.07 0.09 0.28 0.00 0.35 0.23 0.27 0.10 0.01 0.04 NC_003888.3_NC_003888.3_380;NC_003888.3_NC_003888.3_381;NC_003888.3_NC_003888.3_382;NC_003888.3_NC_003888.3_383;NC_003888.3_NC_003888.3_384;NC_003888.3_NC_003888.3_385 PF00561 PF02518;PF13581;PF07730;PF03176;PF00873;PF12349;PF14100;PF03403;PF00561;PF12146;PF12697;PF00440;PF13305 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_466428-467909.1 466428 467909 1481 2 4 0 0.51567 antibacterial-antifungal 0.78 0.02 0.18 0.60 Polyketide 0.02 0.01 0.04 0.90 0.03 0.00 0.01 NC_003888.3_NC_003888.3_405;NC_003888.3_NC_003888.3_406 PF07690;PF00083;PF07690;PF05977 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_490450-492881.1 490450 492881 2431 3 8 2 0.60069 antibacterial 0.52 0.16 0.10 0.38 0.00 0.40 0.16 0.36 0.05 0.02 0.03 NC_003888.3_NC_003888.3_428;NC_003888.3_NC_003888.3_429;NC_003888.3_NC_003888.3_430 PF00975;PF00561 PF02627;PF00561;PF00975;PF12697;PF12146;PF00756;PF12833;PF00165 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_497374-537512.1 497374 537512 40138 29 71 6 0.82418 0.45 0.46 0.14 0.14 NRP 0.03 0.84 0.07 0.03 0.02 0.02 0.01 NC_003888.3_NC_003888.3_435;NC_003888.3_NC_003888.3_436;NC_003888.3_NC_003888.3_437;NC_003888.3_NC_003888.3_438;NC_003888.3_NC_003888.3_439;NC_003888.3_NC_003888.3_440;NC_003888.3_NC_003888.3_441;NC_003888.3_NC_003888.3_442;NC_003888.3_NC_003888.3_443;NC_003888.3_NC_003888.3_444;NC_003888.3_NC_003888.3_445;NC_003888.3_NC_003888.3_446;NC_003888.3_NC_003888.3_447;NC_003888.3_NC_003888.3_448;NC_003888.3_NC_003888.3_449;NC_003888.3_NC_003888.3_450;NC_003888.3_NC_003888.3_451;NC_003888.3_NC_003888.3_452;NC_003888.3_NC_003888.3_453;NC_003888.3_NC_003888.3_454;NC_003888.3_NC_003888.3_455;NC_003888.3_NC_003888.3_456;NC_003888.3_NC_003888.3_457;NC_003888.3_NC_003888.3_458;NC_003888.3_NC_003888.3_459;NC_003888.3_NC_003888.3_460;NC_003888.3_NC_003888.3_461;NC_003888.3_NC_003888.3_462;NC_003888.3_NC_003888.3_463 PF01266;PF00903;PF01494;PF00668;PF00501;PF00561 PF00005;PF13175;PF13555;PF13476;PF13304;PF00903;PF13669;PF12902;PF00459;PF03067;PF00182;PF01494;PF01266;PF01262;PF03486;PF13450;PF07992;PF13738;PF00440;PF01494;PF12802;PF13463;PF09339;PF01047;PF02082;PF08531;PF05592;PF17389;PF17390;PF03621;PF11806;PF00756;PF00561;PF00005;PF00664;PF00550;PF00668;PF13193;PF00501;PF00005;PF00664;PF01497;PF13191;PF13604;PF00005;PF13238;PF13175;PF13401;PF02456;PF13555;PF13304;PF09818;PF13476;PF01032;PF01032;PF07992;PF13434;PF13454;PF00551;PF00148;PF13439;PF02911;PF17227;PF08530;PF02129;PF04123;PF09656;PF12740;PF07224;PF12697;PF03403 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_539122-542131.1 539122 542131 3009 1 4 0 0.59738 antibacterial 0.86 0.06 0.16 0.27 0.00 0.09 0.07 0.32 0.21 0.04 0.31 NC_003888.3_NC_003888.3_465 PF07691;PF16990;PF03422;PF06439 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_543544-544087.1 543544 544087 543 1 1 0 0.54283 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_468 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_548967-549621.1 548967 549621 654 1 2 0 0.52716 antibacterial 0.87 0.07 0.17 0.26 0.00 0.10 0.07 0.33 0.21 0.03 0.31 NC_003888.3_NC_003888.3_474 PF12867;PF11716 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_586986-589546.1 586986 589546 2560 3 5 4 0.65291 antibacterial 0.60 0.07 0.26 0.20 Polyketide 0.00 0.35 0.03 0.77 0.00 0.00 0.17 NC_003888.3_NC_003888.3_506;NC_003888.3_NC_003888.3_507;NC_003888.3_NC_003888.3_508 PF00698;PF02801;PF00108;PF00109 PF00698;PF02801;PF00109;PF00108;PF00550 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_605121-610356.1 605121 610356 5235 5 8 1 0.58996 0.49 0.02 0.40 0.20 Polyketide-Terpene 0.00 0.03 0.00 0.79 0.00 0.02 0.91 NC_003888.3_NC_003888.3_522;NC_003888.3_NC_003888.3_523;NC_003888.3_NC_003888.3_524;NC_003888.3_NC_003888.3_525;NC_003888.3_NC_003888.3_526 PF00348 PF13360;PF13570;PF05406;PF09995;PF00348;PF13340;PF01609;PF13586 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_618787-637824.1 618787 637824 19037 20 39 3 0.75081 0.40 0.37 0.23 0.09 0.01 0.05 0.43 0.12 0.14 0.03 0.26 NC_003888.3_NC_003888.3_536;NC_003888.3_NC_003888.3_537;NC_003888.3_NC_003888.3_538;NC_003888.3_NC_003888.3_539;NC_003888.3_NC_003888.3_540;NC_003888.3_NC_003888.3_541;NC_003888.3_NC_003888.3_542;NC_003888.3_NC_003888.3_543;NC_003888.3_NC_003888.3_544;NC_003888.3_NC_003888.3_545;NC_003888.3_NC_003888.3_546;NC_003888.3_NC_003888.3_547;NC_003888.3_NC_003888.3_548;NC_003888.3_NC_003888.3_549;NC_003888.3_NC_003888.3_550;NC_003888.3_NC_003888.3_551;NC_003888.3_NC_003888.3_552;NC_003888.3_NC_003888.3_553;NC_003888.3_NC_003888.3_554;NC_003888.3_NC_003888.3_555 PF08241;PF08242;PF00067 PF01261;PF00121;PF02502;PF02734;PF02733;PF00083;PF07690;PF03825;PF00392;PF13545;PF09339;PF07729;PF00067;PF00067;PF03029;PF00071;PF00025;PF00009;PF08477;PF05331;PF03259;PF02518;PF03466;PF00126;PF02567;PF05544;PF01183;PF00941;PF13489;PF13847;PF05401;PF01209;PF08241;PF05175;PF08242;PF13649;PF03358;PF02525;PF00210 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_680495-696168.1 680495 696168 15673 20 43 8 0.78120 0.44 0.38 0.24 0.14 Polyketide 0.02 0.17 0.12 0.70 0.04 0.02 0.07 NC_003888.3_NC_003888.3_597;NC_003888.3_NC_003888.3_598;NC_003888.3_NC_003888.3_599;NC_003888.3_NC_003888.3_600;NC_003888.3_NC_003888.3_601;NC_003888.3_NC_003888.3_602;NC_003888.3_NC_003888.3_603;NC_003888.3_NC_003888.3_604;NC_003888.3_NC_003888.3_605;NC_003888.3_NC_003888.3_606;NC_003888.3_NC_003888.3_607;NC_003888.3_NC_003888.3_608;NC_003888.3_NC_003888.3_609;NC_003888.3_NC_003888.3_610;NC_003888.3_NC_003888.3_611;NC_003888.3_NC_003888.3_612;NC_003888.3_NC_003888.3_613;NC_003888.3_NC_003888.3_614;NC_003888.3_NC_003888.3_615;NC_003888.3_NC_003888.3_616 PF08242;PF00106;PF08240;PF08659;PF08241;PF00107;PF01370;PF03364 PF01435;PF03965;PF01978;PF12802;PF02342;PF13424;PF07719;PF03067;PF09362;PF13602;PF00107;PF08240;PF00440;PF16859;PF00106;PF01370;PF08659;PF13561;PF13460;PF01135;PF02353;PF06325;PF13489;PF05724;PF01728;PF01209;PF13847;PF05401;PF13649;PF08241;PF08242;PF05148;PF05800;PF00741;PF06386;PF05120;PF10604;PF03364;PF08327;PF00741;PF06386;PF00741;PF05121 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_720031-722964.1 720031 722964 2933 4 7 0 0.56907 inhibitor 0.24 0.02 0.70 0.14 0.02 0.22 0.06 0.34 0.27 0.01 0.09 NC_003888.3_NC_003888.3_635;NC_003888.3_NC_003888.3_636;NC_003888.3_NC_003888.3_637;NC_003888.3_NC_003888.3_638 PF01374;PF05532;PF07690;PF06609;PF00083;PF06779;PF05977 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_736311-749279.1 736311 749279 12968 16 19 0 0.69926 antibacterial 0.63 0.14 0.08 0.10 RiPP 0.00 0.01 0.10 0.04 0.85 0.00 0.00 NC_003888.3_NC_003888.3_652;NC_003888.3_NC_003888.3_653;NC_003888.3_NC_003888.3_654;NC_003888.3_NC_003888.3_655;NC_003888.3_NC_003888.3_656;NC_003888.3_NC_003888.3_657;NC_003888.3_NC_003888.3_658;NC_003888.3_NC_003888.3_659;NC_003888.3_NC_003888.3_660;NC_003888.3_NC_003888.3_661;NC_003888.3_NC_003888.3_662;NC_003888.3_NC_003888.3_663;NC_003888.3_NC_003888.3_664;NC_003888.3_NC_003888.3_665;NC_003888.3_NC_003888.3_666;NC_003888.3_NC_003888.3_667 PF14404;PF10027;PF01965;PF00165;PF17196;PF02463;PF13191;PF00005;PF13555;PF03193;PF00664;PF02518;PF13581;PF04149;PF04672;PF13458;PF13433;PF02653;PF02653 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_753317-757246.1 753317 757246 3929 2 9 0 0.50999 antibacterial 0.69 0.07 0.13 0.31 0.00 0.23 0.13 0.43 0.15 0.02 0.07 NC_003888.3_NC_003888.3_672;NC_003888.3_NC_003888.3_673 PF00196;PF13384;PF13936;PF13424;PF12697;PF12695;PF01738;PF03403;PF12146 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_797776-809813.1 797776 809813 12037 10 28 2 0.70473 0.47 0.32 0.32 0.05 RiPP 0.00 0.07 0.13 0.02 0.71 0.01 0.06 NC_003888.3_NC_003888.3_716;NC_003888.3_NC_003888.3_717;NC_003888.3_NC_003888.3_718;NC_003888.3_NC_003888.3_719;NC_003888.3_NC_003888.3_720;NC_003888.3_NC_003888.3_721;NC_003888.3_NC_003888.3_722;NC_003888.3_NC_003888.3_723;NC_003888.3_NC_003888.3_724;NC_003888.3_NC_003888.3_725 PF08241;PF08242 PF12385;PF03412;PF00664;PF00005;PF02463;PF00664;PF00005;PF13191;PF02463;PF02541;PF14518;PF05175;PF06325;PF13489;PF12847;PF03602;PF13847;PF13649;PF08241;PF08242;PF01170;PF09360;PF00720;PF01070;PF00478;PF01645;PF00652;PF14200 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_815933-824058.1 815933 824058 8125 9 20 2 0.76996 antibacterial 0.66 0.05 0.06 0.08 Polyketide 0.12 0.00 0.12 0.51 0.10 0.02 0.31 NC_003888.3_NC_003888.3_728;NC_003888.3_NC_003888.3_729;NC_003888.3_NC_003888.3_730;NC_003888.3_NC_003888.3_731;NC_003888.3_NC_003888.3_732;NC_003888.3_NC_003888.3_733;NC_003888.3_NC_003888.3_734;NC_003888.3_NC_003888.3_735;NC_003888.3_NC_003888.3_736 PF00067;PF00248 PF00989;PF13188;PF08448;PF13426;PF13185;PF01590;PF07228;PF13581;PF14016;PF00248;PF02441;PF07080;PF12680;PF14534;PF00440;PF06902;PF13459;PF13370;PF00067;PF04075 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_847648-849232.1 847648 849232 1584 1 1 1 0.68118 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 NC_003888.3_NC_003888.3_762 PF00067 PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_943850-964941.1 943850 964941 21091 21 45 5 0.76853 0.49 0.13 0.13 0.31 0.03 0.12 0.21 0.17 0.24 0.21 0.02 NC_003888.3_NC_003888.3_861;NC_003888.3_NC_003888.3_862;NC_003888.3_NC_003888.3_863;NC_003888.3_NC_003888.3_864;NC_003888.3_NC_003888.3_865;NC_003888.3_NC_003888.3_866;NC_003888.3_NC_003888.3_867;NC_003888.3_NC_003888.3_868;NC_003888.3_NC_003888.3_869;NC_003888.3_NC_003888.3_870;NC_003888.3_NC_003888.3_871;NC_003888.3_NC_003888.3_872;NC_003888.3_NC_003888.3_873;NC_003888.3_NC_003888.3_874;NC_003888.3_NC_003888.3_875;NC_003888.3_NC_003888.3_876;NC_003888.3_NC_003888.3_877;NC_003888.3_NC_003888.3_878;NC_003888.3_NC_003888.3_879;NC_003888.3_NC_003888.3_880;NC_003888.3_NC_003888.3_881 PF00903;PF01488;PF01243;PF02737;PF00561 PF03704;PF13424;PF13432;PF14559;PF00486;PF00561;PF12697;PF12146;PF05977;PF07690;PF13347;PF00903;PF03551;PF10070;PF03176;PF12900;PF01243;PF14833;PF03446;PF13579;PF07991;PF02826;PF02423;PF03807;PF02558;PF01488;PF01210;PF02737;PF02452;PF10021;PF04107;PF12867;PF03781;PF13230;PF13522;PF10017;PF13416;PF01547;PF07311;PF03767;PF12710;PF00296;PF00005;PF13555;PF13191 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1048129-1049368.1 1048129 1049368 1239 1 2 0 0.53429 antibacterial 0.87 0.06 0.16 0.25 0.00 0.08 0.24 0.23 0.20 0.04 0.27 NC_003888.3_NC_003888.3_954 PF02655;PF13535 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1050594-1054583.1 1050594 1054583 3989 4 26 2 0.68095 antibacterial 0.54 0.42 0.15 0.02 RiPP 0.01 0.07 0.15 0.07 0.66 0.01 0.04 NC_003888.3_NC_003888.3_956;NC_003888.3_NC_003888.3_957;NC_003888.3_NC_003888.3_958;NC_003888.3_NC_003888.3_959 PF08241;PF08242 PF02475;PF05401;PF02353;PF13489;PF05724;PF01135;PF01728;PF05175;PF01209;PF13847;PF03848;PF00398;PF13649;PF08241;PF08242;PF01497;PF01032;PF00950;PF00005;PF13604;PF13191;PF13555;PF02463;PF13175;PF13304;PF13476 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1058376-1058961.1 1058376 1058961 585 1 2 0 0.53564 antibacterial 0.59 0.05 0.12 0.19 0.00 0.05 0.46 0.17 0.14 0.03 0.19 NC_003888.3_NC_003888.3_963 PF00440;PF16859 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1222187-1222787.1 1222187 1222787 600 1 8 2 0.57647 0.43 0.38 0.24 0.03 Other 0.00 0.00 0.56 0.04 0.14 0.00 0.26 NC_003888.3_NC_003888.3_1119 PF08241;PF08242 PF01135;PF13489;PF01209;PF13847;PF08003;PF13649;PF08241;PF08242 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1275829-1279960.1 1275829 1279960 4131 4 7 4 0.63375 antibacterial 0.61 0.02 0.04 0.21 Terpene 0.00 0.04 0.15 0.10 0.00 0.01 0.77 NC_003888.3_NC_003888.3_1162;NC_003888.3_NC_003888.3_1163;NC_003888.3_NC_003888.3_1164;NC_003888.3_NC_003888.3_1165 PF08545;PF00171;PF00067;PF08541 PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1281883-1282540.1 1281883 1282540 657 1 1 0 0.50955 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1168 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1314725-1314968.1 1314725 1314968 243 1 1 0 0.66569 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_1201 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1319886-1320564.1 1319886 1320564 678 1 6 2 0.62377 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_1206 PF08241;PF08242 PF13489;PF13847;PF13649;PF08241;PF08242;PF01209 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1324335-1326727.1 1324335 1326727 2392 2 4 0 0.51368 antibacterial 0.87 0.06 0.18 0.25 0.00 0.06 0.12 0.36 0.20 0.02 0.28 NC_003888.3_NC_003888.3_1212;NC_003888.3_NC_003888.3_1213 PF00657;PF13472;PF00206;PF10397 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1327990-1363153.1 1327990 1363153 35163 34 86 17 0.83900 antibacterial 0.66 0.40 0.12 0.04 Polyketide 0.00 0.23 0.12 0.57 0.09 0.10 0.05 NC_003888.3_NC_003888.3_1216;NC_003888.3_NC_003888.3_1217;NC_003888.3_NC_003888.3_1218;NC_003888.3_NC_003888.3_1219;NC_003888.3_NC_003888.3_1220;NC_003888.3_NC_003888.3_1221;NC_003888.3_NC_003888.3_1222;NC_003888.3_NC_003888.3_1223;NC_003888.3_NC_003888.3_1224;NC_003888.3_NC_003888.3_1225;NC_003888.3_NC_003888.3_1226;NC_003888.3_NC_003888.3_1227;NC_003888.3_NC_003888.3_1228;NC_003888.3_NC_003888.3_1229;NC_003888.3_NC_003888.3_1230;NC_003888.3_NC_003888.3_1231;NC_003888.3_NC_003888.3_1232;NC_003888.3_NC_003888.3_1233;NC_003888.3_NC_003888.3_1234;NC_003888.3_NC_003888.3_1235;NC_003888.3_NC_003888.3_1236;NC_003888.3_NC_003888.3_1237;NC_003888.3_NC_003888.3_1238;NC_003888.3_NC_003888.3_1239;NC_003888.3_NC_003888.3_1240;NC_003888.3_NC_003888.3_1241;NC_003888.3_NC_003888.3_1242;NC_003888.3_NC_003888.3_1243;NC_003888.3_NC_003888.3_1244;NC_003888.3_NC_003888.3_1245;NC_003888.3_NC_003888.3_1246;NC_003888.3_NC_003888.3_1247;NC_003888.3_NC_003888.3_1248;NC_003888.3_NC_003888.3_1249 PF01266;PF02801;PF01636;PF08545;PF00202;PF04321;PF02770;PF00155;PF01494;PF00108;PF08541;PF00109;PF07993;PF04820;PF01370;PF03364;PF00561 PF12679;PF12730;PF13304;PF00005;PF13555;PF07730;PF00072;PF04545;PF08281;PF00196;PF01047;PF13463;PF12802;PF09339;PF01978;PF00480;PF07702;PF00392;PF13545;PF12680;PF14534;PF08281;PF04545;PF04542;PF00561;PF12697;PF12146;PF12697;PF12146;PF01674;PF00561;PF05057;PF02801;PF00109;PF00108;PF00550;PF00198;PF00364;PF02780;PF02779;PF00676;PF00456;PF02775;PF13292;PF08541;PF08545;PF00108;PF10501;PF00550;PF07993;PF01370;PF01966;PF07992;PF01494;PF13450;PF04820;PF01266;PF04542;PF08281;PF03109;PF01636;PF01163;PF04072;PF03007;PF01266;PF00890;PF01946;PF13450;PF13454;PF05834;PF07992;PF01613;PF10604;PF03364;PF00202;PF07993;PF01370;PF13460;PF04321;PF02770;PF09924;PF14079;PF00392;PF00155;PF16655;PF09423 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1405030-1412625.1 1405030 1412625 7595 6 13 4 0.56512 antibacterial 0.61 0.11 0.19 0.16 Polyketide 0.01 0.13 0.22 0.60 0.04 0.01 0.03 NC_003888.3_NC_003888.3_1290;NC_003888.3_NC_003888.3_1291;NC_003888.3_NC_003888.3_1292;NC_003888.3_NC_003888.3_1293;NC_003888.3_NC_003888.3_1294;NC_003888.3_NC_003888.3_1295 PF00106;PF00501;PF01370;PF08659 PF00501;PF13191;PF00931;PF13401;PF00196;PF08281;PF08281;PF10101;PF10935;PF13561;PF00106;PF08659;PF01370 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1988459-1989701.1 1988459 1989701 1242 1 3 1 0.51579 antibacterial 0.64 0.14 0.11 0.14 0.00 0.03 0.15 0.19 0.36 0.00 0.26 NC_003888.3_NC_003888.3_1819 PF08241 PF00590;PF13649;PF08241 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1991526-2027953.1 1991526 2027953 36427 36 54 7 0.73986 0.42 0.20 0.30 0.13 Other 0.05 0.07 0.67 0.05 0.06 0.12 0.02 NC_003888.3_NC_003888.3_1821;NC_003888.3_NC_003888.3_1822;NC_003888.3_NC_003888.3_1823;NC_003888.3_NC_003888.3_1824;NC_003888.3_NC_003888.3_1825;NC_003888.3_NC_003888.3_1826;NC_003888.3_NC_003888.3_1827;NC_003888.3_NC_003888.3_1828;NC_003888.3_NC_003888.3_1829;NC_003888.3_NC_003888.3_1830;NC_003888.3_NC_003888.3_1831;NC_003888.3_NC_003888.3_1832;NC_003888.3_NC_003888.3_1833;NC_003888.3_NC_003888.3_1834;NC_003888.3_NC_003888.3_1835;NC_003888.3_NC_003888.3_1836;NC_003888.3_NC_003888.3_1837;NC_003888.3_NC_003888.3_1838;NC_003888.3_NC_003888.3_1839;NC_003888.3_NC_003888.3_1840;NC_003888.3_NC_003888.3_1841;NC_003888.3_NC_003888.3_1842;NC_003888.3_NC_003888.3_1843;NC_003888.3_NC_003888.3_1844;NC_003888.3_NC_003888.3_1845;NC_003888.3_NC_003888.3_1846;NC_003888.3_NC_003888.3_1847;NC_003888.3_NC_003888.3_1848;NC_003888.3_NC_003888.3_1849;NC_003888.3_NC_003888.3_1850;NC_003888.3_NC_003888.3_1851;NC_003888.3_NC_003888.3_1852;NC_003888.3_NC_003888.3_1853;NC_003888.3_NC_003888.3_1854;NC_003888.3_NC_003888.3_1855;NC_003888.3_NC_003888.3_1856 PF00155;PF00171;PF00903;PF01408;PF06339;PF00583;PF00202 PF01903;PF00155;PF01979;PF07969;PF00266;PF13302;PF00583;PF13508;PF13673;PF14542;PF08445;PF00202;PF06339;PF12852;PF05721;PF00266;PF01323;PF13462;PF07081;PF00171;PF09339;PF01978;PF01614;PF13302;PF13420;PF00583;PF12746;PF00905;PF04542;PF08281;PF04545;PF03767;PF01095;PF00544;PF13229;PF00657;PF13472;PF13416;PF01547;PF04616;PF14100;PF01408;PF00528;PF00528;PF00920;PF00701;PF07729;PF00392;PF01325;PF11716;PF07690;PF13347;PF12681;PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2038268-2038841.1 2038268 2038841 573 1 2 0 0.50377 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1867 PF00440;PF02796 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2058373-2060092.1 2058373 2060092 1719 2 10 1 0.62310 antibacterial 0.83 0.14 0.16 0.20 0.00 0.05 0.45 0.26 0.14 0.06 0.11 NC_003888.3_NC_003888.3_1889;NC_003888.3_NC_003888.3_1890 PF02522 PF13814;PF06224;PF01978;PF12840;PF12802;PF01022;PF13412;PF09339;PF01047;PF02522 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2061088-2061898.1 2061088 2061898 810 1 4 0 0.50115 antibacterial 0.61 0.10 0.29 0.14 0.00 0.06 0.10 0.23 0.42 0.02 0.22 NC_003888.3_NC_003888.3_1892 PF01061;PF12730;PF12698;PF12679 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2412354-2454993.1 2412354 2454993 42639 41 81 2 0.82982 0.43 0.17 0.30 0.10 0.01 0.16 0.15 0.14 0.45 0.11 0.02 NC_003888.3_NC_003888.3_2204;NC_003888.3_NC_003888.3_2205;NC_003888.3_NC_003888.3_2206;NC_003888.3_NC_003888.3_2207;NC_003888.3_NC_003888.3_2208;NC_003888.3_NC_003888.3_2209;NC_003888.3_NC_003888.3_2210;NC_003888.3_NC_003888.3_2211;NC_003888.3_NC_003888.3_2212;NC_003888.3_NC_003888.3_2213;NC_003888.3_NC_003888.3_2214;NC_003888.3_NC_003888.3_2215;NC_003888.3_NC_003888.3_2216;NC_003888.3_NC_003888.3_2217;NC_003888.3_NC_003888.3_2218;NC_003888.3_NC_003888.3_2219;NC_003888.3_NC_003888.3_2220;NC_003888.3_NC_003888.3_2221;NC_003888.3_NC_003888.3_2222;NC_003888.3_NC_003888.3_2223;NC_003888.3_NC_003888.3_2224;NC_003888.3_NC_003888.3_2225;NC_003888.3_NC_003888.3_2226;NC_003888.3_NC_003888.3_2227;NC_003888.3_NC_003888.3_2228;NC_003888.3_NC_003888.3_2229;NC_003888.3_NC_003888.3_2230;NC_003888.3_NC_003888.3_2231;NC_003888.3_NC_003888.3_2232;NC_003888.3_NC_003888.3_2233;NC_003888.3_NC_003888.3_2234;NC_003888.3_NC_003888.3_2235;NC_003888.3_NC_003888.3_2236;NC_003888.3_NC_003888.3_2237;NC_003888.3_NC_003888.3_2238;NC_003888.3_NC_003888.3_2239;NC_003888.3_NC_003888.3_2240;NC_003888.3_NC_003888.3_2241;NC_003888.3_NC_003888.3_2242;NC_003888.3_NC_003888.3_2243;NC_003888.3_NC_003888.3_2244 PF01636;PF00106 PF00440;PF13305;PF08450;PF00400;PF07714;PF00069;PF01636;PF04149;PF13560;PF16571;PF00753;PF04149;PF13560;PF06779;PF07690;PF00083;PF03372;PF02548;PF13714;PF00005;PF13555;PF13191;PF13304;PF02702;PF13732;PF01061;PF12730;PF12698;PF12679;PF00931;PF13191;PF13401;PF03704;PF00486;PF02163;PF03807;PF03446;PF02153;PF07991;PF10727;PF02826;PF00106;PF05977;PF07690;PF00557;PF01126;PF02567;PF04213;PF04213;PF01497;PF01032;PF10003;PF00950;PF00005;PF13555;PF13191;PF13481;PF03193;PF13476;PF13521;PF13304;PF02463;PF13473;PF09375;PF04261;PF03239;PF09250;PF16859;PF00440;PF13022;PF00196;PF08281;PF00072;PF09243;PF13649;PF00144;PF07690;PF03137;PF06609;PF13347;PF00083 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2457953-2460026.1 2457953 2460026 2073 3 8 2 0.59109 antibacterial 0.75 0.07 0.17 0.16 0.02 0.01 0.06 0.24 0.28 0.02 0.38 NC_003888.3_NC_003888.3_2247;NC_003888.3_NC_003888.3_2248;NC_003888.3_NC_003888.3_2249 PF00106;PF08659 PF00106;PF08659;PF13561;PF13460;PF08643;PF12680;PF14534;PF07681 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2477018-2499570.1 2477018 2499570 22552 21 54 5 0.77903 antibacterial 0.50 0.32 0.29 0.16 0.03 0.07 0.16 0.06 0.21 0.42 0.07 NC_003888.3_NC_003888.3_2268;NC_003888.3_NC_003888.3_2269;NC_003888.3_NC_003888.3_2270;NC_003888.3_NC_003888.3_2271;NC_003888.3_NC_003888.3_2272;NC_003888.3_NC_003888.3_2273;NC_003888.3_NC_003888.3_2274;NC_003888.3_NC_003888.3_2275;NC_003888.3_NC_003888.3_2276;NC_003888.3_NC_003888.3_2277;NC_003888.3_NC_003888.3_2278;NC_003888.3_NC_003888.3_2279;NC_003888.3_NC_003888.3_2280;NC_003888.3_NC_003888.3_2281;NC_003888.3_NC_003888.3_2282;NC_003888.3_NC_003888.3_2283;NC_003888.3_NC_003888.3_2284;NC_003888.3_NC_003888.3_2285;NC_003888.3_NC_003888.3_2286;NC_003888.3_NC_003888.3_2287;NC_003888.3_NC_003888.3_2288 PF01636;PF08242;PF00432;PF08241;PF00534 PF00072;PF00196;PF04545;PF13551;PF13542;PF13384;PF08281;PF07690;PF00083;PF06609;PF07690;PF13347;PF00083;PF06779;PF12832;PF10670;PF13620;PF13578;PF01520;PF13243;PF13489;PF07021;PF13847;PF01135;PF03141;PF01209;PF08241;PF08242;PF13649;PF05175;PF03602;PF02353;PF03848;PF13524;PF00534;PF13692;PF13439;PF13579;PF00440;PF01636;PF13243;PF00432;PF02361;PF13481;PF13191;PF03193;PF00005;PF13555;PF01926;PF13304;PF12822;PF01464;PF01427;PF02557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2500696-2501287.1 2500696 2501287 591 1 1 1 0.50136 antibacterial 0.86 0.07 0.17 0.28 0.00 0.09 0.11 0.31 0.21 0.01 0.30 NC_003888.3_NC_003888.3_2290 PF00857 PF00857 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2501756-2502536.1 2501756 2502536 780 1 5 2 0.51687 antibacterial 0.56 0.07 0.07 0.44 0.00 0.39 0.15 0.40 0.02 0.02 0.03 NC_003888.3_NC_003888.3_2292 PF00975;PF00561 PF12697;PF00975;PF12146;PF00561;PF08386 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2520563-2524270.1 2520563 2524270 3707 6 6 1 0.61421 antibacterial 0.71 0.06 0.27 0.20 0.03 0.02 0.35 0.21 0.17 0.03 0.24 NC_003888.3_NC_003888.3_2309;NC_003888.3_NC_003888.3_2310;NC_003888.3_NC_003888.3_2311;NC_003888.3_NC_003888.3_2312;NC_003888.3_NC_003888.3_2313;NC_003888.3_NC_003888.3_2314 PF00583 PF07681;PF09335;PF10041;PF13302;PF00583;PF13349 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2538716-2546691.1 2538716 2546691 7975 6 8 0 0.67281 inhibitor 0.20 0.04 0.67 0.14 0.03 0.23 0.10 0.34 0.27 0.00 0.05 NC_003888.3_NC_003888.3_2328;NC_003888.3_NC_003888.3_2329;NC_003888.3_NC_003888.3_2330;NC_003888.3_NC_003888.3_2331;NC_003888.3_NC_003888.3_2332;NC_003888.3_NC_003888.3_2333 PF11253;PF00456;PF07690;PF06609;PF00083;PF00440;PF13022;PF06259 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2549403-2569910.1 2549403 2569910 20507 19 36 8 0.83648 antibacterial 0.52 0.24 0.19 0.25 Polyketide 0.00 0.23 0.14 0.69 0.02 0.01 0.09 NC_003888.3_NC_003888.3_2337;NC_003888.3_NC_003888.3_2338;NC_003888.3_NC_003888.3_2339;NC_003888.3_NC_003888.3_2340;NC_003888.3_NC_003888.3_2341;NC_003888.3_NC_003888.3_2342;NC_003888.3_NC_003888.3_2343;NC_003888.3_NC_003888.3_2344;NC_003888.3_NC_003888.3_2345;NC_003888.3_NC_003888.3_2346;NC_003888.3_NC_003888.3_2347;NC_003888.3_NC_003888.3_2348;NC_003888.3_NC_003888.3_2349;NC_003888.3_NC_003888.3_2350;NC_003888.3_NC_003888.3_2351;NC_003888.3_NC_003888.3_2352;NC_003888.3_NC_003888.3_2353;NC_003888.3_NC_003888.3_2354;NC_003888.3_NC_003888.3_2355 PF02801;PF08545;PF00108;PF08541;PF00107;PF00698;PF00109;PF00583 PF13302;PF00583;PF13508;PF13527;PF08445;PF13673;PF00144;PF13560;PF04149;PF00652;PF14200;PF03498;PF14440;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08392;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF07264;PF02566;PF13602;PF00107;PF16884 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2790361-2791648.1 2790361 2791648 1287 1 1 1 0.60537 antibacterial 0.83 0.06 0.17 0.30 0.00 0.11 0.08 0.32 0.20 0.03 0.31 NC_003888.3_NC_003888.3_2543 PF00171 PF00171 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2934113-2967589.1 2934113 2967589 33476 32 50 6 0.94003 antibacterial 0.55 0.04 0.18 0.17 Saccharide 0.02 0.08 0.17 0.02 0.04 0.66 0.01 NC_003888.3_NC_003888.3_2652;NC_003888.3_NC_003888.3_2653;NC_003888.3_NC_003888.3_2654;NC_003888.3_NC_003888.3_2655;NC_003888.3_NC_003888.3_2656;NC_003888.3_NC_003888.3_2657;NC_003888.3_NC_003888.3_2658;NC_003888.3_NC_003888.3_2659;NC_003888.3_NC_003888.3_2660;NC_003888.3_NC_003888.3_2661;NC_003888.3_NC_003888.3_2662;NC_003888.3_NC_003888.3_2663;NC_003888.3_NC_003888.3_2664;NC_003888.3_NC_003888.3_2665;NC_003888.3_NC_003888.3_2666;NC_003888.3_NC_003888.3_2667;NC_003888.3_NC_003888.3_2668;NC_003888.3_NC_003888.3_2669;NC_003888.3_NC_003888.3_2670;NC_003888.3_NC_003888.3_2671;NC_003888.3_NC_003888.3_2672;NC_003888.3_NC_003888.3_2673;NC_003888.3_NC_003888.3_2674;NC_003888.3_NC_003888.3_2675;NC_003888.3_NC_003888.3_2676;NC_003888.3_NC_003888.3_2677;NC_003888.3_NC_003888.3_2678;NC_003888.3_NC_003888.3_2679;NC_003888.3_NC_003888.3_2680;NC_003888.3_NC_003888.3_2681;NC_003888.3_NC_003888.3_2682;NC_003888.3_NC_003888.3_2683 PF02706;PF04932;PF02397;PF02668;PF00534;PF00501 PF07690;PF12832;PF06813;PF13360;PF00400;PF12894;PF02668;PF03781;PF00389;PF02826;PF03446;PF09860;PF08843;PF03777;PF00264;PF06236;PF03205;PF03777;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF09849;PF03777;PF03777;PF00501;PF12034;PF00092;PF13768;PF13519;PF12450;PF12679;PF12730 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3073684-3086671.1 3073684 3086671 12987 11 16 0 0.65922 antibacterial 0.61 0.07 0.11 0.17 0.00 0.07 0.40 0.19 0.16 0.03 0.19 NC_003888.3_NC_003888.3_2775;NC_003888.3_NC_003888.3_2776;NC_003888.3_NC_003888.3_2777;NC_003888.3_NC_003888.3_2778;NC_003888.3_NC_003888.3_2779;NC_003888.3_NC_003888.3_2780;NC_003888.3_NC_003888.3_2781;NC_003888.3_NC_003888.3_2782;NC_003888.3_NC_003888.3_2783;NC_003888.3_NC_003888.3_2784;NC_003888.3_NC_003888.3_2785 PF00440;PF00296;PF00563;PF00990;PF08448;PF00989;PF13426;PF13188;PF09250;PF14592;PF00544;PF01177;PF01177;PF00389;PF02826;PF01425 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3130824-3150744.1 3130824 3150744 19920 20 31 3 0.67402 antibacterial 0.62 0.12 0.23 0.13 0.00 0.10 0.20 0.16 0.47 0.05 0.04 NC_003888.3_NC_003888.3_2837;NC_003888.3_NC_003888.3_2838;NC_003888.3_NC_003888.3_2839;NC_003888.3_NC_003888.3_2840;NC_003888.3_NC_003888.3_2841;NC_003888.3_NC_003888.3_2842;NC_003888.3_NC_003888.3_2843;NC_003888.3_NC_003888.3_2844;NC_003888.3_NC_003888.3_2845;NC_003888.3_NC_003888.3_2846;NC_003888.3_NC_003888.3_2847;NC_003888.3_NC_003888.3_2848;NC_003888.3_NC_003888.3_2849;NC_003888.3_NC_003888.3_2850;NC_003888.3_NC_003888.3_2851;NC_003888.3_NC_003888.3_2852;NC_003888.3_NC_003888.3_2853;NC_003888.3_NC_003888.3_2854;NC_003888.3_NC_003888.3_2855;NC_003888.3_NC_003888.3_2856 PF00903;PF00067;PF00561 PF12158;PF03259;PF05331;PF08784;PF12802;PF09339;PF03029;PF00067;PF02627;PF03096;PF12697;PF00561;PF12146;PF12681;PF00903;PF00083;PF07690;PF06779;PF12832;PF04286;PF00657;PF13472;PF17182;PF09922;PF08044;PF13304;PF00005;PF03308;PF13555;PF06182;PF06182 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3316757-3320498.1 3316757 3320498 3741 1 3 0 0.50004 antibacterial 0.81 0.06 0.21 0.24 0.00 0.07 0.07 0.21 0.13 0.33 0.23 NC_003888.3_NC_003888.3_2989 PF13632;PF13641;PF13506 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3526136-3603907.1 3526136 3603907 77771 35 87 19 0.94701 antibacterial 0.74 0.25 0.08 0.10 NRP 0.00 0.90 0.04 0.14 0.00 0.00 0.01 NC_003888.3_NC_003888.3_3169;NC_003888.3_NC_003888.3_3170;NC_003888.3_NC_003888.3_3171;NC_003888.3_NC_003888.3_3172;NC_003888.3_NC_003888.3_3173;NC_003888.3_NC_003888.3_3174;NC_003888.3_NC_003888.3_3175;NC_003888.3_NC_003888.3_3176;NC_003888.3_NC_003888.3_3177;NC_003888.3_NC_003888.3_3178;NC_003888.3_NC_003888.3_3179;NC_003888.3_NC_003888.3_3180;NC_003888.3_NC_003888.3_3181;NC_003888.3_NC_003888.3_3182;NC_003888.3_NC_003888.3_3183;NC_003888.3_NC_003888.3_3184;NC_003888.3_NC_003888.3_3185;NC_003888.3_NC_003888.3_3186;NC_003888.3_NC_003888.3_3187;NC_003888.3_NC_003888.3_3188;NC_003888.3_NC_003888.3_3189;NC_003888.3_NC_003888.3_3190;NC_003888.3_NC_003888.3_3191;NC_003888.3_NC_003888.3_3192;NC_003888.3_NC_003888.3_3193;NC_003888.3_NC_003888.3_3194;NC_003888.3_NC_003888.3_3195;NC_003888.3_NC_003888.3_3196;NC_003888.3_NC_003888.3_3197;NC_003888.3_NC_003888.3_3198;NC_003888.3_NC_003888.3_3199;NC_003888.3_NC_003888.3_3200;NC_003888.3_NC_003888.3_3201;NC_003888.3_NC_003888.3_3202;NC_003888.3_NC_003888.3_3203 PF02770;PF00441;PF00501;PF00155;PF08545;PF08028;PF00903;PF00975;PF01494;PF00668;PF01266;PF01636;PF02801;PF00702;PF08541;PF02668;PF00109;PF04820;PF00561 PF00122;PF00702;PF08282;PF00689;PF00486;PF03704;PF13191;PF00931;PF13401;PF03621;PF03403;PF02153;PF01266;PF09056;PF12679;PF12730;PF13304;PF00005;PF13476;PF13555;PF07730;PF00072;PF00196;PF08281;PF14493;PF00155;PF12897;PF01070;PF01645;PF00977;PF00478;PF03060;PF00903;PF13669;PF14696;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00668;PF00501;PF13193;PF00550;PF00975;PF12697;PF00561;PF00561;PF12146;PF12697;PF01636;PF02463;PF00005;PF13555;PF00664;PF02668;PF01663;PF01261;PF02126;PF01026;PF01261;PF01040;PF07994;PF01658;PF01494;PF05834;PF04820;PF00070;PF07992;PF00890;PF01266;PF12831;PF13450;PF01134;PF08541;PF08545;PF00441;PF08028;PF02770;PF02801;PF00109;PF00550;PF00589;PF14659 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3661247-3661991.1 3661247 3661991 744 1 1 0 0.53431 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_3260 PF14016 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3782902-3788943.1 3782902 3788943 6041 7 14 1 0.63217 antibacterial 0.55 0.17 0.20 0.16 RiPP 0.00 0.01 0.03 0.04 0.92 0.00 0.00 NC_003888.3_NC_003888.3_3369;NC_003888.3_NC_003888.3_3370;NC_003888.3_NC_003888.3_3371;NC_003888.3_NC_003888.3_3372;NC_003888.3_NC_003888.3_3373;NC_003888.3_NC_003888.3_3374;NC_003888.3_NC_003888.3_3375 PF00171 PF12698;PF01061;PF13732;PF02702;PF13304;PF00005;PF13191;PF13555;PF03551;PF00171;PF13560;PF12844;PF13581;PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3812960-3814873.1 3812960 3814873 1913 2 7 0 0.58767 antibacterial 0.78 0.05 0.11 0.17 RiPP 0.00 0.02 0.13 0.05 0.76 0.01 0.03 NC_003888.3_NC_003888.3_3403;NC_003888.3_NC_003888.3_3404 PF08402;PF13304;PF13191;PF00005;PF01078;PF03215;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3818490-3826210.1 3818490 3826210 7720 8 31 5 0.63426 cytotoxic 0.27 0.60 0.15 0.04 0.05 0.08 0.16 0.07 0.05 0.31 0.38 NC_003888.3_NC_003888.3_3409;NC_003888.3_NC_003888.3_3410;NC_003888.3_NC_003888.3_3411;NC_003888.3_NC_003888.3_3412;NC_003888.3_NC_003888.3_3413;NC_003888.3_NC_003888.3_3414;NC_003888.3_NC_003888.3_3415;NC_003888.3_NC_003888.3_3416 PF01266;PF08242;PF08241;PF04055;PF00535 PF13489;PF01209;PF13847;PF08241;PF08242;PF13649;PF07992;PF01946;PF03486;PF01134;PF12831;PF01266;PF00890;PF01262;PF13450;PF00070;PF02852;PF07291;PF04055;PF01048;PF01983;PF12804;PF09837;PF13641;PF00535;PF10111;PF13506;PF13632;PF13340;PF01609;PF13586 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4013072-4023169.1 4013072 4023169 10097 11 28 3 0.73000 antibacterial 0.63 0.09 0.09 0.13 0.02 0.11 0.24 0.30 0.20 0.01 0.22 NC_003888.3_NC_003888.3_3579;NC_003888.3_NC_003888.3_3580;NC_003888.3_NC_003888.3_3581;NC_003888.3_NC_003888.3_3582;NC_003888.3_NC_003888.3_3583;NC_003888.3_NC_003888.3_3584;NC_003888.3_NC_003888.3_3585;NC_003888.3_NC_003888.3_3586;NC_003888.3_NC_003888.3_3587;NC_003888.3_NC_003888.3_3588;NC_003888.3_NC_003888.3_3589 PF01757;PF00067;PF00561 PF07883;PF00067;PF01925;PF02956;PF00196;PF04545;PF08281;PF13936;PF00072;PF07730;PF00196;PF08281;PF04545;PF14493;PF13936;PF00072;PF07730;PF01757;PF12697;PF06259;PF12697;PF07859;PF00561;PF00756;PF12146;PF00326;PF01764;PF00135 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4024590-4025406.1 4024590 4025406 816 1 1 0 0.53602 antibacterial 0.83 0.07 0.19 0.27 0.05 0.09 0.07 0.32 0.20 0.03 0.29 NC_003888.3_NC_003888.3_3591 PF03301 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4026216-4027671.1 4026216 4027671 1455 1 5 0 0.51398 inhibitor 0.27 0.05 0.59 0.11 0.02 0.19 0.25 0.29 0.22 0.00 0.03 NC_003888.3_NC_003888.3_3593 PF13347;PF07690;PF05977;PF00083;PF06609 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4115027-4137513.1 4115027 4137513 22486 20 36 3 0.90015 antibacterial 0.62 0.15 0.09 0.11 RiPP 0.00 0.08 0.14 0.14 0.58 0.02 0.09 NC_003888.3_NC_003888.3_3686;NC_003888.3_NC_003888.3_3687;NC_003888.3_NC_003888.3_3688;NC_003888.3_NC_003888.3_3689;NC_003888.3_NC_003888.3_3690;NC_003888.3_NC_003888.3_3691;NC_003888.3_NC_003888.3_3692;NC_003888.3_NC_003888.3_3693;NC_003888.3_NC_003888.3_3694;NC_003888.3_NC_003888.3_3695;NC_003888.3_NC_003888.3_3696;NC_003888.3_NC_003888.3_3697;NC_003888.3_NC_003888.3_3698;NC_003888.3_NC_003888.3_3699;NC_003888.3_NC_003888.3_3700;NC_003888.3_NC_003888.3_3701;NC_003888.3_NC_003888.3_3702;NC_003888.3_NC_003888.3_3703;NC_003888.3_NC_003888.3_3704;NC_003888.3_NC_003888.3_3705 PF08241;PF08242;PF01757 PF05175;PF13489;PF07021;PF13847;PF13649;PF08241;PF08242;PF05724;PF00174;PF13231;PF00313;PF02518;PF07730;PF13796;PF00005;PF13555;PF13191;PF13401;PF13304;PF02687;PF12704;PF02687;PF12704;PF00005;PF13304;PF13555;PF00196;PF08281;PF04545;PF00072;PF07730;PF00487;PF01757;PF06259;PF10756;PF02342 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4142256-4144254.1 4142256 4144254 1998 2 2 1 0.55784 antibacterial 0.75 0.00 0.03 0.00 Polyketide-Terpene 0.00 0.00 0.18 0.56 0.01 0.02 0.64 NC_003888.3_NC_003888.3_3711;NC_003888.3_NC_003888.3_3712 PF00067 PF00440;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4584105-4584870.1 4584105 4584870 765 1 3 2 0.51264 antibacterial 0.81 0.01 0.18 0.07 0.01 0.01 0.02 0.06 0.41 0.00 0.49 NC_003888.3_NC_003888.3_4107 PF00106;PF08659 PF00106;PF08659;PF13561 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4589507-4589801.1 4589507 4589801 294 1 1 0 0.50763 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4115 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4628356-4628737.1 4628356 4628737 381 1 1 1 0.53370 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_4161 PF00903 PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4629723-4630965.1 4629723 4630965 1242 1 1 1 0.59882 antibacterial 0.78 0.02 0.27 0.18 0.00 0.07 0.04 0.22 0.49 0.02 0.19 NC_003888.3_NC_003888.3_4163 PF05147 PF05147 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4670419-4671589.1 4670419 4671589 1170 1 3 0 0.52337 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4197 PF00652;PF14200;PF03498 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4769019-4804183.1 4769019 4804183 35164 34 81 13 0.83564 antibacterial 0.52 0.26 0.18 0.19 0.01 0.27 0.19 0.13 0.42 0.04 0.02 NC_003888.3_NC_003888.3_4291;NC_003888.3_NC_003888.3_4292;NC_003888.3_NC_003888.3_4293;NC_003888.3_NC_003888.3_4294;NC_003888.3_NC_003888.3_4295;NC_003888.3_NC_003888.3_4296;NC_003888.3_NC_003888.3_4297;NC_003888.3_NC_003888.3_4298;NC_003888.3_NC_003888.3_4299;NC_003888.3_NC_003888.3_4300;NC_003888.3_NC_003888.3_4301;NC_003888.3_NC_003888.3_4302;NC_003888.3_NC_003888.3_4303;NC_003888.3_NC_003888.3_4304;NC_003888.3_NC_003888.3_4305;NC_003888.3_NC_003888.3_4306;NC_003888.3_NC_003888.3_4307;NC_003888.3_NC_003888.3_4308;NC_003888.3_NC_003888.3_4309;NC_003888.3_NC_003888.3_4310;NC_003888.3_NC_003888.3_4311;NC_003888.3_NC_003888.3_4312;NC_003888.3_NC_003888.3_4313;NC_003888.3_NC_003888.3_4314;NC_003888.3_NC_003888.3_4315;NC_003888.3_NC_003888.3_4316;NC_003888.3_NC_003888.3_4317;NC_003888.3_NC_003888.3_4318;NC_003888.3_NC_003888.3_4319;NC_003888.3_NC_003888.3_4320;NC_003888.3_NC_003888.3_4321;NC_003888.3_NC_003888.3_4322;NC_003888.3_NC_003888.3_4323;NC_003888.3_NC_003888.3_4324 PF01636;PF00378;PF02770;PF02786;PF00289;PF01039;PF08028;PF00441;PF02771;PF01243;PF02785;PF00501;PF04738 PF05685;PF01909;PF13427;PF14606;PF00657;PF13472;PF02909;PF00440;PF00005;PF13604;PF02702;PF13304;PF13732;PF01061;PF12698;PF07730;PF13581;PF00072;PF04545;PF00196;PF08281;PF13412;PF14534;PF12680;PF07366;PF00266;PF01565;PF02913;PF13183;PF13534;PF03403;PF12740;PF13517;PF01839;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF04978;PF12867;PF14435;PF00293;PF00892;PF12802;PF01047;PF13463;PF13545;PF01638;PF04738;PF00069;PF07714;PF01636;PF11716;PF04978;PF12867;PF08608;PF07287;PF01039;PF00289;PF02786;PF02655;PF07478;PF02222;PF02785;PF00364;PF02771;PF02770;PF00441;PF08028;PF00501;PF13193;PF00378;PF16113;PF00440;PF10590;PF01243 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4869136-4875516.1 4869136 4875516 6380 6 5 0 0.58407 antibacterial 0.60 0.05 0.09 0.31 Polyketide 0.00 0.00 0.20 0.67 0.08 0.00 0.04 NC_003888.3_NC_003888.3_4384;NC_003888.3_NC_003888.3_4385;NC_003888.3_NC_003888.3_4386;NC_003888.3_NC_003888.3_4387;NC_003888.3_NC_003888.3_4388;NC_003888.3_NC_003888.3_4389 PF07228;PF00440;PF07690;PF08281;PF04542 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4876022-4876625.1 4876022 4876625 603 1 1 0 0.57178 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_4391 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4882031-4884893.1 4882031 4884893 2862 4 5 1 0.57462 antibacterial 0.55 0.08 0.11 0.30 0.00 0.02 0.45 0.48 0.02 0.02 0.03 NC_003888.3_NC_003888.3_4398;NC_003888.3_NC_003888.3_4399;NC_003888.3_NC_003888.3_4400;NC_003888.3_NC_003888.3_4401 PF00857 PF13977;PF00440;PF07690;PF13347;PF00857 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4895197-4896619.1 4895197 4896619 1422 1 1 1 0.63385 antibacterial 0.63 0.07 0.40 0.23 0.00 0.46 0.09 0.23 0.06 0.03 0.18 NC_003888.3_NC_003888.3_4412 PF00668 PF00668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4897543-4901975.1 4897543 4901975 4432 4 17 3 0.53438 0.19 0.07 0.13 0.29 0.00 0.23 0.40 0.22 0.14 0.00 0.02 NC_003888.3_NC_003888.3_4414;NC_003888.3_NC_003888.3_4415;NC_003888.3_NC_003888.3_4416;NC_003888.3_NC_003888.3_4417 PF01636;PF00975;PF00561 PF01135;PF13847;PF13578;PF12697;PF00975;PF00561;PF10230;PF03096;PF12695;PF12146;PF16859;PF00440;PF00069;PF07714;PF01636;PF14200;PF00652 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4903478-4914412.1 4903478 4914412 10934 11 35 3 0.57988 antibacterial 0.53 0.12 0.11 0.19 0.02 0.05 0.41 0.07 0.33 0.04 0.11 NC_003888.3_NC_003888.3_4420;NC_003888.3_NC_003888.3_4421;NC_003888.3_NC_003888.3_4422;NC_003888.3_NC_003888.3_4423;NC_003888.3_NC_003888.3_4424;NC_003888.3_NC_003888.3_4425;NC_003888.3_NC_003888.3_4426;NC_003888.3_NC_003888.3_4427;NC_003888.3_NC_003888.3_4428;NC_003888.3_NC_003888.3_4429;NC_003888.3_NC_003888.3_4430 PF01636;PF04055;PF00903 PF13564;PF13280;PF02082;PF08279;PF12840;PF08220;PF09339;PF13412;PF12802;PF13542;PF13551;PF13384;PF13518;PF13404;PF00903;PF12681;PF00069;PF07714;PF01636;PF13385;PF00069;PF07714;PF01636;PF00652;PF13396;PF01977;PF01040;PF02441;PF12802;PF01047;PF13412;PF13404;PF13545;PF01037;PF04055 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4915291-4973632.1 4915291 4973632 58341 57 75 13 0.85901 0.40 0.27 0.26 0.18 0.00 0.22 0.18 0.42 0.04 0.32 0.02 NC_003888.3_NC_003888.3_4432;NC_003888.3_NC_003888.3_4433;NC_003888.3_NC_003888.3_4434;NC_003888.3_NC_003888.3_4435;NC_003888.3_NC_003888.3_4436;NC_003888.3_NC_003888.3_4437;NC_003888.3_NC_003888.3_4438;NC_003888.3_NC_003888.3_4439;NC_003888.3_NC_003888.3_4440;NC_003888.3_NC_003888.3_4441;NC_003888.3_NC_003888.3_4442;NC_003888.3_NC_003888.3_4443;NC_003888.3_NC_003888.3_4444;NC_003888.3_NC_003888.3_4445;NC_003888.3_NC_003888.3_4446;NC_003888.3_NC_003888.3_4447;NC_003888.3_NC_003888.3_4448;NC_003888.3_NC_003888.3_4449;NC_003888.3_NC_003888.3_4450;NC_003888.3_NC_003888.3_4451;NC_003888.3_NC_003888.3_4452;NC_003888.3_NC_003888.3_4453;NC_003888.3_NC_003888.3_4454;NC_003888.3_NC_003888.3_4455;NC_003888.3_NC_003888.3_4456;NC_003888.3_NC_003888.3_4457;NC_003888.3_NC_003888.3_4458;NC_003888.3_NC_003888.3_4459;NC_003888.3_NC_003888.3_4460;NC_003888.3_NC_003888.3_4461;NC_003888.3_NC_003888.3_4462;NC_003888.3_NC_003888.3_4463;NC_003888.3_NC_003888.3_4464;NC_003888.3_NC_003888.3_4465;NC_003888.3_NC_003888.3_4466;NC_003888.3_NC_003888.3_4467;NC_003888.3_NC_003888.3_4468;NC_003888.3_NC_003888.3_4469;NC_003888.3_NC_003888.3_4470;NC_003888.3_NC_003888.3_4471;NC_003888.3_NC_003888.3_4472;NC_003888.3_NC_003888.3_4473;NC_003888.3_NC_003888.3_4474;NC_003888.3_NC_003888.3_4475;NC_003888.3_NC_003888.3_4476;NC_003888.3_NC_003888.3_4477;NC_003888.3_NC_003888.3_4478;NC_003888.3_NC_003888.3_4479;NC_003888.3_NC_003888.3_4480;NC_003888.3_NC_003888.3_4481;NC_003888.3_NC_003888.3_4482;NC_003888.3_NC_003888.3_4483;NC_003888.3_NC_003888.3_4484;NC_003888.3_NC_003888.3_4485;NC_003888.3_NC_003888.3_4486;NC_003888.3_NC_003888.3_4487;NC_003888.3_NC_003888.3_4488 PF01636;PF02803;PF08242;PF00106;PF00108;PF08659;PF08241;PF00109;PF04055;PF00583;PF00501;PF01370;PF00535 PF13420;PF13673;PF00583;PF13508;PF13527;PF08445;PF14542;PF14012;PF00375;PF00440;PF01575;PF13561;PF00106;PF08659;PF01370;PF03435;PF00108;PF00109;PF02803;PF00501;PF13489;PF13847;PF08241;PF08242;PF13649;PF05175;PF00313;PF08206;PF02621;PF00069;PF07714;PF01636;PF01580;PF13401;PF02456;PF13555;PF16697;PF10224;PF06013;PF10824;PF14256;PF10099;PF16976;PF00437;PF01580;PF00005;PF06414;PF01926;PF13238;PF00482;PF00482;PF07811;PF13400;PF07811;PF13400;PF06013;PF06013;PF04149;PF13560;PF12844;PF13581;PF03704;PF13428;PF01478;PF04055;PF00704;PF01522;PF13641;PF00535;PF10111;PF13704;PF12804;PF13506;PF03142;PF13632 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4974811-4975796.1 4974811 4975796 985 2 7 2 0.72112 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_4490;NC_003888.3_NC_003888.3_4491 PF08241;PF08242 PF01209;PF13489;PF13847;PF13649;PF08241;PF08242;PF03793 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5055827-5059681.1 5055827 5059681 3854 2 10 2 0.66280 antibacterial 0.59 0.18 0.32 0.32 Polyketide 0.01 0.36 0.20 0.53 0.05 0.02 0.04 NC_003888.3_NC_003888.3_4566;NC_003888.3_NC_003888.3_4567 PF00107;PF01370 PF13676;PF00931;PF13401;PF13424;PF13374;PF13460;PF05368;PF01073;PF01370;PF00107 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5061858-5063669.1 5061858 5063669 1811 3 9 2 0.55600 0.40 0.25 0.23 0.05 0.01 0.09 0.26 0.05 0.21 0.00 0.38 NC_003888.3_NC_003888.3_4570;NC_003888.3_NC_003888.3_4571;NC_003888.3_NC_003888.3_4572 PF08241;PF08242 PF13452;PF01575;PF13452;PF01575;PF13847;PF13489;PF08241;PF08242;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5297580-5307574.1 5297580 5307574 9994 7 20 4 0.74276 0.26 0.39 0.16 0.11 0.04 0.00 0.15 0.12 0.03 0.33 0.41 NC_003888.3_NC_003888.3_4799;NC_003888.3_NC_003888.3_4800;NC_003888.3_NC_003888.3_4801;NC_003888.3_NC_003888.3_4802;NC_003888.3_NC_003888.3_4803;NC_003888.3_NC_003888.3_4804;NC_003888.3_NC_003888.3_4805 PF01266;PF01494;PF01593;PF00535 PF01642;PF01494;PF05834;PF03486;PF01593;PF07992;PF01266;PF00890;PF13450;PF01946;PF13738;PF00440;PF02909;PF13489;PF13578;PF13578;PF09586;PF13641;PF00535;PF10111 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5510515-5536994.1 5510515 5536994 26479 28 70 17 0.86345 antibacterial 0.56 0.41 0.15 0.20 Polyketide 0.02 0.09 0.05 0.90 0.00 0.05 0.01 NC_003888.3_NC_003888.3_4999;NC_003888.3_NC_003888.3_5000;NC_003888.3_NC_003888.3_5001;NC_003888.3_NC_003888.3_5002;NC_003888.3_NC_003888.3_5003;NC_003888.3_NC_003888.3_5004;NC_003888.3_NC_003888.3_5005;NC_003888.3_NC_003888.3_5006;NC_003888.3_NC_003888.3_5007;NC_003888.3_NC_003888.3_5008;NC_003888.3_NC_003888.3_5009;NC_003888.3_NC_003888.3_5010;NC_003888.3_NC_003888.3_5011;NC_003888.3_NC_003888.3_5012;NC_003888.3_NC_003888.3_5013;NC_003888.3_NC_003888.3_5014;NC_003888.3_NC_003888.3_5015;NC_003888.3_NC_003888.3_5016;NC_003888.3_NC_003888.3_5017;NC_003888.3_NC_003888.3_5018;NC_003888.3_NC_003888.3_5019;NC_003888.3_NC_003888.3_5020;NC_003888.3_NC_003888.3_5021;NC_003888.3_NC_003888.3_5022;NC_003888.3_NC_003888.3_5023;NC_003888.3_NC_003888.3_5024;NC_003888.3_NC_003888.3_5025;NC_003888.3_NC_003888.3_5026 PF02801;PF08242;PF00106;PF02770;PF08240;PF00725;PF08659;PF08028;PF00109;PF00441;PF08241;PF01243;PF03992;PF02737;PF00107;PF01370;PF03364 PF00440;PF16884;PF08240;PF00107;PF13602;PF00246;PF13577;PF12680;PF02737;PF00725;PF08240;PF00107;PF13602;PF08240;PF00107;PF13602;PF07690;PF00083;PF05977;PF13347;PF01243;PF12900;PF05368;PF01370;PF16363;PF13460;PF02770;PF08028;PF00441;PF03992;PF02909;PF00440;PF07690;PF06779;PF00083;PF03176;PF12349;PF00486;PF03704;PF13561;PF00106;PF08659;PF01370;PF00109;PF02801;PF00109;PF02801;PF00550;PF10604;PF03364;PF00753;PF01613;PF04978;PF12867;PF13489;PF13847;PF01209;PF05175;PF08241;PF13578;PF08242;PF13649;PF03848;PF05724;PF13560;PF12844;PF13443;PF13413;PF01381;PF07883 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5577211-5580068.1 5577211 5580068 2857 3 12 0 0.54923 antibacterial 0.59 0.10 0.23 0.07 RiPP 0.00 0.01 0.04 0.03 0.91 0.00 0.01 NC_003888.3_NC_003888.3_5060;NC_003888.3_NC_003888.3_5061;NC_003888.3_NC_003888.3_5062 PF00005;PF13555;PF13304;PF12679;PF01061;PF12730;PF12698;PF13346;PF03379;PF06182;PF07730;PF13581 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5715871-5718468.1 5715871 5718468 2597 3 17 3 0.71334 0.48 0.36 0.17 0.07 RiPP 0.02 0.06 0.10 0.12 0.66 0.02 0.04 NC_003888.3_NC_003888.3_5189;NC_003888.3_NC_003888.3_5190;NC_003888.3_NC_003888.3_5191 PF08241;PF08242;PF00891 PF13489;PF05175;PF02353;PF00891;PF13847;PF00398;PF01209;PF13649;PF08241;PF08242;PF02463;PF13304;PF00005;PF13191;PF13476;PF13555;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5765662-5797479.1 5765662 5797479 31817 37 60 9 0.74897 antibacterial 0.58 0.46 0.18 0.14 Polyketide 0.02 0.07 0.07 0.84 0.04 0.02 0.02 NC_003888.3_NC_003888.3_5224;NC_003888.3_NC_003888.3_5225;NC_003888.3_NC_003888.3_5226;NC_003888.3_NC_003888.3_5227;NC_003888.3_NC_003888.3_5228;NC_003888.3_NC_003888.3_5229;NC_003888.3_NC_003888.3_5230;NC_003888.3_NC_003888.3_5231;NC_003888.3_NC_003888.3_5232;NC_003888.3_NC_003888.3_5233;NC_003888.3_NC_003888.3_5234;NC_003888.3_NC_003888.3_5235;NC_003888.3_NC_003888.3_5236;NC_003888.3_NC_003888.3_5237;NC_003888.3_NC_003888.3_5238;NC_003888.3_NC_003888.3_5239;NC_003888.3_NC_003888.3_5240;NC_003888.3_NC_003888.3_5241;NC_003888.3_NC_003888.3_5242;NC_003888.3_NC_003888.3_5243;NC_003888.3_NC_003888.3_5244;NC_003888.3_NC_003888.3_5245;NC_003888.3_NC_003888.3_5246;NC_003888.3_NC_003888.3_5247;NC_003888.3_NC_003888.3_5248;NC_003888.3_NC_003888.3_5249;NC_003888.3_NC_003888.3_5250;NC_003888.3_NC_003888.3_5251;NC_003888.3_NC_003888.3_5252;NC_003888.3_NC_003888.3_5253;NC_003888.3_NC_003888.3_5254;NC_003888.3_NC_003888.3_5255;NC_003888.3_NC_003888.3_5256;NC_003888.3_NC_003888.3_5257;NC_003888.3_NC_003888.3_5258;NC_003888.3_NC_003888.3_5259;NC_003888.3_NC_003888.3_5260 PF01266;PF02801;PF01494;PF00108;PF00109;PF01243;PF03992;PF01050;PF03364 PF05331;PF03029;PF07992;PF01494;PF00070;PF00877;PF07813;PF13560;PF00440;PF09339;PF13340;PF01609;PF13359;PF13612;PF13586;PF11583;PF11695;PF00905;PF01098;PF08239;PF02518;PF00512;PF00672;PF00782;PF05706;PF08378;PF02735;PF13628;PF01243;PF16242;PF11350;PF04673;PF10604;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF12852;PF11699;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF01266;PF01734;PF01037;PF13412;PF12802;PF09339;PF13404;PF00881;PF13613;PF04545;PF01609;PF13359 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5852345-5852987.1 5852345 5852987 642 1 1 0 0.57111 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5315 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5933595-5938532.1 5933595 5938532 4937 3 17 0 0.55002 antibacterial 0.74 0.10 0.12 0.11 RiPP 0.00 0.04 0.08 0.03 0.85 0.00 0.00 NC_003888.3_NC_003888.3_5381;NC_003888.3_NC_003888.3_5382;NC_003888.3_NC_003888.3_5383 PF13401;PF00005;PF13191;PF06414;PF01935;PF00664;PF02463;PF00005;PF13191;PF00664;PF00005;PF13481;PF13604;PF13476;PF13191;PF02702;PF13304 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5970587-5971837.1 5970587 5971837 1250 3 3 0 0.59048 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5414;NC_003888.3_NC_003888.3_5415;NC_003888.3_NC_003888.3_5416 PF00440;PF14012;PF13828 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6027788-6046270.1 6027788 6046270 18482 15 22 1 0.74782 antibacterial 0.64 0.07 0.12 0.18 0.00 0.05 0.38 0.21 0.18 0.02 0.19 NC_003888.3_NC_003888.3_5463;NC_003888.3_NC_003888.3_5464;NC_003888.3_NC_003888.3_5465;NC_003888.3_NC_003888.3_5466;NC_003888.3_NC_003888.3_5467;NC_003888.3_NC_003888.3_5468;NC_003888.3_NC_003888.3_5469;NC_003888.3_NC_003888.3_5470;NC_003888.3_NC_003888.3_5471;NC_003888.3_NC_003888.3_5472;NC_003888.3_NC_003888.3_5473;NC_003888.3_NC_003888.3_5474;NC_003888.3_NC_003888.3_5475;NC_003888.3_NC_003888.3_5476;NC_003888.3_NC_003888.3_5477 PF01039 PF00440;PF04264;PF08124;PF02278;PF02884;PF01039;PF06833;PF13822;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF10370;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6242667-6244234.1 6242667 6244234 1567 2 2 0 0.63827 antibacterial 0.87 0.09 0.17 0.29 RiPP 0.00 0.01 0.02 0.04 0.89 0.02 0.04 NC_003888.3_NC_003888.3_5653;NC_003888.3_NC_003888.3_5654 PF00082;PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6432592-6469131.1 6432592 6469131 36539 26 87 23 0.94502 0.48 0.43 0.14 0.24 NRP-Polyketide 0.01 0.69 0.02 0.94 0.00 0.02 0.00 NC_003888.3_NC_003888.3_5808;NC_003888.3_NC_003888.3_5809;NC_003888.3_NC_003888.3_5810;NC_003888.3_NC_003888.3_5811;NC_003888.3_NC_003888.3_5812;NC_003888.3_NC_003888.3_5813;NC_003888.3_NC_003888.3_5814;NC_003888.3_NC_003888.3_5815;NC_003888.3_NC_003888.3_5816;NC_003888.3_NC_003888.3_5817;NC_003888.3_NC_003888.3_5818;NC_003888.3_NC_003888.3_5819;NC_003888.3_NC_003888.3_5820;NC_003888.3_NC_003888.3_5821;NC_003888.3_NC_003888.3_5822;NC_003888.3_NC_003888.3_5823;NC_003888.3_NC_003888.3_5824;NC_003888.3_NC_003888.3_5825;NC_003888.3_NC_003888.3_5826;NC_003888.3_NC_003888.3_5827;NC_003888.3_NC_003888.3_5828;NC_003888.3_NC_003888.3_5829;NC_003888.3_NC_003888.3_5830;NC_003888.3_NC_003888.3_5831;NC_003888.3_NC_003888.3_5832;NC_003888.3_NC_003888.3_5833 PF08242;PF00106;PF02770;PF00108;PF00891;PF00698;PF00441;PF00501;PF01370;PF00155;PF08545;PF08028;PF07993;PF00355;PF02719;PF00975;PF01553;PF08241;PF02771;PF04321;PF02801;PF08541;PF00109 PF00486;PF03704;PF00109;PF00108;PF02801;PF16197;PF02771;PF02770;PF00441;PF08028;PF11639;PF00196;PF08281;PF04545;PF13936;PF00072;PF01648;PF09534;PF02801;PF00109;PF00108;PF00550;PF00108;PF08545;PF08541;PF00550;PF00550;PF00155;PF01053;PF01212;PF00501;PF13193;PF00501;PF00550;PF00109;PF00108;PF02801;PF16197;PF00698;PF00155;PF01053;PF04321;PF01370;PF02719;PF05368;PF00106;PF16363;PF01073;PF13460;PF07993;PF00975;PF12697;PF12147;PF00891;PF13489;PF06080;PF05175;PF12847;PF01209;PF02353;PF13847;PF08003;PF05401;PF02390;PF08241;PF13578;PF08242;PF13649;PF01739;PF01326;PF00391;PF00355;PF00848;PF01222;PF06966;PF02544;PF04191;PF01553;PF13520;PF02705;PF01938;PF01135;PF05175;PF13847;PF13649;PF02254;PF05958 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6514552-6529472.1 6514552 6529472 14920 11 23 1 0.59311 0.36 0.15 0.42 0.16 0.07 0.10 0.32 0.29 0.18 0.02 0.07 NC_003888.3_NC_003888.3_5876;NC_003888.3_NC_003888.3_5877;NC_003888.3_NC_003888.3_5878;NC_003888.3_NC_003888.3_5879;NC_003888.3_NC_003888.3_5880;NC_003888.3_NC_003888.3_5881;NC_003888.3_NC_003888.3_5882;NC_003888.3_NC_003888.3_5883;NC_003888.3_NC_003888.3_5884;NC_003888.3_NC_003888.3_5885;NC_003888.3_NC_003888.3_5886 PF01494 PF07690;PF00083;PF13347;PF01494;PF00070;PF06353;PF07690;PF00083;PF06609;PF00440;PF16859;PF01925;PF08937;PF13676;PF01582;PF00400;PF00553;PF00041;PF00704;PF00440;PF07690;PF05977;PF13347 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6552934-6557688.1 6552934 6557688 4754 4 9 2 0.58364 antibacterial 0.67 0.16 0.20 0.24 Polyketide 0.01 0.02 0.30 0.61 0.06 0.01 0.03 NC_003888.3_NC_003888.3_5907;NC_003888.3_NC_003888.3_5908;NC_003888.3_NC_003888.3_5909;NC_003888.3_NC_003888.3_5910 PF00378;PF01494 PF13581;PF00378;PF16113;PF01494;PF07992;PF13450;PF00724;PF00685;PF13469 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6558618-6560310.1 6558618 6560310 1692 1 2 1 0.54471 antibacterial 0.92 0.01 0.04 0.07 Polyketide 0.00 0.23 0.23 0.54 0.00 0.00 0.00 NC_003888.3_NC_003888.3_5912 PF00501 PF13193;PF00501 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6730692-6730926.1 6730692 6730926 234 1 1 0 0.67083 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6060 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6731916-6732270.1 6731916 6732270 354 1 1 0 0.53821 antibacterial 0.87 0.07 0.17 0.26 0.00 0.07 0.06 0.37 0.24 0.02 0.28 NC_003888.3_NC_003888.3_6062 PF13581 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6740465-6743446.1 6740465 6743446 2981 4 9 0 0.64534 antibacterial 0.79 0.07 0.07 0.27 0.00 0.11 0.09 0.31 0.32 0.02 0.19 NC_003888.3_NC_003888.3_6071;NC_003888.3_NC_003888.3_6072;NC_003888.3_NC_003888.3_6073;NC_003888.3_NC_003888.3_6074 PF07730;PF00072;PF00196;PF08281;PF04545;PF13384;PF14351;PF11716;PF12867 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6780614-6817281.1 6780614 6817281 36667 27 75 10 0.91087 0.39 0.22 0.18 0.24 Saccharide 0.01 0.22 0.17 0.10 0.01 0.52 0.01 NC_003888.3_NC_003888.3_6107;NC_003888.3_NC_003888.3_6108;NC_003888.3_NC_003888.3_6109;NC_003888.3_NC_003888.3_6110;NC_003888.3_NC_003888.3_6111;NC_003888.3_NC_003888.3_6112;NC_003888.3_NC_003888.3_6113;NC_003888.3_NC_003888.3_6114;NC_003888.3_NC_003888.3_6115;NC_003888.3_NC_003888.3_6116;NC_003888.3_NC_003888.3_6117;NC_003888.3_NC_003888.3_6118;NC_003888.3_NC_003888.3_6119;NC_003888.3_NC_003888.3_6120;NC_003888.3_NC_003888.3_6121;NC_003888.3_NC_003888.3_6122;NC_003888.3_NC_003888.3_6123;NC_003888.3_NC_003888.3_6124;NC_003888.3_NC_003888.3_6125;NC_003888.3_NC_003888.3_6126;NC_003888.3_NC_003888.3_6127;NC_003888.3_NC_003888.3_6128;NC_003888.3_NC_003888.3_6129;NC_003888.3_NC_003888.3_6130;NC_003888.3_NC_003888.3_6131;NC_003888.3_NC_003888.3_6132;NC_003888.3_NC_003888.3_6133 PF00106;PF02719;PF00702;PF00535;PF01075;PF00534;PF00501;PF01370;PF04321;PF00561 PF12697;PF12146;PF00561;PF03372;PF10604;PF01522;PF04321;PF01370;PF00106;PF16363;PF01073;PF13460;PF02254;PF02719;PF02543;PF16861;PF13641;PF00535;PF13506;PF13632;PF02709;PF13344;PF13419;PF00702;PF13242;PF01075;PF00534;PF13692;PF13524;PF13439;PF13579;PF13477;PF08323;PF13692;PF00534;PF13524;PF13580;PF01380;PF00294;PF01467;PF01075;PF13641;PF00535;PF13506;PF13632;PF13641;PF00535;PF04230;PF06224;PF00196;PF08281;PF14559;PF13401;PF13191;PF13481;PF05729;PF13604;PF00005;PF00196;PF04545;PF13185;PF01590;PF13492;PF00501;PF13193;PF00501;PF13193;PF03752;PF00089;PF13365;PF13517;PF01839;PF02776;PF00205;PF02775 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6821468-6822308.1 6821468 6822308 840 1 1 0 0.55098 antibacterial 0.80 0.06 0.16 0.25 0.00 0.09 0.11 0.30 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6138 PF01261 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6831345-6850522.1 6831345 6850522 19177 10 14 3 0.68857 0.36 0.21 0.17 0.11 Other 0.01 0.31 0.53 0.20 0.01 0.06 0.03 NC_003888.3_NC_003888.3_6150;NC_003888.3_NC_003888.3_6151;NC_003888.3_NC_003888.3_6152;NC_003888.3_NC_003888.3_6153;NC_003888.3_NC_003888.3_6154;NC_003888.3_NC_003888.3_6155;NC_003888.3_NC_003888.3_6156;NC_003888.3_NC_003888.3_6157;NC_003888.3_NC_003888.3_6158;NC_003888.3_NC_003888.3_6159 PF04183;PF00155;PF01041 PF00300;PF13385;PF05593;PF00155;PF00266;PF01041;PF01638;PF02036;PF00092;PF13519;PF06276;PF04183;PF04183;PF06276 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6859657-6862082.1 6859657 6862082 2425 4 7 0 0.61623 antibacterial 0.81 0.12 0.15 0.30 0.00 0.06 0.09 0.29 0.35 0.02 0.22 NC_003888.3_NC_003888.3_6167;NC_003888.3_NC_003888.3_6168;NC_003888.3_NC_003888.3_6169;NC_003888.3_NC_003888.3_6170 PF04149;PF13560;PF01381;PF12844;PF13581;PF11716;PF07398 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6889623-6949758.1 6889623 6949758 60135 26 107 23 0.84593 antibacterial 0.67 0.30 0.06 0.09 Polyketide 0.00 0.08 0.01 0.97 0.02 0.04 0.01 NC_003888.3_NC_003888.3_6196;NC_003888.3_NC_003888.3_6197;NC_003888.3_NC_003888.3_6198;NC_003888.3_NC_003888.3_6199;NC_003888.3_NC_003888.3_6200;NC_003888.3_NC_003888.3_6201;NC_003888.3_NC_003888.3_6202;NC_003888.3_NC_003888.3_6203;NC_003888.3_NC_003888.3_6204;NC_003888.3_NC_003888.3_6205;NC_003888.3_NC_003888.3_6206;NC_003888.3_NC_003888.3_6207;NC_003888.3_NC_003888.3_6208;NC_003888.3_NC_003888.3_6209;NC_003888.3_NC_003888.3_6210;NC_003888.3_NC_003888.3_6211;NC_003888.3_NC_003888.3_6212;NC_003888.3_NC_003888.3_6213;NC_003888.3_NC_003888.3_6214;NC_003888.3_NC_003888.3_6215;NC_003888.3_NC_003888.3_6216;NC_003888.3_NC_003888.3_6217;NC_003888.3_NC_003888.3_6218;NC_003888.3_NC_003888.3_6219;NC_003888.3_NC_003888.3_6220;NC_003888.3_NC_003888.3_6221 PF00106;PF02786;PF00108;PF00289;PF00698;PF08990;PF01370;PF00202;PF03756;PF01039;PF07993;PF02719;PF00975;PF01494;PF02737;PF02785;PF04321;PF01266;PF02801;PF08659;PF00109;PF04820;PF00561 PF00106;PF08659;PF13561;PF00440;PF03756;PF05368;PF03435;PF01370;PF13460;PF02518;PF13581;PF07730;PF02775;PF17147;PF01855;PF02776;PF01558;PF00364;PF13533;PF02785;PF02786;PF15632;PF02222;PF07478;PF00289;PF10518;PF01565;PF08031;PF07993;PF01370;PF16363;PF04321;PF01073;PF00550;PF08659;PF00106;PF13561;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00698;PF00109;PF00108;PF00550;PF08659;PF00106;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF08990;PF00550;PF08659;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF00109;PF00108;PF00106;PF00698;PF01494;PF12831;PF00890;PF00561;PF12697;PF12146;PF07690;PF12832;PF03209;PF05977;PF00083;PF13347;PF00202;PF00486;PF03704;PF10518;PF01565;PF08031;PF13561;PF00106;PF08659;PF13460;PF05368;PF01039;PF13822;PF00440;PF00975;PF12697;PF03959;PF00486;PF03704;PF01266;PF01262;PF07992;PF02737;PF00890;PF13450;PF04820 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6962348-6966485.1 6962348 6966485 4137 4 9 3 0.54483 antibacterial 0.64 0.28 0.06 0.23 0.05 0.03 0.22 0.23 0.03 0.07 0.44 NC_003888.3_NC_003888.3_6234;NC_003888.3_NC_003888.3_6235;NC_003888.3_NC_003888.3_6236;NC_003888.3_NC_003888.3_6237 PF01593;PF01494;PF00903 PF01557;PF00903;PF13468;PF04909;PF01494;PF01593;PF07992;PF00890;PF13450 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7078584-7118257.1 7078584 7118257 39673 25 58 6 0.86082 antibacterial 0.66 0.24 0.15 0.14 NRP 0.02 0.81 0.14 0.05 0.01 0.03 0.00 NC_003888.3_NC_003888.3_6336;NC_003888.3_NC_003888.3_6337;NC_003888.3_NC_003888.3_6338;NC_003888.3_NC_003888.3_6339;NC_003888.3_NC_003888.3_6340;NC_003888.3_NC_003888.3_6341;NC_003888.3_NC_003888.3_6342;NC_003888.3_NC_003888.3_6343;NC_003888.3_NC_003888.3_6344;NC_003888.3_NC_003888.3_6345;NC_003888.3_NC_003888.3_6346;NC_003888.3_NC_003888.3_6347;NC_003888.3_NC_003888.3_6348;NC_003888.3_NC_003888.3_6349;NC_003888.3_NC_003888.3_6350;NC_003888.3_NC_003888.3_6351;NC_003888.3_NC_003888.3_6352;NC_003888.3_NC_003888.3_6353;NC_003888.3_NC_003888.3_6354;NC_003888.3_NC_003888.3_6355;NC_003888.3_NC_003888.3_6356;NC_003888.3_NC_003888.3_6357;NC_003888.3_NC_003888.3_6358;NC_003888.3_NC_003888.3_6359;NC_003888.3_NC_003888.3_6360 PF00975;PF06339;PF00668;PF01050;PF00501;PF00202 PF00202;PF07905;PF13556;PF00795;PF01979;PF07969;PF00296;PF02133;PF13229;PF05048;PF12708;PF12218;PF12079;PF02627;PF07730;PF13581;PF00072;PF08281;PF04545;PF00196;PF03099;PF13581;PF07730;PF00672;PF12833;PF00165;PF05977;PF07690;PF01569;PF00041;PF03422;PF07971;PF14403;PF04174;PF05977;PF07690;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00975;PF05899;PF07883;PF13434;PF07992;PF07883;PF06339;PF01050;PF11699;PF00190;PF02311;PF05899;PF12852;PF14525 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7126476-7127388.1 7126476 7127388 912 1 1 0 0.53113 antibacterial 0.88 0.06 0.16 0.24 0.00 0.08 0.07 0.34 0.22 0.03 0.31 NC_003888.3_NC_003888.3_6368 PF04072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7233668-7252420.1 7233668 7252420 18752 13 37 8 0.82411 0.29 0.34 0.32 0.12 0.04 0.24 0.20 0.40 0.06 0.06 0.12 NC_003888.3_NC_003888.3_6465;NC_003888.3_NC_003888.3_6466;NC_003888.3_NC_003888.3_6467;NC_003888.3_NC_003888.3_6468;NC_003888.3_NC_003888.3_6469;NC_003888.3_NC_003888.3_6470;NC_003888.3_NC_003888.3_6471;NC_003888.3_NC_003888.3_6472;NC_003888.3_NC_003888.3_6473;NC_003888.3_NC_003888.3_6474;NC_003888.3_NC_003888.3_6475;NC_003888.3_NC_003888.3_6476;NC_003888.3_NC_003888.3_6477 PF08242;PF00106;PF02719;PF00248;PF08659;PF08241;PF00501;PF01370 PF01329;PF13489;PF05401;PF01209;PF13847;PF02353;PF08241;PF05148;PF08242;PF13649;PF13517;PF01839;PF10099;PF00553;PF15902;PF02011;PF16640;PF00553;PF00553;PF01341;PF13489;PF13847;PF13649;PF08241;PF08242;PF00106;PF08659;PF02719;PF01370;PF03807;PF13460;PF13561;PF00248;PF00501;PF07690;PF00083;PF06609 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7385659-7388675.1 7385659 7388675 3016 3 7 1 0.64353 antibacterial 0.51 0.16 0.12 0.15 Saccharide 0.00 0.01 0.02 0.01 0.21 0.71 0.04 NC_003888.3_NC_003888.3_6571;NC_003888.3_NC_003888.3_6572;NC_003888.3_NC_003888.3_6573 PF00534 PF01242;PF13579;PF13439;PF00534;PF13692;PF13847;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7422738-7424568.1 7422738 7424568 1830 1 3 0 0.50924 antibacterial 0.71 0.03 0.12 0.16 RiPP 0.00 0.02 0.09 0.02 0.84 0.00 0.03 NC_003888.3_NC_003888.3_6604 PF00664;PF00005;PF13191 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7426395-7426995.1 7426395 7426995 600 1 10 0 0.50130 antibacterial 0.80 0.11 0.10 0.26 0.00 0.08 0.21 0.23 0.36 0.01 0.16 NC_003888.3_NC_003888.3_6606 PF00196;PF08279;PF04545;PF08281;PF14493;PF09339;PF13384;PF13412;PF13518;PF00072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7513979-7524428.1 7513979 7524428 10449 10 28 7 0.71486 0.33 0.43 0.12 0.05 Terpene 0.04 0.04 0.10 0.03 0.25 0.04 0.55 NC_003888.3_NC_003888.3_6677;NC_003888.3_NC_003888.3_6678;NC_003888.3_NC_003888.3_6679;NC_003888.3_NC_003888.3_6680;NC_003888.3_NC_003888.3_6681;NC_003888.3_NC_003888.3_6682;NC_003888.3_NC_003888.3_6683;NC_003888.3_NC_003888.3_6684;NC_003888.3_NC_003888.3_6685;NC_003888.3_NC_003888.3_6686 PF01266;PF00494;PF01494;PF00432;PF00348;PF04055;PF01593 PF01061;PF12698;PF00005;PF13555;PF13401;PF13304;PF13476;PF00494;PF00494;PF07992;PF01266;PF00070;PF00890;PF03486;PF12831;PF01494;PF01134;PF13450;PF01593;PF00348;PF13249;PF13243;PF00432;PF01048;PF04055;PF13394;PF13353;PF11946 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7527583-7528969.1 7527583 7528969 1386 1 1 1 0.51596 antibacterial 0.85 0.06 0.20 0.27 0.00 0.01 0.50 0.02 0.02 0.00 0.45 NC_003888.3_NC_003888.3_6689 PF00202 PF00202 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7529794-7530592.1 7529794 7530592 798 1 1 0 0.51222 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6692 PF13350 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7532360-7533986.1 7532360 7533986 1626 2 6 0 0.52073 antibacterial 0.59 0.05 0.13 0.19 Other 0.00 0.05 0.52 0.18 0.09 0.03 0.17 NC_003888.3_NC_003888.3_6694;NC_003888.3_NC_003888.3_6695 PF00657;PF13472;PF13977;PF16859;PF13305;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7536361-7558856.1 7536361 7558856 22495 19 43 14 0.71909 0.36 0.20 0.27 0.26 Polyketide 0.00 0.31 0.15 0.61 0.05 0.02 0.05 NC_003888.3_NC_003888.3_6698;NC_003888.3_NC_003888.3_6699;NC_003888.3_NC_003888.3_6700;NC_003888.3_NC_003888.3_6701;NC_003888.3_NC_003888.3_6702;NC_003888.3_NC_003888.3_6703;NC_003888.3_NC_003888.3_6704;NC_003888.3_NC_003888.3_6705;NC_003888.3_NC_003888.3_6706;NC_003888.3_NC_003888.3_6707;NC_003888.3_NC_003888.3_6708;NC_003888.3_NC_003888.3_6709;NC_003888.3_NC_003888.3_6710;NC_003888.3_NC_003888.3_6711;NC_003888.3_NC_003888.3_6712;NC_003888.3_NC_003888.3_6713;NC_003888.3_NC_003888.3_6714;NC_003888.3_NC_003888.3_6715;NC_003888.3_NC_003888.3_6716 PF02803;PF00378;PF00171;PF02770;PF08240;PF00725;PF00108;PF08028;PF00109;PF00441;PF02771;PF02737;PF00107;PF00501 PF14246;PF00440;PF08279;PF13384;PF09995;PF00440;PF13602;PF00107;PF16912;PF00291;PF08240;PF14232;PF14231;PF00440;PF02515;PF00296;PF02771;PF14749;PF02770;PF00441;PF08028;PF00108;PF00109;PF02803;PF00378;PF16113;PF02737;PF03446;PF00725;PF00501;PF00441;PF08028;PF02770;PF02771;PF00440;PF13309;PF00356;PF00171;PF02518;PF03259;PF05331;PF09339;PF03029 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7614563-7615928.1 7614563 7615928 1365 1 1 0 0.59332 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6760 PF03771 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7623284-7715706.1 7623284 7715706 92422 100 87 10 0.84839 antibacterial 0.52 0.14 0.13 0.20 RiPP 0.00 0.07 0.26 0.10 0.51 0.10 0.01 NC_003888.3_NC_003888.3_6768;NC_003888.3_NC_003888.3_6769;NC_003888.3_NC_003888.3_6770;NC_003888.3_NC_003888.3_6771;NC_003888.3_NC_003888.3_6772;NC_003888.3_NC_003888.3_6773;NC_003888.3_NC_003888.3_6774;NC_003888.3_NC_003888.3_6775;NC_003888.3_NC_003888.3_6776;NC_003888.3_NC_003888.3_6777;NC_003888.3_NC_003888.3_6778;NC_003888.3_NC_003888.3_6779;NC_003888.3_NC_003888.3_6780;NC_003888.3_NC_003888.3_6781;NC_003888.3_NC_003888.3_6782;NC_003888.3_NC_003888.3_6783;NC_003888.3_NC_003888.3_6784;NC_003888.3_NC_003888.3_6785;NC_003888.3_NC_003888.3_6786;NC_003888.3_NC_003888.3_6787;NC_003888.3_NC_003888.3_6788;NC_003888.3_NC_003888.3_6789;NC_003888.3_NC_003888.3_6790;NC_003888.3_NC_003888.3_6791;NC_003888.3_NC_003888.3_6792;NC_003888.3_NC_003888.3_6793;NC_003888.3_NC_003888.3_6794;NC_003888.3_NC_003888.3_6795;NC_003888.3_NC_003888.3_6796;NC_003888.3_NC_003888.3_6797;NC_003888.3_NC_003888.3_6798;NC_003888.3_NC_003888.3_6799;NC_003888.3_NC_003888.3_6800;NC_003888.3_NC_003888.3_6801;NC_003888.3_NC_003888.3_6802;NC_003888.3_NC_003888.3_6803;NC_003888.3_NC_003888.3_6804;NC_003888.3_NC_003888.3_6805;NC_003888.3_NC_003888.3_6806;NC_003888.3_NC_003888.3_6807;NC_003888.3_NC_003888.3_6808;NC_003888.3_NC_003888.3_6809;NC_003888.3_NC_003888.3_6810;NC_003888.3_NC_003888.3_6811;NC_003888.3_NC_003888.3_6812;NC_003888.3_NC_003888.3_6813;NC_003888.3_NC_003888.3_6814;NC_003888.3_NC_003888.3_6815;NC_003888.3_NC_003888.3_6816;NC_003888.3_NC_003888.3_6817;NC_003888.3_NC_003888.3_6818;NC_003888.3_NC_003888.3_6819;NC_003888.3_NC_003888.3_6820;NC_003888.3_NC_003888.3_6821;NC_003888.3_NC_003888.3_6822;NC_003888.3_NC_003888.3_6823;NC_003888.3_NC_003888.3_6824;NC_003888.3_NC_003888.3_6825;NC_003888.3_NC_003888.3_6826;NC_003888.3_NC_003888.3_6827;NC_003888.3_NC_003888.3_6828;NC_003888.3_NC_003888.3_6829;NC_003888.3_NC_003888.3_6830;NC_003888.3_NC_003888.3_6831;NC_003888.3_NC_003888.3_6832;NC_003888.3_NC_003888.3_6833;NC_003888.3_NC_003888.3_6834;NC_003888.3_NC_003888.3_6835;NC_003888.3_NC_003888.3_6836;NC_003888.3_NC_003888.3_6837;NC_003888.3_NC_003888.3_6838;NC_003888.3_NC_003888.3_6839;NC_003888.3_NC_003888.3_6840;NC_003888.3_NC_003888.3_6841;NC_003888.3_NC_003888.3_6842;NC_003888.3_NC_003888.3_6843;NC_003888.3_NC_003888.3_6844;NC_003888.3_NC_003888.3_6845;NC_003888.3_NC_003888.3_6846;NC_003888.3_NC_003888.3_6847;NC_003888.3_NC_003888.3_6848;NC_003888.3_NC_003888.3_6849;NC_003888.3_NC_003888.3_6850;NC_003888.3_NC_003888.3_6851;NC_003888.3_NC_003888.3_6852;NC_003888.3_NC_003888.3_6853;NC_003888.3_NC_003888.3_6854;NC_003888.3_NC_003888.3_6855;NC_003888.3_NC_003888.3_6856;NC_003888.3_NC_003888.3_6857;NC_003888.3_NC_003888.3_6858;NC_003888.3_NC_003888.3_6859;NC_003888.3_NC_003888.3_6860;NC_003888.3_NC_003888.3_6861;NC_003888.3_NC_003888.3_6862;NC_003888.3_NC_003888.3_6863;NC_003888.3_NC_003888.3_6864;NC_003888.3_NC_003888.3_6865;NC_003888.3_NC_003888.3_6866;NC_003888.3_NC_003888.3_6867 PF01636;PF02770;PF02786;PF00702;PF08028;PF00441;PF02771;PF05147;PF00535;PF04738 PF03771;PF03771;PF03771;PF00069;PF07714;PF01636;PF01163;PF00656;PF05762;PF13519;PF05496;PF07728;PF07726;PF00004;PF13191;PF00535;PF02195;PF12846;PF11203;PF00877;PF01555;PF16259;PF08239;PF01638;PF07690;PF15632;PF01071;PF13549;PF02786;PF02655;PF02222;PF07478;PF13535;PF07690;PF13419;PF00702;PF13242;PF03771;PF03771;PF13620;PF14686;PF13634;PF01068;PF13586;PF01609;PF13340;PF13340;PF01609;PF13586;PF03771;PF03771;PF03432;PF05713;PF02467;PF13730;PF13560;PF01135;PF13649;PF01209;PF00398;PF05175;PF13847;PF14028;PF05147;PF14028;PF04738;PF00196;PF13556;PF08279;PF08281;PF00441;PF08028;PF02770;PF02771;PF01590;PF03029;PF00009;PF05331;PF03259;PF02518;PF13581;PF00723;PF13424;PF01980;PF13581;PF01636;PF03881 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7725809-7731922.1 7725809 7731922 6113 8 8 0 0.55681 antibacterial 0.98 0.12 0.02 0.15 Terpene 0.00 0.09 0.06 0.15 0.06 0.03 0.64 NC_003888.3_NC_003888.3_6874;NC_003888.3_NC_003888.3_6875;NC_003888.3_NC_003888.3_6876;NC_003888.3_NC_003888.3_6877;NC_003888.3_NC_003888.3_6878;NC_003888.3_NC_003888.3_6879;NC_003888.3_NC_003888.3_6880;NC_003888.3_NC_003888.3_6881 PF04066;PF03334;PF16262;PF00293;PF04909;PF00120;PF16952;PF11338 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7733253-7734441.1 7733253 7734441 1188 1 3 3 0.50221 antibacterial 0.60 0.05 0.20 0.33 Polyketide 0.00 0.39 0.12 0.67 0.06 0.01 0.09 NC_003888.3_NC_003888.3_6884 PF02803;PF00109;PF00108 PF00108;PF00109;PF02803 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7759824-7770083.1 7759824 7770083 10259 7 11 1 0.67889 antibacterial 0.68 0.07 0.07 0.17 0.00 0.04 0.09 0.26 0.43 0.00 0.34 NC_003888.3_NC_003888.3_6909;NC_003888.3_NC_003888.3_6910;NC_003888.3_NC_003888.3_6911;NC_003888.3_NC_003888.3_6912;NC_003888.3_NC_003888.3_6913;NC_003888.3_NC_003888.3_6914;NC_003888.3_NC_003888.3_6915 PF00067 PF01400;PF13191;PF08281;PF00196;PF13384;PF12770;PF13424;PF13432;PF00082;PF04542;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7845510-7847365.1 7845510 7847365 1855 2 8 0 0.60306 antibacterial 0.82 0.06 0.17 0.25 0.00 0.06 0.16 0.21 0.33 0.00 0.26 NC_003888.3_NC_003888.3_6974;NC_003888.3_NC_003888.3_6975 PF00392;PF14502;PF13545;PF13518;PF08220;PF08279;PF05448;PF00326 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7902487-7918281.1 7902487 7918281 15794 13 35 9 0.71780 0.41 0.48 0.26 0.05 0.09 0.26 0.28 0.16 0.07 0.08 0.12 NC_003888.3_NC_003888.3_7027;NC_003888.3_NC_003888.3_7028;NC_003888.3_NC_003888.3_7029;NC_003888.3_NC_003888.3_7030;NC_003888.3_NC_003888.3_7031;NC_003888.3_NC_003888.3_7032;NC_003888.3_NC_003888.3_7033;NC_003888.3_NC_003888.3_7034;NC_003888.3_NC_003888.3_7035;NC_003888.3_NC_003888.3_7036;NC_003888.3_NC_003888.3_7037;NC_003888.3_NC_003888.3_7038;NC_003888.3_NC_003888.3_7039 PF01266;PF08242;PF02585;PF00171;PF08241;PF00583;PF00501;PF01370;PF04321 PF17197;PF00171;PF00501;PF02585;PF14759;PF07992;PF13738;PF00070;PF03486;PF01266;PF13450;PF01262;PF13489;PF08241;PF08242;PF13649;PF05891;PF02826;PF00033;PF14358;PF13631;PF12697;PF12695;PF12146;PF13673;PF00583;PF13508;PF00198;PF00364;PF00456;PF05368;PF13460;PF10021;PF01370;PF04321 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7919132-7921208.1 7919132 7921208 2076 2 10 1 0.50408 0.32 0.04 0.47 0.08 0.04 0.10 0.39 0.23 0.15 0.06 0.07 NC_003888.3_NC_003888.3_7041;NC_003888.3_NC_003888.3_7042 PF01050 PF02311;PF00190;PF07883;PF01050;PF13347;PF07690;PF00083;PF05977;PF06609;PF12832 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7922096-7922885.1 7922096 7922885 789 1 1 0 0.50917 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7044 PF04248 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7928147-7929485.1 7928147 7929485 1338 2 4 1 0.53907 antibacterial 0.83 0.13 0.15 0.41 Polyketide 0.01 0.17 0.04 0.56 0.17 0.03 0.12 NC_003888.3_NC_003888.3_7049;NC_003888.3_NC_003888.3_7050 PF01370 PF02566;PF05368;PF01370;PF13460 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7955999-7956833.1 7955999 7956833 834 1 1 0 0.58086 antibacterial 0.98 0.11 0.04 0.17 Terpene 0.00 0.10 0.04 0.15 0.06 0.02 0.65 NC_003888.3_NC_003888.3_7074 PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7966014-7973441.1 7966014 7973441 7427 5 12 1 0.58093 antibacterial 0.68 0.06 0.10 0.30 0.00 0.08 0.26 0.15 0.22 0.12 0.18 NC_003888.3_NC_003888.3_7083;NC_003888.3_NC_003888.3_7084;NC_003888.3_NC_003888.3_7085;NC_003888.3_NC_003888.3_7086;NC_003888.3_NC_003888.3_7087 PF00903 PF07602;PF05048;PF13229;PF03422;PF00903;PF13191;PF13401;PF08281;PF13936;PF00196;PF13384;PF04686 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7977962-7981423.1 7977962 7981423 3461 3 7 1 0.59622 antibacterial 0.81 0.10 0.13 0.29 0.00 0.28 0.13 0.39 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7089;NC_003888.3_NC_003888.3_7090;NC_003888.3_NC_003888.3_7091 PF03992 PF13384;PF00196;PF13518;PF08279;PF13542;PF01510;PF03992 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8003570-8072654.1 8003570 8072654 69084 63 123 12 0.74116 cytotoxic 0.29 0.51 0.17 0.10 0.06 0.33 0.16 0.24 0.08 0.09 0.12 NC_003888.3_NC_003888.3_7110;NC_003888.3_NC_003888.3_7111;NC_003888.3_NC_003888.3_7112;NC_003888.3_NC_003888.3_7113;NC_003888.3_NC_003888.3_7114;NC_003888.3_NC_003888.3_7115;NC_003888.3_NC_003888.3_7116;NC_003888.3_NC_003888.3_7117;NC_003888.3_NC_003888.3_7118;NC_003888.3_NC_003888.3_7119;NC_003888.3_NC_003888.3_7120;NC_003888.3_NC_003888.3_7121;NC_003888.3_NC_003888.3_7122;NC_003888.3_NC_003888.3_7123;NC_003888.3_NC_003888.3_7124;NC_003888.3_NC_003888.3_7125;NC_003888.3_NC_003888.3_7126;NC_003888.3_NC_003888.3_7127;NC_003888.3_NC_003888.3_7128;NC_003888.3_NC_003888.3_7129;NC_003888.3_NC_003888.3_7130;NC_003888.3_NC_003888.3_7131;NC_003888.3_NC_003888.3_7132;NC_003888.3_NC_003888.3_7133;NC_003888.3_NC_003888.3_7134;NC_003888.3_NC_003888.3_7135;NC_003888.3_NC_003888.3_7136;NC_003888.3_NC_003888.3_7137;NC_003888.3_NC_003888.3_7138;NC_003888.3_NC_003888.3_7139;NC_003888.3_NC_003888.3_7140;NC_003888.3_NC_003888.3_7141;NC_003888.3_NC_003888.3_7142;NC_003888.3_NC_003888.3_7143;NC_003888.3_NC_003888.3_7144;NC_003888.3_NC_003888.3_7145;NC_003888.3_NC_003888.3_7146;NC_003888.3_NC_003888.3_7147;NC_003888.3_NC_003888.3_7148;NC_003888.3_NC_003888.3_7149;NC_003888.3_NC_003888.3_7150;NC_003888.3_NC_003888.3_7151;NC_003888.3_NC_003888.3_7152;NC_003888.3_NC_003888.3_7153;NC_003888.3_NC_003888.3_7154;NC_003888.3_NC_003888.3_7155;NC_003888.3_NC_003888.3_7156;NC_003888.3_NC_003888.3_7157;NC_003888.3_NC_003888.3_7158;NC_003888.3_NC_003888.3_7159;NC_003888.3_NC_003888.3_7160;NC_003888.3_NC_003888.3_7161;NC_003888.3_NC_003888.3_7162;NC_003888.3_NC_003888.3_7163;NC_003888.3_NC_003888.3_7164;NC_003888.3_NC_003888.3_7165;NC_003888.3_NC_003888.3_7166;NC_003888.3_NC_003888.3_7167;NC_003888.3_NC_003888.3_7168;NC_003888.3_NC_003888.3_7169;NC_003888.3_NC_003888.3_7170;NC_003888.3_NC_003888.3_7171;NC_003888.3_NC_003888.3_7172 PF01636;PF01266;PF08545;PF02894;PF01408;PF01494;PF08241;PF00501;PF01593;PF01370;PF03364;PF00561 PF04075;PF12802;PF01047;PF13463;PF09339;PF01325;PF14342;PF00561;PF12697;PF12146;PF12158;PF10604;PF03364;PF00652;PF14200;PF06439;PF06283;PF00652;PF14200;PF03422;PF00801;PF07995;PF01135;PF13489;PF01209;PF13847;PF13649;PF08241;PF13578;PF12698;PF12051;PF04229;PF01032;PF13476;PF00005;PF13555;PF13191;PF13304;PF06414;PF13671;PF01497;PF00300;PF13581;PF02518;PF07228;PF08448;PF08545;PF08392;PF00195;PF02909;PF00440;PF01494;PF07681;PF03067;PF02839;PF01957;PF01145;PF13229;PF07602;PF16990;PF03422;PF11350;PF00072;PF00486;PF00672;PF00512;PF02518;PF00115;PF12270;PF13631;PF00033;PF01292;PF03860;PF09995;PF00069;PF07714;PF01163;PF06293;PF01636;PF13374;PF13424;PF01946;PF01494;PF01266;PF12831;PF00890;PF07992;PF03486;PF01134;PF00070;PF13450;PF01593;PF05547;PF00144;PF00501;PF13193;PF00561;PF12697;PF12146;PF03096;PF04149;PF00582;PF07336;PF11706;PF01510;PF01636;PF01633;PF07228;PF08448;PF08447;PF02894;PF01408;PF08386;PF00561;PF03777;PF14437;PF00383;PF07992;PF01494;PF03807;PF01370;PF13460;PF03779 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8074200-8075100.1 8074200 8075100 900 1 1 1 0.50574 antibacterial 0.83 0.05 0.16 0.29 0.05 0.08 0.07 0.30 0.21 0.03 0.31 NC_003888.3_NC_003888.3_7175 PF00248 PF00248 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8078531-8079047.1 8078531 8079047 516 1 3 0 0.57140 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7180 PF04978;PF05163;PF12867 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8080100-8081558.1 8080100 8081558 1458 2 2 1 0.63624 antibacterial 0.82 0.05 0.14 0.27 0.05 0.07 0.13 0.29 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7182;NC_003888.3_NC_003888.3_7183 PF00248 PF00248;PF12680 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8088495-8089903.1 8088495 8089903 1408 2 2 1 0.57086 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7193;NC_003888.3_NC_003888.3_7194 PF00903 PF06983;PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8090750-8092010.1 8090750 8092010 1260 1 3 1 0.53063 antibacterial 0.72 0.12 0.25 0.34 0.11 0.01 0.14 0.46 0.26 0.00 0.08 NC_003888.3_NC_003888.3_7196 PF01494 PF13450;PF01494;PF08491 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8094133-8097306.1 8094133 8097306 3173 3 4 0 0.62085 0.40 0.04 0.30 0.15 0.00 0.11 0.07 0.32 0.25 0.03 0.29 NC_003888.3_NC_003888.3_7200;NC_003888.3_NC_003888.3_7201;NC_003888.3_NC_003888.3_7202 PF04686;PF00296;PF07714;PF00069 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8168061-8170689.1 8168061 8170689 2628 3 3 2 0.59075 antibacterial 0.83 0.05 0.17 0.28 0.05 0.07 0.26 0.21 0.17 0.02 0.25 NC_003888.3_NC_003888.3_7264;NC_003888.3_NC_003888.3_7265;NC_003888.3_NC_003888.3_7266 PF02668;PF00248 PF13298;PF00248;PF02668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8172313-8173069.1 8172313 8173069 756 1 6 2 0.63484 antibacterial 0.52 0.07 0.10 0.44 0.00 0.38 0.18 0.38 0.02 0.02 0.03 NC_003888.3_NC_003888.3_7268 PF00975;PF00561 PF01738;PF12697;PF02230;PF12146;PF00561;PF00975 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8173886-8184384.1 8173886 8184384 10498 10 19 5 0.61466 0.46 0.10 0.39 0.11 Polyketide 0.03 0.20 0.11 0.65 0.00 0.03 0.03 NC_003888.3_NC_003888.3_7270;NC_003888.3_NC_003888.3_7271;NC_003888.3_NC_003888.3_7272;NC_003888.3_NC_003888.3_7273;NC_003888.3_NC_003888.3_7274;NC_003888.3_NC_003888.3_7275;NC_003888.3_NC_003888.3_7276;NC_003888.3_NC_003888.3_7277;NC_003888.3_NC_003888.3_7278;NC_003888.3_NC_003888.3_7279 PF00106;PF08240;PF08659;PF00107;PF01370 PF13556;PF13602;PF00107;PF16912;PF02254;PF08240;PF13561;PF00106;PF08659;PF00440;PF11716;PF07398;PF03600;PF02040;PF05977;PF07690;PF01370;PF16363;PF01073 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8190449-8218007.1 8190449 8218007 27558 29 63 9 0.75172 0.45 0.44 0.19 0.08 0.02 0.09 0.27 0.31 0.17 0.11 0.13 NC_003888.3_NC_003888.3_7286;NC_003888.3_NC_003888.3_7287;NC_003888.3_NC_003888.3_7288;NC_003888.3_NC_003888.3_7289;NC_003888.3_NC_003888.3_7290;NC_003888.3_NC_003888.3_7291;NC_003888.3_NC_003888.3_7292;NC_003888.3_NC_003888.3_7293;NC_003888.3_NC_003888.3_7294;NC_003888.3_NC_003888.3_7295;NC_003888.3_NC_003888.3_7296;NC_003888.3_NC_003888.3_7297;NC_003888.3_NC_003888.3_7298;NC_003888.3_NC_003888.3_7299;NC_003888.3_NC_003888.3_7300;NC_003888.3_NC_003888.3_7301;NC_003888.3_NC_003888.3_7302;NC_003888.3_NC_003888.3_7303;NC_003888.3_NC_003888.3_7304;NC_003888.3_NC_003888.3_7305;NC_003888.3_NC_003888.3_7306;NC_003888.3_NC_003888.3_7307;NC_003888.3_NC_003888.3_7308;NC_003888.3_NC_003888.3_7309;NC_003888.3_NC_003888.3_7310;NC_003888.3_NC_003888.3_7311;NC_003888.3_NC_003888.3_7312;NC_003888.3_NC_003888.3_7313;NC_003888.3_NC_003888.3_7314 PF01266;PF00106;PF01494;PF08659;PF01243;PF04055;PF01593;PF03364;PF00561 PF04972;PF14907;PF07228;PF10604;PF09297;PF00999;PF13493;PF00089;PF02983;PF10604;PF03364;PF01266;PF01946;PF03486;PF12831;PF00890;PF01494;PF00070;PF13450;PF01593;PF00106;PF08659;PF13561;PF01593;PF01266;PF01946;PF00070;PF07992;PF01494;PF12831;PF00890;PF13450;PF01593;PF00892;PF00083;PF13347;PF07690;PF03583;PF12697;PF00561;PF12146;PF05448;PF00326;PF00929;PF01032;PF01497;PF13401;PF00005;PF13191;PF13604;PF13304;PF13671;PF02492;PF13555;PF02463;PF13175;PF13476;PF01243;PF04055;PF04672;PF14602;PF00132;PF12464 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8228870-8235982.1 8228870 8235982 7112 8 11 3 0.67244 antibacterial 0.80 0.06 0.19 0.16 Terpene 0.10 0.02 0.04 0.20 0.14 0.01 0.55 NC_003888.3_NC_003888.3_7322;NC_003888.3_NC_003888.3_7323;NC_003888.3_NC_003888.3_7324;NC_003888.3_NC_003888.3_7325;NC_003888.3_NC_003888.3_7326;NC_003888.3_NC_003888.3_7327;NC_003888.3_NC_003888.3_7328;NC_003888.3_NC_003888.3_7329 PF00106;PF00067;PF08659 PF00106;PF08659;PF13561;PF13460;PF03631;PF02746;PF13378;PF00067;PF03029;PF13479;PF05331 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8241247-8241685.1 8241247 8241685 438 1 1 0 0.52761 antibacterial 0.89 0.01 0.03 0.09 0.00 0.01 0.05 0.02 0.46 0.01 0.46 NC_003888.3_NC_003888.3_7335 PF07883 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8242354-8286428.1 8242354 8286428 44074 46 107 13 0.73889 0.29 0.47 0.33 0.14 0.06 0.36 0.31 0.20 0.11 0.01 0.04 NC_003888.3_NC_003888.3_7337;NC_003888.3_NC_003888.3_7338;NC_003888.3_NC_003888.3_7339;NC_003888.3_NC_003888.3_7340;NC_003888.3_NC_003888.3_7341;NC_003888.3_NC_003888.3_7342;NC_003888.3_NC_003888.3_7343;NC_003888.3_NC_003888.3_7344;NC_003888.3_NC_003888.3_7345;NC_003888.3_NC_003888.3_7346;NC_003888.3_NC_003888.3_7347;NC_003888.3_NC_003888.3_7348;NC_003888.3_NC_003888.3_7349;NC_003888.3_NC_003888.3_7350;NC_003888.3_NC_003888.3_7351;NC_003888.3_NC_003888.3_7352;NC_003888.3_NC_003888.3_7353;NC_003888.3_NC_003888.3_7354;NC_003888.3_NC_003888.3_7355;NC_003888.3_NC_003888.3_7356;NC_003888.3_NC_003888.3_7357;NC_003888.3_NC_003888.3_7358;NC_003888.3_NC_003888.3_7359;NC_003888.3_NC_003888.3_7360;NC_003888.3_NC_003888.3_7361;NC_003888.3_NC_003888.3_7362;NC_003888.3_NC_003888.3_7363;NC_003888.3_NC_003888.3_7364;NC_003888.3_NC_003888.3_7365;NC_003888.3_NC_003888.3_7366;NC_003888.3_NC_003888.3_7367;NC_003888.3_NC_003888.3_7368;NC_003888.3_NC_003888.3_7369;NC_003888.3_NC_003888.3_7370;NC_003888.3_NC_003888.3_7371;NC_003888.3_NC_003888.3_7372;NC_003888.3_NC_003888.3_7373;NC_003888.3_NC_003888.3_7374;NC_003888.3_NC_003888.3_7375;NC_003888.3_NC_003888.3_7376;NC_003888.3_NC_003888.3_7377;NC_003888.3_NC_003888.3_7378;NC_003888.3_NC_003888.3_7379;NC_003888.3_NC_003888.3_7380;NC_003888.3_NC_003888.3_7381;NC_003888.3_NC_003888.3_7382 PF08242;PF00171;PF00857;PF00975;PF01494;PF00891;PF03061;PF08241;PF03992;PF00583;PF00501;PF00067;PF00561 PF11563;PF00042;PF00970;PF08030;PF00175;PF01955;PF06532;PF02031;PF05547;PF00413;PF00126;PF13556;PF03466;PF03413;PF06779;PF07690;PF00083;PF06609;PF13347;PF00171;PF02775;PF00205;PF02776;PF00126;PF13556;PF03466;PF03575;PF12697;PF12146;PF00561;PF03096;PF00975;PF00440;PF02878;PF02879;PF02880;PF00408;PF00067;PF05175;PF13489;PF02353;PF13847;PF07021;PF13649;PF08241;PF08242;PF13578;PF13581;PF13302;PF00583;PF00989;PF13188;PF08448;PF13426;PF01590;PF13185;PF13492;PF07228;PF04203;PF03992;PF04486;PF04673;PF00891;PF13649;PF16864;PF08100;PF13229;PF07602;PF12708;PF05048;PF02659;PF04471;PF13156;PF00857;PF06737;PF00005;PF13555;PF13304;PF12128;PF00089;PF13365;PF09342;PF01925;PF13581;PF13589;PF02518;PF03259;PF05331;PF00009;PF08477;PF00071;PF01926;PF03029;PF11991;PF00743;PF07992;PF13738;PF13434;PF13450;PF00890;PF01494;PF14535;PF00501;PF03061;PF05138;PF06243;PF05138 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8288250-8293976.1 8288250 8293976 5726 5 6 1 0.61630 antibacterial 0.66 0.04 0.13 0.40 Polyketide 0.01 0.00 0.17 0.69 0.05 0.06 0.03 NC_003888.3_NC_003888.3_7385;NC_003888.3_NC_003888.3_7386;NC_003888.3_NC_003888.3_7387;NC_003888.3_NC_003888.3_7388;NC_003888.3_NC_003888.3_7389 PF01636 PF05426;PF01636;PF05977;PF09835;PF07690;PF11706 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8311491-8314671.1 8311491 8314671 3180 2 2 0 0.52537 antibacterial 0.86 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7409;NC_003888.3_NC_003888.3_7410 PF02133;PF04616 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8319173-8321994.1 8319173 8321994 2821 2 4 1 0.61003 antibacterial 0.87 0.06 0.18 0.25 0.00 0.07 0.27 0.23 0.17 0.02 0.27 NC_003888.3_NC_003888.3_7415;NC_003888.3_NC_003888.3_7416 PF02668 PF02837;PF00703;PF02836;PF02668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8438150-8466318.1 8438150 8466318 28168 27 48 3 0.69385 0.44 0.44 0.18 0.13 0.08 0.01 0.40 0.20 0.10 0.14 0.25 NC_003888.3_NC_003888.3_7519;NC_003888.3_NC_003888.3_7520;NC_003888.3_NC_003888.3_7521;NC_003888.3_NC_003888.3_7522;NC_003888.3_NC_003888.3_7523;NC_003888.3_NC_003888.3_7524;NC_003888.3_NC_003888.3_7525;NC_003888.3_NC_003888.3_7526;NC_003888.3_NC_003888.3_7527;NC_003888.3_NC_003888.3_7528;NC_003888.3_NC_003888.3_7529;NC_003888.3_NC_003888.3_7530;NC_003888.3_NC_003888.3_7531;NC_003888.3_NC_003888.3_7532;NC_003888.3_NC_003888.3_7533;NC_003888.3_NC_003888.3_7534;NC_003888.3_NC_003888.3_7535;NC_003888.3_NC_003888.3_7536;NC_003888.3_NC_003888.3_7537;NC_003888.3_NC_003888.3_7538;NC_003888.3_NC_003888.3_7539;NC_003888.3_NC_003888.3_7540;NC_003888.3_NC_003888.3_7541;NC_003888.3_NC_003888.3_7542;NC_003888.3_NC_003888.3_7543;NC_003888.3_NC_003888.3_7544;NC_003888.3_NC_003888.3_7545 PF01266;PF02585;PF01494 PF04029;PF04264;PF13581;PF13560;PF13413;PF01381;PF04149;PF04672;PF09339;PF12802;PF13412;PF01614;PF01740;PF13466;PF04343;PF14534;PF12680;PF02233;PF12769;PF01262;PF05222;PF02909;PF00440;PF00070;PF03486;PF07992;PF01494;PF01266;PF13450;PF13738;PF01494;PF03486;PF01872;PF07995;PF02746;PF13378;PF00300;PF13385;PF02210;PF00149;PF02585;PF00704;PF09346;PF14568;PF02031;PF00413;PF00150;PF00553 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8468384-8563058.1 8468384 8563058 94674 88 209 23 0.91964 cytotoxic 0.48 0.54 0.21 0.15 NRP 0.01 0.64 0.08 0.42 0.00 0.04 0.02 NC_003888.3_NC_003888.3_7547;NC_003888.3_NC_003888.3_7548;NC_003888.3_NC_003888.3_7549;NC_003888.3_NC_003888.3_7550;NC_003888.3_NC_003888.3_7551;NC_003888.3_NC_003888.3_7552;NC_003888.3_NC_003888.3_7553;NC_003888.3_NC_003888.3_7554;NC_003888.3_NC_003888.3_7555;NC_003888.3_NC_003888.3_7556;NC_003888.3_NC_003888.3_7557;NC_003888.3_NC_003888.3_7558;NC_003888.3_NC_003888.3_7559;NC_003888.3_NC_003888.3_7560;NC_003888.3_NC_003888.3_7561;NC_003888.3_NC_003888.3_7562;NC_003888.3_NC_003888.3_7563;NC_003888.3_NC_003888.3_7564;NC_003888.3_NC_003888.3_7565;NC_003888.3_NC_003888.3_7566;NC_003888.3_NC_003888.3_7567;NC_003888.3_NC_003888.3_7568;NC_003888.3_NC_003888.3_7569;NC_003888.3_NC_003888.3_7570;NC_003888.3_NC_003888.3_7571;NC_003888.3_NC_003888.3_7572;NC_003888.3_NC_003888.3_7573;NC_003888.3_NC_003888.3_7574;NC_003888.3_NC_003888.3_7575;NC_003888.3_NC_003888.3_7576;NC_003888.3_NC_003888.3_7577;NC_003888.3_NC_003888.3_7578;NC_003888.3_NC_003888.3_7579;NC_003888.3_NC_003888.3_7580;NC_003888.3_NC_003888.3_7581;NC_003888.3_NC_003888.3_7582;NC_003888.3_NC_003888.3_7583;NC_003888.3_NC_003888.3_7584;NC_003888.3_NC_003888.3_7585;NC_003888.3_NC_003888.3_7586;NC_003888.3_NC_003888.3_7587;NC_003888.3_NC_003888.3_7588;NC_003888.3_NC_003888.3_7589;NC_003888.3_NC_003888.3_7590;NC_003888.3_NC_003888.3_7591;NC_003888.3_NC_003888.3_7592;NC_003888.3_NC_003888.3_7593;NC_003888.3_NC_003888.3_7594;NC_003888.3_NC_003888.3_7595;NC_003888.3_NC_003888.3_7596;NC_003888.3_NC_003888.3_7597;NC_003888.3_NC_003888.3_7598;NC_003888.3_NC_003888.3_7599;NC_003888.3_NC_003888.3_7600;NC_003888.3_NC_003888.3_7601;NC_003888.3_NC_003888.3_7602;NC_003888.3_NC_003888.3_7603;NC_003888.3_NC_003888.3_7604;NC_003888.3_NC_003888.3_7605;NC_003888.3_NC_003888.3_7606;NC_003888.3_NC_003888.3_7607;NC_003888.3_NC_003888.3_7608;NC_003888.3_NC_003888.3_7609;NC_003888.3_NC_003888.3_7610;NC_003888.3_NC_003888.3_7611;NC_003888.3_NC_003888.3_7612;NC_003888.3_NC_003888.3_7613;NC_003888.3_NC_003888.3_7614;NC_003888.3_NC_003888.3_7615;NC_003888.3_NC_003888.3_7616;NC_003888.3_NC_003888.3_7617;NC_003888.3_NC_003888.3_7618;NC_003888.3_NC_003888.3_7619;NC_003888.3_NC_003888.3_7620;NC_003888.3_NC_003888.3_7621;NC_003888.3_NC_003888.3_7622;NC_003888.3_NC_003888.3_7623;NC_003888.3_NC_003888.3_7624;NC_003888.3_NC_003888.3_7625;NC_003888.3_NC_003888.3_7626;NC_003888.3_NC_003888.3_7627;NC_003888.3_NC_003888.3_7628;NC_003888.3_NC_003888.3_7629;NC_003888.3_NC_003888.3_7630;NC_003888.3_NC_003888.3_7631;NC_003888.3_NC_003888.3_7632;NC_003888.3_NC_003888.3_7633;NC_003888.3_NC_003888.3_7634 PF08242;PF00106;PF00891;PF00107;PF00583;PF00501;PF01370;PF03364;PF01408;PF00903;PF00975;PF01494;PF00248;PF08241;PF00668;PF00067;PF01266;PF01636;PF00857;PF08240;PF08541;PF08659;PF00561 PF12802;PF01047;PF13463;PF12840;PF03466;PF00126;PF03446;PF12893;PF00903;PF08922;PF16653;PF03435;PF01113;PF02254;PF00440;PF02909;PF13828;PF13499;PF13833;PF13405;PF00036;PF13202;PF00196;PF08281;PF00072;PF07730;PF00561;PF08386;PF13977;PF16859;PF00440;PF13302;PF13420;PF00583;PF00903;PF00248;PF00248;PF13563;PF01186;PF01494;PF01266;PF13450;PF07885;PF00520;PF01872;PF07690;PF06779;PF01035;PF04343;PF11160;PF08240;PF00107;PF13602;PF01966;PF01494;PF05834;PF03486;PF07992;PF01946;PF01266;PF12831;PF00890;PF13450;PF01134;PF13738;PF04191;PF04140;PF08541;PF02797;PF00195;PF08392;PF01040;PF03640;PF13473;PF00127;PF06902;PF13459;PF13370;PF00496;PF00528;PF00528;PF13304;PF00005;PF13481;PF13191;PF13401;PF00004;PF02463;PF13193;PF00501;PF00550;PF00668;PF00501;PF13193;PF00668;PF00501;PF13489;PF01209;PF13847;PF13649;PF08242;PF08241;PF13193;PF00550;PF12697;PF00975;PF00561;PF01738;PF03435;PF01370;PF13460;PF01408;PF00891;PF13489;PF13649;PF08241;PF08242;PF00067;PF00975;PF12697;PF12146;PF13489;PF05219;PF13649;PF08242;PF08241;PF00664;PF00005;PF13555;PF13191;PF13401;PF13479;PF02463;PF00664;PF00005;PF13555;PF13191;PF02463;PF00425;PF13561;PF00106;PF01370;PF08659;PF00440;PF00903;PF12802;PF01047;PF09339;PF13412;PF13545;PF02333;PF01209;PF13649;PF08241;PF08242;PF09278;PF13411;PF00376;PF00027;PF02353;PF08241;PF13649;PF00392;PF07729;PF07690;PF00440;PF02909;PF07992;PF13450;PF01494;PF13560;PF01381;PF11512;PF13483;PF12706;PF12802;PF13463;PF01047;PF12840;PF13412;PF13545;PF01636;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13302;PF00583;PF04672;PF08327;PF10604;PF03364;PF00440;PF13384;PF11716;PF12867;PF07398;PF04978;PF12867;PF13560;PF09339;PF13404;PF00857;PF01978;PF13463;PF12802;PF01047 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8563624-8572470.1 8563624 8572470 8846 7 12 0 0.52668 antibacterial 0.78 0.07 0.13 0.33 0.00 0.07 0.16 0.22 0.31 0.04 0.24 NC_003888.3_NC_003888.3_7636;NC_003888.3_NC_003888.3_7637;NC_003888.3_NC_003888.3_7638;NC_003888.3_NC_003888.3_7639;NC_003888.3_NC_003888.3_7640;NC_003888.3_NC_003888.3_7641;NC_003888.3_NC_003888.3_7642 PF02678;PF05726;PF14542;PF03795;PF12844;PF13560;PF01381;PF01381;PF13384;PF13542;PF04632;PF13515 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8577480-8584200.1 8577480 8584200 6720 6 9 0 0.54096 antibacterial 0.76 0.13 0.17 0.23 0.00 0.05 0.33 0.25 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7648;NC_003888.3_NC_003888.3_7649;NC_003888.3_NC_003888.3_7650;NC_003888.3_NC_003888.3_7651;NC_003888.3_NC_003888.3_7652;NC_003888.3_NC_003888.3_7653 PF01978;PF12802;PF13463;PF01047;PF13340;PF07228;PF07228;PF02607;PF02310 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8584660-8586017.1 8584660 8586017 1357 2 6 0 0.52045 antibacterial 0.81 0.10 0.17 0.22 0.00 0.07 0.40 0.19 0.20 0.02 0.16 NC_003888.3_NC_003888.3_7655;NC_003888.3_NC_003888.3_7656 PF12802;PF01047;PF13412;PF01325;PF09339;PF08570 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8607538-8608480.1 8607538 8608480 942 1 4 0 0.53548 antibacterial 0.81 0.06 0.16 0.29 0.00 0.11 0.11 0.29 0.21 0.04 0.29 NC_003888.3_NC_003888.3_7680 PF14525;PF13384;PF12833;PF00165 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8610787-8635487.1 8610787 8635487 24700 30 42 5 0.83777 antibacterial 0.54 0.26 0.20 0.31 Polyketide 0.01 0.08 0.12 0.68 0.08 0.03 0.08 NC_003888.3_NC_003888.3_7682;NC_003888.3_NC_003888.3_7683;NC_003888.3_NC_003888.3_7684;NC_003888.3_NC_003888.3_7685;NC_003888.3_NC_003888.3_7686;NC_003888.3_NC_003888.3_7687;NC_003888.3_NC_003888.3_7688;NC_003888.3_NC_003888.3_7689;NC_003888.3_NC_003888.3_7690;NC_003888.3_NC_003888.3_7691;NC_003888.3_NC_003888.3_7692;NC_003888.3_NC_003888.3_7693;NC_003888.3_NC_003888.3_7694;NC_003888.3_NC_003888.3_7695;NC_003888.3_NC_003888.3_7696;NC_003888.3_NC_003888.3_7697;NC_003888.3_NC_003888.3_7698;NC_003888.3_NC_003888.3_7699;NC_003888.3_NC_003888.3_7700;NC_003888.3_NC_003888.3_7701;NC_003888.3_NC_003888.3_7702;NC_003888.3_NC_003888.3_7703;NC_003888.3_NC_003888.3_7704;NC_003888.3_NC_003888.3_7705;NC_003888.3_NC_003888.3_7706;NC_003888.3_NC_003888.3_7707;NC_003888.3_NC_003888.3_7708;NC_003888.3_NC_003888.3_7709;NC_003888.3_NC_003888.3_7710;NC_003888.3_NC_003888.3_7711 PF00106;PF01494;PF08659;PF00107;PF01370 PF00881;PF02909;PF13358;PF09076;PF01494;PF07992;PF00890;PF01494;PF00890;PF07992;PF00107;PF00440;PF02909;PF13586;PF01609;PF10756;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF14145;PF01548;PF13022;PF00440;PF00356;PF00106;PF08659;PF01370;PF13561;PF06197;PF13359;PF01609;PF13613;PF04072;PF13561;PF00106;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8642713-8643713.1 8642713 8643713 1000 2 3 0 0.54261 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_7719;NC_003888.3_NC_003888.3_7720 PF14079;PF13305;PF00440 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_31460-41750.1 31460 41750 10290 13 23 4 0.61532 antibacterial 0.76 0.13 0.12 0.31 Polyketide 0.02 0.07 0.15 0.58 0.01 0.08 0.12 NC_003903.1_NC_003903.1_34;NC_003903.1_NC_003903.1_35;NC_003903.1_NC_003903.1_36;NC_003903.1_NC_003903.1_37;NC_003903.1_NC_003903.1_38;NC_003903.1_NC_003903.1_39;NC_003903.1_NC_003903.1_40;NC_003903.1_NC_003903.1_41;NC_003903.1_NC_003903.1_42;NC_003903.1_NC_003903.1_43;NC_003903.1_NC_003903.1_44;NC_003903.1_NC_003903.1_45;NC_003903.1_NC_003903.1_46 PF02585;PF00106;PF01370;PF08659 PF07228;PF02585;PF12833;PF00165;PF12852;PF00106;PF01370;PF08659;PF13561;PF13460;PF13586;PF01609;PF13340;PF07228;PF16859;PF16925;PF00440;PF00106;PF08659;PF01370;PF16363;PF13460;PF13561 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_60518-60743.1 60518 60743 225 1 1 0 0.60639 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003903.1_NC_003903.1_70 PF04149 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_63898-66577.1 63898 66577 2679 1 1 0 0.52239 antibacterial 0.76 0.06 0.17 0.24 0.00 0.08 0.23 0.20 0.20 0.00 0.31 NC_003903.1_NC_003903.1_75 PF13191 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_159898-165658.1 159898 165658 5760 6 5 1 0.55200 antibacterial 0.76 0.06 0.18 0.24 0.00 0.07 0.26 0.20 0.20 0.00 0.28 NC_003903.1_NC_003903.1_184;NC_003903.1_NC_003903.1_185;NC_003903.1_NC_003903.1_186;NC_003903.1_NC_003903.1_187;NC_003903.1_NC_003903.1_188;NC_003903.1_NC_003903.1_189 PF00903 PF00903;PF13144;PF08666;PF00437;PF13191 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_230262-324563.1 230262 324563 94301 108 113 20 0.85951 antibacterial 0.59 0.48 0.14 0.14 0.10 0.22 0.34 0.36 0.01 0.09 0.05 NC_003903.1_NC_003903.1_253;NC_003903.1_NC_003903.1_254;NC_003903.1_NC_003903.1_255;NC_003903.1_NC_003903.1_256;NC_003903.1_NC_003903.1_257;NC_003903.1_NC_003903.1_258;NC_003903.1_NC_003903.1_259;NC_003903.1_NC_003903.1_260;NC_003903.1_NC_003903.1_261;NC_003903.1_NC_003903.1_262;NC_003903.1_NC_003903.1_263;NC_003903.1_NC_003903.1_264;NC_003903.1_NC_003903.1_265;NC_003903.1_NC_003903.1_266;NC_003903.1_NC_003903.1_267;NC_003903.1_NC_003903.1_268;NC_003903.1_NC_003903.1_269;NC_003903.1_NC_003903.1_270;NC_003903.1_NC_003903.1_271;NC_003903.1_NC_003903.1_272;NC_003903.1_NC_003903.1_273;NC_003903.1_NC_003903.1_274;NC_003903.1_NC_003903.1_275;NC_003903.1_NC_003903.1_276;NC_003903.1_NC_003903.1_277;NC_003903.1_NC_003903.1_278;NC_003903.1_NC_003903.1_279;NC_003903.1_NC_003903.1_280;NC_003903.1_NC_003903.1_281;NC_003903.1_NC_003903.1_282;NC_003903.1_NC_003903.1_283;NC_003903.1_NC_003903.1_284;NC_003903.1_NC_003903.1_285;NC_003903.1_NC_003903.1_286;NC_003903.1_NC_003903.1_287;NC_003903.1_NC_003903.1_288;NC_003903.1_NC_003903.1_289;NC_003903.1_NC_003903.1_290;NC_003903.1_NC_003903.1_291;NC_003903.1_NC_003903.1_292;NC_003903.1_NC_003903.1_293;NC_003903.1_NC_003903.1_294;NC_003903.1_NC_003903.1_295;NC_003903.1_NC_003903.1_296;NC_003903.1_NC_003903.1_297;NC_003903.1_NC_003903.1_298;NC_003903.1_NC_003903.1_299;NC_003903.1_NC_003903.1_300;NC_003903.1_NC_003903.1_301;NC_003903.1_NC_003903.1_302;NC_003903.1_NC_003903.1_303;NC_003903.1_NC_003903.1_304;NC_003903.1_NC_003903.1_305;NC_003903.1_NC_003903.1_306;NC_003903.1_NC_003903.1_307;NC_003903.1_NC_003903.1_308;NC_003903.1_NC_003903.1_309;NC_003903.1_NC_003903.1_310;NC_003903.1_NC_003903.1_311;NC_003903.1_NC_003903.1_312;NC_003903.1_NC_003903.1_313;NC_003903.1_NC_003903.1_314;NC_003903.1_NC_003903.1_315;NC_003903.1_NC_003903.1_316;NC_003903.1_NC_003903.1_317;NC_003903.1_NC_003903.1_318;NC_003903.1_NC_003903.1_319;NC_003903.1_NC_003903.1_320;NC_003903.1_NC_003903.1_321;NC_003903.1_NC_003903.1_322;NC_003903.1_NC_003903.1_323;NC_003903.1_NC_003903.1_324;NC_003903.1_NC_003903.1_325;NC_003903.1_NC_003903.1_326;NC_003903.1_NC_003903.1_327;NC_003903.1_NC_003903.1_328;NC_003903.1_NC_003903.1_329;NC_003903.1_NC_003903.1_330;NC_003903.1_NC_003903.1_331;NC_003903.1_NC_003903.1_332;NC_003903.1_NC_003903.1_333;NC_003903.1_NC_003903.1_334;NC_003903.1_NC_003903.1_335;NC_003903.1_NC_003903.1_336;NC_003903.1_NC_003903.1_337;NC_003903.1_NC_003903.1_338;NC_003903.1_NC_003903.1_339;NC_003903.1_NC_003903.1_340;NC_003903.1_NC_003903.1_341;NC_003903.1_NC_003903.1_342;NC_003903.1_NC_003903.1_343;NC_003903.1_NC_003903.1_344;NC_003903.1_NC_003903.1_345;NC_003903.1_NC_003903.1_346;NC_003903.1_NC_003903.1_347;NC_003903.1_NC_003903.1_348;NC_003903.1_NC_003903.1_349;NC_003903.1_NC_003903.1_350;NC_003903.1_NC_003903.1_351;NC_003903.1_NC_003903.1_352;NC_003903.1_NC_003903.1_353;NC_003903.1_NC_003903.1_354;NC_003903.1_NC_003903.1_355;NC_003903.1_NC_003903.1_356;NC_003903.1_NC_003903.1_357;NC_003903.1_NC_003903.1_358;NC_003903.1_NC_003903.1_359;NC_003903.1_NC_003903.1_360 PF02585;PF00106;PF02770;PF00441;PF00583;PF01370;PF08545;PF01408;PF03756;PF08028;PF01118;PF00975;PF02771;PF02737;PF01636;PF01266;PF02894;PF00702;PF08541;PF08659 PF01370;PF01613;PF13577;PF13560;PF10727;PF02826;PF03807;PF03446;PF02558;PF02737;PF00724;PF05655;PF13521;PF08545;PF08541;PF00550;PF12710;PF08282;PF13521;PF13238;PF13347;PF07690;PF12840;PF01022;PF02894;PF01408;PF13380;PF00296;PF00975;PF12697;PF00440;PF03756;PF02771;PF02770;PF00441;PF08028;PF12710;PF00702;PF08282;PF00440;PF13646;PF00932;PF00872;PF10551;PF00932;PF07510;PF00583;PF13302;PF13517;PF05593;PF14690;PF13005;PF01610;PF05534;PF08681;PF08239;PF02735;PF01402;PF13191;PF06414;PF13671;PF13191;PF14267;PF04149;PF12844;PF13560;PF01381;PF13443;PF13744;PF13581;PF01557;PF01118;PF09290;PF00682;PF07836;PF03328;PF15617;PF01575;PF13527;PF13530;PF01636;PF02585;PF07690;PF05977;PF00083;PF07992;PF00890;PF01266;PF03486;PF13450;PF13460;PF13561;PF00106;PF08659;PF01370;PF16363;PF00440;PF16925;PF16859;PF07228;PF13340;PF01609;PF13586;PF13561;PF00106;PF01370;PF08659;PF13460;PF12852;PF00165;PF12833;PF02585;PF07228 diff --git a/example_data/sco_duptable.tsv b/example_data/sco_duptable.tsv deleted file mode 100644 index 81ca146..0000000 --- a/example_data/sco_duptable.tsv +++ /dev/null @@ -1,73 +0,0 @@ -#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description -TIGR01358 2.0 1.0 0.134 0.8474 0.8632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2272072 2273419 -1 # ID=1_2079|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3519448 3520903 -1 # ID=1_3163|Type=CDS|transl_table=11] DAHP_synth_II: 3-deoxy-7-phosphoheptulonate synthase -TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791175 3791412 1 # ID=1_3380|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6062058 6062244 -1 # ID=1_5496|Type=CDS|transl_table=11] L28: ribosomal protein bL28 -TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6206674 6207832 1 # ID=1_5627|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7524432 7525587 1 # ID=1_6687|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase -TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2753869 2755006 -1 # ID=1_2512|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4048920 4050120 -1 # ID=1_3613|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ -TIGR02200 2.0 1.0 0.0 0.6737 0.6737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3804031 3804376 1 # ID=1_3393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5644428 5644671 -1 # ID=1_5118|Type=CDS|transl_table=11] GlrX_actino: glutaredoxin-like protein -TIGR00663 2.0 1.0 0.333 0.8684 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4268712 4269843 -1 # ID=1_3822|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|112311 113430 1 # ID=2_7877|Type=CDS|transl_table=11] TIGR00663: dnan: DNA polymerase III, beta subunit -TIGR01048 2.0 1.0 0.4252 0.7263 0.8895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5820661 5822053 1 # ID=1_5284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7121124 7122447 1 # ID=1_6363|Type=CDS|transl_table=11] lysA: diaminopimelate decarboxylase -TIGR00546 2.0 1.0 0.5356 0.5368 0.7579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1069701 1071315 -1 # ID=1_974|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1412773 1414348 1 # ID=1_1296|Type=CDS|transl_table=11] lnt: apolipoprotein N-acyltransferase -TIGR00544 2.0 1.0 0.401 0.8947 0.9632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2185227 2186259 -1 # ID=1_1997|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8641684 8642638 -1 # ID=1_7718|Type=CDS|transl_table=11] lgt: prolipoprotein diacylglyceryl transferase -TIGR00260 2.0 1.0 0.4739 0.6421 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4708600 4709893 1 # ID=1_4231|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5823510 5824569 1 # ID=1_5286|Type=CDS|transl_table=11] thrC: threonine synthase -TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2068834 2069953 1 # ID=1_1899|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7399382 7400528 -1 # ID=1_6583|Type=CDS|transl_table=11] tal_mycobact: transaldolase -TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3789247 3789487 -1 # ID=1_3376|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4304257 4304494 1 # ID=1_3851|Type=CDS|transl_table=11] S18: ribosomal protein bS18 -TIGR00494 2.0 1.0 0.4687 0.3579 0.4842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7835927 7836392 1 # ID=1_6962|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7836729 7837104 1 # ID=1_6964|Type=CDS|transl_table=11] crcB: protein CrcB -TIGR00193 2.0 1.0 0.5356 0.4737 0.5737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1310292 1310595 -1 # ID=1_1194|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6019303 6019987 1 # ID=1_5456|Type=CDS|transl_table=11] urease_gam: urease, gamma subunit -TIGR00872 2.0 1.0 0.4307 0.5684 0.6421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4267593 4268469 -1 # ID=1_3821|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7394147 7395029 -1 # ID=1_6579|Type=CDS|transl_table=11] gnd_rel: 6-phosphogluconate dehydrogenase (decarboxylating) -TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5671274 5672591 -1 # ID=1_5144|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7580931 7582254 -1 # ID=1_6738|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase -TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2069956 2071480 1 # ID=1_1900|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7397607 7399386 -1 # ID=1_6582|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase -TIGR03954 3.0 2.0 0.4551 0.2421 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5880227 5880572 1 # ID=1_5340|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5883320 5883662 1 # ID=1_5345|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6470908 6473461 -1 # ID=1_5836|Type=CDS|transl_table=11] integ_memb_HG: integral membrane protein -TIGR00534 2.0 1.0 0.424 0.2526 0.3 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2071476 2072532 1 # ID=1_1901|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7396675 7397611 -1 # ID=1_6581|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA -TIGR01129 2.0 1.0 0.3282 0.7895 0.9 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1621003 1622815 -1 # ID=1_1476|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6762661 6765049 -1 # ID=1_6092|Type=CDS|transl_table=11] secD: protein-export membrane protein SecD -TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1401206 1402082 1 # ID=1_1285|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7837143 7837980 1 # ID=1_6965|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP -TIGR00759 3.0 1.0 0.4291 0.6895 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2348739 2351439 1 # ID=1_2146|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2539575 2542332 1 # ID=1_2329|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7914736 7917424 -1 # ID=1_7038|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type -TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5670248 5671262 -1 # ID=1_5143|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6750130 6751231 1 # ID=1_6081|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A -TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2162745 2165244 -1 # ID=1_1981|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2861629 2864203 1 # ID=1_2596|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2873769 2876343 1 # ID=1_2604|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N -TIGR03181 2.0 1.0 0.5945 0.3368 0.6105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4195942 4197196 -1 # ID=1_3760|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4213271 4214438 -1 # ID=1_3775|Type=CDS|transl_table=11] PDH_E1_alph_x: pyruvate dehydrogenase (acetyl-transferring) E1 component, alpha subunit -TIGR01311 2.0 1.0 0.7691 0.6474 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|544193 545717 1 # ID=1_469|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1778725 1780264 1 # ID=1_1621|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase -TIGR00575 2.0 1.0 0.3226 0.8263 0.9368 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5978784 5980992 1 # ID=1_5425|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8337388 8339491 -1 # ID=1_7431|Type=CDS|transl_table=11] dnlj: DNA ligase, NAD-dependent -TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1636965 1638942 -1 # ID=1_1491|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4153188 4154442 1 # ID=1_3721|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase -TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5832393 5833041 1 # ID=1_5293|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8173118 8173739 -1 # ID=1_7269|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family -TIGR01263 2.0 1.0 0.609 0.2579 0.3579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3178619 3179765 -1 # ID=1_2885|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3541950 3543027 -1 # ID=1_3182|Type=CDS|transl_table=11] 4HPPD: 4-hydroxyphenylpyruvate dioxygenase -TIGR00465 2.0 1.0 0.1928 0.9158 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6005642 6006641 1 # ID=1_5445|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7947902 7948901 -1 # ID=1_7068|Type=CDS|transl_table=11] ilvC: ketol-acid reductoisomerase -TIGR01828 2.0 1.0 0.2247 0.3737 0.3947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|197220 199917 1 # ID=1_173|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2684903 2687633 -1 # ID=1_2452|Type=CDS|transl_table=11] pyru_phos_dikin: pyruvate, phosphate dikinase -TIGR01292 2.0 1.0 0.4096 0.8684 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4280582 4281551 -1 # ID=1_3833|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7605260 7606241 -1 # ID=1_6752|Type=CDS|transl_table=11] TRX_reduct: thioredoxin-disulfide reductase -TIGR00180 3.0 1.0 0.4697 0.8579 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4278314 4279181 1 # ID=1_3830|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|130086 131214 1 # ID=2_7896|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|222644 223790 1 # ID=2_7984|Type=CDS|transl_table=11] parB_part: ParB/RepB/Spo0J family partition protein -TIGR01296 2.0 1.0 0.4279 0.7211 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2870835 2871858 1 # ID=1_2601|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3993329 3994418 -1 # ID=1_3558|Type=CDS|transl_table=11] asd_B: aspartate-semialdehyde dehydrogenase -TIGR02227 3.0 1.0 1.1572 0.5579 0.9789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6099895 6100675 1 # ID=1_5529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6101640 6102651 1 # ID=1_5531|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6102755 6103532 1 # ID=1_5532|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I -TIGR00232 2.0 1.0 0.3575 0.8263 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2066712 2068800 1 # ID=1_1898|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7400591 7402688 -1 # ID=1_6584|Type=CDS|transl_table=11] tktlase_bact: transketolase -TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3691373 3692384 1 # ID=1_3284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5271518 5272538 1 # ID=1_4770|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase -TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1662891 1666530 -1 # ID=1_1516|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2338273 2339347 1 # ID=1_2138|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase -SHMT 4.0 1.0 0.8787 0.5842 0.9474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5269285 5270731 1 # ID=1_4768|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5833805 5835062 1 # ID=1_5295|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5955946 5957209 -1 # ID=1_5401|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7560697 7561891 1 # ID=1_6719|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase -TIGR02133 2.0 1.0 0.6088 0.6895 0.8526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|620366 620879 -1 # ID=1_538|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2854111 2854597 -1 # ID=1_2588|Type=CDS|transl_table=11] RPI_actino: ribose 5-phosphate isomerase -TIGR02138 2.0 1.0 0.3956 0.7895 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4555527 4556538 -1 # ID=1_4078|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7576035 7577847 -1 # ID=1_6734|Type=CDS|transl_table=11] phosphate_pstC: phosphate ABC transporter, permease protein PstC -TIGR00247 2.0 1.0 0.3281 0.7526 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1201485 1202247 -1 # ID=1_1100|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1600713 1602462 -1 # ID=1_1459|Type=CDS|transl_table=11] TIGR00247: conserved hypothetical protein, YceG family -TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3043785 3045603 1 # ID=1_2749|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5153333 5155181 1 # ID=1_4673|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) -Cpn10 2.0 1.0 0.519 0.6211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3153869 3154226 -1 # ID=1_2859|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5172736 5173045 1 # ID=1_4694|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit -TIGR01428 2.0 1.0 0.5276 0.2105 0.2789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|425290 425983 1 # ID=1_362|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3808428 3809106 -1 # ID=1_3396|Type=CDS|transl_table=11] HAD_type_II: haloacid dehalogenase, type II -Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791411 3791717 1 # ID=1_3381|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5134359 5134545 1 # ID=1_4648|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e -TIGR01490 4.0 2.0 0.9067 0.2526 0.8316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3673972 3674866 1 # ID=1_3272|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3933751 3934558 1 # ID=1_3504|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|239675 240374 1 # ID=2_8002|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|249460 250255 1 # ID=2_8012|Type=CDS|transl_table=11] HAD-SF-IB-hyp1: HAD hydrolase, family IB -TIGR03356 5.0 2.0 1.4956 0.2105 0.4526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1116446 1117826 1 # ID=1_1017|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2728979 2730326 1 # ID=1_2489|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3054669 3056109 1 # ID=1_2758|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7324810 7326169 1 # ID=1_6529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8380678 8382118 1 # ID=1_7467|Type=CDS|transl_table=11] BGL: beta-galactosidase -TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6594925 6596854 1 # ID=1_5942|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7525612 7527583 1 # ID=1_6688|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase -TIGR01179 2.0 1.0 0.6237 0.6947 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3257699 3258680 1 # ID=1_2945|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3437661 3438627 -1 # ID=1_3092|Type=CDS|transl_table=11] galE: UDP-glucose 4-epimerase GalE -TIGR01031 2.0 1.0 0.4408 0.7316 0.9579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|457483 457654 1 # ID=1_393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6069793 6069967 1 # ID=1_5503|Type=CDS|transl_table=11] rpmF_bact: ribosomal protein bL32 -TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1210321 1210594 1 # ID=1_1107|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790677 3790932 -1 # ID=1_3378|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5830019 5830244 1 # ID=1_5290|Type=CDS|transl_table=11] L31: ribosomal protein bL31 -TIGR00674 2.0 1.0 0.6145 0.7737 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2048211 2049129 1 # ID=1_1875|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6266752 6267652 1 # ID=1_5674|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase -TIGR01515 2.0 1.0 0.2643 0.8105 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5914594 5916919 -1 # ID=1_5371|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8143093 8145319 -1 # ID=1_7243|Type=CDS|transl_table=11] branching_enzym: 1,4-alpha-glucan branching enzyme -TIGR01513 2.0 1.0 0.2556 0.9053 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|161236 162553 1 # ID=1_137|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3166795 3168142 1 # ID=1_2875|Type=CDS|transl_table=11] NAPRTase_put: nicotinate phosphoribosyltransferase -TIGR00773 3.0 1.0 0.6807 0.4263 0.6895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|16069 17302 -1 # ID=1_13|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3943389 3944814 1 # ID=1_3510|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8650205 8651438 1 # ID=1_7726|Type=CDS|transl_table=11] NhaA: Na+/H+ antiporter NhaA -TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2745001 2746024 -1 # ID=1_2504|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5068591 5069623 -1 # ID=1_4578|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5334545 5335736 1 # ID=1_4831|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6161551 6162613 -1 # ID=1_5593|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8077470 8078550 1 # ID=1_7179|Type=CDS|transl_table=11] aden_deam: adenosine deaminase -TIGR02891 2.0 1.0 0.9994 0.4474 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2316757 2318494 -1 # ID=1_2119|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8041765 8043442 1 # ID=1_7145|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I -TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1282581 1283121 -1 # ID=1_1169|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4977868 4978495 -1 # ID=1_4494|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5680106 5680757 1 # ID=1_5153|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase -TIGR01023 3.0 1.0 0.6482 0.5737 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|612155 612320 -1 # ID=1_529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790938 3791103 -1 # ID=1_3379|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5061598 5061763 1 # ID=1_4569|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 -TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2445704 2446967 1 # ID=1_2236|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4363347 4364685 -1 # ID=1_3906|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme -TIGR01245 2.0 1.0 0.1699 0.8579 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2308850 2309915 -1 # ID=1_2111|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3521672 3522704 -1 # ID=1_3165|Type=CDS|transl_table=11] trpD: anthranilate phosphoribosyltransferase -TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1923749 1924289 1 # ID=1_1756|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4413741 4414275 -1 # ID=1_3955|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family -TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1396237 1397416 -1 # ID=1_1280|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5092129 5093323 1 # ID=1_4596|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu -TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5089829 5091956 1 # ID=1_4595|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7301062 7303123 1 # ID=1_6514|Type=CDS|transl_table=11] EF-G: translation elongation factor G -TIGR01701 2.0 1.0 0.6849 0.3526 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2144638 2146918 1 # ID=1_1967|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8342695 8344990 1 # ID=1_7434|Type=CDS|transl_table=11] Fdhalpha-like: oxidoreductase alpha (molybdopterin) subunit -TIGR00212 2.0 1.0 0.3216 0.7947 0.8789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3669716 3670676 -1 # ID=1_3268|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8156603 8157545 -1 # ID=1_7254|Type=CDS|transl_table=11] hemC: hydroxymethylbilane synthase -TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2156336 2157773 -1 # ID=1_1977|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5892974 5894405 -1 # ID=1_5354|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase -TIGR01060 2.0 1.0 0.3455 0.9 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3390540 3391821 -1 # ID=1_3053|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8466853 8468158 -1 # ID=1_7546|Type=CDS|transl_table=11] eno: phosphopyruvate hydratase -TIGR01344 2.0 1.0 0.5307 0.2684 0.4 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1035207 1036800 1 # ID=1_944|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6865735 6867358 -1 # ID=1_6175|Type=CDS|transl_table=11] malate_syn_A: malate synthase A -TIGR01534 3.0 1.0 0.6895 0.6737 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2080142 2081153 -1 # ID=1_1910|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7832789 7834235 -1 # ID=1_6958|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8325356 8326355 -1 # ID=1_7420|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/example_data/sco_gecco.tsv b/example_data/sco_gecco.tsv deleted file mode 100644 index 60d5eed..0000000 --- a/example_data/sco_gecco.tsv +++ /dev/null @@ -1,21 +0,0 @@ -sequence_id bgc_id start end average_p max_p type alkaloid_probability polyketide_probability ripp_probability saccharide_probability terpene_probability nrp_probability other_probability proteins domains -AL645882.2 AL645882.2_cluster_1 103781 121371 0.8192887299726135 0.9994207183607371 Polyketide 0.010000000000000009 0.65 0.0 0.030000000000000027 0.010000000000000009 0.07999999999999996 0.31999999999999995 AL645882.2_97;AL645882.2_98;AL645882.2_99;AL645882.2_100;AL645882.2_101;AL645882.2_102 PF00106;PF00109;PF00550;PF00698;PF00753;PF01370;PF02801;PF07977;PF07993;PF08659;PF13561;PF14765;PF16197;TIGR00128;TIGR01181;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR02813;TIGR02814;TIGR02816;TIGR03131;TIGR03150;TIGR03443;TIGR03466;TIGR03971 -AL645882.2 AL645882.2_cluster_2 168705 177496 0.6591589380928025 0.8501282383918205 Terpene 0.010000000000000009 0.08999999999999997 0.0 0.0 0.87 0.0 0.040000000000000036 AL645882.2_148;AL645882.2_149;AL645882.2_150;AL645882.2_151;AL645882.2_152;AL645882.2_153;AL645882.2_154;AL645882.2_155 PF00348;PF00494;PF00582;PF00890;PF01266;PF01593;PF11066;PF13450;TIGR02730;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03464;TIGR03465;TIGR03467 -AL645882.2 AL645882.2_cluster_3 255311 262319 0.7562788359477977 0.8688657410419955 Unknown 0.0 0.26 0.47 0.0 0.0 0.0 0.27 AL645882.2_231;AL645882.2_232;AL645882.2_233;AL645882.2_234;AL645882.2_235 PF00528;PF00561;PF00975;PF04738;PF05147;PF12146;PF12697;PF14028;TIGR00969;TIGR01581;TIGR01738;TIGR02427;TIGR03056;TIGR03262;TIGR03611;TIGR03695;TIGR03891;TIGR03897 -AL645882.2 AL645882.2_cluster_4 498683 533448 0.7693747042622983 0.9999696830916295 NRP 0.0 0.10999999999999999 0.12 0.030000000000000027 0.020000000000000018 0.7 0.040000000000000036 AL645882.2_440;AL645882.2_441;AL645882.2_442;AL645882.2_443;AL645882.2_444;AL645882.2_445;AL645882.2_446;AL645882.2_447;AL645882.2_448;AL645882.2_449;AL645882.2_450;AL645882.2_451;AL645882.2_452;AL645882.2_453;AL645882.2_454;AL645882.2_455;AL645882.2_456;AL645882.2_457;AL645882.2_458;AL645882.2_459;AL645882.2_460;AL645882.2_461 PF00005;PF00440;PF00501;PF00550;PF00664;PF00668;PF01266;PF01494;PF03621;PF07992;PF09339;PF12802;PF12902;PF13191;PF13193;PF13304;PF13434;PF13450;TIGR00630;TIGR00655;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01318;TIGR01720;TIGR01733;TIGR01734;TIGR01842;TIGR01846;TIGR01923;TIGR01978;TIGR01984;TIGR01988;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02372;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03375;TIGR03384;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03968;TIGR04406;TIGR04439;TIGR04520;TIGR04521 -AL645882.2 AL645882.2_cluster_6 1335695 1361419 0.8473264250182975 0.902810689697336 Polyketide 0.050000000000000044 0.53 0.030000000000000027 0.020000000000000018 0.020000000000000018 0.15000000000000002 0.28 AL645882.2_1225;AL645882.2_1226;AL645882.2_1227;AL645882.2_1228;AL645882.2_1229;AL645882.2_1230;AL645882.2_1231;AL645882.2_1232;AL645882.2_1233;AL645882.2_1234;AL645882.2_1235;AL645882.2_1236;AL645882.2_1237;AL645882.2_1238;AL645882.2_1239;AL645882.2_1240;AL645882.2_1241;AL645882.2_1242;AL645882.2_1243;AL645882.2_1244;AL645882.2_1245;AL645882.2_1246;AL645882.2_1247;AL645882.2_1248;AL645882.2_1249 PF00109;PF00155;PF00202;PF00364;PF00392;PF00550;PF00561;PF00676;PF00890;PF01266;PF01370;PF01494;PF01613;PF01674;PF01946;PF02089;PF02770;PF02775;PF02801;PF03109;PF03364;PF04072;PF04321;PF04820;PF07993;PF08281;PF08541;PF08545;PF10604;PF12697;PF13292;PF13450;PF13460;TIGR00027;TIGR00292;TIGR00508;TIGR00517;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR00747;TIGR00748;TIGR01214;TIGR01265;TIGR01347;TIGR01348;TIGR01746;TIGR01835;TIGR01885;TIGR01982;TIGR02018;TIGR02032;TIGR02296;TIGR02325;TIGR02352;TIGR02404;TIGR02407;TIGR02813;TIGR02937;TIGR02946;TIGR02959;TIGR03150;TIGR03181;TIGR03182;TIGR03197;TIGR03246;TIGR03251;TIGR03338;TIGR03364;TIGR03372;TIGR03443;TIGR03466;TIGR03615;TIGR03695;TIGR03947;TIGR04022;TIGR04544 -AL645882.2 AL645882.2_cluster_7 1998468 2002980 0.8034485206666728 0.9107236204333993 Other 0.030000000000000027 0.020000000000000018 0.0 0.0 0.0 0.0 0.95 AL645882.2_1826;AL645882.2_1827;AL645882.2_1828;AL645882.2_1829;AL645882.2_1830 PF00202;PF00266;PF00583;PF05721;PF06339;PF13508;TIGR00508;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR01762;TIGR01885;TIGR01976;TIGR01977;TIGR02406;TIGR02407;TIGR02408;TIGR03246;TIGR03251;TIGR03372 -AL645882.2 AL645882.2_cluster_8 2931776 2950345 0.7951811973663155 0.9993573020515812 Saccharide 0.0 0.020000000000000018 0.0 0.74 0.020000000000000018 0.050000000000000044 0.18000000000000005 AL645882.2_2651;AL645882.2_2652;AL645882.2_2653;AL645882.2_2654;AL645882.2_2655;AL645882.2_2656;AL645882.2_2657;AL645882.2_2658;AL645882.2_2659;AL645882.2_2660;AL645882.2_2661;AL645882.2_2662;AL645882.2_2663;AL645882.2_2664;AL645882.2_2665;AL645882.2_2666;AL645882.2_2667;AL645882.2_2668;AL645882.2_2669 PF00264;PF00383;PF00389;PF00400;PF00534;PF00535;PF02397;PF02668;PF02826;PF03777;PF06236;PF07690;PF12832;PF12894;PF13439;PF13477;PF13506;PF13524;PF13579;PF13632;PF13641;PF13692;PF13727;PF14437;TIGR00227;TIGR00326;TIGR00900;TIGR01327;TIGR01508;TIGR02095;TIGR02149;TIGR03013;TIGR03022;TIGR03023;TIGR03025;TIGR03030;TIGR03087;TIGR03088;TIGR03449;TIGR03469;TIGR03937;TIGR03946;TIGR03965;TIGR03999;TIGR04047;TIGR04063;TIGR04157 -AL645882.2 AL645882.2_cluster_9 3032065 3040682 0.7962707288747192 0.9058104647132605 Other 0.010000000000000009 0.24 0.010000000000000009 0.0 0.030000000000000027 0.020000000000000018 0.7 AL645882.2_2741;AL645882.2_2742;AL645882.2_2743;AL645882.2_2744;AL645882.2_2745;AL645882.2_2746;AL645882.2_2747 PF00266;PF00282;PF00441;PF02770;PF02771;PF04183;PF04954;PF05889;PF06276;PF08021;PF08028;PF13434;PF13523;PF13738;TIGR03203;TIGR03204;TIGR03207;TIGR03799;TIGR03811;TIGR03812;TIGR04022;TIGR04046;TIGR04431;TIGR04439 -AL645882.2 AL645882.2_cluster_10 3524828 3602320 0.752421552194178 0.9999999998258269 NRP 0.0 0.19499999999999995 0.0 0.010000000000000009 0.0 0.97 0.0 AL645882.2_3170;AL645882.2_3171;AL645882.2_3172;AL645882.2_3173;AL645882.2_3174;AL645882.2_3175;AL645882.2_3176;AL645882.2_3177;AL645882.2_3178;AL645882.2_3179;AL645882.2_3180;AL645882.2_3181;AL645882.2_3182;AL645882.2_3183;AL645882.2_3184;AL645882.2_3185;AL645882.2_3186;AL645882.2_3187;AL645882.2_3188;AL645882.2_3189;AL645882.2_3190;AL645882.2_3191;AL645882.2_3192;AL645882.2_3193;AL645882.2_3194;AL645882.2_3195;AL645882.2_3196;AL645882.2_3197;AL645882.2_3198;AL645882.2_3199;AL645882.2_3200;AL645882.2_3201;AL645882.2_3202;AL645882.2_3203;AL645882.2_3204 PF00005;PF00072;PF00109;PF00122;PF00155;PF00196;PF00441;PF00486;PF00501;PF00550;PF00561;PF00664;PF00668;PF00702;PF00903;PF00931;PF00975;PF01026;PF01040;PF01070;PF01261;PF01266;PF01494;PF01636;PF01663;PF02153;PF02668;PF02770;PF02801;PF03403;PF03621;PF03704;PF07730;PF07994;PF08241;PF08541;PF08545;PF09056;PF12146;PF12679;PF12697;PF12730;PF12897;PF13193;PF13304;PF13450;PF13489;PF13649;PF13669;PF14696;TIGR00010;TIGR00517;TIGR00747;TIGR00748;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01106;TIGR01116;TIGR01140;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01249;TIGR01257;TIGR01263;TIGR01264;TIGR01265;TIGR01271;TIGR01277;TIGR01288;TIGR01387;TIGR01473;TIGR01474;TIGR01476;TIGR01494;TIGR01497;TIGR01511;TIGR01512;TIGR01517;TIGR01522;TIGR01523;TIGR01524;TIGR01525;TIGR01647;TIGR01657;TIGR01720;TIGR01733;TIGR01734;TIGR01738;TIGR01818;TIGR01835;TIGR01842;TIGR01846;TIGR01923;TIGR01934;TIGR01978;TIGR01984;TIGR01988;TIGR02032;TIGR02056;TIGR02142;TIGR02151;TIGR02154;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02335;TIGR02372;TIGR02427;TIGR02633;TIGR02673;TIGR02708;TIGR02769;TIGR02770;TIGR02813;TIGR02857;TIGR02868;TIGR02875;TIGR02915;TIGR02956;TIGR02982;TIGR03005;TIGR03020;TIGR03056;TIGR03081;TIGR03098;TIGR03150;TIGR03197;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03343;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03467;TIGR03522;TIGR03540;TIGR03541;TIGR03608;TIGR03611;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03946;TIGR03947;TIGR03966;TIGR04406;TIGR04520;TIGR04521;TIGR04544 -AL645882.2 AL645882.2_cluster_11 5515246 5536994 0.7130191148104835 0.868896297725067 Polyketide 0.020000000000000018 0.89 0.030000000000000027 0.07999999999999996 0.020000000000000018 0.020000000000000018 0.050000000000000044 AL645882.2_5009;AL645882.2_5010;AL645882.2_5011;AL645882.2_5012;AL645882.2_5013;AL645882.2_5014;AL645882.2_5015;AL645882.2_5016;AL645882.2_5017;AL645882.2_5018;AL645882.2_5019;AL645882.2_5020;AL645882.2_5021;AL645882.2_5022;AL645882.2_5023;AL645882.2_5024;AL645882.2_5025;AL645882.2_5026;AL645882.2_5027;AL645882.2_5028;AL645882.2_5029;AL645882.2_5030;AL645882.2_5031 PF00106;PF00107;PF00109;PF00440;PF00486;PF00550;PF00753;PF01243;PF01370;PF01381;PF01613;PF02801;PF02909;PF03364;PF03704;PF03848;PF03992;PF04978;PF05175;PF05368;PF05724;PF07690;PF07883;PF08028;PF08240;PF08241;PF08242;PF08659;PF10604;PF12349;PF12844;PF13443;PF13460;PF13489;PF13561;PF13602;PF13649;PF13847;TIGR00477;TIGR00517;TIGR00692;TIGR00710;TIGR00711;TIGR00833;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00916;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01963;TIGR02296;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02818;TIGR02823;TIGR02824;TIGR02825;TIGR03070;TIGR03150;TIGR03201;TIGR03206;TIGR03325;TIGR03366;TIGR03451;TIGR03466;TIGR03480;TIGR03534;TIGR03615;TIGR03618;TIGR03668;TIGR03971;TIGR03989;TIGR04022;TIGR04023;TIGR04316;TIGR04504;TIGR04558 -AL645882.2 AL645882.2_cluster_12 5785753 5791297 0.5764920236167602 0.6184351199586162 Polyketide 0.0 0.91 0.0 0.0 0.020000000000000018 0.010000000000000009 0.06000000000000005 AL645882.2_5252;AL645882.2_5253;AL645882.2_5254;AL645882.2_5255;AL645882.2_5256;AL645882.2_5257;AL645882.2_5258 PF00109;PF00550;PF02311;PF02801;PF03364;PF03992;PF04486;PF04673;PF07883;PF10604;TIGR01930;TIGR02813;TIGR03150;TIGR03214 -AL645882.2 AL645882.2_cluster_13 6432593 6467702 0.909289567375217 0.9999999584431769 Polyketide 0.020000000000000018 0.76 0.020000000000000018 0.010000000000000009 0.0 0.45999999999999996 0.10999999999999999 AL645882.2_5815;AL645882.2_5816;AL645882.2_5817;AL645882.2_5818;AL645882.2_5819;AL645882.2_5820;AL645882.2_5821;AL645882.2_5822;AL645882.2_5823;AL645882.2_5824;AL645882.2_5825;AL645882.2_5826;AL645882.2_5827;AL645882.2_5828;AL645882.2_5829;AL645882.2_5830;AL645882.2_5831;AL645882.2_5832;AL645882.2_5833;AL645882.2_5834;AL645882.2_5835;AL645882.2_5836;AL645882.2_5837;AL645882.2_5838;AL645882.2_5839 PF00108;PF00109;PF00155;PF00196;PF00355;PF00441;PF00486;PF00501;PF00550;PF00698;PF00891;PF00975;PF01053;PF01073;PF01222;PF01326;PF01370;PF02353;PF02544;PF02770;PF02771;PF02801;PF03704;PF04191;PF04321;PF05368;PF05401;PF07993;PF08028;PF08241;PF08242;PF08281;PF08541;PF08545;PF11639;PF12697;PF13193;PF13460;PF13489;PF13520;PF13649;PF13847;PF16197;PF16363;PF17837;TIGR00128;TIGR00517;TIGR00536;TIGR00747;TIGR00748;TIGR00858;TIGR01179;TIGR01181;TIGR01214;TIGR01733;TIGR01734;TIGR01746;TIGR01777;TIGR01821;TIGR01822;TIGR01825;TIGR01923;TIGR01930;TIGR01983;TIGR02072;TIGR02188;TIGR02197;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR02813;TIGR02937;TIGR03020;TIGR03056;TIGR03098;TIGR03131;TIGR03150;TIGR03203;TIGR03204;TIGR03205;TIGR03207;TIGR03208;TIGR03443;TIGR03466;TIGR03533;TIGR03534;TIGR03541;TIGR03589;TIGR04022;TIGR04180;TIGR04543 -AL645882.2 AL645882.2_cluster_14 6847315 6863275 0.739858389200434 0.9589701630281311 Polyketide 0.0 0.62 0.09999999999999998 0.020000000000000018 0.030000000000000027 0.030000000000000027 0.21999999999999997 AL645882.2_6167;AL645882.2_6168;AL645882.2_6169;AL645882.2_6170;AL645882.2_6171;AL645882.2_6172;AL645882.2_6173;AL645882.2_6174;AL645882.2_6175;AL645882.2_6176;AL645882.2_6177;AL645882.2_6178;AL645882.2_6179;AL645882.2_6180 PF00150;PF00356;PF00528;PF00532;PF01381;PF01547;PF04183;PF04542;PF06276;PF07398;PF08281;PF11716;PF12680;PF13377;PF13416;PF13581;PF19054;TIGR00969;TIGR01481;TIGR01581;TIGR02139;TIGR02140;TIGR02141;TIGR02405;TIGR02417;TIGR02937;TIGR02939;TIGR02947;TIGR02948;TIGR02957;TIGR03070;TIGR03083;TIGR03086;TIGR03226;TIGR03262;TIGR03850 -AL645882.2 AL645882.2_cluster_15 6889594 6948414 0.8739774761888223 0.9999999998409312 Polyketide 0.0 0.99 0.010000000000000009 0.040000000000000036 0.0 0.06000000000000005 0.0 AL645882.2_6205;AL645882.2_6206;AL645882.2_6207;AL645882.2_6208;AL645882.2_6209;AL645882.2_6210;AL645882.2_6211;AL645882.2_6212;AL645882.2_6213;AL645882.2_6214;AL645882.2_6215;AL645882.2_6216;AL645882.2_6217;AL645882.2_6218;AL645882.2_6219;AL645882.2_6220;AL645882.2_6221;AL645882.2_6222;AL645882.2_6223;AL645882.2_6224;AL645882.2_6225;AL645882.2_6226;AL645882.2_6227;AL645882.2_6228;AL645882.2_6229 PF00106;PF00108;PF00109;PF00202;PF00364;PF00440;PF00486;PF00550;PF00561;PF00698;PF00975;PF01039;PF01370;PF01494;PF01565;PF02775;PF02786;PF02801;PF03704;PF03756;PF05368;PF07690;PF07730;PF07993;PF08031;PF08659;PF08990;PF12697;PF12831;PF13460;PF13561;PF13581;PF14765;PF16197;PF17147;TIGR00128;TIGR00508;TIGR00513;TIGR00515;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00710;TIGR00711;TIGR00713;TIGR00880;TIGR00881;TIGR00893;TIGR00895;TIGR00898;TIGR00900;TIGR01108;TIGR01117;TIGR01249;TIGR01500;TIGR01738;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01885;TIGR01930;TIGR01963;TIGR02407;TIGR02415;TIGR02427;TIGR02430;TIGR02632;TIGR02685;TIGR02813;TIGR03056;TIGR03131;TIGR03133;TIGR03134;TIGR03150;TIGR03206;TIGR03246;TIGR03251;TIGR03297;TIGR03325;TIGR03343;TIGR03372;TIGR03384;TIGR03443;TIGR03466;TIGR03611;TIGR03613;TIGR03649;TIGR03695;TIGR03968;TIGR03971;TIGR04316;TIGR04504 -AL645882.2 AL645882.2_cluster_16 7106284 7117874 0.7837623334517632 0.9998563052677049 NRP 0.010000000000000009 0.030000000000000027 0.0 0.010000000000000009 0.0 0.92 0.06000000000000005 AL645882.2_6364;AL645882.2_6365;AL645882.2_6366;AL645882.2_6367;AL645882.2_6368 PF00501;PF00550;PF00668;PF00975;PF05899;PF05977;PF07690;PF12697;PF13193;PF13434;TIGR00900;TIGR01733;TIGR01734;TIGR01738;TIGR01923;TIGR02188;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR03098;TIGR03205;TIGR03208;TIGR03443;TIGR04439 -AL645882.2 AL645882.2_cluster_17 7516017 7523399 0.939298768070374 0.9999997444668459 Terpene 0.010000000000000009 0.030000000000000027 0.010000000000000009 0.0 0.9 0.0 0.050000000000000044 AL645882.2_6688;AL645882.2_6689;AL645882.2_6690;AL645882.2_6691;AL645882.2_6692;AL645882.2_6693;AL645882.2_6694 PF00348;PF00432;PF00494;PF00890;PF01048;PF01266;PF01593;PF07992;PF12831;PF13243;PF13249;PF13450;TIGR01507;TIGR01559;TIGR01787;TIGR02731;TIGR02732;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03197;TIGR03463;TIGR03464;TIGR03465;TIGR03467;TIGR03468;TIGR04277 -AL645882.2 AL645882.2_cluster_18 7586410 7601569 0.832626210768822 0.9983263560779447 Polyketide 0.0 0.92 0.0 0.0 0.020000000000000018 0.030000000000000027 0.050000000000000044 AL645882.2_6750;AL645882.2_6751;AL645882.2_6752;AL645882.2_6753;AL645882.2_6754;AL645882.2_6755;AL645882.2_6756;AL645882.2_6757 PF00083;PF00106;PF00107;PF00109;PF00550;PF00698;PF01370;PF02775;PF02801;PF05977;PF07690;PF07992;PF08240;PF08541;PF08659;PF09335;PF12832;PF12840;PF13460;PF13561;PF13602;PF13738;PF14765;PF16197;TIGR00128;TIGR00710;TIGR00711;TIGR00747;TIGR00879;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00898;TIGR00900;TIGR01289;TIGR01299;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01930;TIGR01963;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02823;TIGR02824;TIGR02825;TIGR03131;TIGR03150;TIGR03206;TIGR03297;TIGR03325;TIGR03845;TIGR03971;TIGR04316;TIGR04504 -AL645882.2 AL645882.2_cluster_19 7660990 7703887 0.8723160842685086 0.9884977283394043 Unknown 0.0024999999999999467 0.16000000000000003 0.31000000000000005 0.0 0.030000000000000027 0.06999999999999995 0.4375 AL645882.2_6824;AL645882.2_6825;AL645882.2_6826;AL645882.2_6827;AL645882.2_6828;AL645882.2_6829;AL645882.2_6830;AL645882.2_6831;AL645882.2_6832;AL645882.2_6833;AL645882.2_6834;AL645882.2_6835;AL645882.2_6836;AL645882.2_6837;AL645882.2_6838;AL645882.2_6839;AL645882.2_6840;AL645882.2_6841;AL645882.2_6842;AL645882.2_6843;AL645882.2_6844;AL645882.2_6845;AL645882.2_6846;AL645882.2_6847;AL645882.2_6848;AL645882.2_6849;AL645882.2_6850;AL645882.2_6851;AL645882.2_6852;AL645882.2_6853;AL645882.2_6854;AL645882.2_6855;AL645882.2_6856;AL645882.2_6857;AL645882.2_6858;AL645882.2_6859;AL645882.2_6860;AL645882.2_6861;AL645882.2_6862;AL645882.2_6863;AL645882.2_6864;AL645882.2_6865 PF00196;PF00441;PF00702;PF01071;PF01135;PF01609;PF02467;PF02655;PF02770;PF02771;PF02786;PF03432;PF04738;PF05147;PF05713;PF07690;PF08028;PF13340;PF13535;PF13586;PF13620;PF13649;PF13847;PF14028;PF15632;PF18130;PF18603;TIGR00080;TIGR00768;TIGR00900;TIGR01142;TIGR02144;TIGR02469;TIGR02752;TIGR03203;TIGR03204;TIGR03207;TIGR03891;TIGR03909;TIGR04022;TIGR04188;TIGR04364 -AL645882.2 AL645882.2_cluster_20 8258333 8283623 0.8350377509828413 0.8974035790126855 RiPP 0.020000000000000018 0.06999999999999995 0.55 0.10999999999999999 0.030000000000000027 0.050000000000000044 0.18999999999999995 AL645882.2_7365;AL645882.2_7366;AL645882.2_7367;AL645882.2_7368;AL645882.2_7369;AL645882.2_7370;AL645882.2_7371;AL645882.2_7372;AL645882.2_7373;AL645882.2_7374;AL645882.2_7375;AL645882.2_7376;AL645882.2_7377;AL645882.2_7378;AL645882.2_7379;AL645882.2_7380;AL645882.2_7381;AL645882.2_7382;AL645882.2_7383;AL645882.2_7384;AL645882.2_7385;AL645882.2_7386;AL645882.2_7387;AL645882.2_7388;AL645882.2_7389;AL645882.2_7390 PF00005;PF00009;PF00067;PF00089;PF00501;PF00583;PF00743;PF00857;PF00891;PF00989;PF01925;PF03029;PF03259;PF03992;PF04203;PF04486;PF05175;PF05331;PF07992;PF08241;PF08242;PF08448;PF11991;PF13426;PF13434;PF13450;PF13489;PF13581;PF13649;PF13738;PF13847;PF14535;PF16864;TIGR00229;TIGR00231;TIGR00955;TIGR00956;TIGR00958;TIGR00968;TIGR00972;TIGR01076;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01842;TIGR01846;TIGR01978;TIGR01983;TIGR02142;TIGR02155;TIGR02203;TIGR02204;TIGR02211;TIGR02314;TIGR02315;TIGR02323;TIGR02324;TIGR02633;TIGR02673;TIGR02716;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03258;TIGR03265;TIGR03269;TIGR03335;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03429;TIGR03522;TIGR03608;TIGR03614;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR04018;TIGR04046;TIGR04406;TIGR04520;TIGR04521;TIGR04538;TIGR04543 -AL645882.2 AL645882.2_cluster_21 8493549 8542072 0.912955287850247 0.9999999998816349 NRP 0.010000000000000009 0.15000000000000002 0.06999999999999995 0.020000000000000018 0.040000000000000036 0.74 0.09999999999999998 AL645882.2_7588;AL645882.2_7589;AL645882.2_7590;AL645882.2_7591;AL645882.2_7592;AL645882.2_7593;AL645882.2_7594;AL645882.2_7595;AL645882.2_7596;AL645882.2_7597;AL645882.2_7598;AL645882.2_7599;AL645882.2_7600;AL645882.2_7601;AL645882.2_7602;AL645882.2_7603;AL645882.2_7604;AL645882.2_7605;AL645882.2_7606;AL645882.2_7607;AL645882.2_7608;AL645882.2_7609;AL645882.2_7610;AL645882.2_7611;AL645882.2_7612;AL645882.2_7613;AL645882.2_7614;AL645882.2_7615;AL645882.2_7616;AL645882.2_7617;AL645882.2_7618;AL645882.2_7619;AL645882.2_7620;AL645882.2_7621;AL645882.2_7622;AL645882.2_7623 PF00005;PF00027;PF00067;PF00106;PF00195;PF00376;PF00392;PF00425;PF00440;PF00496;PF00501;PF00528;PF00550;PF00664;PF00668;PF00890;PF00903;PF00975;PF01040;PF01266;PF01370;PF01408;PF01494;PF02353;PF02463;PF02797;PF02909;PF03435;PF04140;PF04191;PF05834;PF06902;PF07690;PF07729;PF07992;PF08241;PF08242;PF08392;PF08541;PF12697;PF12802;PF12831;PF13191;PF13193;PF13370;PF13401;PF13411;PF13412;PF13459;PF13460;PF13489;PF13561;PF13649;PF13847;PF18563;PF19086;TIGR00543;TIGR00553;TIGR00564;TIGR00565;TIGR00630;TIGR00747;TIGR00896;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01289;TIGR01292;TIGR01733;TIGR01734;TIGR01761;TIGR01815;TIGR01820;TIGR01823;TIGR01824;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01842;TIGR01846;TIGR01923;TIGR01963;TIGR01978;TIGR01988;TIGR02018;TIGR02023;TIGR02032;TIGR02043;TIGR02044;TIGR02047;TIGR02051;TIGR02054;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02294;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02325;TIGR02372;TIGR02404;TIGR02415;TIGR02469;TIGR02632;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02789;TIGR02790;TIGR02812;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03206;TIGR03208;TIGR03258;TIGR03265;TIGR03269;TIGR03338;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03494;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03971;TIGR04028;TIGR04316;TIGR04406;TIGR04458;TIGR04515;TIGR04520;TIGR04521;TIGR04538 diff --git a/example_data/sco_knownhits.tsv b/example_data/sco_knownhits.tsv deleted file mode 100644 index 422e5f6..0000000 --- a/example_data/sco_knownhits.tsv +++ /dev/null @@ -1,48 +0,0 @@ -#Model Description Sequence id evalue bitscore Sequence description -RF0002 AAC3 1890 3.6e-54 182.5 lcl|1890|scaffold_1|source|scaffold_1|loc|2059303_2060092_1 -RF0007 ABC_efflux 2723 4.8e-170 565.4 lcl|2723|scaffold_1|source|scaffold_1|loc|3010976_3014708_-1 -RF0007 ABC_efflux 2422 4.8e-95 318.0 lcl|2422|scaffold_1|source|scaffold_1|loc|2651102_2653031_1 -RF0007 ABC_efflux 1101 8.7e-81 270.9 lcl|1101|scaffold_1|source|scaffold_1|loc|1202479_1204282_-1 -RF0007 ABC_efflux 6925 2e-80 269.8 lcl|6925|scaffold_1|source|scaffold_1|loc|7782654_7784535_1 -RF0007 ABC_efflux 659 4.1e-74 248.9 lcl|659|scaffold_1|source|scaffold_1|loc|740313_742083_-1 -RF0051 Chlor_Efflux_Pump 7569 1.3e-124 415.2 lcl|7569|scaffold_1|source|scaffold_1|loc|8488517_8489696_1 -RF0051 Chlor_Efflux_Pump 7435 5.2e-112 373.7 lcl|7435|scaffold_1|source|scaffold_1|loc|8345037_8346285_1 -RF0054 ClassB 5022 7.4e-26 89.8 lcl|5022|scaffold_1|source|scaffold_1|loc|5533652_5534546_1 -RF0154 vanR 3534 6e-82 273.4 lcl|3534|scaffold_1|source|scaffold_1|loc|3967921_3968617_-1 -RF0155 vanS 3533 3e-88 295.1 lcl|3533|scaffold_1|source|scaffold_1|loc|3966834_3967929_-1 -RF0158 vanX 3540 4e-98 325.8 lcl|3540|scaffold_1|source|scaffold_1|loc|3973353_3973962_1 -PF00044.19 Gp_dh_N 1910 2.1e-61 205.4 lcl|1910|scaffold_1|source|scaffold_1|loc|2080142_2081153_-1 -PF00044.19 Gp_dh_N 7420 1.6e-53 179.9 lcl|7420|scaffold_1|source|scaffold_1|loc|8325356_8326355_-1 -PF00044.19 Gp_dh_N 6958 4.2e-39 133.0 lcl|6958|scaffold_1|source|scaffold_1|loc|7832789_7834235_-1 -PF00183.13 HSP90 7425 1e-116 389.6 lcl|7425|scaffold_1|source|scaffold_1|loc|8329971_8331888_1 -PF00183.13 HSP90 1365 3.8e-07 28.0 lcl|1365|scaffold_1|source|scaffold_1|loc|1494023_1495871_-1 -PF00185.19 OTCace 5905 3.9e-47 159.2 lcl|5905|scaffold_1|source|scaffold_1|loc|6550398_6551406_1 -PF00185.19 OTCace 1447 5.1e-37 126.3 lcl|1447|scaffold_1|source|scaffold_1|loc|1590406_1591387_-1 -PF00204.20 DNA_gyraseB 3818 2.4e-61 205.0 lcl|3818|scaffold_1|source|scaffold_1|loc|4263377_4265462_-1 -PF00204.20 DNA_gyraseB 5753 1.3e-50 170.1 lcl|5753|scaffold_1|source|scaffold_1|loc|6371005_6373129_1 -PF00227.21 Proteasome 1605 2e-38 130.7 lcl|1605|scaffold_1|source|scaffold_1|loc|1758474_1759251_-1 -PF00227.21 Proteasome 1604 1.7e-26 91.8 lcl|1604|scaffold_1|source|scaffold_1|loc|1757648_1758377_-1 -PF00364.17 Biotin_lipoyl 2144 9.1e-46 152.5 lcl|2144|scaffold_1|source|scaffold_1|loc|2345795_2347568_1 -PF00364.17 Biotin_lipoyl 3758 3.8e-23 80.0 lcl|3758|scaffold_1|source|scaffold_1|loc|4193531_4194941_-1 -PF00364.17 Biotin_lipoyl 7037 8.6e-23 78.9 lcl|7037|scaffold_1|source|scaffold_1|loc|7913373_7914627_-1 -PF00364.17 Biotin_lipoyl 2737 8.4e-20 69.3 lcl|2737|scaffold_1|source|scaffold_1|loc|3029141_3031109_1 -PF00364.17 Biotin_lipoyl 3773 5.7e-18 63.4 lcl|3773|scaffold_1|source|scaffold_1|loc|4210795_4212271_-1 -PF00364.17 Biotin_lipoyl 4851 7.4e-17 59.9 lcl|4851|scaffold_1|source|scaffold_1|loc|5355282_5357055_-1 -PF00364.17 Biotin_lipoyl 6203 7.4e-17 59.9 lcl|6203|scaffold_1|source|scaffold_1|loc|6897088_6898861_-1 -PF00364.17 Biotin_lipoyl 505 4.9e-15 54.0 lcl|505|scaffold_1|source|scaffold_1|loc|583522_586897_-1 -PF00364.17 Biotin_lipoyl 4318 1.6e-14 52.4 lcl|4318|scaffold_1|source|scaffold_1|loc|4796696_4798541_1 -PF00364.17 Biotin_lipoyl 1227 7.8e-09 34.2 lcl|1227|scaffold_1|source|scaffold_1|loc|1338247_1339366_-1 -PF00364.17 Biotin_lipoyl 715 4.1e-06 25.4 lcl|715|scaffold_1|source|scaffold_1|loc|796916_797723_1 -PF00364.17 Biotin_lipoyl 5402 2.1e-05 23.2 lcl|5402|scaffold_1|source|scaffold_1|loc|5957223_5957601_-1 -PF00521.15 DNA_topoisoIV 3817 3e-148 493.3 lcl|3817|scaffold_1|source|scaffold_1|loc|4260740_4263335_-1 -PF00521.15 DNA_topoisoIV 5767 7.4e-147 488.7 lcl|5767|scaffold_1|source|scaffold_1|loc|6386423_6388880_-1 -PF01039.17 Carboxyl_trans 5466 1.6e-201 669.0 lcl|5466|scaffold_1|source|scaffold_1|loc|6031664_6033248_1 -PF01039.17 Carboxyl_trans 4856 1.2e-199 662.9 lcl|4856|scaffold_1|source|scaffold_1|loc|5359017_5360610_-1 -PF01039.17 Carboxyl_trans 6216 2e-191 635.7 lcl|6216|scaffold_1|source|scaffold_1|loc|6943672_6945265_1 -PF01039.17 Carboxyl_trans 2736 3.3e-164 546.0 lcl|2736|scaffold_1|source|scaffold_1|loc|3027513_3029130_1 -PF01039.17 Carboxyl_trans 4317 6.6e-139 462.5 lcl|4317|scaffold_1|source|scaffold_1|loc|4795084_4796683_1 -PF01039.17 Carboxyl_trans 2403 2.8e-27 94.4 lcl|2403|scaffold_1|source|scaffold_1|loc|2624025_2625402_1 -PF13599.1 Pentapeptide_4 4206 2.2e-18 64.9 lcl|4206|scaffold_1|source|scaffold_1|loc|4684242_4684947_1 -TIGR02013 TIGR02013 4588 0 1814.6 lcl|4588|scaffold_1|source|scaffold_1|loc|5078060_5081546_1 -TIGR00663 TIGR00663 3822 9e-90 300.1 lcl|3822|scaffold_1|source|scaffold_1|loc|4268712_4269843_-1 -TIGR00663 TIGR00663 7877 6.8e-75 251.1 lcl|7877|scaffold_2|source|scaffold_2|loc|112311_113430_1 diff --git a/example_data/sco_prism.json.REMOVED.git-id b/example_data/sco_prism.json.REMOVED.git-id deleted file mode 100644 index 5ddd7e1..0000000 --- a/example_data/sco_prism.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -ebe4530db1e6b558531c87481cc34f3348903515 \ No newline at end of file diff --git a/example_data/sco_rre.txt b/example_data/sco_rre.txt deleted file mode 100644 index 496d413..0000000 --- a/example_data/sco_rre.txt +++ /dev/null @@ -1,3 +0,0 @@ -Gene name BGC ID BGC product Domain name E-value Bitscore Start End -NC_003888.3__256525-259687__SCO0269 N\A N\A Lanthipeptide_RRE 1.1999999999999999e-11 43.9 159 240 -NC_003888.3__7696261-7699360__SCO6930 N\A N\A Lanthipeptide_RRE 2.7e-20 71.5 160 253 diff --git a/example_data/sco_sempi.csv b/example_data/sco_sempi.csv deleted file mode 100644 index 4da5344..0000000 --- a/example_data/sco_sempi.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,106723,110434,"pks" -2,307598,308816,"nrps" -3,513997,524488,"nrps" -4,1405117,1405750,"nrps" -5,1477976,1479275,"nrps" -6,2290771,2292100,"nrps" -7,2559357,2561673,"pks" -8,2622623,2623751,"nrps" -9,2762807,2764220,"nrps" -10,2963180,2964527,"nrps" -11,3328396,3329098,"nrps" -12,3543364,3584771,"nrps" -13,3797561,3798752,"nrps" -14,3941523,3942822,"nrps" -15,4398632,4399859,"nrps" -16,4799973,4801182,"nrps" -17,4923207,4924557,"nrps" -18,5531212,5532682,"pks" -19,5786632,5788168,"pks" -20,6447994,6454855,"nrps-pks" -21,6558978,6560136,"nrps" -22,6804366,6807194,"nrps" -23,6901254,6931905,"pks" -24,7004464,7004725,"nrps" -25,7108290,7116050,"nrps" -26,7249252,7250602,"nrps" -27,7549538,7550897,"nrps" -28,7591514,7598516,"pks" -29,7734541,7735729,"nrps" -30,8053551,8054721,"nrps" -31,8140076,8141438,"nrps" -32,8282564,8283500,"nrps" -33,8504751,8523677,"nrps" diff --git a/group.py b/group.py deleted file mode 100644 index f702aa7..0000000 --- a/group.py +++ /dev/null @@ -1,95 +0,0 @@ -from Bio import SeqIO -import sys -import os -import pandas as pd - - -def write_gbs(group_by, data, label, seq_file): - for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): - start = [] - stop = [] - list_l = row[label].split(",") - for i in range(len(list_l)): - list_l[i] = int(list_l[i]) - start.append(data[list_l[i] == data['Cluster']].Start.item()) - stop.append(data[list_l[i] == data['Cluster']].Stop.item()) - group = group_by.Group[index] - if os.path.isdir(group): - pass - else: - os.mkdir(group) - file = SeqIO.parse(open(seq_file), "genbank") - print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) - for record in file: - loci = [feat for feat in record.features if feat.type == "CDS"] - start_new = int(start[i]) - end_new = int(stop[i]) - subrecord = record[start_new:end_new] - annotation={"molecule_type":"DNA"} - subrecord.annotations = annotation - SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") - -def main(): - group_by = pd.read_csv("group_by.csv", dtype = str) - seq_file = sys.argv[1] - - print("Searching for antismash files...") - if os.path.exists("antismash_biocircos.csv"): - print("Found!") - data = pd.read_csv("antismash_biocircos.csv") - label = "Antismash" - write_gbs(group_by, data, label, seq_file) - - print("Searching for deepbcg files...") - if os.path.exists("deepbgc_biocircos.csv"): - print("Found!") - data = pd.read_csv("deepbgc_biocircos.csv") - label = "DeepBGC" - write_gbs(group_by, data, label, seq_file) - - print("Searching for prism files...") - if os.path.exists("prism_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_biocircos.csv") - label = "PRISM" - write_gbs(group_by, data, label, seq_file) - - print("Searching for rre-finder files...") - if os.path.exists("rre_biocircos.csv"): - print("Found!") - data = pd.read_csv("rre_biocircos.csv") - label = "RRE-Finder" - write_gbs(group_by, data, label, seq_file) - - print("Searching for sempi files...") - if os.path.exists("sempi_biocircos.csv"): - print("Found!") - data = pd.read_csv("sempi_biocircos.csv") - label = "SEMPI" - write_gbs(group_by, data, label, seq_file) - - print("Searching for ARTS files...") - if os.path.exists("arts_biocircos.csv"): - print("Found!") - data = pd.read_csv("arts_biocircos.csv") - label = "ARTS" - write_gbs(group_by, data, label, seq_file) - - print("Searching for PRISM supplement files...") - if os.path.exists("prism_supp_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_supp_biocircos.csv") - label = "PRISM-supp" - write_gbs(group_by, data, label, seq_file) - - print("Searching for GECCO files...") - if os.path.exists("gecco_biocircos.csv"): - print("Found!") - data = pd.read_csv("gecco_biocircos.csv") - label = "GECCO" - write_gbs(group_by, data, label, seq_file) - - - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/man/antismash_to_csv.Rd b/man/antismash_to_csv.Rd new file mode 100644 index 0000000..4cb5189 --- /dev/null +++ b/man/antismash_to_csv.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_format_transformation.R +\name{antismash_to_csv} +\alias{antismash_to_csv} +\title{antismash_to_df} +\usage{ +antismash_to_csv(file, write_to = getwd()) +} +\arguments{ +\item{file}{- path to a json file,} + +\item{write_to}{- path where to write generated csv file} +} +\value{ +csv file in specified location +} +\description{ +Function, that returns dataframe, out of supplied antismash json file +} diff --git a/man/prism_to_csv.Rd b/man/prism_to_csv.Rd new file mode 100644 index 0000000..538962b --- /dev/null +++ b/man/prism_to_csv.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_format_transformation.R +\name{prism_to_csv} +\alias{prism_to_csv} +\title{prism_to_df} +\usage{ +prism_to_csv(file, write_to = getwd()) +} +\arguments{ +\item{file}{- path to a json file,} + +\item{write_to}{- path where to write generated csv file} +} +\value{ +csv file in specified location +} +\description{ +Function, that transforms prism json object into dataframe, which could be written to the csv file +} diff --git a/man/sempi_to_csv.Rd b/man/sempi_to_csv.Rd new file mode 100644 index 0000000..e157844 --- /dev/null +++ b/man/sempi_to_csv.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_format_transformation.R +\name{sempi_to_csv} +\alias{sempi_to_csv} +\title{sempi_to_df} +\usage{ +sempi_to_csv(file, write_to = getwd()) +} +\arguments{ +\item{file}{- path to a json file,} + +\item{write_to}{- path where to write generated csv file} +} +\value{ +csv file in specified location +} +\description{ +Function, which transforms Track.db file into dataframe, which could be then written to csv +} diff --git a/rename.csv b/rename.csv deleted file mode 100644 index 48878d4..0000000 --- a/rename.csv +++ /dev/null @@ -1,90 +0,0 @@ -Code,Group,Group_color,Color,Vacant_colors,Hierarchy, -polyketide,pks,pks,#a6cee3,,SEMPI,SEMPI -nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM, -melanin,melanin,ripp,#b2df8a,,Antismash, -ectoine,other,saccharide,#33a02c,,DeepBGC, -pentangular_polyphenol,other,melanin,#fb9a99,,GECCO, -nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder, -angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp, -angucycline,pks,alkaloid,#ff7f00,,ARTS, -butyrolactone,ripp,hybrid,#cab2d6,,, -class_i_lantipeptide,ripp,core,#6a3d9a,,, -lasso_peptide,ripp,regulatory,#ffff99,,, -nis_synthase,other,resistance,#b15928,,, -acyl_amino_acids,other,base,#d4ced6,,, -aminocoumarin,other,,,,, -amglyccycl,other,,,,, -arylpolyene,other,,,,, -betalactone,other,,,,, -blactam,other,,,,, -bottromycin,other,,,,, -cdps,other,,,,, -cyanobactin,other,,,,, -fatty_acid,other,,,,, -furan,other,,,,, -fungal-ripp,ripp,,,,, -glycocin,ripp,,,,, -guanidinotides,other,,,,, -halogenated,other,,,,, -hgle-ks,pks,,,,, -hserlactone,other,,,,, -indole,other,,,,, -lap,ripp,,,,, -ladderane,other,,,,, -lanthipeptide-class-i,ripp,,,,, -lanthipeptide-class-ii,ripp,,,,, -lanthipeptide-class-iii,ripp,,,,, -lanthipeptide-class-iv,ripp,,,,, -lanthipeptide-class-v,ripp,,,,, -lassopeptide,ripp,,,,, -linaridin,other,,,,, -lipolanthine,other,,,,, -microviridin,other,,,,, -naggn,other,,,,, -napaa,other,,,,, -nrps,nrps,,,,, -nrps-like,nrps,,,,, -nucleoside,other,,,,, -oligosaccharide,saccharide,,,,, -other,other,,,,, -pbde,other,,,,, -phenazine,other,,,,, -phosphoglycolipid,other,,,,, -phosphonate,other,,,,, -pks-like,pks,,,,, -ppys-ks,other,,,,, -proteusin,other,,,,, -pufa,other,,,,, -pyrrolidine,other,,,,, -ranthipeptide,ripp,,,,, -ras-ripp,other,,,,, -redox-cofactor,other,,,,, -resorcinol,other,,,,, -ripp-like,ripp,,,,, -rre-containing,ripp,,,,, -saccharide,saccharide,,,,, -sactipeptide,ripp,,,,, -siderophore,other,,,,, -t1pks,pks,,,,, -t2pks,pks,,,,, -t3pks,pks,,,,, -terpene,terpene,,,,, -thioamitides,other,,,,, -thioamide-nrp,other,,,,, -thiopeptide,ripp,,,,, -transat-pks,pks,,,,, -transat-pks-like,pks,,,,, -tropodithietic-acid,other,,,,, -bacteriocin,ripp,,,,, -fused,other,,,,, -head_to_tail,other,,,,, -lanthidin,other,,,,, -lanthipeptide,ripp,,,,, -tfua-related,other,,,,, -otherks,other,,,,, -microcin,other,,,,, -cf_saccharide,saccharide,,,,, -cf_fatty_acid,other,,,,, -cf_putative,other,,,,, -class_iii_iv_lantipeptide,ripp,,,,, -prodigiosin,other,,,,, diff --git a/scripts/.Rhistory b/scripts/.Rhistory deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/antismash.R b/scripts/antismash.R deleted file mode 100644 index ad30ccd..0000000 --- a/scripts/antismash.R +++ /dev/null @@ -1,51 +0,0 @@ -library(dplyr) -library(tidyr) -library(stringr) -library(rjson) - -args = commandArgs(trailingOnly=TRUE) - -data <- fromJSON(file = args[1]) -types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - tolower(x$qualifiers$product) - } - }) -}) - -types <- Filter(Negate(is.null), types) - -types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } -}) - -location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - unlist(x$location) - } - }) - ) -}) - - -location <- gsub("\\[", "", location) -location <- gsub("\\]", "", location) -location <- data.frame(location) -colnames(location) <- "split" -anti_data <- location %>% - separate(split, c("Start", "Stop")) %>% - transmute(ID = rownames(location), Start, Stop) - -anti_data <- cbind(anti_data, types) -colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") -anti_data$Cluster <- as.numeric(anti_data$Cluster) -anti_data$Start <- as.numeric(anti_data$Start) -anti_data$Stop <- as.numeric(anti_data$Stop) -write.csv(anti_data, "antismash.csv", row.names = F) \ No newline at end of file diff --git a/scripts/prism.R b/scripts/prism.R deleted file mode 100644 index 421b51c..0000000 --- a/scripts/prism.R +++ /dev/null @@ -1,38 +0,0 @@ -library(stringr) -library(dplyr) -library(tidyr) -library(rjson) - -args = commandArgs(trailingOnly=TRUE) - -data <- fromJSON(file =args[1]) - - -types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) -}) - -types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } -}) - -start <- sapply(data$prism_results$clusters, function(x){ - x$start - -}) -end <- sapply(data$prism_results$clusters, function(x){ - x$end - -}) - - -prism_data <- data.frame(cbind(start, end, types)) -prism_data <- prism_data %>% - transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - -write.csv(prism_data, "prism.csv", row.names = F) \ No newline at end of file diff --git a/scripts/sempi.R b/scripts/sempi.R deleted file mode 100644 index d1c248d..0000000 --- a/scripts/sempi.R +++ /dev/null @@ -1,27 +0,0 @@ -library(RSQLite) -library(dplyr) -library(stringr) - -args = commandArgs(trailingOnly=TRUE) - -conn <- dbConnect(RSQLite::SQLite(), args[1]) - -data <- dbGetQuery(conn, "SELECT * FROM tbl_segments") - - -data <- data %>% - filter(trackid==6) - -types <- sapply(data$name, function(x){ - tmp <- str_trim(x) - tmp <- gsub(", ", "", tmp) - gsub(" ", "__", tmp) -}) - -sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) -colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") -sempi_data$Cluster <- as.numeric(sempi_data$Cluster) -sempi_data$Start <- as.numeric(sempi_data$Start) -sempi_data$Stop <- as.numeric(sempi_data$Stop) -sempi_data$Type <- str_trim(tolower(sempi_data$Type)) -write.csv(sempi_data, "SEMPI.csv", row.names = F) \ No newline at end of file diff --git a/src/biocircos_functions.R b/src/biocircos_functions.R deleted file mode 100644 index e209374..0000000 --- a/src/biocircos_functions.R +++ /dev/null @@ -1,118 +0,0 @@ - -# Function to initialize biocircos chromosomes -initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable){ - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[[name]] <- chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% coloring_datatable$x$data$Name){ - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] - } else { - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] - } - }) - } else { - arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] - } - arc_col <- c(arc_col,as.character(arc_colors) ) - return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) -} - - - -# Adding correct data to the plot -add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable){ - inter_s_rre_n <- data1_inter - inter_rre_s <- data2_inter - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) - #browser() - if (!is.null(inter_rre_s)){ - if (class == 'P'){ - subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - } - } - } - } else if (class == 'H'){ - if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else { - label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } - }else if (class == 'R'){ - if (data2_label == ref_col_biocircos){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else if (data1_label == ref_col_biocircos){ - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } - }))) - } else{ - label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) - } - } else { - label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) - } - } - return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) -} \ No newline at end of file diff --git a/src/deep_reference_functions.R b/src/deep_reference_functions.R deleted file mode 100644 index 8477514..0000000 --- a/src/deep_reference_functions.R +++ /dev/null @@ -1,190 +0,0 @@ -# Simple segment dataframe generation - -simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T, inters){ - if (inter== T){ - data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] - } else{ - data <- df - } - - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) - return(seg_df) -} - -# Geom generating functions -geom_anti <- function(data, rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) -} -geom_prism <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) -} -geom_deep <- function(data,rre_more){ - ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) -} -geom_rre <- function(data, rre_more){ - if (rre_more == T){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) - } -} -geom_sempi <- function(data,rre_more){ - - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) -} -geom_prism_supp <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) -} -geom_arts <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) -} -geom_gecco <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) -} - -# Functions to add more information to segment datadrame - -add_arts <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] - }else{ - subset_df <- df - } - seg_df$Hit = subset_df$Hit - seg_df$xend = as.numeric(subset_df$Stop) - seg_df$Core = subset_df$Core - seg_df$Count = subset_df$Count - seg_df$E_value = subset_df$Evalue - seg_df$Bitscore = subset_df$Bitscore - seg_df$Model = subset_df$Model - return(seg_df) -} -add_prism_supp <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] - }else{ - subset_df <- df - } - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Name = subset_df$Name - seg_df$Full_name = subset_df$Full_name - return(seg_df) -} -add_deep <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] - }else{ - subset_df <- df - } - seg_df$num_domains = subset_df$num_domains - seg_df$deepbgc_score = subset_df$deepbgc_score - seg_df$activity = subset_df$product_activity - return(seg_df) -} -add_rre <- function(seg_df, soft_namings, df, inter=T, rre_more,inters){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] - }else{ - subset_df <- df - } - if (rre_more == T){ - seg_df$xend=as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Stop = subset_df$Stop - seg_df$E_value = subset_df$E.value - seg_df$P_value = subset_df$P.value - seg_df$RRE_start = subset_df$RRE.start - seg_df$RRE_stop = subset_df$RRE.end - seg_df$Probability = subset_df$Probability - } else { - seg_df$xend=subset_df$Stop - seg_df$E_value = subset_df$E.value - } - - return(seg_df) -} -add_gecco <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] - }else{ - subset_df <- df - } - seg_df$Num_proteins = subset_df$num_prot - seg_df$Num_domains = subset_df$num_domains - seg_df$Average_p = subset_df$average_p - seg_df$Max_p = subset_df$max_p - return(seg_df) -} - -add_more_annot <- function(seg_df, plot, soft_names, index, rre_more){ - if (dim(seg_df)[1] > 0){ - if (soft_names[index] == "anti"){ - plot <- plot + geom_anti(seg_df) - } else if (soft_names[index] == "sempi") { - plot <- plot + geom_sempi(seg_df) - } - else if (soft_names[index] == "prism") { - plot <- plot + geom_prism(seg_df) - } - else if (soft_names[index] == "prism_supp") { - plot <- plot + geom_prism_supp(seg_df) - } - else if (soft_names[index] == "arts") { - plot <- plot + geom_arts(seg_df) - } - else if (soft_names[index] == "deep") { - plot <- plot + geom_deep(seg_df) - } - else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df,rre_more) - } else if (soft_names[index] == "gecco") { - plot <- plot+geom_gecco(seg_df) - } - return(plot) - } else{ - return(plot) - } -} - - -define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T, rre_more,inters){ - if (inter == F){ - soft_major <- "Not applicable" - } - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ - seg_df <- add_prism_supp(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ - seg_df <- add_arts(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ - seg_df <- add_deep(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ - seg_df <- add_gecco(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ - seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more,inters) - } - return(seg_df) -} \ No newline at end of file diff --git a/src/group_table_functions.R b/src/group_table_functions.R deleted file mode 100644 index 885b623..0000000 --- a/src/group_table_functions.R +++ /dev/null @@ -1,14 +0,0 @@ -# Refining unique values for table to out in one row -refine_unique <- function(data){ - n <- tail(data, n=1) - data <- head(data, -1) - n_list <- stringr::str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) - res <- sapply(out, function(x){ - if (x==F){ - x - } - }) - - return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) -} diff --git a/src/helper_functions.R b/src/helper_functions.R deleted file mode 100644 index 74b9f78..0000000 --- a/src/helper_functions.R +++ /dev/null @@ -1,268 +0,0 @@ -is.integer0 <- function(x) -{ - is.integer(x) && length(x) == 0L -} -# Fix the duplicates in PRISM-Supp data. Therefore 1 row for 1 orf -fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ - dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] - duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) - test_score <- test_score[order_vec] - to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] - test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] - iterate_one_more_time <- c() - should_iterate = F - for (i in seq(1:length(test_name))){ - if (length(dupl_names) == 0){ - should_iterate = F - break - } - if (test_name[i]==dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] - iterate_one_more_time <- c(iterate_one_more_time, i) - } - } - if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ - should_iterate = T - } - while (should_iterate == T) { - for (i in iterate_one_more_time){ - if (test_name[i] == dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] - } - if (length(dupl_names)==0){ - should_iterate = F - break - } - } - } - return(test_score) -} -# PRISM JSON data processing -process_prism_json_suppl <- function(data){ - types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) - }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x){ - x$start - - }) - end <- sapply(data$prism_results$clusters, function(x){ - x$end - - }) - - - prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ - x$orf - }) - - names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - y$name - }) - coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ - y$coordinates - }) - - test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) - - - reg_genes <-data.frame(t(test_coords)) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' - reg_genes$Type2 <- reg_genes$Type - - test_name <- names[names %in% regul_genes_orfs] - ref_names <- test_name - order_vec <- order(match(regul_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$regulatory_genes, function(x){ - x$score - }) - reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$regulatory_genes, function(x){ - x$name - }) - reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ - x$full_name - }) - reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ - x$orf - }) - - test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) - - - res_genes <-data.frame(t(test_coords_res)) - - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' - res_genes$Type2 <- res_genes$Type - test_name <- names[names %in% resist_genes_orfs] - order_vec <- order(match(resist_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$resistance_genes, function(x){ - x$score - }) - res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$resistance_genes, function(x){ - x$name - }) - res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ - x$full_name - }) - res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) - - final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - return(list(prism_data, final_reg)) -} -# Filtering the DeepBGC -filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,score_d_input,domains_filter,biodomain_filter,gene_filter){ - score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(cluster_type)){ - deep_data_chromo <- deep_data %>% - dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - score_d >= 50/100, num_domains >= 5, - num_bio_domains>=1, num_proteins>=1) - } else { - deep_data_chromo <- deep_data %>% - dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= as.numeric(score_a_input )/ 100, score_c >=as.numeric(score_c_input)/100 , - score_d >= as.numeric(score_d_input)/100, num_domains >= domains_filter, - num_bio_domains>=biodomain_filter, num_proteins>=gene_filter) - } - - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID - return(biocircos_deep) -} -# Filtering GECCO -filter_gecco <- function(gecco_data,score_cluster_gecco,score_average_gecco,domains_filter_gecco,prot_filter_gecco){ - score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(score_cluster_gecco)){ - gecco_data <- gecco_data %>% - dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - num_domains >= 1, num_prot>=1) - } else{ - gecco_data <- gecco_data %>% - dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(score_cluster_gecco)/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= as.numeric(score_average_gecco )/ 100, score_c >=as.numeric(score_cluster_gecco)/100 , - num_domains >= domains_filter_gecco, num_prot>=prot_filter_gecco) - } - return(gecco_data) -} -# Renaming the vector for inut$rename event -rename_vector <- function(data, renamed_dataframe, renaming_notification){ - type <- stringr::str_split(data$Type2, "__") - type_2 <- sapply(type, function(x){ - sapply(x, function(y){ - if (y %in% renamed_dataframe$Code){ - renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) - if( (length(renamed) >1) & (!( as.character(y) %in% names(renaming_notification)))){ - shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), - type = "warning", duration = NULL) - shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) - renaming_notification[[as.character(y)]] <- renamed[[1]] - } - renamed[[1]] - } else { - y - } - - }) - - }) - type_3 <- sapply(type_2, function(x){ - dupl <- x[!duplicated(x)] - paste(dupl, collapse = "__") - }) - type_4 <- sapply(type_3, function(y){ - if (y %in% as.character(renamed_dataframe$Code)){ - as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] - } else { - y - } - }) - return(list(as.character(type_4), renaming_notification)) -} -# Adding the thickness to the visualization for SEMPI, -# ARTS, RRE, PRISN-Supp data -correct_width <- function(data, label, sempi_width,prism_supp_data_input_width,arts_width,rre_width){ - if ((label == 'SEMPI')&(sempi_width == T)){ - data$Stop <- data$Stop + 30000 - } else if ((label == 'PRISM-Supp')&(prism_supp_data_input_width == T)){ - data$Stop <- data$Stop + 20000 - } else if ((label == 'ARTS')&(arts_width == T)){ - data$Stop <- data$Stop + 30000 - } else if ((label == 'RRE-Finder')&(rre_width == T)){ - data$Stop <- data$Stop + 50000 - } - return(data) -} - -hybrid_col <- function(data){ - data_split <- stringr::str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ - "hybrid" - } else{ - x - } - }) - return(types) -} \ No newline at end of file diff --git a/src/validate_functions.R b/src/validate_functions.R deleted file mode 100644 index 91df855..0000000 --- a/src/validate_functions.R +++ /dev/null @@ -1,155 +0,0 @@ -# Basic check if column exists for undelying functions -check_if_column_exists <- function(data_names,column_name){ - if (column_name %in% stringr::str_to_lower(data_names)){ - return(TRUE) - } else { - shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") - return(FALSE) - } -} -# The functions below are used to validate if all the columns exist, -# that are used for underlying analysis. -# Also basic check of data is numeric is done for respective colunms - -# Validation of basic input like PRISM, Antismash and SEMPI -validate_basic_input <- function(data){ - data_names <- names(data) - if (!(check_if_column_exists(data_names, 'cluster'))){ - shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (!(check_if_column_exists(data_names, 'start'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'stop'))){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'type'))){ - return(FALSE) - } - if (length(unique(data$Cluster)) != length(data$Cluster)){ - shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ - shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") - return(FALSE) - } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ - shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") - data$Type[is.na(data$Type)] <- 'unknown' - data$Type["" %in% data$Type] <- 'unknown' - } - if (!(is.numeric(data$Cluster))){ - data$Cluster <- as.numeric(data$Cluster) - } - if (!(is.numeric(data$Start))){ - data$Start <- as.numeric(data$Start) - } - if (!(is.numeric(data$Stop))){ - data$Stop <- as.numeric(data$Stop) - } - if (!(is.character(data$Type))){ - data$Type <- as.character(data$Type) - } - return(list(TRUE, data)) -} -#Validation of RRE-Finder input -validate_rre_input <- function(data){ - data_names <- names(data) - if (!(check_if_column_exists(data_names, 'gene.name'))){ - return(FALSE) - } - if (F %in% grepl("__", data$Gene.name)){ - return(FALSE) - } - if (!(check_if_column_exists(data_names, 'e.value'))){ - return(FALSE) - } else { - data$E.value <- as.numeric(data$E.value) - } - if (!is.null(data$Probability)){ - if (!(check_if_column_exists(data_names, 'score'))){ - return(FALSE) - } else{ - data$Score <- as.numeric(data$Score) - } - if (!(check_if_column_exists(data_names, 'p.value'))){ - return(FALSE) - } else { - data$P.value <- as.numeric(data$P.value) - } - if (!(check_if_column_exists(data_names, 'rre.start'))){ - return(FALSE) - } else { - data$RRE.start <- as.numeric(data$RRE.start) - } - if (!(check_if_column_exists(data_names, 'rre.end'))){ - return(FALSE) - } else { - data$RRE.end <- as.numeric(data$RRE.end) - } - if (!(check_if_column_exists(data_names, 'probability'))){ - return(FALSE) - } else { - data$Probability <- as.numeric(data$Probability) - } - } - return(list(TRUE, data)) -} -#Validation of DeepBGC input -validate_deep_input <- function(data){ - data_names <- names(data) - col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", - "bgc_candidate_id", "sequence_id") - num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") - if (!('cluster' %in% stringr::str_to_lower(data_names))){ - data$Cluster <- seq(1:dim(data)[1]) - } - for (column_name in col_names){ - if (!(check_if_column_exists(data_names, column_name))){ - return(FALSE) - } - if ( T %in% is.na(data[[column_name]])){ - return(FALSE) - } - if ( "" %in% data[[column_name]]){ - return(FALSE) - } - if (column_name %in% num_columns){ - names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name - data[[column_name]] <- as.numeric(data[[column_name]]) - } - } - return(list(TRUE, data)) -} -#Validation of GECCO input -validate_gecco_input <- function(data){ - data_names <- names(data) - col_names <- c("start", "end","average_p", "max_p", "type","alkaloid_probability","polyketide_probability", - "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability", - "proteins","domains") - num_columns <- c("start", "end","average_p", "max_p", "alkaloid_probability","polyketide_probability", - "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability") - if (!('cluster' %in% stringr::str_to_lower(data_names))){ - data$Cluster <- seq(1:dim(data)[1]) - } - for (column_name in col_names){ - if (!(check_if_column_exists(data_names, column_name))){ - return(FALSE) - } - if ( T %in% is.na(data[[column_name]])){ - return(FALSE) - } - if ( "" %in% data[[column_name]]){ - return(FALSE) - } - if (column_name %in% num_columns){ - names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name - data[[column_name]] <- as.numeric(data[[column_name]]) - } - } - return(list(TRUE, data)) -} \ No newline at end of file From 63e0722143d8aa8fcee8d4d7d35748e1494c0dbb Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 09:45:58 +0200 Subject: [PATCH 102/199] Added deep_reference plot module Former-commit-id: a488a5c65f8392084ceb2d168c2d6723b3be1a94 --- NAMESPACE | 2 ++ R/app_server.R | 7 ++---- R/app_ui.R | 17 +------------- R/mod_deep_reference.R | 52 ++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 3 +-- 5 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 R/mod_deep_reference.R diff --git a/NAMESPACE b/NAMESPACE index 720c1be..7f09dd0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -11,4 +11,6 @@ importFrom(golem,bundle_resources) importFrom(golem,favicon) importFrom(golem,with_golem_options) importFrom(magrittr,"%>%") +importFrom(shiny,NS) importFrom(shiny,shinyApp) +importFrom(shiny,tagList) diff --git a/R/app_server.R b/R/app_server.R index a5e74fc..8b0f2fd 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -2028,11 +2028,8 @@ app_server <- function( input, output, session ) { # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type - output$deep_reference <- plotly::renderPlotly({ - shiny::req(vals$deep_reference_to_plot) - vals$can_plot_deep_ref_2 <- T - vals$deep_reference_to_plot - }) + mod_deep_reference_server("deep_reference_ui_1", vals=vals) + output$deep_reference_2 <- plotly::renderPlotly({ shiny::req(vals$can_plot_deep_ref_2 == T) diff --git a/R/app_ui.R b/R/app_ui.R index 55da11e..d83d339 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -167,22 +167,7 @@ app_ui <- function(request) { shinycssloaders::withSpinner() ), options = list(handles="w,e")) ), - div( - id="id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotation comparison to the reference", - id = "annotation_reference_comparison_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - height = "100%", - shiny::selectInput("ref", "Choose reference data", choices = c(""), - selected = ""), - plotly::plotlyOutput("deep_reference") %>% - shinycssloaders::withSpinner() - ), options = list(handles="w,e")), - ) + mod_deep_reference_ui("deep_reference_ui_1") ) )), sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), diff --git a/R/mod_deep_reference.R b/R/mod_deep_reference.R new file mode 100644 index 0000000..dec7ed7 --- /dev/null +++ b/R/mod_deep_reference.R @@ -0,0 +1,52 @@ +#' deep_reference UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_deep_reference_ui <- function(id){ + ns <- NS(id) + shiny::tagList( + div( + id="id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotation comparison to the reference", + id = "annotation_reference_comparison_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + height = "100%", + shiny::selectInput("ref", "Choose reference data", choices = c(""), + selected = ""), + plotly::plotlyOutput(ns("deep_reference")) %>% + shinycssloaders::withSpinner() + ), options = list(handles="w,e")) + ) + ) +} + +#' deep_reference Server Functions +#' +#' @noRd +mod_deep_reference_server <- function(id, vals){ + shiny:: moduleServer( id, function(input, output, session){ + ns <- session$ns + + output$deep_reference <- plotly::renderPlotly({ + shiny::req(vals$deep_reference_to_plot) + vals$can_plot_deep_ref_2 <- T + vals$deep_reference_to_plot + }) + + }) +} + +## To be copied in the UI +# mod_deep_reference_ui("deep_reference_ui_1") + +## To be copied in the server +# mod_deep_reference_server("deep_reference_ui_1") diff --git a/dev/02_dev.R b/dev/02_dev.R index 431eab8..14409e3 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -40,8 +40,7 @@ usethis::use_package( "RSQLite" ) ## Add modules ---- ## Create a module infrastructure in R/ -golem::add_module( name = "name_of_module1" ) # Name of the module -golem::add_module( name = "name_of_module2" ) # Name of the module +golem::add_module( name = "deep_reference" ) # Name of the module ## Add helper functions ---- ## Creates fct_* and utils_* From eab5ef50cee27f5580fe379373c4452ad1d8474d Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 09:57:48 +0200 Subject: [PATCH 103/199] Add deep_reference_2 module Former-commit-id: b548c2605532edb9910e594fe2e85226371f7932 --- R/app_server.R | 99 +------------------------- R/app_ui.R | 15 +--- R/mod_deep_reference.R | 2 +- R/mod_deep_reference_2.R | 145 +++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 2 + 5 files changed, 150 insertions(+), 113 deletions(-) create mode 100644 R/mod_deep_reference_2.R diff --git a/R/app_server.R b/R/app_server.R index 8b0f2fd..2e28a8e 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -2031,104 +2031,7 @@ app_server <- function( input, output, session ) { mod_deep_reference_server("deep_reference_ui_1", vals=vals) - output$deep_reference_2 <- plotly::renderPlotly({ - shiny::req(vals$can_plot_deep_ref_2 == T) - vals$can_plot_deep_ref_2 == F - rename_y_axis <- shiny::isolate(vals$rename_y_axis) - data <- NULL - - index <- 1 - for (upload in data_uploads){ - if (is.null(data)){ - if (vals[[upload]] == T){ - if (dim(vals[[data_to_use[index]]])[1] != 0){ - data <- vals[[data_to_use[index]]] - } - } - } - index <- index+1 - } - - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE){ - suppressWarnings(plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) - } - if (vals$deep_data_input == TRUE){ - if (dim(vals$seg_df_ref_d)[1] >0) { - plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) - } - } - if (vals$prism_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$sempi_data_input == TRUE){ - suppressWarnings(plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) - - - } - if (input$prism_supp == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) - } - if (vals$gecco_data_input == TRUE){ - if (dim(vals$seg_df_ref_g)[1] >0) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } - } - to_plot <- plotly::ggplotly(plot + - ggplot2::scale_y_discrete(labels = rename_y_axis) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip - ) - to_plot %>% plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types ')), - autosize=TRUE) - }) #%>% shiny::debounce(200) - + mod_deep_reference_2_server("deep_reference_2_ui_1", vals=vals, data_uploads = data_uploads, data_to_use = data_to_use) ##---------------------------------------------------------------- ## Biocircos plot tab - ##--------------------------------------------------------------- diff --git a/R/app_ui.R b/R/app_ui.R index d83d339..8aa1577 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -153,20 +153,7 @@ app_ui <- function(request) { id="anno_data1", shiny::column( width = 12, - div( - id="anno_div_1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotations reference", - id = "annotation_reference_box", - height = "100%", - width = NULL, - collapsible = TRUE, - closable = TRUE, - plotly::plotlyOutput("deep_reference_2") %>% - shinycssloaders::withSpinner() - ), options = list(handles="w,e")) - ), + mod_deep_reference_2_ui("deep_reference_2_ui_1"), mod_deep_reference_ui("deep_reference_ui_1") ) )), diff --git a/R/mod_deep_reference.R b/R/mod_deep_reference.R index dec7ed7..9784bd3 100644 --- a/R/mod_deep_reference.R +++ b/R/mod_deep_reference.R @@ -49,4 +49,4 @@ mod_deep_reference_server <- function(id, vals){ # mod_deep_reference_ui("deep_reference_ui_1") ## To be copied in the server -# mod_deep_reference_server("deep_reference_ui_1") +# mod_deep_reference_server("deep_reference_ui_1", vals=vals) diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R new file mode 100644 index 0000000..d308f72 --- /dev/null +++ b/R/mod_deep_reference_2.R @@ -0,0 +1,145 @@ +#' deep_reference_2 UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_deep_reference_2_ui <- function(id){ + ns <- NS(id) + tagList( + div( + id="anno_div_1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotations reference", + id = "annotation_reference_box", + height = "100%", + width = NULL, + collapsible = TRUE, + closable = TRUE, + plotly::plotlyOutput(ns("deep_reference_2")) %>% + shinycssloaders::withSpinner() + ), options = list(handles="w,e")) + ) + ) +} + +#' deep_reference_2 Server Functions +#' +#' @noRd +mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + + output$deep_reference_2 <- plotly::renderPlotly({ + shiny::req(vals$can_plot_deep_ref_2 == T) + vals$can_plot_deep_ref_2 == F + rename_y_axis <- shiny::isolate(vals$rename_y_axis) + data <- NULL + + index <- 1 + for (upload in data_uploads){ + if (is.null(data)){ + if (vals[[upload]] == T){ + if (dim(vals[[data_to_use[index]]])[1] != 0){ + data <- vals[[data_to_use[index]]] + } + } + } + index <- index+1 + } + + + tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", + "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p") + + plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) + if (vals$anti_data_input == TRUE){ + suppressWarnings(plot <- plot + + ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + } + if (vals$deep_data_input == TRUE){ + if (dim(vals$seg_df_ref_d)[1] >0) { + plot <- plot + + ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score,activity = activity ),size =3) + } + } + if (vals$rre_data_input == TRUE){ + if (vals$rre_more == T){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, + Probability = Probability),size = 3) + } else { + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + } + } + if (vals$prism_data_input == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + + + } + if (vals$sempi_data_input == TRUE){ + suppressWarnings(plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + + + } + if (!(is.null(input$prism_supp ))){ + if (input$prism_supp == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score), size = 3) + } + } + if (vals$arts_data_input == TRUE){ + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model), size = 3) + } + if (vals$gecco_data_input == TRUE){ + if (dim(vals$seg_df_ref_g)[1] >0) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + } + } + to_plot <- plotly::ggplotly(plot + + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("")+ + ggplot2::xlab("Chromosome length")+ + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot %>% plotly::layout(legend=list(font = list( + family = "sans-serif", + size = 12, + color = "#000"), + bordercolor = "#FFFFFF", + borderwidth = 2, + title=list(text=' Cluster Types ')), + autosize=TRUE) + }) #%>% shiny::debounce(200) + + + }) +} + +## To be copied in the UI +# mod_deep_reference_2_ui("deep_reference_2_ui_1") + +## To be copied in the server +# mod_deep_reference_2_server("deep_reference_2_ui_1", vals=vals, data_uploads = data_uploads, data_to_use = data_to_use) diff --git a/dev/02_dev.R b/dev/02_dev.R index 14409e3..39eda2d 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -41,6 +41,8 @@ usethis::use_package( "RSQLite" ) ## Add modules ---- ## Create a module infrastructure in R/ golem::add_module( name = "deep_reference" ) # Name of the module +golem::add_module( name = "deep_reference_2" ) # Name of the module + ## Add helper functions ---- ## Creates fct_* and utils_* From 95e4b5798de732db1eedd654d035fdf48e63ccaa Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 10:04:37 +0200 Subject: [PATCH 104/199] Add barplot_rank module Former-commit-id: c0644c9d1f8bd18bc53efa100de28d2f3bba1bd2 --- R/app_server.R | 62 +------------------------- R/app_ui.R | 14 +----- R/mod_barplot_rank.R | 101 +++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 1 + 4 files changed, 105 insertions(+), 73 deletions(-) create mode 100644 R/mod_barplot_rank.R diff --git a/R/app_server.R b/R/app_server.R index 2e28a8e..2f5e5d4 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -2030,7 +2030,6 @@ app_server <- function( input, output, session ) { # For antismash and PRISM data showed only ID, Start, Stop, Type mod_deep_reference_server("deep_reference_ui_1", vals=vals) - mod_deep_reference_2_server("deep_reference_2_ui_1", vals=vals, data_uploads = data_uploads, data_to_use = data_to_use) ##---------------------------------------------------------------- ## Biocircos plot tab - @@ -2069,65 +2068,8 @@ app_server <- function( input, output, session ) { ## Summarize tab - ##--------------------------------------------------------------- # Render barplot with number plyr::count of interception for BGC IDs - output$barplot_rank <- plotly::renderPlotly({ - shiny::req(vals$data_upload_count >1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_barplot_rank == T) - - antismash_count <- NULL - prism_count <- NULL - deep_count <- NULL - rre_count <- NULL - sempi_count <- NULL - prism_supp_count <- NULL - arts_count <- NULL - gecco_count <- NULL - - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - index <- 1 - ranking_data <- NULL - for (upload in data_uploads){ - if (vals[[upload]] == T){ - counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] - # Add prefices to the ID to plot for a barplot. - counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) - # Add label column to the dataframe, from which we will plot - counts_var$label <- rep(soft_namings[index], length(counts_var$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - counts_var$Type <- anot_var$Type - # Add Start positions (to visualize on hover) - counts_var$Start <- anot_var$Start - # Add Stop positions (to visualize on hover) - counts_var$Stop <- anot_var$Stop - if (is.null(ranking_data)){ - ranking_data <- counts_var - } else{ - ranking_data <- rbind(ranking_data, counts_var) - } - } - index <- index +1 - } - - - # Fix column names in the master dataframe - colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") - # Plot - plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + - ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = ggplot2::element_text(size = 14)) + - ggplot2::ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") - ) - - - }) + mod_barplot_rank_server("barplot_rank_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) + # Render table with data output$group_table <- shiny::renderTable({ diff --git a/R/app_ui.R b/R/app_ui.R index 8aa1577..69d1917 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -209,19 +209,7 @@ app_ui <- function(request) { shiny::fluidRow( tags$div( id="summarize_data1", - div( - id="id1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Ranking barplot", - id = "ranking_barplot_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput("barplot_rank", height = "600px")%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), + mod_barplot_rank_ui("barplot_rank_ui_1"), div( id="id2", shinyjqui::jqui_resizable( diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R new file mode 100644 index 0000000..9e9d919 --- /dev/null +++ b/R/mod_barplot_rank.R @@ -0,0 +1,101 @@ +#' barplot_rank UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_barplot_rank_ui <- function(id){ + ns <- NS(id) + tagList( + div( + id="id1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Ranking barplot", + id = "ranking_barplot_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput(ns("barplot_rank"), height = "600px")%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ) + ) +} + +#' barplot_rank Server Functions +#' +#' @noRd +mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + output$barplot_rank <- plotly::renderPlotly({ + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_barplot_rank == T) + + antismash_count <- NULL + prism_count <- NULL + deep_count <- NULL + rre_count <- NULL + sempi_count <- NULL + prism_supp_count <- NULL + arts_count <- NULL + gecco_count <- NULL + + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + index <- 1 + ranking_data <- NULL + for (upload in data_uploads){ + if (vals[[upload]] == T){ + counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] + # Add prefices to the ID to plot for a barplot. + counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) + # Add label column to the dataframe, from which we will plot + counts_var$label <- rep(soft_namings[index], length(counts_var$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + counts_var$Type <- anot_var$Type + # Add Start positions (to visualize on hover) + counts_var$Start <- anot_var$Start + # Add Stop positions (to visualize on hover) + counts_var$Stop <- anot_var$Stop + if (is.null(ranking_data)){ + ranking_data <- counts_var + } else{ + ranking_data <- rbind(ranking_data, counts_var) + } + } + index <- index +1 + } + + + # Fix column names in the master dataframe + colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") + # Plot + plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14)) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), + tooltip=c("Type", "Start", "Stop") + ) + + + }) + }) +} + +## To be copied in the UI +# mod_barplot_rank_ui("barplot_rank_ui_1") + +## To be copied in the server +# mod_barplot_rank_server("barplot_rank_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/dev/02_dev.R b/dev/02_dev.R index 39eda2d..dd8f46c 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -42,6 +42,7 @@ usethis::use_package( "RSQLite" ) ## Create a module infrastructure in R/ golem::add_module( name = "deep_reference" ) # Name of the module golem::add_module( name = "deep_reference_2" ) # Name of the module +golem::add_module( name = "barplot_rank" ) # Name of the module ## Add helper functions ---- From 9067115ce2e95f9a8f1a6940193715837407024d Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 10:36:51 +0200 Subject: [PATCH 105/199] Add group_table module Former-commit-id: c8b659cea362897842b412d00b92d6902a8b0013 --- R/app_server.R | 102 ++++------------------------------- R/app_ui.R | 17 +----- R/mod_group_table.R | 129 ++++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 2 + 4 files changed, 142 insertions(+), 108 deletions(-) create mode 100644 R/mod_group_table.R diff --git a/R/app_server.R b/R/app_server.R index 2f5e5d4..30ea7e1 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -171,7 +171,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "Antismash" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "Antismash" ) shiny::updateSelectInput(session, "ref_comparison", selected = "Antismash") @@ -221,7 +221,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "GECCO" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "GECCO") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "GECCO") @@ -274,7 +274,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "PRISM" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "PRISM" ) shiny::updateSelectInput(session, "ref_comparison", selected = "PRISM") @@ -314,7 +314,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "SEMPI" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "SEMPI" ) shiny::updateSelectInput(session, "ref_comparison", selected = "SEMPI") @@ -379,7 +379,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "ARTS" ) shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") @@ -452,7 +452,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "ARTS" ) shiny::updateSelectInput(session, "ref_col_biocircos", selected = "ARTS") @@ -492,7 +492,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "DeepBGC" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "DeepBGC" ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = "DeepBGC", @@ -536,7 +536,7 @@ app_server <- function( input, output, session ) { if (vals$data_upload_count == 1){ shiny::updateSelectInput(session, "ref", selected = "RRE-Finder" ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "RRE-Finder" ) shiny::updateSelectInput(session, "ref_col_biocircos", selected = "RRE-Finder") @@ -734,7 +734,7 @@ app_server <- function( input, output, session ) { update_ui_with_data <- function(){ shiny::updateSelectInput(session, "ref", choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", + shiny::updateSelectInput(session, "group_table_ui_1-group_by", choices = vals$choices$group_by ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) @@ -2072,89 +2072,7 @@ app_server <- function( input, output, session ) { # Render table with data - output$group_table <- shiny::renderTable({ - shiny::req(vals$data_upload_count >1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) - #source("src/group_table_functions.R") - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) - colnames(df_test) <- abbr - added_inters <- c(soft_names[match(input$group_by, soft_namings)]) - add_inters <- list() - if (input$count_all == F){ - df_test[nrow(df_test)+1,] <- NA - } else{ - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- abbr - df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster - df_test[nrow(df_test)+1,] <- NA - } - for (i in seq(1:length(data_uploads))){ - if (input$group_by==soft_namings[[i]]){ - exclude <- i - soft_n <- names(inters[[soft_names[i]]]) - index <- 1 - for (d in seq(1:length(soft_n))) { - name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))){ - if (name==soft_names[match(soft_n, soft_names)][h]){ - colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) - } - } - - index <- index +1 - } - excluded_names <- abbr[abbr != as.name(abbr[i])] - data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), - b=paste(eval(as.name(excluded_names[2])), collapse=","), - c=paste(eval(as.name(excluded_names[3])), collapse=","), - d=paste(eval(as.name(excluded_names[4])), collapse=","), - e=paste(eval(as.name(excluded_names[5])), collapse=","), - f=paste(eval(as.name(excluded_names[6])), collapse=","), - g=paste(eval(as.name(excluded_names[7])), collapse=",")) - colnames(data) <- c(abbr[i], excluded_names) - for (p in abbr){ - data[[p]] <- gsub('NA,|,NA', '', data[[p]]) - data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, abbr)] - } - data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))){ - if (vals[[data_uploads[f]]] != TRUE){ - data <- data %>% - dplyr::select(-as.name(soft_namings[f])) - } - } - - } else { - if ( !(soft_names[i] %in% added_inters)){ - matched_v <- match(added_inters,names(inters[[soft_names[i]]])) - soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])){ - if (!(inter %in% added_inters)){ - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) - add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) - } - } - added_inters <- c(added_inters, soft_names[i])} - } - } - - for (name in names( add_inters) ){ - data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") - } - write.csv(data, "group_by.csv", row.names = F) - data - }) + mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) # Download used datasets (as for BioCircos) output$download <- shiny::downloadHandler(filename = function(){ diff --git a/R/app_ui.R b/R/app_ui.R index 69d1917..514f8b1 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -210,22 +210,7 @@ app_ui <- function(request) { tags$div( id="summarize_data1", mod_barplot_rank_ui("barplot_rank_ui_1"), - div( - id="id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Group table", - id = "group_table_box", - collapsible = TRUE, - closable = TRUE, - style='overflow-x: scroll;height:700px;overflow-y: scroll;', - height = "100%", - shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), - shiny::tableOutput("group_table")%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ) + mod_group_table_ui("group_table_ui_1") ) ), sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) diff --git a/R/mod_group_table.R b/R/mod_group_table.R new file mode 100644 index 0000000..94a6872 --- /dev/null +++ b/R/mod_group_table.R @@ -0,0 +1,129 @@ +#' group_table UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_group_table_ui <- function(id){ + ns <- NS(id) + tagList( + div( + id="id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Group table", + id = "group_table_box", + collapsible = TRUE, + closable = TRUE, + style='overflow-x: scroll;height:700px;overflow-y: scroll;', + height = "100%", + shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ''), + shiny::tableOutput(ns("group_table"))%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ) + ) +} + +#' group_table Server Functions +#' +#' @noRd +mod_group_table_server <- function(id,vals,data_uploads,soft_names,soft_namings,data_to_use,abbr){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + output$group_table <- shiny::renderTable({ + shiny::req(vals$data_upload_count >1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_group_table == T) + print(paste0("input$count_all: ", input$count_all, ", input$group_by: ", input$group_by, ", ")) + #source("src/group_table_functions.R") + if (is.null(vals$inters_filtered)){ + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) + colnames(df_test) <- abbr + added_inters <- c(soft_names[match(input$group_by, soft_namings)]) + add_inters <- list() + if (input$count_all == F){ + df_test[nrow(df_test)+1,] <- NA + } else{ + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] + df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- abbr + df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test)+1,] <- NA + } + for (i in seq(1:length(data_uploads))){ + if (input$group_by==soft_namings[[i]]){ + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))){ + if (name==soft_names[match(soft_n, soft_names)][h]){ + colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) + } + } + + index <- index +1 + } + excluded_names <- abbr[abbr != as.name(abbr[i])] + data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), + b=paste(eval(as.name(excluded_names[2])), collapse=","), + c=paste(eval(as.name(excluded_names[3])), collapse=","), + d=paste(eval(as.name(excluded_names[4])), collapse=","), + e=paste(eval(as.name(excluded_names[5])), collapse=","), + f=paste(eval(as.name(excluded_names[6])), collapse=","), + g=paste(eval(as.name(excluded_names[7])), collapse=",")) + colnames(data) <- c(abbr[i], excluded_names) + for (p in abbr){ + data[[p]] <- gsub('NA,|,NA', '', data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, abbr)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))){ + if (vals[[data_uploads[f]]] != TRUE){ + data <- data %>% + dplyr::select(-as.name(soft_namings[f])) + } + } + + } else { + if ( !(soft_names[i] %in% added_inters)){ + matched_v <- match(added_inters,names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])){ + if (!(inter %in% added_inters)){ + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } + } + added_inters <- c(added_inters, soft_names[i])} + } + } + + for (name in names( add_inters) ){ + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + write.csv(data, "group_by.csv", row.names = F) + data + }) + }) +} + +## To be copied in the UI +# mod_group_table_ui("group_table_ui_1") + +## To be copied in the server +# mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/dev/02_dev.R b/dev/02_dev.R index dd8f46c..9b10ee7 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -43,6 +43,8 @@ usethis::use_package( "RSQLite" ) golem::add_module( name = "deep_reference" ) # Name of the module golem::add_module( name = "deep_reference_2" ) # Name of the module golem::add_module( name = "barplot_rank" ) # Name of the module +golem::add_module( name = "group_table" ) # Name of the module + ## Add helper functions ---- From a57e73eee5467874f96610502957a63e4360c1e4 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 10:42:13 +0200 Subject: [PATCH 106/199] Add download module Former-commit-id: f2bea4160fe56cbb774ca97592776209db73782c --- R/app_server.R | 22 ++---------------- R/app_ui.R | 12 +--------- R/mod_download.R | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 2 ++ 4 files changed, 65 insertions(+), 31 deletions(-) create mode 100644 R/mod_download.R diff --git a/R/app_server.R b/R/app_server.R index 30ea7e1..4373117 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -2075,26 +2075,8 @@ app_server <- function( input, output, session ) { mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) # Download used datasets (as for BioCircos) - output$download <- shiny::downloadHandler(filename = function(){ - paste("datasets.zip") - }, - content = function(file){ - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } - } - #create the zip file from flst vector - group_by_script <- system.file("scripts", "group.py", package = "BGCViz") - flst <- c(flst, group_by_script) - zip(file, flst) }, - contentType = "application/zip" ) + mod_download_server("download_ui_1") + shiny::onSessionEnded(function() { # List files in directory files_in_dir <- list.files() diff --git a/R/app_ui.R b/R/app_ui.R index 514f8b1..76725fc 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -389,17 +389,7 @@ app_ui <- function(request) { selected = "All") ) ), - div( - id = "id6", - shinydashboardPlus::box( - title = "Download data", - id = "download_data_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - ) - ) + mod_download_ui("download_ui_1") ) ) ), diff --git a/R/mod_download.R b/R/mod_download.R new file mode 100644 index 0000000..f93acaf --- /dev/null +++ b/R/mod_download.R @@ -0,0 +1,60 @@ +#' download UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_download_ui <- function(id){ + ns <- NS(id) + tagList( + div( + id = "id6", + shinydashboardPlus::box( + title = "Download data", + id = "download_data_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::downloadButton(ns("download"),"Download currently used datasets (as for Biocircos plot)" ) + ) + ) + ) +} + +#' download Server Functions +#' +#' @noRd +mod_download_server <- function(id){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + output$download <- shiny::downloadHandler(filename = function(){ + paste("datasets.zip") + }, + content = function(file){ + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + flst <- c(flst, file_names) + } + } + #create the zip file from flst vector + group_by_script <- system.file("scripts", "group.py", package = "BGCViz") + flst <- c(flst, group_by_script) + zip(file, flst) }, + contentType = "application/zip" ) + }) +} + +## To be copied in the UI +# mod_download_ui("download_ui_1") + +## To be copied in the server +# mod_download_server("download_ui_1") diff --git a/dev/02_dev.R b/dev/02_dev.R index 9b10ee7..c4f82b0 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -44,6 +44,8 @@ golem::add_module( name = "deep_reference" ) # Name of the module golem::add_module( name = "deep_reference_2" ) # Name of the module golem::add_module( name = "barplot_rank" ) # Name of the module golem::add_module( name = "group_table" ) # Name of the module +golem::add_module( name = "download" ) # Name of the module + From ef4b870194f7e63cf1e3c1fc2d3152813c1943e9 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 11:08:47 +0200 Subject: [PATCH 107/199] Add deepbgc_plots module Former-commit-id: d2a44085ba0976789921405578b7b7f2cd282d6b --- R/app_server.R | 162 ++---------------------------- R/app_ui.R | 42 +------- R/mod_deepbgc_plots.R | 225 ++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 2 + 4 files changed, 234 insertions(+), 197 deletions(-) create mode 100644 R/mod_deepbgc_plots.R diff --git a/R/app_server.R b/R/app_server.R index 4373117..2d1d951 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -173,7 +173,7 @@ app_server <- function( input, output, session ) { selected = "Antismash" ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "Antismash" ) - shiny::updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", selected = "Antismash") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") @@ -276,7 +276,7 @@ app_server <- function( input, output, session ) { selected = "PRISM" ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "PRISM" ) - shiny::updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", selected = "PRISM") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") @@ -316,7 +316,7 @@ app_server <- function( input, output, session ) { selected = "SEMPI" ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", selected = "SEMPI" ) - shiny::updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", selected = "SEMPI") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") @@ -740,7 +740,7 @@ app_server <- function( input, output, session ) { choices = vals$choices$ref_col_biocircos ) shiny::updateSelectInput(session, "ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", choices = vals$choices$ref_comparison ) } # Observe input of chromosome length @@ -1711,160 +1711,10 @@ app_server <- function( input, output, session ) { ## DeepBGC Comparison tab - ##---------------------------------------------------------------- # Render barplot - output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - deep_inter_1 <- vals$deep_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type == "Activity") { - score <- "score_a" - } else if (input$score_type == "DeepBGC") { - score <- "score_d" - } else if (input$score_type == "Cluster_Type") { - score <- "score_c" - } - deep_inter_1$score <- deep_inter_1[[score]] - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - - deep_inter <- deep_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) - if (length(deep_inter$Start) > 0) { - deep_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'Antismash'){ - anti_inter <- shiny::isolate(vals$anti_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'PRISM'){ - anti_inter <- shiny::isolate(vals$prism_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'SEMPI'){ - anti_inter <- shiny::isolate(vals$sempi_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - # Get the interception of two matrices - if (length(deep_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(deep_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - if (input$ref_comparison == 'Antismash'){ - used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'PRISM'){ - used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc - cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'SEMPI') { - used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc - cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness_deep <- data.frame(fullnes_of_annotation) - #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), - paste("DeepBGC score:", as.character(input$score_d)), - paste("Cluster type score:", as.character(input$score_c)), sep = "\n") - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) + mod_deepbgc_plots_server("deep_barplot_ui_1", vals=vals, score_a = vals$score_a, score_d=vals$score_d, score_c=vals$score_c) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$deep_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_deep)) - - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_deep) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'Antismash'){ - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'PRISM'){ - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'SEMPI'){ - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) + ##---------------------------------------------------------------- ## GECCO Comparison tab - ##---------------------------------------------------------------- diff --git a/R/app_ui.R b/R/app_ui.R index 76725fc..1a2e6b9 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -47,47 +47,7 @@ app_ui <- function(request) { ), shinydashboard::tabItems( shinydashboard::tabItem( tabName = "deep_sidemenu", - shiny::fluidRow( - tags$div( - id = "deep_data1", - div(id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison", - id = "deep_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput("deep_barplot", height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))), - div(id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC rate", - id = "deep_rate_box", - collapsible = TRUE, - height = "100%", - plotly::plotlyOutput("deep_rate", height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))))), - shiny::fluidRow( - tags$div( id = "deep_data2", - div(id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison controls", - id = "deep_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), - # Score to use for thresholds - shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ),options = list(handles="w,e"))) - )), + mod_deepbgc_plots_ui("deep_barplot_ui_1"), sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) ), diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R new file mode 100644 index 0000000..7fb5629 --- /dev/null +++ b/R/mod_deepbgc_plots.R @@ -0,0 +1,225 @@ +#' deep_barplot UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_deepbgc_plots_ui <- function(id){ + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "deep_data1", + div(id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison", + id = "deep_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput(ns("deep_barplot"), height = "500px",) %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e"))), + div(id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison controls", + id = "deep_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput(ns("ref_comparison"), "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), + # Score to use for thresholds + shiny::selectInput(ns("score_type"), "Choose score type to set threshold", choices = c("Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC"), + selected = "Activity score"), + # Chose step for barplot (as a threshold to draw a bar) + shiny::sliderInput(ns("plot_step"), "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput(ns("plot_start"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ),options = list(handles="w,e"))) + ) + ), + shiny::fluidRow( + tags$div( id = "deep_data2", + div(id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC rate", + id = "deep_rate_box", + collapsible = TRUE, + height = "100%", + plotly::plotlyOutput(ns("deep_rate"), height = "500px",) %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e"))) + )) + ) +} + +#' deep_barplot Server Functions +#' +#' @noRd +mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + + output$deep_barplot <- shiny::renderPlot({ + shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + deep_inter_1 <- vals$deep_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type == "Activity") { + score <- "score_a" + } else if (input$score_type == "DeepBGC") { + score <- "score_d" + } else if (input$score_type == "Cluster_Type") { + score <- "score_c" + } + deep_inter_1$score <- deep_inter_1[[score]] + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ + + deep_inter <- deep_inter_1 %>% + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison == 'Antismash'){ + anti_inter <- shiny::isolate(vals$anti_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'PRISM'){ + anti_inter <- shiny::isolate(vals$prism_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == 'SEMPI'){ + anti_inter <- shiny::isolate(vals$sempi_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + # Get the interception of two matrices + if (length(deep_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + if (input$ref_comparison == 'Antismash'){ + used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'PRISM'){ + used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc + cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == 'SEMPI') { + used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc + cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_deep <- data.frame(fullnes_of_annotation) + #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), + paste("DeepBGC score:", as.character(score_d)), + paste("Cluster type score:", as.character(score_c)), sep = "\n") + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + output$deep_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_deep)) + + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_deep) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison == 'Antismash'){ + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison == 'PRISM'){ + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison == 'SEMPI'){ + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + }) +} +## To be copied in the UI +# mod_deepbgc_plots_ui("deep_barplot_ui_1") + +## To be copied in the server +# mod_deepbgc_plots_server("deep_barplot_ui_1", vals, score_a, score_d, score_c) diff --git a/dev/02_dev.R b/dev/02_dev.R index c4f82b0..4ef386d 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -45,6 +45,8 @@ golem::add_module( name = "deep_reference_2" ) # Name of the module golem::add_module( name = "barplot_rank" ) # Name of the module golem::add_module( name = "group_table" ) # Name of the module golem::add_module( name = "download" ) # Name of the module +golem::add_module( name = "deepbgc_plots" ) # Name of the module + From 8d4fa6c75d6bf35f4dc5f4027b0d63fbae884e3a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 11:17:23 +0200 Subject: [PATCH 108/199] Add gecoo_plots module Former-commit-id: 9574e0922c835269671308ac948f918851ab421d --- R/app_server.R | 163 ++----------------------------- R/app_ui.R | 60 ++---------- R/mod_gecco_plots.R | 232 ++++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 3 +- 4 files changed, 245 insertions(+), 213 deletions(-) create mode 100644 R/mod_gecco_plots.R diff --git a/R/app_server.R b/R/app_server.R index 2d1d951..ab59d2f 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -177,7 +177,7 @@ app_server <- function( input, output, session ) { selected = "Antismash") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "Antismash") - shiny::updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", selected = "Antismash") } @@ -280,7 +280,7 @@ app_server <- function( input, output, session ) { selected = "PRISM") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "PRISM") - shiny::updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", selected = "PRISM") } } @@ -320,7 +320,7 @@ app_server <- function( input, output, session ) { selected = "SEMPI") shiny::updateSelectInput(session, "ref_col_biocircos", selected = "SEMPI") - shiny::updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", selected = "SEMPI") } } @@ -738,7 +738,7 @@ app_server <- function( input, output, session ) { choices = vals$choices$group_by ) shiny::updateSelectInput(session, "ref_col_biocircos", choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", choices = vals$choices$ref_comparison_gecco ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", choices = vals$choices$ref_comparison ) @@ -1719,159 +1719,8 @@ app_server <- function( input, output, session ) { ## GECCO Comparison tab - ##---------------------------------------------------------------- # Render barplot - output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - gecco_inter_1 <- vals$gecco_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type_gecco == "avg_p") { - score <- "score_a" - } else if (input$score_type_gecco == "Cluster_Type") { - score <- "score_c" - } - gecco_inter_1$score <- gecco_inter_1[[score]] - - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - - # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix - gecco_inter <- gecco_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) - if (length(gecco_inter$Start) > 0) { - gecco_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == 'Antismash'){ - anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'PRISM'){ - anti_inter <- vals$prism_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'SEMPI'){ - anti_inter <- vals$sempi_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(gecco_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(gecco_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison_gecco == 'Antismash'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'PRISM'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc - cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'SEMPI') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc - cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness_gecco <- data.frame(fullnes_of_annotation) - #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), - paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$gecco_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_gecco)) - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_gecco) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == 'Antismash'){ - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'PRISM'){ - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'SEMPI'){ - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) + mod_gecco_plots_server("gecco_plots_ui_1", vals = vals,score_average_gecco=vals$score_average_gecco, + score_cluster_gecco=vals$score_cluster_gecco ) ##--------------------------------------------------------------- ## Annotation on chromosome plots' tab - ##--------------------------------------------------------------- diff --git a/R/app_ui.R b/R/app_ui.R index 1a2e6b9..35d2ede 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -46,63 +46,15 @@ app_ui <- function(request) { css = "" ), shinydashboard::tabItems( - shinydashboard::tabItem( tabName = "deep_sidemenu", - mod_deepbgc_plots_ui("deep_barplot_ui_1"), - sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), - sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) + shinydashboard::tabItem( + tabName = "deep_sidemenu", + mod_deepbgc_plots_ui("deep_barplot_ui_1"), + sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), + sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) ), shinydashboard::tabItem( tabName = "gecco_sidemenu", - shiny::fluidRow( - tags$div( - id = "gecco_data1", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison", - id = "gecco_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput("gecco_barplot", height = "500px") %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), - div( - id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO rate", - id = "gecco_rate_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput("gecco_rate", height = "500px",)%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), - ) - ), - shiny::fluidRow( - tags$div( - id = "gecco_data2", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison controls", - id = "gecco_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), - shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c( - "Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type"), - selected = "avg_p"), - shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ), options = list(handles="w,e")) - ) - ) - ), + mod_gecco_plots_ui("gecco_plots_ui_1"), sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) ), diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R new file mode 100644 index 0000000..c068bb2 --- /dev/null +++ b/R/mod_gecco_plots.R @@ -0,0 +1,232 @@ +#' gecco_plots UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_gecco_plots_ui <- function(id){ + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "gecco_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison", + id = "gecco_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput(ns("gecco_barplot"), height = "500px") %>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO rate", + id = "gecco_rate_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput(ns("gecco_rate"), height = "500px",)%>% + shinycssloaders::withSpinner() + ),options = list(handles="w,e")) + ), + ) + ), + shiny::fluidRow( + tags$div( + id = "gecco_data2", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison controls", + id = "gecco_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput(ns("ref_comparison_gecco"), "Choose data for comparison with Gecco", choices = c(""),selected = ''), + shiny::selectInput(ns("score_type_gecco"), "Choose score type to set threshold", choices = c( + "Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type"), + selected = "avg_p"), + shiny::sliderInput(ns("plot_step_gecco"), "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::sliderInput(ns("plot_start_gecco"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ), options = list(handles="w,e")) + ) + ) + ) + ) +} + +#' gecco_plots Server Functions +#' +#' @noRd +mod_gecco_plots_server <- function(id, vals,score_average_gecco,score_cluster_gecco){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + output$gecco_barplot <- shiny::renderPlot({ + shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + gecco_inter_1 <- vals$gecco_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score <- "score_a" + } else if (input$score_type_gecco == "Cluster_Type") { + score <- "score_c" + } + gecco_inter_1$score <- gecco_inter_1[[score]] + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ + + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix + gecco_inter <- gecco_inter_1 %>% + dplyr::filter(score>=dataframe_1/100) %>% + dplyr::select(Start, Stop) + if (length(gecco_inter$Start) > 0) { + gecco_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison_gecco == 'Antismash'){ + anti_inter <- vals$anti_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'PRISM'){ + anti_inter <- vals$prism_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == 'SEMPI'){ + anti_inter <- vals$sempi_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(gecco_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query,subject) + inter_bgc <- length(interseption@from) + len_new <- length(gecco_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison_gecco == 'Antismash'){ + used_antismash <- length(vals$anti_data$Cluster)-inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'PRISM'){ + used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == 'SEMPI') { + used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), + cols, c(used_antismash, inter_bgc, len_new)) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + + } + + # Store dataframe in reactive value for later use. + vals$fullness_gecco <- data.frame(fullnes_of_annotation) + #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), + paste("Cluster type score:", as.character(score_cluster_gecco)), sep = "\n") + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + + ggplot2::geom_bar(position="dodge", stat="identity")+ + ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + + ggplot2::xlab(paste(input$score_type,"Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$gecco_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_gecco)) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_gecco) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison_gecco == 'Antismash'){ + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'PRISM'){ + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM`/length(data$Cluster)) + } else if (input$ref_comparison_gecco == 'SEMPI'){ + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") + test <- test %>% + dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), + #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% + ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color=Rates)) + + ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type,"Score threshold")), + tooltip = c("Rate")) + }) + }) +} + +## To be copied in the UI +# mod_gecco_plots_ui("gecco_plots_ui_1") + +## To be copied in the server +# mod_gecco_plots_server("gecco_plots_ui_1", vals,score_average_gecco,score_cluster_gecco ) diff --git a/dev/02_dev.R b/dev/02_dev.R index 4ef386d..e62e80a 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -46,8 +46,7 @@ golem::add_module( name = "barplot_rank" ) # Name of the module golem::add_module( name = "group_table" ) # Name of the module golem::add_module( name = "download" ) # Name of the module golem::add_module( name = "deepbgc_plots" ) # Name of the module - - +golem::add_module( name = "gecco_plots" ) # Name of the module From b8807db7d79dfa0d5012b9b21da5d93062ed34bb Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 5 Nov 2021 11:35:52 +0200 Subject: [PATCH 109/199] Add biocircos module Former-commit-id: bb39b4a0146ecd8507460600ee52cd80b804c2ba --- R/app_server.R | 42 +----------------- R/app_ui.R | 40 +---------------- R/mod_biocircos.R | 110 ++++++++++++++++++++++++++++++++++++++++++++++ dev/02_dev.R | 2 +- 4 files changed, 114 insertions(+), 80 deletions(-) create mode 100644 R/mod_biocircos.R diff --git a/R/app_server.R b/R/app_server.R index ab59d2f..8467730 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -875,17 +875,7 @@ app_server <- function( input, output, session ) { shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) } }) - output$biocircos_coloring <- shiny::renderUI({ - if (input$ShowBiocircosColoring == T){ - shinydashboardPlus::box( - title = "Biocircos coloring scheme", - closable = TRUE, - collapsible = TRUE, - DT::dataTableOutput("biocircos_legend") %>% - shinycssloaders::withSpinner() - ) - } - }) + output$deep_filter_box <- shiny::renderUI({ if (vals$deep_data_input == T){ vals$deep_global <- T @@ -1734,35 +1724,7 @@ app_server <- function( input, output, session ) { ## Biocircos plot tab - ##--------------------------------------------------------------- # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- BioCircos::renderBioCircos({ - shiny::req(vals$data_upload_count >1) - - # Plot BioCircos - BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) - }) - - - output$biocircos_legend <- DT::renderDataTable({ - shiny::req(vals$data_upload_count >=1) - rownames = FALSE - new_data <- vals$coloring_datatable - color_vec <- new_data$x$data$Color - options(DT.options = list(pageLength = 50)) - new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) - - - }) - - # Updating values in Datatable on edit - shiny::observeEvent(input$biocircos_legend_cell_edit, { - if (input$biocircos_legend_cell_edit$col[1] == 0){ - vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 1){ - vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 2){ - vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value - } - }) + mod_biocircos_server("biocircos_ui_1", vals = vals) ##--------------------------------------------------------------- ## Summarize tab - ##--------------------------------------------------------------- diff --git a/R/app_ui.R b/R/app_ui.R index 35d2ede..526a9b3 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -74,45 +74,7 @@ app_ui <- function(request) { ), shinydashboard::tabItem( tabName = "biocircos_sidemenu", - shiny::fluidRow( - tags$div( - id = "biocircos_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Biocircos plot", - id = "biocircos_plot_box", - collapsible = TRUE, - closable = TRUE, - width = 12, - shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), - sidebar = shinydashboardPlus::boxSidebar( - id = "biocircos_box_sidebar", - width = 25, - shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') - ), - BioCircos::BioCircosOutput("biocircos", height = "900px")%>% - shinycssloaders::withSpinner() - ) - ) - ) - ), - shiny::fluidRow( - tags$div( - id = "biocircos_data2", - div( - id = "id1", - shiny::uiOutput("biocircos_coloring") - ) - ) - ), + mod_biocircos_ui("biocircos_ui_1"), sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) ), diff --git a/R/mod_biocircos.R b/R/mod_biocircos.R new file mode 100644 index 0000000..9392aa6 --- /dev/null +++ b/R/mod_biocircos.R @@ -0,0 +1,110 @@ +#' biocircos UI Function +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList +mod_biocircos_ui <- function(id){ + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "biocircos_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Biocircos plot", + id = "biocircos_plot_box", + collapsible = TRUE, + closable = TRUE, + width = 12, + shiny::checkboxInput(ns("ShowBiocircosColoring"), "Show Biocircos coloring scheme"), + sidebar = shinydashboardPlus::boxSidebar( + id = "biocircos_box_sidebar", + width = 25, + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = 'H'), + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') + ), + BioCircos::BioCircosOutput(ns("biocircos"), height = "900px")%>% + shinycssloaders::withSpinner() + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "biocircos_data2", + div( + id = "id1", + shiny::uiOutput(ns("biocircos_coloring")) + ) + ) + ) + ) +} + +#' biocircos Server Functions +#' +#' @noRd +mod_biocircos_server <- function(id, vals){ + moduleServer( id, function(input, output, session){ + ns <- session$ns + + output$biocircos <- BioCircos::renderBioCircos({ + shiny::req(vals$data_upload_count >1) + + # Plot BioCircos + BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) + }) + + + output$biocircos_legend <- DT::renderDataTable({ + shiny::req(vals$data_upload_count >=1) + rownames = FALSE + new_data <- vals$coloring_datatable + color_vec <- new_data$x$data$Color + options(DT.options = list(pageLength = 50)) + new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) + + + }) + + output$biocircos_coloring <- shiny::renderUI({ + if (input$ShowBiocircosColoring == T){ + shinydashboardPlus::box( + title = "Biocircos coloring scheme", + closable = TRUE, + collapsible = TRUE, + DT::dataTableOutput(ns("biocircos_legend")) %>% + shinycssloaders::withSpinner() + ) + } + }) + + # Updating values in Datatable on edit + shiny::observeEvent(input$biocircos_legend_cell_edit, { + if (input$biocircos_legend_cell_edit$col[1] == 0){ + vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 1){ + vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 2){ + vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value + } + }) + }) +} + +## To be copied in the UI +# mod_biocircos_ui("biocircos_ui_1") + +## To be copied in the server +# mod_biocircos_server("biocircos_ui_1", vals = vals) diff --git a/dev/02_dev.R b/dev/02_dev.R index e62e80a..73a4aa6 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -47,7 +47,7 @@ golem::add_module( name = "group_table" ) # Name of the module golem::add_module( name = "download" ) # Name of the module golem::add_module( name = "deepbgc_plots" ) # Name of the module golem::add_module( name = "gecco_plots" ) # Name of the module - +golem::add_module( name = "biocircos" ) # Name of the module ## Add helper functions ---- From 20679f116a25715db3a796a91b81c908e2b229da Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 17 Feb 2022 17:59:38 +0100 Subject: [PATCH 110/199] Fixed sco_rre loading Former-commit-id: 9ba9b0d9f7a6952b9b09eccf9d7ff68d8630c3d9 --- R/app_server.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/app_server.R b/R/app_server.R index 8467730..1911151 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -600,7 +600,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$rre_sco, { # Read data rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") - data <- read.delim(sco_rre.txt) + data <- read.delim(rre_file) read_rre(data) }) From e08d95cfcd74a0b055e1327176dce39546702fcc Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 10:19:54 +0200 Subject: [PATCH 111/199] Fixed < and > symbols in sntismash.json processing Former-commit-id: 00c353eb2494ce6668f64a165f639638890fa958 --- DESCRIPTION | 2 +- R/app_server.R | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 4212ca1..67376eb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,7 +33,7 @@ Imports: tidyr Encoding: UTF-8 LazyData: true -RoxygenNote: 7.1.1 +RoxygenNote: 7.2.0 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues Suggests: diff --git a/R/app_server.R b/R/app_server.R index 1911151..8256880 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -556,14 +556,14 @@ app_server <- function( input, output, session ) { anti_file <- system.file("extdata", "sco_antismash.csv", package = "BGCViz") anti_data <- read.csv(anti_file) anti_data <- read_antismash(anti_data) - + usethis::use_data(vals$anti_data, anti_data, internal = TRUE) }) shiny::observeEvent(input$gecco_sco,{ gecco_file <- system.file("extdata", "sco_gecco.tsv", package = "BGCViz") gecco_data <- read.delim(gecco_file) read_gecco(gecco_data) - + usethis::use_data(vals$gecco_data, gecco_data, internal = TRUE) }) shiny::observeEvent(input$prism_sco,{ @@ -571,14 +571,14 @@ app_server <- function( input, output, session ) { prism_file <- system.file("extdata", "sco_prism.json", package = "BGCViz") data <- rjson::fromJSON(file = prism_file) read_prism(data) - + usethis::use_data(vals$prism_data, prism_data, internal = TRUE) }) shiny::observeEvent(input$sempi_sco,{ sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") sempi_data <- read.csv(sempi_file) read_sempi(sempi_data) - + usethis::use_data(vals$sempi_data, sempi_data, internal = TRUE) }) shiny::observeEvent(input$arts_sco, { @@ -589,12 +589,14 @@ app_server <- function( input, output, session ) { knownhits_file <- system.file("extdata", "sco_knownhits.tsv", package = "BGCViz") data <- read.delim(knownhits_file) read_arts_knownhits(data) + usethis::use_data(vals$arts_data, arts_data, internal = TRUE) }) shiny::observeEvent(input$deep_sco, { deep_file <- system.file("extdata", "sco_deep.tsv", package = "BGCViz") data <- read.delim(deep_file) read_deep(data) + usethis::use_data(vals$deep_data, deep_data, internal = TRUE) }) shiny::observeEvent(input$rre_sco, { @@ -602,7 +604,7 @@ app_server <- function( input, output, session ) { rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") data <- read.delim(rre_file) read_rre(data) - + usethis::use_data(vals$rre_data, rre_data, internal = TRUE) }) ##---------------------------------------------------------------- @@ -647,6 +649,8 @@ app_server <- function( input, output, session ) { location <- gsub("\\[", "", location) location <- gsub("\\]", "", location) + location <- gsub("<", "", location) + location <- gsub(">", "", location) location <- data.frame(location) colnames(location) <- "split" anti_data <- location %>% From c34479508689c7e3161a4c421ebf95b98a39fcee Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 10:50:16 +0200 Subject: [PATCH 112/199] Change input to zip archieve in sempi_to_csv function Former-commit-id: 6d0695787c1a6a31f2aa029b254c0cf3a07c51c5 --- R/fct_format_transformation.R | 33 ++++++++++++++++++--------------- man/sempi_to_csv.Rd | 7 ++++--- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 3f4d11d..9db0bce 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -1,26 +1,29 @@ #' sempi_to_df #' -#' @description Function, which transforms Track.db file into dataframe, which could be then written to csv +#' @description Function, which transforms Track.db file into dataframe, which could be then written to csv. +#' Download project folder from SEMPI and supply as `project_archive` argument to a function #' -#' @param file - path to a json file, +#' @param project_archive - path to project.zip file, downloaded from SEMPI #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location #' #' @export -sempi_to_csv <- function(file, write_to = getwd()){ -conn <- RSQLite::dbConnect(RSQLite::SQLite(), file) - -data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") -RSQLite::dbDisconnect(conn) - -data <- data %>% - dplyr::filter(trackid==6) - -types <- sapply(data$name, function(x){ - tmp <- stringr::str_trim(x) - tmp <- gsub(", ", "", tmp) - gsub(" ", "__", tmp) +sempi_to_csv <- function(project_archive, write_to = getwd()){ + unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) + fl <- paste0(stringr::str_extract(write_to, ".*/"),"/SEMPI_TracksDB/Tracks.db") + conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) + + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + RSQLite::dbDisconnect(conn) + unlink(paste0(stringr::str_extract(write_to, ".*/"),"/SEMPI_TracksDB"), recursive = T) + data <- data %>% + dplyr::filter(trackid==6) + + types <- sapply(data$name, function(x){ + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) }) sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) diff --git a/man/sempi_to_csv.Rd b/man/sempi_to_csv.Rd index e157844..688cb9a 100644 --- a/man/sempi_to_csv.Rd +++ b/man/sempi_to_csv.Rd @@ -4,10 +4,10 @@ \alias{sempi_to_csv} \title{sempi_to_df} \usage{ -sempi_to_csv(file, write_to = getwd()) +sempi_to_csv(project_archive, write_to = getwd()) } \arguments{ -\item{file}{- path to a json file,} +\item{project_archive}{- path to project.zip file, downloaded from SEMPI} \item{write_to}{- path where to write generated csv file} } @@ -15,5 +15,6 @@ sempi_to_csv(file, write_to = getwd()) csv file in specified location } \description{ -Function, which transforms Track.db file into dataframe, which could be then written to csv +Function, which transforms Track.db file into dataframe, which could be then written to csv. +Download project folder from SEMPI and supply as `project_archive` argument to a function } From 9e48bda37c4f4bb7b8910e5b0911206eb318766a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 13:00:46 +0200 Subject: [PATCH 113/199] Change input for ARTS data to one zip archive or csv file Former-commit-id: 842519111dd2fe1dad5e23b143ceea74238dc6c4 --- NAMESPACE | 1 + R/app_server.R | 257 ++- R/app_ui.R | 6 +- R/fct_format_transformation.R | 96 +- app.R | 2804 --------------------------------- man/antismash_to_csv.Rd | 2 +- man/arts_to_csv.Rd | 19 + man/prism_to_csv.Rd | 2 +- man/sempi_to_csv.Rd | 2 +- 9 files changed, 221 insertions(+), 2968 deletions(-) delete mode 100755 app.R create mode 100644 man/arts_to_csv.Rd diff --git a/NAMESPACE b/NAMESPACE index 7f09dd0..e2d4eee 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,7 @@ # Generated by roxygen2: do not edit by hand export(antismash_to_csv) +export(arts_to_csv) export(prism_to_csv) export(run_app) export(sempi_to_csv) diff --git a/R/app_server.R b/R/app_server.R index 8256880..f275f4a 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -20,8 +20,7 @@ app_server <- function( input, output, session ) { ) }) inputData <- shiny::reactive({ - list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, - vals$known_data_input,vals$dup_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input + list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input ) }) dynamicInput <- shiny::reactive({ @@ -324,140 +323,106 @@ app_server <- function( input, output, session ) { selected = "SEMPI") } } - read_arts_knownhits <- function(data){ - locations <- sapply(data$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - #write.csv(vals$known_data, "knownhits_data.csv", row.names = F) - if ((vals$dup_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$arts_data_input <- T - vals$data_upload_count <- vals$data_upload_count +1 - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "ARTS" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - - } - read_arts_dupdata <- function(data){ - get_location_duptable <- function(x, y){ - test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) + read_arts_archive <- function(archive, zip = T){ + if (zip == T){ + unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) + known_hits <- read.delim("./ARTS_tables/knownhits.tsv") + dupl_table <- read.delim("./ARTS_tables/duptable.tsv") + unlink("./ARTS_tables", recursive = T) + locations <- sapply(known_hits$Sequence.description, function(x){ + tail(stringr::str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][2] + }) + # Parse known_hits data + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- known_hits$Description + known_table$Model <- known_hits$X.Model + known_table$Evalue <- known_hits$evalue + known_table$Bitscore <- known_hits$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + # Parse duplication data + get_location_duptable <- function(x, y){ + test <- stringr::str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + } - return(res) - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - #write.csv(dup_table, "duptable_data.csv", row.names = F) - if ((vals$known_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data + dup_table <- data.frame() + for (i in seq(1:dim(dupl_table)[1])){ + lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- dupl_table$X.Core_gene[i] + fin_data$Description <- dupl_table$Description[i] + fin_data$Count <- dupl_table$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" arts_data <- rbind(dup_table, known_table) arts_data <- arts_data %>% dplyr::arrange(Start) arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "ARTS" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } + } else { + vals$arts_data <- read.csv(archive) + } + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() + vals$data_upload_count <- vals$data_upload_count +1 + vals$arts_data_input <- T + dup_table_id <- vals$arts_data %>% + dplyr::filter(Core != "Not_core") + shiny::updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" ) + if (vals$data_upload_count == 1){ + shiny::updateSelectInput(session, "ref", + selected = "ARTS" ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "ARTS" ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS") + } } read_deep <- function(data){ res_validation <- validate_deep_input(data) @@ -555,15 +520,13 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$anti_sco,{ anti_file <- system.file("extdata", "sco_antismash.csv", package = "BGCViz") anti_data <- read.csv(anti_file) - anti_data <- read_antismash(anti_data) - usethis::use_data(vals$anti_data, anti_data, internal = TRUE) + read_antismash(anti_data) }) shiny::observeEvent(input$gecco_sco,{ gecco_file <- system.file("extdata", "sco_gecco.tsv", package = "BGCViz") gecco_data <- read.delim(gecco_file) read_gecco(gecco_data) - usethis::use_data(vals$gecco_data, gecco_data, internal = TRUE) }) shiny::observeEvent(input$prism_sco,{ @@ -571,32 +534,25 @@ app_server <- function( input, output, session ) { prism_file <- system.file("extdata", "sco_prism.json", package = "BGCViz") data <- rjson::fromJSON(file = prism_file) read_prism(data) - usethis::use_data(vals$prism_data, prism_data, internal = TRUE) }) shiny::observeEvent(input$sempi_sco,{ sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") sempi_data <- read.csv(sempi_file) read_sempi(sempi_data) - usethis::use_data(vals$sempi_data, sempi_data, internal = TRUE) }) shiny::observeEvent(input$arts_sco, { - dup_data_file <- system.file("extdata", "sco_duptable.tsv", package = "BGCViz") - data <- read.delim(dup_data_file) + arts_file <- system.file("extdata", "sco_arts.csv", package = "BGCViz") + arts_data <- read.csv(arts_file) + read_arts_archive(arts_file, zip=F) disable_event_logic() - read_arts_dupdata(data) - knownhits_file <- system.file("extdata", "sco_knownhits.tsv", package = "BGCViz") - data <- read.delim(knownhits_file) - read_arts_knownhits(data) - usethis::use_data(vals$arts_data, arts_data, internal = TRUE) }) shiny::observeEvent(input$deep_sco, { deep_file <- system.file("extdata", "sco_deep.tsv", package = "BGCViz") data <- read.delim(deep_file) read_deep(data) - usethis::use_data(vals$deep_data, deep_data, internal = TRUE) }) shiny::observeEvent(input$rre_sco, { @@ -604,7 +560,6 @@ app_server <- function( input, output, session ) { rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") data <- read.delim(rre_file) read_rre(data) - usethis::use_data(vals$rre_data, rre_data, internal = TRUE) }) ##---------------------------------------------------------------- @@ -686,21 +641,17 @@ app_server <- function( input, output, session ) { # These are for ARTS data processing # input$known_data and inoput$dup_data - shiny::observeEvent(input$known_data, { - disable_event_logic() - - data <- read.delim(input$known_data$datapath) - read_arts_knownhits(data) - }) - shiny::observeEvent(input$dup_data, { + shiny::observeEvent(input$arts_data, { disable_event_logic() - - data <- read.delim(input$dup_data$datapath) - - read_arts_dupdata(data) + if (input$arts_data$type=="text/csv"){ + read_arts_archive(input$arts_data$datapath, zip = F) + } else { + read_arts_archive(input$arts_data$datapath, zip = T) + } }) + shiny::observeEvent(input$prism_data,{ # Read data diff --git a/R/app_ui.R b/R/app_ui.R index 526a9b3..f6061cc 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -172,10 +172,8 @@ app_ui <- function(request) { id = "upload_arts_box", collapsible = TRUE, closable = TRUE, - shiny::fileInput("known_data", - "Upload ARTS knownhits data", accept = ".csv"), - shiny::fileInput("dup_data", - "Upload ARTS duptable data", accept = ".csv") + shiny::fileInput("arts_data", + "Upload ARTS data", accept = list(".csv", ".zip")) ) ), div( diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 9db0bce..e4b33c9 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -1,4 +1,4 @@ -#' sempi_to_df +#' sempi_to_csv #' #' @description Function, which transforms Track.db file into dataframe, which could be then written to csv. #' Download project folder from SEMPI and supply as `project_archive` argument to a function @@ -35,7 +35,7 @@ sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) write.csv(sempi_data, paste0(write_to,"/sempi.csv"), row.names = FALSE) } -#' prism_to_df +#' prism_to_csv #' #' @description Function, that transforms prism json object into dataframe, which could be written to the csv file #' @@ -78,7 +78,7 @@ write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) } -#' antismash_to_df +#' antismash_to_csv #' #' @description Function, that returns dataframe, out of supplied antismash json file #' @@ -133,4 +133,92 @@ antismash_to_csv <- function(file, write_to = getwd()){ anti_data$Start <- as.numeric(anti_data$Start) anti_data$Stop <- as.numeric(anti_data$Stop) write.csv(anti_data, paste0(write_to,"/antismash.csv"), row.names = FALSE) -} \ No newline at end of file +} + +#' arts_to_csv +#' +#' @description Function, which extracts tables from arts result zip archive and transforms them into BGCViz input +#' +#' @param project_archive - path to zip file, downloaded from ARTS +#' @param write_to - path where to write generated csv file +#' +#' @return csv file in specified location +#' +#' @export +arts_to_csv <- function(project_archive, write_to = getwd()){ + unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) + known_hits <- read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/knownhits.tsv")) + dupl_table <- read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/duptable.tsv")) + locations <- sapply(known_hits$Sequence.description, function(x){ + tail(stringr::str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][2] + }) + # Parse known_hits data + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- known_hits$Description + known_table$Model <- known_hits$X.Model + known_table$Evalue <- known_hits$evalue + known_table$Bitscore <- known_hits$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + # Parse duplication data + get_location_duptable <- function(x, y){ + test <- stringr::str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(dupl_table)[1])){ + lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- dupl_table$X.Core_gene[i] + fin_data$Description <- dupl_table$Description[i] + fin_data$Count <- dupl_table$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + write.csv(arts_data, paste0(write_to,"/arts.csv"), row.names = FALSE) +} diff --git a/app.R b/app.R deleted file mode 100755 index 3300a1f..0000000 --- a/app.R +++ /dev/null @@ -1,2804 +0,0 @@ -# This is a Shiny web application. You can run the application by clicking -# the 'Run App' button above. -# -# Author: Pavlo Hrab -# Made as part of Cambridge bioinformatics hackaton -# -# This app is using bgc coordinates from DeepBGC, PRISM, ANTISMASH, RRE-Finder, -# GECCO, ARTS, SEMPI to visualized interception of those different annotations -# in one genome -# -library(magrittr) -#options(repos = BiocManager::repositories()) -options(spinner.type=6) -# Define UI -ui <- shinydashboardPlus::dashboardPage( - shinydashboardPlus::dashboardHeader(title = "BGCViz"), - shinydashboardPlus::dashboardSidebar( - width = 350, - shinydashboard::sidebarMenu( - id="menu_items", - style = "white-space: normal;", - shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), - shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), - shinydashboard::menuItemOutput("deep_sidemenu_out"), - shinydashboard::menuItemOutput("gecco_sidemenu_out"), - shinydashboard::menuItemOutput("anno_sidemenu_out"), - shinydashboard::menuItemOutput("biocircos_sidemenu_out"), - shinydashboard::menuItemOutput("summarize_sidemenu_out"), - shinydashboard::menuItem(tabName = "restore_boxes", - actionButton("restore_box", "Restore all boxes", class = "bg-success")) - ) - ), - shinydashboard::dashboardBody( - tags$head( - tags$style(HTML(".main-sidebar { font-size: 15px; }")) #change the font size to 20 - ), - shinyjs::useShinyjs(), - shinydisconnect::disconnectMessage( - text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", - refresh = "Refresh", - background = "#FFFFFF", - colour = "#444444", - refreshColour = "#337AB7", - overlayColour = "#000000", - overlayOpacity = 0.6, - width = 450, - top = 50, - size = 22, - css = "" - ), - shinydashboard::tabItems( - shinydashboard::tabItem( tabName = "deep_sidemenu", - shiny::fluidRow( - tags$div( - id = "deep_data1", - div(id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison", - id = "deep_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput("deep_barplot", height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))), - div(id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC rate", - id = "deep_rate_box", - collapsible = TRUE, - height = "100%", - plotly::plotlyOutput("deep_rate", height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))))), - shiny::fluidRow( - tags$div( id = "deep_data2", - div(id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison controls", - id = "deep_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput("ref_comparison", "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), - # Score to use for thresholds - shiny::selectInput("score_type", "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - shiny::sliderInput("plot_step", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ),options = list(handles="w,e"))) - )), - sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), - sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) - ), - shinydashboard::tabItem( - tabName = "gecco_sidemenu", - shiny::fluidRow( - tags$div( - id = "gecco_data1", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison", - id = "gecco_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput("gecco_barplot", height = "500px") %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), - div( - id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO rate", - id = "gecco_rate_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput("gecco_rate", height = "500px",)%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), - ) - ), - shiny::fluidRow( - tags$div( - id = "gecco_data2", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison controls", - id = "gecco_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput("ref_comparison_gecco", "Choose data for comparison with Gecco", choices = c(""),selected = ''), - shiny::selectInput("score_type_gecco", "Choose score type to set threshold", choices = c( - "Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type"), - selected = "avg_p"), - shiny::sliderInput("plot_step_gecco", "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput("plot_start_gecco", "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ), options = list(handles="w,e")) - ) - ) - ), - sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), - sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) - ), - shinydashboard::tabItem( - tabName = "anno_sidemenu", - shiny::fluidRow( - tags$div( - id="anno_data1", - shiny::column( - width = 12, - div( - id="anno_div_1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotations reference", - id = "annotation_reference_box", - height = "100%", - width = NULL, - collapsible = TRUE, - closable = TRUE, - plotly::plotlyOutput("deep_reference_2") %>% - shinycssloaders::withSpinner() - ), options = list(handles="w,e")) - ), - div( - id="id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotation comparison to the reference", - id = "annotation_reference_comparison_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - height = "100%", - shiny::selectInput("ref", "Choose reference data", choices = c(""), - selected = ""), - plotly::plotlyOutput("deep_reference") %>% - shinycssloaders::withSpinner() - ), options = list(handles="w,e")), - ) - ) - )), - sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), - sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) - ), - shinydashboard::tabItem( - tabName = "biocircos_sidemenu", - shiny::fluidRow( - tags$div( - id = "biocircos_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Biocircos plot", - id = "biocircos_plot_box", - collapsible = TRUE, - closable = TRUE, - width = 12, - shiny::checkboxInput("ShowBiocircosColoring", "Show Biocircos coloring scheme"), - sidebar = shinydashboardPlus::boxSidebar( - id = "biocircos_box_sidebar", - width = 25, - shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = 'H'), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') - ), - BioCircos::BioCircosOutput("biocircos", height = "900px")%>% - shinycssloaders::withSpinner() - ) - ) - ) - ), - shiny::fluidRow( - tags$div( - id = "biocircos_data2", - div( - id = "id1", - shiny::uiOutput("biocircos_coloring") - ) - ) - ), - sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), - sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) - ), - shinydashboard::tabItem( - tabName = "summarize_sidemenu", - shiny::fluidRow( - tags$div( - id="summarize_data1", - div( - id="id1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Ranking barplot", - id = "ranking_barplot_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput("barplot_rank", height = "600px")%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ), - div( - id="id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Group table", - id = "group_table_box", - collapsible = TRUE, - closable = TRUE, - style='overflow-x: scroll;height:700px;overflow-y: scroll;', - height = "100%", - shiny::checkboxInput("count_all", "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::selectInput("group_by", "Group data by", choices = c(""), selected = ''), - shiny::tableOutput("group_table")%>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e")) - ) - ) - ), - sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) - ), - shinydashboard::tabItem( - tabName = "uploaddata_sidemenu", - shiny::fluidRow( - tags$div( - id="upload_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Upload Antismash data", - id = "upload_anti_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("anti_data", - "Upload Antismash data", accept = list(".csv", ".json")) - ) - ), - div( - id = "id2", - shinydashboardPlus::box( - title = "Upload PRISM data", - id = "upload_prism_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("prism_data", - "Upload PRISM data", accept = list(".csv", ".json")) - ) - ), - div( - id = "id3", - shinydashboardPlus::box( - title = "Upload SEMPI 2.0 data", - id = "upload_sempi_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data", accept = ".csv") - ) - ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Upload DeepBGC data", - id = "upload_deep_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("deep_data", - "Upload DeepBGC data", accept = ".tsv") - ) - ) - ) - ), - shiny::fluidRow( - tags$div( - id="upload_data2", - div( - id = "id1", - shinydashboardPlus::box( - title = "Upload Gecco data", - id = "upload_gecco_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("gecco_data", - "Upload Gecco data", accept = ".tsv") - ) - ), - div( - id = "id2", - shinydashboardPlus::box( - title = "Upload RRE-Finder data", - id = "upload_rre_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("rre_data", - "Upload RRE-Finder data") - ) - ), - div( - id = "id3", - shinydashboardPlus::box( - title = "Upload ARTS data", - id = "upload_arts_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("known_data", - "Upload ARTS knownhits data", accept = ".csv"), - shiny::fileInput("dup_data", - "Upload ARTS duptable data", accept = ".csv") - ) - ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Use Example data", - id = "use_example_data_box", - collapsible = TRUE, - closable = TRUE, - shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), - shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), - shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) - ) - ) - ) - ), - sortable::sortable_js("upload_data1", options = sortable::sortable_options(swap = TRUE, group = "upload_data")), - sortable::sortable_js("upload_data2", options = sortable::sortable_options(swap = TRUE, group = "upload_data")) - ), - shinydashboard::tabItem( - tabName = "options_sidemenu", - shiny::fluidRow( - shiny::column( - width = 6, - tags$div( - id="options_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Rename", - id = "rename_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - shiny::fileInput("rename_data", - "Upload renaming and coloring scheme", accept = ".csv"), - shiny::actionButton("rename", "Rename"), - shiny::actionButton("reset_name", "Reset") - ) - ), - div( - id = "id2", - shiny::uiOutput("deep_filter_box") - ))), - shiny::column( - width = 6, - tags$div( - id="options_data2", - div( - id = "id3", - shiny::uiOutput("gecco_filter_box") - ), - div( - id = "id5", - shinydashboardPlus::box( - title = "Improve global visualization", - id = "improve_visualization_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), - shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") - ) - ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Prism supplement + ARTS options", - id = "prism_supplement_arts_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All") - ) - ), - div( - id = "id6", - shinydashboardPlus::box( - title = "Download data", - id = "download_data_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::downloadButton("download","Download currently used datasets (as for Biocircos plot)" ) - ) - ) - ) - ) - ), - sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE, group = "options_data")), - sortable::sortable_js("options_data2", options = sortable::sortable_options(swap = TRUE, group = "options_data")) - ) - ) - ) -) -# Define server logic -server <- function(input, output, session) { - ##--------------------------------------------------------------- - ## Some lists of reactive values to listen later - - ##--------------------------------------------------------------- - check_to_rename <- shiny::reactive({list(input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco,input$anti_sco, input$prism_sco)}) - biocircos_listen <- shiny::reactive({ - list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, - input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, - input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, - vals$coloring_datatable - - ) - }) - inputData <- shiny::reactive({ - list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, - vals$known_data_input,vals$dup_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input - ) - }) - dynamicInput <- shiny::reactive({ - list( input$dup_choice, vals$need_filter, input$prism_supp - ) - }) - deep_reference <- shiny::reactive({ - list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data) - }) - - to_debounce <- shiny::reactive({ - list( vals$cluster_type, vals$gene_filter,vals$biodomain_filter, vals$score_c, vals$score_d, - vals$score_a, vals$score_average_gecco,vals$score_cluster_gecco, vals$domains_filter_gecco, - vals$prot_filter_gecco - ) - }) %>% shiny::debounce(500) - - # Some dataframes that are used through the app + some vectors of untercepted values - vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, - biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, - anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F - ) - - vals$computed <- list( - anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F - ) - # Making coloring datatable - vals$rename_data <- read.csv("rename.csv") - rename_data <- read.csv("rename.csv") - coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] - colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) - # Validation - source("src/validate_functions.R") - # Variables, that holds data uploads boolean (so if data is present or not) - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - # Universal beginings for variables, used in the app for different data - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) - # The Namings, meaning how to label the data on the plots - soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE-Finder') - # Dataframes undes vals$list, that stored the data - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") - # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") - # Used for deep reference 2 plot - soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r") - - vals$score_a <- 50 - vals$score_d <- 50 - vals$score_c <- 50 - vals$domains_filter <- 5 - vals$biodomain_filter <- 1 - vals$gene_filter <- 1 - vals$cluster_type <- 50 - vals$score_average_gecco <- 50 - vals$score_cluster_gecco <- 50 - vals$domains_filter_gecco <- 1 - vals$prot_filter_gecco <- 1 - vals$gecco_sidebar <- FALSE - vals$deep_sidebar <- FALSE - vals$deep_global <- FALSE - vals$gecco_global <- FALSE - ##---------------------------------------------------------------- - ## Helper functions - - ##---------------------------------------------------------------- - # Need to get them to a tidyr::separate file later - # TODO - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add remove them - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - file.remove(file_names) - } - } - options(shiny.maxRequestSize=100*1024^2) - # Small function to make integers zeros - source("src/helper_functions.R") - - disable_event_logic <- function(){ - vals$can_plot_deep_ref = F - vals$can_plot_biocircos = F - vals$can_plot_barplot_rank = F - vals$can_plot_group_table = F - } - enable_event_logic <- function(){ - vals$can_plot_deep_ref = T - vals$can_plot_biocircos = T - vals$can_plot_barplot_rank = T - vals$can_plot_group_table = T - } - - ########################################################################### - ########################################################################### - ### ### - ### DATA INPUT PROCESSING ### - ### ### - ########################################################################### - ########################################################################### - # TODO Make tidyr::separate functions for different data types. - # For now you just have duplicated the code. Specifically for ARTS! - # Reading functions: - - read_antismash <- function(data){ - anti_data <- data - res_validation <- validate_basic_input(anti_data) - if (!(res_validation[[1]])){ - anti_data <- NULL - return(NULL) - } else{ - anti_data <- res_validation[[2]] - } - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - # Save file - write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") - vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "Antismash" ) - shiny::updateSelectInput(session, "group_by", - selected = "Antismash" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "Antismash") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "Antismash") - - } - return(anti_data) - } - read_gecco <- function(data){ - # Add chromosome column - gecco_data <- data - - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) - # Read data - gecco_data <- gecco_data %>% - dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" - vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) - # Save file - write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) - vals$gecco_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") - vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "GECCO" ) - shiny::updateSelectInput(session, "group_by", - selected = "GECCO") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") - - } - } - read_prism <- function(data, json=T){ - if (json==T){ - processed_data <- process_prism_json_suppl(data) - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - prism_data <- processed_data[[1]] - vals$prism_supp_data_input = T - vals$prism_supp <- processed_data[[2]] - vals$prism_supp_data <- processed_data[[2]] - vals$prism_json = T - } else { - prism_data <- data - } - res_validation <- validate_basic_input(prism_data) - if (!(res_validation[[1]])){ - prism_data <- NULL - return(NULL) - } else{ - prism_data <- res_validation[[2]] - } - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - update_ui_with_data() - prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism_data$Cluster - # Save file - write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "PRISM" ) - shiny::updateSelectInput(session, "group_by", - selected = "PRISM" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "PRISM") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "PRISM") - } - } - read_sempi <- function(data){ - sempi_data <- data - res_validation <- validate_basic_input(sempi_data) - if (!(res_validation[[1]])){ - sempi_data <- NULL - return(NULL) - } else{ - sempi_data <- res_validation[[2]] - } - sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") - vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "SEMPI" ) - shiny::updateSelectInput(session, "group_by", - selected = "SEMPI" ) - shiny::updateSelectInput(session, "ref_comparison", - selected = "SEMPI") - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") - shiny::updateSelectInput(session, "ref_comparison_gecco", - selected = "SEMPI") - } - } - read_arts_knownhits <- function(data){ - locations <- sapply(data$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][2] - }) - - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- data$Description - known_table$Model <- data$X.Model - known_table$Evalue <- data$evalue - known_table$Bitscore <- data$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - vals$known_data <- known_table - vals$known_data_input <- TRUE - write.csv(vals$known_data, "knownhits_data.csv", row.names = F) - if ((vals$dup_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$arts_data_input <- T - vals$data_upload_count <- vals$data_upload_count +1 - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - vals$upl_arts = T - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", - selected = "ARTS" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - - } - read_arts_dupdata <- function(data){ - get_location_duptable <- function(x, y){ - test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(data)[1])){ - lst <- get_location_duptable(data$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- data$X.Core_gene[i] - fin_data$Description <- data$Description[i] - fin_data$Count <- data$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - vals$dup_data <- dup_table - vals$dup_data_input = T - write.csv(dup_table, "duptable_data.csv", row.names = F) - if ((vals$known_data_input == T)){ - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - dup_table <- vals$dup_data - known_table <- vals$known_data - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data - vals$data_upload_count <- vals$data_upload_count +1 - vals$arts_data_input <- T - dup_table_id <- arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) - shiny::updateSelectInput(session, "group_by", - selected = "ARTS" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") - } - } - } - read_deep <- function(data){ - res_validation <- validate_deep_input(data) - if (!(res_validation[[1]])){ - deep_data <- NULL - return(NULL) - } else{ - deep_data <- res_validation[[2]] - } - drop_cols <- c("nrp","polyketide") - # Read data - deep_data <- deep_data %>% - dplyr::mutate(pks=polyketide, nrps = nrp ) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - # Add chromosome info column - vals$deep_data <- deep_data - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Start <- vals$deep_data$nucl_start - vals$deep_data$Stop <- vals$deep_data$nucl_end - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) - vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") - vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "DeepBGC" ) - shiny::updateSelectInput(session, "group_by", - selected = "DeepBGC" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - - } - } - read_rre <- function(data){ - res_validation <- validate_rre_input(data) - if (!(res_validation[[1]])){ - data <- NULL - return(NULL) - } else{ - data <- res_validation[[2]] - } - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- data %>% - tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - vals$rre_data['Type2'] <- 'ripp' - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - vals$rre_data <- data.frame(vals$rre_data) - write.csv(vals$rre_data, "rre_data.csv", row.names = F) - - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") - vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1){ - shiny::updateSelectInput(session, "ref", - selected = "RRE-Finder" ) - shiny::updateSelectInput(session, "group_by", - selected = "RRE-Finder" ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "RRE-Finder") - - } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T - } else { - vals$rre_more = F - } - } - - #---------------------------------------------------------------- - ## Loading and processing of example data - - ##---------------------------------------------------------------- - shiny::observeEvent(input$anti_sco,{ - - anti_data <- read.csv("example_data/sco_antismash.csv") - anti_data <- read_antismash(anti_data) - - }) - - shiny::observeEvent(input$gecco_sco,{ - gecco_data <- read.delim("example_data/sco_gecco.tsv") - read_gecco(gecco_data) - - }) - - shiny::observeEvent(input$prism_sco,{ - # Read data - - data <- rjson::fromJSON(file = "example_data/sco_prism.json") - read_prism(data) - - }) - - shiny::observeEvent(input$sempi_sco,{ - sempi_data <- read.csv("example_data/sco_sempi.csv") - read_sempi(sempi_data) - - }) - - shiny::observeEvent(input$arts_sco, { - - data <- read.delim("example_data/sco_duptable.tsv") - disable_event_logic() - read_arts_dupdata(data) - - data <- read.delim("example_data/sco_knownhits.tsv") - read_arts_knownhits(data) - }) - - shiny::observeEvent(input$deep_sco, { - - data <- read.delim("example_data/sco_deep.tsv") - read_deep(data) - }) - - shiny::observeEvent(input$rre_sco, { - - # Read data - data <- read.delim("example_data/sco_rre.txt") - read_rre(data) - - }) - - ##---------------------------------------------------------------- - ## Loading and processing user data - - ##---------------------------------------------------------------- - shiny::observeEvent(input$anti_data,{ - - disable_event_logic() - # Read data - if (input$anti_data$type=="text/csv"){ - anti_data <- read.csv(input$anti_data$datapath) - }else{ - data <- rjson::fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - tolower(x$qualifiers$product) - } - }) - }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } - }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ - unlist(x$location) - } - }) - ) - }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - tidyr::separate(split, c("Start", "Stop")) %>% - dplyr::transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - - } - - read_antismash(anti_data) - - }) - - shiny::observeEvent(input$sempi_data,{ - - - sempi_data <- read.csv(input$sempi_data$datapath) - read_sempi(sempi_data) - - }) - - shiny::observeEvent(input$gecco_data,{ - - gecco_data <- read.delim(input$gecco_data$datapath) - read_gecco(gecco_data) - - }) - - # These are for ARTS data processing - # input$known_data and inoput$dup_data - shiny::observeEvent(input$known_data, { - disable_event_logic() - - data <- read.delim(input$known_data$datapath) - read_arts_knownhits(data) - }) - - shiny::observeEvent(input$dup_data, { - disable_event_logic() - - data <- read.delim(input$dup_data$datapath) - - read_arts_dupdata(data) - }) - - shiny::observeEvent(input$prism_data,{ - - # Read data - if (input$prism_data$type == "text/csv"){ - prism_data <- read.csv(input$prism_data$datapath) - read_prism(prism_data, json=F) - } else{ - data <- rjson::fromJSON(file = input$prism_data$datapath) - read_prism(data) - } - - }) - - shiny::observeEvent(input$deep_data, { - - data <- read.delim(input$deep_data$datapath) - read_deep(data) - }) - - shiny::observeEvent(input$rre_data, { - - # Read data - rre_data <- read.delim(input$rre_data$datapath) - read_rre(rre_data) - }) - - ############################################################################ - ############################################################################ - ### ### - ### INTERFACE LOGIC: WHAT TO SHOW AND WHEN ### - ### ### - ############################################################################ - ############################################################################ - # Update choices - update_ui_with_data <- function(){ - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) - shiny::updateSelectInput(session, "group_by", - choices = vals$choices$group_by ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) - shiny::updateSelectInput(session, "ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) - shiny::updateSelectInput(session, "ref_comparison", - choices = vals$choices$ref_comparison ) - } - # Observe input of chromosome length - shiny::observeEvent(input$chr_len,{ - - vals$chr_len <- input$chr_len - }) - ##---------------------------------------------------------------- - ## Simple options showing/hiding logic for every data input - - ##---------------------------------------------------------------- - # SHOW rre_width parameter if data is available - # and hide_viz == F - shiny::observeEvent(vals$rre_data_input, { - - if (vals$rre_data_input == T){ - shinyjs::showElement(selector = "#rre_width") - } else{ - shinyjs::hideElement(selector = "#rre_width") - } - }) - # Show anti_hybrid option if data is available - # And checkbox is unchecked - shiny::observeEvent(vals$anti_data_input, { - - if (vals$anti_data_input == T){ - shinyjs::showElement(selector = "#anti_hybrid") - } else{ - shinyjs::hideElement(selector = "#anti_hybrid") - } - }) - # Show prism options if data is available - # If hide anti is F (checkbox), then show them - # Only if prism_json file, then show Prism-Supp - # And if hide_viz == F, and prism_json, then - # show width - shiny::observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T){ - shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp") - } - if (vals$prism_json == T){ - shinyjs::showElement(selector = "#prism_supp_data_input_width") - } - } else{ - shinyjs::hideElement(selector = "#prism_header") - shinyjs::hideElement(selector = "#prism_hybrid") - shinyjs::hideElement(selector = "#prism_supp") - shinyjs::hideElement(selector = "#prism_supp_data_input_width") - } - }) - # Show SEMPI elements on data upload - shiny::observeEvent(vals$sempi_data_input, { - - if (vals$sempi_data_input == T){ - shinyjs::showElement(selector = "#sempi_hybrid") - shinyjs::showElement(selector = "#sempi_width") - } else{ - shinyjs::hideElement(selector = "#sempi_hybrid") - shinyjs::hideElement(selector = "#sempi_width") - } - }) - # Ahow ARTS data options, if data is available - shiny::observeEvent(vals$arts_data_input,{ - - if (vals$arts_data_input == T){ - shinyjs::showElement(selector = "#dup_choice") - shinyjs::showElement(selector = "#arts_width") - } else { - shinyjs::hideElement(selector = "#dup_choice") - shinyjs::hideElement(selector = "#arts_width") - } - }) - - shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)){ - shinyjs::showElement(selector = "#improve_visualization_box") - } else { - shinyjs::hideElement(selector = "#improve_visualization_box") - } - }) - shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$prism_supp_data_input == T) ){ - shinyjs::showElement(selector = "#prism_supplement_arts_box") - } else { - shinyjs::hideElement(selector = "#prism_supplement_arts_box") - } - }) - ##--------------------------------------------------------------- - ## Data processing options show/hide - - ##--------------------------------------------------------------- - # Count data uploads, to show tabs and corresponding - # options - - output$deep_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), - shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", tabName = "deep_filter", icon = shiny::icon("filter"), - shiny::uiOutput("deep_filter_UI_sidemenu") - ) - ) - - } - } - }) - output$gecco_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco", icon = icon("fas fa-dragon"), - shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", tabName = "gecco_filter", icon = shiny::icon("filter"), - shiny::uiOutput("gecco_filter_UI_sidemenu") - )) - } - } - - }) - output$anno_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=1){ - shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) - } - }) - output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) - } - }) - output$summarize_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) - } - }) - output$biocircos_coloring <- shiny::renderUI({ - if (input$ShowBiocircosColoring == T){ - shinydashboardPlus::box( - title = "Biocircos coloring scheme", - closable = TRUE, - collapsible = TRUE, - DT::dataTableOutput("biocircos_legend") %>% - shinycssloaders::withSpinner() - ) - } - }) - output$deep_filter_box <- shiny::renderUI({ - if (vals$deep_data_input == T){ - vals$deep_global <- T - shinydashboardPlus::box( - title = "DeepBGC filtering", - id = "deep_filtering_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - ) - } - }) - output$gecco_filter_box <- shiny::renderUI({ - if (vals$gecco_data_input == T){ - vals$gecco_global <- T - shinydashboardPlus::box( - title = "GECCO filtering", - id = "gecco_filtering_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - ) - } - }) - - output$deep_filter_UI_sidemenu <- shiny::renderUI({ - vals$deep_sidebar <- T - shiny::tagList( - shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type_sidemenu","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - ) - }) - output$gecco_filter_UI_sidemenu <- shiny::renderUI({ - vals$gecco_sidebar <- T - shiny::tagList( - shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - ) - }) - - update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check){ - if( (as.numeric(listening_value) != comparing_values) && (rendering_check == F)){ - shiny::updateSliderInput(session, updating_value, NULL, listening_value) - return(list(as.numeric(listening_value),F)) - } else{ - if (grepl("sidemenu", updating_value) == T){ - shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) - }else{ - shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) - } - return(list(comparing_values, F)) - } - } - - - observeEvent(input$score_a,{ - res <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu", vals$deep_sidebar) - vals$score_a <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$score_d,{ - res <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu", vals$deep_sidebar ) - vals$score_d <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$score_c,{ - res <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu", vals$deep_sidebar ) - vals$score_c <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$domains_filter,{ - res <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar ) - vals$domains_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$biodomain_filter,{ - res <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" , vals$deep_sidebar) - vals$biodomain_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$gene_filter,{ - res <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar ) - vals$gene_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$cluster_type,{ - res <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar ) - vals$cluster_type <-res[[1]] - vals$deep_sidebar <- res[[2]] - }) - observeEvent(input$score_a_sidemenu,{ - res <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a", vals$deep_global ) - vals$score_a <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$score_d_sidemenu,{ - res <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" , vals$deep_global ) - vals$score_d <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$score_c_sidemenu,{ - res <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" , vals$deep_global ) - vals$score_c <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$domains_filter_sidemenu,{ - res <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" , vals$deep_global ) - vals$domains_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$biodomain_filter_sidemenu,{ - res <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" , vals$deep_global ) - vals$biodomain_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$gene_filter_sidemenu,{ - res <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter", vals$deep_global ) - vals$gene_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - observeEvent(input$cluster_type_sidemenu,{ - res <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type", vals$deep_global ) - vals$cluster_type <- res[[1]] - vals$deep_global <- res[[2]] - }) - - - - observeEvent(input$score_average_gecco,{ - res <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu",vals$gecco_sidebar ) - vals$score_average_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - observeEvent(input$score_cluster_gecco,{ - res <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu",vals$gecco_sidebar ) - vals$score_cluster_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - observeEvent(input$domains_filter_gecco,{ - res <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ,vals$gecco_sidebar) - vals$domains_filter_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - observeEvent(input$prot_filter_gecco,{ - res <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ,vals$gecco_sidebar) - vals$prot_filter_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - observeEvent(input$score_average_gecco_sidemenu,{ - res <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco",vals$gecco_global ) - vals$score_average_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - observeEvent(input$score_cluster_gecco_sidemenu,{ - res <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco",vals$gecco_global ) - vals$score_cluster_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - observeEvent(input$domains_filter_gecco_sidemenu,{ - res <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco",vals$gecco_global ) - vals$domains_filter_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - observeEvent(input$prot_filter_gecco_sidemenu,{ - res <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco",vals$gecco_global ) - vals$prot_filter_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - - shiny::observeEvent(input$restore_box,{ - box_ids <- c("deep_comparison_box", "deep_rate_box","deep_comparison_controls_box","gecco_comparison_box", - "gecco_rate_box","gecco_comparison_controls_box","annotation_reference_box","annotation_reference_comparison_box", - "annotation_reference_comparison_controls_box","biocircos_plot_box","biocircos_controls_box", - "ranking_barplot_box","group_table_box","upload_anti_box","upload_prism_box", - "upload_sempi_box","upload_deep_box","upload_gecco_box","upload_rre_box","upload_arts_box", - "use_example_data_box","rename_box","prism_supplement_arts_box", "improve_visualization_box", - "download_data_box","gecco_filtering_box","deep_filtering_box") - for (id in box_ids){ - shinydashboardPlus::updateBox(id, action = "restore") - } - }) - - - # Logic show/hide selectinput in Link coloring in - # Biocircos - shiny::observeEvent(input$label_color_class, { - - if (input$label_color_class == "R"){ - shinyjs::showElement(selector = "#ref_col_biocircos") - } else { - shinyjs::hideElement(selector = "#ref_col_biocircos") - } - }) - # Make hybrids from the data, if checkbox is checked - # TODO Put the function to the root. - # Tou have duplicated code - shiny::observeEvent(input$anti_hybrid, ignoreInit=T,{ - - if (input$anti_hybrid==T){ - vals$anti_data$Type2 <- hybrid_col(vals$anti_data) - }else { - vals$anti_data$Type2 <- vals$anti_type - } - - }) - shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { - - if (input$prism_hybrid==T){ - vals$prism_data$Type2 <- hybrid_col(vals$prism_data) - }else { - vals$prism_data$Type2 <- vals$prism_type - } - }) - shiny::observeEvent(input$sempi_hybrid, ignoreInit=T,{ - - if (input$sempi_hybrid==T){ - vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) - }else { - vals$sempi_data$Type2 <- vals$sempi_type - } - }) - # Rename the data, if button is clicked - shiny::observeEvent(input$rename, { - - rename_data <- vals$rename_data - if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") - res <- rename_vector(anti_data, rename_data, vals$renaming_notification) - vals$anti_type <- res[[1]] - vals$renaming_notification <- res[[2]] - anti_data['Type2'] <- vals$anti_type - vals$anti_data <- anti_data - } - - if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") - res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) - vals$sempi_type <- res[[1]] - vals$renaming_notification <- res[[2]] - sempi_data['Type2'] <- vals$sempi_type - vals$sempi_data <- sempi_data - } - - if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") - res <- rename_vector(prism_data, rename_data, vals$renaming_notification) - vals$prism_type <- res[[1]] - vals$renaming_notification <- res[[2]] - prism_data['Type2'] <- vals$prism_type - vals$prism_data <- prism_data - } - shinyjs::showElement(selector = "#reset_name") - shinyjs::hideElement(selector = "#rename") - vals$renamed <- T - shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) - }) - # When the new data is uploaded and renamed - # is T, then rename data on upload - shiny::observeEvent(check_to_rename(), { - - shiny::req(vals$renamed == T) - - rename_data <- vals$rename_data - if (vals$anti_data_input == T){ - anti_data <- read.csv("anti_data.csv") - res <- rename_vector(anti_data, rename_data, vals$renaming_notification) - vals$anti_type <- res[[1]] - vals$renaming_notification <- res[[2]] - anti_data['Type2'] <- vals$anti_type - vals$anti_data <- anti_data - } - - if (vals$sempi_data_input == T){ - sempi_data <- read.csv("sempi_data.csv") - res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) - vals$sempi_type <- res[[1]] - vals$renaming_notification <- res[[2]] - sempi_data['Type2'] <- vals$sempi_type - vals$sempi_data <- sempi_data - } - - if(vals$prism_data_input == T){ - prism_data <- read.csv("prism_data.csv") - res <- rename_vector(prism_data, rename_data, vals$renaming_notification) - vals$prism_type <- res[[1]] - vals$renaming_notification <- res[[2]] - prism_data['Type2'] <- vals$prism_type - vals$prism_data <- prism_data - } - }) - # Reset the renaming. Uncheck the hybrid checkboxes - shiny::observeEvent(input$reset_name, { - - vals$anti_data['Type2'] <- vals$anti_data['Type'] - vals$sempi_data['Type2'] <- vals$sempi_data['Type'] - vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - if (input$anti_hybrid==T){ - shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) - shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) - } - if (input$prism_hybrid==T){ - shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) - shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) - } - if (input$sempi_hybrid==T){ - shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) - shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) - } - shinyjs::showElement(selector = "#rename") - shinyjs::hideElement(selector = "#reset_name") - vals$renamed <- F - }) - # Read the uploaded renaming scheme csv - shiny::observeEvent(input$rename_data,{ - - rename_data <- read.csv(input$rename_data$datapath) - vals$rename_data <- rename_data - coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] - colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") - }) - - - # What to do, if hide DeepBGC comparison options scheme is triggered - - - ############################################################################ - ############################################################################ - ### ### - ### COMPUTATIONS ### - ### ### - ############################################################################ - ############################################################################ - shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ - if (input$prism_supp == T){ - vals$prism_supp_data_input = T - vals$need_filter <- T - if (!("PRISM-Supp" %in% names(vals$choices$ref))){ - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - update_ui_with_data() - } - } else { - vals$prism_supp_data_input = F - vals$need_filter <- T - vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref)%in%c("PRISM-Supp"))] - vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by)%in%c("PRISM-Supp"))] - vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos)%in%c("PRISM-Supp"))] - update_ui_with_data() - } - }) - - # Compute all interceptions on data upload. - # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), ignoreInit = T,priority = 5,{ - # GENERATE DATA - if (vals$anti_data_input == TRUE){ - anti_data <- vals$anti_data - anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - - } - if (vals$deep_data_input == TRUE){ - deep_data <- vals$deep_data - deep_inter <- vals$deep_data %>% - dplyr::select(Start, Stop) - - deep_inter$seqnames <- "chr" - } - if (vals$rre_data_input == TRUE){ - # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(vals$rre_data) - # Start/Stop columns from rre data as matrix - rre_inter <- rre_data %>% - dplyr::select(Start, Stop) - rre_inter$seqnames <- "chr" - } - if (vals$prism_data_input == TRUE){ - # Store master prism data in local variable - prism_data <- vals$prism_data - # Start/Stop columns from prism data as matrix - prism_inter <- prism_data %>% - dplyr::select(Start,Stop) - prism_inter$seqnames <- "chr" - } - if (vals$sempi_data_input == TRUE){ - # Store master prism data in local variable - sempi_data <- vals$sempi_data - # Start/Stop columns from prism data as matrix - sempi_inter <- vals$sempi_data %>% - dplyr::select(Start,Stop) - sempi_inter$seqnames <- "chr" - } - if (vals$prism_supp_data_input == T){ - prism_supp_data <- vals$prism_supp_data - prism_supp_inter <- vals$prism_supp_data %>% - dplyr::select(Start,Stop) - prism_supp_inter$seqnames <- "chr" - } - if (vals$arts_data_input == T){ - arts_data <- vals$arts_data - arts_inter <- vals$arts_data %>% - dplyr::select(Start,Stop) - arts_inter$seqnames <- "chr" - } - if (vals$gecco_data_input == TRUE){ - gecco_data <- vals$gecco_data - # Start/Stop columns from prism data as matrix - gecco_inter <- vals$gecco_data %>% - dplyr::select(Start,Stop) - gecco_inter$seqnames <- "chr" - } - - get_inter <- function(inter1, inter2){ - query <- GenomicRanges::makeGRangesFromDataFrame(inter2) - subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) - interseption <- GenomicRanges::findOverlaps(query,subject) - inter_from <- interseption@from - inter_to <- interseption@to - return(list(from = inter_from, to = inter_to)) - } - - inters <- vals$inters - index = 1 - for (i in data_uploads){ - index_2 = 1 - j = soft_names[index] - for (p in data_uploads){ - x = soft_names[index_2] - if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ - if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ - res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) - new_res <- list() - new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster - new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster - inters[[j]][[x]] <- new_res - inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) - } - - } - index_2 = index_2 +1 - } - if (vals[[i]] == TRUE){ - vals$computed[[j]] <- TRUE - } - index = index +1 - } - - vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ - vals$inters_filtered <- inters - enable_event_logic() - } else{ - vals$need_filter <- T - vals$filter_data <- T - } - - }) - # dplyr::filter ARTS, DeepBGC, GECCO interception data - # and general dataframes to plot, if data filtering - # options are triggered - shiny::observeEvent({dynamicInput() - to_debounce() - }, ignoreInit = T, priority = 4 ,{ - shiny::req(vals$data_upload_count>=1) - inters <- vals$inters - if (vals$deep_data_input == TRUE){ - if (vals$need_filter == F) { - biocircos_deep <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) - vals$deep_data_filtered <- biocircos_deep - } else { - biocircos_deep <- vals$deep_data_filtered - } - if (vals$data_upload_count!=1){ - new_deep <- lapply(inters$deep, function(x){ - new_to <- x$to[x$to %in% biocircos_deep$Cluster] - new_from <- x$from[x$to %in% biocircos_deep$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$deep) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from - new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to - } - new_inters$deep <- new_deep - vals$inters_filtered <- new_inters - inters <- new_inters - } - } - if (vals$gecco_data_input == TRUE){ - if (vals$need_filter == F) { - gecco_data <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) - vals$gecco_data_filtered <- gecco_data - } else { - gecco_data <- vals$gecco_data_filtered - } - if (vals$data_upload_count!=1){ - new_gecco <- lapply(inters$gecco, function(x){ - new_to <- x$to[x$to %in% gecco_data$Cluster] - new_from <- x$from[x$to %in% gecco_data$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$gecco) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from - new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to - } - new_inters$gecco <- new_gecco - vals$inters_filtered <- new_inters - inters <- new_inters - } - } - if (vals$arts_data_input == TRUE){ - if (input$dup_choice != "All"){ - vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") - if (vals$data_upload_count!=1){ - new_arts <- lapply(inters$arts, function(x){ - new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] - new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$arts) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from - new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to - } - new_inters$arts <- new_arts - vals$inters_filtered <- new_inters - inters <- new_inters - } - } else { - vals$arts_data_filtered <- vals$arts_data - vals$inters_filtered <- inters - - } - } - if (input$prism_supp == FALSE){ - inters$prism_supp <- NULL - for (name in names(inters)) { - inters[[name]][which(names(inters[[name]])%in%c("prism_supp"))]<-NULL - } - } - if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { - vals$inters_filtered <- inters - } - vals$need_filter <- F - vals$filter_data <- F - vals$can_plot_deep_ref = T - enable_event_logic() - - }) - # Compute the Biociros plot. Store information to plot later - shiny::observeEvent(biocircos_listen(), ignoreInit = T,priority = 3 ,{ - shiny::req(vals$data_upload_count >=2) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_biocircos == T) - source("src/biocircos_functions.R") - #BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - - - rename_data <- vals$rename_data - coloring_datatable <- vals$coloring_datatable - - index <- 1 - # browser() - for (upload in data_uploads){ - if (vals[[upload]] == T){ - # Store data in local variable - corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) - init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color , coloring_datatable) - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes <- init_data[[1]] - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- init_data[[2]] - # Add arcs begin positions. (Start column) - arcs_begin <- init_data[[3]] - # Stop position of arcs. - arcs_end <- init_data[[4]] - # Add Arcs labels. Can add only one label... - arc_labels <- init_data[[5]] - - arc_col <- init_data[[6]] - } - index <- index +1 - } - # Add to tracklist. Then it can be populated with links - tracklist <- BioCircos::BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - - chromosomes_start <- c() - chromosomes_end <- c() - link_pos_start <- c() - link_pos_start_1 <- c() - link_pos_end <- c() - link_pos_end_2 <- c() - label_1 <- c() - label_2 <- c() - label_color <- c() - - #CALCULATIONS - # ----------------------------------------- - - - data_uploads_2 <- data_uploads - soft_2 <- soft_namings - soft_names_2 <- soft_names - data_to_use_2 <- data_to_use - index <- 1 - for (upload in data_uploads){ - data_uploads_2 <- data_uploads_2[-1] - soft_2 <- soft_2[-1] - soft_names_2 <- soft_names_2[-1] - data_to_use_2 <- data_to_use_2[-1] - index2 <- 1 - if (vals[[upload]] == T){ - for (upload2 in data_uploads_2){ - if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ - output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) - - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) - } - index2 <- index2 +1 - } - write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) - } - index <- index +1 - } - - - - - # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - # Add links and labels to the track list for subsequent visualization - if ((input$label_color == T) & (length(chromosomes_start) > 0)){ - group_colors <- plyr::count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) - } - } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ - tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } else{ - shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) - } - - vals$tracklist <- tracklist - vals$Biocircos_chromosomes <- Biocircos_chromosomes - }) - - shiny::observeEvent(deep_reference(), ignoreInit = T,{ - shiny::req(vals$data_upload_count >=1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_deep_ref == T) - shiny::req(input$ref != "") - shiny::req(vals$data_upload_count >=1) - - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - source("src/deep_reference_functions.R") - # GENERATE DATA - index <- 1 - for (upload in data_uploads){ - if (vals[[upload]] == T){ - data<- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index],input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width)) - } - index <- index +1 - } - - - lett <- rev(LETTERS)[1:9] - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - - - - # MAKE COMPUTATIONS - sup_index <- 1 - soft_lttrs <- lett - rename_y_axis <- vals$rename_y_axis - rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ - soft_lttrs[x]=soft_namings[x] - }) - names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] - for (upload in data_uploads){ - soft_lttr <- soft_lttrs[1] - soft_lttrs <- soft_lttrs[-1] - if (vals[[upload]] == T){ - soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F,inters) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more,inters) - seg_ref <- seg_ref_g - - if (input$ref == soft_namings[sup_index]){ - shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) - plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more) - soft_let <- abbr[sup_index] - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major,inter = T, inters) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df,inter = T, vals$rre_more, inters) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index, vals$rre_more) - } - index = index +1 - - } - plot <- plot + - ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("Annotations' comparison to the reference") - to_plot <- plotly::ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types '))) - - - } - seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - vals[[soft_datafr[sup_index]]] <- seg_ref - } - sup_index <- sup_index +1 - } - vals$rename_y_axis <- rename_y_axis - vals$deep_reference_to_plot <- to_plot - }) - - - ############################################################################ - ############################################################################ - ### ### - ### OUTPUT PLOTS ### - ### ### - ############################################################################ - ############################################################################ - - ##---------------------------------------------------------------- - ## DeepBGC Comparison tab - - ##---------------------------------------------------------------- - # Render barplot - output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - deep_inter_1 <- vals$deep_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type == "Activity") { - score <- "score_a" - } else if (input$score_type == "DeepBGC") { - score <- "score_d" - } else if (input$score_type == "Cluster_Type") { - score <- "score_c" - } - deep_inter_1$score <- deep_inter_1[[score]] - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - - deep_inter <- deep_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) - if (length(deep_inter$Start) > 0) { - deep_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'Antismash'){ - anti_inter <- shiny::isolate(vals$anti_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'PRISM'){ - anti_inter <- shiny::isolate(vals$prism_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'SEMPI'){ - anti_inter <- shiny::isolate(vals$sempi_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - # Get the interception of two matrices - if (length(deep_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(deep_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - if (input$ref_comparison == 'Antismash'){ - used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'PRISM'){ - used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc - cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'SEMPI') { - used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc - cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness_deep <- data.frame(fullnes_of_annotation) - write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(input$score_a)), - paste("DeepBGC score:", as.character(input$score_d)), - paste("Cluster type score:", as.character(input$score_c)), sep = "\n") - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$deep_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_deep)) - - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_deep) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'Antismash'){ - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'PRISM'){ - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'SEMPI'){ - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) - ##---------------------------------------------------------------- - ## GECCO Comparison tab - - ##---------------------------------------------------------------- - # Render barplot - output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - gecco_inter_1 <- vals$gecco_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type_gecco == "avg_p") { - score <- "score_a" - } else if (input$score_type_gecco == "Cluster_Type") { - score <- "score_c" - } - gecco_inter_1$score <- gecco_inter_1[[score]] - - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - - # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix - gecco_inter <- gecco_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) - if (length(gecco_inter$Start) > 0) { - gecco_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == 'Antismash'){ - anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'PRISM'){ - anti_inter <- vals$prism_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'SEMPI'){ - anti_inter <- vals$sempi_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(gecco_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) - inter_bgc <- length(interseption@from) - len_new <- length(gecco_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison_gecco == 'Antismash'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'PRISM'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc - cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'SEMPI') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc - cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - - } - - # Store dataframe in reactive value for later use. - vals$fullness_gecco <- data.frame(fullnes_of_annotation) - write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(input$score_average_gecco)), - paste("Cluster type score:", as.character(input$score_cluster_gecco)), sep = "\n") - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$gecco_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_gecco)) - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_gecco) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == 'Antismash'){ - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'PRISM'){ - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'SEMPI'){ - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") - test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) - }) - ##--------------------------------------------------------------- - ## Annotation on chromosome plots' tab - - ##--------------------------------------------------------------- - - # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information - # For antismash and PRISM data showed only ID, Start, Stop, Type - output$deep_reference <- plotly::renderPlotly({ - shiny::req(vals$deep_reference_to_plot) - vals$can_plot_deep_ref_2 <- T - vals$deep_reference_to_plot - }) - - output$deep_reference_2 <- plotly::renderPlotly({ - shiny::req(vals$can_plot_deep_ref_2 == T) - vals$can_plot_deep_ref_2 == F - rename_y_axis <- shiny::isolate(vals$rename_y_axis) - data <- NULL - - index <- 1 - for (upload in data_uploads){ - if (is.null(data)){ - if (vals[[upload]] == T){ - if (dim(vals[[data_to_use[index]]])[1] != 0){ - data <- vals[[data_to_use[index]]] - } - } - } - index <- index+1 - } - - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE){ - plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - } - if (vals$deep_data_input == TRUE){ - if (dim(vals$seg_df_ref_d)[1] >0) { - plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) - } - } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) - } else { - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) - } - } - if (vals$prism_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (vals$sempi_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - - } - if (input$prism_supp == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) - } - if (vals$gecco_data_input == TRUE){ - if (dim(vals$seg_df_ref_g)[1] >0) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) - } - } - to_plot <- plotly::ggplotly(plot + - ggplot2::scale_y_discrete(labels = rename_y_axis) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip - ) - to_plot %>% plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types ')), - autosize=TRUE) - }) #%>% shiny::debounce(200) - - ##---------------------------------------------------------------- - ## Biocircos plot tab - - ##--------------------------------------------------------------- - # Render Biocircos Plot for all-vs-all comparison - output$biocircos <- BioCircos::renderBioCircos({ - shiny::req(vals$data_upload_count >1) - - # Plot BioCircos - BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) - }) - - - output$biocircos_legend <- DT::renderDataTable({ - shiny::req(vals$data_upload_count >=1) - rownames = FALSE - new_data <- vals$coloring_datatable - color_vec <- new_data$x$data$Color - options(DT.options = list(pageLength = 50)) - new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) - - - }) - - # Updating values in Datatable on edit - shiny::observeEvent(input$biocircos_legend_cell_edit, { - if (input$biocircos_legend_cell_edit$col[1] == 0){ - vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 1){ - vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 2){ - vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value - } - }) - ##--------------------------------------------------------------- - ## Summarize tab - - ##--------------------------------------------------------------- - # Render barplot with number plyr::count of interception for BGC IDs - output$barplot_rank <- plotly::renderPlotly({ - shiny::req(vals$data_upload_count >1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_barplot_rank == T) - - antismash_count <- NULL - prism_count <- NULL - deep_count <- NULL - rre_count <- NULL - sempi_count <- NULL - prism_supp_count <- NULL - arts_count <- NULL - gecco_count <- NULL - - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - index <- 1 - ranking_data <- NULL - for (upload in data_uploads){ - if (vals[[upload]] == T){ - counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] - # Add prefices to the ID to plot for a barplot. - counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) - # Add label column to the dataframe, from which we will plot - counts_var$label <- rep(soft_namings[index], length(counts_var$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - counts_var$Type <- anot_var$Type - # Add Start positions (to visualize on hover) - counts_var$Start <- anot_var$Start - # Add Stop positions (to visualize on hover) - counts_var$Stop <- anot_var$Stop - if (is.null(ranking_data)){ - ranking_data <- counts_var - } else{ - ranking_data <- rbind(ranking_data, counts_var) - } - } - index <- index +1 - } - - - # Fix column names in the master dataframe - colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") - # Plot - plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + - ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = ggplot2::element_text(size = 14)) + - ggplot2::ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") - ) - - - }) - - # Render table with data - output$group_table <- shiny::renderTable({ - shiny::req(vals$data_upload_count >1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) - source("src/group_table_functions.R") - if (is.null(vals$inters_filtered)){ - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) - colnames(df_test) <- abbr - added_inters <- c(soft_names[match(input$group_by, soft_namings)]) - add_inters <- list() - if (input$count_all == F){ - df_test[nrow(df_test)+1,] <- NA - } else{ - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- abbr - df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster - df_test[nrow(df_test)+1,] <- NA - } - for (i in seq(1:length(data_uploads))){ - if (input$group_by==soft_namings[[i]]){ - exclude <- i - soft_n <- names(inters[[soft_names[i]]]) - index <- 1 - for (d in seq(1:length(soft_n))) { - name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))){ - if (name==soft_names[match(soft_n, soft_names)][h]){ - colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) - } - } - - index <- index +1 - } - excluded_names <- abbr[abbr != as.name(abbr[i])] - data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), - b=paste(eval(as.name(excluded_names[2])), collapse=","), - c=paste(eval(as.name(excluded_names[3])), collapse=","), - d=paste(eval(as.name(excluded_names[4])), collapse=","), - e=paste(eval(as.name(excluded_names[5])), collapse=","), - f=paste(eval(as.name(excluded_names[6])), collapse=","), - g=paste(eval(as.name(excluded_names[7])), collapse=",")) - colnames(data) <- c(abbr[i], excluded_names) - for (p in abbr){ - data[[p]] <- gsub('NA,|,NA', '', data[[p]]) - data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, abbr)] - } - data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))){ - if (vals[[data_uploads[f]]] != TRUE){ - data <- data %>% - dplyr::select(-as.name(soft_namings[f])) - } - } - - } else { - if ( !(soft_names[i] %in% added_inters)){ - matched_v <- match(added_inters,names(inters[[soft_names[i]]])) - soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])){ - if (!(inter %in% added_inters)){ - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) - add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) - } - } - added_inters <- c(added_inters, soft_names[i])} - } - } - - for (name in names( add_inters) ){ - data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") - } - write.csv(data, "group_by.csv", row.names = F) - data - }) - - # Download used datasets (as for BioCircos) - output$download <- shiny::downloadHandler(filename = function(){ - paste("datasets.zip") - }, - content = function(file){ - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } else if (grepl('group.py', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } - } - #create the zip file from flst vector - zip(file, flst) }, - contentType = "application/zip" ) - shiny::onSessionEnded(function() { - shiny::stopApp() - }) -} - -# Run the application -shiny::shinyApp(ui = ui, server = server) diff --git a/man/antismash_to_csv.Rd b/man/antismash_to_csv.Rd index 4cb5189..7495d97 100644 --- a/man/antismash_to_csv.Rd +++ b/man/antismash_to_csv.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/fct_format_transformation.R \name{antismash_to_csv} \alias{antismash_to_csv} -\title{antismash_to_df} +\title{antismash_to_csv} \usage{ antismash_to_csv(file, write_to = getwd()) } diff --git a/man/arts_to_csv.Rd b/man/arts_to_csv.Rd new file mode 100644 index 0000000..cc8bf8a --- /dev/null +++ b/man/arts_to_csv.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_format_transformation.R +\name{arts_to_csv} +\alias{arts_to_csv} +\title{arts_to_csv} +\usage{ +arts_to_csv(project_archive, write_to = getwd()) +} +\arguments{ +\item{project_archive}{- path to zip file, downloaded from ARTS} + +\item{write_to}{- path where to write generated csv file} +} +\value{ +csv file in specified location +} +\description{ +Function, which extracts tables from arts result zip archive and transforms them into BGCViz input +} diff --git a/man/prism_to_csv.Rd b/man/prism_to_csv.Rd index 538962b..340bf0f 100644 --- a/man/prism_to_csv.Rd +++ b/man/prism_to_csv.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/fct_format_transformation.R \name{prism_to_csv} \alias{prism_to_csv} -\title{prism_to_df} +\title{prism_to_csv} \usage{ prism_to_csv(file, write_to = getwd()) } diff --git a/man/sempi_to_csv.Rd b/man/sempi_to_csv.Rd index 688cb9a..0e215e8 100644 --- a/man/sempi_to_csv.Rd +++ b/man/sempi_to_csv.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/fct_format_transformation.R \name{sempi_to_csv} \alias{sempi_to_csv} -\title{sempi_to_df} +\title{sempi_to_csv} \usage{ sempi_to_csv(project_archive, write_to = getwd()) } From d0adfe869ba960ef1daeae8bf61110da9928b736 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 14:13:41 +0200 Subject: [PATCH 114/199] Added functions to change default behaviour Former-commit-id: 164e5108531081c364300e1763d8ea1bab3ee222 --- DESCRIPTION | 3 + NAMESPACE | 2 + R/fct_helpers.R | 29 +++++++ inst/extdata/rename.csv | 180 ++++++++++++++++++++-------------------- man/get_defaults.Rd | 18 ++++ man/set_defaults.Rd | 15 ++++ 6 files changed, 157 insertions(+), 90 deletions(-) create mode 100644 man/get_defaults.Rd create mode 100644 man/set_defaults.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 67376eb..63e772e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -37,7 +37,10 @@ RoxygenNote: 7.2.0 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues Suggests: + knitr, + rmarkdown, spelling, testthat (>= 3.0.0) Config/testthat/edition: 3 Language: en-US +VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index e2d4eee..51c9b83 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,9 +2,11 @@ export(antismash_to_csv) export(arts_to_csv) +export(get_defaults) export(prism_to_csv) export(run_app) export(sempi_to_csv) +export(set_defaults) import(shiny) importFrom(golem,activate_js) importFrom(golem,add_resource_path) diff --git a/R/fct_helpers.R b/R/fct_helpers.R index f452eae..1a4231f 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -75,4 +75,33 @@ hybrid_col <- function(data){ } }) return(types) +} + +#' get_defaults +#' +#' @description Function, which downloads default options csv file into provided location. +#' Then can be used with `set_defaults` function to change the default behaviour +#' +#' @param write_to - location where the write configuration file. default - current working directory +#' +#' @return csv file in specified location +#' +#' @export +get_defaults <- function(write_to = getwd()){ + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + option_data <- read.csv(rename_file) + write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) +} +#' set_defaults +#' +#' @description Function, which uploads default options csv file to the package. +#' Use with `get_defaults` function to download currently used default options. +#' +#' @param csv_file - path to csv file with default options. +#' +#' @export +set_defaults <- function(csv_file){ + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + option_data <- read.csv(csv_file) + write.csv(option_data, rename_file, row.names = FALSE) } \ No newline at end of file diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv index 48878d4..50148ff 100644 --- a/inst/extdata/rename.csv +++ b/inst/extdata/rename.csv @@ -1,90 +1,90 @@ -Code,Group,Group_color,Color,Vacant_colors,Hierarchy, -polyketide,pks,pks,#a6cee3,,SEMPI,SEMPI -nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM, -melanin,melanin,ripp,#b2df8a,,Antismash, -ectoine,other,saccharide,#33a02c,,DeepBGC, -pentangular_polyphenol,other,melanin,#fb9a99,,GECCO, -nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder, -angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp, -angucycline,pks,alkaloid,#ff7f00,,ARTS, -butyrolactone,ripp,hybrid,#cab2d6,,, -class_i_lantipeptide,ripp,core,#6a3d9a,,, -lasso_peptide,ripp,regulatory,#ffff99,,, -nis_synthase,other,resistance,#b15928,,, -acyl_amino_acids,other,base,#d4ced6,,, -aminocoumarin,other,,,,, -amglyccycl,other,,,,, -arylpolyene,other,,,,, -betalactone,other,,,,, -blactam,other,,,,, -bottromycin,other,,,,, -cdps,other,,,,, -cyanobactin,other,,,,, -fatty_acid,other,,,,, -furan,other,,,,, -fungal-ripp,ripp,,,,, -glycocin,ripp,,,,, -guanidinotides,other,,,,, -halogenated,other,,,,, -hgle-ks,pks,,,,, -hserlactone,other,,,,, -indole,other,,,,, -lap,ripp,,,,, -ladderane,other,,,,, -lanthipeptide-class-i,ripp,,,,, -lanthipeptide-class-ii,ripp,,,,, -lanthipeptide-class-iii,ripp,,,,, -lanthipeptide-class-iv,ripp,,,,, -lanthipeptide-class-v,ripp,,,,, -lassopeptide,ripp,,,,, -linaridin,other,,,,, -lipolanthine,other,,,,, -microviridin,other,,,,, -naggn,other,,,,, -napaa,other,,,,, -nrps,nrps,,,,, -nrps-like,nrps,,,,, -nucleoside,other,,,,, -oligosaccharide,saccharide,,,,, -other,other,,,,, -pbde,other,,,,, -phenazine,other,,,,, -phosphoglycolipid,other,,,,, -phosphonate,other,,,,, -pks-like,pks,,,,, -ppys-ks,other,,,,, -proteusin,other,,,,, -pufa,other,,,,, -pyrrolidine,other,,,,, -ranthipeptide,ripp,,,,, -ras-ripp,other,,,,, -redox-cofactor,other,,,,, -resorcinol,other,,,,, -ripp-like,ripp,,,,, -rre-containing,ripp,,,,, -saccharide,saccharide,,,,, -sactipeptide,ripp,,,,, -siderophore,other,,,,, -t1pks,pks,,,,, -t2pks,pks,,,,, -t3pks,pks,,,,, -terpene,terpene,,,,, -thioamitides,other,,,,, -thioamide-nrp,other,,,,, -thiopeptide,ripp,,,,, -transat-pks,pks,,,,, -transat-pks-like,pks,,,,, -tropodithietic-acid,other,,,,, -bacteriocin,ripp,,,,, -fused,other,,,,, -head_to_tail,other,,,,, -lanthidin,other,,,,, -lanthipeptide,ripp,,,,, -tfua-related,other,,,,, -otherks,other,,,,, -microcin,other,,,,, -cf_saccharide,saccharide,,,,, -cf_fatty_acid,other,,,,, -cf_putative,other,,,,, -class_iii_iv_lantipeptide,ripp,,,,, -prodigiosin,other,,,,, +Code,Group,Group_color,Color,Vacant_colors,Hierarchy +polyketide,pks,pks,#a6cee3,,SEMPI +nonribosomal_peptide,nrps,nrps,#1f78b4,,PRISM +melanin,melanin,ripp,#b2df8a,,Antismash +ectoine,other,saccharide,#33a02c,,DeepBGC +pentangular_polyphenol,other,melanin,#fb9a99,,GECCO +nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder +angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp +angucycline,pks,alkaloid,#ff7f00,,ARTS +butyrolactone,ripp,hybrid,#cab2d6,, +class_i_lantipeptide,ripp,core,#6a3d9a,, +lasso_peptide,ripp,regulatory,#ffff99,, +nis_synthase,other,resistance,#b15928,, +acyl_amino_acids,other,base,#d4ced6,, +aminocoumarin,other,,,, +amglyccycl,other,,,, +arylpolyene,other,,,, +betalactone,other,,,, +blactam,other,,,, +bottromycin,other,,,, +cdps,other,,,, +cyanobactin,other,,,, +fatty_acid,other,,,, +furan,other,,,, +fungal-ripp,ripp,,,, +glycocin,ripp,,,, +guanidinotides,other,,,, +halogenated,other,,,, +hgle-ks,pks,,,, +hserlactone,other,,,, +indole,other,,,, +lap,ripp,,,, +ladderane,other,,,, +lanthipeptide-class-i,ripp,,,, +lanthipeptide-class-ii,ripp,,,, +lanthipeptide-class-iii,ripp,,,, +lanthipeptide-class-iv,ripp,,,, +lanthipeptide-class-v,ripp,,,, +lassopeptide,ripp,,,, +linaridin,other,,,, +lipolanthine,other,,,, +microviridin,other,,,, +naggn,other,,,, +napaa,other,,,, +nrps,nrps,,,, +nrps-like,nrps,,,, +nucleoside,other,,,, +oligosaccharide,saccharide,,,, +other,other,,,, +pbde,other,,,, +phenazine,other,,,, +phosphoglycolipid,other,,,, +phosphonate,other,,,, +pks-like,pks,,,, +ppys-ks,other,,,, +proteusin,other,,,, +pufa,other,,,, +pyrrolidine,other,,,, +ranthipeptide,ripp,,,, +ras-ripp,other,,,, +redox-cofactor,other,,,, +resorcinol,other,,,, +ripp-like,ripp,,,, +rre-containing,ripp,,,, +saccharide,saccharide,,,, +sactipeptide,ripp,,,, +siderophore,other,,,, +t1pks,pks,,,, +t2pks,pks,,,, +t3pks,pks,,,, +terpene,terpene,,,, +thioamitides,other,,,, +thioamide-nrp,other,,,, +thiopeptide,ripp,,,, +transat-pks,pks,,,, +transat-pks-like,pks,,,, +tropodithietic-acid,other,,,, +bacteriocin,ripp,,,, +fused,other,,,, +head_to_tail,other,,,, +lanthidin,other,,,, +lanthipeptide,ripp,,,, +tfua-related,other,,,, +otherks,other,,,, +microcin,other,,,, +cf_saccharide,saccharide,,,, +cf_fatty_acid,other,,,, +cf_putative,other,,,, +class_iii_iv_lantipeptide,ripp,,,, +prodigiosin,other,,,, diff --git a/man/get_defaults.Rd b/man/get_defaults.Rd new file mode 100644 index 0000000..4d2f895 --- /dev/null +++ b/man/get_defaults.Rd @@ -0,0 +1,18 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_helpers.R +\name{get_defaults} +\alias{get_defaults} +\title{get_defaults} +\usage{ +get_defaults(write_to = getwd()) +} +\arguments{ +\item{write_to}{- location where the write configuration file. default - current working directory} +} +\value{ +csv file in specified location +} +\description{ +Function, which downloads default options csv file into provided location. +Then can be used with `set_defaults` function to change the default behaviour +} diff --git a/man/set_defaults.Rd b/man/set_defaults.Rd new file mode 100644 index 0000000..5272215 --- /dev/null +++ b/man/set_defaults.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_helpers.R +\name{set_defaults} +\alias{set_defaults} +\title{set_defaults} +\usage{ +set_defaults(csv_file) +} +\arguments{ +\item{csv_file}{- path to csv file with default options.} +} +\description{ +Function, which uploads default options csv file to the package. +Use with `get_defaults` function to download currently used default options. +} From b01448e616ec3c36ccac84e5d9fceecde630af4d Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 14:14:49 +0200 Subject: [PATCH 115/199] Change default example data for ARTS Former-commit-id: b937d5e1714aa268fba9a9011f138909fccc3ff3 --- inst/extdata/sco_arts.csv | 162 +++++++++++++++++++++++++++++++++ inst/extdata/sco_duptable.tsv | 73 --------------- inst/extdata/sco_knownhits.tsv | 48 ---------- 3 files changed, 162 insertions(+), 121 deletions(-) create mode 100644 inst/extdata/sco_arts.csv delete mode 100644 inst/extdata/sco_duptable.tsv delete mode 100644 inst/extdata/sco_knownhits.tsv diff --git a/inst/extdata/sco_arts.csv b/inst/extdata/sco_arts.csv new file mode 100644 index 0000000..a015ee2 --- /dev/null +++ b/inst/extdata/sco_arts.csv @@ -0,0 +1,162 @@ +"Hit","Start","Stop","Core","Description","Count","ID","Cluster","Type","Type2","Evalue","Bitscore","Model" +"hit_1",161236,162553,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,1,1,"core","core",NA,NA,"Core" +"hit_1",197220,199917,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,2,2,"core","core",NA,NA,"Core" +"hit_1",457483,457654,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,3,3,"core","core",NA,NA,"Core" +"hit_1",544193,545717,"TIGR01311","glycerol_kin: glycerol kinase",2,4,4,"core","core",NA,NA,"Core" +NA,583522,586897,"Not_core","Biotin_lipoyl",1,5,5,"resistance","resistance",4.7e-15,54,"PF00364.17" +"hit_1",612155,612320,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,6,6,"core","core",NA,NA,"Core" +"hit_1",620366,620879,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,7,7,"core","core",NA,NA,"Core" +NA,740313,742083,"Not_core","ABC_efflux",1,8,8,"resistance","resistance",3.9e-74,248.9,"RF0007" +NA,796976,797723,"Not_core","Biotin_lipoyl",1,9,9,"resistance","resistance",3.4e-06,25.7,"PF00364.17" +"hit_1",1035207,1036800,"TIGR01344","malate_syn_A: malate synthase A",2,10,10,"core","core",NA,NA,"Core" +"hit_1",1116446,1117826,"TIGR03356","BGL: beta-galactosidase",5,11,11,"core","core",NA,NA,"Core" +NA,1202479,1204282,"Not_core","ABC_efflux",1,12,12,"resistance","resistance",8.4e-81,270.9,"RF0007" +"hit_1",1210321,1210594,"TIGR00105","L31: ribosomal protein bL31",3,13,13,"core","core",NA,NA,"Core" +"hit_1",1282581,1283235,"TIGR00079","pept_deformyl: peptide deformylase",3,14,14,"core","core",NA,NA,"Core" +NA,1338247,1339366,"Not_core","Biotin_lipoyl",1,15,15,"resistance","resistance",7.5e-09,34.2,"PF00364.17" +"hit_1",1396237,1397416,"TIGR00485","EF-Tu: translation elongation factor Tu",2,16,16,"core","core",NA,NA,"Core" +"hit_1",1401206,1402082,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,17,17,"core","core",NA,NA,"Core" +NA,1494023,1495871,"Not_core","HSP90",1,18,18,"resistance","resistance",3.6e-07,28,"PF00183.13" +NA,1590406,1591387,"Not_core","OTCace",1,19,19,"resistance","resistance",4.9e-37,126.3,"PF00185.19" +"hit_1",1636965,1638942,"TIGR00418","thrS: threonine--tRNA ligase",2,20,20,"core","core",NA,NA,"Core" +"hit_1",1662891,1666530,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,21,21,"core","core",NA,NA,"Core" +NA,1757648,1758413,"Not_core","Proteasome",1,22,22,"resistance","resistance",1.9e-26,91.6,"PF00227.21" +NA,1758474,1759320,"Not_core","Proteasome",1,23,23,"resistance","resistance",2.6e-38,130.3,"PF00227.21" +"hit_2",1778725,1780264,"TIGR01311","glycerol_kin: glycerol kinase",2,24,24,"core","core",NA,NA,"Core" +"hit_1",1923749,1924289,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,25,25,"core","core",NA,NA,"Core" +"hit_1",2048175,2049129,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,26,26,"core","core",NA,NA,"Core" +NA,2059303,2060092,"Not_core","AAC3",1,27,27,"resistance","resistance",3.5e-54,182.5,"RF0002" +"hit_1",2068834,2069953,"TIGR00876","tal_mycobact: transaldolase",2,28,28,"core","core",NA,NA,"Core" +"hit_1",2069956,2071480,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,29,29,"core","core",NA,NA,"Core" +"hit_1",2071476,2072532,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,30,30,"core","core",NA,NA,"Core" +"hit_1",2080142,2081153,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,31,31,"core","core",NA,NA,"Core" +NA,2080142,2081153,"Not_core","Gp_dh_N",1,32,32,"resistance","resistance",2e-61,205.4,"PF00044.19" +"hit_1",2156336,2157773,"TIGR01064","pyruv_kin: pyruvate kinase",2,33,33,"core","core",NA,NA,"Core" +"hit_1",2162745,2165253,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,34,34,"core","core",NA,NA,"Core" +"hit_1",2185227,2186259,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,35,35,"core","core",NA,NA,"Core" +"hit_1",2308850,2309915,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,36,36,"core","core",NA,NA,"Core" +"hit_1",2316757,2318494,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,37,37,"core","core",NA,NA,"Core" +"hit_2",2338273,2339347,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,38,38,"core","core",NA,NA,"Core" +NA,2345795,2347568,"Not_core","Biotin_lipoyl",1,39,39,"resistance","resistance",8.7e-46,152.5,"PF00364.17" +"hit_1",2348739,2351439,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,40,40,"core","core",NA,NA,"Core" +"hit_1",2445704,2446967,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,41,41,"core","core",NA,NA,"Core" +"hit_2",2539575,2542332,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,42,42,"core","core",NA,NA,"Core" +NA,2624025,2625402,"Not_core","Carboxyl_trans",1,43,43,"resistance","resistance",2.6e-27,94.4,"PF01039.17" +NA,2651102,2653031,"Not_core","ABC_efflux",1,44,44,"resistance","resistance",4.6e-95,318,"RF0007" +"hit_2",2684903,2687633,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,45,45,"core","core",NA,NA,"Core" +"hit_2",2728979,2730326,"TIGR03356","BGL: beta-galactosidase",5,46,46,"core","core",NA,NA,"Core" +"hit_1",2745001,2746024,"TIGR01430","aden_deam: adenosine deaminase",5,47,47,"core","core",NA,NA,"Core" +"hit_1",2753869,2755006,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,48,48,"core","core",NA,NA,"Core" +"hit_2",2854111,2854591,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,49,49,"core","core",NA,NA,"Core" +"hit_2",2861701,2864203,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,50,50,"core","core",NA,NA,"Core" +"hit_3",2873769,2876343,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,51,51,"core","core",NA,NA,"Core" +NA,3010976,3014708,"Not_core","ABC_efflux",1,52,52,"resistance","resistance",4.6e-170,565.4,"RF0007" +NA,3027513,3029130,"Not_core","Carboxyl_trans",1,53,53,"resistance","resistance",3.2e-164,546,"PF01039.17" +NA,3029168,3031109,"Not_core","Biotin_lipoyl",1,54,54,"resistance","resistance",7.8e-20,69.4,"PF00364.17" +"hit_1",3043785,3045603,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,55,55,"core","core",NA,NA,"Core" +"hit_3",3054669,3056109,"TIGR03356","BGL: beta-galactosidase",5,56,56,"core","core",NA,NA,"Core" +"hit_1",3153869,3154226,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,57,57,"core","core",NA,NA,"Core" +"hit_2",3166795,3168142,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,58,58,"core","core",NA,NA,"Core" +"hit_1",3390540,3391821,"TIGR01060","eno: phosphopyruvate hydratase",2,59,59,"core","core",NA,NA,"Core" +"hit_2",3521672,3522680,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,60,60,"core","core",NA,NA,"Core" +"hit_1",3691373,3692384,"TIGR00233","trpS: tryptophan--tRNA ligase",2,61,61,"core","core",NA,NA,"Core" +"hit_1",3789247,3789487,"TIGR00165","S18: ribosomal protein bS18",2,62,62,"core","core",NA,NA,"Core" +"hit_2",3790677,3790932,"TIGR00105","L31: ribosomal protein bL31",3,63,63,"core","core",NA,NA,"Core" +"hit_2",3790938,3791103,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,64,64,"core","core",NA,NA,"Core" +"hit_1",3791190,3791412,"TIGR00009","L28: ribosomal protein bL28",2,65,65,"core","core",NA,NA,"Core" +"hit_1",3791411,3791717,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,66,66,"core","core",NA,NA,"Core" +"hit_1",3804031,3804376,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,67,67,"core","core",NA,NA,"Core" +NA,3966834,3967929,"Not_core","vanS",1,68,68,"resistance","resistance",2.9e-88,295.1,"RF0155" +NA,3967921,3968617,"Not_core","vanR",1,69,69,"resistance","resistance",5.8e-82,273.4,"RF0154" +NA,3973353,3973962,"Not_core","vanX",1,70,70,"resistance","resistance",3.8e-98,325.8,"RF0158" +"hit_2",4048920,4050120,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,71,71,"core","core",NA,NA,"Core" +"hit_2",4153149,4154442,"TIGR00418","thrS: threonine--tRNA ligase",2,72,72,"core","core",NA,NA,"Core" +NA,4193531,4194941,"Not_core","Biotin_lipoyl",1,73,73,"resistance","resistance",3.7e-23,80,"PF00364.17" +NA,4210795,4212271,"Not_core","Biotin_lipoyl",1,74,74,"resistance","resistance",5.5e-18,63.4,"PF00364.17" +NA,4260740,4263314,"Not_core","DNA_topoisoIV",1,75,75,"resistance","resistance",2.8e-148,493.3,"PF00521.15" +NA,4263377,4265438,"Not_core","DNA_gyraseB",1,76,76,"resistance","resistance",2.3e-61,205.1,"PF00204.20" +NA,4268712,4269843,"Not_core","TIGR00663",1,77,77,"resistance","resistance",8.7e-90,300.1,"TIGR00663" +"hit_2",4304257,4304494,"TIGR00165","S18: ribosomal protein bS18",2,78,78,"core","core",NA,NA,"Core" +"hit_2",4363347,4364685,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,79,79,"core","core",NA,NA,"Core" +"hit_2",4413741,4414275,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,80,80,"core","core",NA,NA,"Core" +NA,4684158,4684947,"Not_core","Pentapeptide_4",1,81,81,"resistance","resistance",3.4e-18,64.3,"PF13599.1" +NA,4795084,4796683,"Not_core","Carboxyl_trans",1,82,82,"resistance","resistance",6.3e-139,462.5,"PF01039.17" +NA,4796696,4798541,"Not_core","Biotin_lipoyl",1,83,83,"resistance","resistance",1.6e-14,52.4,"PF00364.17" +"hit_2",4977868,4978495,"TIGR00079","pept_deformyl: peptide deformylase",3,84,84,"core","core",NA,NA,"Core" +"hit_3",5061598,5061763,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,85,85,"core","core",NA,NA,"Core" +"hit_2",5068591,5069623,"TIGR01430","aden_deam: adenosine deaminase",5,86,86,"core","core",NA,NA,"Core" +NA,5078060,5081546,"Not_core","TIGR02013",1,87,87,"resistance","resistance",0,1814.6,"TIGR02013" +"hit_1",5089829,5091956,"TIGR00484","EF-G: translation elongation factor G",2,88,88,"core","core",NA,NA,"Core" +"hit_2",5092129,5093323,"TIGR00485","EF-Tu: translation elongation factor Tu",2,89,89,"core","core",NA,NA,"Core" +"hit_2",5134359,5134545,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,90,90,"core","core",NA,NA,"Core" +"hit_2",5153333,5155181,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,91,91,"core","core",NA,NA,"Core" +"hit_2",5172736,5173045,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,92,92,"core","core",NA,NA,"Core" +"hit_1",5269285,5270731,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,93,93,"core","core",NA,NA,"Core" +"hit_2",5271518,5272538,"TIGR00233","trpS: tryptophan--tRNA ligase",2,94,94,"core","core",NA,NA,"Core" +"hit_3",5334545,5335736,"TIGR01430","aden_deam: adenosine deaminase",5,95,95,"core","core",NA,NA,"Core" +NA,5355282,5357055,"Not_core","Biotin_lipoyl",1,96,96,"resistance","resistance",7.1e-17,59.9,"PF00364.17" +NA,5359017,5360610,"Not_core","Carboxyl_trans",1,97,97,"resistance","resistance",1.2e-199,662.9,"PF01039.17" +NA,5533652,5534546,"Not_core","ClassB",1,98,98,"resistance","resistance",7.1e-26,89.8,"RF0054" +"hit_2",5644428,5644671,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,99,99,"core","core",NA,NA,"Core" +"hit_1",5670248,5671262,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,100,100,"core","core",NA,NA,"Core" +"hit_1",5671274,5672591,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,101,101,"core","core",NA,NA,"Core" +"hit_3",5680106,5680757,"TIGR00079","pept_deformyl: peptide deformylase",3,102,102,"core","core",NA,NA,"Core" +"hit_3",5830019,5830244,"TIGR00105","L31: ribosomal protein bL31",3,103,103,"core","core",NA,NA,"Core" +"hit_1",5832393,5833041,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,104,104,"core","core",NA,NA,"Core" +"hit_2",5833805,5835062,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,105,105,"core","core",NA,NA,"Core" +"hit_1",5880227,5880572,"TIGR03954","integ_memb_HG: integral membrane protein",3,106,106,"core","core",NA,NA,"Core" +"hit_2",5883332,5883662,"TIGR03954","integ_memb_HG: integral membrane protein",3,107,107,"core","core",NA,NA,"Core" +"hit_2",5892974,5894405,"TIGR01064","pyruv_kin: pyruvate kinase",2,108,108,"core","core",NA,NA,"Core" +"hit_3",5955946,5957209,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,109,109,"core","core",NA,NA,"Core" +NA,5957223,5957601,"Not_core","Biotin_lipoyl",1,110,110,"resistance","resistance",2.1e-05,23.2,"PF00364.17" +"hit_1",5978784,5980992,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,111,111,"core","core",NA,NA,"Core" +"hit_1",6005642,6006641,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,112,112,"core","core",NA,NA,"Core" +NA,6031664,6033248,"Not_core","Carboxyl_trans",1,113,113,"resistance","resistance",1.5e-201,669,"PF01039.17" +"hit_2",6062058,6062244,"TIGR00009","L28: ribosomal protein bL28",2,114,114,"core","core",NA,NA,"Core" +"hit_2",6069793,6069967,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,115,115,"core","core",NA,NA,"Core" +"hit_1",6099895,6100675,"TIGR02227","sigpep_I_bact: signal peptidase I",4,116,116,"core","core",NA,NA,"Core" +"hit_2",6100667,6102008,"TIGR02227","sigpep_I_bact: signal peptidase I",4,117,117,"core","core",NA,NA,"Core" +"hit_3",6101640,6102651,"TIGR02227","sigpep_I_bact: signal peptidase I",4,118,118,"core","core",NA,NA,"Core" +"hit_4",6102755,6103532,"TIGR02227","sigpep_I_bact: signal peptidase I",4,119,119,"core","core",NA,NA,"Core" +"hit_4",6161551,6162715,"TIGR01430","aden_deam: adenosine deaminase",5,120,120,"core","core",NA,NA,"Core" +"hit_1",6206674,6207832,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,121,121,"core","core",NA,NA,"Core" +"hit_2",6266752,6267652,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,122,122,"core","core",NA,NA,"Core" +NA,6371005,6373129,"Not_core","DNA_gyraseB",1,123,123,"resistance","resistance",1.2e-50,170.1,"PF00204.20" +NA,6386423,6388880,"Not_core","DNA_topoisoIV",1,124,124,"resistance","resistance",7.1e-147,488.7,"PF00521.15" +"hit_3",6470908,6473452,"TIGR03954","integ_memb_HG: integral membrane protein",3,125,125,"core","core",NA,NA,"Core" +NA,6550398,6551406,"Not_core","OTCace",1,126,126,"resistance","resistance",3.7e-47,159.2,"PF00185.19" +"hit_1",6594925,6596854,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,127,127,"core","core",NA,NA,"Core" +"hit_2",6750130,6751231,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,128,128,"core","core",NA,NA,"Core" +"hit_2",6865735,6867358,"TIGR01344","malate_syn_A: malate synthase A",2,129,129,"core","core",NA,NA,"Core" +NA,6897088,6898861,"Not_core","Biotin_lipoyl",1,130,130,"resistance","resistance",7.1e-17,59.9,"PF00364.17" +NA,6943672,6945265,"Not_core","Carboxyl_trans",1,131,131,"resistance","resistance",1.9e-191,635.7,"PF01039.17" +"hit_2",7301062,7303123,"TIGR00484","EF-G: translation elongation factor G",2,132,132,"core","core",NA,NA,"Core" +"hit_4",7324762,7326169,"TIGR03356","BGL: beta-galactosidase",5,133,133,"core","core",NA,NA,"Core" +"hit_2",7396675,7397611,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,134,134,"core","core",NA,NA,"Core" +"hit_2",7397607,7399386,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,135,135,"core","core",NA,NA,"Core" +"hit_2",7399382,7400528,"TIGR00876","tal_mycobact: transaldolase",2,136,136,"core","core",NA,NA,"Core" +"hit_2",7524432,7525587,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,137,137,"core","core",NA,NA,"Core" +"hit_2",7525612,7527583,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,138,138,"core","core",NA,NA,"Core" +"hit_4",7560697,7561891,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,139,139,"core","core",NA,NA,"Core" +"hit_2",7580931,7582254,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,140,140,"core","core",NA,NA,"Core" +NA,7782660,7784535,"Not_core","ABC_efflux",1,141,141,"resistance","resistance",1.9e-80,269.8,"RF0007" +"hit_2",7832789,7834235,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,142,142,"core","core",NA,NA,"Core" +NA,7832789,7834235,"Not_core","Gp_dh_N",1,143,143,"resistance","resistance",4e-39,133,"PF00044.19" +"hit_1",7835927,7836392,"TIGR00494","crcB: protein CrcB",2,144,144,"core","core",NA,NA,"Core" +"hit_2",7836729,7837104,"TIGR00494","crcB: protein CrcB",2,145,145,"core","core",NA,NA,"Core" +"hit_2",7837143,7837980,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,146,146,"core","core",NA,NA,"Core" +NA,7913373,7914627,"Not_core","Biotin_lipoyl",1,147,147,"resistance","resistance",8.2e-23,78.9,"PF00364.17" +"hit_3",7914736,7917424,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,148,148,"core","core",NA,NA,"Core" +"hit_2",7947902,7948901,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,149,149,"core","core",NA,NA,"Core" +"hit_2",8041720,8043442,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,150,150,"core","core",NA,NA,"Core" +"hit_5",8077470,8078550,"TIGR01430","aden_deam: adenosine deaminase",5,151,151,"core","core",NA,NA,"Core" +"hit_2",8173118,8173721,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,152,152,"core","core",NA,NA,"Core" +"hit_3",8325356,8326355,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,153,153,"core","core",NA,NA,"Core" +NA,8325356,8326355,"Not_core","Gp_dh_N",1,154,154,"resistance","resistance",1.5e-53,179.9,"PF00044.19" +NA,8329971,8331888,"Not_core","HSP90",1,155,155,"resistance","resistance",9.9e-117,389.6,"PF00183.13" +"hit_2",8337388,8339560,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,156,156,"core","core",NA,NA,"Core" +NA,8345073,8346285,"Not_core","Chlor_Efflux_Pump",1,157,157,"resistance","resistance",1e-109,366.1,"RF0051" +"hit_5",8380678,8382118,"TIGR03356","BGL: beta-galactosidase",5,158,158,"core","core",NA,NA,"Core" +"hit_2",8466853,8468158,"TIGR01060","eno: phosphopyruvate hydratase",2,159,159,"core","core",NA,NA,"Core" +NA,8488517,8489696,"Not_core","Chlor_Efflux_Pump",1,160,160,"resistance","resistance",1.2e-124,415.2,"RF0051" +"hit_2",8641684,8642638,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,161,161,"core","core",NA,NA,"Core" diff --git a/inst/extdata/sco_duptable.tsv b/inst/extdata/sco_duptable.tsv deleted file mode 100644 index 81ca146..0000000 --- a/inst/extdata/sco_duptable.tsv +++ /dev/null @@ -1,73 +0,0 @@ -#Core_gene Count Ref_median Ref_stdev Ref_RSD Ref_ubiquity [Hits_listed] Description -TIGR01358 2.0 1.0 0.134 0.8474 0.8632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2272072 2273419 -1 # ID=1_2079|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3519448 3520903 -1 # ID=1_3163|Type=CDS|transl_table=11] DAHP_synth_II: 3-deoxy-7-phosphoheptulonate synthase -TIGR00009 2.0 1.0 0.5021 0.6421 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791175 3791412 1 # ID=1_3380|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6062058 6062244 -1 # ID=1_5496|Type=CDS|transl_table=11] L28: ribosomal protein bL28 -TIGR00612 2.0 1.0 0.3531 0.8526 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6206674 6207832 1 # ID=1_5627|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7524432 7525587 1 # ID=1_6687|Type=CDS|transl_table=11] ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase -TIGR02349 2.0 1.0 0.491 0.4632 0.7789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2753869 2755006 -1 # ID=1_2512|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4048920 4050120 -1 # ID=1_3613|Type=CDS|transl_table=11] DnaJ_bact: chaperone protein DnaJ -TIGR02200 2.0 1.0 0.0 0.6737 0.6737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3804031 3804376 1 # ID=1_3393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5644428 5644671 -1 # ID=1_5118|Type=CDS|transl_table=11] GlrX_actino: glutaredoxin-like protein -TIGR00663 2.0 1.0 0.333 0.8684 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4268712 4269843 -1 # ID=1_3822|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|112311 113430 1 # ID=2_7877|Type=CDS|transl_table=11] TIGR00663: dnan: DNA polymerase III, beta subunit -TIGR01048 2.0 1.0 0.4252 0.7263 0.8895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5820661 5822053 1 # ID=1_5284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7121124 7122447 1 # ID=1_6363|Type=CDS|transl_table=11] lysA: diaminopimelate decarboxylase -TIGR00546 2.0 1.0 0.5356 0.5368 0.7579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1069701 1071315 -1 # ID=1_974|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1412773 1414348 1 # ID=1_1296|Type=CDS|transl_table=11] lnt: apolipoprotein N-acyltransferase -TIGR00544 2.0 1.0 0.401 0.8947 0.9632 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2185227 2186259 -1 # ID=1_1997|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8641684 8642638 -1 # ID=1_7718|Type=CDS|transl_table=11] lgt: prolipoprotein diacylglyceryl transferase -TIGR00260 2.0 1.0 0.4739 0.6421 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4708600 4709893 1 # ID=1_4231|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5823510 5824569 1 # ID=1_5286|Type=CDS|transl_table=11] thrC: threonine synthase -TIGR00876 2.0 1.0 0.3758 0.8053 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2068834 2069953 1 # ID=1_1899|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7399382 7400528 -1 # ID=1_6583|Type=CDS|transl_table=11] tal_mycobact: transaldolase -TIGR00165 2.0 1.0 0.4663 0.7421 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3789247 3789487 -1 # ID=1_3376|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4304257 4304494 1 # ID=1_3851|Type=CDS|transl_table=11] S18: ribosomal protein bS18 -TIGR00494 2.0 1.0 0.4687 0.3579 0.4842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7835927 7836392 1 # ID=1_6962|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7836729 7837104 1 # ID=1_6964|Type=CDS|transl_table=11] crcB: protein CrcB -TIGR00193 2.0 1.0 0.5356 0.4737 0.5737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1310292 1310595 -1 # ID=1_1194|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6019303 6019987 1 # ID=1_5456|Type=CDS|transl_table=11] urease_gam: urease, gamma subunit -TIGR00872 2.0 1.0 0.4307 0.5684 0.6421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4267593 4268469 -1 # ID=1_3821|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7394147 7395029 -1 # ID=1_6579|Type=CDS|transl_table=11] gnd_rel: 6-phosphogluconate dehydrogenase (decarboxylating) -TIGR01356 2.0 1.0 0.2757 0.8737 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5671274 5672591 -1 # ID=1_5144|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7580931 7582254 -1 # ID=1_6738|Type=CDS|transl_table=11] aroA: 3-phosphoshikimate 1-carboxyvinyltransferase -TIGR00871 2.0 1.0 0.7244 0.6526 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2069956 2071480 1 # ID=1_1900|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7397607 7399386 -1 # ID=1_6582|Type=CDS|transl_table=11] zwf: glucose-6-phosphate dehydrogenase -TIGR03954 3.0 2.0 0.4551 0.2421 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5880227 5880572 1 # ID=1_5340|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5883320 5883662 1 # ID=1_5345|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6470908 6473461 -1 # ID=1_5836|Type=CDS|transl_table=11] integ_memb_HG: integral membrane protein -TIGR00534 2.0 1.0 0.424 0.2526 0.3 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2071476 2072532 1 # ID=1_1901|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7396675 7397611 -1 # ID=1_6581|Type=CDS|transl_table=11] OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA -TIGR01129 2.0 1.0 0.3282 0.7895 0.9 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1621003 1622815 -1 # ID=1_1476|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6762661 6765049 -1 # ID=1_6092|Type=CDS|transl_table=11] secD: protein-export membrane protein SecD -TIGR00753 2.0 1.0 0.4292 0.7316 0.8263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1401206 1402082 1 # ID=1_1285|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7837143 7837980 1 # ID=1_6965|Type=CDS|transl_table=11] undec_PP_bacA: undecaprenyl-diphosphatase UppP -TIGR00759 3.0 1.0 0.4291 0.6895 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2348739 2351439 1 # ID=1_2146|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2539575 2542332 1 # ID=1_2329|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7914736 7917424 -1 # ID=1_7038|Type=CDS|transl_table=11] aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type -TIGR00157 2.0 1.0 0.529 0.5737 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5670248 5671262 -1 # ID=1_5143|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6750130 6751231 1 # ID=1_6081|Type=CDS|transl_table=11] TIGR00157: ribosome small subunit-dependent GTPase A -TIGR02412 3.0 1.0 0.8329 0.5105 0.9158 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2162745 2165244 -1 # ID=1_1981|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2861629 2864203 1 # ID=1_2596|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2873769 2876343 1 # ID=1_2604|Type=CDS|transl_table=11] pepN_strep_liv: aminopeptidase N -TIGR03181 2.0 1.0 0.5945 0.3368 0.6105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4195942 4197196 -1 # ID=1_3760|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4213271 4214438 -1 # ID=1_3775|Type=CDS|transl_table=11] PDH_E1_alph_x: pyruvate dehydrogenase (acetyl-transferring) E1 component, alpha subunit -TIGR01311 2.0 1.0 0.7691 0.6474 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|544193 545717 1 # ID=1_469|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1778725 1780264 1 # ID=1_1621|Type=CDS|transl_table=11] glycerol_kin: glycerol kinase -TIGR00575 2.0 1.0 0.3226 0.8263 0.9368 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5978784 5980992 1 # ID=1_5425|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8337388 8339491 -1 # ID=1_7431|Type=CDS|transl_table=11] dnlj: DNA ligase, NAD-dependent -TIGR00418 2.0 1.0 0.3889 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1636965 1638942 -1 # ID=1_1491|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4153188 4154442 1 # ID=1_3721|Type=CDS|transl_table=11] thrS: threonine--tRNA ligase -TIGR00057 2.0 1.0 0.6181 0.5842 0.9316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5832393 5833041 1 # ID=1_5293|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8173118 8173739 -1 # ID=1_7269|Type=CDS|transl_table=11] TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family -TIGR01263 2.0 1.0 0.609 0.2579 0.3579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3178619 3179765 -1 # ID=1_2885|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3541950 3543027 -1 # ID=1_3182|Type=CDS|transl_table=11] 4HPPD: 4-hydroxyphenylpyruvate dioxygenase -TIGR00465 2.0 1.0 0.1928 0.9158 0.9526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6005642 6006641 1 # ID=1_5445|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7947902 7948901 -1 # ID=1_7068|Type=CDS|transl_table=11] ilvC: ketol-acid reductoisomerase -TIGR01828 2.0 1.0 0.2247 0.3737 0.3947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|197220 199917 1 # ID=1_173|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2684903 2687633 -1 # ID=1_2452|Type=CDS|transl_table=11] pyru_phos_dikin: pyruvate, phosphate dikinase -TIGR01292 2.0 1.0 0.4096 0.8684 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4280582 4281551 -1 # ID=1_3833|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7605260 7606241 -1 # ID=1_6752|Type=CDS|transl_table=11] TRX_reduct: thioredoxin-disulfide reductase -TIGR00180 3.0 1.0 0.4697 0.8579 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4278314 4279181 1 # ID=1_3830|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|130086 131214 1 # ID=2_7896|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|222644 223790 1 # ID=2_7984|Type=CDS|transl_table=11] parB_part: ParB/RepB/Spo0J family partition protein -TIGR01296 2.0 1.0 0.4279 0.7211 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2870835 2871858 1 # ID=1_2601|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3993329 3994418 -1 # ID=1_3558|Type=CDS|transl_table=11] asd_B: aspartate-semialdehyde dehydrogenase -TIGR02227 3.0 1.0 1.1572 0.5579 0.9789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6099895 6100675 1 # ID=1_5529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6101640 6102651 1 # ID=1_5531|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6102755 6103532 1 # ID=1_5532|Type=CDS|transl_table=11] sigpep_I_bact: signal peptidase I -TIGR00232 2.0 1.0 0.3575 0.8263 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2066712 2068800 1 # ID=1_1898|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7400591 7402688 -1 # ID=1_6584|Type=CDS|transl_table=11] tktlase_bact: transketolase -TIGR00233 2.0 1.0 0.7402 0.7211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3691373 3692384 1 # ID=1_3284|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5271518 5272538 1 # ID=1_4770|Type=CDS|transl_table=11] trpS: tryptophan--tRNA ligase -TIGR03160 2.0 1.0 0.3864 0.4474 0.5474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1662891 1666530 -1 # ID=1_1516|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2338273 2339347 1 # ID=1_2138|Type=CDS|transl_table=11] cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase -SHMT 4.0 1.0 0.8787 0.5842 0.9474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5269285 5270731 1 # ID=1_4768|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5833805 5835062 1 # ID=1_5295|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5955946 5957209 -1 # ID=1_5401|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7560697 7561891 1 # ID=1_6719|Type=CDS|transl_table=11] PF00464.15: Serine hydroxymethyltransferase -TIGR02133 2.0 1.0 0.6088 0.6895 0.8526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|620366 620879 -1 # ID=1_538|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2854111 2854597 -1 # ID=1_2588|Type=CDS|transl_table=11] RPI_actino: ribose 5-phosphate isomerase -TIGR02138 2.0 1.0 0.3956 0.7895 0.9263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4555527 4556538 -1 # ID=1_4078|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7576035 7577847 -1 # ID=1_6734|Type=CDS|transl_table=11] phosphate_pstC: phosphate ABC transporter, permease protein PstC -TIGR00247 2.0 1.0 0.3281 0.7526 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1201485 1202247 -1 # ID=1_1100|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1600713 1602462 -1 # ID=1_1459|Type=CDS|transl_table=11] TIGR00247: conserved hypothetical protein, YceG family -TIGR01135 2.0 1.0 0.4388 0.7789 0.9842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3043785 3045603 1 # ID=1_2749|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5153333 5155181 1 # ID=1_4673|Type=CDS|transl_table=11] glmS: glutamine-fructose-6-phosphate transaminase (isomerizing) -Cpn10 2.0 1.0 0.519 0.6211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3153869 3154226 -1 # ID=1_2859|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5172736 5173045 1 # ID=1_4694|Type=CDS|transl_table=11] PF00166.17: Chaperonin 10 Kd subunit -TIGR01428 2.0 1.0 0.5276 0.2105 0.2789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|425290 425983 1 # ID=1_362|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3808428 3809106 -1 # ID=1_3396|Type=CDS|transl_table=11] HAD_type_II: haloacid dehalogenase, type II -Ribosomal_S14 2.0 1.0 0.5099 0.6105 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3791411 3791717 1 # ID=1_3381|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5134359 5134545 1 # ID=1_4648|Type=CDS|transl_table=11] PF00253.17: Ribosomal protein S14p/S29e -TIGR01490 4.0 2.0 0.9067 0.2526 0.8316 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3673972 3674866 1 # ID=1_3272|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3933751 3934558 1 # ID=1_3504|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|239675 240374 1 # ID=2_8002|Type=CDS|transl_table=11; NC_003903.1 Streptomyces coelicolor A3(2) plasmid SCP1, complete sequence|-|-|loc|249460 250255 1 # ID=2_8012|Type=CDS|transl_table=11] HAD-SF-IB-hyp1: HAD hydrolase, family IB -TIGR03356 5.0 2.0 1.4956 0.2105 0.4526 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1116446 1117826 1 # ID=1_1017|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2728979 2730326 1 # ID=1_2489|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3054669 3056109 1 # ID=1_2758|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7324810 7326169 1 # ID=1_6529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8380678 8382118 1 # ID=1_7467|Type=CDS|transl_table=11] BGL: beta-galactosidase -TIGR00204 2.0 1.0 0.3053 0.8105 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6594925 6596854 1 # ID=1_5942|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7525612 7527583 1 # ID=1_6688|Type=CDS|transl_table=11] dxs: 1-deoxy-D-xylulose-5-phosphate synthase -TIGR01179 2.0 1.0 0.6237 0.6947 0.9211 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3257699 3258680 1 # ID=1_2945|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3437661 3438627 -1 # ID=1_3092|Type=CDS|transl_table=11] galE: UDP-glucose 4-epimerase GalE -TIGR01031 2.0 1.0 0.4408 0.7316 0.9579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|457483 457654 1 # ID=1_393|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6069793 6069967 1 # ID=1_5503|Type=CDS|transl_table=11] rpmF_bact: ribosomal protein bL32 -TIGR00105 3.0 1.0 0.6939 0.6053 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1210321 1210594 1 # ID=1_1107|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790677 3790932 -1 # ID=1_3378|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5830019 5830244 1 # ID=1_5290|Type=CDS|transl_table=11] L31: ribosomal protein bL31 -TIGR00674 2.0 1.0 0.6145 0.7737 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2048211 2049129 1 # ID=1_1875|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6266752 6267652 1 # ID=1_5674|Type=CDS|transl_table=11] dapA: 4-hydroxy-tetrahydrodipicolinate synthase -TIGR01515 2.0 1.0 0.2643 0.8105 0.8579 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5914594 5916919 -1 # ID=1_5371|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8143093 8145319 -1 # ID=1_7243|Type=CDS|transl_table=11] branching_enzym: 1,4-alpha-glucan branching enzyme -TIGR01513 2.0 1.0 0.2556 0.9053 0.9737 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|161236 162553 1 # ID=1_137|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3166795 3168142 1 # ID=1_2875|Type=CDS|transl_table=11] NAPRTase_put: nicotinate phosphoribosyltransferase -TIGR00773 3.0 1.0 0.6807 0.4263 0.6895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|16069 17302 -1 # ID=1_13|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3943389 3944814 1 # ID=1_3510|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8650205 8651438 1 # ID=1_7726|Type=CDS|transl_table=11] NhaA: Na+/H+ antiporter NhaA -TIGR01430 5.0 2.0 1.34 0.3158 0.7263 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2745001 2746024 -1 # ID=1_2504|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5068591 5069623 -1 # ID=1_4578|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5334545 5335736 1 # ID=1_4831|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6161551 6162613 -1 # ID=1_5593|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8077470 8078550 1 # ID=1_7179|Type=CDS|transl_table=11] aden_deam: adenosine deaminase -TIGR02891 2.0 1.0 0.9994 0.4474 0.8474 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2316757 2318494 -1 # ID=1_2119|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8041765 8043442 1 # ID=1_7145|Type=CDS|transl_table=11] CtaD_CoxA: cytochrome c oxidase, subunit I -TIGR00079 3.0 2.0 0.7097 0.3579 0.9421 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1282581 1283121 -1 # ID=1_1169|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4977868 4978495 -1 # ID=1_4494|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5680106 5680757 1 # ID=1_5153|Type=CDS|transl_table=11] pept_deformyl: peptide deformylase -TIGR01023 3.0 1.0 0.6482 0.5737 0.9895 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|612155 612320 -1 # ID=1_529|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3790938 3791103 -1 # ID=1_3379|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5061598 5061763 1 # ID=1_4569|Type=CDS|transl_table=11] rpmG_bact: ribosomal protein bL33 -TIGR01412 2.0 1.0 0.7398 0.4105 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2445704 2446967 1 # ID=1_2236|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4363347 4364685 -1 # ID=1_3906|Type=CDS|transl_table=11] tat_substr_1: Tat-translocated enzyme -TIGR01245 2.0 1.0 0.1699 0.8579 0.8842 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2308850 2309915 -1 # ID=1_2111|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3521672 3522704 -1 # ID=1_3165|Type=CDS|transl_table=11] trpD: anthranilate phosphoribosyltransferase -TIGR00481 2.0 1.0 0.524 0.6789 0.8684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1923749 1924289 1 # ID=1_1756|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|4413741 4414275 -1 # ID=1_3955|Type=CDS|transl_table=11] TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family -TIGR00485 2.0 1.0 0.4065 0.8316 0.9947 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1396237 1397416 -1 # ID=1_1280|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5092129 5093323 1 # ID=1_4596|Type=CDS|transl_table=11] EF-Tu: translation elongation factor Tu -TIGR00484 2.0 1.0 0.2697 0.9211 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5089829 5091956 1 # ID=1_4595|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7301062 7303123 1 # ID=1_6514|Type=CDS|transl_table=11] EF-G: translation elongation factor G -TIGR01701 2.0 1.0 0.6849 0.3526 0.5105 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2144638 2146918 1 # ID=1_1967|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8342695 8344990 1 # ID=1_7434|Type=CDS|transl_table=11] Fdhalpha-like: oxidoreductase alpha (molybdopterin) subunit -TIGR00212 2.0 1.0 0.3216 0.7947 0.8789 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3669716 3670676 -1 # ID=1_3268|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8156603 8157545 -1 # ID=1_7254|Type=CDS|transl_table=11] hemC: hydroxymethylbilane synthase -TIGR01064 2.0 1.0 0.3924 0.8421 0.9684 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2156336 2157773 -1 # ID=1_1977|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|5892974 5894405 -1 # ID=1_5354|Type=CDS|transl_table=11] pyruv_kin: pyruvate kinase -TIGR01060 2.0 1.0 0.3455 0.9 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|3390540 3391821 -1 # ID=1_3053|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8466853 8468158 -1 # ID=1_7546|Type=CDS|transl_table=11] eno: phosphopyruvate hydratase -TIGR01344 2.0 1.0 0.5307 0.2684 0.4 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|1035207 1036800 1 # ID=1_944|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|6865735 6867358 -1 # ID=1_6175|Type=CDS|transl_table=11] malate_syn_A: malate synthase A -TIGR01534 3.0 1.0 0.6895 0.6737 1.0 [NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|2080142 2081153 -1 # ID=1_1910|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|7832789 7834235 -1 # ID=1_6958|Type=CDS|transl_table=11; NC_003888.3 Streptomyces coelicolor A3(2) chromosome, complete genome|-|-|loc|8325356 8326355 -1 # ID=1_7420|Type=CDS|transl_table=11] GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I diff --git a/inst/extdata/sco_knownhits.tsv b/inst/extdata/sco_knownhits.tsv deleted file mode 100644 index 422e5f6..0000000 --- a/inst/extdata/sco_knownhits.tsv +++ /dev/null @@ -1,48 +0,0 @@ -#Model Description Sequence id evalue bitscore Sequence description -RF0002 AAC3 1890 3.6e-54 182.5 lcl|1890|scaffold_1|source|scaffold_1|loc|2059303_2060092_1 -RF0007 ABC_efflux 2723 4.8e-170 565.4 lcl|2723|scaffold_1|source|scaffold_1|loc|3010976_3014708_-1 -RF0007 ABC_efflux 2422 4.8e-95 318.0 lcl|2422|scaffold_1|source|scaffold_1|loc|2651102_2653031_1 -RF0007 ABC_efflux 1101 8.7e-81 270.9 lcl|1101|scaffold_1|source|scaffold_1|loc|1202479_1204282_-1 -RF0007 ABC_efflux 6925 2e-80 269.8 lcl|6925|scaffold_1|source|scaffold_1|loc|7782654_7784535_1 -RF0007 ABC_efflux 659 4.1e-74 248.9 lcl|659|scaffold_1|source|scaffold_1|loc|740313_742083_-1 -RF0051 Chlor_Efflux_Pump 7569 1.3e-124 415.2 lcl|7569|scaffold_1|source|scaffold_1|loc|8488517_8489696_1 -RF0051 Chlor_Efflux_Pump 7435 5.2e-112 373.7 lcl|7435|scaffold_1|source|scaffold_1|loc|8345037_8346285_1 -RF0054 ClassB 5022 7.4e-26 89.8 lcl|5022|scaffold_1|source|scaffold_1|loc|5533652_5534546_1 -RF0154 vanR 3534 6e-82 273.4 lcl|3534|scaffold_1|source|scaffold_1|loc|3967921_3968617_-1 -RF0155 vanS 3533 3e-88 295.1 lcl|3533|scaffold_1|source|scaffold_1|loc|3966834_3967929_-1 -RF0158 vanX 3540 4e-98 325.8 lcl|3540|scaffold_1|source|scaffold_1|loc|3973353_3973962_1 -PF00044.19 Gp_dh_N 1910 2.1e-61 205.4 lcl|1910|scaffold_1|source|scaffold_1|loc|2080142_2081153_-1 -PF00044.19 Gp_dh_N 7420 1.6e-53 179.9 lcl|7420|scaffold_1|source|scaffold_1|loc|8325356_8326355_-1 -PF00044.19 Gp_dh_N 6958 4.2e-39 133.0 lcl|6958|scaffold_1|source|scaffold_1|loc|7832789_7834235_-1 -PF00183.13 HSP90 7425 1e-116 389.6 lcl|7425|scaffold_1|source|scaffold_1|loc|8329971_8331888_1 -PF00183.13 HSP90 1365 3.8e-07 28.0 lcl|1365|scaffold_1|source|scaffold_1|loc|1494023_1495871_-1 -PF00185.19 OTCace 5905 3.9e-47 159.2 lcl|5905|scaffold_1|source|scaffold_1|loc|6550398_6551406_1 -PF00185.19 OTCace 1447 5.1e-37 126.3 lcl|1447|scaffold_1|source|scaffold_1|loc|1590406_1591387_-1 -PF00204.20 DNA_gyraseB 3818 2.4e-61 205.0 lcl|3818|scaffold_1|source|scaffold_1|loc|4263377_4265462_-1 -PF00204.20 DNA_gyraseB 5753 1.3e-50 170.1 lcl|5753|scaffold_1|source|scaffold_1|loc|6371005_6373129_1 -PF00227.21 Proteasome 1605 2e-38 130.7 lcl|1605|scaffold_1|source|scaffold_1|loc|1758474_1759251_-1 -PF00227.21 Proteasome 1604 1.7e-26 91.8 lcl|1604|scaffold_1|source|scaffold_1|loc|1757648_1758377_-1 -PF00364.17 Biotin_lipoyl 2144 9.1e-46 152.5 lcl|2144|scaffold_1|source|scaffold_1|loc|2345795_2347568_1 -PF00364.17 Biotin_lipoyl 3758 3.8e-23 80.0 lcl|3758|scaffold_1|source|scaffold_1|loc|4193531_4194941_-1 -PF00364.17 Biotin_lipoyl 7037 8.6e-23 78.9 lcl|7037|scaffold_1|source|scaffold_1|loc|7913373_7914627_-1 -PF00364.17 Biotin_lipoyl 2737 8.4e-20 69.3 lcl|2737|scaffold_1|source|scaffold_1|loc|3029141_3031109_1 -PF00364.17 Biotin_lipoyl 3773 5.7e-18 63.4 lcl|3773|scaffold_1|source|scaffold_1|loc|4210795_4212271_-1 -PF00364.17 Biotin_lipoyl 4851 7.4e-17 59.9 lcl|4851|scaffold_1|source|scaffold_1|loc|5355282_5357055_-1 -PF00364.17 Biotin_lipoyl 6203 7.4e-17 59.9 lcl|6203|scaffold_1|source|scaffold_1|loc|6897088_6898861_-1 -PF00364.17 Biotin_lipoyl 505 4.9e-15 54.0 lcl|505|scaffold_1|source|scaffold_1|loc|583522_586897_-1 -PF00364.17 Biotin_lipoyl 4318 1.6e-14 52.4 lcl|4318|scaffold_1|source|scaffold_1|loc|4796696_4798541_1 -PF00364.17 Biotin_lipoyl 1227 7.8e-09 34.2 lcl|1227|scaffold_1|source|scaffold_1|loc|1338247_1339366_-1 -PF00364.17 Biotin_lipoyl 715 4.1e-06 25.4 lcl|715|scaffold_1|source|scaffold_1|loc|796916_797723_1 -PF00364.17 Biotin_lipoyl 5402 2.1e-05 23.2 lcl|5402|scaffold_1|source|scaffold_1|loc|5957223_5957601_-1 -PF00521.15 DNA_topoisoIV 3817 3e-148 493.3 lcl|3817|scaffold_1|source|scaffold_1|loc|4260740_4263335_-1 -PF00521.15 DNA_topoisoIV 5767 7.4e-147 488.7 lcl|5767|scaffold_1|source|scaffold_1|loc|6386423_6388880_-1 -PF01039.17 Carboxyl_trans 5466 1.6e-201 669.0 lcl|5466|scaffold_1|source|scaffold_1|loc|6031664_6033248_1 -PF01039.17 Carboxyl_trans 4856 1.2e-199 662.9 lcl|4856|scaffold_1|source|scaffold_1|loc|5359017_5360610_-1 -PF01039.17 Carboxyl_trans 6216 2e-191 635.7 lcl|6216|scaffold_1|source|scaffold_1|loc|6943672_6945265_1 -PF01039.17 Carboxyl_trans 2736 3.3e-164 546.0 lcl|2736|scaffold_1|source|scaffold_1|loc|3027513_3029130_1 -PF01039.17 Carboxyl_trans 4317 6.6e-139 462.5 lcl|4317|scaffold_1|source|scaffold_1|loc|4795084_4796683_1 -PF01039.17 Carboxyl_trans 2403 2.8e-27 94.4 lcl|2403|scaffold_1|source|scaffold_1|loc|2624025_2625402_1 -PF13599.1 Pentapeptide_4 4206 2.2e-18 64.9 lcl|4206|scaffold_1|source|scaffold_1|loc|4684242_4684947_1 -TIGR02013 TIGR02013 4588 0 1814.6 lcl|4588|scaffold_1|source|scaffold_1|loc|5078060_5081546_1 -TIGR00663 TIGR00663 3822 9e-90 300.1 lcl|3822|scaffold_1|source|scaffold_1|loc|4268712_4269843_-1 -TIGR00663 TIGR00663 7877 6.8e-75 251.1 lcl|7877|scaffold_2|source|scaffold_2|loc|112311_113430_1 From d5189f339040a56eda719e60ffb82ed3058412c5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 15:39:56 +0200 Subject: [PATCH 116/199] Can upload zip files for SEMPI now Former-commit-id: e22ee29ec661afc85876e6b2493b73acf4d50aeb --- R/app_ui.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/app_ui.R b/R/app_ui.R index f6061cc..2682cec 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -124,7 +124,7 @@ app_ui <- function(request) { collapsible = TRUE, closable = TRUE, shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data", accept = ".csv") + "Upload SEMPI 2.0 data", accept = list(".csv", ".zip")) ) ), div( From 2a185571ac672d9ea270ebe374a177c71f983bc9 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 27 May 2022 16:07:07 +0200 Subject: [PATCH 117/199] Fixed SEMPI archive not loading Former-commit-id: c52a3cf16d5d8acfa0c4339dc6c4a95d0251b1a2 --- R/app_server.R | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index f275f4a..8468ead 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -283,14 +283,39 @@ app_server <- function( input, output, session ) { selected = "PRISM") } } - read_sempi <- function(data){ - sempi_data <- data + read_sempi <- function(data, zip=T){ + if (zip==T){ + unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + fl <- "./SEMPI_TracksDB/Tracks.db" + conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) + + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + RSQLite::dbDisconnect(conn) + unlink("./SEMPI_TracksDB", recursive = T) + data <- data %>% + dplyr::filter(trackid==6) + + types <- sapply(data$name, function(x){ + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) + }) + + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) + colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") + sempi_data$Cluster <- as.numeric(sempi_data$Cluster) + sempi_data$Start <- as.numeric(sempi_data$Start) + sempi_data$Stop <- as.numeric(sempi_data$Stop) + sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) + } else { + sempi_data <- data + } res_validation <- validate_basic_input(sempi_data) if (!(res_validation[[1]])){ sempi_data <- NULL return(NULL) } else{ - sempi_data <- res_validation[[2]] + sempi_data <- res_validation[[2]] } sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 @@ -539,7 +564,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$sempi_sco,{ sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") sempi_data <- read.csv(sempi_file) - read_sempi(sempi_data) + read_sempi(sempi_data, zip = F) }) shiny::observeEvent(input$arts_sco, { @@ -626,9 +651,12 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$sempi_data,{ - - sempi_data <- read.csv(input$sempi_data$datapath) - read_sempi(sempi_data) + if (input$sempi_data$type=="text/csv"){ + sempi_data <- read.csv(input$sempi_data$datapath) + read_sempi(sempi_data, zip = F) + } else { + read_sempi(input$sempi_data$datapath, zip = T) + } }) From d32b36666e378eff3729be198a4fecb7eaad8844 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 28 May 2022 09:44:24 +0200 Subject: [PATCH 118/199] Added app.R to upload to shinyapps.io Former-commit-id: 77cf0e49d32774b3d869a8198f0c7f29a30ab618 --- app.R | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 app.R diff --git a/app.R b/app.R new file mode 100644 index 0000000..3fd5618 --- /dev/null +++ b/app.R @@ -0,0 +1,7 @@ +# Launch the ShinyApp (Do not remove this comment) +# To deploy, run: rsconnect::deployApp() +# Or use the blue button on top of this file + +pkgload::load_all(export_all = FALSE,helpers = FALSE,attach_testthat = FALSE) +options( "golem.app.prod" = TRUE) +BGCViz::run_app() # add parameters here (if any) From b44c33b62211cba86473bc63143e9bdedb7fd108 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 28 May 2022 09:45:24 +0200 Subject: [PATCH 119/199] Begin to add tests Former-commit-id: 59d0cb5b23d31da7723157e1d14fdd26dfac5b65 --- .gitignore | 1 + dev/02_dev.R | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2ce0104..f9ca51f 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,4 @@ po/*~ # R package: bookdown caching files /*_files/ +inst/doc diff --git a/dev/02_dev.R b/dev/02_dev.R index 73a4aa6..68b2b32 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -75,7 +75,7 @@ golem::add_utils( "helpers" ) ## Tests ---- ## Add one line by test you want to create -#usethis::use_test( "app" ) +usethis::use_test("fct_biocircos") # Documentation From d9aac36933a2cdedcb12bbce0b1f8bdd5ad23b14 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Wed, 1 Jun 2022 19:27:09 +0200 Subject: [PATCH 120/199] R cmd check 'no visible bindings' error resolved Former-commit-id: 16532af8cf9cc413f08219394bfdcedfe184216e --- DESCRIPTION | 4 +- R/app_server.R | 58 ++++++++++++-------- R/fct_filtering.R | 12 ++++ R/fct_format_transformation.R | 21 ++++--- R/fct_group_table.R | 4 +- R/fct_helpers.R | 8 +-- R/fct_reading_processing.R | 1 + R/mod_barplot_rank.R | 4 ++ R/mod_deep_reference_2.R | 13 ++++- R/mod_deepbgc_plots.R | 6 +- R/mod_download.R | 2 +- R/mod_gecco_plots.R | 5 ++ R/mod_group_table.R | 2 +- R/utils-pipe.R | 1 + R/utils_deep_reference.R | 40 +++++++++++++- R/utils_helpers.R | 10 +++- docs/BGCViz_renaming_and_coloring_options.md | 21 ++++++- docs/Input_files_options.md | 58 +++++++++++--------- docs/Installation.md | 36 +++++------- docs/Introduction.md | 4 +- man/pipe.Rd | 20 ------- 21 files changed, 211 insertions(+), 119 deletions(-) delete mode 100644 man/pipe.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 63e772e..6fc2f31 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -14,10 +14,8 @@ Imports: ggplot2, golem (>= 0.3.1), magrittr, - pkgload, plotly, plyr, - processx, rjson, RSQLite, shiny (>= 1.7.1), @@ -40,6 +38,8 @@ Suggests: knitr, rmarkdown, spelling, + pkgload, + processx, testthat (>= 3.0.0) Config/testthat/edition: 3 Language: en-US diff --git a/R/app_server.R b/R/app_server.R index 8468ead..25161ef 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -6,6 +6,8 @@ #' @noRd app_server <- function( input, output, session ) { # Your application server logic + # Silence R CMD note + Start <- Stop <- Core <- Chr <- NULL ##--------------------------------------------------------------- ## Some lists of reactive values to listen later - ##--------------------------------------------------------------- @@ -62,8 +64,8 @@ app_server <- function( input, output, session ) { ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - vals$rename_data <- read.csv(rename_file) - rename_data <- read.csv(rename_file) + vals$rename_data <- utils::read.csv(rename_file) + rename_data <- utils::read.csv(rename_file) coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") @@ -183,6 +185,11 @@ app_server <- function( input, output, session ) { return(anti_data) } read_gecco <- function(data){ + # Silence R CMD note + polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- + ripp_probability <- NULL # Add chromosome column gecco_data <- data @@ -284,8 +291,10 @@ app_server <- function( input, output, session ) { } } read_sempi <- function(data, zip=T){ + # Silence R CMD note + trackid <- NULL if (zip==T){ - unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) fl <- "./SEMPI_TracksDB/Tracks.db" conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) @@ -349,13 +358,15 @@ app_server <- function( input, output, session ) { } } read_arts_archive <- function(archive, zip = T){ + # Silence R CMD note + Start <- Core <- NULL if (zip == T){ - unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) - known_hits <- read.delim("./ARTS_tables/knownhits.tsv") - dupl_table <- read.delim("./ARTS_tables/duptable.tsv") + utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) + known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") + dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") unlink("./ARTS_tables", recursive = T) locations <- sapply(known_hits$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) + utils::tail(stringr::str_split(x , "\\|")[[1]], 1) }) start <- sapply(locations, function(x){ @@ -427,7 +438,7 @@ app_server <- function( input, output, session ) { arts_data$Cluster <- arts_data$ID vals$arts_data <- arts_data } else { - vals$arts_data <- read.csv(archive) + vals$arts_data <- utils::read.csv(archive) } vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") @@ -450,6 +461,7 @@ app_server <- function( input, output, session ) { } } read_deep <- function(data){ + polyketide <- nrp <- NULL # Silence R CMD error res_validation <- validate_deep_input(data) if (!(res_validation[[1]])){ deep_data <- NULL @@ -491,6 +503,7 @@ app_server <- function( input, output, session ) { } } read_rre <- function(data){ + Gene.name <- Coordinates <- NULL # Silence R CMD error res_validation <- validate_rre_input(data) if (!(res_validation[[1]])){ data <- NULL @@ -539,18 +552,19 @@ app_server <- function( input, output, session ) { } } + #---------------------------------------------------------------- ## Loading and processing of example data - ##---------------------------------------------------------------- shiny::observeEvent(input$anti_sco,{ anti_file <- system.file("extdata", "sco_antismash.csv", package = "BGCViz") - anti_data <- read.csv(anti_file) + anti_data <- utils::read.csv(anti_file) read_antismash(anti_data) }) shiny::observeEvent(input$gecco_sco,{ gecco_file <- system.file("extdata", "sco_gecco.tsv", package = "BGCViz") - gecco_data <- read.delim(gecco_file) + gecco_data <- utils::read.delim(gecco_file) read_gecco(gecco_data) }) @@ -563,27 +577,27 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$sempi_sco,{ sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") - sempi_data <- read.csv(sempi_file) + sempi_data <- utils::read.csv(sempi_file) read_sempi(sempi_data, zip = F) }) shiny::observeEvent(input$arts_sco, { arts_file <- system.file("extdata", "sco_arts.csv", package = "BGCViz") - arts_data <- read.csv(arts_file) + arts_data <- utils::read.csv(arts_file) read_arts_archive(arts_file, zip=F) disable_event_logic() }) shiny::observeEvent(input$deep_sco, { deep_file <- system.file("extdata", "sco_deep.tsv", package = "BGCViz") - data <- read.delim(deep_file) + data <- utils::read.delim(deep_file) read_deep(data) }) shiny::observeEvent(input$rre_sco, { # Read data rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") - data <- read.delim(rre_file) + data <- utils::read.delim(rre_file) read_rre(data) }) @@ -595,7 +609,7 @@ app_server <- function( input, output, session ) { disable_event_logic() # Read data if (input$anti_data$type=="text/csv"){ - anti_data <- read.csv(input$anti_data$datapath) + anti_data <- utils::read.csv(input$anti_data$datapath) }else{ data <- rjson::fromJSON(file = input$anti_data$datapath) types <- sapply(data$records, function(y){ @@ -652,7 +666,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$sempi_data,{ if (input$sempi_data$type=="text/csv"){ - sempi_data <- read.csv(input$sempi_data$datapath) + sempi_data <- utils::read.csv(input$sempi_data$datapath) read_sempi(sempi_data, zip = F) } else { read_sempi(input$sempi_data$datapath, zip = T) @@ -662,7 +676,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$gecco_data,{ - gecco_data <- read.delim(input$gecco_data$datapath) + gecco_data <- utils::read.delim(input$gecco_data$datapath) read_gecco(gecco_data) }) @@ -684,7 +698,7 @@ app_server <- function( input, output, session ) { # Read data if (input$prism_data$type == "text/csv"){ - prism_data <- read.csv(input$prism_data$datapath) + prism_data <- utils::read.csv(input$prism_data$datapath) read_prism(prism_data, json=F) } else{ data <- rjson::fromJSON(file = input$prism_data$datapath) @@ -695,14 +709,14 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$deep_data, { - data <- read.delim(input$deep_data$datapath) + data <- utils::read.delim(input$deep_data$datapath) read_deep(data) }) shiny::observeEvent(input$rre_data, { # Read data - rre_data <- read.delim(input$rre_data$datapath) + rre_data <- utils::read.delim(input$rre_data$datapath) read_rre(rre_data) }) @@ -1194,7 +1208,7 @@ app_server <- function( input, output, session ) { # Read the uploaded renaming scheme csv shiny::observeEvent(input$rename_data,{ - rename_data <- read.csv(input$rename_data$datapath) + rename_data <- utils::read.csv(input$rename_data$datapath) vals$rename_data <- rename_data coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] @@ -1539,7 +1553,7 @@ app_server <- function( input, output, session ) { } index2 <- index2 +1 } - write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) + utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) } index <- index +1 } diff --git a/R/fct_filtering.R b/R/fct_filtering.R index dcfff68..83dfb19 100644 --- a/R/fct_filtering.R +++ b/R/fct_filtering.R @@ -6,6 +6,12 @@ #' #' @noRd filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,score_d_input,domains_filter,biodomain_filter,gene_filter){ + # Silence R CMD note + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Cluster_type <- + num_domains <- num_bio_domains <- + num_proteins <- NULL score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) @@ -56,6 +62,12 @@ filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,sc #' #' @noRd filter_gecco <- function(gecco_data,score_cluster_gecco,score_average_gecco,domains_filter_gecco,prot_filter_gecco){ + # Silence R CMD note + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Type2 <- + Cluster_type <- score_a <- score_c <- + num_domains <- num_prot <- NULL score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) if (is.null(score_cluster_gecco)){ diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index e4b33c9..9d3fc7e 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -10,7 +10,8 @@ #' #' @export sempi_to_csv <- function(project_archive, write_to = getwd()){ - unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) + trackid <- NULL # Silence R CMD note + utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) fl <- paste0(stringr::str_extract(write_to, ".*/"),"/SEMPI_TracksDB/Tracks.db") conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) @@ -32,7 +33,7 @@ sempi_data$Cluster <- as.numeric(sempi_data$Cluster) sempi_data$Start <- as.numeric(sempi_data$Start) sempi_data$Stop <- as.numeric(sempi_data$Stop) sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) -write.csv(sempi_data, paste0(write_to,"/sempi.csv"), row.names = FALSE) +utils::write.csv(sempi_data, paste0(write_to,"/sempi.csv"), row.names = FALSE) } #' prism_to_csv @@ -74,7 +75,7 @@ end <- sapply(data$prism_results$clusters, function(x){ prism_data <- data.frame(cbind(start, end, types)) prism_data <- prism_data %>% dplyr::transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) -write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) +utils::write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) } @@ -89,6 +90,7 @@ write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) #' #' @export antismash_to_csv <- function(file, write_to = getwd()){ + Start <- Stop <- NULL # To silence R CMD notes data <- rjson::fromJSON(file = file) types <- sapply(data$records, function(y){ lapply(y$features, function(x){ @@ -132,7 +134,7 @@ antismash_to_csv <- function(file, write_to = getwd()){ anti_data$Cluster <- as.numeric(anti_data$Cluster) anti_data$Start <- as.numeric(anti_data$Start) anti_data$Stop <- as.numeric(anti_data$Stop) - write.csv(anti_data, paste0(write_to,"/antismash.csv"), row.names = FALSE) + utils::write.csv(anti_data, paste0(write_to,"/antismash.csv"), row.names = FALSE) } #' arts_to_csv @@ -146,11 +148,12 @@ antismash_to_csv <- function(file, write_to = getwd()){ #' #' @export arts_to_csv <- function(project_archive, write_to = getwd()){ - unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) - known_hits <- read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/knownhits.tsv")) - dupl_table <- read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/duptable.tsv")) + Start <- NULL # Silence R CMD note + utils:: unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) + known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/knownhits.tsv")) + dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/duptable.tsv")) locations <- sapply(known_hits$Sequence.description, function(x){ - tail(stringr::str_split(x , "\\|")[[1]], 1) + utils::tail(stringr::str_split(x , "\\|")[[1]], 1) }) start <- sapply(locations, function(x){ @@ -220,5 +223,5 @@ arts_to_csv <- function(project_archive, write_to = getwd()){ dplyr::arrange(Start) arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID - write.csv(arts_data, paste0(write_to,"/arts.csv"), row.names = FALSE) + utils::write.csv(arts_data, paste0(write_to,"/arts.csv"), row.names = FALSE) } diff --git a/R/fct_group_table.R b/R/fct_group_table.R index 8b2689e..f6bbe07 100644 --- a/R/fct_group_table.R +++ b/R/fct_group_table.R @@ -6,8 +6,8 @@ #' #' @noRd refine_unique <- function(data){ - n <- tail(data, n=1) - data <- head(data, -1) + n <- utils::tail(data, n=1) + data <- utils::head(data, -1) n_list <- stringr::str_split(n, ",") out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) res <- sapply(out, function(x){ diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 1a4231f..26895e1 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -89,8 +89,8 @@ hybrid_col <- function(data){ #' @export get_defaults <- function(write_to = getwd()){ rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - option_data <- read.csv(rename_file) - write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) + option_data <- utils::read.csv(rename_file) + utils::write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) } #' set_defaults #' @@ -102,6 +102,6 @@ get_defaults <- function(write_to = getwd()){ #' @export set_defaults <- function(csv_file){ rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - option_data <- read.csv(csv_file) - write.csv(option_data, rename_file, row.names = FALSE) + option_data <- utils::read.csv(csv_file) + utils::write.csv(option_data, rename_file, row.names = FALSE) } \ No newline at end of file diff --git a/R/fct_reading_processing.R b/R/fct_reading_processing.R index 73ed7ee..83dea6e 100644 --- a/R/fct_reading_processing.R +++ b/R/fct_reading_processing.R @@ -52,6 +52,7 @@ fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ #' #' @noRd process_prism_json_suppl <- function(data){ + Start <- NULL # Silence R CMD note types <- sapply(data$prism_results$clusters, function(x){ tolower(x$type) }) diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R index 9e9d919..7789afa 100644 --- a/R/mod_barplot_rank.R +++ b/R/mod_barplot_rank.R @@ -32,6 +32,10 @@ mod_barplot_rank_ui <- function(id){ mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr){ moduleServer( id, function(input, output, session){ ns <- session$ns + # Silence R CMD note + Cluster <- Count <- Type <- + Start <- Start <- Stop <- + Label <- NULL output$barplot_rank <- plotly::renderPlotly({ shiny::req(vals$data_upload_count >1) shiny::req(vals$need_filter == F) diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index d308f72..406c2f4 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -33,8 +33,17 @@ mod_deep_reference_2_ui <- function(id){ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ moduleServer( id, function(input, output, session){ ns <- session$ns - - output$deep_reference_2 <- plotly::renderPlotly({ + # Silence R CMD note + x <- y <- yend <- xend <- + ID <- Software <- Chr <- + Type2 <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- + activity <- Score <- E_value <- P_value <- + RRE_start <- RRE_stop <- Probability <- + Name <- Full_name <- Hit <- Core <- + Bitscore <- Count <- Model <- Num_proteins <- + Num_domains <- Average_p <- Max_p <- NULL + output$deep_reference_2 <- plotly::renderPlotly({ shiny::req(vals$can_plot_deep_ref_2 == T) vals$can_plot_deep_ref_2 == F rename_y_axis <- shiny::isolate(vals$rename_y_axis) diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 7fb5629..0bcc4c0 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -62,7 +62,11 @@ mod_deepbgc_plots_ui <- function(id){ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c){ moduleServer( id, function(input, output, session){ ns <- session$ns - + # Silence R CMD note + Start <- Stop <- Source <- + Quantity <- Score <- Novelty_rate <- + Annotation_rate <- Skip_rate <- Rates_data <- + Rates <- NULL output$deep_barplot <- shiny::renderPlot({ shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) diff --git a/R/mod_download.R b/R/mod_download.R index f93acaf..af7b11b 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -48,7 +48,7 @@ mod_download_server <- function(id){ #create the zip file from flst vector group_by_script <- system.file("scripts", "group.py", package = "BGCViz") flst <- c(flst, group_by_script) - zip(file, flst) }, + utils::zip(file, flst) }, contentType = "application/zip" ) }) } diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index c068bb2..5524086 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -69,6 +69,11 @@ mod_gecco_plots_ui <- function(id){ mod_gecco_plots_server <- function(id, vals,score_average_gecco,score_cluster_gecco){ moduleServer( id, function(input, output, session){ ns <- session$ns + # Silence R CMD note + Start <- Stop <- Source <- Quantity <- + Score <- Novelty_rate <- Annotation_rate <- + Skip_rate <- Skip_rate <- Rates_data <- + Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 94a6872..152a577 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -116,7 +116,7 @@ mod_group_table_server <- function(id,vals,data_uploads,soft_names,soft_namings, data_to_add <- sort(unique(add_inters[[name]])) data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") } - write.csv(data, "group_by.csv", row.names = F) + utils::write.csv(data, "group_by.csv", row.names = F) data }) }) diff --git a/R/utils-pipe.R b/R/utils-pipe.R index 89692f9..9a4cb57 100644 --- a/R/utils-pipe.R +++ b/R/utils-pipe.R @@ -10,4 +10,5 @@ #' @param lhs A value or the magrittr placeholder. #' @param rhs A function call using the magrittr semantics. #' @return The result of calling `rhs(lhs)`. +#' @noRd NULL diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index a2484dc..4fbade2 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -6,6 +6,9 @@ #' #' @noRd geom_anti <- function(data, rre_more){ + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } @@ -17,7 +20,11 @@ ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color #' #' @noRd geom_prism <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } #' geom_deep #' @@ -27,6 +34,11 @@ geom_prism <- function(data,rre_more){ #' #' @noRd geom_deep <- function(data,rre_more){ + # Silence R CMD note + x <- y <- xend <- yend <- Type <- + Software <- ID <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- + activity <- NULL ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, deepbgc_score = deepbgc_score,activity = activity ),size =3) @@ -39,6 +51,11 @@ geom_deep <- function(data,rre_more){ #' #' @noRd geom_rre <- function(data, rre_more){ + # Silence R CMD note + x <- y <- xend <- yend <- Type <- + Score <- Software <- ID <- Start <- + Stop <- Type <- E_value <- P_value <- RRE_start <- + RRE_stop <- Probability <- NULL if (rre_more == T){ ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, @@ -58,7 +75,10 @@ geom_rre <- function(data, rre_more){ #' #' @noRd geom_sempi <- function(data,rre_more){ - + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- + Type <- NULL ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } @@ -70,6 +90,10 @@ geom_sempi <- function(data,rre_more){ #' #' @noRd geom_prism_supp <- function(data,rre_more){ + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop<- Type <- Name <- + Full_name <- Score <- NULL ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score), size = 3) @@ -82,7 +106,13 @@ geom_prism_supp <- function(data,rre_more){ #' #' @noRd geom_arts <- function(data,rre_more){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + # Silence R CMD error + x <- y <- xend <- yend <- Type2 <- + Start <- Stop <- Type <- ID <- Hit <- + Software <- Core <- E_value <- + Bitscore <- Count <- Model <- NULL + ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) } #' geom_gecco @@ -93,6 +123,10 @@ geom_arts <- function(data,rre_more){ #' #' @noRd geom_gecco <- function(data,rre_more){ + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- Software <- + ID <- Start <- Stop <- Type <- Num_proteins <- + Num_domains <- Average_p <- Max_p <- NULL ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) diff --git a/R/utils_helpers.R b/R/utils_helpers.R index 4cea6e7..f3ee5da 100644 --- a/R/utils_helpers.R +++ b/R/utils_helpers.R @@ -8,4 +8,12 @@ is.integer0 <- function(x) { is.integer(x) && length(x) == 0L -} \ No newline at end of file +} +#' %>% +#' +#' @description Pipe symbol from magrittr package +#' +#' @return %>% +#' +#' @noRd + diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index 213e305..2db8e54 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -3,7 +3,7 @@ The user can explicitly change the renaming scheme and coloring options. # Renaming -The renaming schema is stored is a csv file, called rename.csv. This file looks like this: +The renaming schema is stored is a csv file, called rename.csv (/inst/extdata/rename.csv). This file looks like this: | Code | Group | Group_color | Color | Vacant_colors | Hierarchy | | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | @@ -39,4 +39,21 @@ The "Vacant_color" column is not used in any analysis. The logic behind it is t # Hierarchy -The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy-based' mode. More on Biocircos link coloring is available [here](Logic_of_the_output.md#biocircos-plot) \ No newline at end of file +The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy-based' mode. More on Biocircos link coloring is available [here](Logic_of_the_output.md#biocircos-plot) + +# Changing default settings + +**Changing default settings is possible only with local [installation](Installation.md), with R console** + +Default settings can be changed using `get_defaults` and `set_defaults` functions within BGCViz package. + +We reccomend to download the csv file with current settings with `get_defaults` first: + +```R +BGCViz::get_defaults() +``` +Which will write "BGCViz_options.csv" file in current working directory +After modifications, the file can be uploaded back to a package directory: +```R +BGCViz::set_defaults("modified_BGCViz_options.csv") +``` \ No newline at end of file diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index 54e09dc..bd7136c 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -1,22 +1,21 @@ # Input files -We tried to make integration of various services as seemless as possible. However, due to computation limitation of shiny server we sugest to transform at least antismash output json file to the csv dataframe. More information is below. -All the example data is in the `/example_data` directory. - +We tried to make integration of various services as seemless as possible. However, this is comes with a cost of rather long uplod times of raw data. Therefore we suggest install an application locally (more [here](Installation.md)) # Antismash There are two options for antismash data upload: -1. Raw output json file. You should download all your antismash results from the server, if the run was remote, and in the root results directory find the json file. Then be sure that box, which states "My AntiSMASH data is a dataframe, not json results file from antismash" is UNTICKED before actual upload. -****We highly suggest to use this option only with local installation**** - -2. The csv format file. This file can be easily generated from the json file, using antismash.R script in the /scripts directory. Before be sure that all necessary packages are installed (more [here](Installation#packages-for-input-files-conversion)). Then just run the following command from the command line: - ```R - Rscript antismash.R - ``` -Script should generate the the csv file in the /scripts directory. +1. Raw output json file. You should download all your antismash results from the server, if the run was remote, and in the root results directory find the json file. + +2. The csv format file. This file can be easily generated from the json file, using `BGCViz::antismash_to_csv()` function of a package after it's [installation](Installation.md) as following: + +```R +BGCViz::antismash_to_csv(file="antismash.json") +``` + +Script should generate the the csv file in the current directory The structure of the csv file is the following: ![anti_data](/images/antismash_data.png) -File itself can be created manually from the antismash results. +File itself also can be created manually from the antismash results. **Note: If the region contain several components we are expecting the double underscore delimiter between them "__". Alternatively they will not be splited for renaming and will maintened as a one type cluster. See more on renaming [here](BGCViz_renaming_and_coloring_options.md)** @@ -24,29 +23,33 @@ File itself can be created manually from the antismash results. # PRISM Similarly to the AntiSMASH, there are two options for the PRISM input: -1. Use the json report file. It can be downloaded after the PRISM run. Because of the small size of json output file, it can be directly uploaded to the BGCViz. Be sure the checkbox "My PRISM data is a dataframe, not json results file" is UNTICKED. **We are expecting that the run was made on version >= 4.4.5 of the PRISM. If earlier version was used, please provide the csv instead of json one.** -2. The csv format file. Identical to one, described in the [Antismash](#antismash) section above. Can also be created manually. The command for generation from json to csv format is the following: +1. Use the json report file. It can be downloaded after the PRISM run. **We are expecting that the run was made on version >= 4.4.5 of the PRISM. If earlier version was used, please provide the csv instead of json one.** +2. The csv format file. Identical to one, described in the [Antismash](#antismash) section above. Can also be created manually. The function to generate csv file from json one is: ```R - Rscript prism.R +BGCViz::prism_to_csv(file="prism.json") ``` -**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Data manipulation option" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "PRISM_SUPPORT"** +**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM is used. You can hide them from analysis in Global options, under "Prism supplement+ARTS options".Chromosome is named "PRISM-Supp"** **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of PRISM, but the result plot will label these as "PRISM"** # SEMPI -SEMPI data can be used only as a csv file in the format, described in the [Antismash](#antismash) section above. Can be created manually. -After SEMPI run please download all the results. -The db file, script can transform to the .csv file is the `/genome_browser/main/Tracks.db` one, from the SEMPI results folder. +SEMPI data can be uploaded as: +1. Zip archive (whole project), downloaded directly from SEMPI. +2. Csv file in the format, described in the [Antismash](#antismash) section above. Can be created manually. After SEMPI run please download all the results. +Then you can use the following function: ```R - Rscript sempi.R +BGCViz::sempi_to_csv(project_archive="project.zip") ``` +SEMPI project archive can be downloaded from the site with "Project" button: + +![sempi_res_export](/images/sempi_res_export.png) **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** # DeepBGC -We are expecting the default DeepBGC tsv output file. Please see the example in /example_data folder +We are expecting the default DeepBGC tsv output file. Please see the example in inst/extdata folder # RRE-Finder We the expecting the modified default txt results file from RRE-Finder, which is in the format as below (in case of exploratory mode): @@ -68,9 +71,14 @@ The expected list of modifications: **Please be sure that any other data from Gene_name column is deleted. The data itself is divided by double underscores (should be made manually) into three clean parts. Please delete all other data in Gene_name column (product names or gene names), if any** # ARTS -There are two uploads for the ARTS data. And only two files are provided the data will be included in the analysis. Firstly, download the ARTS results (all results). -1. The first expected tsv file is knownhits.tsv (holding the hits to existing resisntance models) in the `/tables/knownhits.tsv` -2. The second input is duptable.tsv (holding the duplicated housekeeping genes data) in the `/tables/duptable.tsv` +ARTS data can be uploaded as: +1. Zip arhive of ARTS results +2. Csv file, which was extracted from zip zrchive, using the following function: +```R +BGCViz::arts_to_csv(project_archive="arts.zip") +``` +Zip archive should be downloaded from ARTS Export tab (Zip all files): +![arts_res_server.png](/images/arts_res_export.png) # GECCO -We are expecting the default GECCO tsv output file. Please see the example in /example_data folder \ No newline at end of file +We are expecting the default GECCO tsv output file. Please see the example in inst/extdata folder \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md index f8b47bf..33c5696 100755 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -1,35 +1,27 @@ # Installation -The app itself is written in R and is available as a [shiny app server](https://ostash-group.shinyapps.io/BGCViz/) with no istallation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation +The app itself is written in R and is available as a [shiny app server](https://ostash-group.shinyapps.io/BGCViz/) with no installation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation -## Base packages -All packages can be installed via R console in Rstudio via: +## Installation +Install `remotes` package first with R console. (for example via Rstudio) ```R -install.packages(c("BioCircos", "ggplot2", "plotly", "plyr", "tidyverse", "shiny", "DT" ,"rjson", "stringr", "shinyjs", "bslib" )) +install.packages("remotes") ``` -After, to install GenomicRanges package please run +After run the following command in R console: ```R -if (!requireNamespace("BiocManager", quietly = TRUE)) - install.packages("BiocManager") - -BiocManager::install("GenomicRanges") +remotes::install_github("ostash-group/BGCViz") ``` - -If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: - -`conda install r-base rstudio` - -## Packages for input files conversion - -To covert input files from the program's native output format to BGCViz-compatible csv one, a set of R scripts in the /scripts folder is available. They depends on `rjson` library to convert antismash and PRISM data, and `RSQLite` library to covert the SEMPI data. Also common libraries in all three scripts are: `dplyr`, `tidyr`, `stringr`. Therefore one line installation from R console is: +This will install BGCViz as an R package. Running an app is as easy as: ```R -install.packages(c("dplyr", "tidyr", "stringr", "RSQLite", "rjson" )) +BGCViz::run_app() ``` +You computer should have [R](https://cloud.r-project.org) and [Rstudio](https://www.rstudio.com/products/rstudio/download/) installed + +If you have troubles with installation, do not hesitate to open an [issue](https://github.com/ostash-group/BGCViz/issues) + ## Why local run The local run of an app is identical to the website one, with the same UI in the browser. Howewer, it have several advantages: -- Fast upload of files +- Much faster upload of files. Especially bigger json files or archives. - Better response time -- Control over execution. Quick modifications to the code. - -Besides speed and flexibility of a local run, ability of upload raw json output files from AntiSMASH is a big plus (more details [here](Input_files_options.md)). For server usage we are suggesting to convert the json file to the csv one, using provided scripts (more details [here](Input_files_options.md)). +- Control over execution. Quick modifications to the code. \ No newline at end of file diff --git a/docs/Introduction.md b/docs/Introduction.md index e93e117..1ff251a 100644 --- a/docs/Introduction.md +++ b/docs/Introduction.md @@ -22,13 +22,13 @@ Currently, the app supports annotations from such sources: 2. PRISM (both json and csv) -3. SEMPI (only csv) +3. SEMPI ( all results in zip archive and csv) 4. DeepBGC (raw tsv file) 5. RRE-Finder (modified txt file) -6. ARTS (raw tsv files) +6. ARTS (all results in zip archive and csv) diff --git a/man/pipe.Rd b/man/pipe.Rd deleted file mode 100644 index 1f8f237..0000000 --- a/man/pipe.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utils-pipe.R -\name{\%>\%} -\alias{\%>\%} -\title{Pipe operator} -\usage{ -lhs \%>\% rhs -} -\arguments{ -\item{lhs}{A value or the magrittr placeholder.} - -\item{rhs}{A function call using the magrittr semantics.} -} -\value{ -The result of calling `rhs(lhs)`. -} -\description{ -See \code{magrittr::\link[magrittr:pipe]{\%>\%}} for details. -} -\keyword{internal} From 13f3a732f61ec3b8bab1639ded22e799985cf570 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 08:53:26 +0200 Subject: [PATCH 121/199] Added antismash data Former-commit-id: d6a7412b9018af8dc2714112c45c6a0a0b8f56bd --- DESCRIPTION | 2 ++ data-raw/anti_data.R | 8 ++++++++ data/anti_data.rda | Bin 0 -> 766 bytes dev/02_dev.R | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 data-raw/anti_data.R create mode 100644 data/anti_data.rda diff --git a/DESCRIPTION b/DESCRIPTION index 6fc2f31..5b50eef 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -44,3 +44,5 @@ Suggests: Config/testthat/edition: 3 Language: en-US VignetteBuilder: knitr +Depends: + R (>= 2.10) diff --git a/data-raw/anti_data.R b/data-raw/anti_data.R new file mode 100644 index 0000000..70d6eb3 --- /dev/null +++ b/data-raw/anti_data.R @@ -0,0 +1,8 @@ +## code to prepare `anti_data` dataset goes here +anti_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_antismash.csv") +# Add chromosome column +anti_data$chromosome <- rep("A", length(anti_data$Cluster)) +# Type magic +anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) +anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) +usethis::use_data(anti_data, overwrite = TRUE) diff --git a/data/anti_data.rda b/data/anti_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..033179f961cdb6b0b51d02adfd3887d8a93733bc GIT binary patch literal 766 zcmVdXH+1$q;FY zfJ^}}Mw(y%OaPi17?=P600dze1Zjzoz!<4b0004|jQ|Fk02%-RpfnmiOn}e;0B8UJ z0;rH8U=gZ%pP@B0JxvV&27^X`0000027olv^&@2lKo2f=D>LDUMYyurePT7G3>q)g z#W0L{DFz8fS$Wy+%fFV^#I9)Y^mciA9XFctZArJeM+h$t8{7--jx!SiYu3>rE^6UD_>NFM6eqFT?jlW zG< zrxACW-&8$oDG{m9y{w%2J0xOpR@speiH~EqWrhRTO1KNmr86cbAoheg(*) z6|Hobmc@=r$_vQm)v&oLajl5fX+{;xnFVamU9QOBN;VF5Oan0tDz7xYW94i_R>HV` zH@7U(p-d*86&Q(0T2?Q(hU@K0xQm+Yw6>aQR7y5cV{frn&dH>y`y~sJS~-V&<|Qst zRV87WavBl$Z7CnF1aVAkZ1$qP2m;Gel!YPF}{Kd6*48_ wv6CBe7CZ}vE|-OF(MuK=yhC}3pKx5pwlQz!KJCB^!GFcvkxmpOEl18^0QVJ6ng9R* literal 0 HcmV?d00001 diff --git a/dev/02_dev.R b/dev/02_dev.R index 68b2b32..33751fb 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -71,7 +71,7 @@ golem::add_utils( "helpers" ) ## Add internal datasets ---- ## If you have data in your package -#usethis::use_data_raw( name = "my_dataset", open = FALSE ) +usethis::use_data_raw( name = "anti_data", open = FALSE ) ## Tests ---- ## Add one line by test you want to create From ef9f5835af552e88d879ed769b681f2a776ddf0e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 09:07:33 +0200 Subject: [PATCH 122/199] Added prism data Former-commit-id: ff5e44a12c1f8f8b35c992cfa3723892b5481e22 --- data-raw/prism_data.R | 6 ++++++ data/prism_data.rda | Bin 0 -> 600 bytes dev/02_dev.R | 1 + 3 files changed, 7 insertions(+) create mode 100644 data-raw/prism_data.R create mode 100644 data/prism_data.rda diff --git a/data-raw/prism_data.R b/data-raw/prism_data.R new file mode 100644 index 0000000..a72091f --- /dev/null +++ b/data-raw/prism_data.R @@ -0,0 +1,6 @@ +## code to prepare `prism_data` dataset goes here +# Function ro parse prism_json +library(magrittr) +source("R/fct_reading_processing.R") +prism_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_prism.json"))[[1]] +usethis::use_data(prism_data, overwrite = TRUE) diff --git a/data/prism_data.rda b/data/prism_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..260f7ee2ebc186b97f9f3de50a6cfb9b2cb6b087 GIT binary patch literal 600 zcmV-e0;l~#T4*^jL0KkKSwq3ad;kGrfB*mY-R|{u_(ARXU*G@l|FA>hV3bs#0sue( z20=g~NGHGnw{=aY3Z(J@G|7a~fQC#HO)vz(GCd;+gv8BEji_NTObr9nGJ`~#h9Y`t zr>YGZ0MN+L$N6pa1{>B@z)H zp`bJaLq>r000000000_j27nC!0z^HE5PH1E^Drjk`e#O8;+6GPY*!;kX3j;ew3$~F zFsg3q$N>zLb}JASs+56X`lX>8R6-q6jB(^(oY5bMF-1{TMS!X37-)z|@%oJ+He^7x zj0pS&gg_8{kIqG^1(67zVHu=#pnRjDDySpyL{I?iVhjWtR1i%?Oy|2;KnT?cQA}P^ zux&WfU35btVS+QiRy!TY%7Duh#@7;2gedy0B+D7R=}iK6`b3B=fIc9C1fENz;)V8C zq*$&DmwFU2!2H*^+-xH$z@kIgZReM!BS{~%MvGS6Ez4mtfv}X2KEweqZRuP0Q>-^! zk|08YSM9jbDFtAc9n3Oxr$Q^Lt><;5p%Jh<8W}*XaDx=+LDd z@?y~$E#T~s_6+4HDA1Bdt4#7VNNVT|)I?x|@(s;|+ae<{2t4s&M!e!MV8N_SyD(rq ze$v67_lRJOq7qjV=cH!52ue`B4pWN&i$Fo4t-^x9XulczcL_9Eq>q4>YR=fyN-oc6 mA>0v!2}SSE_sl_i>J&M4M51hf7HH@N{}*yaI8cy7!Nq(Dt_8vX literal 0 HcmV?d00001 diff --git a/dev/02_dev.R b/dev/02_dev.R index 33751fb..ffa4bcf 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -72,6 +72,7 @@ golem::add_utils( "helpers" ) ## Add internal datasets ---- ## If you have data in your package usethis::use_data_raw( name = "anti_data", open = FALSE ) +usethis::use_data_raw( name = "prism_data", open = FALSE ) ## Tests ---- ## Add one line by test you want to create From 67ce12fc9f476cd71857679ab3701cf0c4027d29 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 09:09:39 +0200 Subject: [PATCH 123/199] Added prism_supp data Former-commit-id: c814bbbe145c96394e4a2d90dc193c20e5f11b1c --- data-raw/prism_supp_data.R | 3 +++ data/prism_supp_data.rda | Bin 0 -> 5037 bytes dev/02_dev.R | 2 ++ 3 files changed, 5 insertions(+) create mode 100644 data-raw/prism_supp_data.R create mode 100644 data/prism_supp_data.rda diff --git a/data-raw/prism_supp_data.R b/data-raw/prism_supp_data.R new file mode 100644 index 0000000..e8e2e37 --- /dev/null +++ b/data-raw/prism_supp_data.R @@ -0,0 +1,3 @@ +## code to prepare `prism_supp_data` dataset goes here + +usethis::use_data(prism_supp_data, overwrite = TRUE) diff --git a/data/prism_supp_data.rda b/data/prism_supp_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..c64344e4e577e2147ee73adb098d5cdbed4cce29 GIT binary patch literal 5037 zcmZWtc{CLK*Pj_<8vDMD>|@O~42ty3*vB9tL}VGVL?%nfG8keE#+b41%Vfij*z<&cs z5U|N01vaFhW^h9p#U&^On?iuC_<6^tl8)dJ9BVoml4Jjv%>q0!3!Swn4y>8;N=gr8 z*rahVWTzR*^^XORN+m}a1k&kemg)}dU(>0?MgjnUoJH~cTmSn)(g=Fzr{L27cu_7@ z0?7k|0Y;DjHWaY(|H%F$201!d2LLM}1i+sFAph`FFaU(dBCQw+W1Hat%v${U{uhv- zKPj*h0Qeu103HAm2_gJ1OBjGd5DEoP3CZQbM_4eSnQ}*jQjm9UjZH=|x@PWUIipBF z&yqF;I0D+ZLNWSJz)K;DzM?b6A9&Hh${ss%7TkgOg3Vh7E(3O(W zr)<3bA%kZ(SaSohVc)QM4qL6p$DM06>iZR5Vjk5ttn)4vrixE8(-Oj$)U0ElXy|EN z1aU{qYr8ztA7_?lzS#Jh-6^4Z6Aw(w;%&8Uwng`>GyH~ky%uo_{Oyls2M_-A!8KLU zFCL8oLDK+Q(j0KOO(66z4;jH3X&bVts4eJB5ev90>GHZQX( zgWaC8K&P{*oAdiy#hDlAd^6^jE9_6dEo1?`EdW!>5I8B1JU>_<>SZ&%&ZgskTR=Wb z7nj6;ZctG$Cp6RI$(b3F&iMy{$tniYPx`Scc(pfbQ*x)#Xb zX_E{|k-R3Zzhv7^#>+SlnaVMT*3IfvkweS!4PZ68y|5Y$YQi7jP<7EsmD4$y#2>Tv zlzQ@0>1N)OVdH5t{!0_84CHnt0c{P-a|#-Pw9$3Ul3J7|xP6}LUOpER-3^-M1Z1Um zTc|ANU<8M>vt|C$PpKf86-adnsH-Ymv*8OF-mYEdtA!p;apUhBn7&_pc=9@T(IZ8x z&Ny=(aa%z3xLZ<&@c8&30wK;CJzO}+GV_r~NQQJT8Fw#*uK$_x{|7M2fmWw#?eHI_ zY=aS%_dusI1QX8Wp01u`CD|q4NNe|Uy??REDkE^;17nwQcCpsu@!8Fxh_0DVhA6)g zQUTe3sa=$lrs0ULWrEP1w=_%%t6~($f6l) z+s%R9ChDDE`wfS2Nm(+!@8&G_#AQ>H49~DR1$jDi@ywVaXTV1r@cB|wlDk!!Xcii)#curf}mM6_)NU_}42n&JOi1(y{Y`!QmL zi4fN^C$NSd4OJ)g}G0H{rbkd-Hr3g&ALT<`@1`ac%xT7x{;X&o{k9TEt>JA znyzAXhr8&usp9nX0AI+u&Qd%~4dM2AzRUK4N(Y;Q#r&-5Ez)0am#AoE|ErpLWU zL(WZ8Xgpx#(%1@7Bk#tmO2y}|N=`Hzy zN~SeOJ<=|F^%eI_T^MJfIEL1&wsDXK`kx4Ad@i*?V@77YH$_A3%909)}T4;$DKeIN5CO4DGkSb$i>|ldMcpZq&EaWTj$6 z(0EJPXs%NL{(6@%qwJ%6oVEzDaN2iEEfo0WwzrdsTD zZe9&8(??#gR&ze0cLjcVKQ>=|=dyhjaJ7cA2?ns4>!$aAR7;0LHK*26^tmPs;!a(h zbmp!LF#&++<#03eCFhXdC&e0>Iw%r-VBg&0kz`J8eh|*Y#m`UJC4rI#k*{xap13Wl zAyRxvXa^beHS3 z!GWjpJ&|*cqKrJisrZPk5D2m&%`v8uNSnoyY_ZxFdu1;A}=Lm(w;|4CP$i? z%La2PPC5z~GVG4b(NZdR{{i7hYL*dA+-i+rVpHkMWGXE^5FKA&{btV=9#|UqH2=qk ziQ@Mnfogg&k1>pp7mBP0*})G)of_+r)gY%}G+PTP#QNPm2<3MWev_EbjUM=VJYlWXYCRS?&Q$gp>SU1wm_hiySo+gi2 zyuYb_r87As6~zInk1AH&5PRM%ONP!y`4b0#!WoJ#H%R%8lDQp?*Qy^6Az;l6L^(z; zLOVFrKw49C%^?2;z_VK2`Ph>UZh=+w)&5GG52oQ9ZIMax2&pZ=L)U`wN?kPc+Z1 z&h!9Q$PTLZtz0_3ynfqV&5D3U-95zIf=yD1EZDLz^n!MEiFP)2h_ENjh% zXr!8HTORo%ZI5|!p9gKOZ#DIsuBTL{fziFGxHlc|qOJ7Xq+PQT&V}QJzj|)R6PdFm zXo(4FX=S_5CslgKSFqW)fW~ZVFN~LYhefdSgR&lOgeXS5bf%J$7T+0Sd9uAAg@z;f z`ag%NtGA3KJWS9%KebLHzz293LrW$m@4j=Ww7r)+ML06u zC!RQK?oc-f<{vX3)yUeU$g`bz8AiBrs$N^>i-JIgUMXIAnrZwM4{E579(#0?5n`s_ zz<+TJe(!MJ$*e!1h49y}-lV#SMEf5z9 z5oAFThG_MK4;tIb@VT$7!W@@;h`$#{xoV|caFyHHJ#c*bY<&P%Cn1AJqHRtvecB`x z&FL@U7XT*vY@X`3(hfMUfH6@JqG0m`hlx}B-OhV_xFpaf<4o`bZlVlnL0Rt2=VVOk zS6$&^ZORvAN0U)r`X9uc(Pug8uv}k0(U}o6wYd^%oZTETW&P)0?W|?)l+&k`EDld= z5s(ezRP4Yrp{nQZ4>FyK73~L$h9^g`FF*NZp%l{&;Q>Bcg9XTT|RPvqw_U8AFQ z@No(?Ta{wBOnUyREW809NYN3>TX>^$T<}3M)XH4W6zHtB)O;GZrs`lqD=P?knw#8t z!O_!wRyP1*)yX+hllR*a89I8F?tpoUh=GveFEq#0OrXmKKkw7(U`@d#?n_>K(c0GLXy5bf}S&G zE5oJxMuwqCrQIMa0acWSS)Bnd1kzt6o5vv=fyXpd^FN*RTH;`p&TWALl``Pk{H&}h z6%?AdI)Xpy&)OP%+++Kz)Swr-T)oabCQ@9ur#IJ6q|2kbN8RK;Kq&5-7$j zfz0~iPv^ZHtgUGPWvaMQP&nm@7D2azx};kgR>f?0uO`a#J6g+H<%#p81o&FNcOD6U zyQSsq_r40Gd_mTQ81&%hE`_7Ic-Jfo>Ln~Yv$lu-`B!3Jn2Uo&g7-bO7rw<5SHDg@ zlRF$zb=R~InfES%*J}9*AH<;#*3D~L-*xpMRcmAmlLd|bPN|$p{4Bx^DM2l~gdp16 znfge`hKa1#0=IaH70)!#MSrDmik1uXiwCV*zdJdEk#)d&3Qg!!?Wd&PQq)TYyMWpz zP*f;qw`g&#gVX@cqt#(oa#hc zy9`!WC!QpaF>RZFv*MEMm##Umoatak1By-XVq`5mOiJlx1mejJo`JK^sZ=-_!&g9kA2$YFvVc0|t`y4ieqo$G(7>h9#Uu|x{ z>1om<#r{k2MVL#_)HD1T6WYaUTpEIru2s#ZCyY=f^I!ErwTp^!?s>BSnH1qZ8}eIT zDT|NGXCI=WdYur7XjHM)c+||Mm6g#yTZ+vK&pUFPr@P7b^ZQR+kBRkQABMW|dM*w= z`Ex5-GHD-H6MX^ZjcHb$TT^f|G*SikiRrE^@cc8#Gw&D<8kKl~1JU?PDvg^H9de?!Vl4mWNEo-%kQG;o?9LCpwF3J-0Lt-_-cQ ze=h5tL-T^#*w=+G@=f0tBj+LxB?_}1xJUy@z=5qqZ`j5``Q((l!<}5zBMuT&Dg5qD z%Q7hwm)BTJ?OH$WpEn|Zxb3rj?{5oI{(!XBmCN=Ji`&UGlkF6!yVq3CWqt z{zTdv*hIcB(idzW34W8_ZjeNLf5L#v&?#7@w6hY&@V*9no@UHaY_1)u%VB=+Z8nT< Va$Z&E`ki@SzEs5u5r#QS_%B*A0J#7F literal 0 HcmV?d00001 diff --git a/dev/02_dev.R b/dev/02_dev.R index ffa4bcf..e99e4ec 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -73,6 +73,8 @@ golem::add_utils( "helpers" ) ## If you have data in your package usethis::use_data_raw( name = "anti_data", open = FALSE ) usethis::use_data_raw( name = "prism_data", open = FALSE ) +usethis::use_data_raw( name = "prism_supp_data", open = FALSE ) + ## Tests ---- ## Add one line by test you want to create From afb430d6b18281bbe45c3c6236d04056fe30334a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 09:13:07 +0200 Subject: [PATCH 124/199] Add prism-supp data raw code Former-commit-id: f36b34bde7638d2b18400b8c12b1917fde2d3132 --- data-raw/prism_supp_data.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/data-raw/prism_supp_data.R b/data-raw/prism_supp_data.R index e8e2e37..5b44589 100644 --- a/data-raw/prism_supp_data.R +++ b/data-raw/prism_supp_data.R @@ -1,3 +1,5 @@ ## code to prepare `prism_supp_data` dataset goes here - +library(magrittr) +source("R/fct_reading_processing.R") +prism_supp_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_prism.json"))[[2]] usethis::use_data(prism_supp_data, overwrite = TRUE) From b4c1a4c157614d074203ca61d699142bcfaf3bf5 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 09:13:47 +0200 Subject: [PATCH 125/199] Add gecco data Former-commit-id: 46b4adb76ae969317b928883db46634760c5a1f7 --- data-raw/gecco_data.R | 28 ++++++++++++++++++++++++++++ data/gecco_data.rda | Bin 0 -> 4927 bytes dev/02_dev.R | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 data-raw/gecco_data.R create mode 100644 data/gecco_data.rda diff --git a/data-raw/gecco_data.R b/data-raw/gecco_data.R new file mode 100644 index 0000000..27da5df --- /dev/null +++ b/data-raw/gecco_data.R @@ -0,0 +1,28 @@ +## code to prepare `gecco_data` dataset goes here +gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_gecco.tsv") +# Silence R CMD note +polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- + ripp_probability <- NULL +gecco_data$chromosome <- rep("G", length(gecco_data$type)) +# Type magic +gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) +gecco_data$ID <- gecco_data$Cluster +gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) +gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) +gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) +gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) +gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) +drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) +# Read data +gecco_data <- gecco_data %>% + dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + dplyr::select(-dplyr::one_of(drop_cols)) +gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) +gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) +names(gecco_data)[names(gecco_data) == "start"] <- "Start" +names(gecco_data)[names(gecco_data) == "end"] <- "Stop" +usethis::use_data(gecco_data, overwrite = TRUE) diff --git a/data/gecco_data.rda b/data/gecco_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..8b0c6a1d76bc189160341fd3bf7c2b9d839c5106 GIT binary patch literal 4927 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 h3D+g{h%aKMnym+~U literal 0 HcmV?d00001 diff --git a/dev/02_dev.R b/dev/02_dev.R index e99e4ec..8cf6e1d 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -74,7 +74,7 @@ golem::add_utils( "helpers" ) usethis::use_data_raw( name = "anti_data", open = FALSE ) usethis::use_data_raw( name = "prism_data", open = FALSE ) usethis::use_data_raw( name = "prism_supp_data", open = FALSE ) - +usethis::use_data_raw( name = "gecco_data", open = FALSE ) ## Tests ---- ## Add one line by test you want to create From f3ea1f64f608fe102bddaadd943f29348208350f Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 09:17:44 +0200 Subject: [PATCH 126/199] Add sempi data Former-commit-id: 87b8d24eb1d7247490297280cc4db935cdb785d8 --- data-raw/sempi_data.R | 4 ++++ data/sempi_data.rda | Bin 0 -> 630 bytes dev/02_dev.R | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 data-raw/sempi_data.R create mode 100644 data/sempi_data.rda diff --git a/data-raw/sempi_data.R b/data-raw/sempi_data.R new file mode 100644 index 0000000..dae125c --- /dev/null +++ b/data-raw/sempi_data.R @@ -0,0 +1,4 @@ +## code to prepare `sempi_data` dataset goes here +sempi_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_sempi.csv") +sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) +usethis::use_data(sempi_data, overwrite = TRUE) diff --git a/data/sempi_data.rda b/data/sempi_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..1bd8825fbd7b7377a8fd358eb28bfce85507d714 GIT binary patch literal 630 zcmV-+0*U=XT4*^jL0KkKS&2^TV({}W1{2RxR8;OlXEEQRoc?V3X6~2>5v4$ zg}I0m{|5&IK#9m{1O)+x4|)KFgCmer#~`KxLlPI}_5v~;+ZO{A4L!+AjLNS^4oPFre3{~ z;TetLnGhjB@HXIj$R%3{75)|xt=O{)n#F)Ss#xaZr44j#B^7^rf5sZDqrj{P Date: Thu, 2 Jun 2022 09:20:23 +0200 Subject: [PATCH 127/199] Add arts data Former-commit-id: 92164044a2e69d93392356db0bcb90563ac3fe2a --- data-raw/arts_data.R | 3 +++ data/arts_data.rda | Bin 0 -> 5438 bytes dev/02_dev.R | 1 + 3 files changed, 4 insertions(+) create mode 100644 data-raw/arts_data.R create mode 100644 data/arts_data.rda diff --git a/data-raw/arts_data.R b/data-raw/arts_data.R new file mode 100644 index 0000000..69164c7 --- /dev/null +++ b/data-raw/arts_data.R @@ -0,0 +1,3 @@ +## code to prepare `arts_data` dataset goes here +arts_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_arts.csv") +usethis::use_data(arts_data, overwrite = TRUE) diff --git a/data/arts_data.rda b/data/arts_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..1181638e6dead85dc0e38da3be21ad30d4dd5136 GIT binary patch literal 5438 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 Date: Thu, 2 Jun 2022 09:28:41 +0200 Subject: [PATCH 128/199] Add deepbgc data Former-commit-id: c8abc82266e3c844f9409639befe12577da5c9ea --- data-raw/deep_data.R | 10 ++++++++++ data/deep_data.rda | Bin 0 -> 20389 bytes dev/02_dev.R | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 data-raw/deep_data.R create mode 100644 data/deep_data.rda diff --git a/data-raw/deep_data.R b/data-raw/deep_data.R new file mode 100644 index 0000000..d064efc --- /dev/null +++ b/data-raw/deep_data.R @@ -0,0 +1,10 @@ +## code to prepare `deep_data` dataset goes here +deep_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_deep.tsv") +polyketide <- nrp <- NULL # Silence R CMD error +drop_cols <- c("nrp","polyketide") +colnames(deep_data) <- stringr::str_to_lower(colnames(deep_data)) +# Read data +deep_data <- deep_data %>% + dplyr::mutate(pks=polyketide, nrps = nrp ) %>% + dplyr::select(-dplyr::one_of(drop_cols)) +usethis::use_data(deep_data, overwrite = TRUE) diff --git a/data/deep_data.rda b/data/deep_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..02fd61d204c4d54a03c0e9a2961e9f0c8e3be544 GIT binary patch literal 20389 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 KmkYa*bfi16f*3<@em|PImi0RkfkAOVs_}4)@ph zyvig3D0%Vsv>N#&sL2PvbrIQ&9*@ zgLlfkLNQkPe4G|dw$fnF{grQ9s)q@&^Wo87d ztQl1U8_zIs01yKa4EL*%$YHeFS~;Kr3b?uov2kJc<*@H)Z26M|I+9e}OkOK@bHN!vf>&0r<+4Igp5s3 z=j~w z#D$u<8oCZ0)`qWGthl_S;Da07Ww2ahvXYWlDa~b{Eg=YzA_*)$dq3`U{~yb5w9O$d z2E%iC{-5yaB>;SW&B`PTm4fG@5?3Fmx``n}Z2&y|%CFX}zFJ7R8V(SGAX%$u@ye2_2?r? zMzita`n~^y*h@-QuLlsio`cc*;{ye)_${%9IP*Ysax6K^B9QGl57@?lKv)>8*r?G6LB;)1R{XjiNXVJLL?yoCTkiMgC7AI zH*?8nH8oNx+KW^`QkoByhQ%=*J2>9d5=!>OSSa9mba00`(5D`z+ z(!{rn7c<>JTebz#wg}{2^-&DwNQwOP0PDtN1{lmQXA!??Qe0pj9Xt}L=y<;j zU=XZb2^0}Apz2TpO&xDN2!w=(;E@jY4aiC6X$mnYBxGYSN~u5v zL=r@#ARvJvu|bN6pj3qtuCa?MCNl+G&xD8+9uMdEey_;qm;wZ%4N#ASP&OFvNlK?X z3XrMH$LyGZ(_qv*7OBm_uxr}VAEFD2B4dX2tj7YcsJ|hfEB)``Qv)@R#T;{;C;W_C&aUH zZk#$VD+@jPT_-WQ?>z4_iO}+&Q@Zi>ud7EBmiIAkZ`OG Date: Thu, 2 Jun 2022 09:30:14 +0200 Subject: [PATCH 129/199] Fix deepbgc data colname to lower Former-commit-id: b1e9ac05ad05720932e1f96a2ab3651a3f5fede1 --- R/app_server.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/app_server.R b/R/app_server.R index 25161ef..e539e15 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -462,6 +462,8 @@ app_server <- function( input, output, session ) { } read_deep <- function(data){ polyketide <- nrp <- NULL # Silence R CMD error + # Fix colnames in deepbgc data + colnames(data) <- stringr::str_to_lower(colnames(data)) res_validation <- validate_deep_input(data) if (!(res_validation[[1]])){ deep_data <- NULL From 75a42fce2a64e2b7642405c40e314ffe255c6579 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 10:32:05 +0200 Subject: [PATCH 130/199] Add rre finder data Former-commit-id: 9fc96a9a9fe8526c33c582659ab019164245b6f0 --- data-raw/rre_data.R | 21 +++++++++++++++++++++ data/rre_data.rda | Bin 0 -> 427 bytes dev/02_dev.R | 1 + 3 files changed, 22 insertions(+) create mode 100644 data-raw/rre_data.R create mode 100644 data/rre_data.rda diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R new file mode 100644 index 0000000..cd32e18 --- /dev/null +++ b/data-raw/rre_data.R @@ -0,0 +1,21 @@ +## code to prepare `rre_data` dataset goes here +library(magrittr) +Gene.name <- Coordinates <- NULL # Silence R CMD error +rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_rre.txt") +# Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) +rre_data <- rre_data %>% + tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") +# Add chromosome info column +rre_data$chromosome <- rep("RRE",length(rre_data$Sequence)) +# Add ID column +rre_data$ID <- seq(1:length(rre_data$Sequence)) +rre_data$Cluster <- rre_data$ID +rre_data <- data.frame(rre_data) +rre_data['Type'] <- 'ripp' +rre_data['Type2'] <- 'ripp' +rre_data$Start <- as.numeric(rre_data$Start) +rre_data$Stop <- as.numeric(rre_data$Stop) +# Store rre data into local variable +rre_data <- data.frame(rre_data) +usethis::use_data(rre_data, overwrite = TRUE) diff --git a/data/rre_data.rda b/data/rre_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..7dbe66ee849bcebc15b982658a7d1e9f69b48bfc GIT binary patch literal 427 zcmV;c0aX4%T4*^jL0KkKSs*2(bpQc6f8YQ6=^y|BS!({J{7Hv{Zs(zHyAk#xY&;SM?0MHr-s5BY}C0C#FVjxt|77&mG=V%HINg|ag1Pe)h z$#vSX&gK8g7VAPZi}E*rPiP?!U|MNu(UYm9Br=H-qn>$*NSP(Q$zio6NX+|O*Vz;) zJOFJV(gY0xAjtuy&=RzSD^%nH3?Ry56=sKW?xDd}dy>C?$@x5y4J*QGplQJw*H{3V zfWhp$NlelS3Y%}?!<1yuW6m<=0N$281L} z(p}3-Wt~=lWr3iYz&6e-;4!Jz(4li7)5vO)bqjSa;9yl2?^zmh81c3H&2_pp*S5d* VzSi!Sga{GjUC9*TLO_6)k<=50xG(?! literal 0 HcmV?d00001 diff --git a/dev/02_dev.R b/dev/02_dev.R index bbf0195..f365a06 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -78,6 +78,7 @@ usethis::use_data_raw( name = "gecco_data", open = FALSE ) usethis::use_data_raw( name = "sempi_data", open = FALSE ) usethis::use_data_raw( name = "arts_data", open = FALSE ) usethis::use_data_raw( name = "deep_data", open = FALSE ) +usethis::use_data_raw( name = "rre_data", open = FALSE ) ## Tests ---- ## Add one line by test you want to create From 71a6fa3fb4d3d0513f48194b9939f5a8e39000c3 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 11:23:43 +0200 Subject: [PATCH 131/199] Changed hosting of raw data files Former-commit-id: b977bbaffb90120a052bc44ff7bd819bb9e55cf5 --- data-raw/anti_data.R | 2 +- data-raw/arts_data.R | 2 +- data-raw/deep_data.R | 2 +- data-raw/gecco_data.R | 2 +- data-raw/prism_data.R | 2 +- data-raw/prism_supp_data.R | 2 +- data-raw/rre_data.R | 2 +- data-raw/sempi_data.R | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data-raw/anti_data.R b/data-raw/anti_data.R index 70d6eb3..71d2fde 100644 --- a/data-raw/anti_data.R +++ b/data-raw/anti_data.R @@ -1,5 +1,5 @@ ## code to prepare `anti_data` dataset goes here -anti_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_antismash.csv") +anti_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv") # Add chromosome column anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic diff --git a/data-raw/arts_data.R b/data-raw/arts_data.R index 69164c7..2ed21ac 100644 --- a/data-raw/arts_data.R +++ b/data-raw/arts_data.R @@ -1,3 +1,3 @@ ## code to prepare `arts_data` dataset goes here -arts_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_arts.csv") +arts_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_arts.csv") usethis::use_data(arts_data, overwrite = TRUE) diff --git a/data-raw/deep_data.R b/data-raw/deep_data.R index d064efc..1738c47 100644 --- a/data-raw/deep_data.R +++ b/data-raw/deep_data.R @@ -1,5 +1,5 @@ ## code to prepare `deep_data` dataset goes here -deep_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_deep.tsv") +deep_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv") polyketide <- nrp <- NULL # Silence R CMD error drop_cols <- c("nrp","polyketide") colnames(deep_data) <- stringr::str_to_lower(colnames(deep_data)) diff --git a/data-raw/gecco_data.R b/data-raw/gecco_data.R index 27da5df..59d11e1 100644 --- a/data-raw/gecco_data.R +++ b/data-raw/gecco_data.R @@ -1,5 +1,5 @@ ## code to prepare `gecco_data` dataset goes here -gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_gecco.tsv") +gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv") # Silence R CMD note polyketide_probability <- other_probability <- nrp_probability <- alkaloid_probability <- diff --git a/data-raw/prism_data.R b/data-raw/prism_data.R index a72091f..611bee0 100644 --- a/data-raw/prism_data.R +++ b/data-raw/prism_data.R @@ -2,5 +2,5 @@ # Function ro parse prism_json library(magrittr) source("R/fct_reading_processing.R") -prism_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_prism.json"))[[1]] +prism_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[1]] usethis::use_data(prism_data, overwrite = TRUE) diff --git a/data-raw/prism_supp_data.R b/data-raw/prism_supp_data.R index 5b44589..c79545c 100644 --- a/data-raw/prism_supp_data.R +++ b/data-raw/prism_supp_data.R @@ -1,5 +1,5 @@ ## code to prepare `prism_supp_data` dataset goes here library(magrittr) source("R/fct_reading_processing.R") -prism_supp_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_prism.json"))[[2]] +prism_supp_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[2]] usethis::use_data(prism_supp_data, overwrite = TRUE) diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R index cd32e18..6880ce7 100644 --- a/data-raw/rre_data.R +++ b/data-raw/rre_data.R @@ -1,7 +1,7 @@ ## code to prepare `rre_data` dataset goes here library(magrittr) Gene.name <- Coordinates <- NULL # Silence R CMD error -rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_rre.txt") +rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- rre_data %>% tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% diff --git a/data-raw/sempi_data.R b/data-raw/sempi_data.R index dae125c..3dd548d 100644 --- a/data-raw/sempi_data.R +++ b/data-raw/sempi_data.R @@ -1,4 +1,4 @@ ## code to prepare `sempi_data` dataset goes here -sempi_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz/raw_datasets/datasets/sco_sempi.csv") +sempi_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv") sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) usethis::use_data(sempi_data, overwrite = TRUE) From 8447b6f11245ad0c2952872f1c77e66a1debcea7 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 11:24:02 +0200 Subject: [PATCH 132/199] Add documentation of used data Former-commit-id: d237f92bcd8f9a3fd7a757f82570951d8295adaa --- R/data.R | 148 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 R/data.R diff --git a/R/data.R b/R/data.R new file mode 100644 index 0000000..ef12b0f --- /dev/null +++ b/R/data.R @@ -0,0 +1,148 @@ +#' BGC list from antiSMASH for S.coelicolor +#' +#' Dataset containing list of clusters from antiSMASH5, found in S.coelicolor +#' +#' @format A data frame with 27 rows and 6 variables: +#' \describe{ +#' \item{Cluster}{Cluster #, numeric} +#' \item{Start}{Start location of a cluster, in bp} +#' \item{Stop}{Stop location of a cluster, in bp} +#' \item{Type}{Type of a cluster} +#' \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} +#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv} +"anti_data" +#' Gene list from ARTS for S.coelicolor +#' +#' Dataset containing list of core and resistance genes from ARTS, found in S.coelicolor. +#' It is generated automatically upon zip folder from ARTS upload +#' +#' @format A data frame with 161 rows and 13 variables: +#' \describe{ +#' \item{Cluster}{Gene #, numeric} +#' \item{Start}{Start location of a gene, in bp} +#' \item{Stop}{Stop location of a gene, in bp} +#' \item{Type}{Type of a gene} +#' \item{Hit}{Unique core gene hit identifier, based on count of genes} +#' \item{Type2}{Type of a gene, same as Type} +#' \item{Core}{Type of core model from ARTS} +#' \item{Description}{Annotation of a gene} +#' \item{Count}{Count of a gene hit, to keep track of multiple hits} +#' \item{ID}{Gene #, same as Cluster} +#' \item{Evalue}{E-value of a resistance gene hit} +#' \item{Bitscore}{Bitscore of a resistance gene hit} +#' \item{Model}{Type of Model of gene hit. If core gene, then the model is Core} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_arts.csv} +"arts_data" +#' BGC list from DeepBGC for S.coelicolor +#' +#' Dataset containing list of clusters from DeepBGC, found in S.coelicolor +#' For full description see DeepBGC documentation! +#' +#' @format A data frame with 172 rows and 28 variables: +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv} +"deep_data" +#' BGC list from GECCO for S.coelicolor +#' +#' Dataset containing list of clusters from GECCO, found in S.coelicolor +#' +#' @format A data frame with 27 rows and 6 variables: +#' \describe{ +#' \item{Cluster}{Cluster #, numeric} +#' \item{Start}{Start location of a cluster, in bp} +#' \item{Stop}{Stop location of a cluster, in bp} +#' \item{Type}{Type of a cluster} +#' \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} +#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} +#' \item{ID}{Cluster #. Same as Cluster} +#' \item{average_p}{Average probability of a cluster} +#' \item{max_p}{Maximum probability of a cluster} +#' \item{bgc_id}{ID of a cluster, filled by GECCO} +#' \item{sequence_id}{ID of annotated sequence} +#' \item{type}{Type of a cluster, filled by GECCO} +#' \item{proteins}{list of identified proteins in a cluster, filled by GECCO} +#' \item{domains}{list of identified domains in a cluster, filled by GECCO} +#' \item{pks}{Score that cluster is pks, filled by GECCO} +#' \item{other}{Score that cluster is other, filled by GECCO} +#' \item{nrps}{Score that cluster is nrps, filled by GECCO} +#' \item{alkaloid}{Score that cluster is alkaloid, filled by GECCO} +#' \item{terpene}{Score that cluster is terpene, filled by GECCO} +#' \item{sacharide}{Score that cluster is sacharide, filled by GECCO} +#' \item{ripp}{Score that cluster is ripp, filled by GECCO} +#' \item{num_prot}{Number of proteins in a cluster} +#' \item{num_domains}{Number of domains in a cluster} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv} +"gecco_data" +#' BGC list from PRISM for S.coelicolor +#' +#' Dataset containing list of clusters from PRISM, found in S.coelicolor +#' Generated automatically from json results file +#' @format A data frame with 19 rows and 4 variables: +#' \describe{ +#' \item{Cluster}{Cluster #, numeric} +#' \item{Start}{Start location of a cluster, in bp} +#' \item{Stop}{Stop location of a cluster, in bp} +#' \item{Type}{Type of a cluster} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} +"prism_data" +#' Gene list from PRISM for S.coelicolor +#' +#' Dataset containing list of regulatory and resistance from PRISM, found in S.coelicolor. +#' Generated automatically from json results file +#' +#' @format A data frame with 125 rows and 9 variables: +#' \describe{ +#' \item{Cluster}{Gene #, numeric} +#' \item{Start}{Start location of a gene, in bp} +#' \item{Stop}{Stop location of a gene, in bp} +#' \item{Type}{Type of a gene} +#' \item{Full_name}{Annotation of a gene hit} +#' \item{ID}{Gene #, same as Cluster} +#' \item{Type2}{Type of a gene. Same as Type} +#' \item{Score}{Score of a gene hite} +#' \item{Name}{Name of model, or gene for a hit} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} +"prism_supp_data" +#' RRE list from RREFinder for S.coelicolor +#' +#' Dataset containing list of RRE elements from RREFinder, found in S.coelicolor +#' +#' @format A data frame with 27 rows and 6 variables: +#' \describe{ +#' \item{Cluster}{RRE #, numeric} +#' \item{Start}{Start location of a RRE, in bp} +#' \item{Stop}{Stop location of a RRE, in bp} +#' \item{Type}{Type of a RRE} +#' \item{chromosome}{chromosome, on which RRE is, filled automatically ipon file upload} +#' \item{Type2}{Type of a RRE, filled automatically upon file upload. Same as Type} +#' \item{Sequence}{Annotated sequence ID} +#' \item{Locus_tag}{Locus tag of a RRE element} +#' \item{BGC.ID}{Id, of a BGC} +#' \item{BGC.product}{Product of BGC} +#' \item{Domain.name}{Domain name of RRE element} +#' \item{E.value}{E-value of a hit} +#' \item{Bitscore}{Bitscore of a hit} +#' \item{End}{End of RRE element, bp} +#' \item{ID}{RRE ID, same as Cluster} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt} +"rre_data" +#' BGC list from SEMPI for S.coelicolor +#' +#' Dataset containing list of clusters from SEMPI, found in S.coelicolor +#' +#' @format A data frame with 33 rows and 5 variables: +#' \describe{ +#' \item{Cluster}{Cluster #, numeric} +#' \item{Start}{Start location of a cluster, in bp} +#' \item{Stop}{Stop location of a cluster, in bp} +#' \item{Type}{Type of a cluster} +#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} +#' } +#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv} +"sempi_data" \ No newline at end of file From e97ee181f920cbb29b80b4f39ca31c79352ccabe Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 11:28:43 +0200 Subject: [PATCH 133/199] Fixed small typo in documentation, added Rd files Former-commit-id: 02c187fbad733fb35f88c649244c99dea9ab7993 --- R/data.R | 2 +- man/anti_data.Rd | 27 ++++++++++++++++++++++++++ man/arts_data.Rd | 35 +++++++++++++++++++++++++++++++++ man/deep_data.Rd | 20 +++++++++++++++++++ man/gecco_data.Rd | 44 ++++++++++++++++++++++++++++++++++++++++++ man/prism_data.Rd | 26 +++++++++++++++++++++++++ man/prism_supp_data.Rd | 31 +++++++++++++++++++++++++++++ man/rre_data.Rd | 36 ++++++++++++++++++++++++++++++++++ man/sempi_data.Rd | 26 +++++++++++++++++++++++++ 9 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 man/anti_data.Rd create mode 100644 man/arts_data.Rd create mode 100644 man/deep_data.Rd create mode 100644 man/gecco_data.Rd create mode 100644 man/prism_data.Rd create mode 100644 man/prism_supp_data.Rd create mode 100644 man/rre_data.Rd create mode 100644 man/sempi_data.Rd diff --git a/R/data.R b/R/data.R index ef12b0f..a7e9119 100644 --- a/R/data.R +++ b/R/data.R @@ -69,7 +69,7 @@ #' \item{nrps}{Score that cluster is nrps, filled by GECCO} #' \item{alkaloid}{Score that cluster is alkaloid, filled by GECCO} #' \item{terpene}{Score that cluster is terpene, filled by GECCO} -#' \item{sacharide}{Score that cluster is sacharide, filled by GECCO} +#' \item{saccharide}{Score that cluster is sacharide, filled by GECCO} #' \item{ripp}{Score that cluster is ripp, filled by GECCO} #' \item{num_prot}{Number of proteins in a cluster} #' \item{num_domains}{Number of domains in a cluster} diff --git a/man/anti_data.Rd b/man/anti_data.Rd new file mode 100644 index 0000000..6ae55d9 --- /dev/null +++ b/man/anti_data.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{anti_data} +\alias{anti_data} +\title{BGC list from antiSMASH for S.coelicolor} +\format{ +A data frame with 27 rows and 6 variables: +\describe{ + \item{Cluster}{Cluster #, numeric} + \item{Start}{Start location of a cluster, in bp} + \item{Stop}{Stop location of a cluster, in bp} + \item{Type}{Type of a cluster} + \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} + \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv} +} +\usage{ +anti_data +} +\description{ +Dataset containing list of clusters from antiSMASH5, found in S.coelicolor +} +\keyword{datasets} diff --git a/man/arts_data.Rd b/man/arts_data.Rd new file mode 100644 index 0000000..9518937 --- /dev/null +++ b/man/arts_data.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{arts_data} +\alias{arts_data} +\title{Gene list from ARTS for S.coelicolor} +\format{ +A data frame with 161 rows and 13 variables: +\describe{ + \item{Cluster}{Gene #, numeric} + \item{Start}{Start location of a gene, in bp} + \item{Stop}{Stop location of a gene, in bp} + \item{Type}{Type of a gene} + \item{Hit}{Unique core gene hit identifier, based on count of genes} + \item{Type2}{Type of a gene, same as Type} + \item{Core}{Type of core model from ARTS} + \item{Description}{Annotation of a gene} + \item{Count}{Count of a gene hit, to keep track of multiple hits} + \item{ID}{Gene #, same as Cluster} + \item{Evalue}{E-value of a resistance gene hit} + \item{Bitscore}{Bitscore of a resistance gene hit} + \item{Model}{Type of Model of gene hit. If core gene, then the model is Core} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_arts.csv} +} +\usage{ +arts_data +} +\description{ +Dataset containing list of core and resistance genes from ARTS, found in S.coelicolor. +It is generated automatically upon zip folder from ARTS upload +} +\keyword{datasets} diff --git a/man/deep_data.Rd b/man/deep_data.Rd new file mode 100644 index 0000000..5164ad3 --- /dev/null +++ b/man/deep_data.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{deep_data} +\alias{deep_data} +\title{BGC list from DeepBGC for S.coelicolor} +\format{ +A data frame with 172 rows and 28 variables: +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv} +} +\usage{ +deep_data +} +\description{ +Dataset containing list of clusters from DeepBGC, found in S.coelicolor +For full description see DeepBGC documentation! +} +\keyword{datasets} diff --git a/man/gecco_data.Rd b/man/gecco_data.Rd new file mode 100644 index 0000000..65281da --- /dev/null +++ b/man/gecco_data.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{gecco_data} +\alias{gecco_data} +\title{BGC list from GECCO for S.coelicolor} +\format{ +A data frame with 27 rows and 6 variables: +\describe{ + \item{Cluster}{Cluster #, numeric} + \item{Start}{Start location of a cluster, in bp} + \item{Stop}{Stop location of a cluster, in bp} + \item{Type}{Type of a cluster} + \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} + \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} + \item{ID}{Cluster #. Same as Cluster} + \item{average_p}{Average probability of a cluster} + \item{max_p}{Maximum probability of a cluster} + \item{bgc_id}{ID of a cluster, filled by GECCO} + \item{sequence_id}{ID of annotated sequence} + \item{type}{Type of a cluster, filled by GECCO} + \item{proteins}{list of identified proteins in a cluster, filled by GECCO} + \item{domains}{list of identified domains in a cluster, filled by GECCO} + \item{pks}{Score that cluster is pks, filled by GECCO} + \item{other}{Score that cluster is other, filled by GECCO} + \item{nrps}{Score that cluster is nrps, filled by GECCO} + \item{alkaloid}{Score that cluster is alkaloid, filled by GECCO} + \item{terpene}{Score that cluster is terpene, filled by GECCO} + \item{sacharide}{Score that cluster is sacharide, filled by GECCO} + \item{ripp}{Score that cluster is ripp, filled by GECCO} + \item{num_prot}{Number of proteins in a cluster} + \item{num_domains}{Number of domains in a cluster} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv} +} +\usage{ +gecco_data +} +\description{ +Dataset containing list of clusters from GECCO, found in S.coelicolor +} +\keyword{datasets} diff --git a/man/prism_data.Rd b/man/prism_data.Rd new file mode 100644 index 0000000..533f39f --- /dev/null +++ b/man/prism_data.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{prism_data} +\alias{prism_data} +\title{BGC list from PRISM for S.coelicolor} +\format{ +A data frame with 19 rows and 4 variables: +\describe{ + \item{Cluster}{Cluster #, numeric} + \item{Start}{Start location of a cluster, in bp} + \item{Stop}{Stop location of a cluster, in bp} + \item{Type}{Type of a cluster} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} +} +\usage{ +prism_data +} +\description{ +Dataset containing list of clusters from PRISM, found in S.coelicolor +Generated automatically from json results file +} +\keyword{datasets} diff --git a/man/prism_supp_data.Rd b/man/prism_supp_data.Rd new file mode 100644 index 0000000..8b366e0 --- /dev/null +++ b/man/prism_supp_data.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{prism_supp_data} +\alias{prism_supp_data} +\title{Gene list from PRISM for S.coelicolor} +\format{ +A data frame with 125 rows and 9 variables: +\describe{ + \item{Cluster}{Gene #, numeric} + \item{Start}{Start location of a gene, in bp} + \item{Stop}{Stop location of a gene, in bp} + \item{Type}{Type of a gene} + \item{Full_name}{Annotation of a gene hit} + \item{ID}{Gene #, same as Cluster} + \item{Type2}{Type of a gene. Same as Type} + \item{Score}{Score of a gene hite} + \item{Name}{Name of model, or gene for a hit} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} +} +\usage{ +prism_supp_data +} +\description{ +Dataset containing list of regulatory and resistance from PRISM, found in S.coelicolor. +Generated automatically from json results file +} +\keyword{datasets} diff --git a/man/rre_data.Rd b/man/rre_data.Rd new file mode 100644 index 0000000..6923559 --- /dev/null +++ b/man/rre_data.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{rre_data} +\alias{rre_data} +\title{RRE list from RREFinder for S.coelicolor} +\format{ +A data frame with 27 rows and 6 variables: +\describe{ + \item{Cluster}{RRE #, numeric} + \item{Start}{Start location of a RRE, in bp} + \item{Stop}{Stop location of a RRE, in bp} + \item{Type}{Type of a RRE} + \item{chromosome}{chromosome, on which RRE is, filled automatically ipon file upload} + \item{Type2}{Type of a RRE, filled automatically upon file upload. Same as Type} + \item{Sequence}{Annotated sequence ID} + \item{Locus_tag}{Locus tag of a RRE element} + \item{BGC.ID}{Id, of a BGC} + \item{BGC.product}{Product of BGC} + \item{Domain.name}{Domain name of RRE element} + \item{E.value}{E-value of a hit} + \item{Bitscore}{Bitscore of a hit} + \item{End}{End of RRE element, bp} + \item{ID}{RRE ID, same as Cluster} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt} +} +\usage{ +rre_data +} +\description{ +Dataset containing list of RRE elements from RREFinder, found in S.coelicolor +} +\keyword{datasets} diff --git a/man/sempi_data.Rd b/man/sempi_data.Rd new file mode 100644 index 0000000..e50c7e6 --- /dev/null +++ b/man/sempi_data.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{sempi_data} +\alias{sempi_data} +\title{BGC list from SEMPI for S.coelicolor} +\format{ +A data frame with 33 rows and 5 variables: +\describe{ + \item{Cluster}{Cluster #, numeric} + \item{Start}{Start location of a cluster, in bp} + \item{Stop}{Stop location of a cluster, in bp} + \item{Type}{Type of a cluster} + \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} +} +} +\source{ +\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv} +} +\usage{ +sempi_data +} +\description{ +Dataset containing list of clusters from SEMPI, found in S.coelicolor +} +\keyword{datasets} From 747cbdb482c491d5b192917d327ae4a54e72c014 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 13:50:29 +0200 Subject: [PATCH 134/199] Added data internally Former-commit-id: 17e260cef58e1041bdd3ef3ac2a98cc230726b64 --- R/app_server.R | 43 +++++++++++++++++---------------- R/sysdata.rda | Bin 0 -> 36080 bytes data-raw/prism_data.R | 2 +- data-raw/use_data_internally.R | 1 + dev/02_dev.R | 1 + man/gecco_data.Rd | 2 +- 6 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 R/sysdata.rda create mode 100644 data-raw/use_data_internally.R diff --git a/R/app_server.R b/R/app_server.R index e539e15..fb16ad7 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -234,7 +234,7 @@ app_server <- function( input, output, session ) { } } - read_prism <- function(data, json=T){ + read_prism <- function(data, json=T, sco=F, supp=NULL){ if (json==T){ processed_data <- process_prism_json_suppl(data) shiny::updateCheckboxInput(inputId = "prism_supp", value = T) @@ -244,6 +244,14 @@ app_server <- function( input, output, session ) { vals$prism_supp_data <- processed_data[[2]] vals$prism_json = T } else { + if (sco==T){ + prism_data <- data + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + vals$prism_supp_data_input = T + vals$prism_supp <- supp + vals$prism_supp_data <- supp + vals$prism_json = T + } prism_data <- data } res_validation <- validate_basic_input(prism_data) @@ -438,7 +446,7 @@ app_server <- function( input, output, session ) { arts_data$Cluster <- arts_data$ID vals$arts_data <- arts_data } else { - vals$arts_data <- utils::read.csv(archive) + vals$arts_data <- archive } vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") @@ -559,48 +567,41 @@ app_server <- function( input, output, session ) { ## Loading and processing of example data - ##---------------------------------------------------------------- shiny::observeEvent(input$anti_sco,{ - anti_file <- system.file("extdata", "sco_antismash.csv", package = "BGCViz") - anti_data <- utils::read.csv(anti_file) + data("anti_data", package = "BGCViz") read_antismash(anti_data) }) shiny::observeEvent(input$gecco_sco,{ - gecco_file <- system.file("extdata", "sco_gecco.tsv", package = "BGCViz") - gecco_data <- utils::read.delim(gecco_file) + data("gecco_data", package = "BGCViz") read_gecco(gecco_data) }) shiny::observeEvent(input$prism_sco,{ - # Read data - prism_file <- system.file("extdata", "sco_prism.json", package = "BGCViz") - data <- rjson::fromJSON(file = prism_file) - read_prism(data) + data("prism_data", package = "BGCViz") + data("prism_supp_data", package = "BGCViz") + read_prism(prism_data, sco=T, supp=prism_supp_data) }) shiny::observeEvent(input$sempi_sco,{ - sempi_file <- system.file("extdata", "sco_sempi.csv", package = "BGCViz") - sempi_data <- utils::read.csv(sempi_file) + data("sempi_data", package = "BGCViz") read_sempi(sempi_data, zip = F) }) shiny::observeEvent(input$arts_sco, { - arts_file <- system.file("extdata", "sco_arts.csv", package = "BGCViz") - arts_data <- utils::read.csv(arts_file) - read_arts_archive(arts_file, zip=F) + data("arts_data", package = "BGCViz") + read_arts_archive(arts_data, zip=F) disable_event_logic() }) shiny::observeEvent(input$deep_sco, { - deep_file <- system.file("extdata", "sco_deep.tsv", package = "BGCViz") - data <- utils::read.delim(deep_file) - read_deep(data) + data("deep_data", package = "BGCViz") + read_deep(deep_data) }) shiny::observeEvent(input$rre_sco, { # Read data - rre_file <- system.file("extdata", "sco_rre.txt", package = "BGCViz") - data <- utils::read.delim(rre_file) - read_rre(data) + data <- data("rre_data", package = "BGCViz") + read_rre(rre_data) }) ##---------------------------------------------------------------- diff --git a/R/sysdata.rda b/R/sysdata.rda new file mode 100644 index 0000000000000000000000000000000000000000..319f0eecb03b35ba6c7dd897b659735b10bb00f5 GIT binary patch literal 36080 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 XMF%JpLQXhT|M Date: Thu, 2 Jun 2022 13:52:59 +0200 Subject: [PATCH 135/199] Deleted documentation and external datasets Former-commit-id: cd3b86485c3ed31cffd6f12959a17ba6ed1d0b2b --- R/data.R | 148 --------------------------------------- data/anti_data.rda | Bin 766 -> 0 bytes data/arts_data.rda | Bin 5438 -> 0 bytes data/deep_data.rda | Bin 20389 -> 0 bytes data/gecco_data.rda | Bin 4927 -> 0 bytes data/prism_data.rda | Bin 600 -> 0 bytes data/prism_supp_data.rda | Bin 5037 -> 0 bytes data/rre_data.rda | Bin 427 -> 0 bytes data/sempi_data.rda | Bin 630 -> 0 bytes 9 files changed, 148 deletions(-) delete mode 100644 R/data.R delete mode 100644 data/anti_data.rda delete mode 100644 data/arts_data.rda delete mode 100644 data/deep_data.rda delete mode 100644 data/gecco_data.rda delete mode 100644 data/prism_data.rda delete mode 100644 data/prism_supp_data.rda delete mode 100644 data/rre_data.rda delete mode 100644 data/sempi_data.rda diff --git a/R/data.R b/R/data.R deleted file mode 100644 index a7e9119..0000000 --- a/R/data.R +++ /dev/null @@ -1,148 +0,0 @@ -#' BGC list from antiSMASH for S.coelicolor -#' -#' Dataset containing list of clusters from antiSMASH5, found in S.coelicolor -#' -#' @format A data frame with 27 rows and 6 variables: -#' \describe{ -#' \item{Cluster}{Cluster #, numeric} -#' \item{Start}{Start location of a cluster, in bp} -#' \item{Stop}{Stop location of a cluster, in bp} -#' \item{Type}{Type of a cluster} -#' \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} -#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv} -"anti_data" -#' Gene list from ARTS for S.coelicolor -#' -#' Dataset containing list of core and resistance genes from ARTS, found in S.coelicolor. -#' It is generated automatically upon zip folder from ARTS upload -#' -#' @format A data frame with 161 rows and 13 variables: -#' \describe{ -#' \item{Cluster}{Gene #, numeric} -#' \item{Start}{Start location of a gene, in bp} -#' \item{Stop}{Stop location of a gene, in bp} -#' \item{Type}{Type of a gene} -#' \item{Hit}{Unique core gene hit identifier, based on count of genes} -#' \item{Type2}{Type of a gene, same as Type} -#' \item{Core}{Type of core model from ARTS} -#' \item{Description}{Annotation of a gene} -#' \item{Count}{Count of a gene hit, to keep track of multiple hits} -#' \item{ID}{Gene #, same as Cluster} -#' \item{Evalue}{E-value of a resistance gene hit} -#' \item{Bitscore}{Bitscore of a resistance gene hit} -#' \item{Model}{Type of Model of gene hit. If core gene, then the model is Core} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_arts.csv} -"arts_data" -#' BGC list from DeepBGC for S.coelicolor -#' -#' Dataset containing list of clusters from DeepBGC, found in S.coelicolor -#' For full description see DeepBGC documentation! -#' -#' @format A data frame with 172 rows and 28 variables: -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv} -"deep_data" -#' BGC list from GECCO for S.coelicolor -#' -#' Dataset containing list of clusters from GECCO, found in S.coelicolor -#' -#' @format A data frame with 27 rows and 6 variables: -#' \describe{ -#' \item{Cluster}{Cluster #, numeric} -#' \item{Start}{Start location of a cluster, in bp} -#' \item{Stop}{Stop location of a cluster, in bp} -#' \item{Type}{Type of a cluster} -#' \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} -#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} -#' \item{ID}{Cluster #. Same as Cluster} -#' \item{average_p}{Average probability of a cluster} -#' \item{max_p}{Maximum probability of a cluster} -#' \item{bgc_id}{ID of a cluster, filled by GECCO} -#' \item{sequence_id}{ID of annotated sequence} -#' \item{type}{Type of a cluster, filled by GECCO} -#' \item{proteins}{list of identified proteins in a cluster, filled by GECCO} -#' \item{domains}{list of identified domains in a cluster, filled by GECCO} -#' \item{pks}{Score that cluster is pks, filled by GECCO} -#' \item{other}{Score that cluster is other, filled by GECCO} -#' \item{nrps}{Score that cluster is nrps, filled by GECCO} -#' \item{alkaloid}{Score that cluster is alkaloid, filled by GECCO} -#' \item{terpene}{Score that cluster is terpene, filled by GECCO} -#' \item{saccharide}{Score that cluster is sacharide, filled by GECCO} -#' \item{ripp}{Score that cluster is ripp, filled by GECCO} -#' \item{num_prot}{Number of proteins in a cluster} -#' \item{num_domains}{Number of domains in a cluster} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv} -"gecco_data" -#' BGC list from PRISM for S.coelicolor -#' -#' Dataset containing list of clusters from PRISM, found in S.coelicolor -#' Generated automatically from json results file -#' @format A data frame with 19 rows and 4 variables: -#' \describe{ -#' \item{Cluster}{Cluster #, numeric} -#' \item{Start}{Start location of a cluster, in bp} -#' \item{Stop}{Stop location of a cluster, in bp} -#' \item{Type}{Type of a cluster} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} -"prism_data" -#' Gene list from PRISM for S.coelicolor -#' -#' Dataset containing list of regulatory and resistance from PRISM, found in S.coelicolor. -#' Generated automatically from json results file -#' -#' @format A data frame with 125 rows and 9 variables: -#' \describe{ -#' \item{Cluster}{Gene #, numeric} -#' \item{Start}{Start location of a gene, in bp} -#' \item{Stop}{Stop location of a gene, in bp} -#' \item{Type}{Type of a gene} -#' \item{Full_name}{Annotation of a gene hit} -#' \item{ID}{Gene #, same as Cluster} -#' \item{Type2}{Type of a gene. Same as Type} -#' \item{Score}{Score of a gene hite} -#' \item{Name}{Name of model, or gene for a hit} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} -"prism_supp_data" -#' RRE list from RREFinder for S.coelicolor -#' -#' Dataset containing list of RRE elements from RREFinder, found in S.coelicolor -#' -#' @format A data frame with 27 rows and 6 variables: -#' \describe{ -#' \item{Cluster}{RRE #, numeric} -#' \item{Start}{Start location of a RRE, in bp} -#' \item{Stop}{Stop location of a RRE, in bp} -#' \item{Type}{Type of a RRE} -#' \item{chromosome}{chromosome, on which RRE is, filled automatically ipon file upload} -#' \item{Type2}{Type of a RRE, filled automatically upon file upload. Same as Type} -#' \item{Sequence}{Annotated sequence ID} -#' \item{Locus_tag}{Locus tag of a RRE element} -#' \item{BGC.ID}{Id, of a BGC} -#' \item{BGC.product}{Product of BGC} -#' \item{Domain.name}{Domain name of RRE element} -#' \item{E.value}{E-value of a hit} -#' \item{Bitscore}{Bitscore of a hit} -#' \item{End}{End of RRE element, bp} -#' \item{ID}{RRE ID, same as Cluster} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt} -"rre_data" -#' BGC list from SEMPI for S.coelicolor -#' -#' Dataset containing list of clusters from SEMPI, found in S.coelicolor -#' -#' @format A data frame with 33 rows and 5 variables: -#' \describe{ -#' \item{Cluster}{Cluster #, numeric} -#' \item{Start}{Start location of a cluster, in bp} -#' \item{Stop}{Stop location of a cluster, in bp} -#' \item{Type}{Type of a cluster} -#' \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} -#' } -#' @source \url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv} -"sempi_data" \ No newline at end of file diff --git a/data/anti_data.rda b/data/anti_data.rda deleted file mode 100644 index 033179f961cdb6b0b51d02adfd3887d8a93733bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 766 zcmVdXH+1$q;FY zfJ^}}Mw(y%OaPi17?=P600dze1Zjzoz!<4b0004|jQ|Fk02%-RpfnmiOn}e;0B8UJ z0;rH8U=gZ%pP@B0JxvV&27^X`0000027olv^&@2lKo2f=D>LDUMYyurePT7G3>q)g z#W0L{DFz8fS$Wy+%fFV^#I9)Y^mciA9XFctZArJeM+h$t8{7--jx!SiYu3>rE^6UD_>NFM6eqFT?jlW zG< zrxACW-&8$oDG{m9y{w%2J0xOpR@speiH~EqWrhRTO1KNmr86cbAoheg(*) z6|Hobmc@=r$_vQm)v&oLajl5fX+{;xnFVamU9QOBN;VF5Oan0tDz7xYW94i_R>HV` zH@7U(p-d*86&Q(0T2?Q(hU@K0xQm+Yw6>aQR7y5cV{frn&dH>y`y~sJS~-V&<|Qst zRV87WavBl$Z7CnF1aVAkZ1$qP2m;Gel!YPF}{Kd6*48_ wv6CBe7CZ}vE|-OF(MuK=yhC}3pKx5pwlQz!KJCB^!GFcvkxmpOEl18^0QVJ6ng9R* diff --git a/data/arts_data.rda b/data/arts_data.rda deleted file mode 100644 index 1181638e6dead85dc0e38da3be21ad30d4dd5136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5438 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 KmkYa*bfi16f*3<@em|PImi0RkfkAOVs_}4)@ph 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 h3D+g{h%aKMnym+~U diff --git a/data/prism_data.rda b/data/prism_data.rda deleted file mode 100644 index 260f7ee2ebc186b97f9f3de50a6cfb9b2cb6b087..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 600 zcmV-e0;l~#T4*^jL0KkKSwq3ad;kGrfB*mY-R|{u_(ARXU*G@l|FA>hV3bs#0sue( z20=g~NGHGnw{=aY3Z(J@G|7a~fQC#HO)vz(GCd;+gv8BEji_NTObr9nGJ`~#h9Y`t zr>YGZ0MN+L$N6pa1{>B@z)H zp`bJaLq>r000000000_j27nC!0z^HE5PH1E^Drjk`e#O8;+6GPY*!;kX3j;ew3$~F zFsg3q$N>zLb}JASs+56X`lX>8R6-q6jB(^(oY5bMF-1{TMS!X37-)z|@%oJ+He^7x zj0pS&gg_8{kIqG^1(67zVHu=#pnRjDDySpyL{I?iVhjWtR1i%?Oy|2;KnT?cQA}P^ zux&WfU35btVS+QiRy!TY%7Duh#@7;2gedy0B+D7R=}iK6`b3B=fIc9C1fENz;)V8C zq*$&DmwFU2!2H*^+-xH$z@kIgZReM!BS{~%MvGS6Ez4mtfv}X2KEweqZRuP0Q>-^! zk|08YSM9jbDFtAc9n3Oxr$Q^Lt><;5p%Jh<8W}*XaDx=+LDd z@?y~$E#T~s_6+4HDA1Bdt4#7VNNVT|)I?x|@(s;|+ae<{2t4s&M!e!MV8N_SyD(rq ze$v67_lRJOq7qjV=cH!52ue`B4pWN&i$Fo4t-^x9XulczcL_9Eq>q4>YR=fyN-oc6 mA>0v!2}SSE_sl_i>J&M4M51hf7HH@N{}*yaI8cy7!Nq(Dt_8vX diff --git a/data/prism_supp_data.rda b/data/prism_supp_data.rda deleted file mode 100644 index c64344e4e577e2147ee73adb098d5cdbed4cce29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5037 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 Va$Z&E`ki@SzEs5u5r#QS_%B*A0J#7F diff --git a/data/rre_data.rda b/data/rre_data.rda deleted file mode 100644 index 7dbe66ee849bcebc15b982658a7d1e9f69b48bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427 zcmV;c0aX4%T4*^jL0KkKSs*2(bpQc6f8YQ6=^y|BS!({J{7Hv{Zs(zHyAk#xY&;SM?0MHr-s5BY}C0C#FVjxt|77&mG=V%HINg|ag1Pe)h z$#vSX&gK8g7VAPZi}E*rPiP?!U|MNu(UYm9Br=H-qn>$*NSP(Q$zio6NX+|O*Vz;) zJOFJV(gY0xAjtuy&=RzSD^%nH3?Ry56=sKW?xDd}dy>C?$@x5y4J*QGplQJw*H{3V zfWhp$NlelS3Y%}?!<1yuW6m<=0N$281L} z(p}3-Wt~=lWr3iYz&6e-;4!Jz(4li7)5vO)bqjSa;9yl2?^zmh81c3H&2_pp*S5d* VzSi!Sga{GjUC9*TLO_6)k<=50xG(?! diff --git a/data/sempi_data.rda b/data/sempi_data.rda deleted file mode 100644 index 1bd8825fbd7b7377a8fd358eb28bfce85507d714..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmV-+0*U=XT4*^jL0KkKS&2^TV({}W1{2RxR8;OlXEEQRoc?V3X6~2>5v4$ zg}I0m{|5&IK#9m{1O)+x4|)KFgCmer#~`KxLlPI}_5v~;+ZO{A4L!+AjLNS^4oPFre3{~ z;TetLnGhjB@HXIj$R%3{75)|xt=O{)n#F)Ss#xaZr44j#B^7^rf5sZDqrj{P Date: Thu, 2 Jun 2022 16:20:46 +0200 Subject: [PATCH 136/199] Refractored reading functions. Fix Prism-supp bug in deep_reference. Fix ARTS data bug loading Former-commit-id: 56aef84c5e92df846d5c5056ee8bb947b22b8f82 --- R/app_server.R | 336 ++++++++++---------------------------- R/fct_reading_functions.R | 249 ++++++++++++++++++++++++++++ R/mod_deep_reference_2.R | 4 +- man/anti_data.Rd | 27 --- man/arts_data.Rd | 35 ---- man/deep_data.Rd | 20 --- man/gecco_data.Rd | 44 ----- man/prism_data.Rd | 26 --- man/prism_supp_data.Rd | 31 ---- man/rre_data.Rd | 36 ---- man/sempi_data.Rd | 26 --- 11 files changed, 333 insertions(+), 501 deletions(-) create mode 100644 R/fct_reading_functions.R delete mode 100644 man/anti_data.Rd delete mode 100644 man/arts_data.Rd delete mode 100644 man/deep_data.Rd delete mode 100644 man/gecco_data.Rd delete mode 100644 man/prism_data.Rd delete mode 100644 man/prism_supp_data.Rd delete mode 100644 man/rre_data.Rd delete mode 100644 man/sempi_data.Rd diff --git a/R/app_server.R b/R/app_server.R index fb16ad7..7cc056e 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -22,7 +22,8 @@ app_server <- function( input, output, session ) { ) }) inputData <- shiny::reactive({ - list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input + list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, + vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input,vals$arts_data_input ) }) dynamicInput <- shiny::reactive({ @@ -31,7 +32,7 @@ app_server <- function( input, output, session ) { }) deep_reference <- shiny::reactive({ list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data) + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data) }) to_debounce <- shiny::reactive({ @@ -56,7 +57,7 @@ app_server <- function( input, output, session ) { gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F ) vals$computed <- list( @@ -142,20 +143,12 @@ app_server <- function( input, output, session ) { # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - read_antismash <- function(data){ - anti_data <- data - res_validation <- validate_basic_input(anti_data) - if (!(res_validation[[1]])){ - anti_data <- NULL - return(NULL) - } else{ - anti_data <- res_validation[[2]] + process_antismash <- function(data, example_data=F){ + if (example_data==T) { + anti_data <- data + } else { + anti_data <- read_anti(data) } - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) vals$anti_type <- anti_data$Type2 vals$anti_data <- anti_data # Save file @@ -182,37 +175,13 @@ app_server <- function( input, output, session ) { selected = "Antismash") } - return(anti_data) } - read_gecco <- function(data){ - # Silence R CMD note - polyketide_probability <- other_probability <- - nrp_probability <- alkaloid_probability <- - terpene_probability <- saccharide_probability <- - ripp_probability <- NULL - # Add chromosome column - gecco_data <- data - - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) - # Read data - gecco_data <- gecco_data %>% - dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + process_gecco <- function(data, example_data = F){ + if (example_data==T) { + gecco_data <- data + } else { + gecco_data <- read_gecco(data) + } vals$gecco_data <- gecco_data vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) # Save file @@ -234,39 +203,36 @@ app_server <- function( input, output, session ) { } } - read_prism <- function(data, json=T, sco=F, supp=NULL){ - if (json==T){ - processed_data <- process_prism_json_suppl(data) - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - prism_data <- processed_data[[1]] + process_prism <- function(data, json=T, example_data=F){ + if (example_data==T) { + prism_data <- data + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_supp_data_input = T - vals$prism_supp <- processed_data[[2]] - vals$prism_supp_data <- processed_data[[2]] - vals$prism_json = T + vals$prism_supp <- BGCViz:::prism_supp_data + vals$prism_supp_data <- BGCViz:::prism_supp_data + vals$prism_supp_plot <- T + vals$prism_json = T + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) } else { - if (sco==T){ - prism_data <- data - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + if (json == T){ + processed <- read_prism(data, json=T) + prism_data <- processed[[1]] vals$prism_supp_data_input = T - vals$prism_supp <- supp - vals$prism_supp_data <- supp - vals$prism_json = T + vals$prism_supp <- processed[[2]] + vals$prism_supp_data <- processed[[2]] + vals$prism_json = TT + vals$prism_supp_plot <- + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + } else { + processed <- read_prism(data, json=F) + prism_data <- processed[[1]] } - prism_data <- data - } - res_validation <- validate_basic_input(prism_data) - if (!(res_validation[[1]])){ - prism_data <- NULL - return(NULL) - } else{ - prism_data <- res_validation[[2]] } vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") update_ui_with_data() - prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) vals$prism_data <- prism_data vals$prism_type <- prism_data$Type2 @@ -298,43 +264,16 @@ app_server <- function( input, output, session ) { selected = "PRISM") } } - read_sempi <- function(data, zip=T){ - # Silence R CMD note - trackid <- NULL - if (zip==T){ - utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) - fl <- "./SEMPI_TracksDB/Tracks.db" - conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) - - data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") - RSQLite::dbDisconnect(conn) - unlink("./SEMPI_TracksDB", recursive = T) - data <- data %>% - dplyr::filter(trackid==6) - - types <- sapply(data$name, function(x){ - tmp <- stringr::str_trim(x) - tmp <- gsub(", ", "", tmp) - gsub(" ", "__", tmp) - }) - - sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) - colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") - sempi_data$Cluster <- as.numeric(sempi_data$Cluster) - sempi_data$Start <- as.numeric(sempi_data$Start) - sempi_data$Stop <- as.numeric(sempi_data$Stop) - sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) - } else { + process_sempi <- function(data, zip=T, example_data = F){ + if (example_data == T){ sempi_data <- data + } else { + if (zip == T){ + sempi_data <- read_sempi(data, zip=T) + } else { + sempi_data <- read_sempi(data, zip=F) + } } - res_validation <- validate_basic_input(sempi_data) - if (!(res_validation[[1]])){ - sempi_data <- NULL - return(NULL) - } else{ - sempi_data <- res_validation[[2]] - } - sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data # Add chromosome info column @@ -365,89 +304,17 @@ app_server <- function( input, output, session ) { selected = "SEMPI") } } - read_arts_archive <- function(archive, zip = T){ - # Silence R CMD note - Start <- Core <- NULL - if (zip == T){ - utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) - known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") - dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") - unlink("./ARTS_tables", recursive = T) - locations <- sapply(known_hits$Sequence.description, function(x){ - utils::tail(stringr::str_split(x , "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x){ - stringr::str_split(x, "_")[[1]][2] - }) - # Parse known_hits data - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- known_hits$Description - known_table$Model <- known_hits$X.Model - known_table$Evalue <- known_hits$evalue - known_table$Bitscore <- known_hits$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - # Parse duplication data - get_location_duptable <- function(x, y){ - test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id,start, stop) - res <- append(res, list(res_1)) - } - return(res) - - } - - dup_table <- data.frame() - for (i in seq(1:dim(dupl_table)[1])){ - lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- dupl_table$X.Core_gene[i] - fin_data$Description <- dupl_table$Description[i] - fin_data$Count <- dupl_table$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - vals$arts_data <- arts_data + process_arts_archive <- function(archive, zip = T, example_data = F){ + if (example_data == T){ + arts_data <- BGCViz:::arts_data } else { - vals$arts_data <- archive + if (zip == T){ + arts_data <- read_arts_archive(archive, zip=T) + } else { + arts_data <- utils::read.csv(archive) + } } + vals$arts_data <- arts_data vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") @@ -468,23 +335,12 @@ app_server <- function( input, output, session ) { selected = "ARTS") } } - read_deep <- function(data){ - polyketide <- nrp <- NULL # Silence R CMD error - # Fix colnames in deepbgc data - colnames(data) <- stringr::str_to_lower(colnames(data)) - res_validation <- validate_deep_input(data) - if (!(res_validation[[1]])){ - deep_data <- NULL - return(NULL) - } else{ - deep_data <- res_validation[[2]] + process_deep <- function(data, example_data = F){ + if (example_data == T){ + deep_data <- data + } else { + deep_data <- read_deep(data) } - drop_cols <- c("nrp","polyketide") - # Read data - deep_data <- deep_data %>% - dplyr::mutate(pks=polyketide, nrps = nrp ) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - # Add chromosome info column vals$deep_data <- deep_data vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) vals$deep_data$Start <- vals$deep_data$nucl_start @@ -512,31 +368,13 @@ app_server <- function( input, output, session ) { } } - read_rre <- function(data){ - Gene.name <- Coordinates <- NULL # Silence R CMD error - res_validation <- validate_rre_input(data) - if (!(res_validation[[1]])){ - data <- NULL - return(NULL) - } else{ - data <- res_validation[[2]] + process_rre <- function(data, example_data = F){ + if (example_data == T){ + rre_data <- data + } else { + rre_data <- read_rre(data) } - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - vals$rre_data <- data %>% - tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") - # Add chromosome info column - vals$rre_data$chromosome <- rep("RRE",length(vals$rre_data$Sequence)) - # Add ID column - vals$rre_data$ID <- seq(1:length(vals$rre_data$Sequence)) - vals$rre_data$Cluster <- vals$rre_data$ID - vals$rre_data <- data.frame(vals$rre_data) - vals$rre_data['Type'] <- 'ripp' - vals$rre_data['Type2'] <- 'ripp' - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - vals$rre_data <- data.frame(vals$rre_data) + vals$rre_data <- rre_data #write.csv(vals$rre_data, "rre_data.csv", row.names = F) vals$rre_data_input = TRUE @@ -567,41 +405,31 @@ app_server <- function( input, output, session ) { ## Loading and processing of example data - ##---------------------------------------------------------------- shiny::observeEvent(input$anti_sco,{ - data("anti_data", package = "BGCViz") - read_antismash(anti_data) + process_antismash(BGCViz:::anti_data, example_data = T) }) shiny::observeEvent(input$gecco_sco,{ - data("gecco_data", package = "BGCViz") - read_gecco(gecco_data) + process_gecco(BGCViz:::gecco_data, example_data = T) }) shiny::observeEvent(input$prism_sco,{ - data("prism_data", package = "BGCViz") - data("prism_supp_data", package = "BGCViz") - read_prism(prism_data, sco=T, supp=prism_supp_data) + process_prism(BGCViz:::prism_data, example_data = T) }) shiny::observeEvent(input$sempi_sco,{ - data("sempi_data", package = "BGCViz") - read_sempi(sempi_data, zip = F) + process_sempi(BGCViz:::sempi_data, example_data = T) }) shiny::observeEvent(input$arts_sco, { - data("arts_data", package = "BGCViz") - read_arts_archive(arts_data, zip=F) - disable_event_logic() + process_arts_archive(BGCViz:::arts_data, example_data = T) }) shiny::observeEvent(input$deep_sco, { - data("deep_data", package = "BGCViz") - read_deep(deep_data) + process_deep(BGCViz:::deep_data, example_data = T) }) shiny::observeEvent(input$rre_sco, { - # Read data - data <- data("rre_data", package = "BGCViz") - read_rre(rre_data) + process_rre(BGCViz:::rre_data, example_data = T) }) ##---------------------------------------------------------------- @@ -662,7 +490,7 @@ app_server <- function( input, output, session ) { } - read_antismash(anti_data) + process_antismash(anti_data) }) @@ -670,9 +498,9 @@ app_server <- function( input, output, session ) { if (input$sempi_data$type=="text/csv"){ sempi_data <- utils::read.csv(input$sempi_data$datapath) - read_sempi(sempi_data, zip = F) + process_sempi(sempi_data, zip = F) } else { - read_sempi(input$sempi_data$datapath, zip = T) + process_sempi(input$sempi_data$datapath, zip = T) } }) @@ -680,7 +508,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$gecco_data,{ gecco_data <- utils::read.delim(input$gecco_data$datapath) - read_gecco(gecco_data) + process_gecco(gecco_data) }) @@ -690,9 +518,9 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$arts_data, { disable_event_logic() if (input$arts_data$type=="text/csv"){ - read_arts_archive(input$arts_data$datapath, zip = F) + process_arts_archive(input$arts_data$datapath, zip = F) } else { - read_arts_archive(input$arts_data$datapath, zip = T) + process_arts_archive(input$arts_data$datapath, zip = T) } }) @@ -702,10 +530,10 @@ app_server <- function( input, output, session ) { # Read data if (input$prism_data$type == "text/csv"){ prism_data <- utils::read.csv(input$prism_data$datapath) - read_prism(prism_data, json=F) + process_prism(prism_data, json=F) } else{ data <- rjson::fromJSON(file = input$prism_data$datapath) - read_prism(data) + process_prism(data) } }) @@ -713,14 +541,14 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$deep_data, { data <- utils::read.delim(input$deep_data$datapath) - read_deep(data) + process_deep(data) }) shiny::observeEvent(input$rre_data, { # Read data rre_data <- utils::read.delim(input$rre_data$datapath) - read_rre(rre_data) + process_rre(rre_data) }) ############################################################################ @@ -1233,6 +1061,7 @@ app_server <- function( input, output, session ) { shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ if (input$prism_supp == T){ vals$prism_supp_data_input = T + vals$prism_supp_plot <- T vals$need_filter <- T if (!("PRISM-Supp" %in% names(vals$choices$ref))){ vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") @@ -1243,6 +1072,7 @@ app_server <- function( input, output, session ) { } else { vals$prism_supp_data_input = F vals$need_filter <- T + vals$prism_supp_plot <- F vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref)%in%c("PRISM-Supp"))] vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by)%in%c("PRISM-Supp"))] vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos)%in%c("PRISM-Supp"))] diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R new file mode 100644 index 0000000..f3d572c --- /dev/null +++ b/R/fct_reading_functions.R @@ -0,0 +1,249 @@ +#' read_anti +#' +#' @description A function, that reads antismash file +#' +#' @return csv file +#' +#' @noRd +read_anti <- function(data){ + anti_data <- data + res_validation <- validate_basic_input(anti_data) + if (!(res_validation[[1]])){ + anti_data <- NULL + return(NULL) + } else{ + anti_data <- res_validation[[2]] + } + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) + anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) + return(anti_data) +} +#' read_anti +#' +#' @description A function, that reads antismash file +#' +#' @return csv file +#' +#' @noRd +read_gecco <- function(data){ + # Silence R CMD note + polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- + ripp_probability <- NULL + # Add chromosome column + gecco_data <- data + + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) + drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability" , "other_probability" ) + # Read data + gecco_data <- gecco_data %>% + dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + return(gecco_data) +} +read_prism <- function(data, json=T){ + if (json==T){ + processed_data <- process_prism_json_suppl(data) + prism_data <- processed_data[[1]] + prism_supp_data <- processed_data[[2]] + } else { + prism_data <- data + prism_supp_data <- NULL + } + res_validation <- validate_basic_input(prism_data) + if (!(res_validation[[1]])){ + prism_data <- NULL + return(NULL) + } else{ + prism_data <- res_validation[[2]] + } + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) + return(list(prism_data, prism_supp_data)) +} +read_sempi <- function(data, zip=T){ + # Silence R CMD note + trackid <- NULL + if (zip==T){ + utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + fl <- "./SEMPI_TracksDB/Tracks.db" + conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) + + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + RSQLite::dbDisconnect(conn) + unlink("./SEMPI_TracksDB", recursive = T) + data <- data %>% + dplyr::filter(trackid==6) + + types <- sapply(data$name, function(x){ + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) + }) + + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) + colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") + sempi_data$Cluster <- as.numeric(sempi_data$Cluster) + sempi_data$Start <- as.numeric(sempi_data$Start) + sempi_data$Stop <- as.numeric(sempi_data$Stop) + sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) + } else { + sempi_data <- data + } + res_validation <- validate_basic_input(sempi_data) + if (!(res_validation[[1]])){ + sempi_data <- NULL + return(NULL) + } else{ + sempi_data <- res_validation[[2]] + } + sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) + return(sempi_data) +} +read_arts_archive <- function(archive, zip = T){ + # Silence R CMD note + Start <- Core <- NULL + if (zip == T){ + utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) + known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") + dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") + unlink("./ARTS_tables", recursive = T) + locations <- sapply(known_hits$Sequence.description, function(x){ + utils::tail(stringr::str_split(x , "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x){ + stringr::str_split(x, "_")[[1]][2] + }) + # Parse known_hits data + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start ) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- known_hits$Description + known_table$Model <- known_hits$X.Model + known_table$Evalue <- known_hits$evalue + known_table$Bitscore <- known_hits$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <-known_table$ID + known_table$Type <- 'resistance' + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + # Parse duplication data + get_location_duptable <- function(x, y){ + test <- stringr::str_split(x, ";") + test2<- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))){ + id <- paste('hit',as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id,start, stop) + res <- append(res, list(res_1)) + } + return(res) + + } + + dup_table <- data.frame() + for (i in seq(1:dim(dupl_table)[1])){ + lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- dupl_table$X.Core_gene[i] + fin_data$Description <- dupl_table$Description[i] + fin_data$Count <- dupl_table$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- 'core' + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + } else { + arts_data <- archive + } + return(arts_data) +} +read_deep <- function(data){ + polyketide <- nrp <- NULL # Silence R CMD error + # Fix colnames in deepbgc data + colnames(data) <- stringr::str_to_lower(colnames(data)) + res_validation <- validate_deep_input(data) + if (!(res_validation[[1]])){ + deep_data <- NULL + return(NULL) + } else{ + deep_data <- res_validation[[2]] + } + drop_cols <- c("nrp","polyketide") + # Read data + deep_data <- deep_data %>% + dplyr::mutate(pks=polyketide, nrps = nrp ) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + return(deep_data) +} +read_rre <- function(data){ + Gene.name <- Coordinates <- NULL # Silence R CMD error + res_validation <- validate_rre_input(data) + if (!(res_validation[[1]])){ + data <- NULL + return(NULL) + } else{ + data <- res_validation[[2]] + } + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + rre_data <- data %>% + tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") + # Add chromosome info column + rre_data$chromosome <- rep("RRE",length(rre_data$Sequence)) + # Add ID column + rre_data$ID <- seq(1:length(rre_data$Sequence)) + rre_data$Cluster <- rre_data$ID + rre_data <- data.frame(rre_data) + rre_data['Type'] <- 'ripp' + rre_data['Type2'] <- 'ripp' + rre_data$Start <- as.numeric(rre_data$Start) + rre_data$Stop <- as.numeric(rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(rre_data) + +} \ No newline at end of file diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 406c2f4..48a3562 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -103,12 +103,10 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ } - if (!(is.null(input$prism_supp ))){ - if (input$prism_supp == TRUE){ + if (vals$prism_supp_plot == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score), size = 3) - } } if (vals$arts_data_input == TRUE){ plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, diff --git a/man/anti_data.Rd b/man/anti_data.Rd deleted file mode 100644 index 6ae55d9..0000000 --- a/man/anti_data.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{anti_data} -\alias{anti_data} -\title{BGC list from antiSMASH for S.coelicolor} -\format{ -A data frame with 27 rows and 6 variables: -\describe{ - \item{Cluster}{Cluster #, numeric} - \item{Start}{Start location of a cluster, in bp} - \item{Stop}{Stop location of a cluster, in bp} - \item{Type}{Type of a cluster} - \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} - \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv} -} -\usage{ -anti_data -} -\description{ -Dataset containing list of clusters from antiSMASH5, found in S.coelicolor -} -\keyword{datasets} diff --git a/man/arts_data.Rd b/man/arts_data.Rd deleted file mode 100644 index 9518937..0000000 --- a/man/arts_data.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{arts_data} -\alias{arts_data} -\title{Gene list from ARTS for S.coelicolor} -\format{ -A data frame with 161 rows and 13 variables: -\describe{ - \item{Cluster}{Gene #, numeric} - \item{Start}{Start location of a gene, in bp} - \item{Stop}{Stop location of a gene, in bp} - \item{Type}{Type of a gene} - \item{Hit}{Unique core gene hit identifier, based on count of genes} - \item{Type2}{Type of a gene, same as Type} - \item{Core}{Type of core model from ARTS} - \item{Description}{Annotation of a gene} - \item{Count}{Count of a gene hit, to keep track of multiple hits} - \item{ID}{Gene #, same as Cluster} - \item{Evalue}{E-value of a resistance gene hit} - \item{Bitscore}{Bitscore of a resistance gene hit} - \item{Model}{Type of Model of gene hit. If core gene, then the model is Core} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_arts.csv} -} -\usage{ -arts_data -} -\description{ -Dataset containing list of core and resistance genes from ARTS, found in S.coelicolor. -It is generated automatically upon zip folder from ARTS upload -} -\keyword{datasets} diff --git a/man/deep_data.Rd b/man/deep_data.Rd deleted file mode 100644 index 5164ad3..0000000 --- a/man/deep_data.Rd +++ /dev/null @@ -1,20 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{deep_data} -\alias{deep_data} -\title{BGC list from DeepBGC for S.coelicolor} -\format{ -A data frame with 172 rows and 28 variables: -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv} -} -\usage{ -deep_data -} -\description{ -Dataset containing list of clusters from DeepBGC, found in S.coelicolor -For full description see DeepBGC documentation! -} -\keyword{datasets} diff --git a/man/gecco_data.Rd b/man/gecco_data.Rd deleted file mode 100644 index 75b0296..0000000 --- a/man/gecco_data.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{gecco_data} -\alias{gecco_data} -\title{BGC list from GECCO for S.coelicolor} -\format{ -A data frame with 27 rows and 6 variables: -\describe{ - \item{Cluster}{Cluster #, numeric} - \item{Start}{Start location of a cluster, in bp} - \item{Stop}{Stop location of a cluster, in bp} - \item{Type}{Type of a cluster} - \item{chromosome}{chromosome, on which cluster is, filled automatically ipon file upload} - \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} - \item{ID}{Cluster #. Same as Cluster} - \item{average_p}{Average probability of a cluster} - \item{max_p}{Maximum probability of a cluster} - \item{bgc_id}{ID of a cluster, filled by GECCO} - \item{sequence_id}{ID of annotated sequence} - \item{type}{Type of a cluster, filled by GECCO} - \item{proteins}{list of identified proteins in a cluster, filled by GECCO} - \item{domains}{list of identified domains in a cluster, filled by GECCO} - \item{pks}{Score that cluster is pks, filled by GECCO} - \item{other}{Score that cluster is other, filled by GECCO} - \item{nrps}{Score that cluster is nrps, filled by GECCO} - \item{alkaloid}{Score that cluster is alkaloid, filled by GECCO} - \item{terpene}{Score that cluster is terpene, filled by GECCO} - \item{saccharide}{Score that cluster is sacharide, filled by GECCO} - \item{ripp}{Score that cluster is ripp, filled by GECCO} - \item{num_prot}{Number of proteins in a cluster} - \item{num_domains}{Number of domains in a cluster} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv} -} -\usage{ -gecco_data -} -\description{ -Dataset containing list of clusters from GECCO, found in S.coelicolor -} -\keyword{datasets} diff --git a/man/prism_data.Rd b/man/prism_data.Rd deleted file mode 100644 index 533f39f..0000000 --- a/man/prism_data.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{prism_data} -\alias{prism_data} -\title{BGC list from PRISM for S.coelicolor} -\format{ -A data frame with 19 rows and 4 variables: -\describe{ - \item{Cluster}{Cluster #, numeric} - \item{Start}{Start location of a cluster, in bp} - \item{Stop}{Stop location of a cluster, in bp} - \item{Type}{Type of a cluster} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} -} -\usage{ -prism_data -} -\description{ -Dataset containing list of clusters from PRISM, found in S.coelicolor -Generated automatically from json results file -} -\keyword{datasets} diff --git a/man/prism_supp_data.Rd b/man/prism_supp_data.Rd deleted file mode 100644 index 8b366e0..0000000 --- a/man/prism_supp_data.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{prism_supp_data} -\alias{prism_supp_data} -\title{Gene list from PRISM for S.coelicolor} -\format{ -A data frame with 125 rows and 9 variables: -\describe{ - \item{Cluster}{Gene #, numeric} - \item{Start}{Start location of a gene, in bp} - \item{Stop}{Stop location of a gene, in bp} - \item{Type}{Type of a gene} - \item{Full_name}{Annotation of a gene hit} - \item{ID}{Gene #, same as Cluster} - \item{Type2}{Type of a gene. Same as Type} - \item{Score}{Score of a gene hite} - \item{Name}{Name of model, or gene for a hit} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json} -} -\usage{ -prism_supp_data -} -\description{ -Dataset containing list of regulatory and resistance from PRISM, found in S.coelicolor. -Generated automatically from json results file -} -\keyword{datasets} diff --git a/man/rre_data.Rd b/man/rre_data.Rd deleted file mode 100644 index 6923559..0000000 --- a/man/rre_data.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{rre_data} -\alias{rre_data} -\title{RRE list from RREFinder for S.coelicolor} -\format{ -A data frame with 27 rows and 6 variables: -\describe{ - \item{Cluster}{RRE #, numeric} - \item{Start}{Start location of a RRE, in bp} - \item{Stop}{Stop location of a RRE, in bp} - \item{Type}{Type of a RRE} - \item{chromosome}{chromosome, on which RRE is, filled automatically ipon file upload} - \item{Type2}{Type of a RRE, filled automatically upon file upload. Same as Type} - \item{Sequence}{Annotated sequence ID} - \item{Locus_tag}{Locus tag of a RRE element} - \item{BGC.ID}{Id, of a BGC} - \item{BGC.product}{Product of BGC} - \item{Domain.name}{Domain name of RRE element} - \item{E.value}{E-value of a hit} - \item{Bitscore}{Bitscore of a hit} - \item{End}{End of RRE element, bp} - \item{ID}{RRE ID, same as Cluster} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt} -} -\usage{ -rre_data -} -\description{ -Dataset containing list of RRE elements from RREFinder, found in S.coelicolor -} -\keyword{datasets} diff --git a/man/sempi_data.Rd b/man/sempi_data.Rd deleted file mode 100644 index e50c7e6..0000000 --- a/man/sempi_data.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/data.R -\docType{data} -\name{sempi_data} -\alias{sempi_data} -\title{BGC list from SEMPI for S.coelicolor} -\format{ -A data frame with 33 rows and 5 variables: -\describe{ - \item{Cluster}{Cluster #, numeric} - \item{Start}{Start location of a cluster, in bp} - \item{Stop}{Stop location of a cluster, in bp} - \item{Type}{Type of a cluster} - \item{Type2}{Type of a cluster, filled automatically upon file upload. Same as Type} -} -} -\source{ -\url{https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv} -} -\usage{ -sempi_data -} -\description{ -Dataset containing list of clusters from SEMPI, found in S.coelicolor -} -\keyword{datasets} From 583caf80010fd869af5ccdfb8400c2fc98440f70 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 16:50:32 +0200 Subject: [PATCH 137/199] Fix PRISM-Supp data calculation dependencies on checkbox Former-commit-id: 3d169e7329e604c177eaf71a4ed257658f85682b --- R/app_server.R | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 7cc056e..280d7fb 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -57,7 +57,7 @@ app_server <- function( input, output, session ) { gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot =F ) vals$computed <- list( @@ -76,6 +76,8 @@ app_server <- function( input, output, session ) { # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + data_uploads_inter <- c("anti_data_input","sempi_data_input","prism_data_input","prism_json", + "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") # Universal beginings for variables, used in the app for different data soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) # The Namings, meaning how to label the data on the plots @@ -221,8 +223,8 @@ app_server <- function( input, output, session ) { vals$prism_supp_data_input = T vals$prism_supp <- processed[[2]] vals$prism_supp_data <- processed[[2]] - vals$prism_json = TT - vals$prism_supp_plot <- + vals$prism_json = T + vals$prism_supp_plot <- T shiny::updateCheckboxInput(inputId = "prism_supp", value = T) } else { processed <- read_prism(data, json=F) @@ -651,7 +653,7 @@ app_server <- function( input, output, session ) { } }) shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$prism_supp_data_input == T) ){ + if ((vals$arts_data_input == T) || (vals$prism_json == T) ){ shinyjs::showElement(selector = "#prism_supplement_arts_box") } else { shinyjs::hideElement(selector = "#prism_supplement_arts_box") @@ -1060,9 +1062,9 @@ app_server <- function( input, output, session ) { ############################################################################ shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ if (input$prism_supp == T){ + vals$need_filter <- T vals$prism_supp_data_input = T vals$prism_supp_plot <- T - vals$need_filter <- T if (!("PRISM-Supp" %in% names(vals$choices$ref))){ vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") @@ -1125,7 +1127,7 @@ app_server <- function( input, output, session ) { dplyr::select(Start,Stop) sempi_inter$seqnames <- "chr" } - if (vals$prism_supp_data_input == T){ + if (vals$prism_json == T){ prism_supp_data <- vals$prism_supp_data prism_supp_inter <- vals$prism_supp_data %>% dplyr::select(Start,Stop) @@ -1156,10 +1158,10 @@ app_server <- function( input, output, session ) { inters <- vals$inters index = 1 - for (i in data_uploads){ + for (i in data_uploads_inter){ index_2 = 1 j = soft_names[index] - for (p in data_uploads){ + for (p in data_uploads_inter){ x = soft_names[index_2] if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ @@ -1358,6 +1360,7 @@ app_server <- function( input, output, session ) { soft_names_2 <- soft_names data_to_use_2 <- data_to_use index <- 1 + print("____NEW____") for (upload in data_uploads){ data_uploads_2 <- data_uploads_2[-1] soft_2 <- soft_2[-1] @@ -1368,7 +1371,7 @@ app_server <- function( input, output, session ) { for (upload2 in data_uploads_2){ if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) - + print(output[[11]]) chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. chromosomes_end <- c(chromosomes_end, output[[4]] ) From 55b5aeec45dd18ced8679bbbf9af08b58350b915 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 16:54:31 +0200 Subject: [PATCH 138/199] Remove debuging code Former-commit-id: 74846181e69c5d45b272bab350f653e83703725c --- R/app_server.R | 2 -- 1 file changed, 2 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 280d7fb..96921f9 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -1360,7 +1360,6 @@ app_server <- function( input, output, session ) { soft_names_2 <- soft_names data_to_use_2 <- data_to_use index <- 1 - print("____NEW____") for (upload in data_uploads){ data_uploads_2 <- data_uploads_2[-1] soft_2 <- soft_2[-1] @@ -1371,7 +1370,6 @@ app_server <- function( input, output, session ) { for (upload2 in data_uploads_2){ if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) - print(output[[11]]) chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. chromosomes_end <- c(chromosomes_end, output[[4]] ) From 28144270418425cf911b6524a71b046bbcfed0ca Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 17:14:01 +0200 Subject: [PATCH 139/199] Suppressed warnings of unknown aestetics from ggplot in deep_reference Former-commit-id: 0eeb5d857dbae354c69732ffca83f92f30592871 --- R/app_server.R | 6 +++--- R/mod_deep_reference_2.R | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 96921f9..bfd35ad 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -1474,7 +1474,7 @@ app_server <- function( input, output, session ) { if (input$ref == soft_namings[sup_index]){ shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more) + suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more)) soft_let <- abbr[sup_index] lettrs <- lett[2:length(lett)] labels_1 <- list() @@ -1485,7 +1485,7 @@ app_server <- function( input, output, session ) { seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major,inter = T, inters) seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df,inter = T, vals$rre_more, inters) labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- add_more_annot(seg_df, plot, soft_names, index, vals$rre_more) + plot <- suppressWarnings(add_more_annot(seg_df, plot, soft_names, index, vals$rre_more)) } index = index +1 @@ -1497,7 +1497,7 @@ app_server <- function( input, output, session ) { ggplot2::xlab("Chromosome length")+ ggplot2::theme(legend.title = ggplot2::element_blank()) + ggplot2::ggtitle("Annotations' comparison to the reference") - suppressWarnings(to_plot <- plotly::ggplotly(plot, tooltip = tooltip)) + to_plot <- plotly::ggplotly(plot, tooltip = tooltip) to_plot <- to_plot %>% plotly::layout(legend=list(font = list( family = "sans-serif", diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 48a3562..ddd26ea 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -68,9 +68,9 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) if (vals$anti_data_input == TRUE){ - suppressWarnings(plot <- plot + + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } if (vals$deep_data_input == TRUE){ if (dim(vals$seg_df_ref_d)[1] >0) { @@ -98,8 +98,8 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ } if (vals$sempi_data_input == TRUE){ - suppressWarnings(plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) + plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } @@ -118,7 +118,7 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ if (dim(vals$seg_df_ref_g)[1] >0) { plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) } } to_plot <- plotly::ggplotly(plot + From 8218d18798430ca580e11f9bb6132e977513be30 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 18:59:12 +0200 Subject: [PATCH 140/199] Add Description Former-commit-id: 7c23be05b47cab06d05ea991af3dcb1e202e5c08 --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 5b50eef..adc53f7 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,7 @@ Package: BGCViz Title: BGCViz Version: 0.0.0.9000 Authors@R: person('Pavlo', 'Hrab', email = 'pavlo.hrab@gmail.com', role = c('cre', 'aut')) -Description: PKG_DESC. +Description: BGCViz is a shiny package, that aims to integrate BGC result from different softwares for same genome sequence. License: MIT + file LICENSE biocViews: Imports: From 071a22c26b17e368e43ff153f331dd489ecea6cd Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 19:10:18 +0200 Subject: [PATCH 141/199] Run styler package on BGCViz Former-commit-id: f45d1448fc80340d5b2f4a460bdc3b24a4dad99f --- R/app_config.R | 51 +- R/app_server.R | 1486 ++++++++++++----------- R/app_ui.R | 125 +- R/fct_biocircos.R | 129 +- R/fct_deep_reference.R | 170 +-- R/fct_filtering.R | 122 +- R/fct_format_transformation.R | 193 ++- R/fct_group_table.R | 18 +- R/fct_helpers.R | 71 +- R/fct_reading_functions.R | 160 +-- R/fct_reading_processing.R | 148 ++- R/fct_validation.R | 138 ++- R/mod_barplot_rank.R | 86 +- R/mod_biocircos.R | 67 +- R/mod_deep_reference.R | 57 +- R/mod_deep_reference_2.R | 211 ++-- R/mod_deepbgc_plots.R | 275 +++-- R/mod_download.R | 65 +- R/mod_gecco_plots.R | 223 ++-- R/mod_group_table.R | 114 +- R/run_app.R | 22 +- R/utils_deep_reference.R | 162 +-- R/utils_helpers.R | 6 +- data-raw/anti_data.R | 4 +- data-raw/deep_data.R | 8 +- data-raw/gecco_data.R | 28 +- data-raw/prism_data.R | 2 +- data-raw/prism_supp_data.R | 2 +- data-raw/rre_data.R | 14 +- data-raw/sempi_data.R | 2 +- man/get_defaults.Rd | 2 +- man/run_app.Rd | 2 +- man/sempi_to_csv.Rd | 2 +- man/set_defaults.Rd | 2 +- tests/spelling.R | 9 +- tests/testthat/test-golem-recommended.R | 7 +- 36 files changed, 2169 insertions(+), 2014 deletions(-) diff --git a/R/app_config.R b/R/app_config.R index b4dbb7d..b7b4807 100644 --- a/R/app_config.R +++ b/R/app_config.R @@ -1,43 +1,40 @@ #' Access files in the current app -#' -#' NOTE: If you manually change your package name in the DESCRIPTION, -#' don't forget to change it here too, and in the config file. +#' +#' NOTE: If you manually change your package name in the DESCRIPTION, +#' don't forget to change it here too, and in the config file. #' For a safer name change mechanism, use the `golem::set_golem_name()` function. -#' -#' @param ... character vectors, specifying subdirectory and file(s) -#' within your package. The default, none, returns the root of the app. -#' +#' +#' @param ... character vectors, specifying subdirectory and file(s) +#' within your package. The default, none, returns the root of the app. +#' #' @noRd -app_sys <- function(...){ +app_sys <- function(...) { system.file(..., package = "BGCViz") } #' Read App Config -#' -#' @param value Value to retrieve from the config file. -#' @param config GOLEM_CONFIG_ACTIVE value. If unset, R_CONFIG_ACTIVE. +#' +#' @param value Value to retrieve from the config file. +#' @param config GOLEM_CONFIG_ACTIVE value. If unset, R_CONFIG_ACTIVE. #' If unset, "default". #' @param use_parent Logical, scan the parent directory for config file. -#' +#' #' @noRd -get_golem_config <- function( - value, - config = Sys.getenv( - "GOLEM_CONFIG_ACTIVE", - Sys.getenv( - "R_CONFIG_ACTIVE", - "default" - ) - ), - use_parent = TRUE -){ +get_golem_config <- function(value, + config = Sys.getenv( + "GOLEM_CONFIG_ACTIVE", + Sys.getenv( + "R_CONFIG_ACTIVE", + "default" + ) + ), + use_parent = TRUE) { config::get( - value = value, - config = config, + value = value, + config = config, # Modify this if your config file is somewhere else: - file = app_sys("golem-config.yml"), + file = app_sys("golem-config.yml"), use_parent = use_parent ) } - diff --git a/R/app_server.R b/R/app_server.R index bfd35ad..f36e87d 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -1,95 +1,109 @@ #' The application server-side -#' -#' @param input,output,session Internal parameters for {shiny}. +#' +#' @param input,output,session Internal parameters for {shiny}. #' DO NOT REMOVE. #' @import shiny #' @noRd -app_server <- function( input, output, session ) { - # Your application server logic +app_server <- function(input, output, session) { + # Your application server logic # Silence R CMD note Start <- Stop <- Core <- Chr <- NULL - ##--------------------------------------------------------------- + ## --------------------------------------------------------------- ## Some lists of reactive values to listen later - - ##--------------------------------------------------------------- - check_to_rename <- shiny::reactive({list(input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco,input$anti_sco, input$prism_sco)}) + ## --------------------------------------------------------------- + check_to_rename <- shiny::reactive({ + list( + input$sempi_data, input$anti_data, input$prism_data, + input$sempi_sco, input$anti_sco, input$prism_sco + ) + }) biocircos_listen <- shiny::reactive({ - list( input$biocircos_color,vals$need_filter, input$label_color, input$label_color_class, - input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, - input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, - vals$coloring_datatable - + list( + input$biocircos_color, vals$need_filter, input$label_color, input$label_color_class, + input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, + input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, + vals$coloring_datatable ) }) inputData <- shiny::reactive({ - list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, - vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input,vals$arts_data_input + list( + vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, + vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input ) }) - dynamicInput <- shiny::reactive({ - list( input$dup_choice, vals$need_filter, input$prism_supp - ) - }) + dynamicInput <- shiny::reactive({ + list(input$dup_choice, vals$need_filter, input$prism_supp) + }) deep_reference <- shiny::reactive({ - list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data) - }) - - to_debounce <- shiny::reactive({ - list( vals$cluster_type, vals$gene_filter,vals$biodomain_filter, vals$score_c, vals$score_d, - vals$score_a, vals$score_average_gecco,vals$score_cluster_gecco, vals$domains_filter_gecco, - vals$prot_filter_gecco + list( + vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data + ) + }) + + to_debounce <- shiny::reactive({ + list( + vals$cluster_type, vals$gene_filter, vals$biodomain_filter, vals$score_c, vals$score_d, + vals$score_a, vals$score_average_gecco, vals$score_cluster_gecco, vals$domains_filter_gecco, + vals$prot_filter_gecco ) }) %>% shiny::debounce(500) - + # Some dataframes that are used through the app + some vectors of untercepted values - vals <- shiny::reactiveValues(deep_data = NULL, anti_data = NULL, rre_data=NULL, prism_data=NULL, chr_len = NULL, fullness_deep = NULL, - biocircos_deep = NULL, deep_data_input = FALSE,tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, - anti_data_input = FALSE,rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL,seg_df_ref_r = NULL,seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type=NULL, prism_type=NULL, sempi_data = NULL, sempi_data_input= FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data=NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F, filter_data = F, choices = list(ref=NULL, group_by=NULL, ref_col_biocircos=NULL, ref_comparison_gecco=NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot =F + vals <- shiny::reactiveValues( + deep_data = NULL, anti_data = NULL, rre_data = NULL, prism_data = NULL, chr_len = NULL, fullness_deep = NULL, + biocircos_deep = NULL, deep_data_input = FALSE, tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + anti_data_input = FALSE, rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL, seg_df_ref_r = NULL, seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type = NULL, prism_type = NULL, sempi_data = NULL, sempi_data_input = FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data = NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F, filter_data = F, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F ) - + vals$computed <- list( - anti=F,deep=F, gecco=F, arts=F, prism=F, sempi=F, prism_supp=F, rre=F + anti = F, deep = F, gecco = F, arts = F, prism = F, sempi = F, prism_supp = F, rre = F ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") vals$rename_data <- utils::read.csv(rename_file) rename_data <- utils::read.csv(rename_file) - coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list( dom='t',ordering=F)) + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list(dom = "t", ordering = F)) # Validation - #source("src/validate_functions.R") + # source("src/validate_functions.R") # Variables, that holds data uploads boolean (so if data is present or not) - data_uploads <- c("anti_data_input","sempi_data_input","prism_data_input","prism_supp_data_input", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") - data_uploads_inter <- c("anti_data_input","sempi_data_input","prism_data_input","prism_json", - "arts_data_input","deep_data_input","gecco_data_input","rre_data_input") + data_uploads <- c( + "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" + ) + data_uploads_inter <- c( + "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" + ) # Universal beginings for variables, used in the app for different data - soft_names <- c("anti","sempi","prism","prism_supp","arts","deep","gecco","rre" ) + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre") # The Namings, meaning how to label the data on the plots - soft_namings <- c('Antismash', 'SEMPI','PRISM', 'PRISM-Supp', 'ARTS', 'DeepBGC', 'GECCO', 'RRE-Finder') - # Dataframes undes vals$list, that stored the data - data_to_use <- c( "anti_data" ,"sempi_data" , "prism_data", "prism_supp_data","arts_data_filtered","deep_data_filtered" ,"gecco_data_filtered", "rre_data") - # Used in barplot on summarise tab + Annotation on chromosome plots + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder") + # Dataframes undes vals$list, that stored the data + data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data") + # Used in barplot on summarise tab + Annotation on chromosome plots abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") # Used for deep reference 2 plot - soft_datafr <- c("seg_df_ref_a", "seg_df_ref_s" , "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r") - + soft_datafr <- c( + "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", + "seg_df_ref_g", "seg_df_ref_r" + ) + vals$score_a <- 50 vals$score_d <- 50 vals$score_c <- 50 @@ -105,35 +119,35 @@ app_server <- function( input, output, session ) { vals$deep_sidebar <- FALSE vals$deep_global <- FALSE vals$gecco_global <- FALSE - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- ## Helper functions - - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- # Need to get them to a tidyr::separate file later # TODO files_in_dir <- list.files() # Iterate over those files and if found "_biocircos.csv" add remove them for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { file.remove(file_names) - } + } } - options(shiny.maxRequestSize=100*1024^2) + options(shiny.maxRequestSize = 100 * 1024^2) # Small function to make integers zeros - #source("src/helper_functions.R") - - disable_event_logic <- function(){ - vals$can_plot_deep_ref = F - vals$can_plot_biocircos = F - vals$can_plot_barplot_rank = F - vals$can_plot_group_table = F + # source("src/helper_functions.R") + + disable_event_logic <- function() { + vals$can_plot_deep_ref <- F + vals$can_plot_biocircos <- F + vals$can_plot_barplot_rank <- F + vals$can_plot_group_table <- F } - enable_event_logic <- function(){ - vals$can_plot_deep_ref = T - vals$can_plot_biocircos = T - vals$can_plot_barplot_rank = T - vals$can_plot_group_table = T + enable_event_logic <- function() { + vals$can_plot_deep_ref <- T + vals$can_plot_biocircos <- T + vals$can_plot_barplot_rank <- T + vals$can_plot_group_table <- T } - + ########################################################################### ########################################################################### ### ### @@ -141,12 +155,12 @@ app_server <- function( input, output, session ) { ### ### ########################################################################### ########################################################################### - # TODO Make tidyr::separate functions for different data types. + # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - - process_antismash <- function(data, example_data=F){ - if (example_data==T) { + + process_antismash <- function(data, example_data = F) { + if (example_data == T) { anti_data <- data } else { anti_data <- read_anti(data) @@ -154,9 +168,9 @@ app_server <- function( input, output, session ) { vals$anti_type <- anti_data$Type2 vals$anti_data <- anti_data # Save file - #write.csv(vals$anti_data, "anti_data.csv", row.names = F) - vals$anti_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 + # write.csv(vals$anti_data, "anti_data.csv", row.names = F) + vals$anti_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") @@ -164,70 +178,76 @@ app_server <- function( input, output, session ) { vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "Antismash" ) + selected = "Antismash" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "Antismash" ) + selected = "Antismash" + ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "Antismash") + selected = "Antismash" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash") + selected = "Antismash" + ) shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "Antismash") - + selected = "Antismash" + ) } } - process_gecco <- function(data, example_data = F){ - if (example_data==T) { + process_gecco <- function(data, example_data = F) { + if (example_data == T) { gecco_data <- data } else { gecco_data <- read_gecco(data) } vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) + vals$gecco_data_filtered <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) # Save file - #write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) - vals$gecco_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 + # write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) + vals$gecco_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "GECCO" ) + selected = "GECCO" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "GECCO") + selected = "GECCO" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO") - + selected = "GECCO" + ) } } - process_prism <- function(data, json=T, example_data=F){ - if (example_data==T) { + process_prism <- function(data, json = T, example_data = F) { + if (example_data == T) { prism_data <- data prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) - vals$prism_supp_data_input = T + prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) + vals$prism_supp_data_input <- T vals$prism_supp <- BGCViz:::prism_supp_data vals$prism_supp_data <- BGCViz:::prism_supp_data vals$prism_supp_plot <- T - vals$prism_json = T + vals$prism_json <- T shiny::updateCheckboxInput(inputId = "prism_supp", value = T) } else { - if (json == T){ - processed <- read_prism(data, json=T) + if (json == T) { + processed <- read_prism(data, json = T) prism_data <- processed[[1]] - vals$prism_supp_data_input = T + vals$prism_supp_data_input <- T vals$prism_supp <- processed[[2]] vals$prism_supp_data <- processed[[2]] - vals$prism_json = T + vals$prism_json <- T vals$prism_supp_plot <- T shiny::updateCheckboxInput(inputId = "prism_supp", value = T) } else { - processed <- read_prism(data, json=F) + processed <- read_prism(data, json = F) prism_data <- processed[[1]] } } @@ -237,15 +257,15 @@ app_server <- function( input, output, session ) { update_ui_with_data() vals$prism_data <- prism_data vals$prism_type <- prism_data$Type2 - + # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) # Add ID column (same as Cluster) vals$prism_data$ID <- vals$prism_data$Cluster # Save file - #write.csv(vals$prism_data, "prism_data.csv", row.names = F) - vals$prism_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 + # write.csv(vals$prism_data, "prism_data.csv", row.names = F) + vals$prism_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") @@ -253,39 +273,44 @@ app_server <- function( input, output, session ) { vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "PRISM" ) + selected = "PRISM" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "PRISM" ) + selected = "PRISM" + ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "PRISM") + selected = "PRISM" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM") + selected = "PRISM" + ) shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "PRISM") + selected = "PRISM" + ) } } - process_sempi <- function(data, zip=T, example_data = F){ - if (example_data == T){ + process_sempi <- function(data, zip = T, example_data = F) { + if (example_data == T) { sempi_data <- data } else { - if (zip == T){ - sempi_data <- read_sempi(data, zip=T) + if (zip == T) { + sempi_data <- read_sempi(data, zip = T) } else { - sempi_data <- read_sempi(data, zip=F) + sempi_data <- read_sempi(data, zip = F) } } vals$sempi_type <- sempi_data$Type2 vals$sempi_data <- sempi_data # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) # Add ID column (same as Cluster) vals$sempi_data$ID <- vals$sempi_data$Cluster # Save file - #write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) - vals$sempi_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 + # write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) + vals$sempi_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") @@ -293,25 +318,30 @@ app_server <- function( input, output, session ) { vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "SEMPI" ) + selected = "SEMPI" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "SEMPI" ) + selected = "SEMPI" + ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "SEMPI") + selected = "SEMPI" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI") + selected = "SEMPI" + ) shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "SEMPI") + selected = "SEMPI" + ) } } - process_arts_archive <- function(archive, zip = T, example_data = F){ - if (example_data == T){ + process_arts_archive <- function(archive, zip = T, example_data = F) { + if (example_data == T) { arts_data <- BGCViz:::arts_data } else { - if (zip == T){ - arts_data <- read_arts_archive(archive, zip=T) + if (zip == T) { + arts_data <- read_arts_archive(archive, zip = T) } else { arts_data <- utils::read.csv(archive) } @@ -321,159 +351,165 @@ app_server <- function( input, output, session ) { vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") update_ui_with_data() - vals$data_upload_count <- vals$data_upload_count +1 + vals$data_upload_count <- vals$data_upload_count + 1 vals$arts_data_input <- T dup_table_id <- vals$arts_data %>% dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:",dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" ) - if (vals$data_upload_count == 1){ + choices = c("All", paste0("ID:", dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" + ) + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "ARTS" ) + selected = "ARTS" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "ARTS" ) + selected = "ARTS" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS") + selected = "ARTS" + ) } } - process_deep <- function(data, example_data = F){ - if (example_data == T){ + process_deep <- function(data, example_data = F) { + if (example_data == T) { deep_data <- data } else { deep_data <- read_deep(data) } vals$deep_data <- deep_data - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) vals$deep_data$Start <- vals$deep_data$nucl_start vals$deep_data$Stop <- vals$deep_data$nucl_end # Add ID column as number seuquence of dataframe length vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) vals$deep_data$Cluster <- vals$deep_data$ID - #write.csv(vals$deep_data, "deep_data.csv", row.names = F) - vals$deep_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 - vals$deep_data_filtered <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) + # write.csv(vals$deep_data, "deep_data.csv", row.names = F) + vals$deep_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$deep_data_filtered <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "DeepBGC" ) + selected = "DeepBGC" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "DeepBGC" ) + selected = "DeepBGC" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC") - + choices = "DeepBGC", + selected = "DeepBGC" + ) } } - process_rre <- function(data, example_data = F){ - if (example_data == T){ + process_rre <- function(data, example_data = F) { + if (example_data == T) { rre_data <- data } else { rre_data <- read_rre(data) } vals$rre_data <- rre_data - #write.csv(vals$rre_data, "rre_data.csv", row.names = F) - - vals$rre_data_input = TRUE - vals$data_upload_count <- vals$data_upload_count +1 + # write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") update_ui_with_data() disable_event_logic() - if (vals$data_upload_count == 1){ + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "RRE-Finder" ) + selected = "RRE-Finder" + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "RRE-Finder" ) + selected = "RRE-Finder" + ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "RRE-Finder") - + selected = "RRE-Finder" + ) } - if (!is.null(vals$rre_data$Probability)){ - vals$rre_more = T + if (!is.null(vals$rre_data$Probability)) { + vals$rre_more <- T } else { - vals$rre_more = F + vals$rre_more <- F } } - - + + #---------------------------------------------------------------- ## Loading and processing of example data - - ##---------------------------------------------------------------- - shiny::observeEvent(input$anti_sco,{ + ## ---------------------------------------------------------------- + shiny::observeEvent(input$anti_sco, { process_antismash(BGCViz:::anti_data, example_data = T) }) - - shiny::observeEvent(input$gecco_sco,{ + + shiny::observeEvent(input$gecco_sco, { process_gecco(BGCViz:::gecco_data, example_data = T) }) - - shiny::observeEvent(input$prism_sco,{ + + shiny::observeEvent(input$prism_sco, { process_prism(BGCViz:::prism_data, example_data = T) }) - - shiny::observeEvent(input$sempi_sco,{ + + shiny::observeEvent(input$sempi_sco, { process_sempi(BGCViz:::sempi_data, example_data = T) }) - + shiny::observeEvent(input$arts_sco, { process_arts_archive(BGCViz:::arts_data, example_data = T) }) - + shiny::observeEvent(input$deep_sco, { process_deep(BGCViz:::deep_data, example_data = T) }) - + shiny::observeEvent(input$rre_sco, { process_rre(BGCViz:::rre_data, example_data = T) }) - - ##---------------------------------------------------------------- + + ## ---------------------------------------------------------------- ## Loading and processing user data - - ##---------------------------------------------------------------- - shiny::observeEvent(input$anti_data,{ - + ## ---------------------------------------------------------------- + shiny::observeEvent(input$anti_data, { disable_event_logic() # Read data - if (input$anti_data$type=="text/csv"){ + if (input$anti_data$type == "text/csv") { anti_data <- utils::read.csv(input$anti_data$datapath) - }else{ + } else { data <- rjson::fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ + types <- sapply(data$records, function(y) { + lapply(y$features, function(x) { + if (unlist(x$type == "region")) { tolower(x$qualifiers$product) } }) }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) gsub(" ", "__", tmp) - }else{ + } else { x } }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ + + location <- sapply(data$records, function(y) { + unlist(sapply(y$features, function(x) { + if (unlist(x$type == "region")) { unlist(x$location) } - }) - ) + })) }) - - + + location <- gsub("\\[", "", location) location <- gsub("\\]", "", location) location <- gsub("<", "", location) @@ -483,76 +519,68 @@ app_server <- function( input, output, session ) { anti_data <- location %>% tidyr::separate(split, c("Start", "Stop")) %>% dplyr::transmute(ID = rownames(location), Start, Stop) - + anti_data <- cbind(anti_data, types) colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") anti_data$Cluster <- as.numeric(anti_data$Cluster) anti_data$Start <- as.numeric(anti_data$Start) anti_data$Stop <- as.numeric(anti_data$Stop) - } - + process_antismash(anti_data) - }) - - shiny::observeEvent(input$sempi_data,{ - - if (input$sempi_data$type=="text/csv"){ + + shiny::observeEvent(input$sempi_data, { + if (input$sempi_data$type == "text/csv") { sempi_data <- utils::read.csv(input$sempi_data$datapath) process_sempi(sempi_data, zip = F) } else { process_sempi(input$sempi_data$datapath, zip = T) } - }) - - shiny::observeEvent(input$gecco_data,{ - + + shiny::observeEvent(input$gecco_data, { gecco_data <- utils::read.delim(input$gecco_data$datapath) process_gecco(gecco_data) - }) - + # These are for ARTS data processing # input$known_data and inoput$dup_data - + shiny::observeEvent(input$arts_data, { disable_event_logic() - if (input$arts_data$type=="text/csv"){ + if (input$arts_data$type == "text/csv") { process_arts_archive(input$arts_data$datapath, zip = F) } else { process_arts_archive(input$arts_data$datapath, zip = T) } }) - - - shiny::observeEvent(input$prism_data,{ - + + + shiny::observeEvent(input$prism_data, { + # Read data - if (input$prism_data$type == "text/csv"){ + if (input$prism_data$type == "text/csv") { prism_data <- utils::read.csv(input$prism_data$datapath) - process_prism(prism_data, json=F) - } else{ + process_prism(prism_data, json = F) + } else { data <- rjson::fromJSON(file = input$prism_data$datapath) process_prism(data) } - }) - + shiny::observeEvent(input$deep_data, { - data <- utils::read.delim(input$deep_data$datapath) process_deep(data) }) - + shiny::observeEvent(input$rre_data, { - + # Read data rre_data <- utils::read.delim(input$rre_data$datapath) process_rre(rre_data) }) - + ############################################################################ ############################################################################ ### ### @@ -561,61 +589,63 @@ app_server <- function( input, output, session ) { ############################################################################ ############################################################################ # Update choices - update_ui_with_data <- function(){ + update_ui_with_data <- function() { shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref ) + choices = vals$choices$ref + ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - choices = vals$choices$group_by ) + choices = vals$choices$group_by + ) shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos ) + choices = vals$choices$ref_col_biocircos + ) shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco ) + choices = vals$choices$ref_comparison_gecco + ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - choices = vals$choices$ref_comparison ) + choices = vals$choices$ref_comparison + ) } # Observe input of chromosome length - shiny::observeEvent(input$chr_len,{ - + shiny::observeEvent(input$chr_len, { vals$chr_len <- input$chr_len }) - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- ## Simple options showing/hiding logic for every data input - - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- # SHOW rre_width parameter if data is available # and hide_viz == F shiny::observeEvent(vals$rre_data_input, { - - if (vals$rre_data_input == T){ + if (vals$rre_data_input == T) { shinyjs::showElement(selector = "#rre_width") - } else{ + } else { shinyjs::hideElement(selector = "#rre_width") } }) # Show anti_hybrid option if data is available # And checkbox is unchecked shiny::observeEvent(vals$anti_data_input, { - - if (vals$anti_data_input == T){ + if (vals$anti_data_input == T) { shinyjs::showElement(selector = "#anti_hybrid") - } else{ + } else { shinyjs::hideElement(selector = "#anti_hybrid") } }) # Show prism options if data is available # If hide anti is F (checkbox), then show them # Only if prism_json file, then show Prism-Supp - # And if hide_viz == F, and prism_json, then + # And if hide_viz == F, and prism_json, then # show width shiny::observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T){ + if (vals$prism_data_input == T) { shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T){ + if (vals$prism_json == T) { shinyjs::showElement(selector = "#prism_supp") } - if (vals$prism_json == T){ + if (vals$prism_json == T) { shinyjs::showElement(selector = "#prism_supp_data_input_width") } - } else{ + } else { shinyjs::hideElement(selector = "#prism_header") shinyjs::hideElement(selector = "#prism_hybrid") shinyjs::hideElement(selector = "#prism_supp") @@ -624,19 +654,17 @@ app_server <- function( input, output, session ) { }) # Show SEMPI elements on data upload shiny::observeEvent(vals$sempi_data_input, { - - if (vals$sempi_data_input == T){ + if (vals$sempi_data_input == T) { shinyjs::showElement(selector = "#sempi_hybrid") shinyjs::showElement(selector = "#sempi_width") - } else{ + } else { shinyjs::hideElement(selector = "#sempi_hybrid") shinyjs::hideElement(selector = "#sempi_width") } }) # Ahow ARTS data options, if data is available - shiny::observeEvent(vals$arts_data_input,{ - - if (vals$arts_data_input == T){ + shiny::observeEvent(vals$arts_data_input, { + if (vals$arts_data_input == T) { shinyjs::showElement(selector = "#dup_choice") shinyjs::showElement(selector = "#arts_width") } else { @@ -644,394 +672,391 @@ app_server <- function( input, output, session ) { shinyjs::hideElement(selector = "#arts_width") } }) - + shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)){ + if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)) { shinyjs::showElement(selector = "#improve_visualization_box") } else { shinyjs::hideElement(selector = "#improve_visualization_box") } }) shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$prism_json == T) ){ + if ((vals$arts_data_input == T) || (vals$prism_json == T)) { shinyjs::showElement(selector = "#prism_supplement_arts_box") } else { shinyjs::hideElement(selector = "#prism_supplement_arts_box") } }) - ##--------------------------------------------------------------- + ## --------------------------------------------------------------- ## Data processing options show/hide - - ##--------------------------------------------------------------- - # Count data uploads, to show tabs and corresponding - # options - + ## --------------------------------------------------------------- + # Count data uploads, to show tabs and corresponding + # options + output$deep_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) { - shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), - shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", tabName = "deep_filter", icon = shiny::icon("filter"), - shiny::uiOutput("deep_filter_UI_sidemenu") - ) + if (vals$data_upload_count >= 2) { + if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + shinydashboard::menuItem("Compare data with DeepBGC", + tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), + shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", + tabName = "deep_filter", icon = shiny::icon("filter"), + shiny::uiOutput("deep_filter_UI_sidemenu") + ) ) - } } }) output$gecco_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ - if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )){ - shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco", icon = icon("fas fa-dragon"), - shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", tabName = "gecco_filter", icon = shiny::icon("filter"), - shiny::uiOutput("gecco_filter_UI_sidemenu") - )) + if (vals$data_upload_count >= 2) { + if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + shinydashboard::menuItem("Compare data with GECCO", + tabName = "gecco", icon = icon("fas fa-dragon"), + shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", + tabName = "gecco_filter", icon = shiny::icon("filter"), + shiny::uiOutput("gecco_filter_UI_sidemenu") + ) + ) } } - }) output$anno_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=1){ + if (vals$data_upload_count >= 1) { shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) } }) output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ + if (vals$data_upload_count >= 2) { shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) } }) output$summarize_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >=2){ + if (vals$data_upload_count >= 2) { shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) } }) output$deep_filter_box <- shiny::renderUI({ - if (vals$deep_data_input == T){ + if (vals$deep_data_input == T) { vals$deep_global <- T shinydashboardPlus::box( title = "DeepBGC filtering", id = "deep_filtering_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + shiny::sliderInput("cluster_type", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) ) } }) output$gecco_filter_box <- shiny::renderUI({ - if (vals$gecco_data_input == T){ + if (vals$gecco_data_input == T) { vals$gecco_global <- T shinydashboardPlus::box( title = "GECCO filtering", id = "gecco_filtering_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) ) } }) - + output$deep_filter_UI_sidemenu <- shiny::renderUI({ vals$deep_sidebar <- T shiny::tagList( - shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type_sidemenu","Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + shiny::sliderInput("cluster_type_sidemenu", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) ) }) output$gecco_filter_UI_sidemenu <- shiny::renderUI({ vals$gecco_sidebar <- T shiny::tagList( - shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), - shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50 ), + shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) ) }) - - update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check){ - if( (as.numeric(listening_value) != comparing_values) && (rendering_check == F)){ + + update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check) { + if ((as.numeric(listening_value) != comparing_values) && (rendering_check == F)) { shiny::updateSliderInput(session, updating_value, NULL, listening_value) - return(list(as.numeric(listening_value),F)) - } else{ - if (grepl("sidemenu", updating_value) == T){ + return(list(as.numeric(listening_value), F)) + } else { + if (grepl("sidemenu", updating_value) == T) { shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) - }else{ + } else { shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) } return(list(comparing_values, F)) } } - - - shiny::observeEvent(input$score_a,{ - res <- update_filter_values(input$score_a,vals$score_a, "score_a_sidemenu", vals$deep_sidebar) + + + shiny::observeEvent(input$score_a, { + res <- update_filter_values(input$score_a, vals$score_a, "score_a_sidemenu", vals$deep_sidebar) vals$score_a <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$score_d,{ - res <- update_filter_values(input$score_d,vals$score_d, "score_d_sidemenu", vals$deep_sidebar ) + shiny::observeEvent(input$score_d, { + res <- update_filter_values(input$score_d, vals$score_d, "score_d_sidemenu", vals$deep_sidebar) vals$score_d <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$score_c,{ - res <- update_filter_values(input$score_c,vals$score_c, "score_c_sidemenu", vals$deep_sidebar ) + shiny::observeEvent(input$score_c, { + res <- update_filter_values(input$score_c, vals$score_c, "score_c_sidemenu", vals$deep_sidebar) vals$score_c <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$domains_filter,{ - res <- update_filter_values(input$domains_filter,vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar ) + shiny::observeEvent(input$domains_filter, { + res <- update_filter_values(input$domains_filter, vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar) vals$domains_filter <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$biodomain_filter,{ - res <- update_filter_values(input$biodomain_filter,vals$biodomain_filter, "biodomain_filter_sidemenu" , vals$deep_sidebar) + shiny::observeEvent(input$biodomain_filter, { + res <- update_filter_values(input$biodomain_filter, vals$biodomain_filter, "biodomain_filter_sidemenu", vals$deep_sidebar) vals$biodomain_filter <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$gene_filter,{ - res <- update_filter_values(input$gene_filter,vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar ) + shiny::observeEvent(input$gene_filter, { + res <- update_filter_values(input$gene_filter, vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar) vals$gene_filter <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$cluster_type,{ - res <- update_filter_values(input$cluster_type,vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar ) - vals$cluster_type <-res[[1]] + shiny::observeEvent(input$cluster_type, { + res <- update_filter_values(input$cluster_type, vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar) + vals$cluster_type <- res[[1]] vals$deep_sidebar <- res[[2]] }) - shiny::observeEvent(input$score_a_sidemenu,{ - res <- update_filter_values(input$score_a_sidemenu,vals$score_a, "score_a", vals$deep_global ) + shiny::observeEvent(input$score_a_sidemenu, { + res <- update_filter_values(input$score_a_sidemenu, vals$score_a, "score_a", vals$deep_global) vals$score_a <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$score_d_sidemenu,{ - res <- update_filter_values(input$score_d_sidemenu,vals$score_d, "score_d" , vals$deep_global ) + shiny::observeEvent(input$score_d_sidemenu, { + res <- update_filter_values(input$score_d_sidemenu, vals$score_d, "score_d", vals$deep_global) vals$score_d <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$score_c_sidemenu,{ - res <- update_filter_values(input$score_c_sidemenu,vals$score_c, "score_c" , vals$deep_global ) + shiny::observeEvent(input$score_c_sidemenu, { + res <- update_filter_values(input$score_c_sidemenu, vals$score_c, "score_c", vals$deep_global) vals$score_c <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$domains_filter_sidemenu,{ - res <- update_filter_values(input$domains_filter_sidemenu,vals$domains_filter, "domains_filter" , vals$deep_global ) + shiny::observeEvent(input$domains_filter_sidemenu, { + res <- update_filter_values(input$domains_filter_sidemenu, vals$domains_filter, "domains_filter", vals$deep_global) vals$domains_filter <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$biodomain_filter_sidemenu,{ - res <- update_filter_values(input$biodomain_filter_sidemenu,vals$biodomain_filter, "biodomain_filter" , vals$deep_global ) + shiny::observeEvent(input$biodomain_filter_sidemenu, { + res <- update_filter_values(input$biodomain_filter_sidemenu, vals$biodomain_filter, "biodomain_filter", vals$deep_global) vals$biodomain_filter <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$gene_filter_sidemenu,{ - res <- update_filter_values(input$gene_filter_sidemenu,vals$gene_filter, "gene_filter", vals$deep_global ) + shiny::observeEvent(input$gene_filter_sidemenu, { + res <- update_filter_values(input$gene_filter_sidemenu, vals$gene_filter, "gene_filter", vals$deep_global) vals$gene_filter <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - shiny::observeEvent(input$cluster_type_sidemenu,{ - res <- update_filter_values(input$cluster_type_sidemenu,vals$cluster_type, "cluster_type", vals$deep_global ) + shiny::observeEvent(input$cluster_type_sidemenu, { + res <- update_filter_values(input$cluster_type_sidemenu, vals$cluster_type, "cluster_type", vals$deep_global) vals$cluster_type <- res[[1]] - vals$deep_global <- res[[2]] + vals$deep_global <- res[[2]] }) - - - - shiny::observeEvent(input$score_average_gecco,{ - res <- update_filter_values(input$score_average_gecco,vals$score_average_gecco, "score_average_gecco_sidemenu",vals$gecco_sidebar ) + + + + shiny::observeEvent(input$score_average_gecco, { + res <- update_filter_values(input$score_average_gecco, vals$score_average_gecco, "score_average_gecco_sidemenu", vals$gecco_sidebar) vals$score_average_gecco <- res[[1]] vals$gecco_sidebar <- res[[2]] }) - shiny::observeEvent(input$score_cluster_gecco,{ - res <- update_filter_values(input$score_cluster_gecco,vals$score_cluster_gecco, "score_cluster_gecco_sidemenu",vals$gecco_sidebar ) + shiny::observeEvent(input$score_cluster_gecco, { + res <- update_filter_values(input$score_cluster_gecco, vals$score_cluster_gecco, "score_cluster_gecco_sidemenu", vals$gecco_sidebar) vals$score_cluster_gecco <- res[[1]] vals$gecco_sidebar <- res[[2]] }) - shiny::observeEvent(input$domains_filter_gecco,{ - res <- update_filter_values(input$domains_filter_gecco,vals$domains_filter_gecco, "domains_filter_gecco_sidemenu" ,vals$gecco_sidebar) + shiny::observeEvent(input$domains_filter_gecco, { + res <- update_filter_values(input$domains_filter_gecco, vals$domains_filter_gecco, "domains_filter_gecco_sidemenu", vals$gecco_sidebar) vals$domains_filter_gecco <- res[[1]] vals$gecco_sidebar <- res[[2]] }) - shiny::observeEvent(input$prot_filter_gecco,{ - res <- update_filter_values(input$prot_filter_gecco,vals$prot_filter_gecco, "prot_filter_gecco_sidemenu" ,vals$gecco_sidebar) + shiny::observeEvent(input$prot_filter_gecco, { + res <- update_filter_values(input$prot_filter_gecco, vals$prot_filter_gecco, "prot_filter_gecco_sidemenu", vals$gecco_sidebar) vals$prot_filter_gecco <- res[[1]] vals$gecco_sidebar <- res[[2]] }) - shiny::observeEvent(input$score_average_gecco_sidemenu,{ - res <- update_filter_values(input$score_average_gecco_sidemenu,vals$score_average_gecco, "score_average_gecco",vals$gecco_global ) + shiny::observeEvent(input$score_average_gecco_sidemenu, { + res <- update_filter_values(input$score_average_gecco_sidemenu, vals$score_average_gecco, "score_average_gecco", vals$gecco_global) vals$score_average_gecco <- res[[1]] vals$gecco_global <- res[[2]] }) - shiny::observeEvent(input$score_cluster_gecco_sidemenu,{ - res <- update_filter_values(input$score_cluster_gecco_sidemenu,vals$score_cluster_gecco, "score_cluster_gecco",vals$gecco_global ) + shiny::observeEvent(input$score_cluster_gecco_sidemenu, { + res <- update_filter_values(input$score_cluster_gecco_sidemenu, vals$score_cluster_gecco, "score_cluster_gecco", vals$gecco_global) vals$score_cluster_gecco <- res[[1]] vals$gecco_global <- res[[2]] }) - shiny::observeEvent(input$domains_filter_gecco_sidemenu,{ - res <- update_filter_values(input$domains_filter_gecco_sidemenu,vals$domains_filter_gecco, "domains_filter_gecco",vals$gecco_global ) + shiny::observeEvent(input$domains_filter_gecco_sidemenu, { + res <- update_filter_values(input$domains_filter_gecco_sidemenu, vals$domains_filter_gecco, "domains_filter_gecco", vals$gecco_global) vals$domains_filter_gecco <- res[[1]] vals$gecco_global <- res[[2]] }) - shiny::observeEvent(input$prot_filter_gecco_sidemenu,{ - res <- update_filter_values(input$prot_filter_gecco_sidemenu,vals$prot_filter_gecco, "prot_filter_gecco",vals$gecco_global ) + shiny::observeEvent(input$prot_filter_gecco_sidemenu, { + res <- update_filter_values(input$prot_filter_gecco_sidemenu, vals$prot_filter_gecco, "prot_filter_gecco", vals$gecco_global) vals$prot_filter_gecco <- res[[1]] vals$gecco_global <- res[[2]] }) - - shiny::observeEvent(input$restore_box,{ - box_ids <- c("deep_comparison_box", "deep_rate_box","deep_comparison_controls_box","gecco_comparison_box", - "gecco_rate_box","gecco_comparison_controls_box","annotation_reference_box","annotation_reference_comparison_box", - "annotation_reference_comparison_controls_box","biocircos_plot_box","biocircos_controls_box", - "ranking_barplot_box","group_table_box","upload_anti_box","upload_prism_box", - "upload_sempi_box","upload_deep_box","upload_gecco_box","upload_rre_box","upload_arts_box", - "use_example_data_box","rename_box","prism_supplement_arts_box", "improve_visualization_box", - "download_data_box","gecco_filtering_box","deep_filtering_box") - for (id in box_ids){ + + shiny::observeEvent(input$restore_box, { + box_ids <- c( + "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", + "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", + "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", + "ranking_barplot_box", "group_table_box", "upload_anti_box", "upload_prism_box", + "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", + "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", + "download_data_box", "gecco_filtering_box", "deep_filtering_box" + ) + for (id in box_ids) { shinydashboardPlus::updateBox(id, action = "restore") } }) - - + + # Logic show/hide selectinput in Link coloring in # Biocircos shiny::observeEvent(input$label_color_class, { - - if (input$label_color_class == "R"){ + if (input$label_color_class == "R") { shinyjs::showElement(selector = "#ref_col_biocircos") } else { shinyjs::hideElement(selector = "#ref_col_biocircos") } }) - # Make hybrids from the data, if checkbox is checked - # TODO Put the function to the root. + # Make hybrids from the data, if checkbox is checked + # TODO Put the function to the root. # Tou have duplicated code - shiny::observeEvent(input$anti_hybrid, ignoreInit=T,{ - - if (input$anti_hybrid==T){ + shiny::observeEvent(input$anti_hybrid, ignoreInit = T, { + if (input$anti_hybrid == T) { vals$anti_data$Type2 <- hybrid_col(vals$anti_data) - }else { + } else { vals$anti_data$Type2 <- vals$anti_type } - }) - shiny::observeEvent(input$prism_hybrid,ignoreInit=T, { - - if (input$prism_hybrid==T){ + shiny::observeEvent(input$prism_hybrid, ignoreInit = T, { + if (input$prism_hybrid == T) { vals$prism_data$Type2 <- hybrid_col(vals$prism_data) - }else { + } else { vals$prism_data$Type2 <- vals$prism_type } }) - shiny::observeEvent(input$sempi_hybrid, ignoreInit=T,{ - - if (input$sempi_hybrid==T){ + shiny::observeEvent(input$sempi_hybrid, ignoreInit = T, { + if (input$sempi_hybrid == T) { vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) - }else { + } else { vals$sempi_data$Type2 <- vals$sempi_type } }) # Rename the data, if button is clicked shiny::observeEvent(input$rename, { - rename_data <- vals$rename_data - if (vals$anti_data_input == T){ + if (vals$anti_data_input == T) { anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] vals$renaming_notification <- res[[2]] - anti_data['Type2'] <- vals$anti_type + anti_data["Type2"] <- vals$anti_type vals$anti_data <- anti_data } - - if (vals$sempi_data_input == T){ + + if (vals$sempi_data_input == T) { sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] vals$renaming_notification <- res[[2]] - sempi_data['Type2'] <- vals$sempi_type + sempi_data["Type2"] <- vals$sempi_type vals$sempi_data <- sempi_data } - - if(vals$prism_data_input == T){ + + if (vals$prism_data_input == T) { prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] vals$renaming_notification <- res[[2]] - prism_data['Type2'] <- vals$prism_type + prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } shinyjs::showElement(selector = "#reset_name") shinyjs::hideElement(selector = "#rename") vals$renamed <- T - shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration=10) + shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration = 10) }) # When the new data is uploaded and renamed # is T, then rename data on upload shiny::observeEvent(check_to_rename(), { - shiny::req(vals$renamed == T) - + rename_data <- vals$rename_data - if (vals$anti_data_input == T){ + if (vals$anti_data_input == T) { anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] vals$renaming_notification <- res[[2]] - anti_data['Type2'] <- vals$anti_type + anti_data["Type2"] <- vals$anti_type vals$anti_data <- anti_data } - - if (vals$sempi_data_input == T){ + + if (vals$sempi_data_input == T) { sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] - vals$renaming_notification <- res[[2]] - sempi_data['Type2'] <- vals$sempi_type + vals$renaming_notification <- res[[2]] + sempi_data["Type2"] <- vals$sempi_type vals$sempi_data <- sempi_data } - - if(vals$prism_data_input == T){ + + if (vals$prism_data_input == T) { prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] - vals$renaming_notification <- res[[2]] - prism_data['Type2'] <- vals$prism_type + vals$renaming_notification <- res[[2]] + prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } }) # Reset the renaming. Uncheck the hybrid checkboxes shiny::observeEvent(input$reset_name, { - - vals$anti_data['Type2'] <- vals$anti_data['Type'] - vals$sempi_data['Type2'] <- vals$sempi_data['Type'] - vals$ prism_data['Type2'] <- vals$ prism_data['Type'] - if (input$anti_hybrid==T){ - shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + vals$anti_data["Type2"] <- vals$anti_data["Type"] + vals$sempi_data["Type2"] <- vals$sempi_data["Type"] + vals$ prism_data["Type2"] <- vals$ prism_data["Type"] + if (input$anti_hybrid == T) { + shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) } - if (input$prism_hybrid==T){ - shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + if (input$prism_hybrid == T) { + shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) } - if (input$sempi_hybrid==T){ - shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration=10) + if (input$sempi_hybrid == T) { + shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) } shinyjs::showElement(selector = "#rename") @@ -1039,20 +1064,19 @@ app_server <- function( input, output, session ) { vals$renamed <- F }) # Read the uploaded renaming scheme csv - shiny::observeEvent(input$rename_data,{ - + shiny::observeEvent(input$rename_data, { rename_data <- utils::read.csv(input$rename_data$datapath) vals$rename_data <- rename_data - coloring_datatable <-data.frame( tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)) )) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all),] + coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") }) - - + + # What to do, if hide DeepBGC comparison options scheme is triggered - - + + ############################################################################ ############################################################################ ### ### @@ -1060,49 +1084,48 @@ app_server <- function( input, output, session ) { ### ### ############################################################################ ############################################################################ - shiny::observeEvent(input$prism_supp, ignoreInit = T,priority = 3,{ - if (input$prism_supp == T){ + shiny::observeEvent(input$prism_supp, ignoreInit = T, priority = 3, { + if (input$prism_supp == T) { vals$need_filter <- T - vals$prism_supp_data_input = T + vals$prism_supp_data_input <- T vals$prism_supp_plot <- T - if (!("PRISM-Supp" %in% names(vals$choices$ref))){ + if (!("PRISM-Supp" %in% names(vals$choices$ref))) { vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") update_ui_with_data() } } else { - vals$prism_supp_data_input = F + vals$prism_supp_data_input <- F vals$need_filter <- T - vals$prism_supp_plot <- F - vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref)%in%c("PRISM-Supp"))] - vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by)%in%c("PRISM-Supp"))] - vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos)%in%c("PRISM-Supp"))] + vals$prism_supp_plot <- F + vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref) %in% c("PRISM-Supp"))] + vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by) %in% c("PRISM-Supp"))] + vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos) %in% c("PRISM-Supp"))] update_ui_with_data() } }) - + # Compute all interceptions on data upload. # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), ignoreInit = T,priority = 5,{ + shiny::observeEvent(inputData(), ignoreInit = T, priority = 5, { # GENERATE DATA - if (vals$anti_data_input == TRUE){ - anti_data <- vals$anti_data + if (vals$anti_data_input == TRUE) { + anti_data <- vals$anti_data anti_inter <- vals$anti_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } - if (vals$deep_data_input == TRUE){ + if (vals$deep_data_input == TRUE) { deep_data <- vals$deep_data - deep_inter <- vals$deep_data %>% + deep_inter <- vals$deep_data %>% dplyr::select(Start, Stop) - + deep_inter$seqnames <- "chr" } - if (vals$rre_data_input == TRUE){ + if (vals$rre_data_input == TRUE) { # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) # Store rre data into local variable rre_data <- data.frame(vals$rre_data) @@ -1111,236 +1134,239 @@ app_server <- function( input, output, session ) { dplyr::select(Start, Stop) rre_inter$seqnames <- "chr" } - if (vals$prism_data_input == TRUE){ + if (vals$prism_data_input == TRUE) { # Store master prism data in local variable prism_data <- vals$prism_data # Start/Stop columns from prism data as matrix prism_inter <- prism_data %>% - dplyr::select(Start,Stop) + dplyr::select(Start, Stop) prism_inter$seqnames <- "chr" } - if (vals$sempi_data_input == TRUE){ + if (vals$sempi_data_input == TRUE) { # Store master prism data in local variable sempi_data <- vals$sempi_data # Start/Stop columns from prism data as matrix sempi_inter <- vals$sempi_data %>% - dplyr::select(Start,Stop) + dplyr::select(Start, Stop) sempi_inter$seqnames <- "chr" } - if (vals$prism_json == T){ + if (vals$prism_json == T) { prism_supp_data <- vals$prism_supp_data prism_supp_inter <- vals$prism_supp_data %>% - dplyr::select(Start,Stop) + dplyr::select(Start, Stop) prism_supp_inter$seqnames <- "chr" } - if (vals$arts_data_input == T){ + if (vals$arts_data_input == T) { arts_data <- vals$arts_data arts_inter <- vals$arts_data %>% - dplyr::select(Start,Stop) + dplyr::select(Start, Stop) arts_inter$seqnames <- "chr" } - if (vals$gecco_data_input == TRUE){ + if (vals$gecco_data_input == TRUE) { gecco_data <- vals$gecco_data # Start/Stop columns from prism data as matrix gecco_inter <- vals$gecco_data %>% - dplyr::select(Start,Stop) + dplyr::select(Start, Stop) gecco_inter$seqnames <- "chr" } - - get_inter <- function(inter1, inter2){ + + get_inter <- function(inter1, inter2) { query <- GenomicRanges::makeGRangesFromDataFrame(inter2) subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) - interseption <- GenomicRanges::findOverlaps(query,subject) + interseption <- GenomicRanges::findOverlaps(query, subject) inter_from <- interseption@from inter_to <- interseption@to return(list(from = inter_from, to = inter_to)) } - + inters <- vals$inters - index = 1 - for (i in data_uploads_inter){ - index_2 = 1 - j = soft_names[index] - for (p in data_uploads_inter){ - x = soft_names[index_2] - if ((vals[[i]] == TRUE) & (vals$computed[[j]]==F) & (j!= x)){ - if ((vals[[p]] == TRUE) & (j != soft_names[index_2])){ - res <- get_inter( eval(as.name(paste(j, '_inter', sep = ""))), eval(as.name(paste(x, '_inter', sep = "")))) + index <- 1 + for (i in data_uploads_inter) { + index_2 <- 1 + j <- soft_names[index] + for (p in data_uploads_inter) { + x <- soft_names[index_2] + if ((vals[[i]] == TRUE) & (vals$computed[[j]] == F) & (j != x)) { + if ((vals[[p]] == TRUE) & (j != soft_names[index_2])) { + res <- get_inter(eval(as.name(paste(j, "_inter", sep = ""))), eval(as.name(paste(x, "_inter", sep = "")))) new_res <- list() - new_res$from <- eval(as.name(paste(x, '_data', sep = "")))[res$from,]$Cluster - new_res$to <- eval(as.name(paste(j, '_data', sep = "")))[res$to,]$Cluster + new_res$from <- eval(as.name(paste(x, "_data", sep = "")))[res$from, ]$Cluster + new_res$to <- eval(as.name(paste(j, "_data", sep = "")))[res$to, ]$Cluster inters[[j]][[x]] <- new_res - inters[[x]][[j]] <- list(from=new_res$to, to=new_res$from) + inters[[x]][[j]] <- list(from = new_res$to, to = new_res$from) } - } - index_2 = index_2 +1 + index_2 <- index_2 + 1 } - if (vals[[i]] == TRUE){ + if (vals[[i]] == TRUE) { vals$computed[[j]] <- TRUE } - index = index +1 + index <- index + 1 } - + vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) &(vals$arts_data_input==F)){ - vals$inters_filtered <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) & (vals$arts_data_input == F)) { + vals$inters_filtered <- inters enable_event_logic() - } else{ + } else { vals$need_filter <- T vals$filter_data <- T } - }) # dplyr::filter ARTS, DeepBGC, GECCO interception data - # and general dataframes to plot, if data filtering + # and general dataframes to plot, if data filtering # options are triggered - shiny::observeEvent({dynamicInput() - to_debounce() - }, ignoreInit = T, priority = 4 ,{ - shiny::req(vals$data_upload_count>=1) - inters <- vals$inters - if (vals$deep_data_input == TRUE){ - if (vals$need_filter == F) { - biocircos_deep <- filter_deepbgc(vals$deep_data,vals$cluster_type,vals$score_a,vals$score_c,vals$score_d,vals$domains_filter,vals$biodomain_filter,vals$gene_filter) - vals$deep_data_filtered <- biocircos_deep - } else { - biocircos_deep <- vals$deep_data_filtered - } - if (vals$data_upload_count!=1){ - new_deep <- lapply(inters$deep, function(x){ - new_to <- x$to[x$to %in% biocircos_deep$Cluster] - new_from <- x$from[x$to %in% biocircos_deep$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$deep) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from - new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + shiny::observeEvent( + { + dynamicInput() + to_debounce() + }, + ignoreInit = T, + priority = 4, + { + shiny::req(vals$data_upload_count >= 1) + inters <- vals$inters + if (vals$deep_data_input == TRUE) { + if (vals$need_filter == F) { + biocircos_deep <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) + vals$deep_data_filtered <- biocircos_deep + } else { + biocircos_deep <- vals$deep_data_filtered } - new_inters$deep <- new_deep - vals$inters_filtered <- new_inters - inters <- new_inters - } - } - if (vals$gecco_data_input == TRUE){ - if (vals$need_filter == F) { - gecco_data <- filter_gecco(vals$gecco_data,vals$score_cluster_gecco,vals$score_average_gecco,vals$domains_filter_gecco,vals$prot_filter_gecco) - vals$gecco_data_filtered <- gecco_data - } else { - gecco_data <- vals$gecco_data_filtered - } - if (vals$data_upload_count!=1){ - new_gecco <- lapply(inters$gecco, function(x){ - new_to <- x$to[x$to %in% gecco_data$Cluster] - new_from <- x$from[x$to %in% gecco_data$Cluster] - list(from=new_from, to=new_to) - }) - new_inters <- inters - update_list <- names(inters$gecco) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from - new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to + if (vals$data_upload_count != 1) { + new_deep <- lapply(inters$deep, function(x) { + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from = new_from, to = new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters } - new_inters$gecco <- new_gecco - vals$inters_filtered <- new_inters - inters <- new_inters } - } - if (vals$arts_data_input == TRUE){ - if (input$dup_choice != "All"){ - vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") - if (vals$data_upload_count!=1){ - new_arts <- lapply(inters$arts, function(x){ - new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] - new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] - list(from=new_from, to=new_to) + if (vals$gecco_data_input == TRUE) { + if (vals$need_filter == F) { + gecco_data <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) + vals$gecco_data_filtered <- gecco_data + } else { + gecco_data <- vals$gecco_data_filtered + } + if (vals$data_upload_count != 1) { + new_gecco <- lapply(inters$gecco, function(x) { + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] + list(from = new_from, to = new_to) }) new_inters <- inters - update_list <- names(inters$arts) - for (b in seq(1:length(update_list))){ - new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from - new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + update_list <- names(inters$gecco) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to } - new_inters$arts <- new_arts + new_inters$gecco <- new_gecco vals$inters_filtered <- new_inters inters <- new_inters } - } else { - vals$arts_data_filtered <- vals$arts_data - vals$inters_filtered <- inters - } - } - if (input$prism_supp == FALSE){ - inters$prism_supp <- NULL - for (name in names(inters)) { - inters[[name]][which(names(inters[[name]])%in%c("prism_supp"))]<-NULL + if (vals$arts_data_input == TRUE) { + if (input$dup_choice != "All") { + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + if (vals$data_upload_count != 1) { + new_arts <- lapply(inters$arts, function(x) { + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from = new_from, to = new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } + } else { + vals$arts_data_filtered <- vals$arts_data + vals$inters_filtered <- inters + } } + if (input$prism_supp == FALSE) { + inters$prism_supp <- NULL + for (name in names(inters)) { + inters[[name]][which(names(inters[[name]]) %in% c("prism_supp"))] <- NULL + } + } + if ((vals$gecco_data_input == F) & (vals$deep_data_input == F) & (vals$arts_data_input == F)) { + vals$inters_filtered <- inters + } + vals$need_filter <- F + vals$filter_data <- F + vals$can_plot_deep_ref <- T + enable_event_logic() } - if ((vals$gecco_data_input == F) & (vals$deep_data_input == F )& (vals$arts_data_input == F )) { - vals$inters_filtered <- inters - } - vals$need_filter <- F - vals$filter_data <- F - vals$can_plot_deep_ref = T - enable_event_logic() - - }) + ) # Compute the Biociros plot. Store information to plot later - shiny::observeEvent(biocircos_listen(), ignoreInit = T,priority = 3 ,{ - shiny::req(vals$data_upload_count >=2) + shiny::observeEvent(biocircos_listen(), ignoreInit = T, priority = 3, { + shiny::req(vals$data_upload_count >= 2) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_biocircos == T) - ##source("src/biocircos_functions.R") - #BioCircos! + ## source("src/biocircos_functions.R") + # BioCircos! Biocircos_chromosomes <- list() arcs_chromosomes <- c() arcs_begin <- c() arcs_end <- c() arc_labels <- c() arc_col <- c() - - if (is.null(vals$inters_filtered)){ + + if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { inters <- vals$inters_filtered } - - + + rename_data <- vals$rename_data coloring_datatable <- vals$coloring_datatable - + index <- 1 # browser() - for (upload in data_uploads){ - if (vals[[upload]] == T){ + for (upload in data_uploads) { + if (vals[[upload]] == T) { # Store data in local variable corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) - init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color , coloring_datatable) - #Make chromosome list for Biocircos plot. Use chr_len as an input + init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color, coloring_datatable) + # Make chromosome list for Biocircos plot. Use chr_len as an input Biocircos_chromosomes <- init_data[[1]] - #Add arcs. Quantity of arcs is length of dataframes + # Add arcs. Quantity of arcs is length of dataframes arcs_chromosomes <- init_data[[2]] # Add arcs begin positions. (Start column) arcs_begin <- init_data[[3]] - # Stop position of arcs. + # Stop position of arcs. arcs_end <- init_data[[4]] # Add Arcs labels. Can add only one label... arc_labels <- init_data[[5]] - + arc_col <- init_data[[6]] } - index <- index +1 + index <- index + 1 } # Add to tracklist. Then it can be populated with links - tracklist <- BioCircos::BioCircosArcTrack('myArcTrack', arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels,colors = arc_col ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + tracklist <- BioCircos::BioCircosArcTrack("myArcTrack", arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels, colors = arc_col + ) + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and # from second one. IDs are duplicated, if intercepted more than one time - + chromosomes_start <- c() chromosomes_end <- c() link_pos_start <- c() @@ -1350,29 +1376,29 @@ app_server <- function( input, output, session ) { label_1 <- c() label_2 <- c() label_color <- c() - - #CALCULATIONS + + # CALCULATIONS # ----------------------------------------- - - + + data_uploads_2 <- data_uploads soft_2 <- soft_namings soft_names_2 <- soft_names data_to_use_2 <- data_to_use index <- 1 - for (upload in data_uploads){ + for (upload in data_uploads) { data_uploads_2 <- data_uploads_2[-1] soft_2 <- soft_2[-1] soft_names_2 <- soft_names_2[-1] data_to_use_2 <- data_to_use_2[-1] index2 <- 1 - if (vals[[upload]] == T){ - for (upload2 in data_uploads_2){ - if ((vals[[upload2]]==T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])){ + if (vals[[upload]] == T) { + for (upload2 in data_uploads_2) { + if ((vals[[upload2]] == T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]] ) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]]) # Add links start positions as a start from dataframe. This vector is for chromosome start link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) # Add links start positions as a start from dataframe. For chromosome start variable @@ -1380,146 +1406,152 @@ app_server <- function( input, output, session ) { # Add links start position for a chromosome stop variable link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2,output[[8]])) + link_pos_end_2 <- as.numeric(c(link_pos_end_2, output[[8]])) label_1 <- c(label_1, output[[9]]) label_2 <- c(label_2, output[[10]]) - label_color = c(label_color, output[[11]] ) + label_color <- c(label_color, output[[11]]) } - index2 <- index2 +1 + index2 <- index2 + 1 } utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) } - index <- index +1 + index <- index + 1 } - - - - + + + + # Combine labels with mapply to one list - link_labels <- mapply(function(x,y) paste(x, y, sep = " | "), label_1, label_2 ) - - # Add links and labels to the track list for subsequent visualization - if ((input$label_color == T) & (length(chromosomes_start) > 0)){ + link_labels <- mapply(function(x, y) paste(x, y, sep = " | "), label_1, label_2) + + # Add links and labels to the track list for subsequent visualization + if ((input$label_color == T) & (length(chromosomes_start) > 0)) { group_colors <- plyr::count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])){ - subset <- unname( which(label_color %in% group_colors$x[i])) - tracklist = tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i]) + for (i in seq(1:dim(group_colors)[1])) { + subset <- unname(which(label_color %in% group_colors$x[i])) + tracklist <- tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], + maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i] + ) } - } else if ((input$label_color == F) & (length(chromosomes_start) > 0)){ - tracklist = tracklist + BioCircos::BioCircosLinkTrack('myLinkTrack_master', chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) - } else{ - shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration=NULL) - } - + } else if ((input$label_color == F) & (length(chromosomes_start) > 0)) { + tracklist <- tracklist + BioCircos::BioCircosLinkTrack("myLinkTrack_master", chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, + maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] + ) + } else { + shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration = NULL) + } + vals$tracklist <- tracklist vals$Biocircos_chromosomes <- Biocircos_chromosomes }) - - shiny::observeEvent(deep_reference(), ignoreInit = T,{ - shiny::req(vals$data_upload_count >=1) + + shiny::observeEvent(deep_reference(), ignoreInit = T, { + shiny::req(vals$data_upload_count >= 1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_deep_ref == T) shiny::req(input$ref != "") - shiny::req(vals$data_upload_count >=1) - - if (is.null(vals$inters_filtered)){ + shiny::req(vals$data_upload_count >= 1) + + if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { inters <- vals$inters_filtered } - ##source("src/deep_reference_functions.R") + ## source("src/deep_reference_functions.R") # GENERATE DATA index <- 1 - for (upload in data_uploads){ - if (vals[[upload]] == T){ - data<- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index],input$sempi_width,input$prism_supp_data_input_width,input$arts_width,input$rre_width)) + for (upload in data_uploads) { + if (vals[[upload]] == T) { + data <- vals[[data_to_use[index]]] + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width)) } - index <- index +1 + index <- index + 1 } - - + + lett <- rev(LETTERS)[1:9] - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - - - - + + tooltip <- c( + "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", + "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p" + ) + + + + # MAKE COMPUTATIONS sup_index <- 1 soft_lttrs <- lett rename_y_axis <- vals$rename_y_axis - rename_y_axis <- lapply(1:(length( soft_lttrs)-1), function(x){ - soft_lttrs[x]=soft_namings[x] + rename_y_axis <- lapply(1:(length(soft_lttrs) - 1), function(x) { + soft_lttrs[x] <- soft_namings[x] }) names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] - for (upload in data_uploads){ + for (upload in data_uploads) { soft_lttr <- soft_lttrs[1] soft_lttrs <- soft_lttrs[-1] - if (vals[[upload]] == T){ + if (vals[[upload]] == T) { soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index],soft_major, inter = F,inters) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index,seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more,inters) + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = F, inters) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more, inters) seg_ref <- seg_ref_g - - if (input$ref == soft_namings[sup_index]){ - shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))))>0,"Reference data is empty, and so, insufficient for plotting. Please select another one") ) - plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref,vals$rre_more)) + + if (input$ref == soft_namings[sup_index]) { + shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))) > 0, "Reference data is empty, and so, insufficient for plotting. Please select another one")) + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + + suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref, vals$rre_more)) soft_let <- abbr[sup_index] lettrs <- lett[2:length(lett)] labels_1 <- list() - index = 1 - for (i in data_uploads){ - if ((vals[[i]] == T) & (soft_names[index] != soft_major)){ + index <- 1 + for (i in data_uploads) { + if ((vals[[i]] == T) & (soft_names[index] != soft_major)) { df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index],soft_major,inter = T, inters) - seg_df <- define_spec_seg_df(soft_names, index,seg_df, soft_major, df,inter = T, vals$rre_more, inters) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = T, inters) + seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = T, vals$rre_more, inters) labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) plot <- suppressWarnings(add_more_annot(seg_df, plot, soft_names, index, vals$rre_more)) } - index = index +1 - + index <- index + 1 } plot <- plot + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ + ggplot2::ylab("") + + ggplot2::xlab("Chromosome length") + ggplot2::theme(legend.title = ggplot2::element_blank()) + ggplot2::ggtitle("Annotations' comparison to the reference") to_plot <- plotly::ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), + to_plot <- to_plot %>% + plotly::layout(legend = list( + font = list( + family = "sans-serif", + size = 12, + color = "#000" + ), bordercolor = "#FFFFFF", borderwidth = 2, - title=list(text=' Cluster Types '))) - - + title = list(text = " Cluster Types ") + )) } seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) vals[[soft_datafr[sup_index]]] <- seg_ref } - sup_index <- sup_index +1 + sup_index <- sup_index + 1 } vals$rename_y_axis <- rename_y_axis vals$deep_reference_to_plot <- to_plot }) - - + + ############################################################################ ############################################################################ ### ### @@ -1527,56 +1559,58 @@ app_server <- function( input, output, session ) { ### ### ############################################################################ ############################################################################ - - ##---------------------------------------------------------------- + + ## ---------------------------------------------------------------- ## DeepBGC Comparison tab - - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- # Render barplot - mod_deepbgc_plots_server("deep_barplot_ui_1", vals=vals, score_a = vals$score_a, score_d=vals$score_d, score_c=vals$score_c) - + mod_deepbgc_plots_server("deep_barplot_ui_1", vals = vals, score_a = vals$score_a, score_d = vals$score_d, score_c = vals$score_c) + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - - ##---------------------------------------------------------------- + + ## ---------------------------------------------------------------- ## GECCO Comparison tab - - ##---------------------------------------------------------------- + ## ---------------------------------------------------------------- # Render barplot - mod_gecco_plots_server("gecco_plots_ui_1", vals = vals,score_average_gecco=vals$score_average_gecco, - score_cluster_gecco=vals$score_cluster_gecco ) - ##--------------------------------------------------------------- + mod_gecco_plots_server("gecco_plots_ui_1", + vals = vals, score_average_gecco = vals$score_average_gecco, + score_cluster_gecco = vals$score_cluster_gecco + ) + ## --------------------------------------------------------------- ## Annotation on chromosome plots' tab - - ##--------------------------------------------------------------- - + ## --------------------------------------------------------------- + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information # For antismash and PRISM data showed only ID, Start, Stop, Type - mod_deep_reference_server("deep_reference_ui_1", vals=vals) - - mod_deep_reference_2_server("deep_reference_2_ui_1", vals=vals, data_uploads = data_uploads, data_to_use = data_to_use) - ##---------------------------------------------------------------- + mod_deep_reference_server("deep_reference_ui_1", vals = vals) + + mod_deep_reference_2_server("deep_reference_2_ui_1", vals = vals, data_uploads = data_uploads, data_to_use = data_to_use) + ## ---------------------------------------------------------------- ## Biocircos plot tab - - ##--------------------------------------------------------------- + ## --------------------------------------------------------------- # Render Biocircos Plot for all-vs-all comparison mod_biocircos_server("biocircos_ui_1", vals = vals) - ##--------------------------------------------------------------- + ## --------------------------------------------------------------- ## Summarize tab - - ##--------------------------------------------------------------- + ## --------------------------------------------------------------- # Render barplot with number plyr::count of interception for BGC IDs - mod_barplot_rank_server("barplot_rank_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) - - + mod_barplot_rank_server("barplot_rank_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) + + # Render table with data - mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) - + mod_group_table_server("group_table_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) + # Download used datasets (as for BioCircos) mod_download_server("download_ui_1") - + shiny::onSessionEnded(function() { # List files in directory files_in_dir <- list.files() # Iterate over those files and if found "_biocircos.csv" add to the flst vector for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { file.remove(file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ + } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { file.remove(file_names) } } diff --git a/R/app_ui.R b/R/app_ui.R index 2682cec..1b555e2 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -1,6 +1,6 @@ #' The application User-Interface -#' -#' @param request Internal parameter for `{shiny}`. +#' +#' @param request Internal parameter for `{shiny}`. #' DO NOT REMOVE. #' @import shiny #' @noRd @@ -8,13 +8,13 @@ app_ui <- function(request) { tagList( # Leave this function for adding external resources golem_add_external_resources(), - # Your application UI logic + # Your application UI logic shinydashboardPlus::dashboardPage( shinydashboardPlus::dashboardHeader(title = "BGCViz"), shinydashboardPlus::dashboardSidebar( width = 350, shinydashboard::sidebarMenu( - id="menu_items", + id = "menu_items", style = "white-space: normal;", shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), @@ -23,13 +23,15 @@ app_ui <- function(request) { shinydashboard::menuItemOutput("anno_sidemenu_out"), shinydashboard::menuItemOutput("biocircos_sidemenu_out"), shinydashboard::menuItemOutput("summarize_sidemenu_out"), - shinydashboard::menuItem(tabName = "restore_boxes", - actionButton("restore_box", "Restore all boxes", class = "bg-success")) + shinydashboard::menuItem( + tabName = "restore_boxes", + actionButton("restore_box", "Restore all boxes", class = "bg-success") + ) ) ), shinydashboard::dashboardBody( - tags$head( - tags$style(HTML(".main-sidebar { font-size: 15px; }")) #change the font size to 20 + tags$head( + tags$style(HTML(".main-sidebar { font-size: 15px; }")) # change the font size to 20 ), shinyjs::useShinyjs(), shinydisconnect::disconnectMessage( @@ -46,7 +48,7 @@ app_ui <- function(request) { css = "" ), shinydashboard::tabItems( - shinydashboard::tabItem( + shinydashboard::tabItem( tabName = "deep_sidemenu", mod_deepbgc_plots_ui("deep_barplot_ui_1"), sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), @@ -62,13 +64,14 @@ app_ui <- function(request) { tabName = "anno_sidemenu", shiny::fluidRow( tags$div( - id="anno_data1", + id = "anno_data1", shiny::column( width = 12, mod_deep_reference_2_ui("deep_reference_2_ui_1"), mod_deep_reference_ui("deep_reference_ui_1") ) - )), + ) + ), sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) ), @@ -82,7 +85,7 @@ app_ui <- function(request) { tabName = "summarize_sidemenu", shiny::fluidRow( tags$div( - id="summarize_data1", + id = "summarize_data1", mod_barplot_rank_ui("barplot_rank_ui_1"), mod_group_table_ui("group_table_ui_1") ) @@ -93,16 +96,18 @@ app_ui <- function(request) { tabName = "uploaddata_sidemenu", shiny::fluidRow( tags$div( - id="upload_data1", + id = "upload_data1", div( id = "id1", shinydashboardPlus::box( title = "Upload Antismash data", id = "upload_anti_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("anti_data", - "Upload Antismash data", accept = list(".csv", ".json")) + "Upload Antismash data", + accept = list(".csv", ".json") + ) ) ), div( @@ -110,10 +115,12 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Upload PRISM data", id = "upload_prism_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("prism_data", - "Upload PRISM data", accept = list(".csv", ".json")) + "Upload PRISM data", + accept = list(".csv", ".json") + ) ) ), div( @@ -121,10 +128,12 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Upload SEMPI 2.0 data", id = "upload_sempi_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data", accept = list(".csv", ".zip")) + "Upload SEMPI 2.0 data", + accept = list(".csv", ".zip") + ) ) ), div( @@ -132,26 +141,30 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Upload DeepBGC data", id = "upload_deep_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("deep_data", - "Upload DeepBGC data", accept = ".tsv") + "Upload DeepBGC data", + accept = ".tsv" + ) ) ) ) ), shiny::fluidRow( tags$div( - id="upload_data2", + id = "upload_data2", div( id = "id1", shinydashboardPlus::box( title = "Upload Gecco data", id = "upload_gecco_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("gecco_data", - "Upload Gecco data", accept = ".tsv") + "Upload Gecco data", + accept = ".tsv" + ) ) ), div( @@ -159,10 +172,12 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Upload RRE-Finder data", id = "upload_rre_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, - shiny::fileInput("rre_data", - "Upload RRE-Finder data") + shiny::fileInput( + "rre_data", + "Upload RRE-Finder data" + ) ) ), div( @@ -170,10 +185,12 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Upload ARTS data", id = "upload_arts_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::fileInput("arts_data", - "Upload ARTS data", accept = list(".csv", ".zip")) + "Upload ARTS data", + accept = list(".csv", ".zip") + ) ) ), div( @@ -181,7 +198,7 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Use Example data", id = "use_example_data_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), @@ -204,20 +221,22 @@ app_ui <- function(request) { shiny::column( width = 6, tags$div( - id="options_data1", + id = "options_data1", div( id = "id1", shinydashboardPlus::box( title = "Rename", id = "rename_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), shiny::fileInput("rename_data", - "Upload renaming and coloring scheme", accept = ".csv"), + "Upload renaming and coloring scheme", + accept = ".csv" + ), shiny::actionButton("rename", "Rename"), shiny::actionButton("reset_name", "Reset") ) @@ -225,11 +244,13 @@ app_ui <- function(request) { div( id = "id2", shiny::uiOutput("deep_filter_box") - ))), + ) + ) + ), shiny::column( width = 6, tags$div( - id="options_data2", + id = "options_data2", div( id = "id3", shiny::uiOutput("gecco_filter_box") @@ -239,7 +260,7 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Improve global visualization", id = "improve_visualization_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), @@ -253,12 +274,14 @@ app_ui <- function(request) { shinydashboardPlus::box( title = "Prism supplement + ARTS options", id = "prism_supplement_arts_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", choices = c("All"), - selected = "All") + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", + choices = c("All"), + selected = "All" + ) ) ), mod_download_ui("download_ui_1") @@ -271,31 +294,29 @@ app_ui <- function(request) { ) ) ) - ) + ) } #' Add external Resources to the Application -#' -#' This function is internally used to add external -#' resources inside the Shiny application. -#' +#' +#' This function is internally used to add external +#' resources inside the Shiny application. +#' #' @import shiny #' @importFrom golem add_resource_path activate_js favicon bundle_resources #' @noRd -golem_add_external_resources <- function(){ - +golem_add_external_resources <- function() { add_resource_path( - 'www', app_sys('app/www') + "www", app_sys("app/www") ) - + tags$head( favicon(), bundle_resources( - path = app_sys('app/www'), - app_title = 'BGCViz' + path = app_sys("app/www"), + app_title = "BGCViz" ) # Add here other external resources - # for example, you can add shinyalert::useShinyalert() + # for example, you can add shinyalert::useShinyalert() ) } - diff --git a/R/fct_biocircos.R b/R/fct_biocircos.R index cb17076..4bad000 100644 --- a/R/fct_biocircos.R +++ b/R/fct_biocircos.R @@ -1,37 +1,37 @@ -#' initialize_biocircos +#' initialize_biocircos #' #' @description Function, that initialized biocircos plot, setting proper chromosomes, length, arcs and their parameters #' #' @return Biocircos chromosomes, arcs, their start, end, labels, color in hexadecimal format #' #' @noRd -initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable){ - #Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[[name]] <- chr_len - #Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes,rep(name, length(biocircos_anti$Cluster)) ) +initialize_biocircos <- function(biocircos_anti, name, Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable) { + # Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[[name]] <- chr_len + # Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep(name, length(biocircos_anti$Cluster))) # Add arcs begin positions. (Start column) arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop ) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop) # Add Arcs labels. Can add only one label... arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((biocircos_color == T)){ - arc_colors <- sapply(biocircos_anti$Type2, function(x){ - if (x %in% coloring_datatable$x$data$Name){ + if ((biocircos_color == T)) { + arc_colors <- sapply(biocircos_anti$Type2, function(x) { + if (x %in% coloring_datatable$x$data$Name) { coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] } else { - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] } }) } else { - arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'] + arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] } - arc_col <- c(arc_col,as.character(arc_colors) ) - return(list(Biocircos_chromosomes,arcs_chromosomes, arcs_begin , arcs_end, arc_labels, arc_col)) + arc_col <- c(arc_col, as.character(arc_colors)) + return(list(Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col)) } -#' add_biocircos_data +#' add_biocircos_data #' #' @description Function, that adds data to the biocircos plot. It get the interception, make links between chromosomes and labels and color them (according to a chosen scheme) #' @@ -39,90 +39,91 @@ initialize_biocircos <- function(biocircos_anti, name,Biocircos_chromosomes, arc #' #' @noRd -add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable){ +add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable) { inter_s_rre_n <- data1_inter inter_rre_s <- data2_inter - # Add link start. Just populate certain chromosome name times the lenght of interception + # Add link start. Just populate certain chromosome name times the lenght of interception chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. + # Add link end. Just populate second output from the vectors, used above. chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s,data2$Cluster)] )) + link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s, data2$Cluster)])) # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s,data2$Cluster)])) + link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s, data2$Cluster)])) # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c( data1$Start[match(inter_s_rre_n,data1$Cluster)])) + link_pos_end <- as.numeric(c(data1$Start[match(inter_s_rre_n, data1$Cluster)])) # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n,data1$Cluster)])) - label_1 <- c(sapply(inter_rre_s, function(x){x = paste(paste0(data2_label,":"), x, ",", data2$Type[data2$Cluster == x])})) - label_2 <- c(sapply(inter_s_rre_n, function(x){x = paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x])})) - #browser() - if (!is.null(inter_rre_s)){ - if (class == 'P'){ + link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n, data1$Cluster)])) + label_1 <- c(sapply(inter_rre_s, function(x) { + x <- paste(paste0(data2_label, ":"), x, ",", data2$Type[data2$Cluster == x]) + })) + label_2 <- c(sapply(inter_s_rre_n, function(x) { + x <- paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x]) + })) + # browser() + if (!is.null(inter_rre_s)) { + if (class == "P") { subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster )], function (x){ + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { if (x %in% coloring_datatable$x$data$Name) { as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } }))) - if (length(label_color) != 0){ - for (t in seq(1:length(label_color))){ - if (!is.null(subset_vec[t])){ - if (subset_vec[t] == F){ - label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + if (length(label_color) != 0) { + for (t in seq(1:length(label_color))) { + if (!is.null(subset_vec[t])) { + if (subset_vec[t] == F) { + label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } } } } - } else if (class == 'H'){ - if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster )], function (x){ + } else if (class == "H") { + if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))) { + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { if (x %in% coloring_datatable$x$data$Name) { as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } }))) } else { - label_color <-as.character( c(sapply(data2$Type2[ match(inter_rre_s, data2$Cluster )], function (x){ + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { if (x %in% coloring_datatable$x$data$Name) { as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } }))) } - }else if (class == 'R'){ - if (data2_label == ref_col_biocircos){ - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function (x){ + } else if (class == "R") { + if (data2_label == ref_col_biocircos) { + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { if (x %in% coloring_datatable$x$data$Name) { as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } }))) - } else if (data1_label == ref_col_biocircos){ - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s,data2$Cluster)], function (x){ + } else if (data1_label == ref_col_biocircos) { + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { if (x %in% coloring_datatable$x$data$Name) { as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } - else{ - as.character( coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base']) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } }))) - } else{ - label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + } else { + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) } } else { - label_color <-as.character( rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == 'base'], length(chromosomes_start))) + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) } } - return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color)) -} \ No newline at end of file + return(list( + inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color + )) +} diff --git a/R/fct_deep_reference.R b/R/fct_deep_reference.R index b96550b..ed5a0f9 100644 --- a/R/fct_deep_reference.R +++ b/R/fct_deep_reference.R @@ -1,164 +1,166 @@ -#' simple_seg +#' simple_seg #' -#' @description Function, that creates simple dataframe for values to plot in deep_reference. +#' @description Function, that creates simple dataframe for values to plot in deep_reference. #' #' @return dataframe, with the fields: x (start of the cluster), y (arbitrary letter to change to the software further), -#' xend (End of a cluster), yend (arvitrary letter), Type (permanent), Type2 (which is temporary, if the data is renamed, +#' xend (End of a cluster), yend (arvitrary letter), Type (permanent), Type2 (which is temporary, if the data is renamed, #' used for coloring and legend), Software, ID (unique number), Start, Stop (of a cluster, to show on mouse hover) #' #' @noRd -simple_seg <- function(df, letter, software, soft_name ,soft_namings, inter=T, inters){ - if (inter== T){ +simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = T, inters) { + if (inter == T) { data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] - } else{ + } else { data <- df } - - seg_df <- data.frame(x=as.numeric(data$Start), - y=rep(letter, length(data$Cluster)), - xend=as.numeric( data$Stop), - yend=rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop) + + seg_df <- data.frame( + x = as.numeric(data$Start), + y = rep(letter, length(data$Cluster)), + xend = as.numeric(data$Stop), + yend = rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop + ) return(seg_df) } -#' add_arts +#' add_arts #' #' @description Function, that add arts-specific data to the simple dataframe #' -#' @return dataframe with the fields, specified in simple_seg() + added Hit, Core, Count, E_value, Bitscore, Model. +#' @return dataframe with the fields, specified in simple_seg() + added Hit, Core, Count, E_value, Bitscore, Model. #' #' @noRd -add_arts <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ +add_arts <- function(seg_df, soft_namings, df, inter = T, inters) { + if (inter == T) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] - }else{ + } else { subset_df <- df } - seg_df$Hit = subset_df$Hit - seg_df$xend = as.numeric(subset_df$Stop) - seg_df$Core = subset_df$Core - seg_df$Count = subset_df$Count - seg_df$E_value = subset_df$Evalue - seg_df$Bitscore = subset_df$Bitscore - seg_df$Model = subset_df$Model + seg_df$Hit <- subset_df$Hit + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Core <- subset_df$Core + seg_df$Count <- subset_df$Count + seg_df$E_value <- subset_df$Evalue + seg_df$Bitscore <- subset_df$Bitscore + seg_df$Model <- subset_df$Model return(seg_df) } -#' add_prism_supp +#' add_prism_supp #' #' @description Function, that add prism-supplement-specific data to the simple dataframe #' #' @return dataframe with the fields, specified in simple_seg() + added Score, Name and Full_Name #' #' @noRd -add_prism_supp <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ +add_prism_supp <- function(seg_df, soft_namings, df, inter = T, inters) { + if (inter == T) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] - }else{ + } else { subset_df <- df } - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Name = subset_df$Name - seg_df$Full_name = subset_df$Full_name + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score <- subset_df$Score + seg_df$Name <- subset_df$Name + seg_df$Full_name <- subset_df$Full_name return(seg_df) } -#' add_deep +#' add_deep #' #' @description Function, that add deepbgc-specific data to the simple dataframe #' #' @return dataframe with the fields, specified in simpl_seg() + added Num_domains, deepbgc_score, activity #' #' @noRd -add_deep <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ +add_deep <- function(seg_df, soft_namings, df, inter = T, inters) { + if (inter == T) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] - }else{ + } else { subset_df <- df } - seg_df$num_domains = subset_df$num_domains - seg_df$deepbgc_score = subset_df$deepbgc_score - seg_df$activity = subset_df$product_activity + seg_df$num_domains <- subset_df$num_domains + seg_df$deepbgc_score <- subset_df$deepbgc_score + seg_df$activity <- subset_df$product_activity return(seg_df) } -#' add_rre +#' add_rre #' #' @description Function, that add rre-finder-specific data to the simple dataframe. The function also checks if RRE #' data is in the long format, or in the short one. It depends on RRE-Finder run parameters #' -#' @return dataframe with the fields, specified in simple_seg() + added E_values in short format, or + Score, E_value, +#' @return dataframe with the fields, specified in simple_seg() + added E_values in short format, or + Score, E_value, #' P_value, RRE_Start, RRE_stop and Probability in long format #' #' @noRd -add_rre <- function(seg_df, soft_namings, df, inter=T, rre_more,inters){ - if (inter == T){ +add_rre <- function(seg_df, soft_namings, df, inter = T, rre_more, inters) { + if (inter == T) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] - }else{ + } else { subset_df <- df } - if (rre_more == T){ - seg_df$xend=as.numeric(subset_df$Stop) - seg_df$Score = subset_df$Score - seg_df$Stop = subset_df$Stop - seg_df$E_value = subset_df$E.value - seg_df$P_value = subset_df$P.value - seg_df$RRE_start = subset_df$RRE.start - seg_df$RRE_stop = subset_df$RRE.end - seg_df$Probability = subset_df$Probability + if (rre_more == T) { + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score <- subset_df$Score + seg_df$Stop <- subset_df$Stop + seg_df$E_value <- subset_df$E.value + seg_df$P_value <- subset_df$P.value + seg_df$RRE_start <- subset_df$RRE.start + seg_df$RRE_stop <- subset_df$RRE.end + seg_df$Probability <- subset_df$Probability } else { - seg_df$xend=subset_df$Stop - seg_df$E_value = subset_df$E.value + seg_df$xend <- subset_df$Stop + seg_df$E_value <- subset_df$E.value } - + return(seg_df) } -#' add_gecco +#' add_gecco #' -#' @description Function, that add gecco-specific data to the simple dataframe. +#' @description Function, that add gecco-specific data to the simple dataframe. #' #' @return dataframe with the fields, specified in simple_seg() + Num_proteins, Num_domains, Average_p, Max_p #' #' @noRd -add_gecco <- function(seg_df, soft_namings, df, inter=T,inters){ - if (inter == T){ +add_gecco <- function(seg_df, soft_namings, df, inter = T, inters) { + if (inter == T) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] - }else{ + } else { subset_df <- df } - seg_df$Num_proteins = subset_df$num_prot - seg_df$Num_domains = subset_df$num_domains - seg_df$Average_p = subset_df$average_p - seg_df$Max_p = subset_df$max_p + seg_df$Num_proteins <- subset_df$num_prot + seg_df$Num_domains <- subset_df$num_domains + seg_df$Average_p <- subset_df$average_p + seg_df$Max_p <- subset_df$max_p return(seg_df) } -#' define_spec_seg_df +#' define_spec_seg_df #' #' @description Master function, which invokes the appropriate add_ function, based on a label. #' #' @return dataframe with the fields, specified in simple_seg() + specific to the software. #' #' @noRd -define_spec_seg_df <- function(soft_names, index,seg_df, soft_major, df , inter=T, rre_more,inters){ - if (inter == F){ +define_spec_seg_df <- function(soft_names, index, seg_df, soft_major, df, inter = T, rre_more, inters) { + if (inter == F) { soft_major <- "Not applicable" } - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)){ - seg_df <- add_prism_supp(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "arts")& (soft_names[index] != soft_major)){ - seg_df <- add_arts(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "deep")& (soft_names[index] != soft_major)){ - seg_df <- add_deep(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "gecco")& (soft_names[index] != soft_major)){ - seg_df <- add_gecco(seg_df, soft_major, df, inter,inters) - } else if ((soft_names[index] == "rre")& (soft_names[index] != soft_major)){ - seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more,inters) + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)) { + seg_df <- add_prism_supp(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "arts") & (soft_names[index] != soft_major)) { + seg_df <- add_arts(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "deep") & (soft_names[index] != soft_major)) { + seg_df <- add_deep(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "gecco") & (soft_names[index] != soft_major)) { + seg_df <- add_gecco(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "rre") & (soft_names[index] != soft_major)) { + seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more, inters) } return(seg_df) -} \ No newline at end of file +} diff --git a/R/fct_filtering.R b/R/fct_filtering.R index 83dfb19..a2ab10b 100644 --- a/R/fct_filtering.R +++ b/R/fct_filtering.R @@ -1,91 +1,99 @@ -#' filter_deepbgc +#' filter_deepbgc #' #' @description Function, that given the deepbgc dataframe and input values as filter, will return filtered dataframe #' #' @return Filtered deepbgc dataframe #' #' @noRd -filter_deepbgc <- function(deep_data,cluster_type,score_a_input,score_c_input,score_d_input,domains_filter,biodomain_filter,gene_filter){ +filter_deepbgc <- function(deep_data, cluster_type, score_a_input, score_c_input, score_d_input, domains_filter, biodomain_filter, gene_filter) { # Silence R CMD note - alkaloid <- nrps <- other <- - pks <- ripp <- saccharide <- - terpene <- score <- Cluster_type <- - num_domains <- num_bio_domains <- + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Cluster_type <- + num_domains <- num_bio_domains <- num_proteins <- NULL - score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic","inhibitor","antifungal")),1, function(x) max(x)) - score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")),1, function(x) max(x)) - score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(cluster_type)){ + score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic", "inhibitor", "antifungal")), 1, function(x) max(x)) + score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")), 1, function(x) max(x)) + score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) + if (is.null(cluster_type)) { deep_data_chromo <- deep_data %>% dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - score_d >= 50/100, num_domains >= 5, - num_bio_domains>=1, num_proteins>=1) + deep_data_chromo <- deep_data_chromo %>% + dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Cluster_type, "under_threshold")) + # Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo %>% + dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter( + score_a >= 50 / 100, score_c >= 50 / 100, + score_d >= 50 / 100, num_domains >= 5, + num_bio_domains >= 1, num_proteins >= 1 + ) } else { deep_data_chromo <- deep_data %>% dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo%>%dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, which.max) ] + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo%>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(cluster_type)/100, Cluster_type, "under_threshold")) - #Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo%>% - dplyr::mutate( product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter(score_a >= as.numeric(score_a_input )/ 100, score_c >=as.numeric(score_c_input)/100 , - score_d >= as.numeric(score_d_input)/100, num_domains >= domains_filter, - num_bio_domains>=biodomain_filter, num_proteins>=gene_filter) + deep_data_chromo <- deep_data_chromo %>% + dplyr::mutate(Cluster_type = ifelse(score > as.numeric(cluster_type) / 100, Cluster_type, "under_threshold")) + # Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo %>% + dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter( + score_a >= as.numeric(score_a_input) / 100, score_c >= as.numeric(score_c_input) / 100, + score_d >= as.numeric(score_d_input) / 100, num_domains >= domains_filter, + num_bio_domains >= biodomain_filter, num_proteins >= gene_filter + ) } - - biocircos_deep['Start'] <- biocircos_deep$nucl_start - biocircos_deep['Stop'] <- biocircos_deep$nucl_end - biocircos_deep['Type'] <- biocircos_deep$product_class - biocircos_deep['Type2'] <- biocircos_deep$product_class - biocircos_deep['Cluster'] <- biocircos_deep$ID + + biocircos_deep["Start"] <- biocircos_deep$nucl_start + biocircos_deep["Stop"] <- biocircos_deep$nucl_end + biocircos_deep["Type"] <- biocircos_deep$product_class + biocircos_deep["Type2"] <- biocircos_deep$product_class + biocircos_deep["Cluster"] <- biocircos_deep$ID return(biocircos_deep) } -#' filter_gecco +#' filter_gecco #' #' @description Function, that given the gecco dataframe and input values as filter, will return filtered dataframe #' #' @return Filtered gecco dataframe #' #' @noRd -filter_gecco <- function(gecco_data,score_cluster_gecco,score_average_gecco,domains_filter_gecco,prot_filter_gecco){ +filter_gecco <- function(gecco_data, score_cluster_gecco, score_average_gecco, domains_filter_gecco, prot_filter_gecco) { # Silence R CMD note - alkaloid <- nrps <- other <- - pks <- ripp <- saccharide <- - terpene <- score <- Type2 <- - Cluster_type <- score_a <- score_c <- + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Type2 <- + Cluster_type <- score_a <- score_c <- num_domains <- num_prot <- NULL - score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")),1, function(x) max(x)) - score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps","other","pks","ripp","saccharide","terpene")),1, function(x) max(x)) - if (is.null(score_cluster_gecco)){ + score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")), 1, function(x) max(x)) + score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) + if (is.null(score_cluster_gecco)) { gecco_data <- gecco_data %>% dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>50/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= 50/ 100, score_c >=50/100 , - num_domains >= 1, num_prot>=1) - } else{ + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Type2, "under_threshold")) %>% + dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter( + score_a >= 50 / 100, score_c >= 50 / 100, + num_domains >= 1, num_prot >= 1 + ) + } else { gecco_data <- gecco_data %>% dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene),1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score>as.numeric(score_cluster_gecco)/100, Type2, "under_threshold")) %>% - dplyr::mutate( Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter(score_a >= as.numeric(score_average_gecco )/ 100, score_c >=as.numeric(score_cluster_gecco)/100 , - num_domains >= domains_filter_gecco, num_prot>=prot_filter_gecco) + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score > as.numeric(score_cluster_gecco) / 100, Type2, "under_threshold")) %>% + dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter( + score_a >= as.numeric(score_average_gecco) / 100, score_c >= as.numeric(score_cluster_gecco) / 100, + num_domains >= domains_filter_gecco, num_prot >= prot_filter_gecco + ) } return(gecco_data) -} \ No newline at end of file +} diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 9d3fc7e..366ea5a 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -1,126 +1,122 @@ #' sempi_to_csv #' -#' @description Function, which transforms Track.db file into dataframe, which could be then written to csv. +#' @description Function, which transforms Track.db file into dataframe, which could be then written to csv. #' Download project folder from SEMPI and supply as `project_archive` argument to a function -#' +#' #' @param project_archive - path to project.zip file, downloaded from SEMPI #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location #' #' @export -sempi_to_csv <- function(project_archive, write_to = getwd()){ +sempi_to_csv <- function(project_archive, write_to = getwd()) { trackid <- NULL # Silence R CMD note utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) - fl <- paste0(stringr::str_extract(write_to, ".*/"),"/SEMPI_TracksDB/Tracks.db") - conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) - + fl <- paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB/Tracks.db") + conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") RSQLite::dbDisconnect(conn) - unlink(paste0(stringr::str_extract(write_to, ".*/"),"/SEMPI_TracksDB"), recursive = T) + unlink(paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB"), recursive = T) data <- data %>% - dplyr::filter(trackid==6) - - types <- sapply(data$name, function(x){ + dplyr::filter(trackid == 6) + + types <- sapply(data$name, function(x) { tmp <- stringr::str_trim(x) tmp <- gsub(", ", "", tmp) gsub(" ", "__", tmp) -}) - -sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) -colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") -sempi_data$Cluster <- as.numeric(sempi_data$Cluster) -sempi_data$Start <- as.numeric(sempi_data$Start) -sempi_data$Stop <- as.numeric(sempi_data$Stop) -sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) -utils::write.csv(sempi_data, paste0(write_to,"/sempi.csv"), row.names = FALSE) + }) + + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) + colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") + sempi_data$Cluster <- as.numeric(sempi_data$Cluster) + sempi_data$Start <- as.numeric(sempi_data$Start) + sempi_data$Stop <- as.numeric(sempi_data$Stop) + sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) + utils::write.csv(sempi_data, paste0(write_to, "/sempi.csv"), row.names = FALSE) } #' prism_to_csv #' #' @description Function, that transforms prism json object into dataframe, which could be written to the csv file -#' +#' #' @param file - path to a json file, #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location #' #' @export -prism_to_csv <- function(file, write_to = getwd()){ -data <- rjson::fromJSON(file =file) +prism_to_csv <- function(file, write_to = getwd()) { + data <- rjson::fromJSON(file = file) -types <- sapply(data$prism_results$clusters, function(x){ - tolower(x$type) -}) + types <- sapply(data$prism_results$clusters, function(x) { + tolower(x$type) + }) -types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) - gsub(" ", "__", tmp) - }else{ - x - } -}) - -start <- sapply(data$prism_results$clusters, function(x){ - x$start - -}) -end <- sapply(data$prism_results$clusters, function(x){ - x$end - -}) - -prism_data <- data.frame(cbind(start, end, types)) -prism_data <- prism_data %>% - dplyr::transmute(Cluster=as.numeric(rownames(prism_data)), Start=as.numeric(start), Stop = as.numeric(end), Type = types) -utils::write.csv(prism_data, paste0(write_to,"/prism.csv"), row.names = FALSE) + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) + gsub(" ", "__", tmp) + } else { + x + } + }) + start <- sapply(data$prism_results$clusters, function(x) { + x$start + }) + end <- sapply(data$prism_results$clusters, function(x) { + x$end + }) + + prism_data <- data.frame(cbind(start, end, types)) + prism_data <- prism_data %>% + dplyr::transmute(Cluster = as.numeric(rownames(prism_data)), Start = as.numeric(start), Stop = as.numeric(end), Type = types) + utils::write.csv(prism_data, paste0(write_to, "/prism.csv"), row.names = FALSE) } #' antismash_to_csv #' #' @description Function, that returns dataframe, out of supplied antismash json file -#' +#' #' @param file - path to a json file, #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location #' #' @export -antismash_to_csv <- function(file, write_to = getwd()){ +antismash_to_csv <- function(file, write_to = getwd()) { Start <- Stop <- NULL # To silence R CMD notes data <- rjson::fromJSON(file = file) - types <- sapply(data$records, function(y){ - lapply(y$features, function(x){ - if (unlist(x$type == 'region')){ + types <- sapply(data$records, function(y) { + lapply(y$features, function(x) { + if (unlist(x$type == "region")) { tolower(x$qualifiers$product) } }) }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) gsub(" ", "__", tmp) - }else{ + } else { x } }) - - location <- sapply(data$records, function(y){ - unlist(sapply(y$features, function(x){ - if (unlist(x$type == 'region')){ + + location <- sapply(data$records, function(y) { + unlist(sapply(y$features, function(x) { + if (unlist(x$type == "region")) { unlist(x$location) } - }) - ) + })) }) - - + + location <- gsub("\\[", "", location) location <- gsub("\\]", "", location) location <- data.frame(location) @@ -128,76 +124,75 @@ antismash_to_csv <- function(file, write_to = getwd()){ anti_data <- location %>% tidyr::separate(split, c("Start", "Stop")) %>% dplyr::transmute(ID = rownames(location), Start, Stop) - + anti_data <- cbind(anti_data, types) colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") anti_data$Cluster <- as.numeric(anti_data$Cluster) anti_data$Start <- as.numeric(anti_data$Start) anti_data$Stop <- as.numeric(anti_data$Stop) - utils::write.csv(anti_data, paste0(write_to,"/antismash.csv"), row.names = FALSE) + utils::write.csv(anti_data, paste0(write_to, "/antismash.csv"), row.names = FALSE) } -#' arts_to_csv +#' arts_to_csv #' #' @description Function, which extracts tables from arts result zip archive and transforms them into BGCViz input -#' -#' @param project_archive - path to zip file, downloaded from ARTS +#' +#' @param project_archive - path to zip file, downloaded from ARTS #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location #' #' @export -arts_to_csv <- function(project_archive, write_to = getwd()){ +arts_to_csv <- function(project_archive, write_to = getwd()) { Start <- NULL # Silence R CMD note - utils:: unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) - known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/knownhits.tsv")) - dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"),"/ARTS_tables/duptable.tsv")) - locations <- sapply(known_hits$Sequence.description, function(x){ - utils::tail(stringr::str_split(x , "\\|")[[1]], 1) + utils::unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) + known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/knownhits.tsv")) + dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/duptable.tsv")) + locations <- sapply(known_hits$Sequence.description, function(x) { + utils::tail(stringr::str_split(x, "\\|")[[1]], 1) }) - - start <- sapply(locations, function(x){ + + start <- sapply(locations, function(x) { stringr::str_split(x, "_")[[1]][1] }) - stop <- sapply(locations, function(x){ + stop <- sapply(locations, function(x) { stringr::str_split(x, "_")[[1]][2] }) # Parse known_hits data known_table <- data.frame(cbind(start, stop)) colnames(known_table) <- c("Start", "Stop") rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) + known_table$Start <- as.numeric(known_table$Start) known_table$Stop <- as.numeric(known_table$Stop) known_table$Description <- known_hits$Description known_table$Model <- known_hits$X.Model known_table$Evalue <- known_hits$evalue known_table$Bitscore <- known_hits$bitscore known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' + known_table$Cluster <- known_table$ID + known_table$Type <- "resistance" known_table$Type2 <- known_table$Type known_table$Hit <- NA known_table$Core <- "Not_core" known_table$Count <- 1 # Parse duplication data - get_location_duptable <- function(x, y){ + get_location_duptable <- function(x, y) { test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) + test2 <- sub(".*loc\\|", "", test[[1]]) test3 <- stringr::str_split(test2, " ") res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") + for (i in seq(1:length(test3))) { + id <- paste("hit", as.character(i), sep = "_") start <- test3[[i]][1] stop <- test3[[i]][2] - res_1 <- list(id,start, stop) + res_1 <- list(id, start, stop) res <- append(res, list(res_1)) } return(res) - } - + dup_table <- data.frame() - for (i in seq(1:dim(dupl_table)[1])){ + for (i in seq(1:dim(dupl_table)[1])) { lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) fin_data <- data.frame(do.call("rbind", lst)) fin_data$Core_gene <- dupl_table$X.Core_gene[i] @@ -209,19 +204,19 @@ arts_to_csv <- function(project_archive, write_to = getwd()){ dup_table$Hit <- unlist(dup_table$Hit) dup_table$Start <- unlist(dup_table$Start) dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Start <- as.numeric(dup_table$Start) dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$ID <- seq(1:dim(dup_table)[1]) dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' + dup_table$Type <- "core" dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" arts_data <- rbind(dup_table, known_table) arts_data <- arts_data %>% dplyr::arrange(Start) arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID - utils::write.csv(arts_data, paste0(write_to,"/arts.csv"), row.names = FALSE) + utils::write.csv(arts_data, paste0(write_to, "/arts.csv"), row.names = FALSE) } diff --git a/R/fct_group_table.R b/R/fct_group_table.R index f6bbe07..1a4f12a 100644 --- a/R/fct_group_table.R +++ b/R/fct_group_table.R @@ -1,20 +1,22 @@ -#' refine_unique +#' refine_unique #' #' @description A function, that deletes identical values in a string, were numbers are separated with ',' #' #' @return List, were all same numbers are deleted, only one instance is left #' #' @noRd -refine_unique <- function(data){ - n <- utils::tail(data, n=1) +refine_unique <- function(data) { + n <- utils::tail(data, n = 1) data <- utils::head(data, -1) - n_list <- stringr::str_split(n, ",") - out <- sapply(n_list[[1]], function(x){x %in% unlist(stringr::str_split(data, ","))}) - res <- sapply(out, function(x){ - if (x==F){ + n_list <- stringr::str_split(n, ",") + out <- sapply(n_list[[1]], function(x) { + x %in% unlist(stringr::str_split(data, ",")) + }) + res <- sapply(out, function(x) { + if (x == F) { x } }) - + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) } diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 26895e1..830b407 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -1,36 +1,35 @@ -#' rename_vector +#' rename_vector #' #' @description Function, that given the dataframe, and renaming dataframe, returns renamed vector. #' #' @return list of renamed values in a vector + notification #' #' @noRd -rename_vector <- function(data, renamed_dataframe, renaming_notification){ +rename_vector <- function(data, renamed_dataframe, renaming_notification) { type <- stringr::str_split(data$Type2, "__") - type_2 <- sapply(type, function(x){ - sapply(x, function(y){ - if (y %in% renamed_dataframe$Code){ + type_2 <- sapply(type, function(x) { + sapply(x, function(y) { + if (y %in% renamed_dataframe$Code) { renamed <- as.character(renamed_dataframe$Group[renamed_dataframe$Code == y]) - if( (length(renamed) >1) & (!( as.character(y) %in% names(renaming_notification)))){ - shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), - type = "warning", duration = NULL) - shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration=NULL) - renaming_notification[[as.character(y)]] <- renamed[[1]] + if ((length(renamed) > 1) & (!(as.character(y) %in% names(renaming_notification)))) { + shiny::showNotification(paste("The ", as.character(y), " type have multiple renaming options: ", paste(renamed, collapse = ", ")), + type = "warning", duration = NULL + ) + shiny::showNotification(paste("The ", renamed[[1]], " was chosen."), type = "warning", duration = NULL) + renaming_notification[[as.character(y)]] <- renamed[[1]] } renamed[[1]] } else { y } - }) - }) - type_3 <- sapply(type_2, function(x){ - dupl <- x[!duplicated(x)] + type_3 <- sapply(type_2, function(x) { + dupl <- x[!duplicated(x)] paste(dupl, collapse = "__") }) - type_4 <- sapply(type_3, function(y){ - if (y %in% as.character(renamed_dataframe$Code)){ + type_4 <- sapply(type_3, function(y) { + if (y %in% as.character(renamed_dataframe$Code)) { as.character(renamed_dataframe$Group[renamed_dataframe$Code == y])[[1]] } else { y @@ -38,7 +37,7 @@ rename_vector <- function(data, renamed_dataframe, renaming_notification){ }) return(list(as.character(type_4), renaming_notification)) } -#' correct_width +#' correct_width #' #' @description Function, that checks if the width of RRE-Finder, ARTS< SEMPI and PRISM-Supp data should be increases #' to improve visualization @@ -46,62 +45,62 @@ rename_vector <- function(data, renamed_dataframe, renaming_notification){ #' @return data with the corrected width #' #' @noRd -correct_width <- function(data, label, sempi_width,prism_supp_data_input_width,arts_width,rre_width){ - if ((label == 'SEMPI')&(sempi_width == T)){ +correct_width <- function(data, label, sempi_width, prism_supp_data_input_width, arts_width, rre_width) { + if ((label == "SEMPI") & (sempi_width == T)) { data$Stop <- data$Stop + 30000 - } else if ((label == 'PRISM-Supp')&(prism_supp_data_input_width == T)){ + } else if ((label == "PRISM-Supp") & (prism_supp_data_input_width == T)) { data$Stop <- data$Stop + 20000 - } else if ((label == 'ARTS')&(arts_width == T)){ + } else if ((label == "ARTS") & (arts_width == T)) { data$Stop <- data$Stop + 30000 - } else if ((label == 'RRE-Finder')&(rre_width == T)){ + } else if ((label == "RRE-Finder") & (rre_width == T)) { data$Stop <- data$Stop + 50000 } return(data) } -#' hybrid_col +#' hybrid_col #' #' @description Function, that substitute type with "hybrid", if it contains "__" (therefore cluster have multiple types) #' #' @return Vector of substituted types #' #' @noRd -hybrid_col <- function(data){ +hybrid_col <- function(data) { data_split <- stringr::str_split(data$Type2, "__") - types <- sapply(data_split, function(x){ - if (length(unlist(x))>1){ + types <- sapply(data_split, function(x) { + if (length(unlist(x)) > 1) { "hybrid" - } else{ + } else { x } }) return(types) } -#' get_defaults +#' get_defaults #' -#' @description Function, which downloads default options csv file into provided location. +#' @description Function, which downloads default options csv file into provided location. #' Then can be used with `set_defaults` function to change the default behaviour -#' +#' #' @param write_to - location where the write configuration file. default - current working directory #' #' @return csv file in specified location #' #' @export -get_defaults <- function(write_to = getwd()){ +get_defaults <- function(write_to = getwd()) { rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") option_data <- utils::read.csv(rename_file) utils::write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) } -#' set_defaults +#' set_defaults #' -#' @description Function, which uploads default options csv file to the package. +#' @description Function, which uploads default options csv file to the package. #' Use with `get_defaults` function to download currently used default options. -#' +#' #' @param csv_file - path to csv file with default options. #' #' @export -set_defaults <- function(csv_file){ +set_defaults <- function(csv_file) { rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") option_data <- utils::read.csv(csv_file) utils::write.csv(option_data, rename_file, row.names = FALSE) -} \ No newline at end of file +} diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index f3d572c..4c443fb 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -5,20 +5,20 @@ #' @return csv file #' #' @noRd -read_anti <- function(data){ +read_anti <- function(data) { anti_data <- data res_validation <- validate_basic_input(anti_data) - if (!(res_validation[[1]])){ + if (!(res_validation[[1]])) { anti_data <- NULL return(NULL) - } else{ + } else { anti_data <- res_validation[[2]] } # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) - anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) + anti_data["Type2"] <- stringr::str_trim(tolower(anti_data$Type)) return(anti_data) } #' read_anti @@ -28,16 +28,16 @@ read_anti <- function(data){ #' @return csv file #' #' @noRd -read_gecco <- function(data){ +read_gecco <- function(data) { # Silence R CMD note - polyketide_probability <- other_probability <- - nrp_probability <- alkaloid_probability <- - terpene_probability <- saccharide_probability <- + polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- ripp_probability <- NULL # Add chromosome column gecco_data <- data - - gecco_data$chromosome <- rep("G", length(gecco_data$type)) + + gecco_data$chromosome <- rep("G", length(gecco_data$type)) # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) gecco_data$ID <- gecco_data$Cluster @@ -45,22 +45,26 @@ read_gecco <- function(data){ gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) - drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) + gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) + drop_cols <- c( + "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability", "other_probability" + ) # Read data gecco_data <- gecco_data %>% - dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + dplyr::mutate( + pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability + ) %>% dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) + gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" return(gecco_data) } -read_prism <- function(data, json=T){ - if (json==T){ +read_prism <- function(data, json = T) { + if (json == T) { processed_data <- process_prism_json_suppl(data) prism_data <- processed_data[[1]] prism_supp_data <- processed_data[[2]] @@ -69,37 +73,37 @@ read_prism <- function(data, json=T){ prism_supp_data <- NULL } res_validation <- validate_basic_input(prism_data) - if (!(res_validation[[1]])){ + if (!(res_validation[[1]])) { prism_data <- NULL return(NULL) - } else{ + } else { prism_data <- res_validation[[2]] } prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data['Type2'] <- stringr::str_trim(tolower(prism_data$Type)) + prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) return(list(prism_data, prism_supp_data)) } -read_sempi <- function(data, zip=T){ +read_sempi <- function(data, zip = T) { # Silence R CMD note trackid <- NULL - if (zip==T){ - utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + if (zip == T) { + utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) fl <- "./SEMPI_TracksDB/Tracks.db" - conn <- RSQLite::dbConnect(RSQLite::SQLite(),fl) - + conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") RSQLite::dbDisconnect(conn) unlink("./SEMPI_TracksDB", recursive = T) data <- data %>% - dplyr::filter(trackid==6) - - types <- sapply(data$name, function(x){ + dplyr::filter(trackid == 6) + + types <- sapply(data$name, function(x) { tmp <- stringr::str_trim(x) tmp <- gsub(", ", "", tmp) gsub(" ", "__", tmp) }) - - sempi_data <- data.frame(cbind(seq(1:length(data$trackid)),data$start, data$end,as.character(types))) + + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") sempi_data$Cluster <- as.numeric(sempi_data$Cluster) sempi_data$Start <- as.numeric(sempi_data$Start) @@ -109,69 +113,68 @@ read_sempi <- function(data, zip=T){ sempi_data <- data } res_validation <- validate_basic_input(sempi_data) - if (!(res_validation[[1]])){ + if (!(res_validation[[1]])) { sempi_data <- NULL return(NULL) - } else{ + } else { sempi_data <- res_validation[[2]] } - sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) + sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) return(sempi_data) } -read_arts_archive <- function(archive, zip = T){ +read_arts_archive <- function(archive, zip = T) { # Silence R CMD note Start <- Core <- NULL - if (zip == T){ + if (zip == T) { utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") unlink("./ARTS_tables", recursive = T) - locations <- sapply(known_hits$Sequence.description, function(x){ - utils::tail(stringr::str_split(x , "\\|")[[1]], 1) + locations <- sapply(known_hits$Sequence.description, function(x) { + utils::tail(stringr::str_split(x, "\\|")[[1]], 1) }) - - start <- sapply(locations, function(x){ + + start <- sapply(locations, function(x) { stringr::str_split(x, "_")[[1]][1] }) - stop <- sapply(locations, function(x){ + stop <- sapply(locations, function(x) { stringr::str_split(x, "_")[[1]][2] }) # Parse known_hits data known_table <- data.frame(cbind(start, stop)) colnames(known_table) <- c("Start", "Stop") rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start ) + known_table$Start <- as.numeric(known_table$Start) known_table$Stop <- as.numeric(known_table$Stop) known_table$Description <- known_hits$Description known_table$Model <- known_hits$X.Model known_table$Evalue <- known_hits$evalue known_table$Bitscore <- known_hits$bitscore known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <-known_table$ID - known_table$Type <- 'resistance' + known_table$Cluster <- known_table$ID + known_table$Type <- "resistance" known_table$Type2 <- known_table$Type known_table$Hit <- NA known_table$Core <- "Not_core" known_table$Count <- 1 # Parse duplication data - get_location_duptable <- function(x, y){ + get_location_duptable <- function(x, y) { test <- stringr::str_split(x, ";") - test2<- sub(".*loc\\|", "", test[[1]]) + test2 <- sub(".*loc\\|", "", test[[1]]) test3 <- stringr::str_split(test2, " ") res <- list() - for (i in seq(1:length(test3))){ - id <- paste('hit',as.character(i), sep = "_") + for (i in seq(1:length(test3))) { + id <- paste("hit", as.character(i), sep = "_") start <- test3[[i]][1] stop <- test3[[i]][2] - res_1 <- list(id,start, stop) + res_1 <- list(id, start, stop) res <- append(res, list(res_1)) } return(res) - } - + dup_table <- data.frame() - for (i in seq(1:dim(dupl_table)[1])){ + for (i in seq(1:dim(dupl_table)[1])) { lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) fin_data <- data.frame(do.call("rbind", lst)) fin_data$Core_gene <- dupl_table$X.Core_gene[i] @@ -183,15 +186,15 @@ read_arts_archive <- function(archive, zip = T){ dup_table$Hit <- unlist(dup_table$Hit) dup_table$Start <- unlist(dup_table$Start) dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start ) + dup_table$Start <- as.numeric(dup_table$Start) dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1: dim(dup_table)[1]) + dup_table$ID <- seq(1:dim(dup_table)[1]) dup_table$Cluster <- dup_table$ID - dup_table$Type <- 'core' + dup_table$Type <- "core" dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" arts_data <- rbind(dup_table, known_table) arts_data <- arts_data %>% dplyr::arrange(Start) @@ -202,48 +205,47 @@ read_arts_archive <- function(archive, zip = T){ } return(arts_data) } -read_deep <- function(data){ - polyketide <- nrp <- NULL # Silence R CMD error +read_deep <- function(data) { + polyketide <- nrp <- NULL # Silence R CMD error # Fix colnames in deepbgc data colnames(data) <- stringr::str_to_lower(colnames(data)) res_validation <- validate_deep_input(data) - if (!(res_validation[[1]])){ + if (!(res_validation[[1]])) { deep_data <- NULL return(NULL) - } else{ + } else { deep_data <- res_validation[[2]] } - drop_cols <- c("nrp","polyketide") + drop_cols <- c("nrp", "polyketide") # Read data deep_data <- deep_data %>% - dplyr::mutate(pks=polyketide, nrps = nrp ) %>% + dplyr::mutate(pks = polyketide, nrps = nrp) %>% dplyr::select(-dplyr::one_of(drop_cols)) - return(deep_data) + return(deep_data) } -read_rre <- function(data){ +read_rre <- function(data) { Gene.name <- Coordinates <- NULL # Silence R CMD error res_validation <- validate_rre_input(data) - if (!(res_validation[[1]])){ + if (!(res_validation[[1]])) { data <- NULL return(NULL) - } else{ + } else { data <- res_validation[[2]] } # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- data %>% - tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") + tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") # Add chromosome info column - rre_data$chromosome <- rep("RRE",length(rre_data$Sequence)) + rre_data$chromosome <- rep("RRE", length(rre_data$Sequence)) # Add ID column rre_data$ID <- seq(1:length(rre_data$Sequence)) rre_data$Cluster <- rre_data$ID rre_data <- data.frame(rre_data) - rre_data['Type'] <- 'ripp' - rre_data['Type2'] <- 'ripp' - rre_data$Start <- as.numeric(rre_data$Start) + rre_data["Type"] <- "ripp" + rre_data["Type2"] <- "ripp" + rre_data$Start <- as.numeric(rre_data$Start) rre_data$Stop <- as.numeric(rre_data$Stop) # Store rre data into local variable rre_data <- data.frame(rre_data) - -} \ No newline at end of file +} diff --git a/R/fct_reading_processing.R b/R/fct_reading_processing.R index 83dea6e..dd178e4 100644 --- a/R/fct_reading_processing.R +++ b/R/fct_reading_processing.R @@ -1,151 +1,149 @@ -#' fix_duplicates +#' fix_duplicates #' -#' @description Function, that fix duplicates in Prism_supp data. (Is certain orf have 2 hits to a model in a data, then +#' @description Function, that fix duplicates in Prism_supp data. (Is certain orf have 2 hits to a model in a data, then #' they will be combined under one orf, but not the 2 separate records) #' #' @return Vector without duplicates #' #' @noRd -fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name){ +fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) test_score <- test_score[order_vec] to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] iterate_one_more_time <- c() - should_iterate = F - for (i in seq(1:length(test_name))){ - if (length(dupl_names) == 0){ - should_iterate = F + should_iterate <- F + for (i in seq(1:length(test_name))) { + if (length(dupl_names) == 0) { + should_iterate <- F break } - if (test_name[i]==dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] + if (test_name[i] == dupl_names[1]) { + dupl_names <- dupl_names[-1] + test_score[i] <- paste0(test_score[i], "/", to_add[1]) + to_add <- to_add[-1] iterate_one_more_time <- c(iterate_one_more_time, i) } } - if ((length(iterate_one_more_time)>1) && (length(dupl_names) != 0)){ - should_iterate = T + if ((length(iterate_one_more_time) > 1) && (length(dupl_names) != 0)) { + should_iterate <- T } while (should_iterate == T) { - for (i in iterate_one_more_time){ - if (test_name[i] == dupl_names[1]){ - dupl_names = dupl_names[-1] - test_score[i] = paste0(test_score[i], "/" ,to_add[1]) - to_add = to_add[-1] - } - if (length(dupl_names)==0){ - should_iterate = F + for (i in iterate_one_more_time) { + if (test_name[i] == dupl_names[1]) { + dupl_names <- dupl_names[-1] + test_score[i] <- paste0(test_score[i], "/", to_add[1]) + to_add <- to_add[-1] + } + if (length(dupl_names) == 0) { + should_iterate <- F break } } } return(test_score) } -#' process_prism_json_suppl +#' process_prism_json_suppl #' #' @description Function, that processes the json prism file. #' #' @return list of prism data and prism_supplement data #' #' @noRd -process_prism_json_suppl <- function(data){ +process_prism_json_suppl <- function(data) { Start <- NULL # Silence R CMD note - types <- sapply(data$prism_results$clusters, function(x){ + types <- sapply(data$prism_results$clusters, function(x) { tolower(x$type) }) - - types <- sapply(types, function(x){ - if (length(unlist(x))>1){ - tmp <- stringr::str_trim(paste0(unlist(x), collapse = '', sep = " ")) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) gsub(" ", "__", tmp) - }else{ + } else { x } }) - - start <- sapply(data$prism_results$clusters, function(x){ + + start <- sapply(data$prism_results$clusters, function(x) { x$start - }) - end <- sapply(data$prism_results$clusters, function(x){ + end <- sapply(data$prism_results$clusters, function(x) { x$end - }) - - - prism_data <- data.frame(Cluster=as.numeric(seq(1:length(start))), Start=as.numeric(start), Stop = as.numeric(end), Type = types) - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x){ + + + prism_data <- data.frame(Cluster = as.numeric(seq(1:length(start))), Start = as.numeric(start), Stop = as.numeric(end), Type = types) + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x) { x$orf }) - - names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + + names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { y$name }) - coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y){ + coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { y$coordinates }) - - test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs ]) - - - reg_genes <-data.frame(t(test_coords)) + + test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs]) + + + reg_genes <- data.frame(t(test_coords)) colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- 'regulatory' + reg_genes$Type <- "regulatory" reg_genes$Type2 <- reg_genes$Type - + test_name <- names[names %in% regul_genes_orfs] ref_names <- test_name order_vec <- order(match(regul_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$regulatory_genes, function(x){ + + + test_score <- sapply(data$prism_results$regulatory_genes, function(x) { x$score }) - reg_genes$Score <- fix_duplicates(test_score , order_vec, regul_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$regulatory_genes, function(x){ + reg_genes$Score <- fix_duplicates(test_score, order_vec, regul_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$regulatory_genes, function(x) { x$name }) - reg_genes$Name <- fix_duplicates(test_name , order_vec, regul_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$regulatory_genes, function(x){ + reg_genes$Name <- fix_duplicates(test_name, order_vec, regul_genes_orfs, ref_names) + test_full_name <- sapply(data$prism_results$regulatory_genes, function(x) { x$full_name }) - reg_genes$Full_name <- fix_duplicates(test_full_name , order_vec, regul_genes_orfs, ref_names) - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x){ + reg_genes$Full_name <- fix_duplicates(test_full_name, order_vec, regul_genes_orfs, ref_names) + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x) { x$orf }) - - test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs ]) - - - res_genes <-data.frame(t(test_coords_res)) - + + test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs]) + + + res_genes <- data.frame(t(test_coords_res)) + colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- 'resistance' + res_genes$Type <- "resistance" res_genes$Type2 <- res_genes$Type test_name <- names[names %in% resist_genes_orfs] order_vec <- order(match(resist_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$resistance_genes, function(x){ + + + test_score <- sapply(data$prism_results$resistance_genes, function(x) { x$score }) - res_genes$Score <- fix_duplicates(test_score , order_vec, resist_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$resistance_genes, function(x){ + res_genes$Score <- fix_duplicates(test_score, order_vec, resist_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$resistance_genes, function(x) { x$name }) - res_genes$Name <- fix_duplicates(test_name , order_vec, resist_genes_orfs, ref_names) - test_full_name<- sapply(data$prism_results$resistance_genes, function(x){ + res_genes$Name <- fix_duplicates(test_name, order_vec, resist_genes_orfs, ref_names) + test_full_name <- sapply(data$prism_results$resistance_genes, function(x) { x$full_name }) - res_genes$Full_name <- fix_duplicates(test_full_name , order_vec, resist_genes_orfs, ref_names) - + res_genes$Full_name <- fix_duplicates(test_full_name, order_vec, resist_genes_orfs, ref_names) + final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) final_reg$ID <- seq(1:dim(final_reg)[1]) final_reg$Cluster <- final_reg$ID rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) return(list(prism_data, final_reg)) -} \ No newline at end of file +} diff --git a/R/fct_validation.R b/R/fct_validation.R index 0701906..f4c2f08 100644 --- a/R/fct_validation.R +++ b/R/fct_validation.R @@ -1,110 +1,110 @@ -#' check_if_column_exists +#' check_if_column_exists #' #' @description Function, that is used in other validation function, in order to check if the column exists in a dataframe. #' #' @return True, column exists, False and Notification message, if not. #' #' @noRd -check_if_column_exists <- function(data_names,column_name){ - if (column_name %in% stringr::str_to_lower(data_names)){ +check_if_column_exists <- function(data_names, column_name) { + if (column_name %in% stringr::str_to_lower(data_names)) { return(TRUE) } else { - shiny::showNotification( paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"),type = "warning") + shiny::showNotification(paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"), type = "warning") return(FALSE) } } -#' validate_basic_input +#' validate_basic_input #' -#' @description Function, that checks if all the columns in Antismash, PRISM or SEMPI inputs are presents and if the +#' @description Function, that checks if all the columns in Antismash, PRISM or SEMPI inputs are presents and if the #' Start and Stop columns contain numeric values. Also check for any missing values in a given columns #' #' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails #' #' @noRd -validate_basic_input <- function(data){ +validate_basic_input <- function(data) { data_names <- names(data) - if (!(check_if_column_exists(data_names, 'cluster'))){ - shiny::showNotification( paste0("Cluster columns was created on the fly."),type = "message") + if (!(check_if_column_exists(data_names, "cluster"))) { + shiny::showNotification(paste0("Cluster columns was created on the fly."), type = "message") data$Cluster <- seq(1:dim(data)[1]) } - if (!(check_if_column_exists(data_names, 'start'))){ + if (!(check_if_column_exists(data_names, "start"))) { return(FALSE) } - if (!(check_if_column_exists(data_names, 'stop'))){ + if (!(check_if_column_exists(data_names, "stop"))) { return(FALSE) } - if (!(check_if_column_exists(data_names, 'type'))){ + if (!(check_if_column_exists(data_names, "type"))) { return(FALSE) } - if (length(unique(data$Cluster)) != length(data$Cluster)){ - shiny::showNotification( paste0("Cluster columns contains non unique values. It was regenerated"),type = "message") + if (length(unique(data$Cluster)) != length(data$Cluster)) { + shiny::showNotification(paste0("Cluster columns contains non unique values. It was regenerated"), type = "message") data$Cluster <- seq(1:dim(data)[1]) } - if (( T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))){ - shiny::showNotification( paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"),type = "error") + if ((T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))) { + shiny::showNotification(paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"), type = "error") return(FALSE) } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)){ - shiny::showNotification( paste0("Type column contain empty data. It was populated with 'unknown' "),type = "warning") - data$Type[is.na(data$Type)] <- 'unknown' - data$Type["" %in% data$Type] <- 'unknown' + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)) { + shiny::showNotification(paste0("Type column contain empty data. It was populated with 'unknown' "), type = "warning") + data$Type[is.na(data$Type)] <- "unknown" + data$Type["" %in% data$Type] <- "unknown" } - if (!(is.numeric(data$Cluster))){ + if (!(is.numeric(data$Cluster))) { data$Cluster <- as.numeric(data$Cluster) } - if (!(is.numeric(data$Start))){ + if (!(is.numeric(data$Start))) { data$Start <- as.numeric(data$Start) } - if (!(is.numeric(data$Stop))){ + if (!(is.numeric(data$Stop))) { data$Stop <- as.numeric(data$Stop) } - if (!(is.character(data$Type))){ + if (!(is.character(data$Type))) { data$Type <- as.character(data$Type) } return(list(TRUE, data)) } -#' validate_rre_input +#' validate_rre_input #' #' @description Function, that checks if all the columns in RRE-Finder input exists #' #' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails #' #' @noRd -validate_rre_input <- function(data){ +validate_rre_input <- function(data) { data_names <- names(data) - if (!(check_if_column_exists(data_names, 'gene.name'))){ + if (!(check_if_column_exists(data_names, "gene.name"))) { return(FALSE) } - if (F %in% grepl("__", data$Gene.name)){ + if (F %in% grepl("__", data$Gene.name)) { return(FALSE) } - if (!(check_if_column_exists(data_names, 'e.value'))){ + if (!(check_if_column_exists(data_names, "e.value"))) { return(FALSE) } else { data$E.value <- as.numeric(data$E.value) } - if (!is.null(data$Probability)){ - if (!(check_if_column_exists(data_names, 'score'))){ + if (!is.null(data$Probability)) { + if (!(check_if_column_exists(data_names, "score"))) { return(FALSE) - } else{ + } else { data$Score <- as.numeric(data$Score) } - if (!(check_if_column_exists(data_names, 'p.value'))){ + if (!(check_if_column_exists(data_names, "p.value"))) { return(FALSE) } else { data$P.value <- as.numeric(data$P.value) } - if (!(check_if_column_exists(data_names, 'rre.start'))){ + if (!(check_if_column_exists(data_names, "rre.start"))) { return(FALSE) } else { data$RRE.start <- as.numeric(data$RRE.start) } - if (!(check_if_column_exists(data_names, 'rre.end'))){ + if (!(check_if_column_exists(data_names, "rre.end"))) { return(FALSE) } else { data$RRE.end <- as.numeric(data$RRE.end) } - if (!(check_if_column_exists(data_names, 'probability'))){ + if (!(check_if_column_exists(data_names, "probability"))) { return(FALSE) } else { data$Probability <- as.numeric(data$Probability) @@ -112,73 +112,81 @@ validate_rre_input <- function(data){ } return(list(TRUE, data)) } -#' validate_deep_input +#' validate_deep_input #' -#' @description Function, that checks if all the columns in DeepBGC input exists, checks if there are any missing values +#' @description Function, that checks if all the columns in DeepBGC input exists, checks if there are any missing values #' and converts columns, that should be numeric to numeric type. #' #' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails #' #' @noRd -validate_deep_input <- function(data){ +validate_deep_input <- function(data) { data_names <- names(data) - col_names <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene", - "bgc_candidate_id", "sequence_id") - num_columns <- c("nucl_start", "nucl_end","num_proteins", "num_domains", "num_bio_domains","deepbgc_score","antibacterial", - "cytotoxic","inhibitor","antifungal","alkaloid","nrp","other","polyketide","ripp","saccharide","terpene") - if (!('cluster' %in% stringr::str_to_lower(data_names))){ + col_names <- c( + "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", + "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene", + "bgc_candidate_id", "sequence_id" + ) + num_columns <- c( + "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", + "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene" + ) + if (!("cluster" %in% stringr::str_to_lower(data_names))) { data$Cluster <- seq(1:dim(data)[1]) } - for (column_name in col_names){ - if (!(check_if_column_exists(data_names, column_name))){ + for (column_name in col_names) { + if (!(check_if_column_exists(data_names, column_name))) { return(FALSE) } - if ( T %in% is.na(data[[column_name]])){ + if (T %in% is.na(data[[column_name]])) { return(FALSE) } - if ( "" %in% data[[column_name]]){ + if ("" %in% data[[column_name]]) { return(FALSE) } - if (column_name %in% num_columns){ + if (column_name %in% num_columns) { names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name data[[column_name]] <- as.numeric(data[[column_name]]) } } return(list(TRUE, data)) } -#' validate_gecco_input +#' validate_gecco_input #' -#' @description Function, that checks if all the columns in GECCO input exists, checks if there are any missing values +#' @description Function, that checks if all the columns in GECCO input exists, checks if there are any missing values #' and converts columns, that should be numeric to numeric type. #' #' @return list of (TRUE, data), if all checks are passed, False, if any of the checks fails #' #' @noRd -validate_gecco_input <- function(data){ +validate_gecco_input <- function(data) { data_names <- names(data) - col_names <- c("start", "end","average_p", "max_p", "type","alkaloid_probability","polyketide_probability", - "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability", - "proteins","domains") - num_columns <- c("start", "end","average_p", "max_p", "alkaloid_probability","polyketide_probability", - "ripp_probability","saccharide_probability","terpene_probability","nrp_probability","other_probability") - if (!('cluster' %in% stringr::str_to_lower(data_names))){ + col_names <- c( + "start", "end", "average_p", "max_p", "type", "alkaloid_probability", "polyketide_probability", + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability", + "proteins", "domains" + ) + num_columns <- c( + "start", "end", "average_p", "max_p", "alkaloid_probability", "polyketide_probability", + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability" + ) + if (!("cluster" %in% stringr::str_to_lower(data_names))) { data$Cluster <- seq(1:dim(data)[1]) } - for (column_name in col_names){ - if (!(check_if_column_exists(data_names, column_name))){ + for (column_name in col_names) { + if (!(check_if_column_exists(data_names, column_name))) { return(FALSE) } - if ( T %in% is.na(data[[column_name]])){ + if (T %in% is.na(data[[column_name]])) { return(FALSE) } - if ( "" %in% data[[column_name]]){ + if ("" %in% data[[column_name]]) { return(FALSE) } - if (column_name %in% num_columns){ + if (column_name %in% num_columns) { names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name data[[column_name]] <- as.numeric(data[[column_name]]) } } return(list(TRUE, data)) -} \ No newline at end of file +} diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R index 7789afa..2260062 100644 --- a/R/mod_barplot_rank.R +++ b/R/mod_barplot_rank.R @@ -4,44 +4,46 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_barplot_rank_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_barplot_rank_ui <- function(id) { ns <- NS(id) tagList( div( - id="id1", + id = "id1", shinyjqui::jqui_resizable( shinydashboardPlus::box( title = "Ranking barplot", id = "ranking_barplot_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, height = "100%", - plotly::plotlyOutput(ns("barplot_rank"), height = "600px")%>% + plotly::plotlyOutput(ns("barplot_rank"), height = "600px") %>% shinycssloaders::withSpinner() - ),options = list(handles="w,e")) + ), + options = list(handles = "w,e") + ) ) ) } - + #' barplot_rank Server Functions #' -#' @noRd -mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr) { + moduleServer(id, function(input, output, session) { ns <- session$ns # Silence R CMD note - Cluster <- Count <- Type <- - Start <- Start <- Stop <- + Cluster <- Count <- Type <- + Start <- Start <- Stop <- Label <- NULL output$barplot_rank <- plotly::renderPlotly({ - shiny::req(vals$data_upload_count >1) + shiny::req(vals$data_upload_count > 1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_barplot_rank == T) - - antismash_count <- NULL + + antismash_count <- NULL prism_count <- NULL deep_count <- NULL rre_count <- NULL @@ -49,57 +51,59 @@ mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_nam prism_supp_count <- NULL arts_count <- NULL gecco_count <- NULL - - if (is.null(vals$inters_filtered)){ + + if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { inters <- vals$inters_filtered - } + } index <- 1 ranking_data <- NULL - for (upload in data_uploads){ - if (vals[[upload]] == T){ - counts_var <-plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x){x$to})))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)),] - # Add prefices to the ID to plot for a barplot. - counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index],": ", x)) - # Add label column to the dataframe, from which we will plot + for (upload in data_uploads) { + if (vals[[upload]] == T) { + counts_var <- plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x) { + x$to + })))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)), ] + # Add prefices to the ID to plot for a barplot. + counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index], ": ", x)) + # Add label column to the dataframe, from which we will plot counts_var$label <- rep(soft_namings[index], length(counts_var$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) + # Add type to the dataframe, from which we would plot (from annotation dataframe) counts_var$Type <- anot_var$Type # Add Start positions (to visualize on hover) counts_var$Start <- anot_var$Start # Add Stop positions (to visualize on hover) counts_var$Stop <- anot_var$Stop - if (is.null(ranking_data)){ + if (is.null(ranking_data)) { ranking_data <- counts_var - } else{ + } else { ranking_data <- rbind(ranking_data, counts_var) } } - index <- index +1 + index <- index + 1 } - - + + # Fix column names in the master dataframe colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") # Plot plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + - ggplot2::theme(axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = ggplot2::element_text(size = 14)) + - ggplot2::ggtitle("Number of times cluster is annotated with other tool"), - tooltip=c("Type", "Start", "Stop") + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme( + axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14) + ) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), + tooltip = c("Type", "Start", "Stop") ) - - }) }) } ## To be copied in the UI # mod_barplot_rank_ui("barplot_rank_ui_1") - + ## To be copied in the server # mod_barplot_rank_server("barplot_rank_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/R/mod_biocircos.R b/R/mod_biocircos.R index 9392aa6..9982d2a 100644 --- a/R/mod_biocircos.R +++ b/R/mod_biocircos.R @@ -4,10 +4,10 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_biocircos_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_biocircos_ui <- function(id) { ns <- NS(id) tagList( shiny::fluidRow( @@ -18,7 +18,7 @@ mod_biocircos_ui <- function(id){ shinydashboardPlus::box( title = "Biocircos plot", id = "biocircos_plot_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = 12, shiny::checkboxInput(ns("ShowBiocircosColoring"), "Show Biocircos coloring scheme"), @@ -27,14 +27,17 @@ mod_biocircos_ui <- function(id){ width = 25, shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", choices = c("Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" + shiny::selectInput("label_color_class", "Choose the mode to color the links", + choices = c( + "Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = "H" ), - selected = 'H'), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = '') + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = "") ), - BioCircos::BioCircosOutput(ns("biocircos"), height = "900px")%>% + BioCircos::BioCircosOutput(ns("biocircos"), height = "900px") %>% shinycssloaders::withSpinner() ) ) @@ -51,60 +54,58 @@ mod_biocircos_ui <- function(id){ ) ) } - + #' biocircos Server Functions #' -#' @noRd -mod_biocircos_server <- function(id, vals){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_biocircos_server <- function(id, vals) { + moduleServer(id, function(input, output, session) { ns <- session$ns - + output$biocircos <- BioCircos::renderBioCircos({ - shiny::req(vals$data_upload_count >1) - + shiny::req(vals$data_upload_count > 1) + # Plot BioCircos BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) }) - - + + output$biocircos_legend <- DT::renderDataTable({ - shiny::req(vals$data_upload_count >=1) - rownames = FALSE + shiny::req(vals$data_upload_count >= 1) + rownames <- FALSE new_data <- vals$coloring_datatable color_vec <- new_data$x$data$Color options(DT.options = list(pageLength = 50)) - new_data %>% DT::formatStyle('Color', backgroundColor=DT::styleEqual(color_vec, color_vec)) - - + new_data %>% DT::formatStyle("Color", backgroundColor = DT::styleEqual(color_vec, color_vec)) }) - + output$biocircos_coloring <- shiny::renderUI({ - if (input$ShowBiocircosColoring == T){ + if (input$ShowBiocircosColoring == T) { shinydashboardPlus::box( title = "Biocircos coloring scheme", closable = TRUE, - collapsible = TRUE, + collapsible = TRUE, DT::dataTableOutput(ns("biocircos_legend")) %>% shinycssloaders::withSpinner() ) } }) - + # Updating values in Datatable on edit shiny::observeEvent(input$biocircos_legend_cell_edit, { - if (input$biocircos_legend_cell_edit$col[1] == 0){ + if (input$biocircos_legend_cell_edit$col[1] == 0) { vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 1){ + } else if (input$biocircos_legend_cell_edit$col[1] == 1) { vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 2){ + } else if (input$biocircos_legend_cell_edit$col[1] == 2) { vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value } }) }) } - + ## To be copied in the UI # mod_biocircos_ui("biocircos_ui_1") - + ## To be copied in the server # mod_biocircos_server("biocircos_ui_1", vals = vals) diff --git a/R/mod_deep_reference.R b/R/mod_deep_reference.R index 9784bd3..15aa6b0 100644 --- a/R/mod_deep_reference.R +++ b/R/mod_deep_reference.R @@ -4,36 +4,40 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_deep_reference_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_deep_reference_ui <- function(id) { ns <- NS(id) shiny::tagList( - div( - id="id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotation comparison to the reference", - id = "annotation_reference_comparison_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - height = "100%", - shiny::selectInput("ref", "Choose reference data", choices = c(""), - selected = ""), - plotly::plotlyOutput(ns("deep_reference")) %>% - shinycssloaders::withSpinner() - ), options = list(handles="w,e")) - ) + div( + id = "id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotation comparison to the reference", + id = "annotation_reference_comparison_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + height = "100%", + shiny::selectInput("ref", "Choose reference data", + choices = c(""), + selected = "" + ), + plotly::plotlyOutput(ns("deep_reference")) %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) + ) ) } - + #' deep_reference Server Functions #' -#' @noRd -mod_deep_reference_server <- function(id, vals){ - shiny:: moduleServer( id, function(input, output, session){ +#' @noRd +mod_deep_reference_server <- function(id, vals) { + shiny::moduleServer(id, function(input, output, session) { ns <- session$ns output$deep_reference <- plotly::renderPlotly({ @@ -41,12 +45,11 @@ mod_deep_reference_server <- function(id, vals){ vals$can_plot_deep_ref_2 <- T vals$deep_reference_to_plot }) - - }) + }) } - + ## To be copied in the UI # mod_deep_reference_ui("deep_reference_ui_1") - + ## To be copied in the server # mod_deep_reference_server("deep_reference_ui_1", vals=vals) diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index ddd26ea..b436acd 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -4,149 +4,170 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_deep_reference_2_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_deep_reference_2_ui <- function(id) { ns <- NS(id) tagList( div( - id="anno_div_1", + id = "anno_div_1", shinyjqui::jqui_resizable( shinydashboardPlus::box( title = "Annotations reference", id = "annotation_reference_box", height = "100%", width = NULL, - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, - plotly::plotlyOutput(ns("deep_reference_2")) %>% + plotly::plotlyOutput(ns("deep_reference_2")) %>% shinycssloaders::withSpinner() - ), options = list(handles="w,e")) + ), + options = list(handles = "w,e") + ) ) ) } - + #' deep_reference_2 Server Functions #' -#' @noRd -mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { + moduleServer(id, function(input, output, session) { ns <- session$ns # Silence R CMD note - x <- y <- yend <- xend <- - ID <- Software <- Chr <- - Type2 <- Start <- Stop <- - Type <- num_domains <- deepbgc_score <- - activity <- Score <- E_value <- P_value <- - RRE_start <- RRE_stop <- Probability <- - Name <- Full_name <- Hit <- Core <- - Bitscore <- Count <- Model <- Num_proteins <- + x <- y <- yend <- xend <- + ID <- Software <- Chr <- + Type2 <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- + activity <- Score <- E_value <- P_value <- + RRE_start <- RRE_stop <- Probability <- + Name <- Full_name <- Hit <- Core <- + Bitscore <- Count <- Model <- Num_proteins <- Num_domains <- Average_p <- Max_p <- NULL - output$deep_reference_2 <- plotly::renderPlotly({ + output$deep_reference_2 <- plotly::renderPlotly({ shiny::req(vals$can_plot_deep_ref_2 == T) vals$can_plot_deep_ref_2 == F rename_y_axis <- shiny::isolate(vals$rename_y_axis) data <- NULL - + index <- 1 - for (upload in data_uploads){ - if (is.null(data)){ - if (vals[[upload]] == T){ - if (dim(vals[[data_to_use[index]]])[1] != 0){ + for (upload in data_uploads) { + if (is.null(data)) { + if (vals[[upload]] == T) { + if (dim(vals[[data_to_use[index]]])[1] != 0) { data <- vals[[data_to_use[index]]] } } } - index <- index+1 + index <- index + 1 } - - - tooltip = c("Software", "ID", "Start", "Stop", "Type","num_domains", "deepbgc_score", "activity","Score","E_value", - "P_value", "RRE_start","RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p") - + + + tooltip <- c( + "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", + "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p" + ) + plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE){ - plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_a, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + if (vals$anti_data_input == TRUE) { + plot <- plot + + ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } - if (vals$deep_data_input == TRUE){ - if (dim(vals$seg_df_ref_d)[1] >0) { + if (vals$deep_data_input == TRUE) { + if (dim(vals$seg_df_ref_d)[1] > 0) { plot <- plot + - ggplot2::geom_segment(data=vals$seg_df_ref_d,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) + ggplot2::geom_segment(data = vals$seg_df_ref_d, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score, activity = activity + ), size = 3) } } - if (vals$rre_data_input == TRUE){ - if (vals$rre_more == T){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) + if (vals$rre_data_input == TRUE) { + if (vals$rre_more == T) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, + Probability = Probability + ), size = 3) } else { - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_r, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value),size = 3) + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ), size = 3) } } - if (vals$prism_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - + if (vals$prism_data_input == TRUE) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_p, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } - if (vals$sempi_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) - - + if (vals$sempi_data_input == TRUE) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_s, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } - if (vals$prism_supp_plot == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) - } - if (vals$arts_data_input == TRUE){ - plot <- plot + ggplot2::geom_segment(data=vals$seg_df_ref_ar, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model), size = 3) + if (vals$prism_supp_plot == TRUE) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_p_s, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score + ), size = 3) } - if (vals$gecco_data_input == TRUE){ - if (dim(vals$seg_df_ref_g)[1] >0) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + if (vals$arts_data_input == TRUE) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_ar, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model + ), size = 3) + } + if (vals$gecco_data_input == TRUE) { + if (dim(vals$seg_df_ref_g)[1] > 0) { + plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, + Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p + ), size = 3) } } to_plot <- plotly::ggplotly(plot + - ggplot2::scale_y_discrete(labels = rename_y_axis) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("")+ - ggplot2::xlab("Chromosome length")+ - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("") + + ggplot2::xlab("Chromosome length") + + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot %>% plotly::layout( + legend = list( + font = list( + family = "sans-serif", + size = 12, + color = "#000" + ), + bordercolor = "#FFFFFF", + borderwidth = 2, + title = list(text = " Cluster Types ") + ), + autosize = TRUE ) - to_plot %>% plotly::layout(legend=list(font = list( - family = "sans-serif", - size = 12, - color = "#000"), - bordercolor = "#FFFFFF", - borderwidth = 2, - title=list(text=' Cluster Types ')), - autosize=TRUE) - }) #%>% shiny::debounce(200) - - + }) # %>% shiny::debounce(200) }) } - + ## To be copied in the UI # mod_deep_reference_2_ui("deep_reference_2_ui_1") - + ## To be copied in the server # mod_deep_reference_2_server("deep_reference_2_ui_1", vals=vals, data_uploads = data_uploads, data_to_use = data_to_use) diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 0bcc4c0..53b0422 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -4,78 +4,90 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_deepbgc_plots_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_deepbgc_plots_ui <- function(id) { ns <- NS(id) tagList( shiny::fluidRow( tags$div( id = "deep_data1", - div(id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison", - id = "deep_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput(ns("deep_barplot"), height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))), - div(id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison controls", - id = "deep_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput(ns("ref_comparison"), "Choose data for comparison with DeepBGC", choices = c(""), selected = ''), - # Score to use for thresholds - shiny::selectInput(ns("score_type"), "Choose score type to set threshold", choices = c("Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC"), - selected = "Activity score"), - # Chose step for barplot (as a threshold to draw a bar) - shiny::sliderInput(ns("plot_step"), "Choose step for plots(barplot)", min = 1, max = 50,value = 10), - shiny::sliderInput(ns("plot_start"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ),options = list(handles="w,e"))) + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison", + id = "deep_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput(ns("deep_barplot"), height = "500px", ) %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison controls", + id = "deep_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput(ns("ref_comparison"), "Choose data for comparison with DeepBGC", choices = c(""), selected = ""), + # Score to use for thresholds + shiny::selectInput(ns("score_type"), "Choose score type to set threshold", + choices = c( + "Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC" + ), + selected = "Activity score" + ), + # Chose step for barplot (as a threshold to draw a bar) + shiny::sliderInput(ns("plot_step"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), + shiny::sliderInput(ns("plot_start"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ), options = list(handles = "w,e")) + ) ) ), shiny::fluidRow( - tags$div( id = "deep_data2", - div(id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC rate", - id = "deep_rate_box", - collapsible = TRUE, - height = "100%", - plotly::plotlyOutput(ns("deep_rate"), height = "500px",) %>% - shinycssloaders::withSpinner() - ),options = list(handles="w,e"))) - )) + tags$div( + id = "deep_data2", + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC rate", + id = "deep_rate_box", + collapsible = TRUE, + height = "100%", + plotly::plotlyOutput(ns("deep_rate"), height = "500px", ) %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ) + ) + ) ) } - + #' deep_barplot Server Functions #' -#' @noRd -mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { + moduleServer(id, function(input, output, session) { ns <- session$ns # Silence R CMD note - Start <- Stop <- Source <- - Quantity <- Score <- Novelty_rate <- - Annotation_rate <- Skip_rate <- Rates_data <- + Start <- Stop <- Source <- + Quantity <- Score <- Novelty_rate <- + Annotation_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - - + shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + + # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - + deep_inter_1 <- vals$deep_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type == "Activity") { @@ -87,143 +99,152 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c){ } deep_inter_1$score <- deep_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)){ - + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)) { deep_inter <- deep_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) + dplyr::filter(score >= dataframe_1 / 100) %>% + dplyr::select(Start, Stop) if (length(deep_inter$Start) > 0) { deep_inter$seqnames <- "chr" } - - + + # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == 'Antismash'){ + if (input$ref_comparison == "Antismash") { anti_inter <- shiny::isolate(vals$anti_data) %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'PRISM'){ + } else if (input$ref_comparison == "PRISM") { anti_inter <- shiny::isolate(vals$prism_data) %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == 'SEMPI'){ + } else if (input$ref_comparison == "SEMPI") { anti_inter <- shiny::isolate(vals$sempi_data) %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } - - - + } + + + # Get the interception of two matrices if (length(deep_inter$Start) > 0) { query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) + interseption <- GenomicRanges::findOverlaps(query, subject) inter_bgc <- length(interseption@from) len_new <- length(deep_inter$seqnames) - inter_bgc } else { inter_bgc <- 0 len_new <- 0 } - - if (input$ref_comparison == 'Antismash'){ - used_antismash <- length(shiny::isolate(vals$anti_data$Cluster))-inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'PRISM'){ - used_antismash <- length(shiny::isolate(vals$prism_data$Cluster))-inter_bgc + + if (input$ref_comparison == "Antismash") { + used_antismash <- length(shiny::isolate(vals$anti_data$Cluster)) - inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == "PRISM") { + used_antismash <- length(shiny::isolate(vals$prism_data$Cluster)) - inter_bgc cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == 'SEMPI') { - used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster))-inter_bgc + } else if (input$ref_comparison == "SEMPI") { + used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") } - + # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) + fullnes_of_annotation_1 <- data.frame( + c(rep(c(as.character(dataframe_1)), 3)), + cols, c(used_antismash, inter_bgc, len_new) + ) colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") # Combine previously created empty dataframe with this one to store results fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - } - + # Store dataframe in reactive value for later use. vals$fullness_deep <- data.frame(fullnes_of_annotation) - #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), - paste("DeepBGC score:", as.character(score_d)), - paste("Cluster type score:", as.character(score_c)), sep = "\n") - + annotateText <- paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), + paste("DeepBGC score:", as.character(score_d)), + paste("Cluster type score:", as.character(score_c)), + sep = "\n" + ) + # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + + ggplot2::geom_bar(position = "dodge", stat = "identity") + + ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + + ggplot2::xlab(paste(input$score_type, "Score")) + title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) }) - + output$deep_rate <- plotly::renderPlotly({ shiny::req(!is.null(vals$fullness_deep)) - - + + # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data # For more information please see previous shiny::renderPlot fullnes_of_annotation <- data.frame(vals$fullness_deep) - + # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == 'Antismash'){ - data <- vals$anti_data + if (input$ref_comparison == "Antismash") { + data <- vals$anti_data title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison == 'PRISM'){ + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Antismash` + test$`Only Antismash`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash` / length(data$Cluster) + ) + } else if (input$ref_comparison == "PRISM") { data <- vals$prism_data title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison == 'SEMPI'){ + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+PRISM` + test$`Only PRISM`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM` / length(data$Cluster) + ) + } else if (input$ref_comparison == "SEMPI") { data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only DeepBGC`/(test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI` / length(data$Cluster) + ) } - + # Calculate rates and plot interactive plot with plotly plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% + ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color = Rates)) + + ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type, "Score threshold")), + tooltip = c("Rate") + ) }) }) } ## To be copied in the UI # mod_deepbgc_plots_ui("deep_barplot_ui_1") - + ## To be copied in the server # mod_deepbgc_plots_server("deep_barplot_ui_1", vals, score_a, score_d, score_c) diff --git a/R/mod_download.R b/R/mod_download.R index af7b11b..19d5542 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -4,10 +4,10 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_download_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_download_ui <- function(id) { ns <- NS(id) tagList( div( @@ -15,46 +15,49 @@ mod_download_ui <- function(id){ shinydashboardPlus::box( title = "Download data", id = "download_data_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, width = NULL, - shiny::downloadButton(ns("download"),"Download currently used datasets (as for Biocircos plot)" ) + shiny::downloadButton(ns("download"), "Download currently used datasets (as for Biocircos plot)") ) ) ) } - + #' download Server Functions #' -#' @noRd -mod_download_server <- function(id){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_download_server <- function(id) { + moduleServer(id, function(input, output, session) { ns <- session$ns - output$download <- shiny::downloadHandler(filename = function(){ - paste("datasets.zip") - }, - content = function(file){ - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl('_biocircos.csv', file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl('group_by.csv', file_names, fixed = TRUE)){ - flst <- c(flst, file_names) - } - } - #create the zip file from flst vector - group_by_script <- system.file("scripts", "group.py", package = "BGCViz") - flst <- c(flst, group_by_script) - utils::zip(file, flst) }, - contentType = "application/zip" ) + output$download <- shiny::downloadHandler( + filename = function() { + paste("datasets.zip") + }, + content = function(file) { + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } + } + # create the zip file from flst vector + group_by_script <- system.file("scripts", "group.py", package = "BGCViz") + flst <- c(flst, group_by_script) + utils::zip(file, flst) + }, + contentType = "application/zip" + ) }) } - + ## To be copied in the UI # mod_download_ui("download_ui_1") - + ## To be copied in the server # mod_download_server("download_ui_1") diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 5524086..01f2b72 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -4,10 +4,10 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_gecco_plots_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_gecco_plots_ui <- function(id) { ns <- NS(id) tagList( shiny::fluidRow( @@ -18,24 +18,24 @@ mod_gecco_plots_ui <- function(id){ shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO comparison", id = "gecco_comparison_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, height = "100%", shiny::plotOutput(ns("gecco_barplot"), height = "500px") %>% shinycssloaders::withSpinner() - ),options = list(handles="w,e")) + ), options = list(handles = "w,e")) ), div( id = "id2", shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO rate", id = "gecco_rate_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, height = "100%", - plotly::plotlyOutput(ns("gecco_rate"), height = "500px",)%>% + plotly::plotlyOutput(ns("gecco_rate"), height = "500px", ) %>% shinycssloaders::withSpinner() - ),options = list(handles="w,e")) + ), options = list(handles = "w,e")) ), ) ), @@ -47,191 +47,204 @@ mod_gecco_plots_ui <- function(id){ shinyjqui::jqui_resizable(shinydashboardPlus::box( title = "GECCO comparison controls", id = "gecco_comparison_controls_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, - shiny::selectInput(ns("ref_comparison_gecco"), "Choose data for comparison with Gecco", choices = c(""),selected = ''), - shiny::selectInput(ns("score_type_gecco"), "Choose score type to set threshold", choices = c( - "Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type"), - selected = "avg_p"), - shiny::sliderInput(ns("plot_step_gecco"), "Choose step for plots(barplot)", min = 1, max = 50,value = 10), + shiny::selectInput(ns("ref_comparison_gecco"), "Choose data for comparison with Gecco", choices = c(""), selected = ""), + shiny::selectInput(ns("score_type_gecco"), "Choose score type to set threshold", + choices = c( + "Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type" + ), + selected = "avg_p" + ), + shiny::sliderInput(ns("plot_step_gecco"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), shiny::sliderInput(ns("plot_start_gecco"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ), options = list(handles="w,e")) + ), options = list(handles = "w,e")) ) ) ) ) } - + #' gecco_plots Server Functions #' -#' @noRd -mod_gecco_plots_server <- function(id, vals,score_average_gecco,score_cluster_gecco){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_gecco) { + moduleServer(id, function(input, output, session) { ns <- session$ns # Silence R CMD note - Start <- Stop <- Source <- Quantity <- - Score <- Novelty_rate <- Annotation_rate <- - Skip_rate <- Skip_rate <- Rates_data <- + Start <- Stop <- Source <- Quantity <- + Score <- Novelty_rate <- Annotation_rate <- + Skip_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T) )) - + shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - + gecco_inter_1 <- vals$gecco_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type_gecco == "avg_p") { score <- "score_a" } else if (input$score_type_gecco == "Cluster_Type") { score <- "score_c" - } + } gecco_inter_1$score <- gecco_inter_1[[score]] - + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)){ - + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)) { + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix gecco_inter <- gecco_inter_1 %>% - dplyr::filter(score>=dataframe_1/100) %>% - dplyr::select(Start, Stop) + dplyr::filter(score >= dataframe_1 / 100) %>% + dplyr::select(Start, Stop) if (length(gecco_inter$Start) > 0) { gecco_inter$seqnames <- "chr" } - - + + # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == 'Antismash'){ + if (input$ref_comparison_gecco == "Antismash") { anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'PRISM'){ + } else if (input$ref_comparison_gecco == "PRISM") { anti_inter <- vals$prism_data %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == 'SEMPI'){ + } else if (input$ref_comparison_gecco == "SEMPI") { anti_inter <- vals$sempi_data %>% - dplyr::select(Start, Stop) + dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } - - - - + } + + + + # Get the interception of two matrices if (length(gecco_inter$Start) > 0) { query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query,subject) + interseption <- GenomicRanges::findOverlaps(query, subject) inter_bgc <- length(interseption@from) len_new <- length(gecco_inter$seqnames) - inter_bgc } else { inter_bgc <- 0 len_new <- 0 } - - - if (input$ref_comparison_gecco == 'Antismash'){ - used_antismash <- length(vals$anti_data$Cluster)-inter_bgc - cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'PRISM'){ - used_antismash <- length(vals$prism_data$Cluster)-inter_bgc + + + if (input$ref_comparison_gecco == "Antismash") { + used_antismash <- length(vals$anti_data$Cluster) - inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "PRISM") { + used_antismash <- length(vals$prism_data$Cluster) - inter_bgc cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == 'SEMPI') { - used_antismash <- length(vals$sempi_data$Cluster)-inter_bgc + } else if (input$ref_comparison_gecco == "SEMPI") { + used_antismash <- length(vals$sempi_data$Cluster) - inter_bgc cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") } - + # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame(c(rep(c(as.character(dataframe_1)),3 )), - cols, c(used_antismash, inter_bgc, len_new)) + fullnes_of_annotation_1 <- data.frame( + c(rep(c(as.character(dataframe_1)), 3)), + cols, c(used_antismash, inter_bgc, len_new) + ) colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") # Combine previously created empty dataframe with this one to store results fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - } - + # Store dataframe in reactive value for later use. vals$fullness_gecco <- data.frame(fullnes_of_annotation) - #write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + # Make text to show on a barplot to point on additional scores' thresholds - annotateText=paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), - paste("Cluster type score:", as.character(score_cluster_gecco)), sep = "\n") - + annotateText <- paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), + paste("Cluster type score:", as.character(score_cluster_gecco)), + sep = "\n" + ) + # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill=Source, y=Quantity, x=Score)) + - ggplot2::geom_bar(position="dodge", stat="identity")+ - ggplot2::geom_text(ggplot2::aes(label=Quantity), position=ggplot2::position_dodge(width=0.9), vjust=-0.25) + - ggplot2::xlab(paste(input$score_type,"Score")) + + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + + ggplot2::geom_bar(position = "dodge", stat = "identity") + + ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + + ggplot2::xlab(paste(input$score_type, "Score")) + title + - ggplot2::geom_label(ggplot2::aes(x=Inf,y=Inf,hjust=1,vjust=1,label=annotateText ), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) }) - + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data output$gecco_rate <- plotly::renderPlotly({ shiny::req(!is.null(vals$fullness_gecco)) - + # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data # For more information please see previous shiny::renderPlot fullnes_of_annotation <- data.frame(vals$fullness_gecco) - + # Store dataframe into variable. Widen it to calculate rates test <- fullnes_of_annotation %>% tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == 'Antismash'){ - data <- vals$anti_data + if (input$ref_comparison_gecco == "Antismash") { + data <- vals$anti_data title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") test <- test %>% # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+Antismash` + test$`Only Antismash`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'PRISM'){ + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+Antismash` + test$`Only Antismash`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash` / length(data$Cluster) + ) + } else if (input$ref_comparison_gecco == "PRISM") { data <- vals$prism_data title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+PRISM` + test$`Only PRISM`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM`/length(data$Cluster)) - } else if (input$ref_comparison_gecco == 'SEMPI'){ + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+PRISM` + test$`Only PRISM`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM` / length(data$Cluster) + ) + } else if (input$ref_comparison_gecco == "SEMPI") { data <- vals$sempi_data title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") test <- test %>% - dplyr::mutate(Novelty_rate = test$`Only GECCO`/(test$`GECCO+SEMPI` + test$`Only SEMPI`), - #Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI`/length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI`/length(data$Cluster)) + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+SEMPI` + test$`Only SEMPI`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI` / length(data$Cluster) + ) } - + # Calculate rates and plot interactive plot with plotly plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = 'Rates', values_to = 'Rates_data') %>% - ggplot2::ggplot(ggplot2::aes(x=as.numeric(Score), y=as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color=Rates)) + - ggplot2::geom_point(ggplot2::aes(shape=Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type,"Score threshold")), - tooltip = c("Rate")) + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% + ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color = Rates)) + + ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type, "Score threshold")), + tooltip = c("Rate") + ) }) }) } - + ## To be copied in the UI # mod_gecco_plots_ui("gecco_plots_ui_1") - + ## To be copied in the server # mod_gecco_plots_server("gecco_plots_ui_1", vals,score_average_gecco,score_cluster_gecco ) diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 152a577..5d7e1c7 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -4,44 +4,46 @@ #' #' @param id,input,output,session Internal parameters for {shiny}. #' -#' @noRd +#' @noRd #' -#' @importFrom shiny NS tagList -mod_group_table_ui <- function(id){ +#' @importFrom shiny NS tagList +mod_group_table_ui <- function(id) { ns <- NS(id) tagList( div( - id="id2", - shinyjqui::jqui_resizable( + id = "id2", + shinyjqui::jqui_resizable( shinydashboardPlus::box( title = "Group table", id = "group_table_box", - collapsible = TRUE, + collapsible = TRUE, closable = TRUE, - style='overflow-x: scroll;height:700px;overflow-y: scroll;', + style = "overflow-x: scroll;height:700px;overflow-y: scroll;", height = "100%", shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ''), - shiny::tableOutput(ns("group_table"))%>% + shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ""), + shiny::tableOutput(ns("group_table")) %>% shinycssloaders::withSpinner() - ),options = list(handles="w,e")) + ), + options = list(handles = "w,e") + ) ) ) } - + #' group_table Server Functions #' -#' @noRd -mod_group_table_server <- function(id,vals,data_uploads,soft_names,soft_namings,data_to_use,abbr){ - moduleServer( id, function(input, output, session){ +#' @noRd +mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr) { + moduleServer(id, function(input, output, session) { ns <- session$ns output$group_table <- shiny::renderTable({ - shiny::req(vals$data_upload_count >1) + shiny::req(vals$data_upload_count > 1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_group_table == T) print(paste0("input$count_all: ", input$count_all, ", input$group_by: ", input$group_by, ", ")) - #source("src/group_table_functions.R") - if (is.null(vals$inters_filtered)){ + # source("src/group_table_functions.R") + if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { inters <- vals$inters_filtered @@ -50,80 +52,84 @@ mod_group_table_server <- function(id,vals,data_uploads,soft_names,soft_namings, colnames(df_test) <- abbr added_inters <- c(soft_names[match(input$group_by, soft_namings)]) add_inters <- list() - if (input$count_all == F){ - df_test[nrow(df_test)+1,] <- NA - } else{ + if (input$count_all == F) { + df_test[nrow(df_test) + 1, ] <- NA + } else { selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) colnames(df_test) <- abbr - df_test[[abbr[match(input$group_by, soft_namings)]]]<- vals[[selected_dataframe]]$Cluster - df_test[nrow(df_test)+1,] <- NA + df_test[[abbr[match(input$group_by, soft_namings)]]] <- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test) + 1, ] <- NA } - for (i in seq(1:length(data_uploads))){ - if (input$group_by==soft_namings[[i]]){ + for (i in seq(1:length(data_uploads))) { + if (input$group_by == soft_namings[[i]]) { exclude <- i soft_n <- names(inters[[soft_names[i]]]) index <- 1 for (d in seq(1:length(soft_n))) { name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))){ - if (name==soft_names[match(soft_n, soft_names)][h]){ - colnames(df_tmp) <- c(abbr[i],abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))) { + if (name == soft_names[match(soft_n, soft_names)][h]) { + colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) } } - - index <- index +1 + + index <- index + 1 } excluded_names <- abbr[abbr != as.name(abbr[i])] - data <- df_test %>% dplyr::group_by_if(colnames(df_test)==abbr[i]) %>% dplyr::summarise(a = paste(eval(as.name(excluded_names[1])), collapse=","), - b=paste(eval(as.name(excluded_names[2])), collapse=","), - c=paste(eval(as.name(excluded_names[3])), collapse=","), - d=paste(eval(as.name(excluded_names[4])), collapse=","), - e=paste(eval(as.name(excluded_names[5])), collapse=","), - f=paste(eval(as.name(excluded_names[6])), collapse=","), - g=paste(eval(as.name(excluded_names[7])), collapse=",")) + data <- df_test %>% + dplyr::group_by_if(colnames(df_test) == abbr[i]) %>% + dplyr::summarise( + a = paste(eval(as.name(excluded_names[1])), collapse = ","), + b = paste(eval(as.name(excluded_names[2])), collapse = ","), + c = paste(eval(as.name(excluded_names[3])), collapse = ","), + d = paste(eval(as.name(excluded_names[4])), collapse = ","), + e = paste(eval(as.name(excluded_names[5])), collapse = ","), + f = paste(eval(as.name(excluded_names[6])), collapse = ","), + g = paste(eval(as.name(excluded_names[7])), collapse = ",") + ) colnames(data) <- c(abbr[i], excluded_names) - for (p in abbr){ - data[[p]] <- gsub('NA,|,NA', '', data[[p]]) + for (p in abbr) { + data[[p]] <- gsub("NA,|,NA", "", data[[p]]) data[[p]][nrow(data)] <- refine_unique(data[[p]]) names(data)[names(data) == p] <- soft_namings[match(p, abbr)] } data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))){ - if (vals[[data_uploads[f]]] != TRUE){ + for (f in seq(1:length(data_uploads))) { + if (vals[[data_uploads[f]]] != TRUE) { data <- data %>% dplyr::select(-as.name(soft_namings[f])) } } - } else { - if ( !(soft_names[i] %in% added_inters)){ - matched_v <- match(added_inters,names(inters[[soft_names[i]]])) + if (!(soft_names[i] %in% added_inters)) { + matched_v <- match(added_inters, names(inters[[soft_names[i]]])) soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])){ - if (!(inter %in% added_inters)){ - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]],inters[[soft_names[i]]][[inter]]$to ) + for (inter in names(inters[[soft_names[i]]])) { + if (!(inter %in% added_inters)) { + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) } } - added_inters <- c(added_inters, soft_names[i])} + added_inters <- c(added_inters, soft_names[i]) + } } } - - for (name in names( add_inters) ){ + + for (name in names(add_inters)) { data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") } utils::write.csv(data, "group_by.csv", row.names = F) data }) }) } - + ## To be copied in the UI # mod_group_table_ui("group_table_ui_1") - + ## To be copied in the server # mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/R/run_app.R b/R/run_app.R index dba59cf..ad9915c 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -1,28 +1,26 @@ #' Run the Shiny Application #' -#' @param ... arguments to pass to golem_opts. +#' @param ... arguments to pass to golem_opts. #' See `?golem::get_golem_options` for more details. #' @inheritParams shiny::shinyApp #' #' @export #' @importFrom shiny shinyApp -#' @importFrom golem with_golem_options -run_app <- function( - onStart = NULL, - options = list(), - enableBookmarking = NULL, - uiPattern = "/", - ... -) { +#' @importFrom golem with_golem_options +run_app <- function(onStart = NULL, + options = list(), + enableBookmarking = NULL, + uiPattern = "/", + ...) { with_golem_options( app = shinyApp( ui = app_ui, server = app_server, onStart = onStart, - options = options, - enableBookmarking = enableBookmarking, + options = options, + enableBookmarking = enableBookmarking, uiPattern = uiPattern - ), + ), golem_opts = list(...) ) } diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index 4fbade2..942c679 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -1,169 +1,181 @@ -#' geom_anti +#' geom_anti #' #' @description A function, that returns antismash geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_anti <- function(data, rre_more){ +geom_anti <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- + x <- y <- xend <- yend <- Type2 <- Software <- ID <- Start <- Stop <- Type <- NULL -ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } -#' geom_prism +#' geom_prism #' #' @description A function, that returns prism geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_prism <- function(data,rre_more){ +geom_prism <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- + x <- y <- xend <- yend <- Type2 <- Software <- ID <- Start <- Stop <- Type <- NULL - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } -#' geom_deep +#' geom_deep #' #' @description A function, that returns deepbgc geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_deep <- function(data,rre_more){ +geom_deep <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type <- - Software <- ID <- Start <- Stop <- - Type <- num_domains <- deepbgc_score <- + x <- y <- xend <- yend <- Type <- + Software <- ID <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- activity <- NULL - ggplot2::geom_segment(data=data,ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score,activity = activity ),size =3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score, activity = activity + ), size = 3) } -#' geom_rre +#' geom_rre #' #' @description A function, that returns RRE-Finder geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_rre <- function(data, rre_more){ +geom_rre <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type <- - Score <- Software <- ID <- Start <- - Stop <- Type <- E_value <- P_value <- RRE_start <- + x <- y <- xend <- yend <- Type <- + Score <- Software <- ID <- Start <- + Stop <- Type <- E_value <- P_value <- RRE_start <- RRE_stop <- Probability <- NULL - if (rre_more == T){ - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start,RRE_stop = RRE_stop, - Probability = Probability),size = 3) + if (rre_more == T) { + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, + Probability = Probability + ), size = 3) } else { - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ),size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ), size = 3) } } -#' geom_sempi +#' geom_sempi #' #' @description A function, that returns SEMPI geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_sempi <- function(data,rre_more){ +geom_sempi <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop <- + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } -#' deep_reference +#' deep_reference #' #' @description A function, that returns Prism-Supplement geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_prism_supp <- function(data,rre_more){ +geom_prism_supp <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop<- Type <- Name <- + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- Name <- Full_name <- Score <- NULL - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score + ), size = 3) } -#' geom_arts +#' geom_arts #' #' @description A function, that returns ARTS geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_arts <- function(data,rre_more){ +geom_arts <- function(data, rre_more) { # Silence R CMD error - x <- y <- xend <- yend <- Type2 <- - Start <- Stop <- Type <- ID <- Hit <- - Software <- Core <- E_value <- + x <- y <- xend <- yend <- Type2 <- + Start <- Stop <- Type <- ID <- Hit <- + Software <- Core <- E_value <- Bitscore <- Count <- Model <- NULL - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model + ), size = 3) } -#' geom_gecco +#' geom_gecco #' #' @description A function, that returns GECCO geom with the legend, specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd -geom_gecco <- function(data,rre_more){ +geom_gecco <- function(data, rre_more) { # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- Software <- + x <- y <- xend <- yend <- Type2 <- Software <- ID <- Start <- Stop <- Type <- Num_proteins <- Num_domains <- Average_p <- Max_p <- NULL - ggplot2::geom_segment(data=data, ggplot2::aes(x, y, xend=xend, yend=yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins= Num_proteins, - Num_domains = Num_domains,Average_p = Average_p, Max_p = Max_p ), size = 3) + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, + Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p + ), size = 3) } -#' add_more_annot +#' add_more_annot #' #' @description A function, that that adds specific geom to the plot object #' #' @return plot oblect with added geom_segment #' #' @noRd -add_more_annot <- function(seg_df, plot, soft_names, index, rre_more){ - if (dim(seg_df)[1] > 0){ - if (soft_names[index] == "anti"){ +add_more_annot <- function(seg_df, plot, soft_names, index, rre_more) { + if (dim(seg_df)[1] > 0) { + if (soft_names[index] == "anti") { plot <- plot + geom_anti(seg_df) } else if (soft_names[index] == "sempi") { plot <- plot + geom_sempi(seg_df) - } - else if (soft_names[index] == "prism") { + } else if (soft_names[index] == "prism") { plot <- plot + geom_prism(seg_df) - } - else if (soft_names[index] == "prism_supp") { + } else if (soft_names[index] == "prism_supp") { plot <- plot + geom_prism_supp(seg_df) - } - else if (soft_names[index] == "arts") { + } else if (soft_names[index] == "arts") { plot <- plot + geom_arts(seg_df) - } - else if (soft_names[index] == "deep") { + } else if (soft_names[index] == "deep") { plot <- plot + geom_deep(seg_df) - } - else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df,rre_more) + } else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df, rre_more) } else if (soft_names[index] == "gecco") { - plot <- plot+geom_gecco(seg_df) + plot <- plot + geom_gecco(seg_df) } return(plot) - } else{ + } else { return(plot) } } diff --git a/R/utils_helpers.R b/R/utils_helpers.R index f3ee5da..69e26db 100644 --- a/R/utils_helpers.R +++ b/R/utils_helpers.R @@ -1,12 +1,11 @@ -#' is.integer0 +#' is.integer0 #' #' @description Function, that checks if certain integer is 0 #' #' @return TRUE if 0, FALSE if not #' #' @noRd -is.integer0 <- function(x) -{ +is.integer0 <- function(x) { is.integer(x) && length(x) == 0L } #' %>% @@ -16,4 +15,3 @@ is.integer0 <- function(x) #' @return %>% #' #' @noRd - diff --git a/data-raw/anti_data.R b/data-raw/anti_data.R index 71d2fde..fc5246c 100644 --- a/data-raw/anti_data.R +++ b/data-raw/anti_data.R @@ -1,8 +1,8 @@ ## code to prepare `anti_data` dataset goes here anti_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_antismash.csv") # Add chromosome column -anti_data$chromosome <- rep("A", length(anti_data$Cluster)) +anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) -anti_data['Type2'] <- stringr::str_trim(tolower(anti_data$Type)) +anti_data["Type2"] <- stringr::str_trim(tolower(anti_data$Type)) usethis::use_data(anti_data, overwrite = TRUE) diff --git a/data-raw/deep_data.R b/data-raw/deep_data.R index 1738c47..fce0b17 100644 --- a/data-raw/deep_data.R +++ b/data-raw/deep_data.R @@ -1,10 +1,10 @@ ## code to prepare `deep_data` dataset goes here -deep_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv") -polyketide <- nrp <- NULL # Silence R CMD error -drop_cols <- c("nrp","polyketide") +deep_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_deep.tsv") +polyketide <- nrp <- NULL # Silence R CMD error +drop_cols <- c("nrp", "polyketide") colnames(deep_data) <- stringr::str_to_lower(colnames(deep_data)) # Read data deep_data <- deep_data %>% - dplyr::mutate(pks=polyketide, nrps = nrp ) %>% + dplyr::mutate(pks = polyketide, nrps = nrp) %>% dplyr::select(-dplyr::one_of(drop_cols)) usethis::use_data(deep_data, overwrite = TRUE) diff --git a/data-raw/gecco_data.R b/data-raw/gecco_data.R index 59d11e1..44381e3 100644 --- a/data-raw/gecco_data.R +++ b/data-raw/gecco_data.R @@ -1,11 +1,11 @@ ## code to prepare `gecco_data` dataset goes here gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv") # Silence R CMD note -polyketide_probability <- other_probability <- - nrp_probability <- alkaloid_probability <- - terpene_probability <- saccharide_probability <- +polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- ripp_probability <- NULL -gecco_data$chromosome <- rep("G", length(gecco_data$type)) +gecco_data$chromosome <- rep("G", length(gecco_data$type)) # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) gecco_data$ID <- gecco_data$Cluster @@ -13,16 +13,20 @@ gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) -gecco_data['Type2'] <- stringr::str_trim(tolower(gecco_data$Type)) -drop_cols <- c("alkaloid_probability" , "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability" , "other_probability" ) +gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) +drop_cols <- c( + "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability", "other_probability" +) # Read data gecco_data <- gecco_data %>% - dplyr::mutate(pks=polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability) %>% + dplyr::mutate( + pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability + ) %>% dplyr::select(-dplyr::one_of(drop_cols)) -gecco_data$num_prot <- sapply( stringr::str_split(as.character(gecco_data$proteins), ";"), length) -gecco_data$num_domains <- sapply( stringr::str_split(as.character(gecco_data$domains), ";"), length) +gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$proteins), ";"), length) +gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" -names(gecco_data)[names(gecco_data) == "end"] <- "Stop" +names(gecco_data)[names(gecco_data) == "end"] <- "Stop" usethis::use_data(gecco_data, overwrite = TRUE) diff --git a/data-raw/prism_data.R b/data-raw/prism_data.R index 0c84128..a20e8b0 100644 --- a/data-raw/prism_data.R +++ b/data-raw/prism_data.R @@ -2,5 +2,5 @@ # Function ro parse prism_json library(magrittr) source("R/fct_reading_processing.R") -prism_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[1]] +prism_data <- process_prism_json_suppl(rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[1]] usethis::use_data(prism_data, overwrite = TRUE, internal = TRUE) diff --git a/data-raw/prism_supp_data.R b/data-raw/prism_supp_data.R index c79545c..c216686 100644 --- a/data-raw/prism_supp_data.R +++ b/data-raw/prism_supp_data.R @@ -1,5 +1,5 @@ ## code to prepare `prism_supp_data` dataset goes here library(magrittr) source("R/fct_reading_processing.R") -prism_supp_data <- process_prism_json_suppl( rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[2]] +prism_supp_data <- process_prism_json_suppl(rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[2]] usethis::use_data(prism_supp_data, overwrite = TRUE) diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R index 6880ce7..10624cf 100644 --- a/data-raw/rre_data.R +++ b/data-raw/rre_data.R @@ -1,20 +1,20 @@ ## code to prepare `rre_data` dataset goes here library(magrittr) Gene.name <- Coordinates <- NULL # Silence R CMD error -rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt") +rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- rre_data %>% - tidyr::separate(Gene.name, c("Sequence","Coordinates","Locus_tag"),sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"),sep = "-") + tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") # Add chromosome info column -rre_data$chromosome <- rep("RRE",length(rre_data$Sequence)) +rre_data$chromosome <- rep("RRE", length(rre_data$Sequence)) # Add ID column rre_data$ID <- seq(1:length(rre_data$Sequence)) rre_data$Cluster <- rre_data$ID rre_data <- data.frame(rre_data) -rre_data['Type'] <- 'ripp' -rre_data['Type2'] <- 'ripp' -rre_data$Start <- as.numeric(rre_data$Start) +rre_data["Type"] <- "ripp" +rre_data["Type2"] <- "ripp" +rre_data$Start <- as.numeric(rre_data$Start) rre_data$Stop <- as.numeric(rre_data$Stop) # Store rre data into local variable rre_data <- data.frame(rre_data) diff --git a/data-raw/sempi_data.R b/data-raw/sempi_data.R index 3dd548d..17a0afc 100644 --- a/data-raw/sempi_data.R +++ b/data-raw/sempi_data.R @@ -1,4 +1,4 @@ ## code to prepare `sempi_data` dataset goes here sempi_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv") -sempi_data['Type2'] <- stringr::str_trim(tolower(sempi_data$Type)) +sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) usethis::use_data(sempi_data, overwrite = TRUE) diff --git a/man/get_defaults.Rd b/man/get_defaults.Rd index 4d2f895..2bea393 100644 --- a/man/get_defaults.Rd +++ b/man/get_defaults.Rd @@ -13,6 +13,6 @@ get_defaults(write_to = getwd()) csv file in specified location } \description{ -Function, which downloads default options csv file into provided location. +Function, which downloads default options csv file into provided location. Then can be used with `set_defaults` function to change the default behaviour } diff --git a/man/run_app.Rd b/man/run_app.Rd index 6be75ea..c6c36f7 100644 --- a/man/run_app.Rd +++ b/man/run_app.Rd @@ -33,7 +33,7 @@ request to determine whether the \code{ui} should be used to handle the request. Note that the entire request path must match the regular expression in order for the match to be considered successful.} -\item{...}{arguments to pass to golem_opts. +\item{...}{arguments to pass to golem_opts. See `?golem::get_golem_options` for more details.} } \description{ diff --git a/man/sempi_to_csv.Rd b/man/sempi_to_csv.Rd index 0e215e8..f2d40c3 100644 --- a/man/sempi_to_csv.Rd +++ b/man/sempi_to_csv.Rd @@ -15,6 +15,6 @@ sempi_to_csv(project_archive, write_to = getwd()) csv file in specified location } \description{ -Function, which transforms Track.db file into dataframe, which could be then written to csv. +Function, which transforms Track.db file into dataframe, which could be then written to csv. Download project folder from SEMPI and supply as `project_archive` argument to a function } diff --git a/man/set_defaults.Rd b/man/set_defaults.Rd index 5272215..b174e52 100644 --- a/man/set_defaults.Rd +++ b/man/set_defaults.Rd @@ -10,6 +10,6 @@ set_defaults(csv_file) \item{csv_file}{- path to csv file with default options.} } \description{ -Function, which uploads default options csv file to the package. +Function, which uploads default options csv file to the package. Use with `get_defaults` function to download currently used default options. } diff --git a/tests/spelling.R b/tests/spelling.R index 6713838..13f77d9 100644 --- a/tests/spelling.R +++ b/tests/spelling.R @@ -1,3 +1,6 @@ -if(requireNamespace('spelling', quietly = TRUE)) - spelling::spell_check_test(vignettes = TRUE, error = FALSE, - skip_on_cran = TRUE) +if (requireNamespace("spelling", quietly = TRUE)) { + spelling::spell_check_test( + vignettes = TRUE, error = FALSE, + skip_on_cran = TRUE + ) +} diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R index 3d5aeaf..1ad6d8c 100644 --- a/tests/testthat/test-golem-recommended.R +++ b/tests/testthat/test-golem-recommended.R @@ -3,7 +3,7 @@ test_that("app ui", { golem::expect_shinytaglist(ui) # Check that formals have not been removed fmls <- formals(app_ui) - for (i in c("request")){ + for (i in c("request")) { expect_true(i %in% names(fmls)) } }) @@ -13,14 +13,15 @@ test_that("app server", { expect_is(server, "function") # Check that formals have not been removed fmls <- formals(app_server) - for (i in c("input", "output", "session")){ + for (i in c("input", "output", "session")) { expect_true(i %in% names(fmls)) } }) # Configure this test to fit your need test_that( - "app launches",{ + "app launches", + { golem::expect_running(sleep = 5) } ) From 94523f2d88a54f43683eec535b2f5902cab78c2a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 19:14:06 +0200 Subject: [PATCH 142/199] Fixed warnings in deep_reference_2 Former-commit-id: ace6b5c87df02812bd15de1a628217731fde2dc7 --- R/mod_deep_reference_2.R | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index b436acd..685c599 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -73,70 +73,70 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) if (vals$anti_data_input == TRUE) { plot <- plot + - ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + ), size = 3)) } if (vals$deep_data_input == TRUE) { if (dim(vals$seg_df_ref_d)[1] > 0) { plot <- plot + - ggplot2::geom_segment(data = vals$seg_df_ref_d, ggplot2::aes(x, y, + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_d, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, deepbgc_score = deepbgc_score, activity = activity - ), size = 3) + ), size = 3)) } } if (vals$rre_data_input == TRUE) { if (vals$rre_more == T) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, Probability = Probability - ), size = 3) + ), size = 3)) } else { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ), size = 3) + ), size = 3)) } } if (vals$prism_data_input == TRUE) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_p, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + ), size = 3)) } if (vals$sempi_data_input == TRUE) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_s, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_s, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + ), size = 3)) } if (vals$prism_supp_plot == TRUE) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_p_s, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p_s, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, Score = Score - ), size = 3) + ), size = 3)) } if (vals$arts_data_input == TRUE) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_ar, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_ar, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model - ), size = 3) + ), size = 3)) } if (vals$gecco_data_input == TRUE) { if (dim(vals$seg_df_ref_g)[1] > 0) { - plot <- plot + ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p - ), size = 3) + ), size = 3)) } } to_plot <- plotly::ggplotly(plot + From 9659c14782edfd5db9c3b75051b201838c3f7553 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 19:33:22 +0200 Subject: [PATCH 143/199] Fixed several linting errors Former-commit-id: 43267cd5643123f1506ff095b0d858643be01eb5 --- .lintr | 2 ++ R/app_config.R | 3 ++- R/app_server.R | 13 ------------- R/mod_group_table.R | 9 ++++++--- R/utils_deep_reference.R | 15 ++++++++++----- tests/testthat/test-golem-recommended.R | 3 +-- 6 files changed, 21 insertions(+), 24 deletions(-) create mode 100644 .lintr diff --git a/.lintr b/.lintr new file mode 100644 index 0000000..462d046 --- /dev/null +++ b/.lintr @@ -0,0 +1,2 @@ +linters: with_defaults(line_length_linter=line_length_linter(120)) + diff --git a/R/app_config.R b/R/app_config.R index b7b4807..e6c06d0 100644 --- a/R/app_config.R +++ b/R/app_config.R @@ -2,7 +2,8 @@ #' #' NOTE: If you manually change your package name in the DESCRIPTION, #' don't forget to change it here too, and in the config file. -#' For a safer name change mechanism, use the `golem::set_golem_name()` function. +#' For a safer name change mechanism, use the `golem::set_golem_name()` +#' function. #' #' @param ... character vectors, specifying subdirectory and file(s) #' within your package. The default, none, returns the root of the app. diff --git a/R/app_server.R b/R/app_server.R index f36e87d..657ea39 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -79,8 +79,6 @@ app_server <- function(input, output, session) { coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list(dom = "t", ordering = F)) - # Validation - # source("src/validate_functions.R") # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", @@ -132,8 +130,6 @@ app_server <- function(input, output, session) { } } options(shiny.maxRequestSize = 100 * 1024^2) - # Small function to make integers zeros - # source("src/helper_functions.R") disable_event_logic <- function() { vals$can_plot_deep_ref <- F @@ -167,8 +163,6 @@ app_server <- function(input, output, session) { } vals$anti_type <- anti_data$Type2 vals$anti_data <- anti_data - # Save file - # write.csv(vals$anti_data, "anti_data.csv", row.names = F) vals$anti_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") @@ -204,8 +198,6 @@ app_server <- function(input, output, session) { } vals$gecco_data <- gecco_data vals$gecco_data_filtered <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) - # Save file - # write.csv(vals$gecco_data, "gecco_data.csv", row.names = F) vals$gecco_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") @@ -262,8 +254,6 @@ app_server <- function(input, output, session) { vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) # Add ID column (same as Cluster) vals$prism_data$ID <- vals$prism_data$Cluster - # Save file - # write.csv(vals$prism_data, "prism_data.csv", row.names = F) vals$prism_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") @@ -307,8 +297,6 @@ app_server <- function(input, output, session) { vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) # Add ID column (same as Cluster) vals$sempi_data$ID <- vals$sempi_data$Cluster - # Save file - # write.csv(vals$sempi_data, "sempi_data.csv", row.names = F) vals$sempi_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") @@ -384,7 +372,6 @@ app_server <- function(input, output, session) { # Add ID column as number seuquence of dataframe length vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) vals$deep_data$Cluster <- vals$deep_data$ID - # write.csv(vals$deep_data, "deep_data.csv", row.names = F) vals$deep_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$deep_data_filtered <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 5d7e1c7..14739ef 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -106,7 +106,7 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami } else { if (!(soft_names[i] %in% added_inters)) { matched_v <- match(added_inters, names(inters[[soft_names[i]]])) - soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + soft_n <- soft_names[ -(matched_v[!is.na(matched_v)])] for (inter in names(inters[[soft_names[i]]])) { if (!(inter %in% added_inters)) { add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) @@ -120,7 +120,9 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami for (name in names(add_inters)) { data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + data[nrow(data), soft_namings[match(name, soft_names)]] <- + paste(data_to_add[!(data_to_add %in% + unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") } utils::write.csv(data, "group_by.csv", row.names = F) data @@ -132,4 +134,5 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami # mod_group_table_ui("group_table_ui_1") ## To be copied in the server -# mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) +# mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, +#soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index 942c679..b07cae1 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -1,6 +1,7 @@ #' geom_anti #' -#' @description A function, that returns antismash geom with the legend, specific to this software (to show on mouse hover). +#' @description A function, that returns antismash geom with the legend, +#' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' @@ -32,7 +33,8 @@ geom_prism <- function(data, rre_more) { } #' geom_deep #' -#' @description A function, that returns deepbgc geom with the legend, specific to this software (to show on mouse hover). +#' @description A function, that returns deepbgc geom with the legend, +#' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' @@ -51,7 +53,8 @@ geom_deep <- function(data, rre_more) { } #' geom_rre #' -#' @description A function, that returns RRE-Finder geom with the legend, specific to this software (to show on mouse hover). +#' @description A function, that returns RRE-Finder geom with the legend, +#' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' @@ -95,7 +98,8 @@ geom_sempi <- function(data, rre_more) { } #' deep_reference #' -#' @description A function, that returns Prism-Supplement geom with the legend, specific to this software (to show on mouse hover). +#' @description A function, that returns Prism-Supplement geom with the legend, +#' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' @@ -113,7 +117,8 @@ geom_prism_supp <- function(data, rre_more) { } #' geom_arts #' -#' @description A function, that returns ARTS geom with the legend, specific to this software (to show on mouse hover). +#' @description A function, that returns ARTS geom with the legend, +#' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R index 1ad6d8c..facc6b4 100644 --- a/tests/testthat/test-golem-recommended.R +++ b/tests/testthat/test-golem-recommended.R @@ -20,8 +20,7 @@ test_that("app server", { # Configure this test to fit your need test_that( - "app launches", - { + "app launches", { golem::expect_running(sleep = 5) } ) From bcb39699d677c196d5f4c2d2f03ac8f051646b53 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 19:35:51 +0200 Subject: [PATCH 144/199] Remove old example data Former-commit-id: 503cc7b1a34a95bc08eff55811ef2f6a20c7c21c --- inst/extdata/sco_antismash.csv | 28 --- .../extdata/sco_antismash.json.REMOVED.git-id | 1 - inst/extdata/sco_arts.csv | 162 ---------------- inst/extdata/sco_deep.tsv | 173 ------------------ inst/extdata/sco_gecco.tsv | 21 --- inst/extdata/sco_prism.json.REMOVED.git-id | 1 - inst/extdata/sco_rre.txt | 3 - inst/extdata/sco_sempi.csv | 34 ---- 8 files changed, 423 deletions(-) delete mode 100644 inst/extdata/sco_antismash.csv delete mode 100644 inst/extdata/sco_antismash.json.REMOVED.git-id delete mode 100644 inst/extdata/sco_arts.csv delete mode 100644 inst/extdata/sco_deep.tsv delete mode 100644 inst/extdata/sco_gecco.tsv delete mode 100644 inst/extdata/sco_prism.json.REMOVED.git-id delete mode 100644 inst/extdata/sco_rre.txt delete mode 100644 inst/extdata/sco_sempi.csv diff --git a/inst/extdata/sco_antismash.csv b/inst/extdata/sco_antismash.csv deleted file mode 100644 index 4ade4cd..0000000 --- a/inst/extdata/sco_antismash.csv +++ /dev/null @@ -1,28 +0,0 @@ -"Cluster","Start","Stop","Type" -1,86693,139654,"hgle-ks__t1pks" -2,166700,191657,"terpene" -3,246867,270397,"lanthipeptide-class-i" -4,494259,544087,"nrps" -5,791700,799942,"ripp-like" -6,1258217,1297040,"t3pks" -7,1995499,2005898,"ectoine" -8,2939305,2949875,"melanin" -9,3034430,3045603,"siderophore" -10,3524827,3603907,"nrps" -11,5496473,5567376,"t2pks" -12,5671274,5691836,"terpene" -13,5751944,5824487,"t2pks" -14,6336090,6346443,"siderophore" -15,6429574,6475291,"nrps-like__t1pks__prodigiosin" -16,6632342,6643659,"ripp-like" -17,6656903,6676224,"terpene" -18,6842314,6855522,"siderophore" -19,6881334,6951537,"t1pks__butyrolactone" -20,7088263,7142447,"thioamide-nrp__nrps" -21,7409741,7432456,"lanthipeptide-class-iii" -22,7506307,7532117,"terpene" -23,7570411,7618555,"pks-like__t1pks" -24,7682906,7709360,"lanthipeptide-class-i" -25,7973469,8047403,"other__t3pks" -26,8269636,8290764,"indole" -27,8475101,8548352,"t3pks__nrps__terpene" diff --git a/inst/extdata/sco_antismash.json.REMOVED.git-id b/inst/extdata/sco_antismash.json.REMOVED.git-id deleted file mode 100644 index 710b80c..0000000 --- a/inst/extdata/sco_antismash.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -ed38ed0a829ca3d7134cb1ac60d1c93a8d4a5f62 \ No newline at end of file diff --git a/inst/extdata/sco_arts.csv b/inst/extdata/sco_arts.csv deleted file mode 100644 index a015ee2..0000000 --- a/inst/extdata/sco_arts.csv +++ /dev/null @@ -1,162 +0,0 @@ -"Hit","Start","Stop","Core","Description","Count","ID","Cluster","Type","Type2","Evalue","Bitscore","Model" -"hit_1",161236,162553,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,1,1,"core","core",NA,NA,"Core" -"hit_1",197220,199917,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,2,2,"core","core",NA,NA,"Core" -"hit_1",457483,457654,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,3,3,"core","core",NA,NA,"Core" -"hit_1",544193,545717,"TIGR01311","glycerol_kin: glycerol kinase",2,4,4,"core","core",NA,NA,"Core" -NA,583522,586897,"Not_core","Biotin_lipoyl",1,5,5,"resistance","resistance",4.7e-15,54,"PF00364.17" -"hit_1",612155,612320,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,6,6,"core","core",NA,NA,"Core" -"hit_1",620366,620879,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,7,7,"core","core",NA,NA,"Core" -NA,740313,742083,"Not_core","ABC_efflux",1,8,8,"resistance","resistance",3.9e-74,248.9,"RF0007" -NA,796976,797723,"Not_core","Biotin_lipoyl",1,9,9,"resistance","resistance",3.4e-06,25.7,"PF00364.17" -"hit_1",1035207,1036800,"TIGR01344","malate_syn_A: malate synthase A",2,10,10,"core","core",NA,NA,"Core" -"hit_1",1116446,1117826,"TIGR03356","BGL: beta-galactosidase",5,11,11,"core","core",NA,NA,"Core" -NA,1202479,1204282,"Not_core","ABC_efflux",1,12,12,"resistance","resistance",8.4e-81,270.9,"RF0007" -"hit_1",1210321,1210594,"TIGR00105","L31: ribosomal protein bL31",3,13,13,"core","core",NA,NA,"Core" -"hit_1",1282581,1283235,"TIGR00079","pept_deformyl: peptide deformylase",3,14,14,"core","core",NA,NA,"Core" -NA,1338247,1339366,"Not_core","Biotin_lipoyl",1,15,15,"resistance","resistance",7.5e-09,34.2,"PF00364.17" -"hit_1",1396237,1397416,"TIGR00485","EF-Tu: translation elongation factor Tu",2,16,16,"core","core",NA,NA,"Core" -"hit_1",1401206,1402082,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,17,17,"core","core",NA,NA,"Core" -NA,1494023,1495871,"Not_core","HSP90",1,18,18,"resistance","resistance",3.6e-07,28,"PF00183.13" -NA,1590406,1591387,"Not_core","OTCace",1,19,19,"resistance","resistance",4.9e-37,126.3,"PF00185.19" -"hit_1",1636965,1638942,"TIGR00418","thrS: threonine--tRNA ligase",2,20,20,"core","core",NA,NA,"Core" -"hit_1",1662891,1666530,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,21,21,"core","core",NA,NA,"Core" -NA,1757648,1758413,"Not_core","Proteasome",1,22,22,"resistance","resistance",1.9e-26,91.6,"PF00227.21" -NA,1758474,1759320,"Not_core","Proteasome",1,23,23,"resistance","resistance",2.6e-38,130.3,"PF00227.21" -"hit_2",1778725,1780264,"TIGR01311","glycerol_kin: glycerol kinase",2,24,24,"core","core",NA,NA,"Core" -"hit_1",1923749,1924289,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,25,25,"core","core",NA,NA,"Core" -"hit_1",2048175,2049129,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,26,26,"core","core",NA,NA,"Core" -NA,2059303,2060092,"Not_core","AAC3",1,27,27,"resistance","resistance",3.5e-54,182.5,"RF0002" -"hit_1",2068834,2069953,"TIGR00876","tal_mycobact: transaldolase",2,28,28,"core","core",NA,NA,"Core" -"hit_1",2069956,2071480,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,29,29,"core","core",NA,NA,"Core" -"hit_1",2071476,2072532,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,30,30,"core","core",NA,NA,"Core" -"hit_1",2080142,2081153,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,31,31,"core","core",NA,NA,"Core" -NA,2080142,2081153,"Not_core","Gp_dh_N",1,32,32,"resistance","resistance",2e-61,205.4,"PF00044.19" -"hit_1",2156336,2157773,"TIGR01064","pyruv_kin: pyruvate kinase",2,33,33,"core","core",NA,NA,"Core" -"hit_1",2162745,2165253,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,34,34,"core","core",NA,NA,"Core" -"hit_1",2185227,2186259,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,35,35,"core","core",NA,NA,"Core" -"hit_1",2308850,2309915,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,36,36,"core","core",NA,NA,"Core" -"hit_1",2316757,2318494,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,37,37,"core","core",NA,NA,"Core" -"hit_2",2338273,2339347,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,38,38,"core","core",NA,NA,"Core" -NA,2345795,2347568,"Not_core","Biotin_lipoyl",1,39,39,"resistance","resistance",8.7e-46,152.5,"PF00364.17" -"hit_1",2348739,2351439,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,40,40,"core","core",NA,NA,"Core" -"hit_1",2445704,2446967,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,41,41,"core","core",NA,NA,"Core" -"hit_2",2539575,2542332,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,42,42,"core","core",NA,NA,"Core" -NA,2624025,2625402,"Not_core","Carboxyl_trans",1,43,43,"resistance","resistance",2.6e-27,94.4,"PF01039.17" -NA,2651102,2653031,"Not_core","ABC_efflux",1,44,44,"resistance","resistance",4.6e-95,318,"RF0007" -"hit_2",2684903,2687633,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,45,45,"core","core",NA,NA,"Core" -"hit_2",2728979,2730326,"TIGR03356","BGL: beta-galactosidase",5,46,46,"core","core",NA,NA,"Core" -"hit_1",2745001,2746024,"TIGR01430","aden_deam: adenosine deaminase",5,47,47,"core","core",NA,NA,"Core" -"hit_1",2753869,2755006,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,48,48,"core","core",NA,NA,"Core" -"hit_2",2854111,2854591,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,49,49,"core","core",NA,NA,"Core" -"hit_2",2861701,2864203,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,50,50,"core","core",NA,NA,"Core" -"hit_3",2873769,2876343,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,51,51,"core","core",NA,NA,"Core" -NA,3010976,3014708,"Not_core","ABC_efflux",1,52,52,"resistance","resistance",4.6e-170,565.4,"RF0007" -NA,3027513,3029130,"Not_core","Carboxyl_trans",1,53,53,"resistance","resistance",3.2e-164,546,"PF01039.17" -NA,3029168,3031109,"Not_core","Biotin_lipoyl",1,54,54,"resistance","resistance",7.8e-20,69.4,"PF00364.17" -"hit_1",3043785,3045603,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,55,55,"core","core",NA,NA,"Core" -"hit_3",3054669,3056109,"TIGR03356","BGL: beta-galactosidase",5,56,56,"core","core",NA,NA,"Core" -"hit_1",3153869,3154226,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,57,57,"core","core",NA,NA,"Core" -"hit_2",3166795,3168142,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,58,58,"core","core",NA,NA,"Core" -"hit_1",3390540,3391821,"TIGR01060","eno: phosphopyruvate hydratase",2,59,59,"core","core",NA,NA,"Core" -"hit_2",3521672,3522680,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,60,60,"core","core",NA,NA,"Core" -"hit_1",3691373,3692384,"TIGR00233","trpS: tryptophan--tRNA ligase",2,61,61,"core","core",NA,NA,"Core" -"hit_1",3789247,3789487,"TIGR00165","S18: ribosomal protein bS18",2,62,62,"core","core",NA,NA,"Core" -"hit_2",3790677,3790932,"TIGR00105","L31: ribosomal protein bL31",3,63,63,"core","core",NA,NA,"Core" -"hit_2",3790938,3791103,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,64,64,"core","core",NA,NA,"Core" -"hit_1",3791190,3791412,"TIGR00009","L28: ribosomal protein bL28",2,65,65,"core","core",NA,NA,"Core" -"hit_1",3791411,3791717,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,66,66,"core","core",NA,NA,"Core" -"hit_1",3804031,3804376,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,67,67,"core","core",NA,NA,"Core" -NA,3966834,3967929,"Not_core","vanS",1,68,68,"resistance","resistance",2.9e-88,295.1,"RF0155" -NA,3967921,3968617,"Not_core","vanR",1,69,69,"resistance","resistance",5.8e-82,273.4,"RF0154" -NA,3973353,3973962,"Not_core","vanX",1,70,70,"resistance","resistance",3.8e-98,325.8,"RF0158" -"hit_2",4048920,4050120,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,71,71,"core","core",NA,NA,"Core" -"hit_2",4153149,4154442,"TIGR00418","thrS: threonine--tRNA ligase",2,72,72,"core","core",NA,NA,"Core" -NA,4193531,4194941,"Not_core","Biotin_lipoyl",1,73,73,"resistance","resistance",3.7e-23,80,"PF00364.17" -NA,4210795,4212271,"Not_core","Biotin_lipoyl",1,74,74,"resistance","resistance",5.5e-18,63.4,"PF00364.17" -NA,4260740,4263314,"Not_core","DNA_topoisoIV",1,75,75,"resistance","resistance",2.8e-148,493.3,"PF00521.15" -NA,4263377,4265438,"Not_core","DNA_gyraseB",1,76,76,"resistance","resistance",2.3e-61,205.1,"PF00204.20" -NA,4268712,4269843,"Not_core","TIGR00663",1,77,77,"resistance","resistance",8.7e-90,300.1,"TIGR00663" -"hit_2",4304257,4304494,"TIGR00165","S18: ribosomal protein bS18",2,78,78,"core","core",NA,NA,"Core" -"hit_2",4363347,4364685,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,79,79,"core","core",NA,NA,"Core" -"hit_2",4413741,4414275,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,80,80,"core","core",NA,NA,"Core" -NA,4684158,4684947,"Not_core","Pentapeptide_4",1,81,81,"resistance","resistance",3.4e-18,64.3,"PF13599.1" -NA,4795084,4796683,"Not_core","Carboxyl_trans",1,82,82,"resistance","resistance",6.3e-139,462.5,"PF01039.17" -NA,4796696,4798541,"Not_core","Biotin_lipoyl",1,83,83,"resistance","resistance",1.6e-14,52.4,"PF00364.17" -"hit_2",4977868,4978495,"TIGR00079","pept_deformyl: peptide deformylase",3,84,84,"core","core",NA,NA,"Core" -"hit_3",5061598,5061763,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,85,85,"core","core",NA,NA,"Core" -"hit_2",5068591,5069623,"TIGR01430","aden_deam: adenosine deaminase",5,86,86,"core","core",NA,NA,"Core" -NA,5078060,5081546,"Not_core","TIGR02013",1,87,87,"resistance","resistance",0,1814.6,"TIGR02013" -"hit_1",5089829,5091956,"TIGR00484","EF-G: translation elongation factor G",2,88,88,"core","core",NA,NA,"Core" -"hit_2",5092129,5093323,"TIGR00485","EF-Tu: translation elongation factor Tu",2,89,89,"core","core",NA,NA,"Core" -"hit_2",5134359,5134545,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,90,90,"core","core",NA,NA,"Core" -"hit_2",5153333,5155181,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,91,91,"core","core",NA,NA,"Core" -"hit_2",5172736,5173045,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,92,92,"core","core",NA,NA,"Core" -"hit_1",5269285,5270731,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,93,93,"core","core",NA,NA,"Core" -"hit_2",5271518,5272538,"TIGR00233","trpS: tryptophan--tRNA ligase",2,94,94,"core","core",NA,NA,"Core" -"hit_3",5334545,5335736,"TIGR01430","aden_deam: adenosine deaminase",5,95,95,"core","core",NA,NA,"Core" -NA,5355282,5357055,"Not_core","Biotin_lipoyl",1,96,96,"resistance","resistance",7.1e-17,59.9,"PF00364.17" -NA,5359017,5360610,"Not_core","Carboxyl_trans",1,97,97,"resistance","resistance",1.2e-199,662.9,"PF01039.17" -NA,5533652,5534546,"Not_core","ClassB",1,98,98,"resistance","resistance",7.1e-26,89.8,"RF0054" -"hit_2",5644428,5644671,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,99,99,"core","core",NA,NA,"Core" -"hit_1",5670248,5671262,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,100,100,"core","core",NA,NA,"Core" -"hit_1",5671274,5672591,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,101,101,"core","core",NA,NA,"Core" -"hit_3",5680106,5680757,"TIGR00079","pept_deformyl: peptide deformylase",3,102,102,"core","core",NA,NA,"Core" -"hit_3",5830019,5830244,"TIGR00105","L31: ribosomal protein bL31",3,103,103,"core","core",NA,NA,"Core" -"hit_1",5832393,5833041,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,104,104,"core","core",NA,NA,"Core" -"hit_2",5833805,5835062,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,105,105,"core","core",NA,NA,"Core" -"hit_1",5880227,5880572,"TIGR03954","integ_memb_HG: integral membrane protein",3,106,106,"core","core",NA,NA,"Core" -"hit_2",5883332,5883662,"TIGR03954","integ_memb_HG: integral membrane protein",3,107,107,"core","core",NA,NA,"Core" -"hit_2",5892974,5894405,"TIGR01064","pyruv_kin: pyruvate kinase",2,108,108,"core","core",NA,NA,"Core" -"hit_3",5955946,5957209,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,109,109,"core","core",NA,NA,"Core" -NA,5957223,5957601,"Not_core","Biotin_lipoyl",1,110,110,"resistance","resistance",2.1e-05,23.2,"PF00364.17" -"hit_1",5978784,5980992,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,111,111,"core","core",NA,NA,"Core" -"hit_1",6005642,6006641,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,112,112,"core","core",NA,NA,"Core" -NA,6031664,6033248,"Not_core","Carboxyl_trans",1,113,113,"resistance","resistance",1.5e-201,669,"PF01039.17" -"hit_2",6062058,6062244,"TIGR00009","L28: ribosomal protein bL28",2,114,114,"core","core",NA,NA,"Core" -"hit_2",6069793,6069967,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,115,115,"core","core",NA,NA,"Core" -"hit_1",6099895,6100675,"TIGR02227","sigpep_I_bact: signal peptidase I",4,116,116,"core","core",NA,NA,"Core" -"hit_2",6100667,6102008,"TIGR02227","sigpep_I_bact: signal peptidase I",4,117,117,"core","core",NA,NA,"Core" -"hit_3",6101640,6102651,"TIGR02227","sigpep_I_bact: signal peptidase I",4,118,118,"core","core",NA,NA,"Core" -"hit_4",6102755,6103532,"TIGR02227","sigpep_I_bact: signal peptidase I",4,119,119,"core","core",NA,NA,"Core" -"hit_4",6161551,6162715,"TIGR01430","aden_deam: adenosine deaminase",5,120,120,"core","core",NA,NA,"Core" -"hit_1",6206674,6207832,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,121,121,"core","core",NA,NA,"Core" -"hit_2",6266752,6267652,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,122,122,"core","core",NA,NA,"Core" -NA,6371005,6373129,"Not_core","DNA_gyraseB",1,123,123,"resistance","resistance",1.2e-50,170.1,"PF00204.20" -NA,6386423,6388880,"Not_core","DNA_topoisoIV",1,124,124,"resistance","resistance",7.1e-147,488.7,"PF00521.15" -"hit_3",6470908,6473452,"TIGR03954","integ_memb_HG: integral membrane protein",3,125,125,"core","core",NA,NA,"Core" -NA,6550398,6551406,"Not_core","OTCace",1,126,126,"resistance","resistance",3.7e-47,159.2,"PF00185.19" -"hit_1",6594925,6596854,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,127,127,"core","core",NA,NA,"Core" -"hit_2",6750130,6751231,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,128,128,"core","core",NA,NA,"Core" -"hit_2",6865735,6867358,"TIGR01344","malate_syn_A: malate synthase A",2,129,129,"core","core",NA,NA,"Core" -NA,6897088,6898861,"Not_core","Biotin_lipoyl",1,130,130,"resistance","resistance",7.1e-17,59.9,"PF00364.17" -NA,6943672,6945265,"Not_core","Carboxyl_trans",1,131,131,"resistance","resistance",1.9e-191,635.7,"PF01039.17" -"hit_2",7301062,7303123,"TIGR00484","EF-G: translation elongation factor G",2,132,132,"core","core",NA,NA,"Core" -"hit_4",7324762,7326169,"TIGR03356","BGL: beta-galactosidase",5,133,133,"core","core",NA,NA,"Core" -"hit_2",7396675,7397611,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,134,134,"core","core",NA,NA,"Core" -"hit_2",7397607,7399386,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,135,135,"core","core",NA,NA,"Core" -"hit_2",7399382,7400528,"TIGR00876","tal_mycobact: transaldolase",2,136,136,"core","core",NA,NA,"Core" -"hit_2",7524432,7525587,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,137,137,"core","core",NA,NA,"Core" -"hit_2",7525612,7527583,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,138,138,"core","core",NA,NA,"Core" -"hit_4",7560697,7561891,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,139,139,"core","core",NA,NA,"Core" -"hit_2",7580931,7582254,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,140,140,"core","core",NA,NA,"Core" -NA,7782660,7784535,"Not_core","ABC_efflux",1,141,141,"resistance","resistance",1.9e-80,269.8,"RF0007" -"hit_2",7832789,7834235,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,142,142,"core","core",NA,NA,"Core" -NA,7832789,7834235,"Not_core","Gp_dh_N",1,143,143,"resistance","resistance",4e-39,133,"PF00044.19" -"hit_1",7835927,7836392,"TIGR00494","crcB: protein CrcB",2,144,144,"core","core",NA,NA,"Core" -"hit_2",7836729,7837104,"TIGR00494","crcB: protein CrcB",2,145,145,"core","core",NA,NA,"Core" -"hit_2",7837143,7837980,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,146,146,"core","core",NA,NA,"Core" -NA,7913373,7914627,"Not_core","Biotin_lipoyl",1,147,147,"resistance","resistance",8.2e-23,78.9,"PF00364.17" -"hit_3",7914736,7917424,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,148,148,"core","core",NA,NA,"Core" -"hit_2",7947902,7948901,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,149,149,"core","core",NA,NA,"Core" -"hit_2",8041720,8043442,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,150,150,"core","core",NA,NA,"Core" -"hit_5",8077470,8078550,"TIGR01430","aden_deam: adenosine deaminase",5,151,151,"core","core",NA,NA,"Core" -"hit_2",8173118,8173721,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,152,152,"core","core",NA,NA,"Core" -"hit_3",8325356,8326355,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,153,153,"core","core",NA,NA,"Core" -NA,8325356,8326355,"Not_core","Gp_dh_N",1,154,154,"resistance","resistance",1.5e-53,179.9,"PF00044.19" -NA,8329971,8331888,"Not_core","HSP90",1,155,155,"resistance","resistance",9.9e-117,389.6,"PF00183.13" -"hit_2",8337388,8339560,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,156,156,"core","core",NA,NA,"Core" -NA,8345073,8346285,"Not_core","Chlor_Efflux_Pump",1,157,157,"resistance","resistance",1e-109,366.1,"RF0051" -"hit_5",8380678,8382118,"TIGR03356","BGL: beta-galactosidase",5,158,158,"core","core",NA,NA,"Core" -"hit_2",8466853,8468158,"TIGR01060","eno: phosphopyruvate hydratase",2,159,159,"core","core",NA,NA,"Core" -NA,8488517,8489696,"Not_core","Chlor_Efflux_Pump",1,160,160,"resistance","resistance",1.2e-124,415.2,"RF0051" -"hit_2",8641684,8642638,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,161,161,"core","core",NA,NA,"Core" diff --git a/inst/extdata/sco_deep.tsv b/inst/extdata/sco_deep.tsv deleted file mode 100644 index 37bcee4..0000000 --- a/inst/extdata/sco_deep.tsv +++ /dev/null @@ -1,173 +0,0 @@ -sequence_id detector detector_version detector_label bgc_candidate_id nucl_start nucl_end nucl_length num_proteins num_domains num_bio_domains deepbgc_score product_activity antibacterial cytotoxic inhibitor antifungal product_class Alkaloid NRP Other Polyketide RiPP Saccharide Terpene protein_ids bio_pfam_ids pfam_ids -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1143-9307.1 1143 9307 8164 4 8 0 0.55675 antibacterial 0.85 0.09 0.16 0.28 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_2;NC_003888.3_NC_003888.3_3;NC_003888.3_NC_003888.3_4;NC_003888.3_NC_003888.3_5 PF00270;PF04851;PF03457;PF06527;PF03457;PF13565;PF00665;PF09299 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_10406-33357.1 10406 33357 22951 24 27 1 0.69541 antibacterial 0.74 0.14 0.06 0.10 0.01 0.04 0.19 0.08 0.40 0.21 0.07 NC_003888.3_NC_003888.3_7;NC_003888.3_NC_003888.3_8;NC_003888.3_NC_003888.3_9;NC_003888.3_NC_003888.3_10;NC_003888.3_NC_003888.3_11;NC_003888.3_NC_003888.3_12;NC_003888.3_NC_003888.3_13;NC_003888.3_NC_003888.3_14;NC_003888.3_NC_003888.3_15;NC_003888.3_NC_003888.3_16;NC_003888.3_NC_003888.3_17;NC_003888.3_NC_003888.3_18;NC_003888.3_NC_003888.3_19;NC_003888.3_NC_003888.3_20;NC_003888.3_NC_003888.3_21;NC_003888.3_NC_003888.3_22;NC_003888.3_NC_003888.3_23;NC_003888.3_NC_003888.3_24;NC_003888.3_NC_003888.3_25;NC_003888.3_NC_003888.3_26;NC_003888.3_NC_003888.3_27;NC_003888.3_NC_003888.3_28;NC_003888.3_NC_003888.3_29;NC_003888.3_NC_003888.3_30 PF04101 PF06527;PF06965;PF00999;PF01590;PF13492;PF03861;PF14690;PF01610;PF01695;PF01695;PF13555;PF13191;PF13304;PF12079;PF00932;PF03984;PF13088;PF03457;PF12680;PF08281;PF04545;PF04542;PF01734;PF13579;PF13439;PF00201;PF04101 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_37613-39812.1 37613 39812 2199 3 6 0 0.54026 antibacterial 0.73 0.15 0.13 0.28 0.00 0.18 0.27 0.31 0.15 0.01 0.10 NC_003888.3_NC_003888.3_36;NC_003888.3_NC_003888.3_37;NC_003888.3_NC_003888.3_38 PF13463;PF12802;PF01047;PF01978;PF12697;PF03861 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_45266-121371.1 45266 121371 76105 55 118 11 0.83590 0.49 0.32 0.22 0.19 Polyketide 0.05 0.14 0.15 0.67 0.08 0.02 0.05 NC_003888.3_NC_003888.3_46;NC_003888.3_NC_003888.3_47;NC_003888.3_NC_003888.3_48;NC_003888.3_NC_003888.3_49;NC_003888.3_NC_003888.3_50;NC_003888.3_NC_003888.3_51;NC_003888.3_NC_003888.3_52;NC_003888.3_NC_003888.3_53;NC_003888.3_NC_003888.3_54;NC_003888.3_NC_003888.3_55;NC_003888.3_NC_003888.3_56;NC_003888.3_NC_003888.3_57;NC_003888.3_NC_003888.3_58;NC_003888.3_NC_003888.3_59;NC_003888.3_NC_003888.3_60;NC_003888.3_NC_003888.3_61;NC_003888.3_NC_003888.3_62;NC_003888.3_NC_003888.3_63;NC_003888.3_NC_003888.3_64;NC_003888.3_NC_003888.3_65;NC_003888.3_NC_003888.3_66;NC_003888.3_NC_003888.3_67;NC_003888.3_NC_003888.3_68;NC_003888.3_NC_003888.3_69;NC_003888.3_NC_003888.3_70;NC_003888.3_NC_003888.3_71;NC_003888.3_NC_003888.3_72;NC_003888.3_NC_003888.3_73;NC_003888.3_NC_003888.3_74;NC_003888.3_NC_003888.3_75;NC_003888.3_NC_003888.3_76;NC_003888.3_NC_003888.3_77;NC_003888.3_NC_003888.3_78;NC_003888.3_NC_003888.3_79;NC_003888.3_NC_003888.3_80;NC_003888.3_NC_003888.3_81;NC_003888.3_NC_003888.3_82;NC_003888.3_NC_003888.3_83;NC_003888.3_NC_003888.3_84;NC_003888.3_NC_003888.3_85;NC_003888.3_NC_003888.3_86;NC_003888.3_NC_003888.3_87;NC_003888.3_NC_003888.3_88;NC_003888.3_NC_003888.3_89;NC_003888.3_NC_003888.3_90;NC_003888.3_NC_003888.3_91;NC_003888.3_NC_003888.3_92;NC_003888.3_NC_003888.3_93;NC_003888.3_NC_003888.3_94;NC_003888.3_NC_003888.3_95;NC_003888.3_NC_003888.3_96;NC_003888.3_NC_003888.3_97;NC_003888.3_NC_003888.3_98;NC_003888.3_NC_003888.3_99;NC_003888.3_NC_003888.3_100 PF01266;PF02801;PF00106;PF08240;PF08659;PF00698;PF00109;PF01243;PF07993;PF00107;PF01370 PF08240;PF00208;PF00107;PF13602;PF13602;PF06824;PF13377;PF00532;PF13407;PF00356;PF00480;PF01547;PF13416;PF00528;PF00528;PF03663;PF01074;PF07748;PF05593;PF12802;PF13340;PF06779;PF07690;PF00083;PF12832;PF08974;PF13586;PF01609;PF13340;PF01609;PF13586;PF01068;PF03747;PF12706;PF13483;PF00753;PF13354;PF00144;PF00126;PF03466;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF13683;PF00665;PF13276;PF13565;PF01527;PF13011;PF13551;PF13518;PF13384;PF13586;PF01609;PF13340;PF13340;PF10946;PF00042;PF00970;PF00175;PF01243;PF00457;PF13340;PF13560;PF00106;PF01370;PF08659;PF13561;PF13340;PF00440;PF00106;PF01370;PF13561;PF13460;PF04616;PF14028;PF12698;PF00005;PF13191;PF13304;PF13476;PF00743;PF07992;PF13738;PF13450;PF01266;PF13434;PF06974;PF03007;PF01370;PF07993;PF16363;PF01073;PF03060;PF01645;PF00109;PF02801;PF16197;PF00698;PF00550;PF08659;PF00106;PF13561;PF01073;PF14765;PF00109;PF02801;PF16197;PF00698;PF07977;PF00753;PF12706 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_122742-128290.1 122742 128290 5548 4 8 1 0.53313 antibacterial 0.58 0.05 0.07 0.34 0.00 0.38 0.29 0.15 0.12 0.01 0.06 NC_003888.3_NC_003888.3_102;NC_003888.3_NC_003888.3_103;NC_003888.3_NC_003888.3_104;NC_003888.3_NC_003888.3_105 PF00561 PF13191;PF13401;PF00196;PF13384;PF12146;PF00561;PF12697;PF12695 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_170910-191657.1 170910 191657 20747 19 75 11 0.66526 cytotoxic 0.23 0.63 0.12 0.08 Terpene 0.09 0.02 0.05 0.11 0.01 0.09 0.71 NC_003888.3_NC_003888.3_149;NC_003888.3_NC_003888.3_150;NC_003888.3_NC_003888.3_151;NC_003888.3_NC_003888.3_152;NC_003888.3_NC_003888.3_153;NC_003888.3_NC_003888.3_154;NC_003888.3_NC_003888.3_155;NC_003888.3_NC_003888.3_156;NC_003888.3_NC_003888.3_157;NC_003888.3_NC_003888.3_158;NC_003888.3_NC_003888.3_159;NC_003888.3_NC_003888.3_160;NC_003888.3_NC_003888.3_161;NC_003888.3_NC_003888.3_162;NC_003888.3_NC_003888.3_163;NC_003888.3_NC_003888.3_164;NC_003888.3_NC_003888.3_165;NC_003888.3_NC_003888.3_166;NC_003888.3_NC_003888.3_167 PF01266;PF08242;PF00494;PF08240;PF01494;PF08241;PF00348;PF02737;PF00107;PF00355;PF01593 PF11066;PF03441;PF04244;PF00348;PF13738;PF01266;PF01946;PF03486;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF01593;PF01266;PF13450;PF12831;PF00890;PF03486;PF00070;PF01946;PF07992;PF01262;PF01134;PF02737;PF01494;PF01209;PF13489;PF13847;PF13578;PF08241;PF08242;PF13649;PF05175;PF05834;PF07992;PF01266;PF00890;PF13450;PF01593;PF01266;PF13450;PF01946;PF12831;PF03486;PF00890;PF05834;PF07992;PF01494;PF01134;PF02310;PF02607;PF13411;PF12728;PF13518;PF00376;PF13384;PF01527;PF04542;PF08281;PF04545;PF13412;PF14344;PF10099;PF12900;PF00582;PF13602;PF00107;PF01262;PF08240;PF00582;PF07681 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_194759-195461.1 194759 195461 702 1 6 0 0.50176 antibacterial 0.81 0.07 0.10 0.20 0.00 0.06 0.15 0.31 0.35 0.01 0.17 NC_003888.3_NC_003888.3_170 PF00196;PF08281;PF04545;PF13412;PF13936;PF00072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_211747-220764.1 211747 220764 9017 10 16 4 0.74452 antibacterial 0.67 0.13 0.25 0.24 Polyketide 0.02 0.05 0.12 0.61 0.05 0.04 0.16 NC_003888.3_NC_003888.3_183;NC_003888.3_NC_003888.3_184;NC_003888.3_NC_003888.3_185;NC_003888.3_NC_003888.3_186;NC_003888.3_NC_003888.3_187;NC_003888.3_NC_003888.3_188;NC_003888.3_NC_003888.3_189;NC_003888.3_NC_003888.3_190;NC_003888.3_NC_003888.3_191;NC_003888.3_NC_003888.3_192 PF00583;PF00106;PF01370;PF08659 PF02613;PF02665;PF12680;PF14534;PF07366;PF13586;PF13302;PF00583;PF14027;PF02909;PF08659;PF01370;PF00106;PF13561;PF13460;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_245985-247869.1 245985 247869 1884 2 4 2 0.52321 antibacterial 0.82 0.07 0.18 0.12 Terpene 0.01 0.03 0.01 0.06 0.38 0.00 0.51 NC_003888.3_NC_003888.3_217;NC_003888.3_NC_003888.3_218 PF00106;PF08659 PF00106;PF08659;PF13561;PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_248676-249702.1 248676 249702 1026 1 3 2 0.53282 inhibitor 0.29 0.05 0.66 0.06 Polyketide 0.00 0.20 0.05 0.80 0.01 0.00 0.01 NC_003888.3_NC_003888.3_220 PF00107;PF08240 PF08240;PF00107;PF13602 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_251763-262319.1 251763 262319 10556 9 20 6 0.71258 antibacterial 0.78 0.11 0.08 0.15 RiPP 0.01 0.15 0.12 0.17 0.53 0.04 0.01 NC_003888.3_NC_003888.3_224;NC_003888.3_NC_003888.3_225;NC_003888.3_NC_003888.3_226;NC_003888.3_NC_003888.3_227;NC_003888.3_NC_003888.3_228;NC_003888.3_NC_003888.3_229;NC_003888.3_NC_003888.3_230;NC_003888.3_NC_003888.3_231;NC_003888.3_NC_003888.3_232 PF00903;PF00975;PF01408;PF05147;PF00561;PF04738 PF01408;PF01978;PF12802;PF01047;PF13412;PF09339;PF00392;PF13545;PF00903;PF12833;PF00561;PF00975;PF12697;PF12146;PF12695;PF07819;PF04738;PF14028;PF05147;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_297514-309131.1 297514 309131 11617 9 13 2 0.61725 antibacterial 0.60 0.06 0.04 0.18 0.00 0.35 0.24 0.32 0.09 0.01 0.02 NC_003888.3_NC_003888.3_263;NC_003888.3_NC_003888.3_264;NC_003888.3_NC_003888.3_265;NC_003888.3_NC_003888.3_266;NC_003888.3_NC_003888.3_267;NC_003888.3_NC_003888.3_268;NC_003888.3_NC_003888.3_269;NC_003888.3_NC_003888.3_270;NC_003888.3_NC_003888.3_271 PF00501;PF00903 PF00440;PF12681;PF00903;PF08937;PF13676;PF12697;PF13560;PF01381;PF00144;PF14278;PF00440;PF00501;PF13193 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_320109-322255.1 320109 322255 2146 2 5 1 0.56163 antibacterial 0.54 0.10 0.38 0.14 Polyketide 0.04 0.14 0.12 0.57 0.12 0.00 0.08 NC_003888.3_NC_003888.3_279;NC_003888.3_NC_003888.3_280 PF00107 PF00107;PF13602;PF00135;PF07859;PF00326 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_329437-331365.1 329437 331365 1928 3 6 0 0.55903 antibacterial 0.75 0.05 0.15 0.31 0.00 0.13 0.08 0.31 0.20 0.03 0.30 NC_003888.3_NC_003888.3_286;NC_003888.3_NC_003888.3_287;NC_003888.3_NC_003888.3_288 PF13340;PF01609;PF13359;PF13612;PF13586;PF00144 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_332310-341318.1 332310 341318 9008 7 15 3 0.58710 antibacterial 0.81 0.07 0.15 0.33 Polyketide 0.01 0.03 0.06 0.76 0.02 0.00 0.14 NC_003888.3_NC_003888.3_290;NC_003888.3_NC_003888.3_291;NC_003888.3_NC_003888.3_292;NC_003888.3_NC_003888.3_293;NC_003888.3_NC_003888.3_294;NC_003888.3_NC_003888.3_295;NC_003888.3_NC_003888.3_296 PF00106;PF01370;PF08659 PF00106;PF08659;PF01370;PF13561;PF13460;PF00440;PF13022;PF16859;PF03055;PF10518;PF14200;PF00754;PF03435;PF13460;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_345816-347706.1 345816 347706 1890 1 2 0 0.60335 antibacterial 0.87 0.06 0.17 0.26 0.00 0.08 0.04 0.28 0.19 0.18 0.28 NC_003888.3_NC_003888.3_301 PF13229;PF05048 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_349418-351352.1 349418 351352 1934 2 5 0 0.52089 antibacterial 0.85 0.09 0.17 0.24 0.00 0.09 0.19 0.28 0.20 0.02 0.27 NC_003888.3_NC_003888.3_303;NC_003888.3_NC_003888.3_304 PF01614;PF12802;PF09339;PF07436;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_353791-355686.1 353791 355686 1895 2 2 1 0.52221 antibacterial 0.92 0.10 0.05 0.21 Terpene 0.05 0.09 0.04 0.15 0.06 0.02 0.61 NC_003888.3_NC_003888.3_307;NC_003888.3_NC_003888.3_308 PF00248 PF00248;PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_364558-366795.1 364558 366795 2237 2 4 0 0.52680 antibacterial 0.81 0.07 0.22 0.24 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_318;NC_003888.3_NC_003888.3_319 PF13377;PF00532;PF00356;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_370065-372478.1 370065 372478 2413 3 9 4 0.57281 antibacterial 0.76 0.04 0.19 0.36 Polyketide 0.01 0.03 0.01 0.92 0.02 0.03 0.02 NC_003888.3_NC_003888.3_323;NC_003888.3_NC_003888.3_324;NC_003888.3_NC_003888.3_325 PF02737;PF00106;PF01370;PF08659 PF00106;PF01370;PF08659;PF03435;PF05368;PF02737;PF13561;PF14486;PF06912 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_395938-429403.1 395938 429403 33465 28 74 19 0.94701 0.48 0.29 0.29 0.22 Saccharide 0.02 0.03 0.20 0.06 0.00 0.69 0.01 NC_003888.3_NC_003888.3_339;NC_003888.3_NC_003888.3_340;NC_003888.3_NC_003888.3_341;NC_003888.3_NC_003888.3_342;NC_003888.3_NC_003888.3_343;NC_003888.3_NC_003888.3_344;NC_003888.3_NC_003888.3_345;NC_003888.3_NC_003888.3_346;NC_003888.3_NC_003888.3_347;NC_003888.3_NC_003888.3_348;NC_003888.3_NC_003888.3_349;NC_003888.3_NC_003888.3_350;NC_003888.3_NC_003888.3_351;NC_003888.3_NC_003888.3_352;NC_003888.3_NC_003888.3_353;NC_003888.3_NC_003888.3_354;NC_003888.3_NC_003888.3_355;NC_003888.3_NC_003888.3_356;NC_003888.3_NC_003888.3_357;NC_003888.3_NC_003888.3_358;NC_003888.3_NC_003888.3_359;NC_003888.3_NC_003888.3_360;NC_003888.3_NC_003888.3_361;NC_003888.3_NC_003888.3_362;NC_003888.3_NC_003888.3_363;NC_003888.3_NC_003888.3_364;NC_003888.3_NC_003888.3_365;NC_003888.3_NC_003888.3_366 PF08242;PF02585;PF00107;PF01370;PF00202;PF01408;PF03720;PF03721;PF00535;PF08241;PF00534;PF08421;PF00908;PF04321;PF00984;PF02706;PF00702;PF02397;PF08484 PF13727;PF02397;PF03721;PF01262;PF00984;PF03720;PF13477;PF13579;PF13439;PF00534;PF13692;PF13524;PF02706;PF02706;PF13522;PF13537;PF12481;PF00733;PF03054;PF02826;PF02254;PF00107;PF01408;PF03447;PF16889;PF05426;PF07940;PF13229;PF05048;PF13439;PF13579;PF00534;PF13692;PF13524;PF08421;PF13489;PF08242;PF08241;PF08484;PF12804;PF02585;PF04321;PF01370;PF16363;PF13460;PF01073;PF16254;PF09940;PF04389;PF16221;PF13641;PF00535;PF10111;PF13704;PF04230;PF00908;PF00202;PF01569;PF14378;PF11706;PF07336;PF00702;PF13419;PF13242;PF04672;PF13646;PF00376;PF13411;PF09278;PF13646;PF13489;PF08241;PF08242;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_431961-437224.1 431961 437224 5263 7 11 2 0.66524 inhibitor 0.31 0.09 0.53 0.10 Polyketide 0.00 0.18 0.17 0.69 0.02 0.00 0.01 NC_003888.3_NC_003888.3_371;NC_003888.3_NC_003888.3_372;NC_003888.3_NC_003888.3_373;NC_003888.3_NC_003888.3_374;NC_003888.3_NC_003888.3_375;NC_003888.3_NC_003888.3_376;NC_003888.3_NC_003888.3_377 PF00107;PF08240 PF05719;PF12680;PF14534;PF08281;PF04542;PF06197;PF08894;PF01872;PF08240;PF00107;PF13602 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_438996-446144.1 438996 446144 7148 6 13 1 0.58250 antibacterial 0.63 0.07 0.09 0.28 0.00 0.35 0.23 0.27 0.10 0.01 0.04 NC_003888.3_NC_003888.3_380;NC_003888.3_NC_003888.3_381;NC_003888.3_NC_003888.3_382;NC_003888.3_NC_003888.3_383;NC_003888.3_NC_003888.3_384;NC_003888.3_NC_003888.3_385 PF00561 PF02518;PF13581;PF07730;PF03176;PF00873;PF12349;PF14100;PF03403;PF00561;PF12146;PF12697;PF00440;PF13305 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_466428-467909.1 466428 467909 1481 2 4 0 0.51567 antibacterial-antifungal 0.78 0.02 0.18 0.60 Polyketide 0.02 0.01 0.04 0.90 0.03 0.00 0.01 NC_003888.3_NC_003888.3_405;NC_003888.3_NC_003888.3_406 PF07690;PF00083;PF07690;PF05977 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_490450-492881.1 490450 492881 2431 3 8 2 0.60069 antibacterial 0.52 0.16 0.10 0.38 0.00 0.40 0.16 0.36 0.05 0.02 0.03 NC_003888.3_NC_003888.3_428;NC_003888.3_NC_003888.3_429;NC_003888.3_NC_003888.3_430 PF00975;PF00561 PF02627;PF00561;PF00975;PF12697;PF12146;PF00756;PF12833;PF00165 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_497374-537512.1 497374 537512 40138 29 71 6 0.82418 0.45 0.46 0.14 0.14 NRP 0.03 0.84 0.07 0.03 0.02 0.02 0.01 NC_003888.3_NC_003888.3_435;NC_003888.3_NC_003888.3_436;NC_003888.3_NC_003888.3_437;NC_003888.3_NC_003888.3_438;NC_003888.3_NC_003888.3_439;NC_003888.3_NC_003888.3_440;NC_003888.3_NC_003888.3_441;NC_003888.3_NC_003888.3_442;NC_003888.3_NC_003888.3_443;NC_003888.3_NC_003888.3_444;NC_003888.3_NC_003888.3_445;NC_003888.3_NC_003888.3_446;NC_003888.3_NC_003888.3_447;NC_003888.3_NC_003888.3_448;NC_003888.3_NC_003888.3_449;NC_003888.3_NC_003888.3_450;NC_003888.3_NC_003888.3_451;NC_003888.3_NC_003888.3_452;NC_003888.3_NC_003888.3_453;NC_003888.3_NC_003888.3_454;NC_003888.3_NC_003888.3_455;NC_003888.3_NC_003888.3_456;NC_003888.3_NC_003888.3_457;NC_003888.3_NC_003888.3_458;NC_003888.3_NC_003888.3_459;NC_003888.3_NC_003888.3_460;NC_003888.3_NC_003888.3_461;NC_003888.3_NC_003888.3_462;NC_003888.3_NC_003888.3_463 PF01266;PF00903;PF01494;PF00668;PF00501;PF00561 PF00005;PF13175;PF13555;PF13476;PF13304;PF00903;PF13669;PF12902;PF00459;PF03067;PF00182;PF01494;PF01266;PF01262;PF03486;PF13450;PF07992;PF13738;PF00440;PF01494;PF12802;PF13463;PF09339;PF01047;PF02082;PF08531;PF05592;PF17389;PF17390;PF03621;PF11806;PF00756;PF00561;PF00005;PF00664;PF00550;PF00668;PF13193;PF00501;PF00005;PF00664;PF01497;PF13191;PF13604;PF00005;PF13238;PF13175;PF13401;PF02456;PF13555;PF13304;PF09818;PF13476;PF01032;PF01032;PF07992;PF13434;PF13454;PF00551;PF00148;PF13439;PF02911;PF17227;PF08530;PF02129;PF04123;PF09656;PF12740;PF07224;PF12697;PF03403 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_539122-542131.1 539122 542131 3009 1 4 0 0.59738 antibacterial 0.86 0.06 0.16 0.27 0.00 0.09 0.07 0.32 0.21 0.04 0.31 NC_003888.3_NC_003888.3_465 PF07691;PF16990;PF03422;PF06439 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_543544-544087.1 543544 544087 543 1 1 0 0.54283 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_468 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_548967-549621.1 548967 549621 654 1 2 0 0.52716 antibacterial 0.87 0.07 0.17 0.26 0.00 0.10 0.07 0.33 0.21 0.03 0.31 NC_003888.3_NC_003888.3_474 PF12867;PF11716 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_586986-589546.1 586986 589546 2560 3 5 4 0.65291 antibacterial 0.60 0.07 0.26 0.20 Polyketide 0.00 0.35 0.03 0.77 0.00 0.00 0.17 NC_003888.3_NC_003888.3_506;NC_003888.3_NC_003888.3_507;NC_003888.3_NC_003888.3_508 PF00698;PF02801;PF00108;PF00109 PF00698;PF02801;PF00109;PF00108;PF00550 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_605121-610356.1 605121 610356 5235 5 8 1 0.58996 0.49 0.02 0.40 0.20 Polyketide-Terpene 0.00 0.03 0.00 0.79 0.00 0.02 0.91 NC_003888.3_NC_003888.3_522;NC_003888.3_NC_003888.3_523;NC_003888.3_NC_003888.3_524;NC_003888.3_NC_003888.3_525;NC_003888.3_NC_003888.3_526 PF00348 PF13360;PF13570;PF05406;PF09995;PF00348;PF13340;PF01609;PF13586 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_618787-637824.1 618787 637824 19037 20 39 3 0.75081 0.40 0.37 0.23 0.09 0.01 0.05 0.43 0.12 0.14 0.03 0.26 NC_003888.3_NC_003888.3_536;NC_003888.3_NC_003888.3_537;NC_003888.3_NC_003888.3_538;NC_003888.3_NC_003888.3_539;NC_003888.3_NC_003888.3_540;NC_003888.3_NC_003888.3_541;NC_003888.3_NC_003888.3_542;NC_003888.3_NC_003888.3_543;NC_003888.3_NC_003888.3_544;NC_003888.3_NC_003888.3_545;NC_003888.3_NC_003888.3_546;NC_003888.3_NC_003888.3_547;NC_003888.3_NC_003888.3_548;NC_003888.3_NC_003888.3_549;NC_003888.3_NC_003888.3_550;NC_003888.3_NC_003888.3_551;NC_003888.3_NC_003888.3_552;NC_003888.3_NC_003888.3_553;NC_003888.3_NC_003888.3_554;NC_003888.3_NC_003888.3_555 PF08241;PF08242;PF00067 PF01261;PF00121;PF02502;PF02734;PF02733;PF00083;PF07690;PF03825;PF00392;PF13545;PF09339;PF07729;PF00067;PF00067;PF03029;PF00071;PF00025;PF00009;PF08477;PF05331;PF03259;PF02518;PF03466;PF00126;PF02567;PF05544;PF01183;PF00941;PF13489;PF13847;PF05401;PF01209;PF08241;PF05175;PF08242;PF13649;PF03358;PF02525;PF00210 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_680495-696168.1 680495 696168 15673 20 43 8 0.78120 0.44 0.38 0.24 0.14 Polyketide 0.02 0.17 0.12 0.70 0.04 0.02 0.07 NC_003888.3_NC_003888.3_597;NC_003888.3_NC_003888.3_598;NC_003888.3_NC_003888.3_599;NC_003888.3_NC_003888.3_600;NC_003888.3_NC_003888.3_601;NC_003888.3_NC_003888.3_602;NC_003888.3_NC_003888.3_603;NC_003888.3_NC_003888.3_604;NC_003888.3_NC_003888.3_605;NC_003888.3_NC_003888.3_606;NC_003888.3_NC_003888.3_607;NC_003888.3_NC_003888.3_608;NC_003888.3_NC_003888.3_609;NC_003888.3_NC_003888.3_610;NC_003888.3_NC_003888.3_611;NC_003888.3_NC_003888.3_612;NC_003888.3_NC_003888.3_613;NC_003888.3_NC_003888.3_614;NC_003888.3_NC_003888.3_615;NC_003888.3_NC_003888.3_616 PF08242;PF00106;PF08240;PF08659;PF08241;PF00107;PF01370;PF03364 PF01435;PF03965;PF01978;PF12802;PF02342;PF13424;PF07719;PF03067;PF09362;PF13602;PF00107;PF08240;PF00440;PF16859;PF00106;PF01370;PF08659;PF13561;PF13460;PF01135;PF02353;PF06325;PF13489;PF05724;PF01728;PF01209;PF13847;PF05401;PF13649;PF08241;PF08242;PF05148;PF05800;PF00741;PF06386;PF05120;PF10604;PF03364;PF08327;PF00741;PF06386;PF00741;PF05121 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_720031-722964.1 720031 722964 2933 4 7 0 0.56907 inhibitor 0.24 0.02 0.70 0.14 0.02 0.22 0.06 0.34 0.27 0.01 0.09 NC_003888.3_NC_003888.3_635;NC_003888.3_NC_003888.3_636;NC_003888.3_NC_003888.3_637;NC_003888.3_NC_003888.3_638 PF01374;PF05532;PF07690;PF06609;PF00083;PF06779;PF05977 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_736311-749279.1 736311 749279 12968 16 19 0 0.69926 antibacterial 0.63 0.14 0.08 0.10 RiPP 0.00 0.01 0.10 0.04 0.85 0.00 0.00 NC_003888.3_NC_003888.3_652;NC_003888.3_NC_003888.3_653;NC_003888.3_NC_003888.3_654;NC_003888.3_NC_003888.3_655;NC_003888.3_NC_003888.3_656;NC_003888.3_NC_003888.3_657;NC_003888.3_NC_003888.3_658;NC_003888.3_NC_003888.3_659;NC_003888.3_NC_003888.3_660;NC_003888.3_NC_003888.3_661;NC_003888.3_NC_003888.3_662;NC_003888.3_NC_003888.3_663;NC_003888.3_NC_003888.3_664;NC_003888.3_NC_003888.3_665;NC_003888.3_NC_003888.3_666;NC_003888.3_NC_003888.3_667 PF14404;PF10027;PF01965;PF00165;PF17196;PF02463;PF13191;PF00005;PF13555;PF03193;PF00664;PF02518;PF13581;PF04149;PF04672;PF13458;PF13433;PF02653;PF02653 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_753317-757246.1 753317 757246 3929 2 9 0 0.50999 antibacterial 0.69 0.07 0.13 0.31 0.00 0.23 0.13 0.43 0.15 0.02 0.07 NC_003888.3_NC_003888.3_672;NC_003888.3_NC_003888.3_673 PF00196;PF13384;PF13936;PF13424;PF12697;PF12695;PF01738;PF03403;PF12146 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_797776-809813.1 797776 809813 12037 10 28 2 0.70473 0.47 0.32 0.32 0.05 RiPP 0.00 0.07 0.13 0.02 0.71 0.01 0.06 NC_003888.3_NC_003888.3_716;NC_003888.3_NC_003888.3_717;NC_003888.3_NC_003888.3_718;NC_003888.3_NC_003888.3_719;NC_003888.3_NC_003888.3_720;NC_003888.3_NC_003888.3_721;NC_003888.3_NC_003888.3_722;NC_003888.3_NC_003888.3_723;NC_003888.3_NC_003888.3_724;NC_003888.3_NC_003888.3_725 PF08241;PF08242 PF12385;PF03412;PF00664;PF00005;PF02463;PF00664;PF00005;PF13191;PF02463;PF02541;PF14518;PF05175;PF06325;PF13489;PF12847;PF03602;PF13847;PF13649;PF08241;PF08242;PF01170;PF09360;PF00720;PF01070;PF00478;PF01645;PF00652;PF14200 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_815933-824058.1 815933 824058 8125 9 20 2 0.76996 antibacterial 0.66 0.05 0.06 0.08 Polyketide 0.12 0.00 0.12 0.51 0.10 0.02 0.31 NC_003888.3_NC_003888.3_728;NC_003888.3_NC_003888.3_729;NC_003888.3_NC_003888.3_730;NC_003888.3_NC_003888.3_731;NC_003888.3_NC_003888.3_732;NC_003888.3_NC_003888.3_733;NC_003888.3_NC_003888.3_734;NC_003888.3_NC_003888.3_735;NC_003888.3_NC_003888.3_736 PF00067;PF00248 PF00989;PF13188;PF08448;PF13426;PF13185;PF01590;PF07228;PF13581;PF14016;PF00248;PF02441;PF07080;PF12680;PF14534;PF00440;PF06902;PF13459;PF13370;PF00067;PF04075 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_847648-849232.1 847648 849232 1584 1 1 1 0.68118 antibacterial 0.94 0.00 0.04 0.01 Polyketide-Terpene 0.00 0.00 0.07 0.62 0.00 0.00 0.75 NC_003888.3_NC_003888.3_762 PF00067 PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_943850-964941.1 943850 964941 21091 21 45 5 0.76853 0.49 0.13 0.13 0.31 0.03 0.12 0.21 0.17 0.24 0.21 0.02 NC_003888.3_NC_003888.3_861;NC_003888.3_NC_003888.3_862;NC_003888.3_NC_003888.3_863;NC_003888.3_NC_003888.3_864;NC_003888.3_NC_003888.3_865;NC_003888.3_NC_003888.3_866;NC_003888.3_NC_003888.3_867;NC_003888.3_NC_003888.3_868;NC_003888.3_NC_003888.3_869;NC_003888.3_NC_003888.3_870;NC_003888.3_NC_003888.3_871;NC_003888.3_NC_003888.3_872;NC_003888.3_NC_003888.3_873;NC_003888.3_NC_003888.3_874;NC_003888.3_NC_003888.3_875;NC_003888.3_NC_003888.3_876;NC_003888.3_NC_003888.3_877;NC_003888.3_NC_003888.3_878;NC_003888.3_NC_003888.3_879;NC_003888.3_NC_003888.3_880;NC_003888.3_NC_003888.3_881 PF00903;PF01488;PF01243;PF02737;PF00561 PF03704;PF13424;PF13432;PF14559;PF00486;PF00561;PF12697;PF12146;PF05977;PF07690;PF13347;PF00903;PF03551;PF10070;PF03176;PF12900;PF01243;PF14833;PF03446;PF13579;PF07991;PF02826;PF02423;PF03807;PF02558;PF01488;PF01210;PF02737;PF02452;PF10021;PF04107;PF12867;PF03781;PF13230;PF13522;PF10017;PF13416;PF01547;PF07311;PF03767;PF12710;PF00296;PF00005;PF13555;PF13191 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1048129-1049368.1 1048129 1049368 1239 1 2 0 0.53429 antibacterial 0.87 0.06 0.16 0.25 0.00 0.08 0.24 0.23 0.20 0.04 0.27 NC_003888.3_NC_003888.3_954 PF02655;PF13535 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1050594-1054583.1 1050594 1054583 3989 4 26 2 0.68095 antibacterial 0.54 0.42 0.15 0.02 RiPP 0.01 0.07 0.15 0.07 0.66 0.01 0.04 NC_003888.3_NC_003888.3_956;NC_003888.3_NC_003888.3_957;NC_003888.3_NC_003888.3_958;NC_003888.3_NC_003888.3_959 PF08241;PF08242 PF02475;PF05401;PF02353;PF13489;PF05724;PF01135;PF01728;PF05175;PF01209;PF13847;PF03848;PF00398;PF13649;PF08241;PF08242;PF01497;PF01032;PF00950;PF00005;PF13604;PF13191;PF13555;PF02463;PF13175;PF13304;PF13476 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1058376-1058961.1 1058376 1058961 585 1 2 0 0.53564 antibacterial 0.59 0.05 0.12 0.19 0.00 0.05 0.46 0.17 0.14 0.03 0.19 NC_003888.3_NC_003888.3_963 PF00440;PF16859 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1222187-1222787.1 1222187 1222787 600 1 8 2 0.57647 0.43 0.38 0.24 0.03 Other 0.00 0.00 0.56 0.04 0.14 0.00 0.26 NC_003888.3_NC_003888.3_1119 PF08241;PF08242 PF01135;PF13489;PF01209;PF13847;PF08003;PF13649;PF08241;PF08242 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1275829-1279960.1 1275829 1279960 4131 4 7 4 0.63375 antibacterial 0.61 0.02 0.04 0.21 Terpene 0.00 0.04 0.15 0.10 0.00 0.01 0.77 NC_003888.3_NC_003888.3_1162;NC_003888.3_NC_003888.3_1163;NC_003888.3_NC_003888.3_1164;NC_003888.3_NC_003888.3_1165 PF08545;PF00171;PF00067;PF08541 PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1281883-1282540.1 1281883 1282540 657 1 1 0 0.50955 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1168 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1314725-1314968.1 1314725 1314968 243 1 1 0 0.66569 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_1201 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1319886-1320564.1 1319886 1320564 678 1 6 2 0.62377 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_1206 PF08241;PF08242 PF13489;PF13847;PF13649;PF08241;PF08242;PF01209 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1324335-1326727.1 1324335 1326727 2392 2 4 0 0.51368 antibacterial 0.87 0.06 0.18 0.25 0.00 0.06 0.12 0.36 0.20 0.02 0.28 NC_003888.3_NC_003888.3_1212;NC_003888.3_NC_003888.3_1213 PF00657;PF13472;PF00206;PF10397 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1327990-1363153.1 1327990 1363153 35163 34 86 17 0.83900 antibacterial 0.66 0.40 0.12 0.04 Polyketide 0.00 0.23 0.12 0.57 0.09 0.10 0.05 NC_003888.3_NC_003888.3_1216;NC_003888.3_NC_003888.3_1217;NC_003888.3_NC_003888.3_1218;NC_003888.3_NC_003888.3_1219;NC_003888.3_NC_003888.3_1220;NC_003888.3_NC_003888.3_1221;NC_003888.3_NC_003888.3_1222;NC_003888.3_NC_003888.3_1223;NC_003888.3_NC_003888.3_1224;NC_003888.3_NC_003888.3_1225;NC_003888.3_NC_003888.3_1226;NC_003888.3_NC_003888.3_1227;NC_003888.3_NC_003888.3_1228;NC_003888.3_NC_003888.3_1229;NC_003888.3_NC_003888.3_1230;NC_003888.3_NC_003888.3_1231;NC_003888.3_NC_003888.3_1232;NC_003888.3_NC_003888.3_1233;NC_003888.3_NC_003888.3_1234;NC_003888.3_NC_003888.3_1235;NC_003888.3_NC_003888.3_1236;NC_003888.3_NC_003888.3_1237;NC_003888.3_NC_003888.3_1238;NC_003888.3_NC_003888.3_1239;NC_003888.3_NC_003888.3_1240;NC_003888.3_NC_003888.3_1241;NC_003888.3_NC_003888.3_1242;NC_003888.3_NC_003888.3_1243;NC_003888.3_NC_003888.3_1244;NC_003888.3_NC_003888.3_1245;NC_003888.3_NC_003888.3_1246;NC_003888.3_NC_003888.3_1247;NC_003888.3_NC_003888.3_1248;NC_003888.3_NC_003888.3_1249 PF01266;PF02801;PF01636;PF08545;PF00202;PF04321;PF02770;PF00155;PF01494;PF00108;PF08541;PF00109;PF07993;PF04820;PF01370;PF03364;PF00561 PF12679;PF12730;PF13304;PF00005;PF13555;PF07730;PF00072;PF04545;PF08281;PF00196;PF01047;PF13463;PF12802;PF09339;PF01978;PF00480;PF07702;PF00392;PF13545;PF12680;PF14534;PF08281;PF04545;PF04542;PF00561;PF12697;PF12146;PF12697;PF12146;PF01674;PF00561;PF05057;PF02801;PF00109;PF00108;PF00550;PF00198;PF00364;PF02780;PF02779;PF00676;PF00456;PF02775;PF13292;PF08541;PF08545;PF00108;PF10501;PF00550;PF07993;PF01370;PF01966;PF07992;PF01494;PF13450;PF04820;PF01266;PF04542;PF08281;PF03109;PF01636;PF01163;PF04072;PF03007;PF01266;PF00890;PF01946;PF13450;PF13454;PF05834;PF07992;PF01613;PF10604;PF03364;PF00202;PF07993;PF01370;PF13460;PF04321;PF02770;PF09924;PF14079;PF00392;PF00155;PF16655;PF09423 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1405030-1412625.1 1405030 1412625 7595 6 13 4 0.56512 antibacterial 0.61 0.11 0.19 0.16 Polyketide 0.01 0.13 0.22 0.60 0.04 0.01 0.03 NC_003888.3_NC_003888.3_1290;NC_003888.3_NC_003888.3_1291;NC_003888.3_NC_003888.3_1292;NC_003888.3_NC_003888.3_1293;NC_003888.3_NC_003888.3_1294;NC_003888.3_NC_003888.3_1295 PF00106;PF00501;PF01370;PF08659 PF00501;PF13191;PF00931;PF13401;PF00196;PF08281;PF08281;PF10101;PF10935;PF13561;PF00106;PF08659;PF01370 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1988459-1989701.1 1988459 1989701 1242 1 3 1 0.51579 antibacterial 0.64 0.14 0.11 0.14 0.00 0.03 0.15 0.19 0.36 0.00 0.26 NC_003888.3_NC_003888.3_1819 PF08241 PF00590;PF13649;PF08241 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_1991526-2027953.1 1991526 2027953 36427 36 54 7 0.73986 0.42 0.20 0.30 0.13 Other 0.05 0.07 0.67 0.05 0.06 0.12 0.02 NC_003888.3_NC_003888.3_1821;NC_003888.3_NC_003888.3_1822;NC_003888.3_NC_003888.3_1823;NC_003888.3_NC_003888.3_1824;NC_003888.3_NC_003888.3_1825;NC_003888.3_NC_003888.3_1826;NC_003888.3_NC_003888.3_1827;NC_003888.3_NC_003888.3_1828;NC_003888.3_NC_003888.3_1829;NC_003888.3_NC_003888.3_1830;NC_003888.3_NC_003888.3_1831;NC_003888.3_NC_003888.3_1832;NC_003888.3_NC_003888.3_1833;NC_003888.3_NC_003888.3_1834;NC_003888.3_NC_003888.3_1835;NC_003888.3_NC_003888.3_1836;NC_003888.3_NC_003888.3_1837;NC_003888.3_NC_003888.3_1838;NC_003888.3_NC_003888.3_1839;NC_003888.3_NC_003888.3_1840;NC_003888.3_NC_003888.3_1841;NC_003888.3_NC_003888.3_1842;NC_003888.3_NC_003888.3_1843;NC_003888.3_NC_003888.3_1844;NC_003888.3_NC_003888.3_1845;NC_003888.3_NC_003888.3_1846;NC_003888.3_NC_003888.3_1847;NC_003888.3_NC_003888.3_1848;NC_003888.3_NC_003888.3_1849;NC_003888.3_NC_003888.3_1850;NC_003888.3_NC_003888.3_1851;NC_003888.3_NC_003888.3_1852;NC_003888.3_NC_003888.3_1853;NC_003888.3_NC_003888.3_1854;NC_003888.3_NC_003888.3_1855;NC_003888.3_NC_003888.3_1856 PF00155;PF00171;PF00903;PF01408;PF06339;PF00583;PF00202 PF01903;PF00155;PF01979;PF07969;PF00266;PF13302;PF00583;PF13508;PF13673;PF14542;PF08445;PF00202;PF06339;PF12852;PF05721;PF00266;PF01323;PF13462;PF07081;PF00171;PF09339;PF01978;PF01614;PF13302;PF13420;PF00583;PF12746;PF00905;PF04542;PF08281;PF04545;PF03767;PF01095;PF00544;PF13229;PF00657;PF13472;PF13416;PF01547;PF04616;PF14100;PF01408;PF00528;PF00528;PF00920;PF00701;PF07729;PF00392;PF01325;PF11716;PF07690;PF13347;PF12681;PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2038268-2038841.1 2038268 2038841 573 1 2 0 0.50377 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_1867 PF00440;PF02796 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2058373-2060092.1 2058373 2060092 1719 2 10 1 0.62310 antibacterial 0.83 0.14 0.16 0.20 0.00 0.05 0.45 0.26 0.14 0.06 0.11 NC_003888.3_NC_003888.3_1889;NC_003888.3_NC_003888.3_1890 PF02522 PF13814;PF06224;PF01978;PF12840;PF12802;PF01022;PF13412;PF09339;PF01047;PF02522 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2061088-2061898.1 2061088 2061898 810 1 4 0 0.50115 antibacterial 0.61 0.10 0.29 0.14 0.00 0.06 0.10 0.23 0.42 0.02 0.22 NC_003888.3_NC_003888.3_1892 PF01061;PF12730;PF12698;PF12679 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2412354-2454993.1 2412354 2454993 42639 41 81 2 0.82982 0.43 0.17 0.30 0.10 0.01 0.16 0.15 0.14 0.45 0.11 0.02 NC_003888.3_NC_003888.3_2204;NC_003888.3_NC_003888.3_2205;NC_003888.3_NC_003888.3_2206;NC_003888.3_NC_003888.3_2207;NC_003888.3_NC_003888.3_2208;NC_003888.3_NC_003888.3_2209;NC_003888.3_NC_003888.3_2210;NC_003888.3_NC_003888.3_2211;NC_003888.3_NC_003888.3_2212;NC_003888.3_NC_003888.3_2213;NC_003888.3_NC_003888.3_2214;NC_003888.3_NC_003888.3_2215;NC_003888.3_NC_003888.3_2216;NC_003888.3_NC_003888.3_2217;NC_003888.3_NC_003888.3_2218;NC_003888.3_NC_003888.3_2219;NC_003888.3_NC_003888.3_2220;NC_003888.3_NC_003888.3_2221;NC_003888.3_NC_003888.3_2222;NC_003888.3_NC_003888.3_2223;NC_003888.3_NC_003888.3_2224;NC_003888.3_NC_003888.3_2225;NC_003888.3_NC_003888.3_2226;NC_003888.3_NC_003888.3_2227;NC_003888.3_NC_003888.3_2228;NC_003888.3_NC_003888.3_2229;NC_003888.3_NC_003888.3_2230;NC_003888.3_NC_003888.3_2231;NC_003888.3_NC_003888.3_2232;NC_003888.3_NC_003888.3_2233;NC_003888.3_NC_003888.3_2234;NC_003888.3_NC_003888.3_2235;NC_003888.3_NC_003888.3_2236;NC_003888.3_NC_003888.3_2237;NC_003888.3_NC_003888.3_2238;NC_003888.3_NC_003888.3_2239;NC_003888.3_NC_003888.3_2240;NC_003888.3_NC_003888.3_2241;NC_003888.3_NC_003888.3_2242;NC_003888.3_NC_003888.3_2243;NC_003888.3_NC_003888.3_2244 PF01636;PF00106 PF00440;PF13305;PF08450;PF00400;PF07714;PF00069;PF01636;PF04149;PF13560;PF16571;PF00753;PF04149;PF13560;PF06779;PF07690;PF00083;PF03372;PF02548;PF13714;PF00005;PF13555;PF13191;PF13304;PF02702;PF13732;PF01061;PF12730;PF12698;PF12679;PF00931;PF13191;PF13401;PF03704;PF00486;PF02163;PF03807;PF03446;PF02153;PF07991;PF10727;PF02826;PF00106;PF05977;PF07690;PF00557;PF01126;PF02567;PF04213;PF04213;PF01497;PF01032;PF10003;PF00950;PF00005;PF13555;PF13191;PF13481;PF03193;PF13476;PF13521;PF13304;PF02463;PF13473;PF09375;PF04261;PF03239;PF09250;PF16859;PF00440;PF13022;PF00196;PF08281;PF00072;PF09243;PF13649;PF00144;PF07690;PF03137;PF06609;PF13347;PF00083 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2457953-2460026.1 2457953 2460026 2073 3 8 2 0.59109 antibacterial 0.75 0.07 0.17 0.16 0.02 0.01 0.06 0.24 0.28 0.02 0.38 NC_003888.3_NC_003888.3_2247;NC_003888.3_NC_003888.3_2248;NC_003888.3_NC_003888.3_2249 PF00106;PF08659 PF00106;PF08659;PF13561;PF13460;PF08643;PF12680;PF14534;PF07681 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2477018-2499570.1 2477018 2499570 22552 21 54 5 0.77903 antibacterial 0.50 0.32 0.29 0.16 0.03 0.07 0.16 0.06 0.21 0.42 0.07 NC_003888.3_NC_003888.3_2268;NC_003888.3_NC_003888.3_2269;NC_003888.3_NC_003888.3_2270;NC_003888.3_NC_003888.3_2271;NC_003888.3_NC_003888.3_2272;NC_003888.3_NC_003888.3_2273;NC_003888.3_NC_003888.3_2274;NC_003888.3_NC_003888.3_2275;NC_003888.3_NC_003888.3_2276;NC_003888.3_NC_003888.3_2277;NC_003888.3_NC_003888.3_2278;NC_003888.3_NC_003888.3_2279;NC_003888.3_NC_003888.3_2280;NC_003888.3_NC_003888.3_2281;NC_003888.3_NC_003888.3_2282;NC_003888.3_NC_003888.3_2283;NC_003888.3_NC_003888.3_2284;NC_003888.3_NC_003888.3_2285;NC_003888.3_NC_003888.3_2286;NC_003888.3_NC_003888.3_2287;NC_003888.3_NC_003888.3_2288 PF01636;PF08242;PF00432;PF08241;PF00534 PF00072;PF00196;PF04545;PF13551;PF13542;PF13384;PF08281;PF07690;PF00083;PF06609;PF07690;PF13347;PF00083;PF06779;PF12832;PF10670;PF13620;PF13578;PF01520;PF13243;PF13489;PF07021;PF13847;PF01135;PF03141;PF01209;PF08241;PF08242;PF13649;PF05175;PF03602;PF02353;PF03848;PF13524;PF00534;PF13692;PF13439;PF13579;PF00440;PF01636;PF13243;PF00432;PF02361;PF13481;PF13191;PF03193;PF00005;PF13555;PF01926;PF13304;PF12822;PF01464;PF01427;PF02557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2500696-2501287.1 2500696 2501287 591 1 1 1 0.50136 antibacterial 0.86 0.07 0.17 0.28 0.00 0.09 0.11 0.31 0.21 0.01 0.30 NC_003888.3_NC_003888.3_2290 PF00857 PF00857 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2501756-2502536.1 2501756 2502536 780 1 5 2 0.51687 antibacterial 0.56 0.07 0.07 0.44 0.00 0.39 0.15 0.40 0.02 0.02 0.03 NC_003888.3_NC_003888.3_2292 PF00975;PF00561 PF12697;PF00975;PF12146;PF00561;PF08386 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2520563-2524270.1 2520563 2524270 3707 6 6 1 0.61421 antibacterial 0.71 0.06 0.27 0.20 0.03 0.02 0.35 0.21 0.17 0.03 0.24 NC_003888.3_NC_003888.3_2309;NC_003888.3_NC_003888.3_2310;NC_003888.3_NC_003888.3_2311;NC_003888.3_NC_003888.3_2312;NC_003888.3_NC_003888.3_2313;NC_003888.3_NC_003888.3_2314 PF00583 PF07681;PF09335;PF10041;PF13302;PF00583;PF13349 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2538716-2546691.1 2538716 2546691 7975 6 8 0 0.67281 inhibitor 0.20 0.04 0.67 0.14 0.03 0.23 0.10 0.34 0.27 0.00 0.05 NC_003888.3_NC_003888.3_2328;NC_003888.3_NC_003888.3_2329;NC_003888.3_NC_003888.3_2330;NC_003888.3_NC_003888.3_2331;NC_003888.3_NC_003888.3_2332;NC_003888.3_NC_003888.3_2333 PF11253;PF00456;PF07690;PF06609;PF00083;PF00440;PF13022;PF06259 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2549403-2569910.1 2549403 2569910 20507 19 36 8 0.83648 antibacterial 0.52 0.24 0.19 0.25 Polyketide 0.00 0.23 0.14 0.69 0.02 0.01 0.09 NC_003888.3_NC_003888.3_2337;NC_003888.3_NC_003888.3_2338;NC_003888.3_NC_003888.3_2339;NC_003888.3_NC_003888.3_2340;NC_003888.3_NC_003888.3_2341;NC_003888.3_NC_003888.3_2342;NC_003888.3_NC_003888.3_2343;NC_003888.3_NC_003888.3_2344;NC_003888.3_NC_003888.3_2345;NC_003888.3_NC_003888.3_2346;NC_003888.3_NC_003888.3_2347;NC_003888.3_NC_003888.3_2348;NC_003888.3_NC_003888.3_2349;NC_003888.3_NC_003888.3_2350;NC_003888.3_NC_003888.3_2351;NC_003888.3_NC_003888.3_2352;NC_003888.3_NC_003888.3_2353;NC_003888.3_NC_003888.3_2354;NC_003888.3_NC_003888.3_2355 PF02801;PF08545;PF00108;PF08541;PF00107;PF00698;PF00109;PF00583 PF13302;PF00583;PF13508;PF13527;PF08445;PF13673;PF00144;PF13560;PF04149;PF00652;PF14200;PF03498;PF14440;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08392;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF07264;PF02566;PF13602;PF00107;PF16884 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2790361-2791648.1 2790361 2791648 1287 1 1 1 0.60537 antibacterial 0.83 0.06 0.17 0.30 0.00 0.11 0.08 0.32 0.20 0.03 0.31 NC_003888.3_NC_003888.3_2543 PF00171 PF00171 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_2934113-2967589.1 2934113 2967589 33476 32 50 6 0.94003 antibacterial 0.55 0.04 0.18 0.17 Saccharide 0.02 0.08 0.17 0.02 0.04 0.66 0.01 NC_003888.3_NC_003888.3_2652;NC_003888.3_NC_003888.3_2653;NC_003888.3_NC_003888.3_2654;NC_003888.3_NC_003888.3_2655;NC_003888.3_NC_003888.3_2656;NC_003888.3_NC_003888.3_2657;NC_003888.3_NC_003888.3_2658;NC_003888.3_NC_003888.3_2659;NC_003888.3_NC_003888.3_2660;NC_003888.3_NC_003888.3_2661;NC_003888.3_NC_003888.3_2662;NC_003888.3_NC_003888.3_2663;NC_003888.3_NC_003888.3_2664;NC_003888.3_NC_003888.3_2665;NC_003888.3_NC_003888.3_2666;NC_003888.3_NC_003888.3_2667;NC_003888.3_NC_003888.3_2668;NC_003888.3_NC_003888.3_2669;NC_003888.3_NC_003888.3_2670;NC_003888.3_NC_003888.3_2671;NC_003888.3_NC_003888.3_2672;NC_003888.3_NC_003888.3_2673;NC_003888.3_NC_003888.3_2674;NC_003888.3_NC_003888.3_2675;NC_003888.3_NC_003888.3_2676;NC_003888.3_NC_003888.3_2677;NC_003888.3_NC_003888.3_2678;NC_003888.3_NC_003888.3_2679;NC_003888.3_NC_003888.3_2680;NC_003888.3_NC_003888.3_2681;NC_003888.3_NC_003888.3_2682;NC_003888.3_NC_003888.3_2683 PF02706;PF04932;PF02397;PF02668;PF00534;PF00501 PF07690;PF12832;PF06813;PF13360;PF00400;PF12894;PF02668;PF03781;PF00389;PF02826;PF03446;PF09860;PF08843;PF03777;PF00264;PF06236;PF03205;PF03777;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF09849;PF03777;PF03777;PF00501;PF12034;PF00092;PF13768;PF13519;PF12450;PF12679;PF12730 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3073684-3086671.1 3073684 3086671 12987 11 16 0 0.65922 antibacterial 0.61 0.07 0.11 0.17 0.00 0.07 0.40 0.19 0.16 0.03 0.19 NC_003888.3_NC_003888.3_2775;NC_003888.3_NC_003888.3_2776;NC_003888.3_NC_003888.3_2777;NC_003888.3_NC_003888.3_2778;NC_003888.3_NC_003888.3_2779;NC_003888.3_NC_003888.3_2780;NC_003888.3_NC_003888.3_2781;NC_003888.3_NC_003888.3_2782;NC_003888.3_NC_003888.3_2783;NC_003888.3_NC_003888.3_2784;NC_003888.3_NC_003888.3_2785 PF00440;PF00296;PF00563;PF00990;PF08448;PF00989;PF13426;PF13188;PF09250;PF14592;PF00544;PF01177;PF01177;PF00389;PF02826;PF01425 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3130824-3150744.1 3130824 3150744 19920 20 31 3 0.67402 antibacterial 0.62 0.12 0.23 0.13 0.00 0.10 0.20 0.16 0.47 0.05 0.04 NC_003888.3_NC_003888.3_2837;NC_003888.3_NC_003888.3_2838;NC_003888.3_NC_003888.3_2839;NC_003888.3_NC_003888.3_2840;NC_003888.3_NC_003888.3_2841;NC_003888.3_NC_003888.3_2842;NC_003888.3_NC_003888.3_2843;NC_003888.3_NC_003888.3_2844;NC_003888.3_NC_003888.3_2845;NC_003888.3_NC_003888.3_2846;NC_003888.3_NC_003888.3_2847;NC_003888.3_NC_003888.3_2848;NC_003888.3_NC_003888.3_2849;NC_003888.3_NC_003888.3_2850;NC_003888.3_NC_003888.3_2851;NC_003888.3_NC_003888.3_2852;NC_003888.3_NC_003888.3_2853;NC_003888.3_NC_003888.3_2854;NC_003888.3_NC_003888.3_2855;NC_003888.3_NC_003888.3_2856 PF00903;PF00067;PF00561 PF12158;PF03259;PF05331;PF08784;PF12802;PF09339;PF03029;PF00067;PF02627;PF03096;PF12697;PF00561;PF12146;PF12681;PF00903;PF00083;PF07690;PF06779;PF12832;PF04286;PF00657;PF13472;PF17182;PF09922;PF08044;PF13304;PF00005;PF03308;PF13555;PF06182;PF06182 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3316757-3320498.1 3316757 3320498 3741 1 3 0 0.50004 antibacterial 0.81 0.06 0.21 0.24 0.00 0.07 0.07 0.21 0.13 0.33 0.23 NC_003888.3_NC_003888.3_2989 PF13632;PF13641;PF13506 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3526136-3603907.1 3526136 3603907 77771 35 87 19 0.94701 antibacterial 0.74 0.25 0.08 0.10 NRP 0.00 0.90 0.04 0.14 0.00 0.00 0.01 NC_003888.3_NC_003888.3_3169;NC_003888.3_NC_003888.3_3170;NC_003888.3_NC_003888.3_3171;NC_003888.3_NC_003888.3_3172;NC_003888.3_NC_003888.3_3173;NC_003888.3_NC_003888.3_3174;NC_003888.3_NC_003888.3_3175;NC_003888.3_NC_003888.3_3176;NC_003888.3_NC_003888.3_3177;NC_003888.3_NC_003888.3_3178;NC_003888.3_NC_003888.3_3179;NC_003888.3_NC_003888.3_3180;NC_003888.3_NC_003888.3_3181;NC_003888.3_NC_003888.3_3182;NC_003888.3_NC_003888.3_3183;NC_003888.3_NC_003888.3_3184;NC_003888.3_NC_003888.3_3185;NC_003888.3_NC_003888.3_3186;NC_003888.3_NC_003888.3_3187;NC_003888.3_NC_003888.3_3188;NC_003888.3_NC_003888.3_3189;NC_003888.3_NC_003888.3_3190;NC_003888.3_NC_003888.3_3191;NC_003888.3_NC_003888.3_3192;NC_003888.3_NC_003888.3_3193;NC_003888.3_NC_003888.3_3194;NC_003888.3_NC_003888.3_3195;NC_003888.3_NC_003888.3_3196;NC_003888.3_NC_003888.3_3197;NC_003888.3_NC_003888.3_3198;NC_003888.3_NC_003888.3_3199;NC_003888.3_NC_003888.3_3200;NC_003888.3_NC_003888.3_3201;NC_003888.3_NC_003888.3_3202;NC_003888.3_NC_003888.3_3203 PF02770;PF00441;PF00501;PF00155;PF08545;PF08028;PF00903;PF00975;PF01494;PF00668;PF01266;PF01636;PF02801;PF00702;PF08541;PF02668;PF00109;PF04820;PF00561 PF00122;PF00702;PF08282;PF00689;PF00486;PF03704;PF13191;PF00931;PF13401;PF03621;PF03403;PF02153;PF01266;PF09056;PF12679;PF12730;PF13304;PF00005;PF13476;PF13555;PF07730;PF00072;PF00196;PF08281;PF14493;PF00155;PF12897;PF01070;PF01645;PF00977;PF00478;PF03060;PF00903;PF13669;PF14696;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00668;PF00501;PF13193;PF00550;PF00975;PF12697;PF00561;PF00561;PF12146;PF12697;PF01636;PF02463;PF00005;PF13555;PF00664;PF02668;PF01663;PF01261;PF02126;PF01026;PF01261;PF01040;PF07994;PF01658;PF01494;PF05834;PF04820;PF00070;PF07992;PF00890;PF01266;PF12831;PF13450;PF01134;PF08541;PF08545;PF00441;PF08028;PF02770;PF02801;PF00109;PF00550;PF00589;PF14659 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3661247-3661991.1 3661247 3661991 744 1 1 0 0.53431 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_3260 PF14016 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3782902-3788943.1 3782902 3788943 6041 7 14 1 0.63217 antibacterial 0.55 0.17 0.20 0.16 RiPP 0.00 0.01 0.03 0.04 0.92 0.00 0.00 NC_003888.3_NC_003888.3_3369;NC_003888.3_NC_003888.3_3370;NC_003888.3_NC_003888.3_3371;NC_003888.3_NC_003888.3_3372;NC_003888.3_NC_003888.3_3373;NC_003888.3_NC_003888.3_3374;NC_003888.3_NC_003888.3_3375 PF00171 PF12698;PF01061;PF13732;PF02702;PF13304;PF00005;PF13191;PF13555;PF03551;PF00171;PF13560;PF12844;PF13581;PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3812960-3814873.1 3812960 3814873 1913 2 7 0 0.58767 antibacterial 0.78 0.05 0.11 0.17 RiPP 0.00 0.02 0.13 0.05 0.76 0.01 0.03 NC_003888.3_NC_003888.3_3403;NC_003888.3_NC_003888.3_3404 PF08402;PF13304;PF13191;PF00005;PF01078;PF03215;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_3818490-3826210.1 3818490 3826210 7720 8 31 5 0.63426 cytotoxic 0.27 0.60 0.15 0.04 0.05 0.08 0.16 0.07 0.05 0.31 0.38 NC_003888.3_NC_003888.3_3409;NC_003888.3_NC_003888.3_3410;NC_003888.3_NC_003888.3_3411;NC_003888.3_NC_003888.3_3412;NC_003888.3_NC_003888.3_3413;NC_003888.3_NC_003888.3_3414;NC_003888.3_NC_003888.3_3415;NC_003888.3_NC_003888.3_3416 PF01266;PF08242;PF08241;PF04055;PF00535 PF13489;PF01209;PF13847;PF08241;PF08242;PF13649;PF07992;PF01946;PF03486;PF01134;PF12831;PF01266;PF00890;PF01262;PF13450;PF00070;PF02852;PF07291;PF04055;PF01048;PF01983;PF12804;PF09837;PF13641;PF00535;PF10111;PF13506;PF13632;PF13340;PF01609;PF13586 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4013072-4023169.1 4013072 4023169 10097 11 28 3 0.73000 antibacterial 0.63 0.09 0.09 0.13 0.02 0.11 0.24 0.30 0.20 0.01 0.22 NC_003888.3_NC_003888.3_3579;NC_003888.3_NC_003888.3_3580;NC_003888.3_NC_003888.3_3581;NC_003888.3_NC_003888.3_3582;NC_003888.3_NC_003888.3_3583;NC_003888.3_NC_003888.3_3584;NC_003888.3_NC_003888.3_3585;NC_003888.3_NC_003888.3_3586;NC_003888.3_NC_003888.3_3587;NC_003888.3_NC_003888.3_3588;NC_003888.3_NC_003888.3_3589 PF01757;PF00067;PF00561 PF07883;PF00067;PF01925;PF02956;PF00196;PF04545;PF08281;PF13936;PF00072;PF07730;PF00196;PF08281;PF04545;PF14493;PF13936;PF00072;PF07730;PF01757;PF12697;PF06259;PF12697;PF07859;PF00561;PF00756;PF12146;PF00326;PF01764;PF00135 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4024590-4025406.1 4024590 4025406 816 1 1 0 0.53602 antibacterial 0.83 0.07 0.19 0.27 0.05 0.09 0.07 0.32 0.20 0.03 0.29 NC_003888.3_NC_003888.3_3591 PF03301 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4026216-4027671.1 4026216 4027671 1455 1 5 0 0.51398 inhibitor 0.27 0.05 0.59 0.11 0.02 0.19 0.25 0.29 0.22 0.00 0.03 NC_003888.3_NC_003888.3_3593 PF13347;PF07690;PF05977;PF00083;PF06609 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4115027-4137513.1 4115027 4137513 22486 20 36 3 0.90015 antibacterial 0.62 0.15 0.09 0.11 RiPP 0.00 0.08 0.14 0.14 0.58 0.02 0.09 NC_003888.3_NC_003888.3_3686;NC_003888.3_NC_003888.3_3687;NC_003888.3_NC_003888.3_3688;NC_003888.3_NC_003888.3_3689;NC_003888.3_NC_003888.3_3690;NC_003888.3_NC_003888.3_3691;NC_003888.3_NC_003888.3_3692;NC_003888.3_NC_003888.3_3693;NC_003888.3_NC_003888.3_3694;NC_003888.3_NC_003888.3_3695;NC_003888.3_NC_003888.3_3696;NC_003888.3_NC_003888.3_3697;NC_003888.3_NC_003888.3_3698;NC_003888.3_NC_003888.3_3699;NC_003888.3_NC_003888.3_3700;NC_003888.3_NC_003888.3_3701;NC_003888.3_NC_003888.3_3702;NC_003888.3_NC_003888.3_3703;NC_003888.3_NC_003888.3_3704;NC_003888.3_NC_003888.3_3705 PF08241;PF08242;PF01757 PF05175;PF13489;PF07021;PF13847;PF13649;PF08241;PF08242;PF05724;PF00174;PF13231;PF00313;PF02518;PF07730;PF13796;PF00005;PF13555;PF13191;PF13401;PF13304;PF02687;PF12704;PF02687;PF12704;PF00005;PF13304;PF13555;PF00196;PF08281;PF04545;PF00072;PF07730;PF00487;PF01757;PF06259;PF10756;PF02342 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4142256-4144254.1 4142256 4144254 1998 2 2 1 0.55784 antibacterial 0.75 0.00 0.03 0.00 Polyketide-Terpene 0.00 0.00 0.18 0.56 0.01 0.02 0.64 NC_003888.3_NC_003888.3_3711;NC_003888.3_NC_003888.3_3712 PF00067 PF00440;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4584105-4584870.1 4584105 4584870 765 1 3 2 0.51264 antibacterial 0.81 0.01 0.18 0.07 0.01 0.01 0.02 0.06 0.41 0.00 0.49 NC_003888.3_NC_003888.3_4107 PF00106;PF08659 PF00106;PF08659;PF13561 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4589507-4589801.1 4589507 4589801 294 1 1 0 0.50763 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4115 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4628356-4628737.1 4628356 4628737 381 1 1 1 0.53370 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_4161 PF00903 PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4629723-4630965.1 4629723 4630965 1242 1 1 1 0.59882 antibacterial 0.78 0.02 0.27 0.18 0.00 0.07 0.04 0.22 0.49 0.02 0.19 NC_003888.3_NC_003888.3_4163 PF05147 PF05147 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4670419-4671589.1 4670419 4671589 1170 1 3 0 0.52337 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_4197 PF00652;PF14200;PF03498 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4769019-4804183.1 4769019 4804183 35164 34 81 13 0.83564 antibacterial 0.52 0.26 0.18 0.19 0.01 0.27 0.19 0.13 0.42 0.04 0.02 NC_003888.3_NC_003888.3_4291;NC_003888.3_NC_003888.3_4292;NC_003888.3_NC_003888.3_4293;NC_003888.3_NC_003888.3_4294;NC_003888.3_NC_003888.3_4295;NC_003888.3_NC_003888.3_4296;NC_003888.3_NC_003888.3_4297;NC_003888.3_NC_003888.3_4298;NC_003888.3_NC_003888.3_4299;NC_003888.3_NC_003888.3_4300;NC_003888.3_NC_003888.3_4301;NC_003888.3_NC_003888.3_4302;NC_003888.3_NC_003888.3_4303;NC_003888.3_NC_003888.3_4304;NC_003888.3_NC_003888.3_4305;NC_003888.3_NC_003888.3_4306;NC_003888.3_NC_003888.3_4307;NC_003888.3_NC_003888.3_4308;NC_003888.3_NC_003888.3_4309;NC_003888.3_NC_003888.3_4310;NC_003888.3_NC_003888.3_4311;NC_003888.3_NC_003888.3_4312;NC_003888.3_NC_003888.3_4313;NC_003888.3_NC_003888.3_4314;NC_003888.3_NC_003888.3_4315;NC_003888.3_NC_003888.3_4316;NC_003888.3_NC_003888.3_4317;NC_003888.3_NC_003888.3_4318;NC_003888.3_NC_003888.3_4319;NC_003888.3_NC_003888.3_4320;NC_003888.3_NC_003888.3_4321;NC_003888.3_NC_003888.3_4322;NC_003888.3_NC_003888.3_4323;NC_003888.3_NC_003888.3_4324 PF01636;PF00378;PF02770;PF02786;PF00289;PF01039;PF08028;PF00441;PF02771;PF01243;PF02785;PF00501;PF04738 PF05685;PF01909;PF13427;PF14606;PF00657;PF13472;PF02909;PF00440;PF00005;PF13604;PF02702;PF13304;PF13732;PF01061;PF12698;PF07730;PF13581;PF00072;PF04545;PF00196;PF08281;PF13412;PF14534;PF12680;PF07366;PF00266;PF01565;PF02913;PF13183;PF13534;PF03403;PF12740;PF13517;PF01839;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF04978;PF12867;PF14435;PF00293;PF00892;PF12802;PF01047;PF13463;PF13545;PF01638;PF04738;PF00069;PF07714;PF01636;PF11716;PF04978;PF12867;PF08608;PF07287;PF01039;PF00289;PF02786;PF02655;PF07478;PF02222;PF02785;PF00364;PF02771;PF02770;PF00441;PF08028;PF00501;PF13193;PF00378;PF16113;PF00440;PF10590;PF01243 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4869136-4875516.1 4869136 4875516 6380 6 5 0 0.58407 antibacterial 0.60 0.05 0.09 0.31 Polyketide 0.00 0.00 0.20 0.67 0.08 0.00 0.04 NC_003888.3_NC_003888.3_4384;NC_003888.3_NC_003888.3_4385;NC_003888.3_NC_003888.3_4386;NC_003888.3_NC_003888.3_4387;NC_003888.3_NC_003888.3_4388;NC_003888.3_NC_003888.3_4389 PF07228;PF00440;PF07690;PF08281;PF04542 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4876022-4876625.1 4876022 4876625 603 1 1 0 0.57178 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_4391 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4882031-4884893.1 4882031 4884893 2862 4 5 1 0.57462 antibacterial 0.55 0.08 0.11 0.30 0.00 0.02 0.45 0.48 0.02 0.02 0.03 NC_003888.3_NC_003888.3_4398;NC_003888.3_NC_003888.3_4399;NC_003888.3_NC_003888.3_4400;NC_003888.3_NC_003888.3_4401 PF00857 PF13977;PF00440;PF07690;PF13347;PF00857 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4895197-4896619.1 4895197 4896619 1422 1 1 1 0.63385 antibacterial 0.63 0.07 0.40 0.23 0.00 0.46 0.09 0.23 0.06 0.03 0.18 NC_003888.3_NC_003888.3_4412 PF00668 PF00668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4897543-4901975.1 4897543 4901975 4432 4 17 3 0.53438 0.19 0.07 0.13 0.29 0.00 0.23 0.40 0.22 0.14 0.00 0.02 NC_003888.3_NC_003888.3_4414;NC_003888.3_NC_003888.3_4415;NC_003888.3_NC_003888.3_4416;NC_003888.3_NC_003888.3_4417 PF01636;PF00975;PF00561 PF01135;PF13847;PF13578;PF12697;PF00975;PF00561;PF10230;PF03096;PF12695;PF12146;PF16859;PF00440;PF00069;PF07714;PF01636;PF14200;PF00652 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4903478-4914412.1 4903478 4914412 10934 11 35 3 0.57988 antibacterial 0.53 0.12 0.11 0.19 0.02 0.05 0.41 0.07 0.33 0.04 0.11 NC_003888.3_NC_003888.3_4420;NC_003888.3_NC_003888.3_4421;NC_003888.3_NC_003888.3_4422;NC_003888.3_NC_003888.3_4423;NC_003888.3_NC_003888.3_4424;NC_003888.3_NC_003888.3_4425;NC_003888.3_NC_003888.3_4426;NC_003888.3_NC_003888.3_4427;NC_003888.3_NC_003888.3_4428;NC_003888.3_NC_003888.3_4429;NC_003888.3_NC_003888.3_4430 PF01636;PF04055;PF00903 PF13564;PF13280;PF02082;PF08279;PF12840;PF08220;PF09339;PF13412;PF12802;PF13542;PF13551;PF13384;PF13518;PF13404;PF00903;PF12681;PF00069;PF07714;PF01636;PF13385;PF00069;PF07714;PF01636;PF00652;PF13396;PF01977;PF01040;PF02441;PF12802;PF01047;PF13412;PF13404;PF13545;PF01037;PF04055 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4915291-4973632.1 4915291 4973632 58341 57 75 13 0.85901 0.40 0.27 0.26 0.18 0.00 0.22 0.18 0.42 0.04 0.32 0.02 NC_003888.3_NC_003888.3_4432;NC_003888.3_NC_003888.3_4433;NC_003888.3_NC_003888.3_4434;NC_003888.3_NC_003888.3_4435;NC_003888.3_NC_003888.3_4436;NC_003888.3_NC_003888.3_4437;NC_003888.3_NC_003888.3_4438;NC_003888.3_NC_003888.3_4439;NC_003888.3_NC_003888.3_4440;NC_003888.3_NC_003888.3_4441;NC_003888.3_NC_003888.3_4442;NC_003888.3_NC_003888.3_4443;NC_003888.3_NC_003888.3_4444;NC_003888.3_NC_003888.3_4445;NC_003888.3_NC_003888.3_4446;NC_003888.3_NC_003888.3_4447;NC_003888.3_NC_003888.3_4448;NC_003888.3_NC_003888.3_4449;NC_003888.3_NC_003888.3_4450;NC_003888.3_NC_003888.3_4451;NC_003888.3_NC_003888.3_4452;NC_003888.3_NC_003888.3_4453;NC_003888.3_NC_003888.3_4454;NC_003888.3_NC_003888.3_4455;NC_003888.3_NC_003888.3_4456;NC_003888.3_NC_003888.3_4457;NC_003888.3_NC_003888.3_4458;NC_003888.3_NC_003888.3_4459;NC_003888.3_NC_003888.3_4460;NC_003888.3_NC_003888.3_4461;NC_003888.3_NC_003888.3_4462;NC_003888.3_NC_003888.3_4463;NC_003888.3_NC_003888.3_4464;NC_003888.3_NC_003888.3_4465;NC_003888.3_NC_003888.3_4466;NC_003888.3_NC_003888.3_4467;NC_003888.3_NC_003888.3_4468;NC_003888.3_NC_003888.3_4469;NC_003888.3_NC_003888.3_4470;NC_003888.3_NC_003888.3_4471;NC_003888.3_NC_003888.3_4472;NC_003888.3_NC_003888.3_4473;NC_003888.3_NC_003888.3_4474;NC_003888.3_NC_003888.3_4475;NC_003888.3_NC_003888.3_4476;NC_003888.3_NC_003888.3_4477;NC_003888.3_NC_003888.3_4478;NC_003888.3_NC_003888.3_4479;NC_003888.3_NC_003888.3_4480;NC_003888.3_NC_003888.3_4481;NC_003888.3_NC_003888.3_4482;NC_003888.3_NC_003888.3_4483;NC_003888.3_NC_003888.3_4484;NC_003888.3_NC_003888.3_4485;NC_003888.3_NC_003888.3_4486;NC_003888.3_NC_003888.3_4487;NC_003888.3_NC_003888.3_4488 PF01636;PF02803;PF08242;PF00106;PF00108;PF08659;PF08241;PF00109;PF04055;PF00583;PF00501;PF01370;PF00535 PF13420;PF13673;PF00583;PF13508;PF13527;PF08445;PF14542;PF14012;PF00375;PF00440;PF01575;PF13561;PF00106;PF08659;PF01370;PF03435;PF00108;PF00109;PF02803;PF00501;PF13489;PF13847;PF08241;PF08242;PF13649;PF05175;PF00313;PF08206;PF02621;PF00069;PF07714;PF01636;PF01580;PF13401;PF02456;PF13555;PF16697;PF10224;PF06013;PF10824;PF14256;PF10099;PF16976;PF00437;PF01580;PF00005;PF06414;PF01926;PF13238;PF00482;PF00482;PF07811;PF13400;PF07811;PF13400;PF06013;PF06013;PF04149;PF13560;PF12844;PF13581;PF03704;PF13428;PF01478;PF04055;PF00704;PF01522;PF13641;PF00535;PF10111;PF13704;PF12804;PF13506;PF03142;PF13632 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_4974811-4975796.1 4974811 4975796 985 2 7 2 0.72112 0.42 0.37 0.21 0.04 0.01 0.00 0.40 0.05 0.24 0.00 0.30 NC_003888.3_NC_003888.3_4490;NC_003888.3_NC_003888.3_4491 PF08241;PF08242 PF01209;PF13489;PF13847;PF13649;PF08241;PF08242;PF03793 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5055827-5059681.1 5055827 5059681 3854 2 10 2 0.66280 antibacterial 0.59 0.18 0.32 0.32 Polyketide 0.01 0.36 0.20 0.53 0.05 0.02 0.04 NC_003888.3_NC_003888.3_4566;NC_003888.3_NC_003888.3_4567 PF00107;PF01370 PF13676;PF00931;PF13401;PF13424;PF13374;PF13460;PF05368;PF01073;PF01370;PF00107 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5061858-5063669.1 5061858 5063669 1811 3 9 2 0.55600 0.40 0.25 0.23 0.05 0.01 0.09 0.26 0.05 0.21 0.00 0.38 NC_003888.3_NC_003888.3_4570;NC_003888.3_NC_003888.3_4571;NC_003888.3_NC_003888.3_4572 PF08241;PF08242 PF13452;PF01575;PF13452;PF01575;PF13847;PF13489;PF08241;PF08242;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5297580-5307574.1 5297580 5307574 9994 7 20 4 0.74276 0.26 0.39 0.16 0.11 0.04 0.00 0.15 0.12 0.03 0.33 0.41 NC_003888.3_NC_003888.3_4799;NC_003888.3_NC_003888.3_4800;NC_003888.3_NC_003888.3_4801;NC_003888.3_NC_003888.3_4802;NC_003888.3_NC_003888.3_4803;NC_003888.3_NC_003888.3_4804;NC_003888.3_NC_003888.3_4805 PF01266;PF01494;PF01593;PF00535 PF01642;PF01494;PF05834;PF03486;PF01593;PF07992;PF01266;PF00890;PF13450;PF01946;PF13738;PF00440;PF02909;PF13489;PF13578;PF13578;PF09586;PF13641;PF00535;PF10111 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5510515-5536994.1 5510515 5536994 26479 28 70 17 0.86345 antibacterial 0.56 0.41 0.15 0.20 Polyketide 0.02 0.09 0.05 0.90 0.00 0.05 0.01 NC_003888.3_NC_003888.3_4999;NC_003888.3_NC_003888.3_5000;NC_003888.3_NC_003888.3_5001;NC_003888.3_NC_003888.3_5002;NC_003888.3_NC_003888.3_5003;NC_003888.3_NC_003888.3_5004;NC_003888.3_NC_003888.3_5005;NC_003888.3_NC_003888.3_5006;NC_003888.3_NC_003888.3_5007;NC_003888.3_NC_003888.3_5008;NC_003888.3_NC_003888.3_5009;NC_003888.3_NC_003888.3_5010;NC_003888.3_NC_003888.3_5011;NC_003888.3_NC_003888.3_5012;NC_003888.3_NC_003888.3_5013;NC_003888.3_NC_003888.3_5014;NC_003888.3_NC_003888.3_5015;NC_003888.3_NC_003888.3_5016;NC_003888.3_NC_003888.3_5017;NC_003888.3_NC_003888.3_5018;NC_003888.3_NC_003888.3_5019;NC_003888.3_NC_003888.3_5020;NC_003888.3_NC_003888.3_5021;NC_003888.3_NC_003888.3_5022;NC_003888.3_NC_003888.3_5023;NC_003888.3_NC_003888.3_5024;NC_003888.3_NC_003888.3_5025;NC_003888.3_NC_003888.3_5026 PF02801;PF08242;PF00106;PF02770;PF08240;PF00725;PF08659;PF08028;PF00109;PF00441;PF08241;PF01243;PF03992;PF02737;PF00107;PF01370;PF03364 PF00440;PF16884;PF08240;PF00107;PF13602;PF00246;PF13577;PF12680;PF02737;PF00725;PF08240;PF00107;PF13602;PF08240;PF00107;PF13602;PF07690;PF00083;PF05977;PF13347;PF01243;PF12900;PF05368;PF01370;PF16363;PF13460;PF02770;PF08028;PF00441;PF03992;PF02909;PF00440;PF07690;PF06779;PF00083;PF03176;PF12349;PF00486;PF03704;PF13561;PF00106;PF08659;PF01370;PF00109;PF02801;PF00109;PF02801;PF00550;PF10604;PF03364;PF00753;PF01613;PF04978;PF12867;PF13489;PF13847;PF01209;PF05175;PF08241;PF13578;PF08242;PF13649;PF03848;PF05724;PF13560;PF12844;PF13443;PF13413;PF01381;PF07883 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5577211-5580068.1 5577211 5580068 2857 3 12 0 0.54923 antibacterial 0.59 0.10 0.23 0.07 RiPP 0.00 0.01 0.04 0.03 0.91 0.00 0.01 NC_003888.3_NC_003888.3_5060;NC_003888.3_NC_003888.3_5061;NC_003888.3_NC_003888.3_5062 PF00005;PF13555;PF13304;PF12679;PF01061;PF12730;PF12698;PF13346;PF03379;PF06182;PF07730;PF13581 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5715871-5718468.1 5715871 5718468 2597 3 17 3 0.71334 0.48 0.36 0.17 0.07 RiPP 0.02 0.06 0.10 0.12 0.66 0.02 0.04 NC_003888.3_NC_003888.3_5189;NC_003888.3_NC_003888.3_5190;NC_003888.3_NC_003888.3_5191 PF08241;PF08242;PF00891 PF13489;PF05175;PF02353;PF00891;PF13847;PF00398;PF01209;PF13649;PF08241;PF08242;PF02463;PF13304;PF00005;PF13191;PF13476;PF13555;PF00528 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5765662-5797479.1 5765662 5797479 31817 37 60 9 0.74897 antibacterial 0.58 0.46 0.18 0.14 Polyketide 0.02 0.07 0.07 0.84 0.04 0.02 0.02 NC_003888.3_NC_003888.3_5224;NC_003888.3_NC_003888.3_5225;NC_003888.3_NC_003888.3_5226;NC_003888.3_NC_003888.3_5227;NC_003888.3_NC_003888.3_5228;NC_003888.3_NC_003888.3_5229;NC_003888.3_NC_003888.3_5230;NC_003888.3_NC_003888.3_5231;NC_003888.3_NC_003888.3_5232;NC_003888.3_NC_003888.3_5233;NC_003888.3_NC_003888.3_5234;NC_003888.3_NC_003888.3_5235;NC_003888.3_NC_003888.3_5236;NC_003888.3_NC_003888.3_5237;NC_003888.3_NC_003888.3_5238;NC_003888.3_NC_003888.3_5239;NC_003888.3_NC_003888.3_5240;NC_003888.3_NC_003888.3_5241;NC_003888.3_NC_003888.3_5242;NC_003888.3_NC_003888.3_5243;NC_003888.3_NC_003888.3_5244;NC_003888.3_NC_003888.3_5245;NC_003888.3_NC_003888.3_5246;NC_003888.3_NC_003888.3_5247;NC_003888.3_NC_003888.3_5248;NC_003888.3_NC_003888.3_5249;NC_003888.3_NC_003888.3_5250;NC_003888.3_NC_003888.3_5251;NC_003888.3_NC_003888.3_5252;NC_003888.3_NC_003888.3_5253;NC_003888.3_NC_003888.3_5254;NC_003888.3_NC_003888.3_5255;NC_003888.3_NC_003888.3_5256;NC_003888.3_NC_003888.3_5257;NC_003888.3_NC_003888.3_5258;NC_003888.3_NC_003888.3_5259;NC_003888.3_NC_003888.3_5260 PF01266;PF02801;PF01494;PF00108;PF00109;PF01243;PF03992;PF01050;PF03364 PF05331;PF03029;PF07992;PF01494;PF00070;PF00877;PF07813;PF13560;PF00440;PF09339;PF13340;PF01609;PF13359;PF13612;PF13586;PF11583;PF11695;PF00905;PF01098;PF08239;PF02518;PF00512;PF00672;PF00782;PF05706;PF08378;PF02735;PF13628;PF01243;PF16242;PF11350;PF04673;PF10604;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF12852;PF11699;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF01266;PF01734;PF01037;PF13412;PF12802;PF09339;PF13404;PF00881;PF13613;PF04545;PF01609;PF13359 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5852345-5852987.1 5852345 5852987 642 1 1 0 0.57111 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5315 PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5933595-5938532.1 5933595 5938532 4937 3 17 0 0.55002 antibacterial 0.74 0.10 0.12 0.11 RiPP 0.00 0.04 0.08 0.03 0.85 0.00 0.00 NC_003888.3_NC_003888.3_5381;NC_003888.3_NC_003888.3_5382;NC_003888.3_NC_003888.3_5383 PF13401;PF00005;PF13191;PF06414;PF01935;PF00664;PF02463;PF00005;PF13191;PF00664;PF00005;PF13481;PF13604;PF13476;PF13191;PF02702;PF13304 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_5970587-5971837.1 5970587 5971837 1250 3 3 0 0.59048 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_5414;NC_003888.3_NC_003888.3_5415;NC_003888.3_NC_003888.3_5416 PF00440;PF14012;PF13828 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6027788-6046270.1 6027788 6046270 18482 15 22 1 0.74782 antibacterial 0.64 0.07 0.12 0.18 0.00 0.05 0.38 0.21 0.18 0.02 0.19 NC_003888.3_NC_003888.3_5463;NC_003888.3_NC_003888.3_5464;NC_003888.3_NC_003888.3_5465;NC_003888.3_NC_003888.3_5466;NC_003888.3_NC_003888.3_5467;NC_003888.3_NC_003888.3_5468;NC_003888.3_NC_003888.3_5469;NC_003888.3_NC_003888.3_5470;NC_003888.3_NC_003888.3_5471;NC_003888.3_NC_003888.3_5472;NC_003888.3_NC_003888.3_5473;NC_003888.3_NC_003888.3_5474;NC_003888.3_NC_003888.3_5475;NC_003888.3_NC_003888.3_5476;NC_003888.3_NC_003888.3_5477 PF01039 PF00440;PF04264;PF08124;PF02278;PF02884;PF01039;PF06833;PF13822;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF03029;PF05331;PF03259;PF02518;PF00672;PF08376;PF10370;PF01557 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6242667-6244234.1 6242667 6244234 1567 2 2 0 0.63827 antibacterial 0.87 0.09 0.17 0.29 RiPP 0.00 0.01 0.02 0.04 0.89 0.02 0.04 NC_003888.3_NC_003888.3_5653;NC_003888.3_NC_003888.3_5654 PF00082;PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6432592-6469131.1 6432592 6469131 36539 26 87 23 0.94502 0.48 0.43 0.14 0.24 NRP-Polyketide 0.01 0.69 0.02 0.94 0.00 0.02 0.00 NC_003888.3_NC_003888.3_5808;NC_003888.3_NC_003888.3_5809;NC_003888.3_NC_003888.3_5810;NC_003888.3_NC_003888.3_5811;NC_003888.3_NC_003888.3_5812;NC_003888.3_NC_003888.3_5813;NC_003888.3_NC_003888.3_5814;NC_003888.3_NC_003888.3_5815;NC_003888.3_NC_003888.3_5816;NC_003888.3_NC_003888.3_5817;NC_003888.3_NC_003888.3_5818;NC_003888.3_NC_003888.3_5819;NC_003888.3_NC_003888.3_5820;NC_003888.3_NC_003888.3_5821;NC_003888.3_NC_003888.3_5822;NC_003888.3_NC_003888.3_5823;NC_003888.3_NC_003888.3_5824;NC_003888.3_NC_003888.3_5825;NC_003888.3_NC_003888.3_5826;NC_003888.3_NC_003888.3_5827;NC_003888.3_NC_003888.3_5828;NC_003888.3_NC_003888.3_5829;NC_003888.3_NC_003888.3_5830;NC_003888.3_NC_003888.3_5831;NC_003888.3_NC_003888.3_5832;NC_003888.3_NC_003888.3_5833 PF08242;PF00106;PF02770;PF00108;PF00891;PF00698;PF00441;PF00501;PF01370;PF00155;PF08545;PF08028;PF07993;PF00355;PF02719;PF00975;PF01553;PF08241;PF02771;PF04321;PF02801;PF08541;PF00109 PF00486;PF03704;PF00109;PF00108;PF02801;PF16197;PF02771;PF02770;PF00441;PF08028;PF11639;PF00196;PF08281;PF04545;PF13936;PF00072;PF01648;PF09534;PF02801;PF00109;PF00108;PF00550;PF00108;PF08545;PF08541;PF00550;PF00550;PF00155;PF01053;PF01212;PF00501;PF13193;PF00501;PF00550;PF00109;PF00108;PF02801;PF16197;PF00698;PF00155;PF01053;PF04321;PF01370;PF02719;PF05368;PF00106;PF16363;PF01073;PF13460;PF07993;PF00975;PF12697;PF12147;PF00891;PF13489;PF06080;PF05175;PF12847;PF01209;PF02353;PF13847;PF08003;PF05401;PF02390;PF08241;PF13578;PF08242;PF13649;PF01739;PF01326;PF00391;PF00355;PF00848;PF01222;PF06966;PF02544;PF04191;PF01553;PF13520;PF02705;PF01938;PF01135;PF05175;PF13847;PF13649;PF02254;PF05958 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6514552-6529472.1 6514552 6529472 14920 11 23 1 0.59311 0.36 0.15 0.42 0.16 0.07 0.10 0.32 0.29 0.18 0.02 0.07 NC_003888.3_NC_003888.3_5876;NC_003888.3_NC_003888.3_5877;NC_003888.3_NC_003888.3_5878;NC_003888.3_NC_003888.3_5879;NC_003888.3_NC_003888.3_5880;NC_003888.3_NC_003888.3_5881;NC_003888.3_NC_003888.3_5882;NC_003888.3_NC_003888.3_5883;NC_003888.3_NC_003888.3_5884;NC_003888.3_NC_003888.3_5885;NC_003888.3_NC_003888.3_5886 PF01494 PF07690;PF00083;PF13347;PF01494;PF00070;PF06353;PF07690;PF00083;PF06609;PF00440;PF16859;PF01925;PF08937;PF13676;PF01582;PF00400;PF00553;PF00041;PF00704;PF00440;PF07690;PF05977;PF13347 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6552934-6557688.1 6552934 6557688 4754 4 9 2 0.58364 antibacterial 0.67 0.16 0.20 0.24 Polyketide 0.01 0.02 0.30 0.61 0.06 0.01 0.03 NC_003888.3_NC_003888.3_5907;NC_003888.3_NC_003888.3_5908;NC_003888.3_NC_003888.3_5909;NC_003888.3_NC_003888.3_5910 PF00378;PF01494 PF13581;PF00378;PF16113;PF01494;PF07992;PF13450;PF00724;PF00685;PF13469 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6558618-6560310.1 6558618 6560310 1692 1 2 1 0.54471 antibacterial 0.92 0.01 0.04 0.07 Polyketide 0.00 0.23 0.23 0.54 0.00 0.00 0.00 NC_003888.3_NC_003888.3_5912 PF00501 PF13193;PF00501 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6730692-6730926.1 6730692 6730926 234 1 1 0 0.67083 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6060 PF04149 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6731916-6732270.1 6731916 6732270 354 1 1 0 0.53821 antibacterial 0.87 0.07 0.17 0.26 0.00 0.07 0.06 0.37 0.24 0.02 0.28 NC_003888.3_NC_003888.3_6062 PF13581 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6740465-6743446.1 6740465 6743446 2981 4 9 0 0.64534 antibacterial 0.79 0.07 0.07 0.27 0.00 0.11 0.09 0.31 0.32 0.02 0.19 NC_003888.3_NC_003888.3_6071;NC_003888.3_NC_003888.3_6072;NC_003888.3_NC_003888.3_6073;NC_003888.3_NC_003888.3_6074 PF07730;PF00072;PF00196;PF08281;PF04545;PF13384;PF14351;PF11716;PF12867 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6780614-6817281.1 6780614 6817281 36667 27 75 10 0.91087 0.39 0.22 0.18 0.24 Saccharide 0.01 0.22 0.17 0.10 0.01 0.52 0.01 NC_003888.3_NC_003888.3_6107;NC_003888.3_NC_003888.3_6108;NC_003888.3_NC_003888.3_6109;NC_003888.3_NC_003888.3_6110;NC_003888.3_NC_003888.3_6111;NC_003888.3_NC_003888.3_6112;NC_003888.3_NC_003888.3_6113;NC_003888.3_NC_003888.3_6114;NC_003888.3_NC_003888.3_6115;NC_003888.3_NC_003888.3_6116;NC_003888.3_NC_003888.3_6117;NC_003888.3_NC_003888.3_6118;NC_003888.3_NC_003888.3_6119;NC_003888.3_NC_003888.3_6120;NC_003888.3_NC_003888.3_6121;NC_003888.3_NC_003888.3_6122;NC_003888.3_NC_003888.3_6123;NC_003888.3_NC_003888.3_6124;NC_003888.3_NC_003888.3_6125;NC_003888.3_NC_003888.3_6126;NC_003888.3_NC_003888.3_6127;NC_003888.3_NC_003888.3_6128;NC_003888.3_NC_003888.3_6129;NC_003888.3_NC_003888.3_6130;NC_003888.3_NC_003888.3_6131;NC_003888.3_NC_003888.3_6132;NC_003888.3_NC_003888.3_6133 PF00106;PF02719;PF00702;PF00535;PF01075;PF00534;PF00501;PF01370;PF04321;PF00561 PF12697;PF12146;PF00561;PF03372;PF10604;PF01522;PF04321;PF01370;PF00106;PF16363;PF01073;PF13460;PF02254;PF02719;PF02543;PF16861;PF13641;PF00535;PF13506;PF13632;PF02709;PF13344;PF13419;PF00702;PF13242;PF01075;PF00534;PF13692;PF13524;PF13439;PF13579;PF13477;PF08323;PF13692;PF00534;PF13524;PF13580;PF01380;PF00294;PF01467;PF01075;PF13641;PF00535;PF13506;PF13632;PF13641;PF00535;PF04230;PF06224;PF00196;PF08281;PF14559;PF13401;PF13191;PF13481;PF05729;PF13604;PF00005;PF00196;PF04545;PF13185;PF01590;PF13492;PF00501;PF13193;PF00501;PF13193;PF03752;PF00089;PF13365;PF13517;PF01839;PF02776;PF00205;PF02775 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6821468-6822308.1 6821468 6822308 840 1 1 0 0.55098 antibacterial 0.80 0.06 0.16 0.25 0.00 0.09 0.11 0.30 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6138 PF01261 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6831345-6850522.1 6831345 6850522 19177 10 14 3 0.68857 0.36 0.21 0.17 0.11 Other 0.01 0.31 0.53 0.20 0.01 0.06 0.03 NC_003888.3_NC_003888.3_6150;NC_003888.3_NC_003888.3_6151;NC_003888.3_NC_003888.3_6152;NC_003888.3_NC_003888.3_6153;NC_003888.3_NC_003888.3_6154;NC_003888.3_NC_003888.3_6155;NC_003888.3_NC_003888.3_6156;NC_003888.3_NC_003888.3_6157;NC_003888.3_NC_003888.3_6158;NC_003888.3_NC_003888.3_6159 PF04183;PF00155;PF01041 PF00300;PF13385;PF05593;PF00155;PF00266;PF01041;PF01638;PF02036;PF00092;PF13519;PF06276;PF04183;PF04183;PF06276 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6859657-6862082.1 6859657 6862082 2425 4 7 0 0.61623 antibacterial 0.81 0.12 0.15 0.30 0.00 0.06 0.09 0.29 0.35 0.02 0.22 NC_003888.3_NC_003888.3_6167;NC_003888.3_NC_003888.3_6168;NC_003888.3_NC_003888.3_6169;NC_003888.3_NC_003888.3_6170 PF04149;PF13560;PF01381;PF12844;PF13581;PF11716;PF07398 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6889623-6949758.1 6889623 6949758 60135 26 107 23 0.84593 antibacterial 0.67 0.30 0.06 0.09 Polyketide 0.00 0.08 0.01 0.97 0.02 0.04 0.01 NC_003888.3_NC_003888.3_6196;NC_003888.3_NC_003888.3_6197;NC_003888.3_NC_003888.3_6198;NC_003888.3_NC_003888.3_6199;NC_003888.3_NC_003888.3_6200;NC_003888.3_NC_003888.3_6201;NC_003888.3_NC_003888.3_6202;NC_003888.3_NC_003888.3_6203;NC_003888.3_NC_003888.3_6204;NC_003888.3_NC_003888.3_6205;NC_003888.3_NC_003888.3_6206;NC_003888.3_NC_003888.3_6207;NC_003888.3_NC_003888.3_6208;NC_003888.3_NC_003888.3_6209;NC_003888.3_NC_003888.3_6210;NC_003888.3_NC_003888.3_6211;NC_003888.3_NC_003888.3_6212;NC_003888.3_NC_003888.3_6213;NC_003888.3_NC_003888.3_6214;NC_003888.3_NC_003888.3_6215;NC_003888.3_NC_003888.3_6216;NC_003888.3_NC_003888.3_6217;NC_003888.3_NC_003888.3_6218;NC_003888.3_NC_003888.3_6219;NC_003888.3_NC_003888.3_6220;NC_003888.3_NC_003888.3_6221 PF00106;PF02786;PF00108;PF00289;PF00698;PF08990;PF01370;PF00202;PF03756;PF01039;PF07993;PF02719;PF00975;PF01494;PF02737;PF02785;PF04321;PF01266;PF02801;PF08659;PF00109;PF04820;PF00561 PF00106;PF08659;PF13561;PF00440;PF03756;PF05368;PF03435;PF01370;PF13460;PF02518;PF13581;PF07730;PF02775;PF17147;PF01855;PF02776;PF01558;PF00364;PF13533;PF02785;PF02786;PF15632;PF02222;PF07478;PF00289;PF10518;PF01565;PF08031;PF07993;PF01370;PF16363;PF04321;PF01073;PF00550;PF08659;PF00106;PF13561;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00698;PF00109;PF00108;PF00550;PF08659;PF00106;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF08990;PF00550;PF08659;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF00109;PF00108;PF00106;PF00698;PF01494;PF12831;PF00890;PF00561;PF12697;PF12146;PF07690;PF12832;PF03209;PF05977;PF00083;PF13347;PF00202;PF00486;PF03704;PF10518;PF01565;PF08031;PF13561;PF00106;PF08659;PF13460;PF05368;PF01039;PF13822;PF00440;PF00975;PF12697;PF03959;PF00486;PF03704;PF01266;PF01262;PF07992;PF02737;PF00890;PF13450;PF04820 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_6962348-6966485.1 6962348 6966485 4137 4 9 3 0.54483 antibacterial 0.64 0.28 0.06 0.23 0.05 0.03 0.22 0.23 0.03 0.07 0.44 NC_003888.3_NC_003888.3_6234;NC_003888.3_NC_003888.3_6235;NC_003888.3_NC_003888.3_6236;NC_003888.3_NC_003888.3_6237 PF01593;PF01494;PF00903 PF01557;PF00903;PF13468;PF04909;PF01494;PF01593;PF07992;PF00890;PF13450 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7078584-7118257.1 7078584 7118257 39673 25 58 6 0.86082 antibacterial 0.66 0.24 0.15 0.14 NRP 0.02 0.81 0.14 0.05 0.01 0.03 0.00 NC_003888.3_NC_003888.3_6336;NC_003888.3_NC_003888.3_6337;NC_003888.3_NC_003888.3_6338;NC_003888.3_NC_003888.3_6339;NC_003888.3_NC_003888.3_6340;NC_003888.3_NC_003888.3_6341;NC_003888.3_NC_003888.3_6342;NC_003888.3_NC_003888.3_6343;NC_003888.3_NC_003888.3_6344;NC_003888.3_NC_003888.3_6345;NC_003888.3_NC_003888.3_6346;NC_003888.3_NC_003888.3_6347;NC_003888.3_NC_003888.3_6348;NC_003888.3_NC_003888.3_6349;NC_003888.3_NC_003888.3_6350;NC_003888.3_NC_003888.3_6351;NC_003888.3_NC_003888.3_6352;NC_003888.3_NC_003888.3_6353;NC_003888.3_NC_003888.3_6354;NC_003888.3_NC_003888.3_6355;NC_003888.3_NC_003888.3_6356;NC_003888.3_NC_003888.3_6357;NC_003888.3_NC_003888.3_6358;NC_003888.3_NC_003888.3_6359;NC_003888.3_NC_003888.3_6360 PF00975;PF06339;PF00668;PF01050;PF00501;PF00202 PF00202;PF07905;PF13556;PF00795;PF01979;PF07969;PF00296;PF02133;PF13229;PF05048;PF12708;PF12218;PF12079;PF02627;PF07730;PF13581;PF00072;PF08281;PF04545;PF00196;PF03099;PF13581;PF07730;PF00672;PF12833;PF00165;PF05977;PF07690;PF01569;PF00041;PF03422;PF07971;PF14403;PF04174;PF05977;PF07690;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00975;PF05899;PF07883;PF13434;PF07992;PF07883;PF06339;PF01050;PF11699;PF00190;PF02311;PF05899;PF12852;PF14525 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7126476-7127388.1 7126476 7127388 912 1 1 0 0.53113 antibacterial 0.88 0.06 0.16 0.24 0.00 0.08 0.07 0.34 0.22 0.03 0.31 NC_003888.3_NC_003888.3_6368 PF04072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7233668-7252420.1 7233668 7252420 18752 13 37 8 0.82411 0.29 0.34 0.32 0.12 0.04 0.24 0.20 0.40 0.06 0.06 0.12 NC_003888.3_NC_003888.3_6465;NC_003888.3_NC_003888.3_6466;NC_003888.3_NC_003888.3_6467;NC_003888.3_NC_003888.3_6468;NC_003888.3_NC_003888.3_6469;NC_003888.3_NC_003888.3_6470;NC_003888.3_NC_003888.3_6471;NC_003888.3_NC_003888.3_6472;NC_003888.3_NC_003888.3_6473;NC_003888.3_NC_003888.3_6474;NC_003888.3_NC_003888.3_6475;NC_003888.3_NC_003888.3_6476;NC_003888.3_NC_003888.3_6477 PF08242;PF00106;PF02719;PF00248;PF08659;PF08241;PF00501;PF01370 PF01329;PF13489;PF05401;PF01209;PF13847;PF02353;PF08241;PF05148;PF08242;PF13649;PF13517;PF01839;PF10099;PF00553;PF15902;PF02011;PF16640;PF00553;PF00553;PF01341;PF13489;PF13847;PF13649;PF08241;PF08242;PF00106;PF08659;PF02719;PF01370;PF03807;PF13460;PF13561;PF00248;PF00501;PF07690;PF00083;PF06609 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7385659-7388675.1 7385659 7388675 3016 3 7 1 0.64353 antibacterial 0.51 0.16 0.12 0.15 Saccharide 0.00 0.01 0.02 0.01 0.21 0.71 0.04 NC_003888.3_NC_003888.3_6571;NC_003888.3_NC_003888.3_6572;NC_003888.3_NC_003888.3_6573 PF00534 PF01242;PF13579;PF13439;PF00534;PF13692;PF13847;PF13649 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7422738-7424568.1 7422738 7424568 1830 1 3 0 0.50924 antibacterial 0.71 0.03 0.12 0.16 RiPP 0.00 0.02 0.09 0.02 0.84 0.00 0.03 NC_003888.3_NC_003888.3_6604 PF00664;PF00005;PF13191 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7426395-7426995.1 7426395 7426995 600 1 10 0 0.50130 antibacterial 0.80 0.11 0.10 0.26 0.00 0.08 0.21 0.23 0.36 0.01 0.16 NC_003888.3_NC_003888.3_6606 PF00196;PF08279;PF04545;PF08281;PF14493;PF09339;PF13384;PF13412;PF13518;PF00072 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7513979-7524428.1 7513979 7524428 10449 10 28 7 0.71486 0.33 0.43 0.12 0.05 Terpene 0.04 0.04 0.10 0.03 0.25 0.04 0.55 NC_003888.3_NC_003888.3_6677;NC_003888.3_NC_003888.3_6678;NC_003888.3_NC_003888.3_6679;NC_003888.3_NC_003888.3_6680;NC_003888.3_NC_003888.3_6681;NC_003888.3_NC_003888.3_6682;NC_003888.3_NC_003888.3_6683;NC_003888.3_NC_003888.3_6684;NC_003888.3_NC_003888.3_6685;NC_003888.3_NC_003888.3_6686 PF01266;PF00494;PF01494;PF00432;PF00348;PF04055;PF01593 PF01061;PF12698;PF00005;PF13555;PF13401;PF13304;PF13476;PF00494;PF00494;PF07992;PF01266;PF00070;PF00890;PF03486;PF12831;PF01494;PF01134;PF13450;PF01593;PF00348;PF13249;PF13243;PF00432;PF01048;PF04055;PF13394;PF13353;PF11946 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7527583-7528969.1 7527583 7528969 1386 1 1 1 0.51596 antibacterial 0.85 0.06 0.20 0.27 0.00 0.01 0.50 0.02 0.02 0.00 0.45 NC_003888.3_NC_003888.3_6689 PF00202 PF00202 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7529794-7530592.1 7529794 7530592 798 1 1 0 0.51222 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6692 PF13350 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7532360-7533986.1 7532360 7533986 1626 2 6 0 0.52073 antibacterial 0.59 0.05 0.13 0.19 Other 0.00 0.05 0.52 0.18 0.09 0.03 0.17 NC_003888.3_NC_003888.3_6694;NC_003888.3_NC_003888.3_6695 PF00657;PF13472;PF13977;PF16859;PF13305;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7536361-7558856.1 7536361 7558856 22495 19 43 14 0.71909 0.36 0.20 0.27 0.26 Polyketide 0.00 0.31 0.15 0.61 0.05 0.02 0.05 NC_003888.3_NC_003888.3_6698;NC_003888.3_NC_003888.3_6699;NC_003888.3_NC_003888.3_6700;NC_003888.3_NC_003888.3_6701;NC_003888.3_NC_003888.3_6702;NC_003888.3_NC_003888.3_6703;NC_003888.3_NC_003888.3_6704;NC_003888.3_NC_003888.3_6705;NC_003888.3_NC_003888.3_6706;NC_003888.3_NC_003888.3_6707;NC_003888.3_NC_003888.3_6708;NC_003888.3_NC_003888.3_6709;NC_003888.3_NC_003888.3_6710;NC_003888.3_NC_003888.3_6711;NC_003888.3_NC_003888.3_6712;NC_003888.3_NC_003888.3_6713;NC_003888.3_NC_003888.3_6714;NC_003888.3_NC_003888.3_6715;NC_003888.3_NC_003888.3_6716 PF02803;PF00378;PF00171;PF02770;PF08240;PF00725;PF00108;PF08028;PF00109;PF00441;PF02771;PF02737;PF00107;PF00501 PF14246;PF00440;PF08279;PF13384;PF09995;PF00440;PF13602;PF00107;PF16912;PF00291;PF08240;PF14232;PF14231;PF00440;PF02515;PF00296;PF02771;PF14749;PF02770;PF00441;PF08028;PF00108;PF00109;PF02803;PF00378;PF16113;PF02737;PF03446;PF00725;PF00501;PF00441;PF08028;PF02770;PF02771;PF00440;PF13309;PF00356;PF00171;PF02518;PF03259;PF05331;PF09339;PF03029 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7614563-7615928.1 7614563 7615928 1365 1 1 0 0.59332 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_6760 PF03771 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7623284-7715706.1 7623284 7715706 92422 100 87 10 0.84839 antibacterial 0.52 0.14 0.13 0.20 RiPP 0.00 0.07 0.26 0.10 0.51 0.10 0.01 NC_003888.3_NC_003888.3_6768;NC_003888.3_NC_003888.3_6769;NC_003888.3_NC_003888.3_6770;NC_003888.3_NC_003888.3_6771;NC_003888.3_NC_003888.3_6772;NC_003888.3_NC_003888.3_6773;NC_003888.3_NC_003888.3_6774;NC_003888.3_NC_003888.3_6775;NC_003888.3_NC_003888.3_6776;NC_003888.3_NC_003888.3_6777;NC_003888.3_NC_003888.3_6778;NC_003888.3_NC_003888.3_6779;NC_003888.3_NC_003888.3_6780;NC_003888.3_NC_003888.3_6781;NC_003888.3_NC_003888.3_6782;NC_003888.3_NC_003888.3_6783;NC_003888.3_NC_003888.3_6784;NC_003888.3_NC_003888.3_6785;NC_003888.3_NC_003888.3_6786;NC_003888.3_NC_003888.3_6787;NC_003888.3_NC_003888.3_6788;NC_003888.3_NC_003888.3_6789;NC_003888.3_NC_003888.3_6790;NC_003888.3_NC_003888.3_6791;NC_003888.3_NC_003888.3_6792;NC_003888.3_NC_003888.3_6793;NC_003888.3_NC_003888.3_6794;NC_003888.3_NC_003888.3_6795;NC_003888.3_NC_003888.3_6796;NC_003888.3_NC_003888.3_6797;NC_003888.3_NC_003888.3_6798;NC_003888.3_NC_003888.3_6799;NC_003888.3_NC_003888.3_6800;NC_003888.3_NC_003888.3_6801;NC_003888.3_NC_003888.3_6802;NC_003888.3_NC_003888.3_6803;NC_003888.3_NC_003888.3_6804;NC_003888.3_NC_003888.3_6805;NC_003888.3_NC_003888.3_6806;NC_003888.3_NC_003888.3_6807;NC_003888.3_NC_003888.3_6808;NC_003888.3_NC_003888.3_6809;NC_003888.3_NC_003888.3_6810;NC_003888.3_NC_003888.3_6811;NC_003888.3_NC_003888.3_6812;NC_003888.3_NC_003888.3_6813;NC_003888.3_NC_003888.3_6814;NC_003888.3_NC_003888.3_6815;NC_003888.3_NC_003888.3_6816;NC_003888.3_NC_003888.3_6817;NC_003888.3_NC_003888.3_6818;NC_003888.3_NC_003888.3_6819;NC_003888.3_NC_003888.3_6820;NC_003888.3_NC_003888.3_6821;NC_003888.3_NC_003888.3_6822;NC_003888.3_NC_003888.3_6823;NC_003888.3_NC_003888.3_6824;NC_003888.3_NC_003888.3_6825;NC_003888.3_NC_003888.3_6826;NC_003888.3_NC_003888.3_6827;NC_003888.3_NC_003888.3_6828;NC_003888.3_NC_003888.3_6829;NC_003888.3_NC_003888.3_6830;NC_003888.3_NC_003888.3_6831;NC_003888.3_NC_003888.3_6832;NC_003888.3_NC_003888.3_6833;NC_003888.3_NC_003888.3_6834;NC_003888.3_NC_003888.3_6835;NC_003888.3_NC_003888.3_6836;NC_003888.3_NC_003888.3_6837;NC_003888.3_NC_003888.3_6838;NC_003888.3_NC_003888.3_6839;NC_003888.3_NC_003888.3_6840;NC_003888.3_NC_003888.3_6841;NC_003888.3_NC_003888.3_6842;NC_003888.3_NC_003888.3_6843;NC_003888.3_NC_003888.3_6844;NC_003888.3_NC_003888.3_6845;NC_003888.3_NC_003888.3_6846;NC_003888.3_NC_003888.3_6847;NC_003888.3_NC_003888.3_6848;NC_003888.3_NC_003888.3_6849;NC_003888.3_NC_003888.3_6850;NC_003888.3_NC_003888.3_6851;NC_003888.3_NC_003888.3_6852;NC_003888.3_NC_003888.3_6853;NC_003888.3_NC_003888.3_6854;NC_003888.3_NC_003888.3_6855;NC_003888.3_NC_003888.3_6856;NC_003888.3_NC_003888.3_6857;NC_003888.3_NC_003888.3_6858;NC_003888.3_NC_003888.3_6859;NC_003888.3_NC_003888.3_6860;NC_003888.3_NC_003888.3_6861;NC_003888.3_NC_003888.3_6862;NC_003888.3_NC_003888.3_6863;NC_003888.3_NC_003888.3_6864;NC_003888.3_NC_003888.3_6865;NC_003888.3_NC_003888.3_6866;NC_003888.3_NC_003888.3_6867 PF01636;PF02770;PF02786;PF00702;PF08028;PF00441;PF02771;PF05147;PF00535;PF04738 PF03771;PF03771;PF03771;PF00069;PF07714;PF01636;PF01163;PF00656;PF05762;PF13519;PF05496;PF07728;PF07726;PF00004;PF13191;PF00535;PF02195;PF12846;PF11203;PF00877;PF01555;PF16259;PF08239;PF01638;PF07690;PF15632;PF01071;PF13549;PF02786;PF02655;PF02222;PF07478;PF13535;PF07690;PF13419;PF00702;PF13242;PF03771;PF03771;PF13620;PF14686;PF13634;PF01068;PF13586;PF01609;PF13340;PF13340;PF01609;PF13586;PF03771;PF03771;PF03432;PF05713;PF02467;PF13730;PF13560;PF01135;PF13649;PF01209;PF00398;PF05175;PF13847;PF14028;PF05147;PF14028;PF04738;PF00196;PF13556;PF08279;PF08281;PF00441;PF08028;PF02770;PF02771;PF01590;PF03029;PF00009;PF05331;PF03259;PF02518;PF13581;PF00723;PF13424;PF01980;PF13581;PF01636;PF03881 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7725809-7731922.1 7725809 7731922 6113 8 8 0 0.55681 antibacterial 0.98 0.12 0.02 0.15 Terpene 0.00 0.09 0.06 0.15 0.06 0.03 0.64 NC_003888.3_NC_003888.3_6874;NC_003888.3_NC_003888.3_6875;NC_003888.3_NC_003888.3_6876;NC_003888.3_NC_003888.3_6877;NC_003888.3_NC_003888.3_6878;NC_003888.3_NC_003888.3_6879;NC_003888.3_NC_003888.3_6880;NC_003888.3_NC_003888.3_6881 PF04066;PF03334;PF16262;PF00293;PF04909;PF00120;PF16952;PF11338 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7733253-7734441.1 7733253 7734441 1188 1 3 3 0.50221 antibacterial 0.60 0.05 0.20 0.33 Polyketide 0.00 0.39 0.12 0.67 0.06 0.01 0.09 NC_003888.3_NC_003888.3_6884 PF02803;PF00109;PF00108 PF00108;PF00109;PF02803 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7759824-7770083.1 7759824 7770083 10259 7 11 1 0.67889 antibacterial 0.68 0.07 0.07 0.17 0.00 0.04 0.09 0.26 0.43 0.00 0.34 NC_003888.3_NC_003888.3_6909;NC_003888.3_NC_003888.3_6910;NC_003888.3_NC_003888.3_6911;NC_003888.3_NC_003888.3_6912;NC_003888.3_NC_003888.3_6913;NC_003888.3_NC_003888.3_6914;NC_003888.3_NC_003888.3_6915 PF00067 PF01400;PF13191;PF08281;PF00196;PF13384;PF12770;PF13424;PF13432;PF00082;PF04542;PF00067 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7845510-7847365.1 7845510 7847365 1855 2 8 0 0.60306 antibacterial 0.82 0.06 0.17 0.25 0.00 0.06 0.16 0.21 0.33 0.00 0.26 NC_003888.3_NC_003888.3_6974;NC_003888.3_NC_003888.3_6975 PF00392;PF14502;PF13545;PF13518;PF08220;PF08279;PF05448;PF00326 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7902487-7918281.1 7902487 7918281 15794 13 35 9 0.71780 0.41 0.48 0.26 0.05 0.09 0.26 0.28 0.16 0.07 0.08 0.12 NC_003888.3_NC_003888.3_7027;NC_003888.3_NC_003888.3_7028;NC_003888.3_NC_003888.3_7029;NC_003888.3_NC_003888.3_7030;NC_003888.3_NC_003888.3_7031;NC_003888.3_NC_003888.3_7032;NC_003888.3_NC_003888.3_7033;NC_003888.3_NC_003888.3_7034;NC_003888.3_NC_003888.3_7035;NC_003888.3_NC_003888.3_7036;NC_003888.3_NC_003888.3_7037;NC_003888.3_NC_003888.3_7038;NC_003888.3_NC_003888.3_7039 PF01266;PF08242;PF02585;PF00171;PF08241;PF00583;PF00501;PF01370;PF04321 PF17197;PF00171;PF00501;PF02585;PF14759;PF07992;PF13738;PF00070;PF03486;PF01266;PF13450;PF01262;PF13489;PF08241;PF08242;PF13649;PF05891;PF02826;PF00033;PF14358;PF13631;PF12697;PF12695;PF12146;PF13673;PF00583;PF13508;PF00198;PF00364;PF00456;PF05368;PF13460;PF10021;PF01370;PF04321 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7919132-7921208.1 7919132 7921208 2076 2 10 1 0.50408 0.32 0.04 0.47 0.08 0.04 0.10 0.39 0.23 0.15 0.06 0.07 NC_003888.3_NC_003888.3_7041;NC_003888.3_NC_003888.3_7042 PF01050 PF02311;PF00190;PF07883;PF01050;PF13347;PF07690;PF00083;PF05977;PF06609;PF12832 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7922096-7922885.1 7922096 7922885 789 1 1 0 0.50917 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7044 PF04248 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7928147-7929485.1 7928147 7929485 1338 2 4 1 0.53907 antibacterial 0.83 0.13 0.15 0.41 Polyketide 0.01 0.17 0.04 0.56 0.17 0.03 0.12 NC_003888.3_NC_003888.3_7049;NC_003888.3_NC_003888.3_7050 PF01370 PF02566;PF05368;PF01370;PF13460 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7955999-7956833.1 7955999 7956833 834 1 1 0 0.58086 antibacterial 0.98 0.11 0.04 0.17 Terpene 0.00 0.10 0.04 0.15 0.06 0.02 0.65 NC_003888.3_NC_003888.3_7074 PF04909 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7966014-7973441.1 7966014 7973441 7427 5 12 1 0.58093 antibacterial 0.68 0.06 0.10 0.30 0.00 0.08 0.26 0.15 0.22 0.12 0.18 NC_003888.3_NC_003888.3_7083;NC_003888.3_NC_003888.3_7084;NC_003888.3_NC_003888.3_7085;NC_003888.3_NC_003888.3_7086;NC_003888.3_NC_003888.3_7087 PF00903 PF07602;PF05048;PF13229;PF03422;PF00903;PF13191;PF13401;PF08281;PF13936;PF00196;PF13384;PF04686 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_7977962-7981423.1 7977962 7981423 3461 3 7 1 0.59622 antibacterial 0.81 0.10 0.13 0.29 0.00 0.28 0.13 0.39 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7089;NC_003888.3_NC_003888.3_7090;NC_003888.3_NC_003888.3_7091 PF03992 PF13384;PF00196;PF13518;PF08279;PF13542;PF01510;PF03992 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8003570-8072654.1 8003570 8072654 69084 63 123 12 0.74116 cytotoxic 0.29 0.51 0.17 0.10 0.06 0.33 0.16 0.24 0.08 0.09 0.12 NC_003888.3_NC_003888.3_7110;NC_003888.3_NC_003888.3_7111;NC_003888.3_NC_003888.3_7112;NC_003888.3_NC_003888.3_7113;NC_003888.3_NC_003888.3_7114;NC_003888.3_NC_003888.3_7115;NC_003888.3_NC_003888.3_7116;NC_003888.3_NC_003888.3_7117;NC_003888.3_NC_003888.3_7118;NC_003888.3_NC_003888.3_7119;NC_003888.3_NC_003888.3_7120;NC_003888.3_NC_003888.3_7121;NC_003888.3_NC_003888.3_7122;NC_003888.3_NC_003888.3_7123;NC_003888.3_NC_003888.3_7124;NC_003888.3_NC_003888.3_7125;NC_003888.3_NC_003888.3_7126;NC_003888.3_NC_003888.3_7127;NC_003888.3_NC_003888.3_7128;NC_003888.3_NC_003888.3_7129;NC_003888.3_NC_003888.3_7130;NC_003888.3_NC_003888.3_7131;NC_003888.3_NC_003888.3_7132;NC_003888.3_NC_003888.3_7133;NC_003888.3_NC_003888.3_7134;NC_003888.3_NC_003888.3_7135;NC_003888.3_NC_003888.3_7136;NC_003888.3_NC_003888.3_7137;NC_003888.3_NC_003888.3_7138;NC_003888.3_NC_003888.3_7139;NC_003888.3_NC_003888.3_7140;NC_003888.3_NC_003888.3_7141;NC_003888.3_NC_003888.3_7142;NC_003888.3_NC_003888.3_7143;NC_003888.3_NC_003888.3_7144;NC_003888.3_NC_003888.3_7145;NC_003888.3_NC_003888.3_7146;NC_003888.3_NC_003888.3_7147;NC_003888.3_NC_003888.3_7148;NC_003888.3_NC_003888.3_7149;NC_003888.3_NC_003888.3_7150;NC_003888.3_NC_003888.3_7151;NC_003888.3_NC_003888.3_7152;NC_003888.3_NC_003888.3_7153;NC_003888.3_NC_003888.3_7154;NC_003888.3_NC_003888.3_7155;NC_003888.3_NC_003888.3_7156;NC_003888.3_NC_003888.3_7157;NC_003888.3_NC_003888.3_7158;NC_003888.3_NC_003888.3_7159;NC_003888.3_NC_003888.3_7160;NC_003888.3_NC_003888.3_7161;NC_003888.3_NC_003888.3_7162;NC_003888.3_NC_003888.3_7163;NC_003888.3_NC_003888.3_7164;NC_003888.3_NC_003888.3_7165;NC_003888.3_NC_003888.3_7166;NC_003888.3_NC_003888.3_7167;NC_003888.3_NC_003888.3_7168;NC_003888.3_NC_003888.3_7169;NC_003888.3_NC_003888.3_7170;NC_003888.3_NC_003888.3_7171;NC_003888.3_NC_003888.3_7172 PF01636;PF01266;PF08545;PF02894;PF01408;PF01494;PF08241;PF00501;PF01593;PF01370;PF03364;PF00561 PF04075;PF12802;PF01047;PF13463;PF09339;PF01325;PF14342;PF00561;PF12697;PF12146;PF12158;PF10604;PF03364;PF00652;PF14200;PF06439;PF06283;PF00652;PF14200;PF03422;PF00801;PF07995;PF01135;PF13489;PF01209;PF13847;PF13649;PF08241;PF13578;PF12698;PF12051;PF04229;PF01032;PF13476;PF00005;PF13555;PF13191;PF13304;PF06414;PF13671;PF01497;PF00300;PF13581;PF02518;PF07228;PF08448;PF08545;PF08392;PF00195;PF02909;PF00440;PF01494;PF07681;PF03067;PF02839;PF01957;PF01145;PF13229;PF07602;PF16990;PF03422;PF11350;PF00072;PF00486;PF00672;PF00512;PF02518;PF00115;PF12270;PF13631;PF00033;PF01292;PF03860;PF09995;PF00069;PF07714;PF01163;PF06293;PF01636;PF13374;PF13424;PF01946;PF01494;PF01266;PF12831;PF00890;PF07992;PF03486;PF01134;PF00070;PF13450;PF01593;PF05547;PF00144;PF00501;PF13193;PF00561;PF12697;PF12146;PF03096;PF04149;PF00582;PF07336;PF11706;PF01510;PF01636;PF01633;PF07228;PF08448;PF08447;PF02894;PF01408;PF08386;PF00561;PF03777;PF14437;PF00383;PF07992;PF01494;PF03807;PF01370;PF13460;PF03779 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8074200-8075100.1 8074200 8075100 900 1 1 1 0.50574 antibacterial 0.83 0.05 0.16 0.29 0.05 0.08 0.07 0.30 0.21 0.03 0.31 NC_003888.3_NC_003888.3_7175 PF00248 PF00248 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8078531-8079047.1 8078531 8079047 516 1 3 0 0.57140 antibacterial 0.87 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7180 PF04978;PF05163;PF12867 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8080100-8081558.1 8080100 8081558 1458 2 2 1 0.63624 antibacterial 0.82 0.05 0.14 0.27 0.05 0.07 0.13 0.29 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7182;NC_003888.3_NC_003888.3_7183 PF00248 PF00248;PF12680 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8088495-8089903.1 8088495 8089903 1408 2 2 1 0.57086 antibacterial 0.86 0.06 0.18 0.25 0.00 0.09 0.12 0.33 0.20 0.03 0.29 NC_003888.3_NC_003888.3_7193;NC_003888.3_NC_003888.3_7194 PF00903 PF06983;PF00903 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8090750-8092010.1 8090750 8092010 1260 1 3 1 0.53063 antibacterial 0.72 0.12 0.25 0.34 0.11 0.01 0.14 0.46 0.26 0.00 0.08 NC_003888.3_NC_003888.3_7196 PF01494 PF13450;PF01494;PF08491 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8094133-8097306.1 8094133 8097306 3173 3 4 0 0.62085 0.40 0.04 0.30 0.15 0.00 0.11 0.07 0.32 0.25 0.03 0.29 NC_003888.3_NC_003888.3_7200;NC_003888.3_NC_003888.3_7201;NC_003888.3_NC_003888.3_7202 PF04686;PF00296;PF07714;PF00069 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8168061-8170689.1 8168061 8170689 2628 3 3 2 0.59075 antibacterial 0.83 0.05 0.17 0.28 0.05 0.07 0.26 0.21 0.17 0.02 0.25 NC_003888.3_NC_003888.3_7264;NC_003888.3_NC_003888.3_7265;NC_003888.3_NC_003888.3_7266 PF02668;PF00248 PF13298;PF00248;PF02668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8172313-8173069.1 8172313 8173069 756 1 6 2 0.63484 antibacterial 0.52 0.07 0.10 0.44 0.00 0.38 0.18 0.38 0.02 0.02 0.03 NC_003888.3_NC_003888.3_7268 PF00975;PF00561 PF01738;PF12697;PF02230;PF12146;PF00561;PF00975 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8173886-8184384.1 8173886 8184384 10498 10 19 5 0.61466 0.46 0.10 0.39 0.11 Polyketide 0.03 0.20 0.11 0.65 0.00 0.03 0.03 NC_003888.3_NC_003888.3_7270;NC_003888.3_NC_003888.3_7271;NC_003888.3_NC_003888.3_7272;NC_003888.3_NC_003888.3_7273;NC_003888.3_NC_003888.3_7274;NC_003888.3_NC_003888.3_7275;NC_003888.3_NC_003888.3_7276;NC_003888.3_NC_003888.3_7277;NC_003888.3_NC_003888.3_7278;NC_003888.3_NC_003888.3_7279 PF00106;PF08240;PF08659;PF00107;PF01370 PF13556;PF13602;PF00107;PF16912;PF02254;PF08240;PF13561;PF00106;PF08659;PF00440;PF11716;PF07398;PF03600;PF02040;PF05977;PF07690;PF01370;PF16363;PF01073 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8190449-8218007.1 8190449 8218007 27558 29 63 9 0.75172 0.45 0.44 0.19 0.08 0.02 0.09 0.27 0.31 0.17 0.11 0.13 NC_003888.3_NC_003888.3_7286;NC_003888.3_NC_003888.3_7287;NC_003888.3_NC_003888.3_7288;NC_003888.3_NC_003888.3_7289;NC_003888.3_NC_003888.3_7290;NC_003888.3_NC_003888.3_7291;NC_003888.3_NC_003888.3_7292;NC_003888.3_NC_003888.3_7293;NC_003888.3_NC_003888.3_7294;NC_003888.3_NC_003888.3_7295;NC_003888.3_NC_003888.3_7296;NC_003888.3_NC_003888.3_7297;NC_003888.3_NC_003888.3_7298;NC_003888.3_NC_003888.3_7299;NC_003888.3_NC_003888.3_7300;NC_003888.3_NC_003888.3_7301;NC_003888.3_NC_003888.3_7302;NC_003888.3_NC_003888.3_7303;NC_003888.3_NC_003888.3_7304;NC_003888.3_NC_003888.3_7305;NC_003888.3_NC_003888.3_7306;NC_003888.3_NC_003888.3_7307;NC_003888.3_NC_003888.3_7308;NC_003888.3_NC_003888.3_7309;NC_003888.3_NC_003888.3_7310;NC_003888.3_NC_003888.3_7311;NC_003888.3_NC_003888.3_7312;NC_003888.3_NC_003888.3_7313;NC_003888.3_NC_003888.3_7314 PF01266;PF00106;PF01494;PF08659;PF01243;PF04055;PF01593;PF03364;PF00561 PF04972;PF14907;PF07228;PF10604;PF09297;PF00999;PF13493;PF00089;PF02983;PF10604;PF03364;PF01266;PF01946;PF03486;PF12831;PF00890;PF01494;PF00070;PF13450;PF01593;PF00106;PF08659;PF13561;PF01593;PF01266;PF01946;PF00070;PF07992;PF01494;PF12831;PF00890;PF13450;PF01593;PF00892;PF00083;PF13347;PF07690;PF03583;PF12697;PF00561;PF12146;PF05448;PF00326;PF00929;PF01032;PF01497;PF13401;PF00005;PF13191;PF13604;PF13304;PF13671;PF02492;PF13555;PF02463;PF13175;PF13476;PF01243;PF04055;PF04672;PF14602;PF00132;PF12464 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8228870-8235982.1 8228870 8235982 7112 8 11 3 0.67244 antibacterial 0.80 0.06 0.19 0.16 Terpene 0.10 0.02 0.04 0.20 0.14 0.01 0.55 NC_003888.3_NC_003888.3_7322;NC_003888.3_NC_003888.3_7323;NC_003888.3_NC_003888.3_7324;NC_003888.3_NC_003888.3_7325;NC_003888.3_NC_003888.3_7326;NC_003888.3_NC_003888.3_7327;NC_003888.3_NC_003888.3_7328;NC_003888.3_NC_003888.3_7329 PF00106;PF00067;PF08659 PF00106;PF08659;PF13561;PF13460;PF03631;PF02746;PF13378;PF00067;PF03029;PF13479;PF05331 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8241247-8241685.1 8241247 8241685 438 1 1 0 0.52761 antibacterial 0.89 0.01 0.03 0.09 0.00 0.01 0.05 0.02 0.46 0.01 0.46 NC_003888.3_NC_003888.3_7335 PF07883 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8242354-8286428.1 8242354 8286428 44074 46 107 13 0.73889 0.29 0.47 0.33 0.14 0.06 0.36 0.31 0.20 0.11 0.01 0.04 NC_003888.3_NC_003888.3_7337;NC_003888.3_NC_003888.3_7338;NC_003888.3_NC_003888.3_7339;NC_003888.3_NC_003888.3_7340;NC_003888.3_NC_003888.3_7341;NC_003888.3_NC_003888.3_7342;NC_003888.3_NC_003888.3_7343;NC_003888.3_NC_003888.3_7344;NC_003888.3_NC_003888.3_7345;NC_003888.3_NC_003888.3_7346;NC_003888.3_NC_003888.3_7347;NC_003888.3_NC_003888.3_7348;NC_003888.3_NC_003888.3_7349;NC_003888.3_NC_003888.3_7350;NC_003888.3_NC_003888.3_7351;NC_003888.3_NC_003888.3_7352;NC_003888.3_NC_003888.3_7353;NC_003888.3_NC_003888.3_7354;NC_003888.3_NC_003888.3_7355;NC_003888.3_NC_003888.3_7356;NC_003888.3_NC_003888.3_7357;NC_003888.3_NC_003888.3_7358;NC_003888.3_NC_003888.3_7359;NC_003888.3_NC_003888.3_7360;NC_003888.3_NC_003888.3_7361;NC_003888.3_NC_003888.3_7362;NC_003888.3_NC_003888.3_7363;NC_003888.3_NC_003888.3_7364;NC_003888.3_NC_003888.3_7365;NC_003888.3_NC_003888.3_7366;NC_003888.3_NC_003888.3_7367;NC_003888.3_NC_003888.3_7368;NC_003888.3_NC_003888.3_7369;NC_003888.3_NC_003888.3_7370;NC_003888.3_NC_003888.3_7371;NC_003888.3_NC_003888.3_7372;NC_003888.3_NC_003888.3_7373;NC_003888.3_NC_003888.3_7374;NC_003888.3_NC_003888.3_7375;NC_003888.3_NC_003888.3_7376;NC_003888.3_NC_003888.3_7377;NC_003888.3_NC_003888.3_7378;NC_003888.3_NC_003888.3_7379;NC_003888.3_NC_003888.3_7380;NC_003888.3_NC_003888.3_7381;NC_003888.3_NC_003888.3_7382 PF08242;PF00171;PF00857;PF00975;PF01494;PF00891;PF03061;PF08241;PF03992;PF00583;PF00501;PF00067;PF00561 PF11563;PF00042;PF00970;PF08030;PF00175;PF01955;PF06532;PF02031;PF05547;PF00413;PF00126;PF13556;PF03466;PF03413;PF06779;PF07690;PF00083;PF06609;PF13347;PF00171;PF02775;PF00205;PF02776;PF00126;PF13556;PF03466;PF03575;PF12697;PF12146;PF00561;PF03096;PF00975;PF00440;PF02878;PF02879;PF02880;PF00408;PF00067;PF05175;PF13489;PF02353;PF13847;PF07021;PF13649;PF08241;PF08242;PF13578;PF13581;PF13302;PF00583;PF00989;PF13188;PF08448;PF13426;PF01590;PF13185;PF13492;PF07228;PF04203;PF03992;PF04486;PF04673;PF00891;PF13649;PF16864;PF08100;PF13229;PF07602;PF12708;PF05048;PF02659;PF04471;PF13156;PF00857;PF06737;PF00005;PF13555;PF13304;PF12128;PF00089;PF13365;PF09342;PF01925;PF13581;PF13589;PF02518;PF03259;PF05331;PF00009;PF08477;PF00071;PF01926;PF03029;PF11991;PF00743;PF07992;PF13738;PF13434;PF13450;PF00890;PF01494;PF14535;PF00501;PF03061;PF05138;PF06243;PF05138 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8288250-8293976.1 8288250 8293976 5726 5 6 1 0.61630 antibacterial 0.66 0.04 0.13 0.40 Polyketide 0.01 0.00 0.17 0.69 0.05 0.06 0.03 NC_003888.3_NC_003888.3_7385;NC_003888.3_NC_003888.3_7386;NC_003888.3_NC_003888.3_7387;NC_003888.3_NC_003888.3_7388;NC_003888.3_NC_003888.3_7389 PF01636 PF05426;PF01636;PF05977;PF09835;PF07690;PF11706 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8311491-8314671.1 8311491 8314671 3180 2 2 0 0.52537 antibacterial 0.86 0.06 0.17 0.26 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003888.3_NC_003888.3_7409;NC_003888.3_NC_003888.3_7410 PF02133;PF04616 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8319173-8321994.1 8319173 8321994 2821 2 4 1 0.61003 antibacterial 0.87 0.06 0.18 0.25 0.00 0.07 0.27 0.23 0.17 0.02 0.27 NC_003888.3_NC_003888.3_7415;NC_003888.3_NC_003888.3_7416 PF02668 PF02837;PF00703;PF02836;PF02668 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8438150-8466318.1 8438150 8466318 28168 27 48 3 0.69385 0.44 0.44 0.18 0.13 0.08 0.01 0.40 0.20 0.10 0.14 0.25 NC_003888.3_NC_003888.3_7519;NC_003888.3_NC_003888.3_7520;NC_003888.3_NC_003888.3_7521;NC_003888.3_NC_003888.3_7522;NC_003888.3_NC_003888.3_7523;NC_003888.3_NC_003888.3_7524;NC_003888.3_NC_003888.3_7525;NC_003888.3_NC_003888.3_7526;NC_003888.3_NC_003888.3_7527;NC_003888.3_NC_003888.3_7528;NC_003888.3_NC_003888.3_7529;NC_003888.3_NC_003888.3_7530;NC_003888.3_NC_003888.3_7531;NC_003888.3_NC_003888.3_7532;NC_003888.3_NC_003888.3_7533;NC_003888.3_NC_003888.3_7534;NC_003888.3_NC_003888.3_7535;NC_003888.3_NC_003888.3_7536;NC_003888.3_NC_003888.3_7537;NC_003888.3_NC_003888.3_7538;NC_003888.3_NC_003888.3_7539;NC_003888.3_NC_003888.3_7540;NC_003888.3_NC_003888.3_7541;NC_003888.3_NC_003888.3_7542;NC_003888.3_NC_003888.3_7543;NC_003888.3_NC_003888.3_7544;NC_003888.3_NC_003888.3_7545 PF01266;PF02585;PF01494 PF04029;PF04264;PF13581;PF13560;PF13413;PF01381;PF04149;PF04672;PF09339;PF12802;PF13412;PF01614;PF01740;PF13466;PF04343;PF14534;PF12680;PF02233;PF12769;PF01262;PF05222;PF02909;PF00440;PF00070;PF03486;PF07992;PF01494;PF01266;PF13450;PF13738;PF01494;PF03486;PF01872;PF07995;PF02746;PF13378;PF00300;PF13385;PF02210;PF00149;PF02585;PF00704;PF09346;PF14568;PF02031;PF00413;PF00150;PF00553 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8468384-8563058.1 8468384 8563058 94674 88 209 23 0.91964 cytotoxic 0.48 0.54 0.21 0.15 NRP 0.01 0.64 0.08 0.42 0.00 0.04 0.02 NC_003888.3_NC_003888.3_7547;NC_003888.3_NC_003888.3_7548;NC_003888.3_NC_003888.3_7549;NC_003888.3_NC_003888.3_7550;NC_003888.3_NC_003888.3_7551;NC_003888.3_NC_003888.3_7552;NC_003888.3_NC_003888.3_7553;NC_003888.3_NC_003888.3_7554;NC_003888.3_NC_003888.3_7555;NC_003888.3_NC_003888.3_7556;NC_003888.3_NC_003888.3_7557;NC_003888.3_NC_003888.3_7558;NC_003888.3_NC_003888.3_7559;NC_003888.3_NC_003888.3_7560;NC_003888.3_NC_003888.3_7561;NC_003888.3_NC_003888.3_7562;NC_003888.3_NC_003888.3_7563;NC_003888.3_NC_003888.3_7564;NC_003888.3_NC_003888.3_7565;NC_003888.3_NC_003888.3_7566;NC_003888.3_NC_003888.3_7567;NC_003888.3_NC_003888.3_7568;NC_003888.3_NC_003888.3_7569;NC_003888.3_NC_003888.3_7570;NC_003888.3_NC_003888.3_7571;NC_003888.3_NC_003888.3_7572;NC_003888.3_NC_003888.3_7573;NC_003888.3_NC_003888.3_7574;NC_003888.3_NC_003888.3_7575;NC_003888.3_NC_003888.3_7576;NC_003888.3_NC_003888.3_7577;NC_003888.3_NC_003888.3_7578;NC_003888.3_NC_003888.3_7579;NC_003888.3_NC_003888.3_7580;NC_003888.3_NC_003888.3_7581;NC_003888.3_NC_003888.3_7582;NC_003888.3_NC_003888.3_7583;NC_003888.3_NC_003888.3_7584;NC_003888.3_NC_003888.3_7585;NC_003888.3_NC_003888.3_7586;NC_003888.3_NC_003888.3_7587;NC_003888.3_NC_003888.3_7588;NC_003888.3_NC_003888.3_7589;NC_003888.3_NC_003888.3_7590;NC_003888.3_NC_003888.3_7591;NC_003888.3_NC_003888.3_7592;NC_003888.3_NC_003888.3_7593;NC_003888.3_NC_003888.3_7594;NC_003888.3_NC_003888.3_7595;NC_003888.3_NC_003888.3_7596;NC_003888.3_NC_003888.3_7597;NC_003888.3_NC_003888.3_7598;NC_003888.3_NC_003888.3_7599;NC_003888.3_NC_003888.3_7600;NC_003888.3_NC_003888.3_7601;NC_003888.3_NC_003888.3_7602;NC_003888.3_NC_003888.3_7603;NC_003888.3_NC_003888.3_7604;NC_003888.3_NC_003888.3_7605;NC_003888.3_NC_003888.3_7606;NC_003888.3_NC_003888.3_7607;NC_003888.3_NC_003888.3_7608;NC_003888.3_NC_003888.3_7609;NC_003888.3_NC_003888.3_7610;NC_003888.3_NC_003888.3_7611;NC_003888.3_NC_003888.3_7612;NC_003888.3_NC_003888.3_7613;NC_003888.3_NC_003888.3_7614;NC_003888.3_NC_003888.3_7615;NC_003888.3_NC_003888.3_7616;NC_003888.3_NC_003888.3_7617;NC_003888.3_NC_003888.3_7618;NC_003888.3_NC_003888.3_7619;NC_003888.3_NC_003888.3_7620;NC_003888.3_NC_003888.3_7621;NC_003888.3_NC_003888.3_7622;NC_003888.3_NC_003888.3_7623;NC_003888.3_NC_003888.3_7624;NC_003888.3_NC_003888.3_7625;NC_003888.3_NC_003888.3_7626;NC_003888.3_NC_003888.3_7627;NC_003888.3_NC_003888.3_7628;NC_003888.3_NC_003888.3_7629;NC_003888.3_NC_003888.3_7630;NC_003888.3_NC_003888.3_7631;NC_003888.3_NC_003888.3_7632;NC_003888.3_NC_003888.3_7633;NC_003888.3_NC_003888.3_7634 PF08242;PF00106;PF00891;PF00107;PF00583;PF00501;PF01370;PF03364;PF01408;PF00903;PF00975;PF01494;PF00248;PF08241;PF00668;PF00067;PF01266;PF01636;PF00857;PF08240;PF08541;PF08659;PF00561 PF12802;PF01047;PF13463;PF12840;PF03466;PF00126;PF03446;PF12893;PF00903;PF08922;PF16653;PF03435;PF01113;PF02254;PF00440;PF02909;PF13828;PF13499;PF13833;PF13405;PF00036;PF13202;PF00196;PF08281;PF00072;PF07730;PF00561;PF08386;PF13977;PF16859;PF00440;PF13302;PF13420;PF00583;PF00903;PF00248;PF00248;PF13563;PF01186;PF01494;PF01266;PF13450;PF07885;PF00520;PF01872;PF07690;PF06779;PF01035;PF04343;PF11160;PF08240;PF00107;PF13602;PF01966;PF01494;PF05834;PF03486;PF07992;PF01946;PF01266;PF12831;PF00890;PF13450;PF01134;PF13738;PF04191;PF04140;PF08541;PF02797;PF00195;PF08392;PF01040;PF03640;PF13473;PF00127;PF06902;PF13459;PF13370;PF00496;PF00528;PF00528;PF13304;PF00005;PF13481;PF13191;PF13401;PF00004;PF02463;PF13193;PF00501;PF00550;PF00668;PF00501;PF13193;PF00668;PF00501;PF13489;PF01209;PF13847;PF13649;PF08242;PF08241;PF13193;PF00550;PF12697;PF00975;PF00561;PF01738;PF03435;PF01370;PF13460;PF01408;PF00891;PF13489;PF13649;PF08241;PF08242;PF00067;PF00975;PF12697;PF12146;PF13489;PF05219;PF13649;PF08242;PF08241;PF00664;PF00005;PF13555;PF13191;PF13401;PF13479;PF02463;PF00664;PF00005;PF13555;PF13191;PF02463;PF00425;PF13561;PF00106;PF01370;PF08659;PF00440;PF00903;PF12802;PF01047;PF09339;PF13412;PF13545;PF02333;PF01209;PF13649;PF08241;PF08242;PF09278;PF13411;PF00376;PF00027;PF02353;PF08241;PF13649;PF00392;PF07729;PF07690;PF00440;PF02909;PF07992;PF13450;PF01494;PF13560;PF01381;PF11512;PF13483;PF12706;PF12802;PF13463;PF01047;PF12840;PF13412;PF13545;PF01636;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13302;PF00583;PF04672;PF08327;PF10604;PF03364;PF00440;PF13384;PF11716;PF12867;PF07398;PF04978;PF12867;PF13560;PF09339;PF13404;PF00857;PF01978;PF13463;PF12802;PF01047 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8563624-8572470.1 8563624 8572470 8846 7 12 0 0.52668 antibacterial 0.78 0.07 0.13 0.33 0.00 0.07 0.16 0.22 0.31 0.04 0.24 NC_003888.3_NC_003888.3_7636;NC_003888.3_NC_003888.3_7637;NC_003888.3_NC_003888.3_7638;NC_003888.3_NC_003888.3_7639;NC_003888.3_NC_003888.3_7640;NC_003888.3_NC_003888.3_7641;NC_003888.3_NC_003888.3_7642 PF02678;PF05726;PF14542;PF03795;PF12844;PF13560;PF01381;PF01381;PF13384;PF13542;PF04632;PF13515 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8577480-8584200.1 8577480 8584200 6720 6 9 0 0.54096 antibacterial 0.76 0.13 0.17 0.23 0.00 0.05 0.33 0.25 0.19 0.04 0.19 NC_003888.3_NC_003888.3_7648;NC_003888.3_NC_003888.3_7649;NC_003888.3_NC_003888.3_7650;NC_003888.3_NC_003888.3_7651;NC_003888.3_NC_003888.3_7652;NC_003888.3_NC_003888.3_7653 PF01978;PF12802;PF13463;PF01047;PF13340;PF07228;PF07228;PF02607;PF02310 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8584660-8586017.1 8584660 8586017 1357 2 6 0 0.52045 antibacterial 0.81 0.10 0.17 0.22 0.00 0.07 0.40 0.19 0.20 0.02 0.16 NC_003888.3_NC_003888.3_7655;NC_003888.3_NC_003888.3_7656 PF12802;PF01047;PF13412;PF01325;PF09339;PF08570 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8607538-8608480.1 8607538 8608480 942 1 4 0 0.53548 antibacterial 0.81 0.06 0.16 0.29 0.00 0.11 0.11 0.29 0.21 0.04 0.29 NC_003888.3_NC_003888.3_7680 PF14525;PF13384;PF12833;PF00165 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8610787-8635487.1 8610787 8635487 24700 30 42 5 0.83777 antibacterial 0.54 0.26 0.20 0.31 Polyketide 0.01 0.08 0.12 0.68 0.08 0.03 0.08 NC_003888.3_NC_003888.3_7682;NC_003888.3_NC_003888.3_7683;NC_003888.3_NC_003888.3_7684;NC_003888.3_NC_003888.3_7685;NC_003888.3_NC_003888.3_7686;NC_003888.3_NC_003888.3_7687;NC_003888.3_NC_003888.3_7688;NC_003888.3_NC_003888.3_7689;NC_003888.3_NC_003888.3_7690;NC_003888.3_NC_003888.3_7691;NC_003888.3_NC_003888.3_7692;NC_003888.3_NC_003888.3_7693;NC_003888.3_NC_003888.3_7694;NC_003888.3_NC_003888.3_7695;NC_003888.3_NC_003888.3_7696;NC_003888.3_NC_003888.3_7697;NC_003888.3_NC_003888.3_7698;NC_003888.3_NC_003888.3_7699;NC_003888.3_NC_003888.3_7700;NC_003888.3_NC_003888.3_7701;NC_003888.3_NC_003888.3_7702;NC_003888.3_NC_003888.3_7703;NC_003888.3_NC_003888.3_7704;NC_003888.3_NC_003888.3_7705;NC_003888.3_NC_003888.3_7706;NC_003888.3_NC_003888.3_7707;NC_003888.3_NC_003888.3_7708;NC_003888.3_NC_003888.3_7709;NC_003888.3_NC_003888.3_7710;NC_003888.3_NC_003888.3_7711 PF00106;PF01494;PF08659;PF00107;PF01370 PF00881;PF02909;PF13358;PF09076;PF01494;PF07992;PF00890;PF01494;PF00890;PF07992;PF00107;PF00440;PF02909;PF13586;PF01609;PF10756;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF14145;PF01548;PF13022;PF00440;PF00356;PF00106;PF08659;PF01370;PF13561;PF06197;PF13359;PF01609;PF13613;PF04072;PF13561;PF00106;PF00440 -NC_003888.3 deepbgc 0.1.0 deepbgc NC_003888.3_8642713-8643713.1 8642713 8643713 1000 2 3 0 0.54261 antibacterial 0.61 0.05 0.12 0.17 0.00 0.05 0.39 0.19 0.17 0.02 0.21 NC_003888.3_NC_003888.3_7719;NC_003888.3_NC_003888.3_7720 PF14079;PF13305;PF00440 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_31460-41750.1 31460 41750 10290 13 23 4 0.61532 antibacterial 0.76 0.13 0.12 0.31 Polyketide 0.02 0.07 0.15 0.58 0.01 0.08 0.12 NC_003903.1_NC_003903.1_34;NC_003903.1_NC_003903.1_35;NC_003903.1_NC_003903.1_36;NC_003903.1_NC_003903.1_37;NC_003903.1_NC_003903.1_38;NC_003903.1_NC_003903.1_39;NC_003903.1_NC_003903.1_40;NC_003903.1_NC_003903.1_41;NC_003903.1_NC_003903.1_42;NC_003903.1_NC_003903.1_43;NC_003903.1_NC_003903.1_44;NC_003903.1_NC_003903.1_45;NC_003903.1_NC_003903.1_46 PF02585;PF00106;PF01370;PF08659 PF07228;PF02585;PF12833;PF00165;PF12852;PF00106;PF01370;PF08659;PF13561;PF13460;PF13586;PF01609;PF13340;PF07228;PF16859;PF16925;PF00440;PF00106;PF08659;PF01370;PF16363;PF13460;PF13561 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_60518-60743.1 60518 60743 225 1 1 0 0.60639 antibacterial 0.87 0.09 0.17 0.29 0.00 0.09 0.07 0.33 0.21 0.03 0.32 NC_003903.1_NC_003903.1_70 PF04149 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_63898-66577.1 63898 66577 2679 1 1 0 0.52239 antibacterial 0.76 0.06 0.17 0.24 0.00 0.08 0.23 0.20 0.20 0.00 0.31 NC_003903.1_NC_003903.1_75 PF13191 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_159898-165658.1 159898 165658 5760 6 5 1 0.55200 antibacterial 0.76 0.06 0.18 0.24 0.00 0.07 0.26 0.20 0.20 0.00 0.28 NC_003903.1_NC_003903.1_184;NC_003903.1_NC_003903.1_185;NC_003903.1_NC_003903.1_186;NC_003903.1_NC_003903.1_187;NC_003903.1_NC_003903.1_188;NC_003903.1_NC_003903.1_189 PF00903 PF00903;PF13144;PF08666;PF00437;PF13191 -NC_003903.1 deepbgc 0.1.0 deepbgc NC_003903.1_230262-324563.1 230262 324563 94301 108 113 20 0.85951 antibacterial 0.59 0.48 0.14 0.14 0.10 0.22 0.34 0.36 0.01 0.09 0.05 NC_003903.1_NC_003903.1_253;NC_003903.1_NC_003903.1_254;NC_003903.1_NC_003903.1_255;NC_003903.1_NC_003903.1_256;NC_003903.1_NC_003903.1_257;NC_003903.1_NC_003903.1_258;NC_003903.1_NC_003903.1_259;NC_003903.1_NC_003903.1_260;NC_003903.1_NC_003903.1_261;NC_003903.1_NC_003903.1_262;NC_003903.1_NC_003903.1_263;NC_003903.1_NC_003903.1_264;NC_003903.1_NC_003903.1_265;NC_003903.1_NC_003903.1_266;NC_003903.1_NC_003903.1_267;NC_003903.1_NC_003903.1_268;NC_003903.1_NC_003903.1_269;NC_003903.1_NC_003903.1_270;NC_003903.1_NC_003903.1_271;NC_003903.1_NC_003903.1_272;NC_003903.1_NC_003903.1_273;NC_003903.1_NC_003903.1_274;NC_003903.1_NC_003903.1_275;NC_003903.1_NC_003903.1_276;NC_003903.1_NC_003903.1_277;NC_003903.1_NC_003903.1_278;NC_003903.1_NC_003903.1_279;NC_003903.1_NC_003903.1_280;NC_003903.1_NC_003903.1_281;NC_003903.1_NC_003903.1_282;NC_003903.1_NC_003903.1_283;NC_003903.1_NC_003903.1_284;NC_003903.1_NC_003903.1_285;NC_003903.1_NC_003903.1_286;NC_003903.1_NC_003903.1_287;NC_003903.1_NC_003903.1_288;NC_003903.1_NC_003903.1_289;NC_003903.1_NC_003903.1_290;NC_003903.1_NC_003903.1_291;NC_003903.1_NC_003903.1_292;NC_003903.1_NC_003903.1_293;NC_003903.1_NC_003903.1_294;NC_003903.1_NC_003903.1_295;NC_003903.1_NC_003903.1_296;NC_003903.1_NC_003903.1_297;NC_003903.1_NC_003903.1_298;NC_003903.1_NC_003903.1_299;NC_003903.1_NC_003903.1_300;NC_003903.1_NC_003903.1_301;NC_003903.1_NC_003903.1_302;NC_003903.1_NC_003903.1_303;NC_003903.1_NC_003903.1_304;NC_003903.1_NC_003903.1_305;NC_003903.1_NC_003903.1_306;NC_003903.1_NC_003903.1_307;NC_003903.1_NC_003903.1_308;NC_003903.1_NC_003903.1_309;NC_003903.1_NC_003903.1_310;NC_003903.1_NC_003903.1_311;NC_003903.1_NC_003903.1_312;NC_003903.1_NC_003903.1_313;NC_003903.1_NC_003903.1_314;NC_003903.1_NC_003903.1_315;NC_003903.1_NC_003903.1_316;NC_003903.1_NC_003903.1_317;NC_003903.1_NC_003903.1_318;NC_003903.1_NC_003903.1_319;NC_003903.1_NC_003903.1_320;NC_003903.1_NC_003903.1_321;NC_003903.1_NC_003903.1_322;NC_003903.1_NC_003903.1_323;NC_003903.1_NC_003903.1_324;NC_003903.1_NC_003903.1_325;NC_003903.1_NC_003903.1_326;NC_003903.1_NC_003903.1_327;NC_003903.1_NC_003903.1_328;NC_003903.1_NC_003903.1_329;NC_003903.1_NC_003903.1_330;NC_003903.1_NC_003903.1_331;NC_003903.1_NC_003903.1_332;NC_003903.1_NC_003903.1_333;NC_003903.1_NC_003903.1_334;NC_003903.1_NC_003903.1_335;NC_003903.1_NC_003903.1_336;NC_003903.1_NC_003903.1_337;NC_003903.1_NC_003903.1_338;NC_003903.1_NC_003903.1_339;NC_003903.1_NC_003903.1_340;NC_003903.1_NC_003903.1_341;NC_003903.1_NC_003903.1_342;NC_003903.1_NC_003903.1_343;NC_003903.1_NC_003903.1_344;NC_003903.1_NC_003903.1_345;NC_003903.1_NC_003903.1_346;NC_003903.1_NC_003903.1_347;NC_003903.1_NC_003903.1_348;NC_003903.1_NC_003903.1_349;NC_003903.1_NC_003903.1_350;NC_003903.1_NC_003903.1_351;NC_003903.1_NC_003903.1_352;NC_003903.1_NC_003903.1_353;NC_003903.1_NC_003903.1_354;NC_003903.1_NC_003903.1_355;NC_003903.1_NC_003903.1_356;NC_003903.1_NC_003903.1_357;NC_003903.1_NC_003903.1_358;NC_003903.1_NC_003903.1_359;NC_003903.1_NC_003903.1_360 PF02585;PF00106;PF02770;PF00441;PF00583;PF01370;PF08545;PF01408;PF03756;PF08028;PF01118;PF00975;PF02771;PF02737;PF01636;PF01266;PF02894;PF00702;PF08541;PF08659 PF01370;PF01613;PF13577;PF13560;PF10727;PF02826;PF03807;PF03446;PF02558;PF02737;PF00724;PF05655;PF13521;PF08545;PF08541;PF00550;PF12710;PF08282;PF13521;PF13238;PF13347;PF07690;PF12840;PF01022;PF02894;PF01408;PF13380;PF00296;PF00975;PF12697;PF00440;PF03756;PF02771;PF02770;PF00441;PF08028;PF12710;PF00702;PF08282;PF00440;PF13646;PF00932;PF00872;PF10551;PF00932;PF07510;PF00583;PF13302;PF13517;PF05593;PF14690;PF13005;PF01610;PF05534;PF08681;PF08239;PF02735;PF01402;PF13191;PF06414;PF13671;PF13191;PF14267;PF04149;PF12844;PF13560;PF01381;PF13443;PF13744;PF13581;PF01557;PF01118;PF09290;PF00682;PF07836;PF03328;PF15617;PF01575;PF13527;PF13530;PF01636;PF02585;PF07690;PF05977;PF00083;PF07992;PF00890;PF01266;PF03486;PF13450;PF13460;PF13561;PF00106;PF08659;PF01370;PF16363;PF00440;PF16925;PF16859;PF07228;PF13340;PF01609;PF13586;PF13561;PF00106;PF01370;PF08659;PF13460;PF12852;PF00165;PF12833;PF02585;PF07228 diff --git a/inst/extdata/sco_gecco.tsv b/inst/extdata/sco_gecco.tsv deleted file mode 100644 index 60d5eed..0000000 --- a/inst/extdata/sco_gecco.tsv +++ /dev/null @@ -1,21 +0,0 @@ -sequence_id bgc_id start end average_p max_p type alkaloid_probability polyketide_probability ripp_probability saccharide_probability terpene_probability nrp_probability other_probability proteins domains -AL645882.2 AL645882.2_cluster_1 103781 121371 0.8192887299726135 0.9994207183607371 Polyketide 0.010000000000000009 0.65 0.0 0.030000000000000027 0.010000000000000009 0.07999999999999996 0.31999999999999995 AL645882.2_97;AL645882.2_98;AL645882.2_99;AL645882.2_100;AL645882.2_101;AL645882.2_102 PF00106;PF00109;PF00550;PF00698;PF00753;PF01370;PF02801;PF07977;PF07993;PF08659;PF13561;PF14765;PF16197;TIGR00128;TIGR01181;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR02813;TIGR02814;TIGR02816;TIGR03131;TIGR03150;TIGR03443;TIGR03466;TIGR03971 -AL645882.2 AL645882.2_cluster_2 168705 177496 0.6591589380928025 0.8501282383918205 Terpene 0.010000000000000009 0.08999999999999997 0.0 0.0 0.87 0.0 0.040000000000000036 AL645882.2_148;AL645882.2_149;AL645882.2_150;AL645882.2_151;AL645882.2_152;AL645882.2_153;AL645882.2_154;AL645882.2_155 PF00348;PF00494;PF00582;PF00890;PF01266;PF01593;PF11066;PF13450;TIGR02730;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03464;TIGR03465;TIGR03467 -AL645882.2 AL645882.2_cluster_3 255311 262319 0.7562788359477977 0.8688657410419955 Unknown 0.0 0.26 0.47 0.0 0.0 0.0 0.27 AL645882.2_231;AL645882.2_232;AL645882.2_233;AL645882.2_234;AL645882.2_235 PF00528;PF00561;PF00975;PF04738;PF05147;PF12146;PF12697;PF14028;TIGR00969;TIGR01581;TIGR01738;TIGR02427;TIGR03056;TIGR03262;TIGR03611;TIGR03695;TIGR03891;TIGR03897 -AL645882.2 AL645882.2_cluster_4 498683 533448 0.7693747042622983 0.9999696830916295 NRP 0.0 0.10999999999999999 0.12 0.030000000000000027 0.020000000000000018 0.7 0.040000000000000036 AL645882.2_440;AL645882.2_441;AL645882.2_442;AL645882.2_443;AL645882.2_444;AL645882.2_445;AL645882.2_446;AL645882.2_447;AL645882.2_448;AL645882.2_449;AL645882.2_450;AL645882.2_451;AL645882.2_452;AL645882.2_453;AL645882.2_454;AL645882.2_455;AL645882.2_456;AL645882.2_457;AL645882.2_458;AL645882.2_459;AL645882.2_460;AL645882.2_461 PF00005;PF00440;PF00501;PF00550;PF00664;PF00668;PF01266;PF01494;PF03621;PF07992;PF09339;PF12802;PF12902;PF13191;PF13193;PF13304;PF13434;PF13450;TIGR00630;TIGR00655;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01318;TIGR01720;TIGR01733;TIGR01734;TIGR01842;TIGR01846;TIGR01923;TIGR01978;TIGR01984;TIGR01988;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02372;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03375;TIGR03384;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03968;TIGR04406;TIGR04439;TIGR04520;TIGR04521 -AL645882.2 AL645882.2_cluster_6 1335695 1361419 0.8473264250182975 0.902810689697336 Polyketide 0.050000000000000044 0.53 0.030000000000000027 0.020000000000000018 0.020000000000000018 0.15000000000000002 0.28 AL645882.2_1225;AL645882.2_1226;AL645882.2_1227;AL645882.2_1228;AL645882.2_1229;AL645882.2_1230;AL645882.2_1231;AL645882.2_1232;AL645882.2_1233;AL645882.2_1234;AL645882.2_1235;AL645882.2_1236;AL645882.2_1237;AL645882.2_1238;AL645882.2_1239;AL645882.2_1240;AL645882.2_1241;AL645882.2_1242;AL645882.2_1243;AL645882.2_1244;AL645882.2_1245;AL645882.2_1246;AL645882.2_1247;AL645882.2_1248;AL645882.2_1249 PF00109;PF00155;PF00202;PF00364;PF00392;PF00550;PF00561;PF00676;PF00890;PF01266;PF01370;PF01494;PF01613;PF01674;PF01946;PF02089;PF02770;PF02775;PF02801;PF03109;PF03364;PF04072;PF04321;PF04820;PF07993;PF08281;PF08541;PF08545;PF10604;PF12697;PF13292;PF13450;PF13460;TIGR00027;TIGR00292;TIGR00508;TIGR00517;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR00747;TIGR00748;TIGR01214;TIGR01265;TIGR01347;TIGR01348;TIGR01746;TIGR01835;TIGR01885;TIGR01982;TIGR02018;TIGR02032;TIGR02296;TIGR02325;TIGR02352;TIGR02404;TIGR02407;TIGR02813;TIGR02937;TIGR02946;TIGR02959;TIGR03150;TIGR03181;TIGR03182;TIGR03197;TIGR03246;TIGR03251;TIGR03338;TIGR03364;TIGR03372;TIGR03443;TIGR03466;TIGR03615;TIGR03695;TIGR03947;TIGR04022;TIGR04544 -AL645882.2 AL645882.2_cluster_7 1998468 2002980 0.8034485206666728 0.9107236204333993 Other 0.030000000000000027 0.020000000000000018 0.0 0.0 0.0 0.0 0.95 AL645882.2_1826;AL645882.2_1827;AL645882.2_1828;AL645882.2_1829;AL645882.2_1830 PF00202;PF00266;PF00583;PF05721;PF06339;PF13508;TIGR00508;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR01762;TIGR01885;TIGR01976;TIGR01977;TIGR02406;TIGR02407;TIGR02408;TIGR03246;TIGR03251;TIGR03372 -AL645882.2 AL645882.2_cluster_8 2931776 2950345 0.7951811973663155 0.9993573020515812 Saccharide 0.0 0.020000000000000018 0.0 0.74 0.020000000000000018 0.050000000000000044 0.18000000000000005 AL645882.2_2651;AL645882.2_2652;AL645882.2_2653;AL645882.2_2654;AL645882.2_2655;AL645882.2_2656;AL645882.2_2657;AL645882.2_2658;AL645882.2_2659;AL645882.2_2660;AL645882.2_2661;AL645882.2_2662;AL645882.2_2663;AL645882.2_2664;AL645882.2_2665;AL645882.2_2666;AL645882.2_2667;AL645882.2_2668;AL645882.2_2669 PF00264;PF00383;PF00389;PF00400;PF00534;PF00535;PF02397;PF02668;PF02826;PF03777;PF06236;PF07690;PF12832;PF12894;PF13439;PF13477;PF13506;PF13524;PF13579;PF13632;PF13641;PF13692;PF13727;PF14437;TIGR00227;TIGR00326;TIGR00900;TIGR01327;TIGR01508;TIGR02095;TIGR02149;TIGR03013;TIGR03022;TIGR03023;TIGR03025;TIGR03030;TIGR03087;TIGR03088;TIGR03449;TIGR03469;TIGR03937;TIGR03946;TIGR03965;TIGR03999;TIGR04047;TIGR04063;TIGR04157 -AL645882.2 AL645882.2_cluster_9 3032065 3040682 0.7962707288747192 0.9058104647132605 Other 0.010000000000000009 0.24 0.010000000000000009 0.0 0.030000000000000027 0.020000000000000018 0.7 AL645882.2_2741;AL645882.2_2742;AL645882.2_2743;AL645882.2_2744;AL645882.2_2745;AL645882.2_2746;AL645882.2_2747 PF00266;PF00282;PF00441;PF02770;PF02771;PF04183;PF04954;PF05889;PF06276;PF08021;PF08028;PF13434;PF13523;PF13738;TIGR03203;TIGR03204;TIGR03207;TIGR03799;TIGR03811;TIGR03812;TIGR04022;TIGR04046;TIGR04431;TIGR04439 -AL645882.2 AL645882.2_cluster_10 3524828 3602320 0.752421552194178 0.9999999998258269 NRP 0.0 0.19499999999999995 0.0 0.010000000000000009 0.0 0.97 0.0 AL645882.2_3170;AL645882.2_3171;AL645882.2_3172;AL645882.2_3173;AL645882.2_3174;AL645882.2_3175;AL645882.2_3176;AL645882.2_3177;AL645882.2_3178;AL645882.2_3179;AL645882.2_3180;AL645882.2_3181;AL645882.2_3182;AL645882.2_3183;AL645882.2_3184;AL645882.2_3185;AL645882.2_3186;AL645882.2_3187;AL645882.2_3188;AL645882.2_3189;AL645882.2_3190;AL645882.2_3191;AL645882.2_3192;AL645882.2_3193;AL645882.2_3194;AL645882.2_3195;AL645882.2_3196;AL645882.2_3197;AL645882.2_3198;AL645882.2_3199;AL645882.2_3200;AL645882.2_3201;AL645882.2_3202;AL645882.2_3203;AL645882.2_3204 PF00005;PF00072;PF00109;PF00122;PF00155;PF00196;PF00441;PF00486;PF00501;PF00550;PF00561;PF00664;PF00668;PF00702;PF00903;PF00931;PF00975;PF01026;PF01040;PF01070;PF01261;PF01266;PF01494;PF01636;PF01663;PF02153;PF02668;PF02770;PF02801;PF03403;PF03621;PF03704;PF07730;PF07994;PF08241;PF08541;PF08545;PF09056;PF12146;PF12679;PF12697;PF12730;PF12897;PF13193;PF13304;PF13450;PF13489;PF13649;PF13669;PF14696;TIGR00010;TIGR00517;TIGR00747;TIGR00748;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01106;TIGR01116;TIGR01140;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01249;TIGR01257;TIGR01263;TIGR01264;TIGR01265;TIGR01271;TIGR01277;TIGR01288;TIGR01387;TIGR01473;TIGR01474;TIGR01476;TIGR01494;TIGR01497;TIGR01511;TIGR01512;TIGR01517;TIGR01522;TIGR01523;TIGR01524;TIGR01525;TIGR01647;TIGR01657;TIGR01720;TIGR01733;TIGR01734;TIGR01738;TIGR01818;TIGR01835;TIGR01842;TIGR01846;TIGR01923;TIGR01934;TIGR01978;TIGR01984;TIGR01988;TIGR02032;TIGR02056;TIGR02142;TIGR02151;TIGR02154;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02335;TIGR02372;TIGR02427;TIGR02633;TIGR02673;TIGR02708;TIGR02769;TIGR02770;TIGR02813;TIGR02857;TIGR02868;TIGR02875;TIGR02915;TIGR02956;TIGR02982;TIGR03005;TIGR03020;TIGR03056;TIGR03081;TIGR03098;TIGR03150;TIGR03197;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03343;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03467;TIGR03522;TIGR03540;TIGR03541;TIGR03608;TIGR03611;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03946;TIGR03947;TIGR03966;TIGR04406;TIGR04520;TIGR04521;TIGR04544 -AL645882.2 AL645882.2_cluster_11 5515246 5536994 0.7130191148104835 0.868896297725067 Polyketide 0.020000000000000018 0.89 0.030000000000000027 0.07999999999999996 0.020000000000000018 0.020000000000000018 0.050000000000000044 AL645882.2_5009;AL645882.2_5010;AL645882.2_5011;AL645882.2_5012;AL645882.2_5013;AL645882.2_5014;AL645882.2_5015;AL645882.2_5016;AL645882.2_5017;AL645882.2_5018;AL645882.2_5019;AL645882.2_5020;AL645882.2_5021;AL645882.2_5022;AL645882.2_5023;AL645882.2_5024;AL645882.2_5025;AL645882.2_5026;AL645882.2_5027;AL645882.2_5028;AL645882.2_5029;AL645882.2_5030;AL645882.2_5031 PF00106;PF00107;PF00109;PF00440;PF00486;PF00550;PF00753;PF01243;PF01370;PF01381;PF01613;PF02801;PF02909;PF03364;PF03704;PF03848;PF03992;PF04978;PF05175;PF05368;PF05724;PF07690;PF07883;PF08028;PF08240;PF08241;PF08242;PF08659;PF10604;PF12349;PF12844;PF13443;PF13460;PF13489;PF13561;PF13602;PF13649;PF13847;TIGR00477;TIGR00517;TIGR00692;TIGR00710;TIGR00711;TIGR00833;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00916;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01963;TIGR02296;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02818;TIGR02823;TIGR02824;TIGR02825;TIGR03070;TIGR03150;TIGR03201;TIGR03206;TIGR03325;TIGR03366;TIGR03451;TIGR03466;TIGR03480;TIGR03534;TIGR03615;TIGR03618;TIGR03668;TIGR03971;TIGR03989;TIGR04022;TIGR04023;TIGR04316;TIGR04504;TIGR04558 -AL645882.2 AL645882.2_cluster_12 5785753 5791297 0.5764920236167602 0.6184351199586162 Polyketide 0.0 0.91 0.0 0.0 0.020000000000000018 0.010000000000000009 0.06000000000000005 AL645882.2_5252;AL645882.2_5253;AL645882.2_5254;AL645882.2_5255;AL645882.2_5256;AL645882.2_5257;AL645882.2_5258 PF00109;PF00550;PF02311;PF02801;PF03364;PF03992;PF04486;PF04673;PF07883;PF10604;TIGR01930;TIGR02813;TIGR03150;TIGR03214 -AL645882.2 AL645882.2_cluster_13 6432593 6467702 0.909289567375217 0.9999999584431769 Polyketide 0.020000000000000018 0.76 0.020000000000000018 0.010000000000000009 0.0 0.45999999999999996 0.10999999999999999 AL645882.2_5815;AL645882.2_5816;AL645882.2_5817;AL645882.2_5818;AL645882.2_5819;AL645882.2_5820;AL645882.2_5821;AL645882.2_5822;AL645882.2_5823;AL645882.2_5824;AL645882.2_5825;AL645882.2_5826;AL645882.2_5827;AL645882.2_5828;AL645882.2_5829;AL645882.2_5830;AL645882.2_5831;AL645882.2_5832;AL645882.2_5833;AL645882.2_5834;AL645882.2_5835;AL645882.2_5836;AL645882.2_5837;AL645882.2_5838;AL645882.2_5839 PF00108;PF00109;PF00155;PF00196;PF00355;PF00441;PF00486;PF00501;PF00550;PF00698;PF00891;PF00975;PF01053;PF01073;PF01222;PF01326;PF01370;PF02353;PF02544;PF02770;PF02771;PF02801;PF03704;PF04191;PF04321;PF05368;PF05401;PF07993;PF08028;PF08241;PF08242;PF08281;PF08541;PF08545;PF11639;PF12697;PF13193;PF13460;PF13489;PF13520;PF13649;PF13847;PF16197;PF16363;PF17837;TIGR00128;TIGR00517;TIGR00536;TIGR00747;TIGR00748;TIGR00858;TIGR01179;TIGR01181;TIGR01214;TIGR01733;TIGR01734;TIGR01746;TIGR01777;TIGR01821;TIGR01822;TIGR01825;TIGR01923;TIGR01930;TIGR01983;TIGR02072;TIGR02188;TIGR02197;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR02813;TIGR02937;TIGR03020;TIGR03056;TIGR03098;TIGR03131;TIGR03150;TIGR03203;TIGR03204;TIGR03205;TIGR03207;TIGR03208;TIGR03443;TIGR03466;TIGR03533;TIGR03534;TIGR03541;TIGR03589;TIGR04022;TIGR04180;TIGR04543 -AL645882.2 AL645882.2_cluster_14 6847315 6863275 0.739858389200434 0.9589701630281311 Polyketide 0.0 0.62 0.09999999999999998 0.020000000000000018 0.030000000000000027 0.030000000000000027 0.21999999999999997 AL645882.2_6167;AL645882.2_6168;AL645882.2_6169;AL645882.2_6170;AL645882.2_6171;AL645882.2_6172;AL645882.2_6173;AL645882.2_6174;AL645882.2_6175;AL645882.2_6176;AL645882.2_6177;AL645882.2_6178;AL645882.2_6179;AL645882.2_6180 PF00150;PF00356;PF00528;PF00532;PF01381;PF01547;PF04183;PF04542;PF06276;PF07398;PF08281;PF11716;PF12680;PF13377;PF13416;PF13581;PF19054;TIGR00969;TIGR01481;TIGR01581;TIGR02139;TIGR02140;TIGR02141;TIGR02405;TIGR02417;TIGR02937;TIGR02939;TIGR02947;TIGR02948;TIGR02957;TIGR03070;TIGR03083;TIGR03086;TIGR03226;TIGR03262;TIGR03850 -AL645882.2 AL645882.2_cluster_15 6889594 6948414 0.8739774761888223 0.9999999998409312 Polyketide 0.0 0.99 0.010000000000000009 0.040000000000000036 0.0 0.06000000000000005 0.0 AL645882.2_6205;AL645882.2_6206;AL645882.2_6207;AL645882.2_6208;AL645882.2_6209;AL645882.2_6210;AL645882.2_6211;AL645882.2_6212;AL645882.2_6213;AL645882.2_6214;AL645882.2_6215;AL645882.2_6216;AL645882.2_6217;AL645882.2_6218;AL645882.2_6219;AL645882.2_6220;AL645882.2_6221;AL645882.2_6222;AL645882.2_6223;AL645882.2_6224;AL645882.2_6225;AL645882.2_6226;AL645882.2_6227;AL645882.2_6228;AL645882.2_6229 PF00106;PF00108;PF00109;PF00202;PF00364;PF00440;PF00486;PF00550;PF00561;PF00698;PF00975;PF01039;PF01370;PF01494;PF01565;PF02775;PF02786;PF02801;PF03704;PF03756;PF05368;PF07690;PF07730;PF07993;PF08031;PF08659;PF08990;PF12697;PF12831;PF13460;PF13561;PF13581;PF14765;PF16197;PF17147;TIGR00128;TIGR00508;TIGR00513;TIGR00515;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00710;TIGR00711;TIGR00713;TIGR00880;TIGR00881;TIGR00893;TIGR00895;TIGR00898;TIGR00900;TIGR01108;TIGR01117;TIGR01249;TIGR01500;TIGR01738;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01885;TIGR01930;TIGR01963;TIGR02407;TIGR02415;TIGR02427;TIGR02430;TIGR02632;TIGR02685;TIGR02813;TIGR03056;TIGR03131;TIGR03133;TIGR03134;TIGR03150;TIGR03206;TIGR03246;TIGR03251;TIGR03297;TIGR03325;TIGR03343;TIGR03372;TIGR03384;TIGR03443;TIGR03466;TIGR03611;TIGR03613;TIGR03649;TIGR03695;TIGR03968;TIGR03971;TIGR04316;TIGR04504 -AL645882.2 AL645882.2_cluster_16 7106284 7117874 0.7837623334517632 0.9998563052677049 NRP 0.010000000000000009 0.030000000000000027 0.0 0.010000000000000009 0.0 0.92 0.06000000000000005 AL645882.2_6364;AL645882.2_6365;AL645882.2_6366;AL645882.2_6367;AL645882.2_6368 PF00501;PF00550;PF00668;PF00975;PF05899;PF05977;PF07690;PF12697;PF13193;PF13434;TIGR00900;TIGR01733;TIGR01734;TIGR01738;TIGR01923;TIGR02188;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR03098;TIGR03205;TIGR03208;TIGR03443;TIGR04439 -AL645882.2 AL645882.2_cluster_17 7516017 7523399 0.939298768070374 0.9999997444668459 Terpene 0.010000000000000009 0.030000000000000027 0.010000000000000009 0.0 0.9 0.0 0.050000000000000044 AL645882.2_6688;AL645882.2_6689;AL645882.2_6690;AL645882.2_6691;AL645882.2_6692;AL645882.2_6693;AL645882.2_6694 PF00348;PF00432;PF00494;PF00890;PF01048;PF01266;PF01593;PF07992;PF12831;PF13243;PF13249;PF13450;TIGR01507;TIGR01559;TIGR01787;TIGR02731;TIGR02732;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03197;TIGR03463;TIGR03464;TIGR03465;TIGR03467;TIGR03468;TIGR04277 -AL645882.2 AL645882.2_cluster_18 7586410 7601569 0.832626210768822 0.9983263560779447 Polyketide 0.0 0.92 0.0 0.0 0.020000000000000018 0.030000000000000027 0.050000000000000044 AL645882.2_6750;AL645882.2_6751;AL645882.2_6752;AL645882.2_6753;AL645882.2_6754;AL645882.2_6755;AL645882.2_6756;AL645882.2_6757 PF00083;PF00106;PF00107;PF00109;PF00550;PF00698;PF01370;PF02775;PF02801;PF05977;PF07690;PF07992;PF08240;PF08541;PF08659;PF09335;PF12832;PF12840;PF13460;PF13561;PF13602;PF13738;PF14765;PF16197;TIGR00128;TIGR00710;TIGR00711;TIGR00747;TIGR00879;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00898;TIGR00900;TIGR01289;TIGR01299;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01930;TIGR01963;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02823;TIGR02824;TIGR02825;TIGR03131;TIGR03150;TIGR03206;TIGR03297;TIGR03325;TIGR03845;TIGR03971;TIGR04316;TIGR04504 -AL645882.2 AL645882.2_cluster_19 7660990 7703887 0.8723160842685086 0.9884977283394043 Unknown 0.0024999999999999467 0.16000000000000003 0.31000000000000005 0.0 0.030000000000000027 0.06999999999999995 0.4375 AL645882.2_6824;AL645882.2_6825;AL645882.2_6826;AL645882.2_6827;AL645882.2_6828;AL645882.2_6829;AL645882.2_6830;AL645882.2_6831;AL645882.2_6832;AL645882.2_6833;AL645882.2_6834;AL645882.2_6835;AL645882.2_6836;AL645882.2_6837;AL645882.2_6838;AL645882.2_6839;AL645882.2_6840;AL645882.2_6841;AL645882.2_6842;AL645882.2_6843;AL645882.2_6844;AL645882.2_6845;AL645882.2_6846;AL645882.2_6847;AL645882.2_6848;AL645882.2_6849;AL645882.2_6850;AL645882.2_6851;AL645882.2_6852;AL645882.2_6853;AL645882.2_6854;AL645882.2_6855;AL645882.2_6856;AL645882.2_6857;AL645882.2_6858;AL645882.2_6859;AL645882.2_6860;AL645882.2_6861;AL645882.2_6862;AL645882.2_6863;AL645882.2_6864;AL645882.2_6865 PF00196;PF00441;PF00702;PF01071;PF01135;PF01609;PF02467;PF02655;PF02770;PF02771;PF02786;PF03432;PF04738;PF05147;PF05713;PF07690;PF08028;PF13340;PF13535;PF13586;PF13620;PF13649;PF13847;PF14028;PF15632;PF18130;PF18603;TIGR00080;TIGR00768;TIGR00900;TIGR01142;TIGR02144;TIGR02469;TIGR02752;TIGR03203;TIGR03204;TIGR03207;TIGR03891;TIGR03909;TIGR04022;TIGR04188;TIGR04364 -AL645882.2 AL645882.2_cluster_20 8258333 8283623 0.8350377509828413 0.8974035790126855 RiPP 0.020000000000000018 0.06999999999999995 0.55 0.10999999999999999 0.030000000000000027 0.050000000000000044 0.18999999999999995 AL645882.2_7365;AL645882.2_7366;AL645882.2_7367;AL645882.2_7368;AL645882.2_7369;AL645882.2_7370;AL645882.2_7371;AL645882.2_7372;AL645882.2_7373;AL645882.2_7374;AL645882.2_7375;AL645882.2_7376;AL645882.2_7377;AL645882.2_7378;AL645882.2_7379;AL645882.2_7380;AL645882.2_7381;AL645882.2_7382;AL645882.2_7383;AL645882.2_7384;AL645882.2_7385;AL645882.2_7386;AL645882.2_7387;AL645882.2_7388;AL645882.2_7389;AL645882.2_7390 PF00005;PF00009;PF00067;PF00089;PF00501;PF00583;PF00743;PF00857;PF00891;PF00989;PF01925;PF03029;PF03259;PF03992;PF04203;PF04486;PF05175;PF05331;PF07992;PF08241;PF08242;PF08448;PF11991;PF13426;PF13434;PF13450;PF13489;PF13581;PF13649;PF13738;PF13847;PF14535;PF16864;TIGR00229;TIGR00231;TIGR00955;TIGR00956;TIGR00958;TIGR00968;TIGR00972;TIGR01076;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01842;TIGR01846;TIGR01978;TIGR01983;TIGR02142;TIGR02155;TIGR02203;TIGR02204;TIGR02211;TIGR02314;TIGR02315;TIGR02323;TIGR02324;TIGR02633;TIGR02673;TIGR02716;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03258;TIGR03265;TIGR03269;TIGR03335;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03429;TIGR03522;TIGR03608;TIGR03614;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR04018;TIGR04046;TIGR04406;TIGR04520;TIGR04521;TIGR04538;TIGR04543 -AL645882.2 AL645882.2_cluster_21 8493549 8542072 0.912955287850247 0.9999999998816349 NRP 0.010000000000000009 0.15000000000000002 0.06999999999999995 0.020000000000000018 0.040000000000000036 0.74 0.09999999999999998 AL645882.2_7588;AL645882.2_7589;AL645882.2_7590;AL645882.2_7591;AL645882.2_7592;AL645882.2_7593;AL645882.2_7594;AL645882.2_7595;AL645882.2_7596;AL645882.2_7597;AL645882.2_7598;AL645882.2_7599;AL645882.2_7600;AL645882.2_7601;AL645882.2_7602;AL645882.2_7603;AL645882.2_7604;AL645882.2_7605;AL645882.2_7606;AL645882.2_7607;AL645882.2_7608;AL645882.2_7609;AL645882.2_7610;AL645882.2_7611;AL645882.2_7612;AL645882.2_7613;AL645882.2_7614;AL645882.2_7615;AL645882.2_7616;AL645882.2_7617;AL645882.2_7618;AL645882.2_7619;AL645882.2_7620;AL645882.2_7621;AL645882.2_7622;AL645882.2_7623 PF00005;PF00027;PF00067;PF00106;PF00195;PF00376;PF00392;PF00425;PF00440;PF00496;PF00501;PF00528;PF00550;PF00664;PF00668;PF00890;PF00903;PF00975;PF01040;PF01266;PF01370;PF01408;PF01494;PF02353;PF02463;PF02797;PF02909;PF03435;PF04140;PF04191;PF05834;PF06902;PF07690;PF07729;PF07992;PF08241;PF08242;PF08392;PF08541;PF12697;PF12802;PF12831;PF13191;PF13193;PF13370;PF13401;PF13411;PF13412;PF13459;PF13460;PF13489;PF13561;PF13649;PF13847;PF18563;PF19086;TIGR00543;TIGR00553;TIGR00564;TIGR00565;TIGR00630;TIGR00747;TIGR00896;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01289;TIGR01292;TIGR01733;TIGR01734;TIGR01761;TIGR01815;TIGR01820;TIGR01823;TIGR01824;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01842;TIGR01846;TIGR01923;TIGR01963;TIGR01978;TIGR01988;TIGR02018;TIGR02023;TIGR02032;TIGR02043;TIGR02044;TIGR02047;TIGR02051;TIGR02054;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02294;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02325;TIGR02372;TIGR02404;TIGR02415;TIGR02469;TIGR02632;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02789;TIGR02790;TIGR02812;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03206;TIGR03208;TIGR03258;TIGR03265;TIGR03269;TIGR03338;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03494;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03971;TIGR04028;TIGR04316;TIGR04406;TIGR04458;TIGR04515;TIGR04520;TIGR04521;TIGR04538 diff --git a/inst/extdata/sco_prism.json.REMOVED.git-id b/inst/extdata/sco_prism.json.REMOVED.git-id deleted file mode 100644 index 5ddd7e1..0000000 --- a/inst/extdata/sco_prism.json.REMOVED.git-id +++ /dev/null @@ -1 +0,0 @@ -ebe4530db1e6b558531c87481cc34f3348903515 \ No newline at end of file diff --git a/inst/extdata/sco_rre.txt b/inst/extdata/sco_rre.txt deleted file mode 100644 index 496d413..0000000 --- a/inst/extdata/sco_rre.txt +++ /dev/null @@ -1,3 +0,0 @@ -Gene name BGC ID BGC product Domain name E-value Bitscore Start End -NC_003888.3__256525-259687__SCO0269 N\A N\A Lanthipeptide_RRE 1.1999999999999999e-11 43.9 159 240 -NC_003888.3__7696261-7699360__SCO6930 N\A N\A Lanthipeptide_RRE 2.7e-20 71.5 160 253 diff --git a/inst/extdata/sco_sempi.csv b/inst/extdata/sco_sempi.csv deleted file mode 100644 index 4da5344..0000000 --- a/inst/extdata/sco_sempi.csv +++ /dev/null @@ -1,34 +0,0 @@ -"Cluster","Start","Stop","Type" -1,106723,110434,"pks" -2,307598,308816,"nrps" -3,513997,524488,"nrps" -4,1405117,1405750,"nrps" -5,1477976,1479275,"nrps" -6,2290771,2292100,"nrps" -7,2559357,2561673,"pks" -8,2622623,2623751,"nrps" -9,2762807,2764220,"nrps" -10,2963180,2964527,"nrps" -11,3328396,3329098,"nrps" -12,3543364,3584771,"nrps" -13,3797561,3798752,"nrps" -14,3941523,3942822,"nrps" -15,4398632,4399859,"nrps" -16,4799973,4801182,"nrps" -17,4923207,4924557,"nrps" -18,5531212,5532682,"pks" -19,5786632,5788168,"pks" -20,6447994,6454855,"nrps-pks" -21,6558978,6560136,"nrps" -22,6804366,6807194,"nrps" -23,6901254,6931905,"pks" -24,7004464,7004725,"nrps" -25,7108290,7116050,"nrps" -26,7249252,7250602,"nrps" -27,7549538,7550897,"nrps" -28,7591514,7598516,"pks" -29,7734541,7735729,"nrps" -30,8053551,8054721,"nrps" -31,8140076,8141438,"nrps" -32,8282564,8283500,"nrps" -33,8504751,8523677,"nrps" From 64b080794f7caccb360257c20b3d0076410401f2 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Thu, 2 Jun 2022 19:45:33 +0200 Subject: [PATCH 145/199] Removed redundancy code Former-commit-id: 352eee2a6ed9d7123dd39c4e7bd9d468269249d2 --- R/mod_group_table.R | 2 -- R/utils_helpers.R | 10 ---------- dev/02_dev.R | 2 +- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 14739ef..c029cfa 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -41,8 +41,6 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami shiny::req(vals$data_upload_count > 1) shiny::req(vals$need_filter == F) shiny::req(vals$can_plot_group_table == T) - print(paste0("input$count_all: ", input$count_all, ", input$group_by: ", input$group_by, ", ")) - # source("src/group_table_functions.R") if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { diff --git a/R/utils_helpers.R b/R/utils_helpers.R index 69e26db..b4a2944 100644 --- a/R/utils_helpers.R +++ b/R/utils_helpers.R @@ -1,13 +1,3 @@ -#' is.integer0 -#' -#' @description Function, that checks if certain integer is 0 -#' -#' @return TRUE if 0, FALSE if not -#' -#' @noRd -is.integer0 <- function(x) { - is.integer(x) && length(x) == 0L -} #' %>% #' #' @description Pipe symbol from magrittr package diff --git a/dev/02_dev.R b/dev/02_dev.R index ebe9cb2..799df4b 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -83,7 +83,7 @@ usethis::use_data_raw( name = "rre_data", open = FALSE ) ## Tests ---- ## Add one line by test you want to create -usethis::use_test("fct_biocircos") +usethis::use_test("utils_helpers") # Documentation From 65b788fc7a8601e0e75be87cbf41c789bdbf9b22 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 3 Jun 2022 14:36:39 +0200 Subject: [PATCH 146/199] Added better input file description Former-commit-id: 4a510bded57087d0ca15347729c34bc3e751c997 --- docs/Input_files_options.md | 8 ++++---- docs/Installation.md | 10 ++-------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index bd7136c..dcb10ce 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -1,5 +1,5 @@ # Input files -We tried to make integration of various services as seemless as possible. However, this is comes with a cost of rather long uplod times of raw data. Therefore we suggest install an application locally (more [here](Installation.md)) +We tried to make integration of various services as seemless as possible. However, this is comes with a cost of rather long uplod times of raw data. In case any of the formats are unclear please consult [here](https://github.com/pavlohrab/BGCViz-datasets/tree/main/example_data) to see example data. Feel also free to post issue [here](https://github.com/ostash-group/BGCViz/issues). # Antismash There are two options for antismash data upload: 1. Raw output json file. You should download all your antismash results from the server, if the run was remote, and in the root results directory find the json file. @@ -45,7 +45,7 @@ BGCViz::sempi_to_csv(project_archive="project.zip") ``` SEMPI project archive can be downloaded from the site with "Project" button: -![sempi_res_export](/images/sempi_res_export.png) +![sempi_res_export](/images/sempi_res_web.png) **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** # DeepBGC @@ -79,6 +79,6 @@ BGCViz::arts_to_csv(project_archive="arts.zip") ``` Zip archive should be downloaded from ARTS Export tab (Zip all files): -![arts_res_server.png](/images/arts_res_export.png) +![arts_res_server.png](/images/arts_res_server.png) # GECCO -We are expecting the default GECCO tsv output file. Please see the example in inst/extdata folder \ No newline at end of file +We are expecting the default GECCO tsv output file. Please see the example [here](https://github.com/pavlohrab/BGCViz-datasets/tree/main/example_data). \ No newline at end of file diff --git a/docs/Installation.md b/docs/Installation.md index 33c5696..85820b0 100755 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -1,6 +1,6 @@ # Installation -The app itself is written in R and is available as a [shiny app server](https://ostash-group.shinyapps.io/BGCViz/) with no installation required. However local run have some advantages(See Why local run section) over remote one. Considering ease of installation and UI indentity, we are suggetting local installation +The app itself is written in R and indented to be run locally, or on own server. Feel free to play with our demo version [shiny app server](https://ostash-group.shinyapps.io/BGCViz/) with no installation required. ## Installation Install `remotes` package first with R console. (for example via Rstudio) @@ -18,10 +18,4 @@ BGCViz::run_app() You computer should have [R](https://cloud.r-project.org) and [Rstudio](https://www.rstudio.com/products/rstudio/download/) installed -If you have troubles with installation, do not hesitate to open an [issue](https://github.com/ostash-group/BGCViz/issues) - -## Why local run -The local run of an app is identical to the website one, with the same UI in the browser. Howewer, it have several advantages: -- Much faster upload of files. Especially bigger json files or archives. -- Better response time -- Control over execution. Quick modifications to the code. \ No newline at end of file +If you have troubles with installation, do not hesitate to open an [issue](https://github.com/ostash-group/BGCViz/issues) \ No newline at end of file From eb9e4573d67406dae16632814f304aeb88b71e58 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 3 Jun 2022 17:37:41 +0200 Subject: [PATCH 147/199] Updated documentation Former-commit-id: 3cb37a25b386bf6f90bf6575c18bcd45d4af4484 --- dev/02_dev.R | 2 + docs/Additional_analysis.md | 2 +- docs/BGCViz_renaming_and_coloring_options.md | 13 ++ docs/Installation.md | 36 ++++- docs/Logic_of_the_output.md | 134 +++++++++++++------ docs/Quick_start.md | 75 ++++------- docs/images/all_annotations.png | Bin 37995 -> 45013 bytes docs/images/anti_all_annotation.png | Bin 31830 -> 0 bytes docs/images/anti_one.png | Bin 36108 -> 43606 bytes docs/images/anti_upload.png | Bin 14831 -> 11862 bytes docs/images/biocircos.png.md | 0 docs/images/biocircos_legend.png | Bin 40967 -> 0 bytes docs/images/change_summarize.png | Bin 15795 -> 54932 bytes docs/images/color_biocircos.png | Bin 46167 -> 0 bytes docs/images/data_mani.png | Bin 39372 -> 0 bytes docs/images/data_manipulation.png | Bin 43065 -> 0 bytes docs/images/data_upload.png | Bin 64692 -> 81937 bytes docs/images/deep_comparison.png | Bin 36103 -> 32365 bytes docs/images/deepbgc_filters.png | Bin 69472 -> 64977 bytes docs/images/download_button.png | Bin 5758 -> 0 bytes docs/images/genes_on_chromosome.png | Bin 14084 -> 0 bytes docs/images/group_by_one.png | Bin 46610 -> 55768 bytes docs/images/group_by_table.png | Bin 80632 -> 0 bytes docs/images/hybrids.png | Bin 32578 -> 25196 bytes docs/images/improve_viz.png | Bin 42661 -> 23174 bytes docs/images/intercepted_annotations.png | Bin 35002 -> 49442 bytes docs/images/p-supp.png | Bin 39084 -> 42089 bytes docs/images/rename.png | Bin 9341 -> 10424 bytes docs/images/renamed.png | Bin 49981 -> 50128 bytes docs/images/summarize_one.png | Bin 47206 -> 55301 bytes docs/images/summarize_options.png | Bin 16223 -> 42006 bytes rsconnect/shinyapps.io/pavloh/bgcviz.dcf | 11 ++ 32 files changed, 181 insertions(+), 92 deletions(-) delete mode 100644 docs/images/anti_all_annotation.png delete mode 100644 docs/images/biocircos.png.md delete mode 100644 docs/images/biocircos_legend.png delete mode 100644 docs/images/color_biocircos.png delete mode 100644 docs/images/data_mani.png delete mode 100644 docs/images/data_manipulation.png delete mode 100644 docs/images/download_button.png delete mode 100644 docs/images/genes_on_chromosome.png delete mode 100644 docs/images/group_by_table.png create mode 100644 rsconnect/shinyapps.io/pavloh/bgcviz.dcf diff --git a/dev/02_dev.R b/dev/02_dev.R index 799df4b..5d69697 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -85,6 +85,8 @@ usethis::use_data_raw( name = "rre_data", open = FALSE ) ## Add one line by test you want to create usethis::use_test("utils_helpers") +#shinyTest tests +shinytest::recordTest() # Documentation ## Vignette ---- diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index bf6f425..58a1e41 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -1,5 +1,5 @@ # Additional analysis -After the analysis is done the one can download uploaded data. This option is particularly valuable for DeepBGC data cleaning, whereas for other inputs the data remains unchanged. Alongside the inputs, "group_by.csv" file is generated, which is the table from "Summarize interception" tab and group.py python script. +After the analysis is done the one can download uploaded data. This option is particularly valuable for DeepBGC and GECCO data cleaning, whereas for other inputs the data remains unchanged. Alongside the inputs, "group_by.csv" file is generated, which is the table from "Summarize interception" tab and group.py python script. Here we depend on the usage of a clinker software, which is an awesome app. Check out their GitHub [page](https://github.com/gamcil/clinker), or published [paper]( https://doi.org/10.1093/bioinformatics/btab007) for more details. diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index 2db8e54..1555ffc 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -41,6 +41,19 @@ The "Vacant_color" column is not used in any analysis. The logic behind it is t The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy-based' mode. More on Biocircos link coloring is available [here](Logic_of_the_output.md#biocircos-plot) + +# Changing coloring and hierarchy for current session + +The colors for arcs and links can be changes for single session while program is running. The current coloring scheme is situated in "Biocircos plot" sidemenu. To see it first check the checkbox above Biocircos plot and then then scroll down: + +![bio_check](/images/biocircos_colot_check.png) + +![bio_scheme](/images/biocircos_dt.png) + +To edit the cell, just double click it. WHen you finish editing, press Ctrl+Enter. + +**Programs in Hierarchy column are written the same as on Biocircos chromosomes** + # Changing default settings **Changing default settings is possible only with local [installation](Installation.md), with R console** diff --git a/docs/Installation.md b/docs/Installation.md index 85820b0..3c6a6af 100755 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -18,4 +18,38 @@ BGCViz::run_app() You computer should have [R](https://cloud.r-project.org) and [Rstudio](https://www.rstudio.com/products/rstudio/download/) installed -If you have troubles with installation, do not hesitate to open an [issue](https://github.com/ostash-group/BGCViz/issues) \ No newline at end of file +If you have troubles with installation, do not hesitate to open an [issue](https://github.com/ostash-group/BGCViz/issues) + +## Hosting free version on shinyapps.io + +The BGCViz can also be hosted as usual shiny app, using any solution you like. This example uses free version of shinyapps.io (suitable for one user). + +First you should clone the github repository: + +```bash +git clone https://github.com/ostash-group/BGCViz +``` + +Then the hosting options are yours to choose. Use `app.R` as application file. Following this simple example you can open the file in Rstudio and run in R console: + +```R +>install.packages('rsconnect') + +>options(repos = BiocManager::repositories()) +``` +Then, change the working directory to the one, app.R file is located and run: + +```R +rsconnect::deployApp() +``` + +**In case you are jumped to Markers tab with warnings, return to the R console and respond to the "Filepaths are case-sensitive on deployment server. Do you want to proceed with deployment? [Y/n]:" -> Y** + +You can follow the same procedure with GUI. Just click the Rconnect button on right top corner of the script: + + +![rconnect](/images/rconnect.png) + + +Then follow the instructions [here](https://shiny.rstudio.com/articles/shinyapps.html) + diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md index 151b651..48bb593 100644 --- a/docs/Logic_of_the_output.md +++ b/docs/Logic_of_the_output.md @@ -1,14 +1,31 @@ -# Tabs generation -Tabs are dynamically generated from the output. After uploading a single file the only tab available is "Annotation visualization and comparison". After uploading more two more tabs are generated : +# Sidemenus generation +Sidemenus are dynamically generated from the output. After uploading a single file the only sidemenu available is "Annotation visualization and comparison". After uploading two more datasets, two sidemenus are generated : 1. "Biocircos plot" 2. "Summarize interception" The default data choice for all dropdown selection menus is the first uploaded. -The "Compare to DeepBGC" tab is available after DeepBGC data upload and if the more than one data was uploaded. (For example DeepBGC and Antismash). +The "Compare to DeepBGC" sidemenu is available only after DeepBGC data is uploaded and if one more dataset is uploaded. (For example DeepBGC and Antismash). The same goes to "Compare to GECCO" sidemenu. **Note: Comparison of DeepBGC data is available only to PRiSM, SEMPI or Antismash. So, if, for example, DeepBGC and RRE-Finder data was uploaded, the tab will be available, but plots will not be rendered** +# Boxes +Each plot or option group is encapsulated in a box which can be closed or be hidden. Also boxes can be resized, so the plots will be resized accordingly. For example: + +![no_resize](/images/no_resize.png) + +![resize](/images/with_resize.png) + +Closed boxes can be restored afterwards with option on sidebar: + +![restore](/images/restore_box.png) + +Also, boxes can be **dragged and dropped** to change their order. For example: + +![old_order](/images/old_order.png) + +![new_order](/images/new_order.png) + # Select menus The select menus are populated after certain data was uploaded. Therefore you will not all the possible options right away. This is made to avoid possible errors. All the options for data are: @@ -21,6 +38,10 @@ All the options for data are: - GECCO - DeepBGC +Select menus looks like this: + +![select_menu](/images/select_menu.png) + On DeepBGC and GECCO comparison tabs the following data is available for analysis: - Antismash - PRISM @@ -28,33 +49,79 @@ On DeepBGC and GECCO comparison tabs the following data is available for analysi If you have uploaded your custom data, but prepared it according to the [guide](Input_files_options.md), then it will appear under the field name. The same applicable to the plots. -# Data upload and manipulation +# Upload Data Data upload is done with the corresponding file upload menus. Detailed description of the input files is [here](Input_files_options.md). -![upload_menu](/images/data_upload.png) +![upload](/images/data_upload.png) After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. -**The supplementary PRISM data is available if the uploaded data was a json report, generated by the service. To include resistance and regulatory genes, identified by PRISM into the analysis, please tick the corresponding checkbox in "Data manipulation options" menu** **Note: Please use the right sequence length. It is crucial in rendering Biocircos plots. Rule of thumb: It is better to input bigger length of a chromosome, than smaller. If the bigger length is used, then then just some gaps in the chromosomes on a circos plots can be spotted., otherwise, if the input length is smaller, then all the arcs and links will be shifted clockwise and the whole biocircos plot will have no sense. Default length is 10,000,000 bp** -The "Data manipulation options" menu option contains: -- Rename BGC with several products in the Antismash data to "hybrid" -- Rename BGC with several products in the PRISM data to "hybrid" -- Rename BGC with several products in the SEMPI data to "hybrid" -- Use PRISM additional data, which includes resistance and regulatory genes -- Chose ARTS core genes to plot +# Global options + +## Rename +The renaming of a data is going to be applied only for antiSMASH, PRISM and SEMPI datasets. The field looks look like this: + +![rename_2](/images/rename_options.png) + +The default renaming will be applied, if the "Rename" button is pressed. If you want to change the scheme, you should upload new dataset. For more in depth explanation please refer [here](BGCViz_renaming_and_coloring_options.md). Renaming options are used for better link and arcs coloring in the biocircos plot. + +The hybrid checkboxes for antiSMASH, PRISM and SEMPI when checked, causing to clusters to be visualized as 'Hybrid', when they have multiple products. + +## Improve global visualization + +This menu is adding some width to result clusters. When checked, the overlap of the clusters will be based on old data, but on the plots they will be visualized thicker. + +![improve_viz](/images/improve_viz.png) + + For example for ARTS data: + + ![arts_narrow](/images/arts_thin.png) + + ![arts_wide](/images/arts_thick.png) + +## PRISM supplement and ARTS options -![data_mani](/images/data_mani.png) +This box contain two options: +1. Plot or not the PRISM supplementary genes. +2. Only plot selected core model hit for ARTS data. This option makes it easier to see paralogs og the hit and where then land on a chromosome. -The renaming options are used for better link and arcs coloring in the biocircos plot. PRISM additional data option adds the resistance and regulatory genes as a separate data input to the plots. +![pr_arts](/images/pr_arts.png) ARTS data controls are used for better understanding of the core genes duplication. If the ARTS core gene is intercepted with other BGC, then the one can plot only this core gene paralog to see the location of the duplicated gene and if it is intercepted with other clusters. **Note: ARTS core gene duplication data can have more than two genes. Therefore all paralogs will be visualized**. +## Download results for further analysis + +Downloads filtered and grouped results as a csv file. See [here](Quick_start.md) for workflow and [here](Additional_analysis.md) for an example of an additional analysis on the output. + +![download](/images/download.png) + + +## DeepBGC data filtering + +The thresholds here are applied globally to all plots and the data cleaning options for DeepBGC are the columns of the .tsv output file. They all are described in the DeepBGC paper. + +![deep_filt](/images/deepbgc_filters.png) + +Also, for convenience same Filtering options are available on the sidemenu sidebar: + +![deep_sidebar](/images/deep_sidebar.png) + +## GECCO filtering options + +Identical to DeepBGC filtering box, but with different options. For in-depth explanation of the metrics see GECCO paper. # Compare data with DeepBGC -This tab is generated after the upload of DeepBGC data if this data was not the only input. The tab consists of two plots and delivers a purpose to compare DeepBGC data with several filters to the chosen reference one. After the comparison, one can choose the optimal threshold of DeepBGC data, preserving the balance between novel and already annotated clusters. The choice between reference annotation for comparison is Antismash, SEMPI and PRISM. +This sidemenu is generated after the upload of DeepBGC data if this data was not the only input. Sidemenu can also be divided into plots and filtering options. + +![deep_side](/images/deep_sidebar.png) + +Plot part have two plots with their respective options and delivers a purpose to compare DeepBGC data with several filters to the chosen reference one. After the comparison, one can choose the optimal threshold of DeepBGC data, preserving the balance between novel and already annotated clusters. The choice between reference annotation for comparison is Antismash, SEMPI and PRISM. + +![deep_overview](/images/deep_overview.png) + The first plot in this tab visualizes several clusters, which are annotated solely by DeepBGC, only by chosen reference program, or by both. ![deep_da](/images/deep_anti_comp.png) @@ -73,13 +140,7 @@ The rates are: - Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how many clusters DeepBGC missed, assuming, that antismash is a reference annotation  -All the data cleaning is used with the help of the sliders. The main data cleaning menu option looks like this: - -![deep_filters](/images/deepbgc_filters.png) - -The thresholds here are applied globally to all plots and the data cleaning options for DeepBGC are the columns of the .tsv output file, which are quite descriptive by themselves. - -The second group of plot controls affect only the first barplot. They include: +The remaining third box is for plot controls. They include: - Choice of reference data (between SEMPI, PRISM and Antismash) - Choice of the score, to be plotted on the x-axis. - Choice of a step for a barplot. @@ -87,7 +148,6 @@ The second group of plot controls affect only the first barplot. They include: ![deep_cpm](/images/deep_comparison.png) -**Tip: you can hide all not used controls with the "Hide..." checkbox** # Compare data with GECCO The same as DeepBGC option above. @@ -105,8 +165,6 @@ The plots on this tab can be thought to be "Genes on chromosome". Here are two p The second plot has pretty simple controls, which consist of only one option -> the choice of reference data. -![genes_on_chr](/images/genes_on_chromosome.png) - The type, which is used to color the BGCs, is a subject of change through renaming and combining data as hybrids. More is [here](BGCViz_renaming_and_coloring_options.md) **These visualisations are also affected by renaming, improve visualization options and data manipulation options** @@ -119,13 +177,13 @@ The biocircos tab is become available after uploading two or more datasets. By d On the cursor hover onto a link, the cluster IDs and their types will be shown, as well as, linked software names. The type here is unaffected by renaming and is shown as is. On the cursor hover onto arcs, the type of the cluster and their coordinates is shown. -- The second plot is just a legend for applied colors for biocircos plot. These are a subject to change through [coloring dataframe](BGCViz_renaming_and_coloring_options.md). At default, all data is visualized in grey color. +- The second plot (Become available by checking "Show Biocircos coloring scheme" checkbox above biocircos plot) is just a legend for applied colors for biocircos plot. These are a subject to change through coloring dataframe or manually per session (more [here](BGCViz_renaming_and_coloring_options.md)). At default, all data is visualized in grey color. -![biocircos_legend](/images/biocircos_legend.png) +![biocircos_legend](/images/biocircos_dt.png) -The controls of biocircos plots are under improve visualization menu +The controls of biocircos plots are hidden under "More" button on a box on top right: -![color_biocircos](/images/improve_viz.png) +![color_biocircos](/images/biocircos_color.png) After uploading data, these are available right away, however, there is small use in them prior to renaming. The coloring is based on the groups, which are stated in a legend. If the no color is specified for a chosen BGC type, then the base color is used. Therefore before renaming, when the coloring options are ticked, the majority of the links and arcs will remain grey. @@ -138,28 +196,16 @@ The coloring options for the links includes three modes. These modes illustrate # Summarize interception This tab is being shown after more than two datasets are uploaded. To logic behind this tab is to summarize the links between different BGCs. To support than purpose a barplot and a table is generated: -1. Barplot, which counts to how much other BGCs the chosen one is linked. On the x-axis, the BGCs are plotted and on the y-axis the link count. This plot is useful for basic prioritization of BGCsm which are annotated by a chosen app. +1. Barplot, which counts to how much other BGCs the chosen one is linked. On the x-axis, the BGCs are plotted and on the y-axis the link count. This plot is useful for basic prioritization of BGCs which are annotated by a chosen app. ![summarize](/images/summarize_plot.png) 2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. The last row indicates cluster, that are inerecepted outside of a chosen data. It means, that they are annotated more that with one tool, but not with the chosen one. -![group_by_t](/images/group_by_table.png) +![group_by_t](/images/summarize_options.png) The options for data summary includes: - Option to choose the program, by which the interception will be summarized. - Checkbox to visualize all the BGC for a chosen data. By default, only BGC, which are intercepted with any other ones are printed in the first column of the table. But if the purpose of analysis in to emphasise the BGCs, that are only found by the chosen tool, then all the clusters will be printed, if the checkbox is ticked. -![summarize_opt](/images/summarize_options.png) - -**Note: The second plot on the "Annotation visualization and comparison" tab is similar to this table. They can be used interchangeably.** - -# Improve vizualization options -These options are dynamically updated upon different data types upload. They include: -- Add thickness to RRE-Finder results -- Add thickness to PRISM results (regulatory and resistance genes) -- Add thickness to ARTS results -- Add thickness to SEMPI results -- Coloring option for biocircos, which are described above - -The rationale behind adding the thickness is that arcs on biocircos plot and genes in the "Annotation visualization and comparison" tab plots for these results are roughly visible. These options are just adding some length to the results, therefore making them visible. These options DO NOT affect the interception results. \ No newline at end of file +**Note: The second plot on the "Annotation visualization and comparison" tab is similar to this table. They can be used interchangeably.** \ No newline at end of file diff --git a/docs/Quick_start.md b/docs/Quick_start.md index 6a9edec..bef11e5 100644 --- a/docs/Quick_start.md +++ b/docs/Quick_start.md @@ -10,17 +10,16 @@ # Step 1. Getting the input files -A detailed description of every possible input file is [here](Input_files_options.md). In short, prior to use, antismash, prism, sempi and ARTS results should be downloaded. The only SEMPI  (.db -> .csv) and antismash (json -> csv, if using web version) transformations of input data are required. They can be made with a help of scripts in /scripts folder, or they can be constructed manually. The example data is in the /example_data directory. In this guide, we will be using prism.json, antismash.csv, sempi.csv files. +A detailed description of every possible input file is [here](Input_files_options.md). In short, prior to use, antismash, prism, sempi and ARTS results should be downloaded. And if, downloaded correct formats, they can be used right away. - # Step 2. Uploading input files The upload of the files is pretty straightforward - use the properly named file upload section.  Prior to upload, no UI toggles and elements are shown.  -#### Note: You can use example data from S.coelicolor, pressing the button below the input field +### Note: You can use example data from S.coelicolor, pressing the button on "Use Example data" box -After the upload of the first input (antismash.csv)(**make sure the checkbox is ticked!**): +After the upload of the first input: ![anti_upload](/images/anti_upload.png) @@ -30,11 +29,11 @@ After the upload of the first input (antismash.csv)(**make sure the checkbox is ## Results with only one file upload -1. The first two plots are available for the analysis on the "Annotation visualization and comparison" tab. The first plot contains all the results for the antimash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. +1. The first two plots are available for the analysis on the "Annotation visualization and comparison" sidemenu. The first plot contains all the results for the antimash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. -![anti_all](/images/anti_all_annotation.png) +![anti_all](/images/anti_all.png) @@ -52,9 +51,7 @@ For now, this plot is the same as a plot above, due to lack of data. ### Controls -After uploading a single file, several controls are available. "Genes on chromosome plot controls" have one select menu, which states which data is used as a reference.   - -Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Data manipulation option" menu option. This will rename the multiple typer regions as "hybrid". +"Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Global options" sidemenu option. This will rename the multiple typer regions as "hybrid". @@ -64,31 +61,17 @@ Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is avai ## Results with multiple files upload -Let's proceed and upload PRISM and SEMPI results: - -#### **The example S.coelicolor data is available upon button press under PRISM and SEMPI input fields.** - -![prism_sempi](/images/prism_sempi.png) - - - -**Note: PRISM checkbox is UNTICKED because we are uploading json format files. Also, it can take a file to process PRISM json file (up to 3 min)** - - - -The plots in the current tab changed.  Also, two additional tabs appeared: +Let's proceed and upload PRISM and SEMPI results -1. Biocircos plot tab contains dynamic circos plot for all-vs-all interception results. More details in [step 4](#step-4-color-the-links-in-biocircos-plot) +### The example S.coelicolor data is available upon button press under PRISM and SEMPI input fields. -2. Summarize interception tab contains data, that can help to prioritize clusters, based on how many times it is annotated by another tool. More details in [step 5](#step-5-change-the-data-to-group-by) +The plots in previous sidemenu changed.  Also, two additional sidemenus appeared: - - -**Tip: Upload field can be hidden by ticking the "Hide uploads" checkbox. All menu options have this checkbox and therefore can be hidden to decrease the clutter** +1. Biocircos plot sidemenu contains dynamic circos plot for all-vs-all interception results. More details in [step 4](#step-4-color-the-links-in-biocircos-plot) - +2. Summarize interception sidemenu contains data, that can help to prioritize clusters, based on how many times it is annotated by another tool. More details in [step 5](#step-5-change-the-data-to-group-by) -Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, we can tick the checkbox "Use PRISM resistance and regulatory genes information" under "Data manipulation option". This will cause a new "chromosome" to be visualized with these genes, named "P-supp". More details available [here](Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox under "Improve visualization" menu. +Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, a new "chromosome" is visualized with these genes, named "P-supp". More details available [here](Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox in Global options. @@ -120,8 +103,7 @@ The legend on the plots changes, but the "Type" field upon mouse cursor hovering ![renamed](/images/renamed.png) - -Red rectangular on the plot shows, that the product information is preserved, but the coloring scheme changed (lassopeptide -> ripp). +So , the color indicates, that the product is ripp (on a legend), but Type field on hover indicates the true tyep (lanthipeptide-class-i) The renaming scheme is available in the [Glossary](Glossary.md).  Guide how to change it available [here](BGCViz_renaming_and_coloring_options.md). @@ -137,9 +119,6 @@ By default, all hybrids remain intact after renaming. However, it is possible to - - -**The data manipulation options changes upon files input.  They are not the same in the every case** # Step 4. Color the links in biocircos plot @@ -167,11 +146,11 @@ The second plot is actually a legend for circos plot: -The coloring options for biocircos plot are available under "Improve visualization" menu: +The coloring options for biocircos plot are available under "More" button at the top of the plot: -![color_biocircos.png](/images/color_biocircos.png) +![color_biocircos.png](/images/biocircos_color.png) @@ -183,7 +162,7 @@ There are three coloring modes available for the links, which are discussed in m -The last tab called "Summarize interception". It contains count barplot, which shows how many times the chosen cluster was annotated by any other tool, and "Group by" table, which shows which clusters are intercepted with the reference (first column). +The last sidemenu called "Summarize interception". It contains count barplot, which shows how many times the chosen cluster was annotated by any other tool, and "Group by" table, which shows which clusters are intercepted with the reference (first column). For our example, the barplot looks like this: @@ -193,7 +172,7 @@ For our example, the barplot looks like this: -We right from the chart can see that cluster # 19 from antismash and # 13, 9 from prism are the most abundant between annotations. The group by table reveals, the intercepted clusters: +From the chart we can see that cluster #10 from antismash and #9 from prism have pretty good amout of data supporting their annotation (let's take arbitrary clusters with high count). The group by table reveals, the intercepted clusters: @@ -201,9 +180,9 @@ We right from the chart can see that cluster # 19 from antismash and # 13, 9 fro -We can conclude that cluster # 19 from antismash, #13 from PRISM, # 23 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#65) and 4 regulatory genes (#122, #123, #124, #125), as identified by PRISM.  +We can conclude that cluster #10 from antismash, #9 from PRISM, #12 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#54) and 3 regulatory genes (#51-53), as identified by PRISM. Types of clusters can be viewed with a pop-up with hover with a mouse: - +![hover](/images/group_by_hover.png) The interception of all named clusters can be confirmed in the Biocircos plot, or by reviewing PRISM and SEMPI data as a group_by columns: @@ -213,15 +192,16 @@ The interception of all named clusters can be confirmed in the Biocircos plot, o -By default, only intercepted regions are showed. But if the purpose of the analysis is to show novel regions, annotated by just one program, then tick the "Show all BGC for the 'group by' method (+ individually annotated BGC)" checkbox in "Summarize options" menu. For example, if we group our data by Antismash and check the box it becomes clear, that many clusters are annotated only by this algorithm.  +By default, only intercepted regions are showed. But if the purpose of the analysis is to show novel regions, annotated by just one program, then tick the "Show all BGC for the 'group by' method (+ individually annotated BGC)" checkbox. For example, if we group our data by Antismash and check the box it becomes clear, that many clusters are annotated only by this algorithm.  -**Tip: Check the last ("NA") row in the first column. It shows the clusters, that are not intercepted with the reference data but are intercepted among other methods. For example, cluster #6 from PRISM is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI (#7). The similar situation is with PRISM resistance (#35) and regulatory (#78) genes, which are not intercepted by Antismash. If we group the data by the PRISM column, those genes will land in corresponding groups** +**Tip: Check the last ("NA") row in the first column. It shows the clusters, that are not intercepted with the reference data but are intercepted among other methods. For example, cluster #6 from PRISM is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI (#7). The similar situation is with PRISM regulatory (#4) gene, which is not intercepted by Antismash. If we group the data by the PRISM column, it will land in corresponding group** -**Tip #2: You can view the group by column in "Annotation visualization and comparison" tab for feature-rich visualization on hover. Just choose the same column in the select menu for that plot as in the summarize options** +**Tip #2: You can view the group by column in "Annotation visualization and comparison" tab for feature-rich visualization on hover. Just choose the same column in the select menu for that plot** + # Step 6. Compare to the DeepBGC The clusters in the previous annotations are can be thought to be "boolean". Therefore, they are either annotated (so exists in the data), or not. The DeepBGC data contains several scores alongside cluster information. This program uses the deep learning model, which can annotate different from rule-based methods, novel clusters. The scores are deepbgc score, activity score and cluster type score. More about the model and the scores are available in the paper (DOI: [10.1093/nar/gkz654](https://doi.org/10.1093/nar/gkz654) ).  @@ -264,7 +244,9 @@ The data cleaning options for DeepBGC are basically the columns of .tsv output f ![deep_filters](/images/deepbgc_filters.png) - +The filters are applied globally for DeepBGC data. For convenience you can use the filtering sliders on the sidebar, not the one under "Global options": + +![deep_sidebar](/images/deep_sidebar.png) Therefore, BGCViz can be used not only as an interception between annotated BGC visualization tool but also serves as a nice GUI for DeepBGC data cleaning. The results on the cleaning can be then downloaded for downstream analysis (Step 7) @@ -273,13 +255,14 @@ Therefore, BGCViz can be used not only as an interception between annotated BGC **Note: The tab and plots will appear after DeepBGC data upload. Therefore, if no Antismash, PRISM or SEMPI data was supplied the plots will result in error** +### The same workflow is available for GECCO data # Step 7. Data download -After the analysis, you can download all the data as csv files. This is particularly valuable in the case of DeepBGC data cleaning. Alongside the datasets, group_by table will be downloaded (as visualized in the "Summarize interception" tab) and group_by script for downstream analysis with clinker. More about it [here](Additional_analysis.md) +After the analysis, you can download all the data as csv files (under Global options). This is particularly valuable in the case of DeepBGC data cleaning. Alongside the datasets, group_by table will be downloaded (as visualized in the "Summarize interception" tab) and group_by script for downstream analysis with clinker. More about it [here](Additional_analysis.md) -![download_button.png](/images/download_button.png) \ No newline at end of file +![download_button.png](/images/download.png) \ No newline at end of file diff --git a/docs/images/all_annotations.png b/docs/images/all_annotations.png index e73331fd09c4e09a742e8ef9a274cecf2ad70ed3..1c5c07007dfb92da3ec7008022203318a796f22f 100644 GIT binary patch literal 45013 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�_Wl_d(R<%)%sq3Vje#Fa> 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 TH!MLvfFX7CVB8-k|NK7yMDq5} literal 37995 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 diff --git a/docs/images/anti_all_annotation.png b/docs/images/anti_all_annotation.png deleted file mode 100644 index 29474eb39f7638b3ea2c5a2b114b02e5ea66a61a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31830 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 B7_$HX diff --git a/docs/images/anti_one.png b/docs/images/anti_one.png index c29f2b7f64051f027943e69b1f76e1f991eba29a..181c5d9898f005a6940368a94583fb2b1e5afe73 100644 GIT binary patch literal 43606 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 F{2OVDPrd*E literal 14831 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 MD1NOHGyd`40OjCyVE_OC diff --git a/docs/images/biocircos.png.md b/docs/images/biocircos.png.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/images/biocircos_legend.png b/docs/images/biocircos_legend.png deleted file mode 100644 index ab1f5cbdef498c7c156278a84c3db506f67655d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40967 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

    Cwy)4Y(wR(f_@`dK*(T-BhJjrvTgTx+j6Eevr( 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 Ixiyy#N3J diff --git a/docs/images/change_summarize.png b/docs/images/change_summarize.png index f534b8719c3292844ea5b3ea16713bf5145f373c..15b21a4e53a560449d7f1c0b3ed05bc7f168e349 100644 GIT binary patch literal 54932 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 TOT)?ak4Jm*EY0AF#@qfsW?PJK literal 15795 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 S7j_sMkds!Hs*o@V{J#KXOH3~S diff --git a/docs/images/color_biocircos.png b/docs/images/color_biocircos.png deleted file mode 100644 index c5fc424e7a0eb87e239fda25defcc85c68fecb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46167 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 diff --git a/docs/images/data_mani.png b/docs/images/data_mani.png deleted file mode 100644 index 8197278dbd114273683cf9e06a7e713fbba7bedf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39372 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 Ziok{DJD9g3xq!Jd7#o;DYW1JK`46ZZdt?9r diff --git a/docs/images/data_manipulation.png b/docs/images/data_manipulation.png deleted file mode 100644 index d1de885accca637256defbcbe0767b0c1b7fd010..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43065 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

    uPO3`Pf?ZJDW90w$4Jox=w2O2kqPstwqC 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 z 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 literal 46610 zcmc$`1yEfSyg1ZNIcL?ro!QaWu+<)%<=gz!& zw_eq&qPou6#o4v#KK-q4NfRpnSsW1_2Oabvpo;a5ZI^-&L>};k7JLR*2uH^ZPK32&F#Lv$ur2;W79F*3%dr{H(2*b+ z%^L!jwt8V41{qC)SSZWrxSg4qo0%I?qF7woH&q~CTB)xR~ znsJK>vopnuBjTNJ2*T-nbNcL902ZF|PFW3?REDIt=9hB$%>*<&g;?2!0&K_f@M|15 z^~AJ9yjJ7ZB(*4dote>jx;&S3!>jK;0InR9W8%*?qo&rcH_oV9c)<^5U)m5e2M>dS zWaHChe|z{1;f%KREKZ$MQh3JezWY*kyI+Cn3E4y!UQ@bEaSuW9RbouJ9d-!-hyY0u zLFF$QCu_dSXl@<+uM1}J=}Yy{4})|BXb)a!1+rmQ%cs!IBgKUAR~CjZ3>tEXt_Zi< z-Mm&eUV$E#M=!AJc?at_=Ow>1LV4k{qzxJ=Y;6u)5%(>#=c*fJZGC?tQdGocO#cjj zkBJ}7!&ktRPf4S-6{k~etO_)UV82~w*$1j&N)Bj~;F$Bw^qRbHLn%`&S0m5E z|3n^BnnWc5R5G62H{pA>p?n={an#2lR#Ady27m#`Pi8uZS`Z5}Hl}RM*6!o&ZtV}| zDKQF!k^lGRL(;idf~|w&M~CNzf>Cjn zTP8}Hkp}KwX5W(y@M@#klXMD_Q91sOZVlD+sw)NJPow zzB-CGSEh|KYlJTadB3+q8cb3>Sv8HRWuI{j=YdA9KDfp!+|#@~_88F!ENO10!_6L1 zsa^0`MLXFHc?YF(!{dZ4x?Wo9Dw=QG$ui5BGq0k?d%D&>wtR;uk)*2LfV(5)XTEq_ z*tfg|clV7`+C*JVLxBh?L}?!Y`(bt@<9WI+O{8I2V@(@}cKP`5qp)P;wLT0L9AKi~ z?Z>ZMS;Ewn1Os3t#>AvW$Gf~T+~gDvW0_tIfZ1N3id?~EH0ZCxb&U;V2tb#zyqXKE z5WM<({p@PRRMu6|nVj2UYhZl)>Ie46!&`aIA^hf@oC&8Gm6|6c3B?%ifB!2v%3pV7ti5!f7n4wjyoTvIWX!+}?|mJc9#|k#zR^KmyemVl_sVcEy}A z@P-2ITK}Yu*2X~F(Q4hYJequ}tNd4J+?TQ2L%9#SO9u01U|#Aa zOFQToX$#>Qh!tSaWV30drE{g|aP+`IUWI4oW=e`jpCz>_DgbC-m?u8i>@7bqB^Qw` z)0B*Tc2rSukP|*lg_^6()Fj@vEw3ghfLMDWQ7oKJO!X~FM9s6-z34EYdLhm8F3`NH zp1ahGeSN2LX*G9T63R0m*VDxEwCT`-gf5+gjae3&vfyH9K7oc3fSf&I>YlDp^-(d^ zI(yF0o#WlsY8;{_HDG*5+fcbMj-#v5WTB-JFJ5PEqcWE?UG!*v%&)dYBCHZ20uUSKRXfv9L|V~O>E+OX9}A0~h^|O@Dxrm;XH*zr$+z34 zKd99lo7v2@S{ne!$iU=`<~cf6YGYDq5tPnTX?YepwqkVh5Sqqil)l{4EQ-(l}4jrXrMOyYD+W4=dk6ZvO0Qe>1yqcIvV*c0y z+Wqf5AXaJU>qVHoI}tuAKMI9G_IsDrn3FB`b<5>9H8d!-= zl{0;L$7bdqP*|9&j)VE-ooD-30c2;I*xbRk3W=;DwK4Fk@=U(HTj-|TQH5h;(XMAyveCiI-eASd{zNa)I2(i7dUMLG zysf3@+|g@Z^GK|(s`mw1@dd|1%|&O zED3-)y9c2%%j(Ccwi^qG%kS~3K%?ph?r7#LEm=C*iCKU^HC}t5lFbhf_$kSap@?h^E3}~E-+*V{M1P@-`ltIzm7u# zLIoWHN1R8c+MCOn1&X^0L5ZSLh6j`6It&v45Jv{*cQ|ZK4aC$+fd4x8#sgvwGw$t$ z*E&`7q8;#H01@A}6qi!ReJ~*A+}r(EzK?9$hxP$Z~AvzxLpF^VDo}maa9*tT(8zwC6w>u9MD}6*uS34aP%5r8X5Fe zPeCZQEDIU{P<*qI1PbNzA%HH{Kt<^B3E}R_YBgpxW~N2zq)}q99+?2J4^P9IiexS4 z!7D3mcwK?ec`XLTbiY1rGL8^%4>#2ZJ!vL#x=F|Lo;PiypT3Mr6W&grH_IT7nbh!D zec+^_w0!~f&$+tCNtWUwr5l#?N}=sA(q&pt=Xv8f@coQXkkhN*ps)df{Me6)ckVBz ztxAy7alKJtczy!jmzGx9;fLP|_RUg>RG>slzmWj?{8bwFt%U-$W7jodIBDhTLXx=n zH_TXQ#It48%n{<;5CBk;uS!*d0dzg!(hlD>MPgp&J5VvFy^7 z3{2)2+jtb9***-<;5|kh0Q`{e!C@1RkruNa%X)9C2cA*~970^{pv&#j#qlcd2hPHd zyQiXkLJ+;#px>><_Vi`@{^l^bLNk+O0X)E8^_9!e!Kvm~_;vZeY|EQ3dXXrs>JFUg zctwxlwjTRZNPSC1w|zq5fH4ddE5rLuAnITAc7&K^|FA%lXhesAd`!rNifPh|^{w1X zBd`z_=!q;4eQK+t{FIWPcYF&&0vuZQUeh!)ot$AW4~NdCqR-5dufQBD@0xr6|ry^$ibK=UkuZ{EU~Z-Yf~YArLuSur0YY zGxz6dzlU`GlKW`^*l&L6HK=}dKXP?v)M>4pCNGpyV@#)Q*?Z$06%6|H^vWKrPJ;q* z<8dOM(QO-?mrh26_j_{l#dkVQ21#rGCvkCo!EC5yOTk_R#?dWT?_IRJrAkX8--`Z6 zkK&?TLw)}@QO_qL;i3ur4lFnoWuKr^b)-)fIi_F{!ranx&2iqJA5+{-1TxcQQN2+n zu-%YCoDirSe?5CHs-F^l?P;n%xzpeO&EbeAGb!HdZK|VocA%D=lBHJI*K^~JS-3l% z2oS4MLo%FWTit?*p*V1P{sdlxA)EkUy>~B7SL&vEtq(l5Y9Y@5@Lh70mTSoERmipk zGUT+`n;iUFgVat^hh;V`{+T!VBWB`}FUrY6=2v+nn1DJzP5XPWYt~Zpg0@p8o!Y*h zS3=4BQ+h0fD-|(WZe*@Y_H%vu1^)7~WkTiK<|AG_wCik%92cSoR&K7wEAjL`$9fRT>wj%Bq&_*at)GJ=?c)_co6+Bx>Jb^ud#0TKn|+3?zEw)L83z&(TOh z3%1N{niur)D;z9nzPFxPcc&65#@Y`9Q4%;`xp~e zyV+sUciunGh^1+K$ie(p%xJ+=4cIU&O6*=!VoRk<8*yy$-H;y`u|j#rf-{M~3Uykz zJ?4t=-mZrT|PBcfiXa`HXgI*$}WfjHnOtY@SJ*$s}n>#OO!@aqZ9;mRJ#fy$v zcB!9NbA!pGDW1$llz&2UFO>+g86L=jMOXr}pwSmpaH?Xz}ei8n<$yYgV zW3SElW3npRT^c-Wq;o^vku#;W&)xU!mFwa6g&RAF%SHwqMj#7$1(4#x68{wca`Klq zf4%fiM)do0YiC#2&&E8+Lgr!VJZ@(fjeq;x8x9n4z;D>-OcbGzXr}+eF)n8OWQpP$ zUaEb*pG;ScMymQWo@DJ|bGoE|dD(ybnj;89_mj)-F1>MaJ1mh-K8GI-cYaP^u!V%1 zejGiP|V*B z3^TksP%Z*}$_KTIC63`CJJJ^$a+sN%bspdmMJ*!Ij}G%pElnc%;U`r~G%Tv|*$qw3O^6f%J?r?OqKL*rMM8eP%Lf4{;t6U-js% zV{x5O`w=60A|m5jC-vekr%7FHEXq_>?f7?>h4)t*?vp)8P`d^O#!HzQaoNR#Xd(y9 zC|cO=C7oL2Sg6fFH$UC)Jx2X@frkqTJgJcPn4I$H>7ZXRTCzooo`w!>C>Hn}p~VWJ ziy@+vuJ5`|VzN|L1Vz9d%HhFn)OIt;xTPE(2Y7Gz_DO*sp=(k#z35Gs zC3g0Dwtn72%Ma>TPsRKmqe&n)IY6B#P&CjB4q!RA?KksTr!q#(wPFJd2b_*qkMTHc z*qw-YBhDpn0o0K2scsi&6ZN%RsA`ODB14KdcS@AE6%-^f-O9D%r7KZZ^D;YPoDwfp> z`B`<6-mV_8RI=R8n6aAMN*m1X&txB$byN7n+pSv*WWWH!v1P}FhW5ab3gf~adF^8E z?af>W4J!8rqOlG^wM&pJaDAh~6PACOj?AZNyU61l=}^`UN5oKWvm!=bo%~x{Fkq4l zeV3C6mKYFds;)Z_Zae!r5j9LCm^je`e|5a3jmn3%0Op z&50SK&t*~;#pbN}`lo#VlUn`H zt|ypt*P7WRS|Q>{Rp{o@u4{|CQ5L9__#ZpYTeH5m{Z4;tySMHHrBxc9TpaoI(m0a) z&bv#yJZ~1gKugI6!5(dPOX1o6P}#`lRB-|^E@uG~l+cgp$QZ7V}j8KDlgv?bKqye ztw~>Dfo5E{AkL zWsa#RY|wNly%%0cteTWh=x-{?;5e%T~%O`41M#`0CWW;W*v zP-l{l>8P~GpmMFm?g-EPoOV~OG)PosfCPTEtl8Cj47F)P@$Ee&X)K579M>QEpQjK& ze`R19u)nt+O*Q%)xMy}D`c$Om(=@PC=A);! z{Assbrf-{tbl*#jqRktLB=PZM-;c^P{IT-N`OB{}kKilLi(_yiAUg!y<1;t*_E$HY z;VhuAV0v|weq}~zrm_&x@%~(#w+#ao8DU8)=O#PvHo#k}VW4J>Z&>ZKN?WaEqT|I_ zBy8{JhPG1vTr$$hElTh9E~Qbvu#q5_ewu0sTn4X-JefMnR^%3(aERsy4-Ry#-YvR2MZUV zvDPobnOx^SzB($M73?pJaw^243Xfr(rt+565=1zj)uDoa$Gf7Zf5bZl9UqB;4jF7~ z4kun=66|Lon35m^M{PDX2d7R9NePcts9KASE6+*$IQULKg*iH; zDch*bV!%DpL@oByQZMvSu^d&>@K425ZPAbY8|+*Q7Sd!!jI1sJ8&&0tSosZeYO7pz zpP;KtcM!!T2}i!Ef1+QlYxp|q9@96lWE9qi!1L;SHN)x{h= zH%O2luwb1Xf9UVX2!(2c+jPTrbr~R{y|#Q;9)cwngw5ga2MYo7GxDfh)1^QSvyTx5 z0B7+Y0i2Ip9N(@vY}QXk*Ht@rzrJrJ5D+58-NH-EAL;P?K0;`af~?cIffB25v@~S7 zva@hp>i$yaWfRDkY0`pSm~POb@gB$(9Kgj~0lgp^MwBt+IygUub7Ohe3kED0thDz{ z-*EMcwaIo?U4Oc)xjYnKNo|dpFjp4(&U3Mb1OOY}b109o*00Z_*oQ38diRp}>re974yWCs5DM`tGiB-jI1Ax#Ks8unhHw^D01t`*d{Tv+( z1p@Og6HeZXANBCc+*knZNr#=CTS~U0-_6IqWy_DJAFnN;-ucvHQ!H_)kh9k?kNj|A zY;A3rzu9M^9gHbURyn6u+Tz7+{G#J5htxW9(4s;z$ku5`FBSb|!-;9BFc%8aOT$ic z1{sfY^LN{-J*0r@^39#c?)6^jHIJ3v)WVI~;B`1%RWg~kGOa<+5<)Ufr^f&mlwTQ` zUceyx;2Gy7*056zAxZGwm~>A;L!WPB_)Z2-uy?E8d=fT(B974O9`eM?7^{abFqV*|Gr(gJhOJU zBtrD0i*7-LmDLon?Yo;kYEKO6CqR}~X(`QQj2vORwy!POkv(6_Th8s98`oLBm~BFcoU1 zQ=QJ4i>Yhlr4_wPzVTX>XC_ zv&ZE=eK-nmrTE>2!UYV#jaKea8`;Lokc zA0AjlvS0GT9UkpTe<8f6$2Q8x&SSuOaa7v~8|fdkTw&mZO@H8+n-L$I9merR&#q9c zoi^mLo~CD>cL9K7TUIQ_1$p!W4U3vK!X1FoUckE43B|j;?HosIa+1!-5n+VtUH8?f^L}yFt3#u3y2PN7{ zm04&Pen`<`fdlqyXN{We#=4b;SA5XCeJv0QDGvx^6Tiam1R>G%HcF} zS2tN#X5qj3;_2iq{>&W+`BUglm5TSkoY!C@>9pFqF?f4ib`T-#om@B=kZb*8ZhpQf z*N5S=EhF0J{gAx9=!+`~e`i!*=>d)6jub_ukujT847Mu8c%Ns=f)>)0%tnc&dyCfl zBc1rl-{U%I55J#N0T%S(Q9Fo^A)di34{q~Pu$cctS$vHRq zm|rP=-%>zD3&)Gg(CuuR@pQC^v4^VRs2QKOhpv%!ifEUjjAcpV+C*_JKo8_=yTO7q zo3X=({55{VgRNXfdvc|c6p-v+C_mb9bRYRqD3StwWlVb_Mgp28Reoo*-8+FvmSh4F z@G~bv1q;>w$oe%wN@TQeuz2B2LULYS7TXw_NoL{$eU7e04Tn~l54q)D?sV=}kgS|LMoQY5VJJK2X@XWIxXqudq3bE>irK|}?P ziZp6eo6;|5Mp-p@M;(~0{GoU}PG|EC_Jg+5R;)OYrn17>6QF)rrGdiT-0RA4r8Kh4 zs;x1q3HmPL>1o!Ts;`A*^bg;?UJSgGd*$K&QrDAtuM;wq^t`tlmkguF$dLGge5KRH zBjzrcL5z7Tmh$@5O`B-aJsL@jDpr~ZHR4^nS&!a*JSsLZ87%S50Ce(y&|F)5EjJLn zN^R@NhCimyV~-64Wpcv(J2MPcyMl{^ge-_@_cs&{dgQdpcack#pgDP5gt&3=zxv2iCJR~Ax_vg=64<4 zKlZjXcqFwXZ6Vju>*&*}uafaKZ=rkJy=5%@biQiD;OMSmGjX<-epBDhtOqL`c>ek_pUdl6UFv6@{shzp@rg^Y*XYNZ5D$5-t8n@ zh%$JunTQ}Z+}m7+xIE3V_6|lnxpq@sKx~%+eXK2kWWNB!WCI2(7Iih-8>c51Aq-2T z)atJb9GaczR;_8=XFTtV8_XT*oswPKU>yEmQspn)EN8-|c~Oc=IKABAwX|?HQuzGZ z+;bq3JL&$~|Dz|o=sn@@k%xoRZwCvM@8{4WYA@c3l~Bm3y{jUgUm;c%AoA`)y!!!vO*U6!Mgp-z} zD1wC9fUlu8qt5lp^rLR*a}>Wq?{rnNR$JV(H+#{VW*SEEn&S3ef5l;l_=kaYQ(tRs z0_GHTZt?azQr;2v^jj`6E@_L!dFzcF%J|tDW#WwMYqJo6CvmK8$mK{s#v3Eibs4uuRBoijFVmoBW|di}H@quc#}@=Ea zs+(95JDpG#{X4DQfBZ*UORTdlQGG_H&^S_K>!kHr<&=B3DMAD!SL?T?9%G{p=~JNn z;kk`>tf8OKK)!IS1SFZ`&?KZH4GJ?BXT!8vzlrh@o!sKFm`c^FNgOOULRk* zQOxq;W`6Qxd!!S``lX*jbvd=PekxRN`>`!o^ckjBxp6qRyYr!{?{S>B)oI*z)pB_4g%J>6Z&`z?$Y(MoyyK2j6_s(;5r=DpHIF+&o!w3kKIzyl%B z>34NfzG_wY6D;{Zr!@)_!cW!#HP&zdX!;NaD}kE#ux|RP{x|mbikEnqrC(zE<4+7f zjir5RmHF!Uz5h;CpZPDOK(kRkqEKIws=gwxMddv!E9w2unCsx=6v@9uT$t zp3@bs?Ev7#n~svzf{$Gjcb*n)WOfr3cPT{-`@5Xgiq`3YehNd&8PY)2E@Pg36FtGd zAuGeY`(hdA7HsmNkZ1JfRyZQknMHG4| zk)~BUeHXa>rmEF-a*a?Xs$YUs_RO{cm>&Z7`n5J;!zk9k(b_wZW{tR3zbCNQ#@HE>ac|ppN+KN_SrAz1b4w6A#I$29F zyYxpf{$9|pF6z_$-5^q+X1cI(f!4FV;@o{EOxkgV*sE^!hugvMw5mUvfVTR|9lWsT zqW!3~d2>Cu&=a=}b;>VYS?t5dEBf_PZ<9yi8IuRbDqn?N_k9AV*pV_zPuKJH{HoKy zL#Nr12CZRqfM~v)-pyu3t7%orl;&MuU?~d$19wbdoEgIO39d87hW2+pIlcNksx$YP z7~}~O+ep1oQKGaYV)FP;*?|)nBIYs~R$3UXQ-)o_NUtG|c*p_B0MV+t=1tDJE0s^m zdh~zQzn^(KMu&5^vy+pIL06)HNpudkv(-(zOCPg;mlppcX_h(}QgN;?TCnD#BXPhiO1k4U~jWh{`Dtuh9<1NlaHY0P#2#vIc?c1Sqyb%3jBc5WCF17O|!a+L1$Sz;f zczQ)k^3ys}7@l1Z7r$>1Y@M$&v&Z=%2YAP1G=@6@hK0`8E;qE52AD*Uz~cC!rP3=f zD3`Tg_Vz}BrM{-05X!u4w!CifeY&%BgbO~<)q*?LH^PQ4YN47&cMih^gghRrD(nsf zjXyxRhz;)?K72qkgvy_?I@`p+_zS z=pQr1VZ1On4Y(|A^@aGK_Y^p248AS7hbMS{Z}6;IXFCi#UoA+Dp7;*OB%Cw)%>L`x z2lCVt`HxbU@9(;i9j00)K`f|P824#PzZuAuE2WJ!FolD(AK@Zus=w<=IJeZD}g1o>0hfddYY6 z?9Dxvn3g)R09jJOCOpp|oLG%Gxh%Yt9d~-1Q=9sNoN}jAo3&^^-t{eH<|VwND^aGv z5E>9j6JmZU-B`ddoAu-Pqm4uVSDri0_uuneIH|w;t6Sq~txN06*3`7}LnczEEk`v_ zDB>d@rrxsSm=#fPx#gIeaaq6o`ov8lodjlEh^0TDXDii1phTy;cv+-WlW7%+*CeY-L|8I1ERmo^M7?v$#(;NqA?*32W0D#pGjKopk~BPZ8Z zs4SfC)ZIC+ywLo-_72T{{>-IIF^}EE7Mk+=RB-^G+pkta0O)usCA}eCdVWY{nKpaZ z;lr)RCO0|9>^SNd{b#MdS}HI!or=HE0m51~S+AaBB8n4A3!29^V3>XgjhgA52^dES zK)y0~CIJ!xNbkMO+JF3E(!r^EZu*DT4h|j5SN`EW`~m=y+pb*}zkm*1M6U+f_VcetdZTFg;i3+*&ouT@XY`bwJ7ZeMam$oU@l zW!Z&AT(dv&A2M$10Z7J8yZh^QjRE<)H4!|Dg?hQPzR`3Z3N91=s()x}^z$Vj-y0GPQY7>IRv+i2W|}uiu0cfu?S0_`hLXLPLI~r-F(}EUPU-$Z8~;%0v0f z9LdX7?yzc)ehIx2S@VB#ccE>W-~V@<)w@RcE@yKCB&y1?XS6P7(|ga1*>|~c;YL9j zE87Z9jY@M8d__*P4p|L5EtvD9MU3PnN-A|$;n9nW9`NWHD~#i4cZ;?R$5aDFAqJkn znWLka>7&IVQ1?5@1Ru|iO|q=dX> zi~iQxO;IzE=D;%Y@v}Px?sc)&?W9kWb7^(MUH0{Jq(LB-96sMg^7YgT)Krxm9!R?V zg{Rxk4{}a#LhSeP=O7M?XxTYDmW&s^t8>>@u2pH0zNy>1bqROsSsgT{y2)%^NOrWr zKRtckpDZ&lvK5Qs=6F$Pq#*_;aebXlt^93)f#?Dmc;y})==BxX!E7rS1dVC-bT&)M z1M-Qo?~82GlXz5(jwP;eP^I^?^e7F+`~ z8cIa?nhEP@|4u`_M*pv4Sd{a>z%aI7BJs3k<(9IQ31kJz8mHAkH5p|0%+=0W!U{Fn zWqo7zfc3?f*6*W53GqDM{c!s>KU%J7hA|`Vjl2f5&`n>3u33KPzRb|_uNqycbXL*Y zWI3u9Ze6CvI(5*Zt#`ouaX1YBC*d81_jdoST07>>e;xnP-j;e^0lmJh>8jYbj?R}V zw4heL*+&g($#PoBvcBKkAT;cZn*_zRUSBWwf#UIzjBTID(*o#k^6_i5{8NZrpSFSAawai_n2_`}d;U%pe zRK=h5(o07E25-j-jiefXmuk11-~LgmEgb>n0FtTwPfaV$B*^?zWvCqY*7+ziDPqmQ z0RdLjP(Kj{>@)!>a*{nm<5@^@at&cNlNjtSCf>{aNXOi^xGV7H6yy;X4089;Av7bA zH-9Pf58s{^&-Ah8o|PD=A&EdT2Ig`Yz72{nNUJp|iYZ=j|2DLiEg1^2FZgffivkJ% zly6bGSF-M6|KM*^#~5p`U&J+_03bF=Eac}_PGTrIHVEA)9x5Y$LWddw%m#{I<& z)d~ZpdnJN|_(1i6^l;FOl_qBb|MwXT;CJ3}1p6Yv?(4G`af9t&^?h7z49(dk0*~ca z9;mZZ&i=m;S8{o7OXRnccVRpIBoK_GCQ{FMO2} zd~{x1WN(j6zD)GP${;};8alw+Vs4%UN+-T`IRJkZV|n#l2SPjll35Z3WtOJu&ISK; zC4SD{4@oAgu^(Shbsjv8r@~7;v!-G|)GfR(O4cK6I*FYr?KJ5l6cEB@HS!()j9%N8 zsj~JC3%wMw3sF}w=95;8=|*;59l6U|cqvVIeqNoRqH=qYh?k}Kl%xNlJyLyzsdvqJ zaqm7nNdQF-)c}|vEZAQn--Jgt!D5Ir%(vV!Bk7o|iwm@IGhILbC8$w<>4-#@a`;E@ zacIDZchgj9D1E(Eyk0cCEVH$4+xzQ>zlN3U|C(Hy`3pwKP1 za&G)b(BxYnmWBf|8o4JnKB#`VoZW=*};z@g>@DMeR!W2^9suLXJ+W1J#79>GSV}1{61KBfG(&!V)c`W<3g-Dx2Hvm zo>GHCRfedP)4QsQF~kPE`)z}Mdfx6|F3qY%B!Ph8ZjD(YGCUOJ{T<5RjmQ><|GyFG zDgURM1?L?t8LcYI5wa=KT0JZHHAsy~g`fVAZ2YOd00xw|PHDGk3o9g;77Sha z#6b8JciLj8_(b5BQ~k3j5i*AqM2K@-2HS5#tz)^71vT@ZL#IZd%>2Yx0Ji%V&n2DW zjVuuT(Kh`bq3((K;D7Hz5{S^;nuHnXu<@j6=u~V&6x~8K9R5g03jqK~$eRr3kNptm ztO>keGSUUjsag$1frUDBl@<3)Eypm^F<;hl1kAa8C`^(I&0DUi^`VuCt4w z$s9O?J2$5dpum%0C5;#d{$(vNd2I8zJ(NW?Qe(uxZUQ=>;ieK(LBU&~Y89c{FW(+3 zbv1EJO7ySnNWPBf+9J@Vj(flC?N6gwK@tclnJRT9;=lWU6b{-LNMs#fTl`ft98nX% z8LnT~wp4#DN$q%1s4V{O%V$;<3C)p4?z7{C zl>Pq!!l5=6%Ek|}fB{4}p&|k#$?s%|3Q$p;m_II?L;WYUv^s5i#ncW1TUFtwItyQb zh+J&})ZX4V$A(6|1O|!&%SwowQh#ehazo7SOF@;PWn0wo@EkHu5)qZ zYW3d<1Bp6VZh~6B5oMHcen}?F&ruF1RDb1d1}P2OH+1ci4tgy7#h}SS@LUnj^^!{c z4A`$n^DbcYm0tcvNzFI>56DY_|7S2~j`W*v_H{qn3#;jb(!E3OPeq1w2vVQLHF$&p zk3fLr=2B;Jq{tCr_}ZWksjn}P0_VFXS85y(1Co*mw}GEP7c=hy$jF8h~FH#Eg-w;p--u)YqF?YYM_{>g#Gu6%Q9d<6rkllWAsiK`8t5mz@kRv5;)1(T`6(!#I`L zDUR9x<($R!e@@|?BV3tekV0k#Xm2i>zrp56QVlx@APWJ0IS5e=|B(f-H?o)t_E^bb z?sZmfe?N0o2!(ieyUh~vjC^qpVqFxt<2p8zNgao#oWEK!5C_0N(s1OM?-k5)jfug^ zV*Df4MUMQkYg$siD!e~au$kJj+-ErbqDR#K|1f8RI-Sb9Vyr7zvap=OgFvfxOcj<3 zFHIZ$*!)wCh06g<{Fd84NKpx@|LTR6CN zZ|JDmE~3`f9Cg;g*1b|!uihx~C-l3vd2zp1Z=8^WloIZeke2IgRciA!r@eLJe9`11 z2xJSG%S-AqP0n>KGG4wSG^oqaviaj)M0(nE>DtZAD`o~MGEQOGSzN8(n%nP*6fpep zGka~`-TcZmSm7j>pc685kEfrPhd&&6CUS&5c+v(qRTE;zE zuCI2-k?yKA9#^A~D#@F2B@dT}DkgS2Z>k0+Uha48yv}W3Zl~E~GoxE%;hOIU@V%_Y zw)WZCGtQpRM>31EZ-@>ue1dHm=7R<#l;FHtx@e_|~G^P&MLf@YZ}DyjP9R0J@)Y#QqFV62qFu zRcp7~!fTDY#nkE8N9?uh?T)+e!40p+ms;4a9#7NH3!f?6`DI()UU$|Sv{QJn_f&xPuTKtEssBrX}u-9O?T(qJio5KVkOzS>bAPqUaw_pAvFg-zT9eA zUFmV(%w>l6FA-L{M|bXiab5$!9rd-nHxst&6`!Zmbt3b!y4v8c zE~i^<_8q7yl;_stYxmu*O5WRN)Oi@rnYkN#U_9Zye;G@!tdQ1Q^v*X}a|%~GyI*T_ zzh0(%>v$;G2mS6oqqo7@S*P>s3ux^&zOU#dbY5oWOe}W#n!L8Sb+)@-U&XqF>n)#i z);$#T>}Tmbu8#1mBStk~eShwJkZwfsmH~b0>G;{@ZX|E?4H*@GNge~UWLg{(8X_|{ zqi9Fi_w93R-U0tP(&wPsHL~M<0U$vCBJ&F-^&Q-A#rq+${M44I2 znNO(5$MtC1&$H#)y)>s?48tz18 z?uJY~=Tany;q-DOz;P#tnaNM*p;==?=}UB+y-JYaA}4GtU2v%>UG;gpup`A@`S`_z zuj-QUpmup}qRRW+jK9^~z-w>@riG*3dx6&`-9Kr8xB5g+O?7(fSL-_Qdp~gwZ?Mmw z%LY&M^rB!K)M5xfM^z?E6h_PCN|1cceHU+UwVvd-%X!>}w+9emJ9c;*agI4ywU8LL zW3C{t)k#+`V{2p(i$hf8x}`jFe5k0Jh6HfLo*CO;zj;_iZ@7J?eCV?Fp#9{AU;3=^ zae8G}4gd&`&#&HJkPdBf>1_%%D4k=TO|x8&8zbDo%o=6WDzka&{0z@Dy3Wqd8u)v3hGiL@&vObJaMKZ~3>87)q2Q;C{>+ zD#93|Qm`mj_fQLE={O@~KtRNlMdQyWube;*ZQYe(br^uGJ)W4~0INw!q*RNiG;f|; ztRUA)=4BSl$>=aF(GJ|lbX$;wtuSvztOXZ4tyGe?wey+Ou-fS38>V$d zfkjLI?`=a(aulo(Gfc|or1s#)5lxt~Mh9cc z?ZUm206G>%6d4K0UpAe~$)zPE-a8#O!-R<}eHmWi>~|oF zEf43qcaAlQ?~d)MwS*0=MpfQ!U^;KTbd!Jc{d;sMQif%Y;+Nh;*>P=lzq?w-bx1afoKE0wFsZ&R9 zT0os>51xWdFX2pu}&c&6+wA(H$L*SSR07?5OKt0|A{&12JB($z7={zyF;U82|KMFgUMk$DnPp8 z!xIfks;4e3e)PwxT6f#I?UQfq`f#%nq=x``hBJwE<}uKGDz~;$!LS4h{8hXp)> z(19pWWM5wVTk@qT+YUJ$dI_RPSh~4JJvR$#51{?ctPZ6D>e(}LI0Oke%ael=xG}K+ z-Ou%#qXH-Ze**h#4nqguz()7}`ykr8k>uL3Hv+>x%h(E7aA@7eWTfP#LHFZm;dSgV zF?IYO>g7rJ>$N329iC5p7Jq%<<*1qjO)$nf9 z9V3h0jqBTFnoB@s7R!wC8B{5q4Hmuk=6uVe_5&ASczmKyHI*#x$;~^tYcIwD;F~pb z^HJ0+RRztNpoD`6zy+KsoN{+gXdHSkZ$c3Q_zv2bgxoShJVXODD^kdVgj<>wABioS&Nc@Xq$T&qiY&KNA&Qtli_sQUl2A529uO z-|sejJ9{0>G;|88#}=$JJ5IdD7Pi}DktfGZm-&uueKW$m%geNAx3QPPMZwRcy=bUP zB{mOgkt*+%5*#|N8&@9fCZ;zNN=E0KlgYvKzn6HB<+n}GG&*c_5IH-yzYi%01D0R+ zcFC|nfA@f&F?Ai?W>9d+s8e=Y4Pc!mmh!`a*LVacIH_`WeH3y)AWf)lo^TcrLUwXX zgX37F9ZmoB=$0+3wH=adr-m$e)h{bVC+2!qJwm|t8T7-N+N^WY#vhaA^sM|C3_6M2 z+9P4AXLXbDiCtfsPC<;eIk|#=UDm|ZU~)b zbm=b++&F-0tb3DMM@4yGw)-iim36Va)UTu0Cx@@-{x)B&qpPW4 zXo{xe)r|n*X&54i_Dx^4M3bY20@K4s@r&hZI#S2^ee6ES;WVn1d%(u0j>E%)(1git ztJB#J_}oUANq&uAySx`iR1D}rEP9`k>5Q@McijxDDQx5W%T zdz!>%UfWKPWa5oA$L;ZMi}W@4GOgK=Evw9wb9u$KWQtzhGOb3^PW|2?X0xD3X9D~_N7(^cuV3&Ekq{)2h z8qQ1i>imb8*Ko6DP{r37cyh6rA@!&p+sNp9x&0KFy8E4tLntkI?5bU9cuP%@se|N^ zlm0=1ZVf*(qu5+ExZacLq!Cg^rpzF38&5B7O25w`JB`;*$v|H~9N#4vq}tp%4_Po+ z!#!(&Nmt_RV4}~`19)r`N5fI?dx9zSqQs<5ooo-kQVZVg#hS9)3_c!Qc2#YsvZ1@9 z>7n&mnQ8uuI)V#SmdsXVGCWw$XtzbbvV*epOTh``D3ba;yuPBf1R3!#Fk$IFm9;Cd zK}1d&8--@;7hMd$)-!hQ$f7Q1t>kSDhpWD%Bof-Kf>96pUEQPExH1<%udlTkC_PE4 z66&rK4KjuJp)V;dH7saNh8CRWu{xFoYFC7#E=R+m7ETRqz%qMs%8||~(LPSz$ThNz zDqq033%yo8>roD6Ts~ELRy|Y)0I2HAx9ar^NHmZo1~6LinbCg2EJak~kDH04XjN zm2b~8*_^>L|I)2xZ}W?p*V?nB4U4i8DJAuqO&LA3r`>RLdHBjACjE*}#i4m(tv;s; znRG}UmMas>h&dwHJT-aqD7Gy4RRe#bB&N4E+Pdk^(1IX{H z*Qw1hJMa&mudQ88e=A_?V-iq4XJ9#AT#9vVTjOT_Nf+1Xk)%M=C{I!}4z;cCtIzW3 zv;7yu4eh*|>Uv!b7Iq2YnWNkRZOCma;h+bw5K)L8lQDTE6;k^6qLaY9AKCEzinyU+ z3XayNkc{~L9fy~%+R`0gy~iu5N74EmHi02S)AFUJuIAT$%LWJl|3?q=;@X5mHuF-8 zw28gwN5fm(97?)(&>bF?sygMfM{EnL9Tes_OE%{=y*gMG_~>4(`FZQ&k_v?>C8Cl< z7-Dvav`$u&B@dQi>OwhK936ElJwWa@{_};7F;04jyElvg0Wh#Gc5iX76HB!zcChRE z6z!+__%@nDx0Ad#b}6{v3k{US`v1z`3ze*jPaH^w=hMxk5{1OEXzeVWZtn>Ad^tFq zb%|4>^n_!DGlV@DT}Q2r+U`S`#&dI2s62}}wI@s$iS7;yQR(R*Z1HS(JSq-dY#fS} z)=q=~=9uRlR}ZiU<-ERYoS9qTHT&iFx3ca?7*XIVbDk%HMF!Nn&p8vWR;o~PVk;Q) zX1cb+$8US!od_w@nq=wdG_wZ}WviVC;? z{sa;TmFi$%05LNfwz}hQp9TZCQnqhgqSt zYXZ+_=%4qfsIMwh_?qNIq>hmW$==1;nQo8yPccPfCKe^CiUnaMZ99du4tA%*jALug z&G9OWmYvzz7g)&xc|D5z#?s_lCh4ZKU;Yt?r)s4B#NiAlk^-EfdSz*JaKVMm@(Z+@ zmyUN@Ru*X$j4zETsuJDrHp?y>n&!m}||mZSv^T{yKHa zsZrxgDw0%oMu{c1t0Is{sTjK-YRczLO_M~ueb24Lj{t~Cd+3e^j~MetCHMVq#krrE zb+~(q(Bq$g_9v)H$QJf(GJZ%xAG5&j*8Rp|YP*rUx1!(};LJptFVyK5Z~02dKhwXXh#i1Z5Q4rB-(zzDJ6yF6$x=06BdyvSOu87&={=d6i> z`_uF&w94zcU()u;bc3Hc%r3kqZkT+-zknp-ebuL0GeRIshwlWonWs)fz5GRF%IimW81 zrK{0J4mG;f>DEzyZZyW{SzE88=JHEV)ExDnuZLHpsi6xfCxugvqXb%$v+f9FNDmpC zggq2SA3k09zR~(8%Ixg~NZ1vLJ>Z@|L4NOhII577w3>kdD3X8a)Q$s1*SwN#Rv9+s^tl7a1VCSSR z5U{8%ZY`|XJ39QVn0cvKBRC&?2p(JI>)DK5@EyKU4%h8UOtgpW!iL|R_2}ybA(t5~ z0>(*|D~S5Ci+(x)LD*NTCseLgXHAC!!$o7ZY;BA=JCHEL)dd!5NIdpmp(e6_^n)6germU$IQO}+WLU}yJD zVX0$qsfNSUa4Q5}yQ(MCqJ7TEdkVT+M6#SSiJAH~auO2IOSxfdDhi4}5D%Sy6lmk{qVdwG#%kW9} zBb*l8>e}q!af5l1!`szA7}F{1Bqatx-4Amz!y4u8^~U4pBoE?SqBkiVMs0eV?ehGu z6IWysp4Z$NTFpEopHl^XT#jPaL*WjQZx5QlN97U(l8%+D(`@^7ie`QAn-*dwV6ZB2 z-USbVe5t4`rBIYi-bGD&2OSNf#vy*~aRa_%(^I$r;X>s@nMW(fOx$4>*Qlne$X%h^ zQOj^WhQ}xs-n|9!KOu9>8ibJ0$p0-MCR}%@A^tx>PIMnUA+=)jx>@@{0;%2hZ12PZ z-(mPfs^f*TgKeu+CXAvn%VMKFn6w38!V_GCHqULx z>F`16zMh_6P0eM-=_tvvU)9lF%4)VS)G7;$Hg;(L<%dBC zt;(+HuL^3+2P>whlx z`8_F6y!tt{qFB5)=~G@22s&<0JMN8wdOBd&+FM>IMFt@5v;9b3hL$=!_U^l?H=br) zF^W#EUb@X*`F2||f5LVH0Po(yt(_4aH@FO)X)wirsY?Z%$9Y z__~edt}VZ8@2=fl7IlD~xilGe*^x9jr3iGZ&I54n;wsk4Nk!gD9O6)S$M3%b7*&@9 zQH3QS5pSKsR;aPFCP@IGu=1vCLvQa-oK)2Q(Nb#Ep3R+h5+TgSPmy588n?ZbcQg*w zO1%Q)F>9Nqv_Ae_C8`lN47GP$5z>Dn`xkGwwY$yZ${%;(bJNa?n~Wkw zDtuRlF0O$uv*IoD^1}_{We$=*(pFivs35NcDmo(CXZ{(HK$i5$!uu(FNodS&nP#*a z?Z^Ooti4#jQ{O$?A;7)R17p7DO_(@z#8=Yq-DjL5Ii%uYv-DP4h^9xl98+I;ce44! zkcs`zl@C51LBD^4dZUL(BuE^K1W>p!ZN1_&(H$}Nc}~S>f3DMOyRCVZmdjGQ<8JU{ z)z!S`*R}MvxHvuS(0b_0S?U-JH&dA9lc*BTh{zjA`5{IefQ2neT9A(vEz2M6Z`dIl zJE^y;ZAWl5}RDwkL3&I{sDGY#n*BeKdD*w z#y>&AfB|z0;2-U|1|2o3xx0xk1^@%uux*^YHA7|C2&R7m9wbOYMN3!701R1oNTjgf zWq!xN?DEQm)?vk+o1GFCs|rT<_!>o+gx;(QQObXFPTOl!ZJa~u{OE~u(`cDKE6OEK zx`V+M*+(OI$8{-VkAhHP+rv`92<)~RJNoPE_nW%}94j4W>p2PZCbGfR4W zb(^mq23y&y4-NcNt=e@CvgzFq^f%r&&YR(DO}jv}qxJA>4b3rk5^aP1+2pir*p!Mv zyb9AE8RkoD=R3{)fuv2r6$)AH69P%W_4pDSFBwr$2!MC@%Hj@G1fQsFj1~5lwO34& zWhI6O=zD&;6x(^9_GW70N0B8$ZNqGW>6pJ%5hw31eqMfkO-E#q^RQjbyjQ>kJuFDX z6?VyN54FW~pQ3d$&>$9g;Dd-6fOI%J)A5TQ=!Z-KBr1J_ourbBG#KPwH`YKBiDvB# ztfo-XjnCix=jlVUCvkzZhir~UOrRfUqyZ)yhJvlPjv3!d?mqr6HD!D3e*S6sAmm>m zVL+3o=F=~WBY$N9{R$ePm0WqQOuNRAQwbyA4u63W)$~q!4NBjSRU=P$p;B|vOULlX z+2Pp4sv-kK`Cf>@Y4{|Hxjo!ALvxiS0HsIM}-d~0FS(YeHf{pYZ?Z1V8*sTY z$rM{HWW~k`dgIEj(K1OW3wEB+5&H1i)ddw-uo}jU=4>LI@v9*2tb01~^QGYvns8{; zDkf6jPwm)xDQT={Ojk|B_DLK-$I+xd#q*TtkQ+VQL+ds_`|q2iQ4vu#H&rR(HYM8d zkdsQhHGvNzx!x`yrL3Hs11f^&*kk{@sdBQrL&<=XiQoBYk++$VMQ-ND*n1-;S=TF? z7(q(u8U69GaqV&a>7t-ld}M%bXiZ^b0oXJ>|98veN+l@VbP^*`BO)q^mZrvXVa(yo zF6A)G(!B`Bjg@9v3yF7x_Fl&fz6k6=D}^ikF;`aySO@w-!q{VDJ<>N%Gd;LUvQoeY zOd2fFdG1*98BR@l+MxiNt`p%wL*#%T^D0cITSiuM-XRYD?e);m(5j?qrbxuW`qJ1S zQl!9qklCDc@}0yBm{{dYiY9|6W?86v79~$imMD4o^GQX~glATpRRxzNLO(#6>a)4A zy!OrT6_lVZx!el0*gJl;_#6viav%&v zo}YByu$~*>4cimR8$k0x;?@NJ$HFZ(-$t!A_RP^tzyI&L@31x=vIvR;3bfx*tGV)h zjd6a%P&NQm8d=-M`zaRJCABg*IERT*o$1+NpPc34{Q065jO~m}r$b933@UDxT~#`h z`+sJP)LgVvuWvJ*h=3<&s&YQ_)(3Y-o4u=UT`g&7h{ksJ;jk^52p#bBnYGgiWv;qO zpJ5l_#2)*7*p$A!B}6PVcFgzgDSNH0t4p#)3oX#X!Ak7b`c_K~n)y~0xaN2!tS?pS zQ%Q_i(X5L7OAIAAS0h7tERb*9Ojo-oT7o7}=Wm{Kh?f@pMK_o7X+B-~&YQ|E=gZ!24uPjGgxqM*R*YXk5n)HZp=>kbI#uX>H;TCk zxfj2CNyC!oTQkvXG3tzEw!)D&hzjh#s-+}oM?)V22X828N&c=Z639cNlkJ*;rYVMEVoP;$V8{_B{B#FY16IDJ($4*0 z49q=UqDhW*G#fE&xm=8^^1b`omKR*iuTH;>{7dK79hvW0N)Njaz%Xc8c7Uv49vX+t{!Lh4!qfYN%z`^Q(}*VS&v$(}fBwlqZE-CQ4`6NDG`N&PSQ!q2{uW~6V?gcD$AnDfT z8rkP;_(ocn`3xD8vp783v`1bNRg-jT%8lYwLQ3@CuoEmY-L%g}_x4K;DJmauv3}0j z*ckNUESK9vecvvDxAMRbj9p!!DOj=_-Ro$tmSI7aVvO`j9dyJ5&MTuZ9TG{z+P8B zmel)1Ot|2Q7F)eA3ZVlgm$_ z8>3`_MfuO_eCbL5L7i{P?SEY7qpyVfe<59bRE0p&Wqeq+t$@BcNpIDcKlQL^F1He- zS6iYF+%6o1{-vr9w zRBn92SyM}Sx%%l;FHNeGS?0?NhN2(1kJD6(Tj?%5W^^mWrHpH|1voT96%(AEJ>%{P zXi8g0YS!lj3o^&gaY3@Ttd%|l*XIuLo3kX?+01ieBeI*(ZzfkVPjs_u+Q_drXJ;Go zN|SneHid4UcV1jH!-sagF3*_H>879wk{fzLo23h1Ni4XIuXXAU^9i_DuZRFYML9mR zUEg`nk-u`)OYKyq8kbk@;Yv`l?y6aG+%$Hg#2t(_`rxf(IR<9k+1_CCLEFm%@>4i%KFeeQW0}hd9sAq*COsq_+^Ie^)<8 z%7Gz{D@5_8;UMwDQfa<5V83TOE18~-g^dRw5%6VP{tjBWWO>$_Z$( zJq}}DEZ>MgOTs2$rD&n?6C2UUD0dDA_AZ0oJ@W(OEP1?p`jshrTvirHI^~1 z4wUsnh|)P~0{90lI{S79!wMR1(Mn_$bW^si58Jdu2)rVRe?cbNdSlwJfn4q+f7W z9KHBal24Pz^pyN1OCtJ83i)#k-r@`v?La~!f@6=aneo&k;04tfF@3_C^ zFjzHPgS=DM1ry!i_tHx~J7W&`nb!o=XztD}VZ_K-TRhotU2OB(vY%Rg5cQ{@egi;7 zV({(?M#yf_q@#WFOPqb2+F$KuawzMVnm2Tm&)TswUHH?T&97Zi%@WnO4O}&gxl}P) zO=~K$t0zG^s>xR@Dq=c!pn+6D%cjdskB4pGP;^s&FyuAn9*oL}F2=cGkw#mb&MnbT z64{{wg%RBm=e3cVjjskQ=ts{2C4N)8x304hUYd(5i~w6)al^OuESVfjE{@T}o)hMd zv_45eunV$nT8&a;s3Q{X4U_2EIyVuSiR`SZ(vcpMM2E7PDnLd=o+-}~jjAgJ)v`H5 zoZNI*O7d!S&nawWtn@6Mm#40y$#Q8{I{kmi34%ZTmpQ@PrV#o{8|5-^K-}s;O!hbH zo%FZi@u2I|DtPFq@b-F?&S4uwP~raK+?z0r1mVu-InU{snR40WDc_WjD-cR@M=#V+ z5E!-lw_c==)`elI0i0uD%%k85vnN){Nl0&j){8|NuL}I(0*Wi^$1W}`<6$ESj={jZ z9G1z)lc&&-FJylY2Ab-Pn3dIvtmm!fJ=}0dY^y&HqZWy;I`{6k>RV7jr`&3ROSN2f z|3fMf079hAZZF3!KF@_J58Zv$uh?a=Z#7(5a=^)#J3y*s5a^PHS$D*BcYmiHUxg)d>vtL)Ml)kr7cs zOW3H2H_5jR;k>LmiV7g=9chN2ODEVmVeXE^?Wj4B_8f{Fl10n;&?HF`eJ2CkNs?$* zfEZZs3Fdo=T5=wbUG%6vG}%59Pp+Fh35VrGz&&`bl*u$ZL_0L4CnUw8>=BhbrzO_3 zx@cWfZa0d}L93#GKmOSB$*G(b2h?kW=aO|4|NLE{ZkcG+N2+1kvbEzkO2Y-+Vv&cL zna+Tu;j{4}gw(ZumYb-->opQFDGD?gl8IffRJIb#i{|Y*bcV$^{-s=Y7c}yBcdEKH zPEDF=JGMoRk<^NXJ_B9!BIS>vT{-(&hS~5vu;Oun=GikFFfz$xzmQz#==(-R!}Ztj z`6-iZFKN?X|ER7}pb)e)%S#a8JtYq4t#xZ_QGDe~xYMQVE&rtQ_(cO zkqmM$3e>iX!|cT3@!_LfdK);@iiyqZ*-8JbjWcr0yS<n8LlB2=F>)24_7ZmSP~ zkVl)o%ul2Mz}bJw-Bgec-m{Vc&eL9l8(Hp?EF*G${H$!aQiOr-0H_X=`d8O*4Y&swgjnqHaXpif@5125O8XGoHj5(?(&st$=f!YR#IHnaClF&u=0UFOtN_(~u$v7lJ<5o?0mcJ$dzW*!KvnT%@>an^|RQfc+Iiw2Es&+cqa=_b1 zHKF0=Yw6uY%qq1&-gWY=-h{f{$bh3mX4|PaC#m|9Mfz=5KZ6|V(Efu@VId5P|0RA| z6}ra5(w;S*oQFi7m)8j`SkvmJWf~s)vlv#(^vOaIX!qB@oH|@ni1y~5Gf|w9=wb`7 z)nv=YCOvy`)?uU?+NYnizdNg(*t1gGrlrn(?V6L6LqKShzYTq#{1_Z3f0u8$q#GX_ z3wpsF8tOUUHWPj~tr9KJ&kVc^{gcr`zPE^77U7N12YRgmsfayD zq5&srPQUN3pCfq`=(;5&{`Hul8}OR>rXwDw>)TV;JG`AK+nZ4aabw9kP`HwOZlLzB zvkT8*hhmTRL+@pdmswp8eTq+C3I5d)-k)V%Gd70*I#Bqh%pH8Nf(i%-Kx8HWT~VSN zWzyM3UP7|nekTwARKfqlK;fS;#3oU*mx{4wy`ga`m4fE=5E6g#sV1$_q!r7w!hKDh zp~N#sJ*;+g`-Y6d%v#H6oRtv$6JDi9bWn~;ZFA=|-k`Q1s{N5tsd>DeYV?@8#X2+g3=e$N9yk@njsF?r zDS^ZPzQ+lf@fh1>MUISX34?9-91vF;XW3U6Ehsm~60 z)Oxv%Y~|d236<}xz6U=)!WTqj`ntS%Io0dxM@Jqe)Um)(a5Hd$mC|6mE&NQfGs`?mpblR=5R0~rc!X5Vm zXc_Bs|L$+q6^5VFCU{k6X16arjvhvkAJ^X>%`@G`XgSLgf3RY}1=7=#Nq8i-%O+w& zeVOvF@LC`)H$aq$B~@9lUVce=#k-k+8~f{oz)Ta~Qf~J?Eprg^`J^8$zM#qAADRAM zK0iXHi_Crh2D~uYq9ibXZ>Lw%VM{d-QeZCgB~qrGK6yx7QIy@~#+fy7WKG{PVmjlf z`U#ILD>JQpa(1Moq6Ob<%VU%Je(L>OKowh;Y)~QA@kdCn9^pBSE(`w`^up1N_F^?P zOB>LVx_8Yo@Z6Ybg{fR^+nNcG{?7CD;aN?s|7kd|)9U5#CyugimVQj3z6o+qW(i3& zR(RHeyotRtrlAxqXF4DgzEuTP+EZW!OAv<{gJAyxG!6nY{GRv4owD51FttFts^znHw?z|6$wFx?7=H$?4t**X|8G^x zn`X3Y-RN7&Tfx|ta;UYcHdF?BrvJv$B%B^DuY{j*V&-G%f4YxL;1))dM`zxxYDHRmE}`e5^Lh zQq}l5bLUY#b#M5c&BHVP0AD)r4I%(^Q7tzkzWPKi;@i99F+vM6!8grZ*ycT^l1*LH z6Y|*mKI|E5$&%XhCgyx&9nO>5%!~+Yr@2JH{ON{K8YCW9M6v z)iugZ7a-5_LjS3rEjGzTSqBCHOrE>r=1*T4^HIi!O_-g(lPdxF-sz;U0Yd?Ek9ZVf zk14F8%g+TsQvFpscp5k3<~NzduH`-Me>!qZEXFz^yMj z%V94kO01GfOs=}m+R2jp&9~m|%7RA{LSFI?Keeq!dP7kSpFIV6oH#$kqGLpnC(C!2 zC9-W@`sR+~#+zs$4jJ-1=6-&MSo--3`kN559jsr}iX0c2U`SGMhmKs%>al7^wN{mJ zmwY&nb)6o`ChJsa<=XIv^A%?P!}&V$aDjqK_Yb+}?Ma$J2AG96EJJGt( z$V_Z*wPThJUkZasC(KdBDN`#)M*eciMMBH~@hy{rJn$T#hB#_;bQ}&kH%4sLBss;!`Os4K^`t2?VR~arTp3iB;-IS#m#uDGjn%i)674TfYD%- z)VhYF8@fuFs~%oTLH>K@Z?6^i!%l?I zUx7jITwmdB&*ZVgb9Xuqo@5>!ufb3z9kT`zlBYgkHLDv~vjMYK#TO$ek+lX5I+E>C zY|A=kFFmX@2>-v~A-+r!;{Z6IPA9MR@Q9q)0T^N_vyVtx*TzW z03#?~NRmwgiY8{)O_B=}8#qvcj$|0P{~Ll>wvz{h(>|jPF&puW2?8PDF;v@!f>Bcl zHwc2E-_}fT{ebx@Lm3?X$0I7gP|(MT?hIy7X71>k)E<-y?8AGGRd5LPUP9D_=f1eU zQIq}McOo+?Nhy!*)r@V17o{DYvx9xyCZ7%I_NAJQ9i!d4uJI}7Ed`~*WJ^RaPJ&=| z|KKFcpcMAXl9S!^&^5l=`*;4I5r!<-z08zpRBV^#3`>&01j@A3*79n-A|#Pdxs_)o z`Mu!8{_w}veNcei6}>4H%UgV9zHg2d8dZE!hgf!j)HEv(ikD7cQz}heGi8kyrn&(L zdepog`@R2v+CnHtvcQsMojga|Ab&>$;h|?;7k8c+n1(v^rU)_k+d^Zg*~M4A%E|df#Fx1|7_O z=kNSAlnS^B1b9HAREIZKvDy20MRR1%iyf2vZFi06V@+vhs2I|JP<+oIHlp*{ydQ6? zS=_)FZZ}dv^sGn!Gn)5*-xP8=`u_;tOp}DYMt(=~?4w%x-Ii&KEGWtsH?x50f7#!L z@92RW(b<0ED+~99r=!U=DEyB45yrE}1!5R9stkXWfy)}V!TjhaE#gY(J7CfKReQ}SYsAwRA ztpmc|aBBE5i8AqcT2YkzFYP&vA*y_ z5z`KOrWD9Krj-^t`u_nx0OAr;44I8vAMg)Whl#iKNbF274tC+Pd8X6cF0?B(7 z@N0LlI~`qpr_Ya|^_T|dr#~7_EBquCsz1K$u7$i_+}PoJz9bpaCT=5l{m+30v%g&i z8EjK1i*LMb|G4GEVhOjl^(2%w2GT;shgHNFYUDd2M;SpsJij|%AN2-W3w6I(Mv_!s zS{wF)q>aPzM(-z5QGKbY&>9_z+Yh-Ik>qO5bwB)jX2_+_FHFB~1^&j8|b*R>%)TBJ$I-Z)*ltNxu>3 z$INt<0zr?ad)IbdWS9#;V3Hf_;(d}%ZzCnhAYBdm>X!}L{Dh-M%WV28)3HXfV8*Pn zHT1M^8K>;#?xlkVUu(!*uxxN({vq;z_*ue+iSb4+-jEf`sjnLgY(4=%3j z{%pKAqH;j*ZuI->!_T6L$ie+u=PQi$*z+pHme=*J&_MpkXg>$9z5B@Y9*ufpI4dAc zbl7h<)*2jdL2QVAE`3S&E&Ls6D>?>CrcNqlpmrYf0XvRO#*VaF9*>=^b$K&Lbp@2b z!4HN~g^T71%x*2QJkMo&tS>dJoIYC%?Hl*r{}rHXmy)>-hQMMMijc+4}sO8qJ^znJ6d8%~G(iqZ}K8Kt`fjY0cMW^o{zyafpS z%F`*e)<)zYdRr5tE{@ED0Td~tf`z2*TY9|my|H?R&r{+5Rze2F@Ii%TPz_rA@;w3P zpUFA%&co2U@V_HOiEsZK=PuKFZP-4fuy(r|ZPCF@)@e&Kmw|peX32?TfvsD=w}886 zKRCGO7x#`(?iGQYpuo~fr*a{E?3Jr$ z{@8kyJ;1wc?BpT8R<#^JXrhP-2f+!F@vCm1^J-@A8~cz20N&GH_q}@!m@{vt!2SgU zF1*n7D(9RAHk-E28;4oRdWIE>jIx;?Rng;?{Ast$f`glkG+&)1KQ`^BwY@k6zie0R zbr*DsL5!IA|84;w9t#TQl&YESV0VvyPjJ+X=lbC{6Ot9?vAbgB z4^s=%V80Y-=~=#bnVeY$*~M~eatF(0aHvnE{%-ixZD1Jy6Zmn&c()`wck(SBJ{H9C52xX1KtPhoIR_RqN^Vf?L_a$2G!UW}M#* zm;d+TrSmYvK`N7`ifp%t&Z1+ z_``kAMece-lk0tNXWYbIu8JyOu7!_bU5;0y`Jcz=AzrV4tadCuT<|08)aJFa?k(s& zwzY{NPTSfvKlMmoV4Su;u-66C`{6!rgugaAGy`2bcBf{BHgioZPWZpb&e{5$cgyiV zAISMV9L$~KKQEQjw^QEjyma+ryx#X*t@XV&-rBvK!Up)=O=bH&p5$~qoaln)zI5Cf zo>7?Ty_~Goz8V|XU4}tV+WC1t6m)o0UGEKPy%s*}6)AOi-p-V}yk44R%idPdC$0H8 z;&4+SC$M5hO(!SE<+n=e6-mMe{;&`)SF(&wlc|%`fR<2Uv7qjr;6BfAO=#d?v^l9~ zPedD)z`JO_zBGdqJ4{rJTh=yd{drtA6pR65W?_3G`_|?|WqAxTpu0ECW-K)LMEDEe z7OF%)isMBzR16r-6h6V0geR}-Of|fBCyz)5oVcBg_j+p)r3(lv+WJ7dDwi8YH zgYIQbCFU3Ju|>aqq(b{-EG3ht$$0)l(|PFlSzKFo$Z1hwRdIHfI(&!1kslF0G0AZS z!iH6b8T;8mPkOHt4p7bB@E`VK>T-G)58)Rxu-OoS2BBf0Ci4o(JUi#LN@q2{kAm^b z-BI}82MyF=scjB~#;+^iq(+oW>mF&_zX&~jRz0d9ByiBAi?n=sy*c4;45gMsx@%CS zav?--%++ln{sO98wuH1D~A6>pacqk`*K{W&Jf;n zM5yo{7RJ~X?~z=c6rWLwc<%FXV90`Snssg&9wmPaRa7^27IWAV;}kySGQl0jTk0zK zMiW2&g51eUzqTS2uy%KjyOCm za(Ev-t#Z410`a`tPUfn>8I@9#hzu-c8lwtEs3>SMY!{PHqVC6VN}_YOFG-k|rD~yI zA5tp{4PB~-Fh<)AY&7aD83E(NqIk~|gaXy{FL)LR=o8;V*`M-iwi6*p(7qji8@t;% zyb(5Io3>uuM?N*LN0)Kl+~0VpzhRrB!?R%3;;zvNM8}T80UL;~)51zkL7|S^kr{M% zBV?Padsw&STGp;y@+SQ86weMCx5#A^?X7Iam&J^cE?z`&VP4>{pgjjJ1Gyv@M5?%N zE?t;Vnk2VeN}EIl13GGCN|S#qiHREdYNCkTlrX%QSWqz3TThxpCeZ(##fn^c2LI9% zK||8FOz}hN0R%Ji(WP#R!RWqvn7%S*lErB(%s=5B_X(p@MB=POe?t&h`uFbq{skc^v% zj|dl~U(I!+N}$S*iHM9ABMhY%H3w#(C?+6@GUZv>8|&K}W*U39+O1?u18C!=YfORq zOE0EtcYKw-o5>=RpRvdvOgT-vPUl~v3`+}0v&o(Vuij6NIRZ*%!aCV?Zj{#F5``ji z9UUup!q+g!IV2%XW)pUi#2CaItsy=&mMP*}zIbSHNc2P6M9pm+DC!`EF0(keuVQ55$toOa_9?cQhJHXLOUC#Ls{8Y#Jr+OzV?ZA{ zgG*aUFI}yeYWvwjv`ss%Dc3?}K{sjPR{zi?f!+<{;!t<(k!J{&wYl$K-hCt^Lxo&S zn@KyP=%2q)rb9R7;7-jE(@Bz$|;h z$<1+zn@#g8xR=lMu=%b(d;=S6=3Z10;VIZikd11%ECfKiHm|)C54Sm(P9D27;ZtwS z3A|dtxD}O+QmZ*>WgGUL;|DvDfy>BivI`*fxULb8dl$2)LuyUSr%(AE_ZW1iEmdGh z)V_vgJ_E|t*0Q0x&EPY@i&|mgd& zw07YZ;Dh*Gi-yevSGryHi)>LVL(T7%+Mwnb(3;JN-+M?fGm(Go=;r#hI@92fm79CN zM%l7#yYGf$(65eof~H5lY4EMUs{XG^JRO|+==l;)rFmU4co$^4>?i^Y4_vVs6 zeiP^es+~PnRU_DE&Te#;u$)^({6Tqa9f#qFpO z6Fk2ZJNj%p7p~|Bz7{Uv+2s9Z@auKWmGH-haL}lk(XRFZlPBiv#m_r1$!D+CqH4z9 z+Ps7uHX^!|D~!T0SIC{5^mjV#TqjatTU-~LG1TUleA@F`@FnWi)4h-K@2lS5M73)i z6V3I=rj_2l6^8M=pzc@JT4|qZuZk|xrBHYhrp~P4k`4DC^mcs_T$`St!aI$GMx#E7 zycMpLZ9?K7E~@|9LWgG0qqZq4fyVw)MSPNHI`s0*Q7rt{Ir!2~aV1#ua~Jb+*HNxh z*!L2u%M;1+jKV}ur6$vSc3dp}g?PNES1~O1lGCdeo=uktn5Pm6FS% ztjwsoHb>RwneLEN-9%Fg_}gdUTeY+GrrVB(8}yovsH-bljT|Z(`Io)+tv+78mFowY zK5xsRH(d{Sk;i47`_GwU*Ua_D?lHfo>Y~DBT*roW+0{<-L2W5#)@3f)|5PUYX}6RE z^|E|$lIfW)2*czchcS(N?V5ScQU?JCtHYf?JVNpb$JbMT=8h1DkvA?riUS?>q1AJ3F(P{F!9t zmziJA^L@_A=X|W-(p7&$gFia_szR}n&DM9Koj1xXaU6x=yEP68oH@~si>#e8q2Y7p z??d~89nbm%`7Qnk+6|IH!jtqSi%DCbh|H}BmB{bcx$uvRr-+cY>%r0rAIVm~h1dtJ zcTI~mb$<5Ps@>3zfyLIe49OGz%nH#S82>9)Fr8LfCQy3$0I!)!cTaNTrY`0-%Wzfy zn%Y2i2%wHrtUAYf^hNAzg=)AW0igXhZCLKNLpVp&z!cNG&tnEo{*Q%Mj5B_6?AO*i zSXg@*k+beikYd&gogn1~Qh;f=ruPjpK9ft|IN-gSlRocc03TDlvVsL)ff3yA(FoTs za6k#ke%_z|$dx@s(C`^BIoe4{1{fF@w4v*S9jFC0j8c9A*ZXqSd6J;gPSMwhD4q*# zj}tMr5hb;to+V%Np^w9-_Xrk*krRGdD_xS@W93+uL<5Nh%dSqjZ}Tbg$3pmHt=QxO ziyJDcZv-Z`sPT}kTS&eXPKkYZzwUu}gJ9NlmAYkNCi7QnPwXjc%y%qAV3@JxOsih= zyEokyDat{zkAj%`F~2cU4ho4SI;Rz+2tKec){WVbq&xBGP5^E74FUktp{w=kAvrVd zvpOk^%Otx*2hMEVNL&0LjSu*1j^aIHkKNOKE2JfTh+MLc{W9Y#ZkkxXRO>@xvV2je z5?OAX^h@U+K9X>&XT-p+T{n0YG7bUjuoHP=rOn1FRPmOvrpLVf-m&EnvbOg73f0D!S~B~bBE%A!Sqe$3QQ z@sqZ^NqhEQ8zrfSXg;V;S9h>K^_F;ma6msZVPyvPI?>hR&PH)LDa^q~tY3fLv7B5v z-m`Jk6`;P?OD1|%HWa%t){$v?lm^BCw4T=pUsD`}(R1siwz(f2Cf_Xq-MR1q4^sUc zM&DsF*)K~%vVT|x-(tW3DcG*);tzk*`evHk#Mp=VDx4d1$$G%|7B3K{v}n%Og^4cx z*FpjUb{TiY=bmA;R5=rEbT6!~eRpw{K^>g7f8gV?kz(sE^oByP7TC^ZAh3L8y zetx&1i2}?!C=kip)ao`#Pf2Nds&m!@#5UNn1ECk%nsBjI-oZAv%X$6KQ*;EQXViLc zogV|FT8xiv53~WoNdbB?^02QPM%MYCHLOZy0)626eF_fUvgW$# zBG%)t%lfy=e|G%#+Yx7CK2KLJrETcS^?SW98qX1St|T=!*rTdDDy|K=ZN| z$$@Ue%-Ej@({gco4Bt|=&`G(Fc?UF!4H;pLOn&W2$z?*cTE0b2mo9 zV%Fja<6VFH9AQ-b>twg=-hfYy!GVrC;m3jAUl=!kwxE-KX_MAOve_O2q;uhg2RjKd z7E^CFPJ!O41x_V~PiLTYMQ^IZ&@(R&lN{=^2R>AYk}%P}@^6I=en=l)TUkCXb#>;Y zkg@%oR|89SaKzb)D#K!c6%!u&W@*fZqnM^u#}zsj2J9mzru;6Cyu==d|54t*{l2B; z*OLC%%ACjEBW}|Cdf#~hy+)h7eziYYEwgL?kNsqSEaCp01^)WRe+mz&PVQ?LelZzj zV)A+V;1AO~LUs6i^=JZwt5n0rO#ctVjKRECMEMJjX7}r}MF@&Z zLL=^a39aD{KY?AT)GFyc#+(FW9_%KkVxjU@(Y39Nk5`WRi@KTQirUXM=EL2gY|(b+ ztG3c%GAhTt80aTS{=9~J783lO0|;(0H#6i5!_y@^-zJ2YJCd=N+#xac7J#AkOY&2y zOxQ!HL)=BoW;o04)Zt-bhyU<8V+v>Xp9Ig*>J^gnf!BRn()T!K5 zWu6qU!CO{gFS%N)OGVf%)=8cwoO#UkU@hN}sBU{0cqFVWPgVesoEMe217Rt&n#{#<<4)D^hqo@gupuDPownU}6_Da#?Pz zkS$%r3LL`^Pt$hOs>MnM~7HSbACARycD zoLV0!WnjXFJ%=u9li%Vt%>+!Rgd7Vn;5as%g^kH{xugZ`5sSI?z`NE!A~K+FCw$QH z!&J>EA?;Hxy9VjFOcVX>g}fRypf%=%sTeAMPUzJq z)BO>8>UnaM|G+yvEMrJ!dH$_q;;5aE#AiGvyn)*@K?YFb4loXhW5=;$xPzZkLGS2G z@k5(&H-?_O12T#KE{QmA@RR}oq&7;j&$NH15}JV~rW5i?((Zqp4W4kJVy#1cXDQ*+dbw%P7+N}8RAHDY0+$+O1deK*oAv)9moIls-DjE z5L%E#Wduk^{l9|9PFhL5WY$*T%w-rQXB-<++u&vC_z1D6WvR33>?fn$mi+TtGqiCK ztiK|u-qTy1yhJukvKO@+m%XCLKgWyyY&ln)yxIZmnv4}oP2UNMyV2UOG3g3x6QsQ)i=LI5(cE=y0^X?sB8>bf@X&wQ!0B>SoWKX<<pXbMn-rw(z72xrZ4n8BUgcb$O#sy-_e&4Ad%`(Ek`lf@_mHLD*XR#MzqCylTE+=J3OHMZ7&n~l z_0&oEC7H>o@9qPSmun_?|IvK2|cAXH}Y&-k0*f?&^7qEJvO9g(+nDFZD{;;MmlMO<4(PV(aRpc!BI! z1UEFlK>0=Uk5#vZOvLs)iMbpHvFi4LpB{aT!GeSbhA;myfku$=cGeWi! zk>F;G++!q-&B_%Z+ZA~x)T~}cj7e~pkUN*`R81@heI5P2|1JvAHn~Iyfp}TKc!BQk zCqRN(u7)L1q2?K8kpnb{i#*!@Mj^b>URyueNCtP#%gFXkwI$7Qq*%9*bM zH%UU=BM6Au;*?nzMhY#QD$=3Of=}>|C)AB~iwD~p)Junpr`n4Taf#6P;rY$;uG0RH z5>U=Wy;21+Cg2zT+22gCf4k{}>Q$hdzbk7XFIq&FLC!t9gh#G#57Ghvw!afIwRi~1 zza9KkSy(QpxYii3POjIMSD7Iw($aR=5b&jz?yf85JwRaKo1kh*O_#H1*fdU1`p4>8 zHyWaJJnSncanjFOhI1`iU@gUGEV~iBCgJ`K7hqerl}UfWoj0bt;$19ef>Q z9Nx8-2opE=X*+9-%0yVJjLYQ?yJEC|QZXq24Vfz|UK!^whfZ(mm;;mxON#X}whuz8 z!FqWlc|99@Y~8{RtBUzCfjE34@K zgad|tibnS#j;t3Qa!ZK*9q-KwVX#cliy21x@swDFwMI>;Ni67zr&>Rc>L!8?CVz7_ z1w>bPcwK|%hGNOobV?cGGiUq@wUuGz<*H#Nm;IM}#V0K~QT7Eg#`bfD%(0n1oC%qu z9Jza@m%VYa9CXpWNv`7u;f9D`A!?+Osz!z5QF4NQHQ6r^b9>@%A{OrV&ILFJliyoBaV27zz&UcVWj^6`;h05A8y(ZH7 zboNJE({VA-z*MeYQBk^}^-yePjRwIRY1gd`t^H;`^9UdA>y{_F@oA4>nA%;7c|O12 zGLG7`=zZjxiuI=cn^IAkXSFGSN5f|j>nS<%u007>KF2ccRV?)yAFZ9lH_l+wP@5sg zJpPSZ{Z#$s9CCcO!vQXDVbWxWnvm+*PQN4!03}u05+5KXTxs6C$%)L6c5(lcFPe{} z|LFF-P7Wr)w3I(vpaldX7I2MppQMH_pyP?nz;|Qon8_nC9vAGd#oBa{RI)*t@>r=T zqF*-4#pP1tDvA#75H1x5IHMJiwLNzT{pqFoJ4sZhWATRsE>AoBH_ zzz{-6tmrBRwZ~R#pnRY|qNa#;G}~uL(r9_vgYe6UknsOjGLxry21NtDr#h!i=zlmR z1l11mwuEXNNMgSO6&Ltt7CygLOo)5kj*1Xww-GpfYY#X7shW(^7I~()^p?oiSAaDY z3*ab_n#4wyczbLJ)3tWWT8d7In8defD&WlrVHnppmy71YU-iv8ECb`;A*Z|QBCw&-Dz`S`koQ}Wf1q#r3x9n_xN*(_8O1*14;JF#Z)HHAov`Ej>AeoL~&?O7+EYBIk~m@4Kteho(T3xoine^EnYl_Gxr>u{T}&j+jO^AQOb zU;4OuBwa=vpNgDBxx^0RFmSth3iFO%?!0ZYo!7Oe?|XNkYs-0x1P#_iM*M5E8cbWv z{wJNBovWsv-jHnunLDcTe*;#TM1L_n{$c;GV1;hswYK=R?jZNv`bIVrppjqjcrv7R zQ9g4MH?6LYGaEdEw0qmVY`{8LsnKh2-=ohKo=vR8G$g&cVBVcd7+2aB^?+V`A;0fb zFZ2BhQ-s8}0-fsMNqY~jE`tU+Rb5+s20Qk;LkYWAF#r9?C%%mtG^}m=lEWvZ!~4U8 zX$eV9jh+rc*mG^K+>PGdwUn*GNx?fT-=vSk7_czvxKVD|k(GgbC~37VaBdapKcr>;8=6rtl7DiO4$V;+I1Cj`9puqj1$LnQ!b2H23`;g~ytI&5w2h$U!y2 z@ecj#qbD3byQj$`b(xSqi=k4lWUUc1M0gM(k3LX$*gdCja%i`AZioON^Tb#&HsHgn z9^9(M5PP|pdBVRFNPy1gZzFBHQAe+V-3#7uR;bjIUk6HbH1~OoXJcXg?x0K>l~g!IBUHKD1Kf28#&nY zxYtElmzTc859r)($T)juPgszJ47WkF$TY_1dBfMrF&q1_=1rT zAXDH>NVjnyuL-ady0T_qv8g#|8hsxUb}UXkqyKjFQao$R#&Kq!ft45oaEFajWQ&n3 zY{9nJpZIIBn1guTVtcW4`$FyWdshwPbK=KBA*7Z|ncN>lH+RIA?ewUs+P0NcT0|6& zq1|}OuPn@N19tC4Qz*lRQuL0hscH{upOTTzn$+kDUR^i*L@uNp>mYiP_b!J!PcgW3 zKH^JO+8?; zWiKXI7;4}VGq3m41kCUnT0EOu7(zPm{$u2q19i+mvy@ilitO&BxU(i1AOU>5qzjOw z0@A7!n_9)US@=|2Y5=DM*jnesTr&}W^>k^4`oTSKd6&%5ECWPHp3dJ>i6s_tp!c({ zv-@_t;4BS(m!R2;+f{3GNmK2p1QY7Y4rnJSIJo{z6lz&YujQd#2hWT~8FxOLfpJr3 z{mR>2J9_YSxVz7zSY2wj)BUyjKbfikOa|`xEs60~^oUiN_6J~@Z^_EA7Ff>NyRWcO z!uZiLi}m(N&>6LtcNg5rMkXh)VwLJuo9SWEuDKyONo^K^QvS&Bdlh!jp;mQF){NkS^`nf40grM@FnH3=@V(7%WX2b+ohv^x#hvx_v^=!SKgaq3qc9g%lez zo-S>mhTZ*nlPm~pt%}4;SPaU>l9%5v=NLp$PGQtqz9E)gD=^zK+8{B$vL{!?QA#qYQ_CG;Dv<%WMvvZBz} z;EeWFqukQsS_v;Mk=(*fTEND;)6FfxN4HWT#}nUE2~}c4&tVUsLfVni#WAY2lZI4AVixqnw4c}`p zeM+N`DdI0I>Ez`OFfgnkkY>R4G<3{v2 ze}JT$FTLTNJ;)XAcoFz0ALIL$ty+SCUD85a7x6E>Hqi(90hG#3qZ(P2O`eoaDNk1$ z4SoO{p5_t(0AB$?esB?FmKPcI=>yBO^cSOBzZH60p-G~#kHLWMrgSW#%X^8H@njSq zQ_2R7SNQ;e+Vxv?i_ALX7RybzRDgZL=Q(75!(PhZN*i~YmE`wcVOw{{VYK~;=rB~2 zoyU5#A(ve8gg8!W>Pt44!rw=Dl6T{2+|_wsCS7u zlkRqZ@^f!aF4D%3?=ai4V!x*RWxZO{3zX(dExVaba)jsVDUYw$_k}6xbsY4v@FdOX zoD|l-^!x@n1P(RJ7qTC@gWeq-{13YK&r|z*qG#)C@3h{aoP4!%E;d?3djxqBOx47!U*$!%5-p7j`@>bkb#2!osCs(8FBn<@VY6 zsB>H2WN7})QS!NQ>*AS9TP)`?7jb*4zhKnUpm3~RcvHqW^b-lC=C9HkVfjqC0DbQ= z)ulv2O0_tp`a&|-vdCj{FWsc{B+3@^mSmk6cB8Q&I9t9)hUrmGAPR*FmupgYt65{q zhZA=K1In-qEALk9tRI`9p-KtqO6R`s`^kq|JEvg#j0}DW#!tOVPuI(d{T?;4Mb?ze zFr1+>e2|4|wqZ=8pu9kl1HRVu&fJ*~awa^>lDO5e%c^(L?P6Tu4JHbL5Hu!XzPV5n zh71xgs9%#sdJl_;hh-Y>auH@I^>{=Jj$ zff)^~w%?kq#2UiYUYc}+vtZ5Ufflyz)mEiCEUXYE9VoNNIyAaoO+ps^3|d`4|9fSj z#LIBwZhsctW~;oUH^uZipQC8>OQUV9EJI3y_jg@mNCRxNlHz#h2K|dII;=Qd&}F3W z-liHVTXE?LYU}HaIB1(ep9y%KtRbFelukPFk!Dmiq#Wxj86 zZGzjHH3wrx0B7hkG2S=p0MG+a%>;RVvA+gbt8bLDxsWeBoJmyY>f9|Ue>2l(hsuZY zxUuWb^P;>^cr~$XHF{V~A9B5F$ntYoFD8Dg{$aoAlz;HFWo5wkj)gRtP_0TPwrO1r zqcY3z&c|h1eaoQ^kmP9F_>~X&(GFDKttI21Dem!frJs8Gg?ymR8y30MYF8{+m|C8- zBsGdZspvY&f3H|DyX6q%qdZu`Ifc}YRKZ|GH&1&vfmj|Cm?@ns*{^Zg&z5ZtxEq-u zk7V67D8JmPemOehdq)8mp3N9@8bcX^kIUSV%^oi<5L|(7MM-*yT0R9>ZnpLXbf4W` zWCzMwCV%5sNj09aZLm%iEqeU^iYDufzu{8kjx<_le?ec`gE&Hpqr`&^7`jfOa0 zMD!7eG&HWO=;0yu>Q>7zH|6fjSnLUF4u zPNYV(HlXZVi3)A7|5+o&y_C2pN~+97eHNPG z_x3s%m)78^FB*RTciz{+WMpJ9d`^`fGI9=ldhI>1q(#51z%z-SU&%=J=IWiHR+s(c zABUr)ai&2}G5a#(0@u#P6$mI!>!$foY6VwdLFq`t7T4%E@uA_rbX6OfxYH#e@96=n zge>yjlmQ#*`5tk3b!&J`h~6CHoAQTtCPmFrJPBHK z$-+Xm!j_rjyPTOWs(-%66JmvJm9SLI-+XB2RWmLor`juJcEM!b-NP(i{meP1l5S;p zwo_wEAKNzmjFLvak?oDRpC4_@$g)UfZ9{_&3En9>IZiVItLM^!L8mX}u0sv#Mi^;p zm}BibhTtt&78Konj=PUo-MhwB7cS~>B~|4A;$9vbou-T^fkw0gBI4wzmbzdy&&+nVl)yb~*(3ag^>i zPAxJ~zzV#|xa%GWMVCe!-Aro7tHudPq)FCu*qLI@&z1j{C6h2f^oxb z4{~(8ZNNS;+rawj%e&}gbeMBl)4tvVt~IrAV5uEjEN_PEfZK3+Gus$Nr@f3*Mo5v_k{liC3@SLB0>4L&lGM zN^wk^eJo=RaEUYeW8lob$;G4H*7UKAEZH>jZ-X90!>SlM&)XKerUN?k&ySY zIB1gU719CajN)NwF96L11ROsSO`7hC!1-24i{0Vmy-Z3u@{G5=(SBz@Wsc~D`Vta~ zPOFC>&8vr81Q>ie1frSvS{9BTaUvD;n)Fvhu2{iq{_)E2R8Op}eeiibML1JqLwDeE zx=+p`OH6}9od6IUIqzTBLwnr^euJoi)Xcu?Z#NJ{<(hVvxlIkFdue_Sw~i9$p}yp;}|R+LyW92YH3ZnS$?6_?a4UFIQ;U?jmNj za;?I{e@z|w_K7Y}V7WBOjzneCwyB!H5To9nVBV^}GQ8k&?7bDqIw#qFo2T>>G0#&c zhMvl#!D?w?*AW^X!@E}v-KrJ2%lzxaf$uKg)8F{eYzCiwdOcchWEIf+BkB`sQ7`U< ze5e}UsjuOFcrS^)e>Tysb5kH0V||rtsh$$>B6%juV5ou5`LN#T)PZI-UFq~xw1k?1 zXzosPUoMKXq;JeU!br#R7rNO8snZNx48vk*Dr=93;occNAmXMKa{JBMLrd#s7&Dm2 z{t8B|VtQ#2Lryg36zUosk{(u|E0cem;ue7EjV0Z(pypsMOYm@=jy#61O?}MO(HaUD z^Q$Mu$+G!2y-EoBN|oJ%rxqkro5Sw4Q^sT2_b_a0K9{+INP(ma9~3^eeH@M+(jg40 z!DOx1W8kQ*EiIjAY~3@`F8?Tt`Gh7dwKIY}|HDsfk?mQ;GZD`bj~DJm_yBdDv7Q{> z*tX~L(sFbV#FYPQs{mL5Ip~R#NDwhSp#P3gW^lUk$i?8)*QjouB5Pv}HmhCR_Fdvj z>2|4TzV(d_<4r4tCtr7;&YPa({Dh%fN<1 zfS+GEwKB8)jc;L$135v^q*xjdZmruaA|wN9&j>;A<&9jZ>~$=fB}tT3BI=~cY~6OO zW1!b`1@YE&GjMWV$A#5%Q7HJBdfiwh6C!!PK6hb3@@GG@c_|yhWic=Oa~t^-3seof znhixueI7}oxNZ0^c8TXb6S%@6l%bSv`MxT)P-Df%M=mBKGC!LAQ!krSGmcW&P{Z%X z^Fe+chuX@qaLH1$!NAw)HdOh8pF{E;q`uBvIxuLNRISQz+`Ss*6)ZGIkPx62NxCKv zUq>ac3`tAlDPNdTl!AeYZ-Bt~nag~!qzk%gwRa78I5MjwL)ZHAd4i~kc2$Xol%VgR z5Nt-%HXgA84n94$i>Or_h`i}U(~8;S6az1KGH0~Lj~Qq2-c)j1*73u#&!=yN$fMOj zuZvl|c338f^`0t#ME9R5f9g_edg;__Aum66FQ)EvTRZT8@76*r?Oa9;rNZCI+$pmn z`v?Iy8IxXdQ_EX3?SjmpA_+{7Eb*XD{b^CCGa55UR%36<7Dixm`Dpw5!BtTw4y_E3 zkHBfx+MdD$yEd^>Y;my`&yPG z>Xy|d0|ctGk+#YX4Y|MYrHD3AoqV9_aLIX4nCV7ToC=lxu7G;5zjO35=?r z<7It+Xtr2IzNWDwl!W$AT{y;R=62|TYA$q;aQ)=Z?CtILElwwVT&|-e)CHXmF$1Q_ zicPRF&yoH!0AiM>xs}GqWAKAH@&|d;MXXn^OgQ^byJvKB=`wmzq2dvQ2G*<-2$75# zeY5@RT+wqknbi?80TV0l&L1hdNclM8cJO2)Sr~bo~!)m z=HO3_EZ2t*NH{!u#**|g^s5qIJ{>@v7;>%O1S%|I_Alu@>r>9HZ1tb<{CW_Gg*gg6 zx!+iM8`d>gN_-31c3zS>JK!|dxPe)pv--~%YFjp)9y~%hdm|ry162HAEI|%9c>*n$ zyxT}Zuo+FWYTs-K6Od7bZC}{ueSbAy{cY$V2K7`s#=33GHmwV>^u&H;|8ntro~a-7 zQZn?Z)Vj#FINn2=Y4uhVD&qu7tW&h>JBEZ%K@vQCr&|u%Osq#7nmQy=DpkNr18HD) z$#`UV1-4RMF(?XyF0U&QJhS_HhFvPta@u%gL@! zVL{jfz;5=qE*XRLz~xo}z#tDkx0IBZ(brsOG<^Ib7)RcsQM@2YXfG!`LJSlL5Ye&{ z;pgTd-p=woXOhmR+713PtW!<2*B<}b`XrRLl-2lbiU0ucd2zHvmb;`CR#RQ=Z+{iL zZYP8JKlK$tZ0skSCtxg`1$I^;dw`26mJe26%#AR*Z=@i z_vTf-aTOrl*$LgfT#j_^XQZ|lS%vfE%LTj?9-)wjq_-c=U%ScW-dtIRO1pU~P^V3- zRy?0bJ>LJZvSoWFXLqjn;=IrKJpb*6xvtRk-t3O!v^goOPDpR7_PnPe9zkgLw2)cZ z^7P`aLK>(pNk7RkB4g!2`@}!7w zqH&Ep+4ambWRilyjXg%Ow_Y|QMFsUcM@I<4hgQK$$4jbAi%-yA_C55|Hzb}Tf0$}# zW>oW79QpjLTiT4K*M7>9s?EJ`12cLW2uutIJ_hlL%x`Fc?6ZueZex8Jl$ETi3t5@=HEbCp`hG`^pibtGnOX68E2WdNoNcF9sJcdDIKGfhO zdp`>A)=XE3nmF)TRYRSQoug6b1{I^_@^b)y9H+%gDBua$qNru2BQ#c1STuC+UD^s( zYV6rAzS_$l-?fC;D4=a+&(WY00lG=UM4GBQ726V2(EN+<(?KKX>*fE)8hpDO&Wtm?Tu zNe`qU35uP=^`x)y>%$e~QNVYgq~)|9wdg7>eV6*OzxRnUN$D=5IzGNdF>CClV-C-2 zFV%(9t!^OVg#|G_cZdPS4xvhiRkc2SH1$?m!O1V$0d*4M%3*o{L)aMU(1?K}#L)#1 z3tNkb-m|V0sBaVT9UJHsK)O=_GOts~aA#8^PN>ziW2;YJN3w@| z=}#%~rV0g#Q$D8wgi^gw-)NvjzC==(EE+Oh_kG@X_&$m6(Z15St3Cen2i14jRACwo zIhm7=jMC&VN>s}gENBhs?`!|SiG8sgNY@wOp*1|*F%n2vyEqR*ar*?-StmG^p{;&b zYy7%kc3G^!VkfIYEa9t$a!?E(&*>s_3=gf>wG|EBsZXx=dONy>sRu(Tc*vH$RzFAZ z7eS9Q8sO{*mK~QnE1HX|aA>VKT2VSbG3A;!)&TAJp+@8GG;;71nD-=)UV8f&y?`>x3Fj4q1AJIc5b~0QVx?O1wOhsTk!X)nJ)wJ7N)6T*3C<1k&SrN0Z(5L zM-KoalZ!2d8lM`aFtz-==2M_u%Aq>xVTdq@0Qyx#-$=ClJi0&l9VvBte&8(!^?-HMS5P;WS)86s{)^vSAw?@GMm?tPu#C^ zSx6tF+Ftw*wiraK)yRUFpXa1#y*7gwUS7xoAFEx!y7ZZEZgpbrYi^{Rq*iO;?W@Si z{Zhf|L=1G!`1p6EfJ0YF03hNG$6R_uT(+|&01%%CdlV;Gs4pO}#tP>B90%!y-DS_Z zF;`XQb!#pQ35%2E!&lewU{vdvD9+EdGqMfj$5$M#ea!P5`^A?W+@47niqp4A`Y38FJtB`iN zDF|J1!R%HyXJoREn1+ooy?PM^SI}7;+$S_KQhnuzR8WUg&oi*mosl;+0PYMgP{ORHf zpxldNGSJa7Q&^5x47n{V*G71nEV4IL)!!mttkqZNGnzJtp#gz<|g z_FputXQp2~!+x@l2?TcWU?)JvZH3@?j$R_qYqki)&#J3x$_~#f9xs*ZK5Z|KkXR*B z7Pz)=a~T|vd)JAX{|;mzgfMLgIqw6r$yEmtb_ORJm^Q7VfiY3<+$+|B5@L?aDKUr- znHsicxm%x2gqEi8_=$;~hu#9*1*TN&-*JybBY&kkt_+(265eJDL|@CCt&t->SC8Jd zid)ff7=C7Iac+trg?|~u{4~;>752smu()pp3T2qzDL7D*=|ZV|xsEN{{nCNk4M+mA z9`Hne8=n??+i;4JRU?-3&_K7Ka0S+3oUu#fq&x5fRD~CTpI@8mtby@%k1Iq=q7Kso zvY0DBC>OjG#4}oyk|%bjfx)iI)8?{m!;&MbIa^w1gCK7-u~f|zjGT!iaSEwI4)D5ueI!$YZF z`N>>;RNk8dn4$QMx-f;U#MXZQs9ybkrH?;=R=sX)U3BR<>)>Lz`&OY#XU|nsK^Oo? znwVIwnD4M7GCj}4+q>a(1UDUNH55&}qZUih(d%WD{WS6fc1xL6?5d(bAkN{=>gh0% z34Iy;%pG>N~u7ZrF`mz6V2-Nx2Fpd2bhS3i!D0Xjq zC%E2s6P6j>zB%diP2zgyr0>M1eq7%m*G$@U*U8(-$1hdVB;fv;K{J-(&h1*?##_eS zWXmuN^O{G7zUn{i3zbbWeI0_vy>{>tp&f$iU@aH01b}n z3Lb$Hpu6ipaP?@@@!Ixck&_ilIOOtPkKng!=3m9wou=4ToOL9Qu9VM3TEaBnti}jZ zlqMWFD!fizhIPLQVeQTN zJxx%s*@W4A!%>C|&=tvPlee&DA}!Z7dj?6qo+MP+wG(ul(@o{?noGa-p+tESZ z5HR7uQ^$*f;*0<|&9KDw-m~v{3S!7(rO|fIzi|5j%HP3zz^^~N{RQC?%N|e0>O59d83l+b{8_;|1S=29IF`7M3*iTARs zthSzsB(_4zR`pI?I38iNWB~z+hZ}?{Jg~9$mX}J*hOwTf{!%(8i5x|O)+bU%gc*1!VBJ( z=I4!fAGg{B&!0LfGUP4Ej$!#jL5EmZFa`>zGi*E%_0>$o*92$`rkz}Mv3dU3B<)Dz z$Jct`L+3%|S{ByLv_kVf$1?CIv5(Y>fenk0-dqj*P~< zHde-h&UXfxrGuz9x1f5tCh0|2YqTHoNo4lKF`FUud>nOs}W1x>|ec^T{5ZD42tYd@QCsBng5XR5zl(I1p9UhHg~@x zKYJQ|;w}1ZE4*?g(M#v`kJDyBaVc`mwIfq@Ud|7AOY=`~F@$H9^W~OTwhS-i*H|!CCNaVw(#?ML;@B}@{9toK8vHEGzwaeJWy9{z-t{&apH5v z3|-kxdNWYHqz4SPbqmoOtd5d=>i)@9zJyh$1{gJ?Xjn0$#I}+xkB$(q`@% z1d&~}xs+TV(yzKU(M8<2Wgh7bZgA+~emrmS0Ed}gSFGu08*J3QWTJ+P9c!LR~SagtwS=}-UDsJV{W z3BFIJU5$r_#ZFf}rZ-EchYQx+I_NF#Cze1CB^YIowU3NN?S455sfeUa2j88SdA5GJ zZCO8QzpmKMGdyr0qC)9F{e8Px-nr?mzLKOQ$HxCXaj!J6iIMH~9s5TMTEf z1l96Wa_R3}nB?SfAYDLw&uyvTy4(q!xqd$${we)(x1QTNy~Npz{{1+@H`SaRI5@EI z#0|n8ahu**D>BO$KdbhocE9Qm63FckzDXQ0pG#l}&SNFLSylk#ao*0&AA3Mcw0t5{ z*r=~=PFcDl$`orB5eJpG&Y)<$&y7Zm1PEs@TpsHV9p*sJuJsB+}-sM$cTYX3O=Q7E@ zmOa;#BwBzvo8Ok+O->MuUlEui(?X#5LCa0y>`92H#rH18=4NziKNeKPbdqHfYgSEy zvd@E5ir=@dk3az$<9w5AJ2)H3r_x@x`bKJlL_@JB2`-4-N3_q63cZS?=CAOZ*D9w4 z!0U<`s9GzxwURnIu&&GXtq|&K0T&=8D%kbk6(fwqyJkC=`|Qdd_aVBg z#8=>Imb) z^$e~+S`_kIXZ|V~QK#LryGc$V`~Ku|7g1yFlP`1j)m}dr{_~9=zzy2Re_H>e)%?$r zlcyJGvhiQZ+tuHE>Yp-y2_Fx>Db2r~D?H>+;{_oN@t*;|SNx>=mk<80by9ORqq)EC zDyZdhbT63xnP_^jsrqEHud2AePt3)Ux*7fQ3JOwfqGEnuqghyPz`8t+(EcJ~Xrg`IEg@Y0kL zER%2gMe>>Z%BGXW=Dm^%P_SP^YD&}%Ju)(}NS!&pv6CqHsA>LR5w?y3J(ofa&rxPh zl-gi@l+Wn}ue$a;iwj_92JKhR3+nS<3oFP06MIzet^#46=OpYC2*9CvR=$z3*J8no zM>F-d!4lbr@aT`Zanw$awWtm~GLQCHFq(|ddW&-ARI7__(Qc-mPZH+U$%3P@y4V&h zvlp^n$jln<8`e73m#kX_6r->5a@gs?$Zr;(D~Cz6n~hr;1vMZ25Y!QqtkW$Txl*Vr zb$T#*_Fk@b`EL^Z7>x1)%>(QEw*Q4RYSCMv1!KJeN{Z|^eBT6gQo)piOx>?!n2HLT zUFj9NzbR?ePk?ZOyw}i3lC`#KLE$Tt8I3BBma_Lw!aHdizLZw5neK7w@TSG;%3|_Q zH~37KE5+o|NqZDyt-4`JUp3fK@7~>P{&2`*;P84QF*vqOOo+d_;XWuH>kj=%C}#Gb zrqH%P{7}C_o}c&ucXQI9lQhjVivu-2J~ku46LlM{6p&a zSbgUx7iR{^Le7&YR8P`pKtRowpr-)q!-F9xWyb-~^Lm@}v2;aY|mq!2bi7WmDwMasJ z;$qDQ{G1O{;3mh8g-k|R!e<+L zDd2cYIH46ZOB~;|V0S|22CXICYp5^!V*x~l;~(X+M_g?uA^!5?!Tpj?dvI3J|78PH zy8S#pd?QlA>&)M%)>dm_nLe^FFsN;y3Q*c`h0G=)WBHFyEs?3NhV1M8!*C!SrlX3r zbqPr5*5}q%rk0TfzyA=&>xwbGhCmFzNE=qDDhmJzuU%-U; z4m`@wSAl_R?spbhX8AF_%CT>_(-4_*mTW{g7&kW`+5{AeEp~L)4lIt=fll{h1({B3 zjBMS>CxgPpV?F6pKWe2LG^;Sxv0_m}<|g>7xHkR%^TR2UtZVC8mJq9D08bvjj$jRf zajov^SJXkOKb|@?9JDr-yy0uxD}m$V+s$Ym>+al3<3#9^r*@ z`qrkJVke~lql*(KtjMrW-~6kg#+GS9QWf63sZp&le~Ds)`yYvrCHv2!D7E2wZ~7od z>nGS3*qfW=7U$B7ylhc__wGPd!VxK7D{1(cr|4SQz6#XrBKdkoV#0Gdmi_0~xI&rB z0@?)#dff2Uf| zqbtc24x{whzb*u2sA+XDMMV%3LGm}r6aP!g|DlrWpXK$xDEIoGI^Abta_eFq8D$I$ z)`kY^hqehnQ^vuC>713BHV*bLm)o5KMmq+rVyJIVLzXg7LnXvK3aSsQf{v=(KaHM8 z{K*YxbysKZ7Z!=g>oeM{`oP~Q*&k^PeA>BPOQ zMXB?)f`eC`ExF?~$AF1CU|EjA_tGn+h&g2&R*~(r5s^K*dLo@~GUPO~_FR4?8#}zN zCeKpFCpUD(-SP^3Mb%3ve&#+3{QH%vCo%C&lnEZT_Sd)R3GFQk@&Q9ZBHM}-hS~YZ zcyRq!M?n0?@|Xy9!ja>z*q)Ou+-c#Vv`U-@{EWSoQ0WZ&)_K8KbiO-wtm(=EqAX?f zJzwLal}$#Tdik1v?N~ck3usasWY?m&g^bo|M)kydw+Y@)$Lqr{ zGe>StvMYrh5@wY``Q7_u*FfTL!AG$iCf|-@iadEh`)SMFYg!t`4IfrTw0+=?Lw?RUB|N-F*B|61sp5v_^h<#%%Lj}t@hh#Ml5^FZomD^o`E}Rk z!Maz}W!bih4)w)aiA*^0_K8mr$g}VcRfj3MQZc5!X`#t--d>B-U4G9%#Np;QZrJ%k zj8gE$k;XfV6Jfnb^t5l5H8Rnxt2P{cVhyu4*^DfNbOU2GQB$YF97GB(9;g?AE#Z!| zE_T+)2MFN1T>BE9fnLn*R;P6+CmcE{CMn&}Um31mxP7kOq>~`_t(%+JbMWbMY@AYU z5q-ZN^0mYI&J&t{(=I{PRG!hXTCri}<2!E($fL}1oL-NsAiFd!!b|%dei}&8|~O9{HYheqdG5$;`a8&IbtO%ao;)E!2vR zT^wgA^cLn`p}-N+x;>9~Z89Y2xos)<6jTVE-K)40wdjjUzYh!{Vl)?RwnSz6_r-zw zsEjiZ#2UiBLUTUgtKxChURqJ}-NjH?wSQN4)zVbEOhwGoY=@i8Y1jinY3bYAQY)pv z53cEj1^0s$i)c5{@nh=Ux2;%hy3eOG<%-I4ey2RYBSs=#o||uFWPV;2&{o4$=%rW} z3&T4haI%J-hwo)~%^mQYFMW_oZGeYdR7ioc)r49-q!7;491r7ZZn(C}?uivUHcweU z*+1qp%K$=tdbj{rTi17WT1jVtP7sI)mC zIo!PZZVT!|Aoe6pn+FIC013Ik=WNuuC~dAJPL~K8>~79I7TEI4A)2C~fL~Kd=vtLt zce$_VXd=WUk24^jLIpV#7BDp^{}r`{pl?1Yr2wM9hd!G#VEwm#Y5?q?8*)hwP45T_|E9zAhiB{sgDAGq*F2JESU$ar= z0%9{gMqald{qyH7tL^7@b;{hRzrl-;r4{k=)jP#jr$O|Cz`qjS?<`PuDs-ZmBs5%; zy)AOx)DtLYVsBLEgWPtBs!2;`aMaBJrOnA{#XqiHDg`!vQFwn}3A>$wZD3DQyLIZ3 zC%cY5LihV+y@B_F;RGPv*h_0WJe=R5#D~qZs%+eLc88jUgV#LnC6evSR?{-&KAd2| zaC*GqE2P5zl0=+4v|Q=2 zqT#Exf=jMZBiDDyBvbsj7Hd=L%N-9LVNj)q>)J<%f6GyE#f3NO(n}XGBY67TZj%Ys zuuW1gpYNtVX)gPt+9>!Mx>vqQ$8WR1;2d3WZb9J4SzW)bO6$Dwh4%SyQC#AP(2XDT z_=5V`N!*|F-)ErzM>$SkJqzJ5YUXR${1alJq`D2JaOOA?LH>;;r(yg%LH<8xyZ=Sr ze6N7_#S&$L%Dwwf>0CUDY~ll#2BOS_Z8 zC&8n35Yh6pKaGE1oh+a&%V0qQV_sfG2q`68t!%23FyUgy~GmhWoSS;b2+*XS@h zyJF+?qZTgIX^WZ(HE^BPvAS%bZMFkDbQTF0MV1CQ>E7>LlVv?KR53vl5YL}hL(f7Q zGNCfpz4OV5P#mN=%J@T+MwPt%w|?fIcXkZb>inn3ftt&e72lHIZ`Vg++(!a_Qt zhoIQc#Y1RE4Boz{6=p%-$39`;1@_Yr!UOy@RmBQK>9+6;?*;SO1vW~r0}66L7ck4? zD>lc7nqR-ZfrcQy+;?r6H^rcJpE2~7?fFziU{~B%lJj)J(W#GlN&*Xe6fX$Gkl<%Z zj2TqV;PIv!{nAC1_u&9ffd)4FlZ0Ix3!Y>7#5rBr_=31x>z4eyvTjY=+Wk{tLCZ*@ z+Ea_wQ2Mc0>KJg_1;jQXYb0^jrt9Q~ml7g3R^@J~ma~ZT#;2fE&?+R*CVMXwO1^pMsXBpg(#O1C@$vJvhtoAjKOXr)RJw6F+zM*3_BC-x*IHJ4Ej|%C zNi8&Y)XXk8XN}k;*%zmXic=Q!LoY|JYg}BO>m-BAtfK=DaErQf5Zqg}6%s~1zcNax zY4pp+)^F%%l4gnq-ExbXJ_;Tc#tgU4gg!rF_CHqLA$cstIPz^r=K6t2zD2h|!>n71 z_R;GwF*1~Y&hhyI4HzP=RUIn0?1Yom!au~QD$9AS$|r}bWt7;L5>nkB3}JDwm5y5x z;`dbwy5wMVD$;zQ6d%Rofon^MKleh7C&MZppisHg_teGm&@ZoUz16ZC)-yrboo|b1 zKa2UoQM;vaW_q{7HPdc%Y<;({BICHt=hDP_sh4fskQ&Y;Q)Gbreak#VL!i+zgGRdx z$$~qfk=WoCRA&F&cR+^GM2B)dHVe{W)wYTBW3~0Da&wlB?5FSV$;yAi0>(B_ZJXop zaBHDB+0XK#hg_on6&fE?X7Li-mnbit7E!s$TiXX_^iTd$SEYQRFXFVVXdxDeVD#NK zK9wvod+@T%Z>@MQNc{L68-k15UI@7#S4tafWf0`+>E00?7k9U_rI%px`6RFamkX^F zUS%5%?*P^BH(Us2uxgypQ`kGk0K&4oy+w2i^SXvrAfV*5oi5z{5A%lQVZQjCd>w{Pfo{0arDZxxS#mi4MhZ<@1&M zI? zispSZ3{PH592;DAu*s%mjvVsjrO?-{C3l=yBC?m!OA8L zOh`;6iGcmBvF-DV<`;>EQwb05VX1ofJ0%*lwmw>dIHpFi+}vV@<@5E6QYvWnw|lrR zI=7o+Js^Jq%+!CAB1r=ZzXugMxpoO_7w14XRl0aHh}pi$ReisZ5%5c~qwwZg+sY~A z{xi0wJ6LiTs4`2zNxz>K_e-4f*Gtv@5Ts6uURlO`by7@k)|#RZ?MxdfF}ZP_u6#KX zp6b6~q-9&3IN?p0ze1-*IiS~RaX`=0Q&W^ZahJqKh#x?`D}TS}_!``ERIPQ0U-~zd z+P!@@+R%}#e@0nnHzGLWKs?wxAJ`+Z{$Wcqur7*u4z6l4j;NWiEuLa$D|eiW8{Hqz ze(J}AV*B9Lmab{>bhWa$wu7F5`Y~(8bx*OxcIUlCpj`#oCC(Pq0f&E`G@1~(FLTSV zrH-UxV+GF$w1hnQ7Ji>WM_e2Yq``Z8X>YM68L?aa*EW_+Oh_TZZ_mdxWXLISuNZL^ zWSFA$;)5TTNiQs=kciOSbB`I!dl3iTL!@^Z&~A!oI|UX`zQ<0b!(DM}(XB3HnqYrj zA{^2C_l9UkQd)OTfKCDqhZ@*OYz9cUV4La~U4b>~0~9aDtg@!l#4mYGjG$5tI+y7; z;03Q;!XSE)Et6e7Vh*`wObyk)Fo`kL?PAOxbPt77C0mv$ev=ZkQtEWXI8^XH+hoXb z^7JsYAQmAzW1as!w9nJOs{Ar)HFQ>N1?^Uy2N!(%0#Exbo0K9?UgFB;16Y6%^8 z=`QrDY;FoA6sokm74Ksr``uNcsroq~l9F)Jp>mvo_gwyUgiMZiJSh8ie$}P|$K*dd z?E-hI~b|+b4JU{?{z56;Z;G>Gk(zlEPl!&-dRD?u;#8f(9Gup zzU$2D3PD8=d`1p;Y5w{d`TX>iy6dmxvr-QbdiP*<;gH3otdieGSlPk*{>6aMR~Rq! zfVst%ZJ>3f`dw(J%j5Q38Xm=QJ*%0;BT8^e8JORLFpkLHLo+emJ6q79s%0U%AIL{( zY#?p zi;&TCThl&rF@^eZBF1Ceet(77`iFiz=JkbZGi?S#D-E7KfpJHgCDj^au%IfvnMI}% z9cBLY&o3pTT>TS2t~BOa^C@@1oEy}yRDWK$J{dWt=M+kpi2s^Sg|e4HWIZ*{k;Hcy zxb1ZpJnqTIWW@{$uOZzELU7LD+~pNs8qj5zxz!DB<75(jdNr%RBoh zvY#_Y6Y$rA1az%~o(}VGTb8DWhZhW^dv$J|XM3iXQq6SsHEr}Kzj}TTx`&BP8vH%J z16agv~r6&PR`uMY~63!!x#A_wvg?Fj!@1qP{0 zxe{rKk_Hjgf~+GMXzFY8iYGBjd>?vaNAC zt})1GHlZo4Lmnd=SWe=o08Zq2&wcH zoiUo|xv#c$TG%Nw&N|3yRrul|5g#PyBeWwyPwdEFcpI`n=c{`*q%nWzzt*J-d1pH1 zyn~?CkwG7+zdhO6cuzq~dpA8%%h3LIAREo*QK5^Dx>az?Wb>WJ?w{*4`g5In*YnLY zQrv+$ZtN15*R{XnTmg7JsnyPdL2?$vffkNDLAAYStAhqsLwtT24U#6brf)X1Y;Mj_ zUY0;j-s>xx_lxL1o)EcLicCt9V5}=|nJH$bKoAW4AyC-nnfU#Sl|8s2td|36v*KU= z8`6}uA%B1nE4o|tG9p?1=u{N&E|1TW;jyU5ikN&$j{*=VHTq?zF44bni0%OCconj7m$NXu_rYjQuzt(?1$4=OeSRk0D1Uw$x`+4%2#S$O*|=9#2rWDG#5I)Wqq2d_y!>|gMjvXJkr)Vy2h zj~x6?b%T7k;eOEux$+C#JevW(3at6!O2;_lk-qBB{}pOQE%=*S5r!f*kMBCS1N!bi zvz{GaEzZ;7$jNM_UEbgmd)6vODRgoSzMU)8mST7fkl;7fBD$i}Q?qtDyJ|JV)*1XN zX=$NlRytS$kbjhp1fxB^e>Ko?I_A ze@pJ4ffRVaIM=n*3B>GmZ^?gS1BjD zvO6R;PX@n^t<3l5=_1E#FWciS0C^+%Mo+%JO-%3l?s;9o!sFym_`h9C0`uyf-imYS3yBPc}Li@&9{+?MEeh@f3{hgxDjWNkJ2@}esB-xr@k`EKzANU}!yS@Eo8tdybW^`4R}6z}y7) zoKc(YqTiK+_hkzxmI?%hv-hOF0=j;-!!yW8{&HT<(16D*_f~f&9d2m4NCYekoOkox z+5|0Kj<6HOiXYMuirusfjwKGBTI-Amy1!A`boI@LajpqE9OK>_PtxX_zA^IoYss!= z63KcSeDg*B2$Z$*ernb(bRRR!A}yC1gAqUR$QZWDcpaR5VrCTJGwIDBSddOEmzZGRy~^yx|I8$-rVnb6b-KMVNiom zt~9TeODx{uZu0U#Zv}%vVZUmL;7bcHneH?m=RB~Lhtkbh2xhXDGym}LTKY$#WWl8B zpQw~YPtV*hyyIjs+Gk13pRe%66FE9Rk^edHe5+k1=On;=X`7kBjZ8^ zQ~-G+*ZxI@$+u`x1`J6aYTH_^WQr3D%Rz;{%}z-ZcI$Uf{hNg<6WG* zTTd#SrR?N+$Z*A>oZPv~uBKNSAz;lBG(H)0m@G%~Fek9-=(`6iD7los=?(*JG^pd5 z?aFZX8ylP_XD;Bd7`}bp^%GI{D=~$3R9lhV8+Vr9=H4?Dw%4e}h-Vec%j<^XK{?YgCs>jy@@~;I zkj!2x?8d%K!_2%dyLBQ zom5vlNeux&+RXQBYuo5N1+P}WQ@j1wCX=>9*at-BwT3qssjm;XPFXDcwW`71{*pi0 znLq8???uf!4~Tm@xBzRscivQ+)$K=LEZ!=+yY`;mKTbM#|0bgaRES5|ZtYaQvSFW0 z;5D$@+=^Fy8vO1jkI!%oERHDVk?iV07M)uB^5m_OB3&m@vPA1)+$%psSku6v5g;4e zKUyIAH{9lF!TbWfikXZGsJNvQ(5*HvAO8 z<@?GUCNI~Oa1eSg{T(&oY66t*aa;bEX!|;<4MKu2X@=7W&IJtx0+eXML)NNOCOvi^ z1A>&h)>Gz~(W3C2nzu<(tNUnDWdzg2pEk^S0FTI^))ycg7$)`h`%NE;*_VTl8}O3{ zyPmz>uC|}6Qi{OsVI$(!iW$+=g_jYUOwY0xf}6EI?smz@Rc;J*a@>%I006imK6o+B zvaTY5cY_N_Z{UYMU%FbBfL*C|npl7%4GYeBK_KKbMM6sSP`w3z;DbF12(ceWk3`fx~OI${VZ2)GmF8RohF5~l=|kyN(9jcr2EIT z)SH81c`IF$Go)vuv!(yMM@lvSG5f9#$250gSA zOPWdJ0ypT**pT>exYM8%)!{kO|Ay+f`y`dm+1mQ>7Gd4F^J;ahSedeES zd88E;!IoH3b_BqD0_u0&KTe?0Oc}^Zt5T(=N)vM3>e?NYrSn<{#S}{&ph&AqdPfCr zy__vidX^F~0;=WX|M(;|)tx%Utj21^VQP{l^<|q)0<==i#EY@c=Dc2tJNj-=+Z(x7 zro%JXc02W)S`o2j3DdBQ@ivyV#=Eu3*;iunMv8vodulv0;oMWfw6%ONGd~w#R>|-y zF9}b_h3Mpeyg5r-hez$PqYv&(mzZvjaMd`c&Kv1&)Y3@I6iTdB?ArMq zAD4RaPLz+=V&IV3CNef#%mahobVu^ss@%I-f3c}(q*l26ixbSlTn5lL_J^} z#te-R>R7@RqJa%D0PEf7|X2YI#BcEXm(6>)S-4}KmGWaXJbWD^h~w( z0<-X9+&xTk0m@Wl1y+PvUkb8;IS@pnoSxtoi;l(KzSnr^NBt;j$0@00_YAKxuF|pz zqtT^`kb5ILR{ry)&L3S++`GB zu3zKx5DbK^Dn~!|+C#$JxcqU&F4i6Qj`V=haVTqJ>+8Fw}@?A*nfIPa zd5WHRtk8b(wwY{PXJH+Ya{KVNq)*~lf&@_;oG;>@qPOC_cw&FPHv!UBxNAr~J7qdk zyvhwdhfwd@5`c5a5=l2oMu4`}Bvp7J{o(fklxG^2aYk+ti$|Ia5zZ~-=v2Ppnvl(1 zcad=8fdyi+g(=4NxNvQmTFICUC7?^sPDG!BL2q%LS3Fuh2%bGDU(|dK=_ZskV!*&+~b5nAR-11Z#Rj6ps> z{IY%85k~!Swj5Gl+U{&IcwUE=mqC2#RFyIM-mPcs%xmFnLhtg^sM^Gsi#bQJ2jo#g+xy7ovf!h%hC6)%8F_l%p!YWQH*2=n z08@b#%&P2LYuU5r)%kw0S@Y6!rhRS4T29-M45l)0o?~9m=@ZS7FGriPuVTX-92Ae` zolk=!pyytlO%b4}lh}aiXGDF2&PfWB+=?%rlrWD{LrZ{<9+Km)1Fw(WTan* zD!+j46FLiuXN{|8@zjXWVaSu-BKA{s^j@p6s&v=gAN2P!%W`DwIh48{*c$~yN2dK8jQ!u#eu%lHwf>h7clR7 zp3QO0K+5FD8T40l{5-j7S6*3Dt8BFa|^uwLiUJrfpl24&?c6)BiY)=pWBbxv!K z1Iyb+O13GeR)*F2Nw9pa#)!&7g@g>bR?yK!Bd0cI$G6~CWplfZ&H6z^rH*H8SzNqd z!u-g**u|JgB0u0ceofw#Bi@NAvI`D+i5}W6URpmUAE(@vb9MebOeQFMm(3$ z$i{?D=8k!!X}T4Y$}2#1eOqNt>-QC8xK@^WbgIAcqStYU*kdpI1G#zFq=i}Vo~~~~ zbb?&X)xoG*3(W9f*QYB0c0O!27CmdoGZAe$QNwb|W5;vuho0Hz`mqk{hj@TAj%Qx! z3G5XZT;P<<;(Y)^!GDofQH4~b0kw26RHM`n3IYI~QLP-XW{*?RcLfY*cE|bMvuEqv z7^t?^w^S3iJ3L;X(}tKAhVX8A?@c*O&y?bm&QRv1$8s1>?XgSRpe3AG;+qcj;FNBoK_Lh6tY3*JG(2i z;K=j~326)}+NRe@TBN-svuEO;p}VbG%V&4#e%TA$J^J@vAT}y6Rv|0e=_s%*gg+o? z&4V(&y%Na}hX`?*WSr@^TV=g>tAR**UVnM+%;m60H5N?ZW5X?7yx+m%(|8)b@6bbfoT%ts@(-#gdmp(y<*KlRT@+jdU(j~G2~HUK>#n8VJ;$r zs6_FHPtk|oF-R8EnyiE&!AGvQP%T#G*?J1LC=xiP?MGE^G~^OjTcHCVZ?1(p(ydx% zCOInam3Wjd{wNaoiZ>|MC{qS8kdy_7uoFBOg*pi2^?kW21E%n4}V_Rifjk|R#| z!HiU-)k6G%l&a6_dB#g`9$5)8&bC7l-$b-?vNV!~hfxa&fmtH_gUnxv84%0={qQ69 z#w!|Ft;QmXUNJV}f#Pk(`@0;IM7s~N_({B)hxVzic$ibeq@ZFv0Xv{rSa$Ww%O|L<{L<=XE!#+N-SS``p#S}P#XSpk9e7v~4dBKL zp;tcK4`nTAY>zi(yezqrdR){KkmEWTy&CyFMDa|tF^6W*;YYd6xAp2PCOX6Ad9%rCD8hZGVbMs8Pwz_hi{#D=Dk%zy?=M;~DC7Us=O)|DVR7`gRxl5O` z*eR%Q5u>V%C;qzSSkrDeiv0M<+wmIz(fEj3{Oy4NH**^+`T`Ovvxwv=FH>h)Yxz4t zDtIN#C*#c;1|9}U2NmhNE()9879o)Dm2RthUq24MNTsOWx;vBW8G+A%-hDJxEZ~ls zkO29vRZ~!@<=(?g-I4k1JW{HP&k5iBhO^$Xq{7SFUq7Tqw&SpsvSFE~OJSZswM-{9 zu>W=!BrUo%p~<{u*SFFDF#%a>`$w$qNj`qRLkWn&dn*jUvMMNbnfng!uo6jl5njh= zRI&-;bISJG8)V3?{LO3drSCzRGoU0DR?KOeAl7;*1buOBxlcL1&rl1a`?YEKX z7YcU%r&vggZZ7|FSR(LdbGKLBjJs2!Axg>CF+NE zTnh{ZI|E4nNF4qT{hrZ%))n@v1N~Nr)bs7%%5*Y^MJ~wi|7os6f%plsiG~%3XQtK( z?v{+VQ>lux*;n>Z5qd1Ty~!+B%bhAFU{WS6$?tveJ!&ppMoUiI!*(Hm#I=o$hmk0Q zb0^v+7itZX7+kN@7g-LKna%JY_y!fvgQm+GA&lVF2=gSO@?)?_rOIan+xDU#N6h4% z^zxVj!4t&Jr|85bhb|tH*5Q7l0&|Me$7Z{>OQHysNE2{1x4EEyL(Ym8pFcKBg6vl+ z&8JxZ+G?65WA(>j>GzvT=c}Pz&rY)t@YIQ%*K|2n&cBH>M7-m-Elp+excgO}J8zn* z_knIhDoNfed`T+?N^u_d(4yS;6UW(puQ$y>5o+9=Ihs0jl&Duf(5XjHzn+_w;;IV! zbb&`jBMYk@i)56oZ~+fdYiv6MTIc1JgWvQ@1{o&H2#vj?#L$^URUI+g%~MoIkl-bE z-WM!D!^isF5c}M8ivwb?ttP%Na^@`WHICRNOK8UTY3|nm-?DZU_1sl%+2-~I7a9f( zdGhadaaB$zi}WZQ$vmO%enCJmmMW(c#{`{BfC6-$wt2?3WqFAnEO>Z*Iz`>R%0hLlCuTod8dqQ8g6} zj8R+jjxHacRPQLAd+Ax=Cwiq~1Vl$gSQiRz>#GK+N+R7ntNgwzr-@Pof2mHic-!Tt>coFA<3hp+FGV z6n~|QYriGcoBT>$KX~TisahA3S6%F<$0Ma2<-jixx>lK)T?uIK!9$)K*&gH^Rl@EH z!t-yMY!n>ZUQc&z_g_{{z6=Ul=G>eZY@A(pKdB11xSum0!0475!8YlpJUCetYp>Fz zNrt2G01p<)$^Ys~Pj@fZ`rhjOj3*HMV>|Lp%NjQrVqX=|G`@bX#+K$m`r`T9jOpe5 zi)$JUi{+Uyft?q`6$~$a{iLHvB3GsnT7txPSvGt*#yd~vXjGRm(B;W-LZh^((i6YX zEh)e~EIU{Pian0olI^||E}YMsnS>LAVbHRP>nWY)xlONjG(N4(y*!)7Z^JvvF`PT9 zKo5r>Tr@XWIwjEfc%&OD7h2bIrCw&aa4Ibs>Ko!9OSM$yRAa{5PpP@E{v2GMF+cZ2 z9T`1~ML=;@XMHC;sc;Fb>l7vR@89nSDr%nV?BW+f?(rOlZaL#qr%yqoMmm)-#b$*l zJew~`_aKQk?7&vTIPHxb)*+Pf%>ve*#++_yirTe??no!^cMYe?nWy zgp>f5H?fIF+RiBrL{a=_3$3We{={$-+6A4jQeOD>rZ3p@*ap zev?D_KS5LY*)*daVTrr;^@ehrWtaX4wxK*Phdy)3p$Lap)1E5z#EUl$k#PHlawi^b zJ3#orkq{LH&^Qj;iIn5O>=pQ`yckE2l*J`=UfuY#Doqa=qfjzx_0qJ-9r^a(sxc=3d)@tGWc zxDmCKlp6nHArl*ZZwb*XwG?DXO$D}Bf#*45PRE81=6X0JlNcoakI3Cv6JDD->O64M zl`hXf9n?$-=nXLr_7=0Q{FS8Uy#)f+7<0ueI0VJODr`CPJP+;Oco-kO(avfZp{l}6 z-{vWg`6z&L1Xv|VD5#}l%nEdFm+Gxir;M0e>h;!2o~ao55~sxR+$z7U=$$m^{@aGC z3^>bdO^M$k_n{7O;6&s&hxSTvl&e$+np|J=Gm;q{g(j+xhm0;?om0QyX>duv=Evmx zzRil(LVIqyLPUV;MT+KG#800gTCiY4LH30s33D{}n%T}%T1bmKiXRU2XkGcY7rRr{ zi8Z!UR7+CIR`WDQI)h`Bq znd@Lt5bod7S)%OTsDRxoEgN1v32$YL-?7?0sNR8fHf(Iph2^pngsS1h@Vg(3{y0+g z1sIYt$d^EcFp#v9oN^s}ChH7@BRvx+@~i7+52~9rsQBbfES@ksr0vN6qC$OP@b|W= zats0Kn4i{Zp5nA?4e~S!qi`i4cbP0s-fkgOh11O0LBrQ}W6T&r&69 z+rTao#AjbAr1N(_9*$@+m-^j{0v3c4E1RGO2C%2DZ7Py((0H7FqafayQ#!p3#`k#6oHlJ-_{vR^CdtU<7=ZQ|1ctVbei;y`7RpVZE)A zp|?XM1M7rT^9PUy&_EcDUTR!qtXEa>xl#q&>YElkzwBm#F^1`Z;I-ZI$4wOsMpX;D z8+4SXjIZGVO1nsyHe- zl@9TZ zF@7jQd6Iq-Sx8@FrhxfRfy5K}vo%~>l_EpRrxY133Y5|4QC+CI^-aj`wX94g)GnBtNHaU z>rw0NFwC0nzHZI( zf&~SNUcLzYt<*7S+fN$93(8JV^bk{Zk{HjPan_dkhb#fm$jRLh(2r#mn#@Jh8Oy53_KA+ zlegp0@(=Mu+emr#~U!LQsUq4z40M_FELuhgMu;{Vc5F_Q*(*54iG3hIH%ar)4uch@wB0hHRB#v z&2O^od-?xB9XvTE`q_J=CY{(a=?Ob&b9qc>?wq#x}Be7TE!QRUjm83DQ8Si z8Aoi;(oFqSCguQitGRKHa%kCewfB(a-i9ZzLzo}88jr8|pE2-^I zvDW1C7LfU`(s02*d*;#KNyCMo+Hh$icvHprO-34{-w`+i3p+$xlE&)uo)UK2F2fu< zKQ8z#@07}TmabWsTMyZbrg&Ag4-x5Lw4?tQMS88HJNW&GBG)d*hwA7x;P+xs*wly! zz}eD(XK!mG-=jzz9zR zrDD;WH6X~ZicAn(-YEVRjio3YEeOAh*pUO~UO?h5&v0#XIQ8O*ooHNokAR*Epez zspaB;;P;Cv1Cu~=Za#f!PHM2$K4~MHE33bp z$P_+4Bc2xs1o<)6hQNmX`^a7wBKv*{3!Jo!TYlu3G;yHd{tgk&T|d(JI_1bphY|cS zElo%Y5@JeXTNS_9y%_lb?#(eW;mK0=-ey0x6%h3ww{QAS;W@zyu_?ufF zjj_aSWCY)9uoV>92-7;$UTD~`v|7j&(bfUVZOX>&;@0N+tdGtQokK^x z+0n+_`V}3bAz*t?Ekh?A!4|IkaNYIw)V~~g zalt&xx-R@)QB;yO=ahO)yJAzYTLgE+w@!h2}ny=^$hta(x8gY}O zHNaj;&DW|3jli#JXKW|&r4~lKu&G#7t|Y<;GvQ`$L6ElEaT4@x>PJYDrI6x$4q7&( z?qxsOykP0cx2P4*l@zZ$BZS_W3Bx|Yt!d)L%p0)f{U!vCe6#$h4{+ia47 z7re*gf8?OOmi#kGHPqJHz>wJ+65WG=O>aQyAqN(kdZ(yNN}-Q+VSad_23|!FD=5F} zvQTF}bCn+tdyLCc?^0G;zSyTo*s)_&R4Z2tVk`k#SvYQw9WttDuIhV_f;7T5#0ZG- z;N{FNir}(CpKtzJ;ch(W^0gY!4gFWITGf&fo2n1U()&C2HLGS+1Q09m&H9Mt=5$v!mZ34k@Ey@hSCMTvaazy=U~3WC&IJB5ax!uE0~C{lhI3KH42_&&2t<+$BnnPW)7S4*1X~-{lbFQZK_rA$}3nFv)i}lNy$3BDYSAoNDCzKi%slt0Qjf{A*v8I#& z%146_a?E4gBp#qDE_@Uq>8#1oh$qV|KXs5+FVv$-C1bPOIHz-9puP(Z$mifCI6Q6{e3ojVMqUS~P-4HqcV)Ph*MDoT4 z^O@Xfl~A#~%++A}kxSskW%_VKP|$+yn{3=8I1S+r?h{2_{11Kq*{^B3mE8ANvd={U zwN{OiTH&q;fE|lKh-NyDFr2d!MuH|zOF@pmgX&o@irx41a2Cs3EaK17rg*k`S^d%D zgsdW=p2MNYDIzPf6BcXaxzc{@6LhEw#-4xEMRL$uQS);^Q-Kzk$@x5FdC_}LJx?3N z!EIwdS8?PwS(i#nfLp}1?*F`#VD{BupnK}GnYqboe@%?93$g7P^4^>9i+}-AA&g^U z+v*Mn?3>*B?LwUR;@9*fTij>na<4iL(SaitJBiUF0`E-C4(s@MdA+8F_NO9Nto)_l z)Ksh+@PjhftIZ%I>B@G|E7`2y$zfm@H|W+zdJ-wCu@W;tO(J*8Og3>{eA3}+&61J-5$FP!dh@xC z8)G@pMTa!nR0gyR=XzfM*hO$`4z4TnbypSdaP@Or!P7SwvjH?EJNs3jpStGczzUrw z^w2f%FtKKV%Eyq-s-Q$qbw0XITZ*N-P>f{!>bT^!@6VmYTy|r|{X~HBCvR^P(pLw2 zS?fYBST!tJ>-Y(chNpV)AHA1F5#f@Dqo6ckIa9E#`Utj|S*f?6r8l(WjCDExm?O{` zbb!N|loBZpP1L%Oi0xxJt!ImO@U zy}|)OZ!a3=b_Pp}=?I0A4zFHyt4O;|_jY}64EDw>W(YO)_toy1@xF^whW&Ok^!m7L z3~x>?*JEpyFKzT(#~X8NA}o0P}`=? zDQQbJzJR#MW(x%Js+y~FJKoSLzRgO%$7xH09=9+BnngMLJnTaIuQpjkHLUv|Hrdbv zE(e?~zTfKPC|#fw8|{KPXrv-Re_>OP;Fib%w>>pqTB71co9n;1-ub{Ht+(A|emT#p z*!!v*OGD(^Cq2h7+q$}6;n?k_Br7VLU^^{Aa-|BD=YJuwbLu~k%Etvh|GEE3w6_>5 zPO`@E`YmpB=MF3Szu)4Y3_krceT#U_Untvu7ofW`Q2uUWJ-3kfSOOER?=DUiF04YZ z?bplQIC+Qpt6Omr!K-q_df4hr@F2AQ7vqK#xGw(k@_gXSrHT2Pkhoo=abqdCCUu@;kP#rYoramGv zISjIg6pVHV&o7P@3g{Gs7*Xe;+}cDP-S~IIZirljRRYnu)fSf(F?l0R5-D@47 zmTpyVezyVk!`zuElveHCNBh+_)Mie5*;2M`ggZ$W7erL}JiRLkqp_PW2_vY2c0djt z1Y4%htnxkIf*>Y>;@<1SnRi)Hcde?e#}H=6E3KH*y6~xCG-A%qh$JcR_8x+vmRCU>ajwO*{*WI{F`nXSF9Giqg!Xq z%EJ&Q;O|N;V?j%fd2>1jZPJ8CmHa9fU^HT!ftUTy z(;R4Jbu!E>y1!>J*mj*3?ReGZzY|#R#-VB{DTC6?8PBtxIC2~MIhYOINqW0x_I-{T zFJ(u_O-l$}Bl5hBf%dl8y>-{s(ri=_gJPU{{ao&X(==x4+wzN=g}Q#58n~{IQIKWHJ|- zq^N&u_T7JPl?=ck^*%K8%-~$N@??97HYD!7SvE%?izNIuf}(-o_Is7LC6|dyiJ-4K zUK!)$AC&RBp*Z5G(dAT6dymTiymLqyuEG9#1#j=7)COD5OdYw^F1|1`c>LA>9lfi~ zzu1CHiW412Y~x%*l)uD&PG^<0{W^y=b{?AX|Ec;)5n5DkPdF6hNDkUgj|F_ccxH}F z(O-`+GcX~(rE1!N``8h+5i6<;lY<22r>D}q^I~(?C93k)!{WKRIHXqDGNF&U@LJG> zk|`1*#a@TizwbZpbUp1>hTKlsYS*V!)h0OV`IjR6XDmE$Ud(v)P`ydx4Mpn<_`M(h z$S`O>t7vEYE_QNKvZO^^t6sRnW&4rYb9al!Qgx!qMEqt7gu&7ov9z&tjJ=?Avtvu< z0{jL;0RPS)du{^OlN5mu=h4)R_@wr~nE)4Gj!*G7$Lj#+*evzQ7+y1A?O3nMDH8ot4B!lVk|Bikon@Fq+*&~_p?bX z(eWGy7yt~eq38dA?(LIu-Ff{t%&vab*(v^ZgtM=F8fx?0noG>MHD{qhawL_HC!j3u zfk#GJ6E*q8M%n!+Al-OLuXdCE`PrQFnAy1Tv***(-b{bA$*Nw(rq4b(GAPix87L@&bh46e#%1nTZ&y_aM&t zqA3?vblIZIJJJPcsgt)yVUpSo@{WSDqPsXLM%GMe?O^Qkqi5(vpGJ6^bxCij-YFqo zvm`lQkO%*5M(BKYO~h^HDVJ;J7u5Z$1mD-Twv;`n`;D&`kOoorS^&)E7Q=20&oANDtmj< zemrU0u6SCK%kv1D8aOyN zF_f{$`8f&yS;`QPa4+#UtI5@TdCVy3=Kjg5QybT$(0*kQU2jd^mA*d1yh#3_no|IeBimlWxtmO=^MBt>G*K{$)^sHDBnz#*8MC2>%Bn^q*18|Np}Cvx4gq zce-cow>ZbGna_m>22qP`f*%-$j<}B6pY&w69nwS+onKG19sB)G7{`nZqnj_5W~)2q zDB2F+=2fYFM@zRECHNe9sdf3G+4V>N9`{q;% zCnjyg)@@|Oaofa?XF>@v_-fDA0!Cb>)XvI9d6;(1>_90K=(V}ezB}eMv~?lEo-?7= z_OF;vUNea#;86<(Z1R%A=Ubeai6lbHYlt?6#mTlyAi|r|0)Jyt10MnwI+>>6B&D>7 zubcFa1mKO5j(SejH4)e%ZzCqbO2!23+1)RUZyTQtDshE(DMxn~_?{XSW$Ef%-x9UT zP~IhvimzO_d7ls%@An+c%qM)?n~gzK%~K`QWd=krb(sQ3v2`kE)f?ee z>^s&S?gS;EW5PTxq46aF>&0632bch;;{{{Hi2;sC1;qA4&;#Ajl1k}8+Z37hg6#2S~+kYDw zu?LMe{>eY5mP0GKd8E)4zp$44R;pJ0x^e!E|OZG1FoJ2p=U@Zr!;acC^~BW%mtaXYh#1(Hnk)9V|v)JV1k(j5hC_Pnm-8S62vgwy?mw0ql39H@nu!QXkU&*Rff>@ChX{X=i`@E zeYl7{#v^9qKd)jHe+0A-zNSSkPAV|=qRD@E=gnmp8xRG0-$`VvBusLk?C9(ie!zmo zOEY`{GKua|w%d5t8PuWiisYJnz&tL@PmdByE(E|zj&VLOHJ%VGs!xvn3Q?X@@v~FJ^vq`82O^V!$ z!rOML@yuo5G7VDmPZ>DBzK0&HcRB?hlIZmqo>*E8M&u6qPv4RZZyLLxk)vFp4SLfe zVd08pBK~`V@T_}7$g-<6Lh-zUNG>sPF1czj5iD7F2Ww0Y6+@b>GQ!EeJQjf$1yDS! z^i*uI;vkS2Y%r^8ZNkn#L;o2v&;>*Vt?9o+GdLJWKrK#+Td3tNh=!-0_?J~c8Ud~5 zlT&6d4!oDS7f*8Kq1Vg!;eO%>s!RvhJ*&es|GPI`-pbxx#aUq!#1dcGV(Mudb7mY~ z@%_CgsKiBq&nWL9f~``gwHGp3s*Bz*)@dG;&!Q$z@&X;t@68{u#<(`n>u8krliPX# zimy6zCW!c+X-OzAehav$4|!pIoz+>=!J1Vuy#r-%IY|sNdV8qHjO;A#xNG=9DPIa@{d6q50$7>Ng5-yM9#b#uz(a1%%d&oSc}L$`G0EO4)B&;kjjENivjFCkz7dSqyN2Ne~f_m{Xs(v-nwfG?VDfBO4#{{0q9zYkXW^oMPL>F3zOBqYf1BMSe?gEF&MgY%nTsYya zFR;QJl0EC%f=;nd}F3mz-p`-IZH>o)tf08sezjKnUNbo)NM4 zdu`z<^CFLSp&BGzJFusA{P;RTTe)68JYWPrt<2erp-)k&3F1*&Q?Q=D+5$uNPZ%H) zI+%KbNtb@M&^MHuOOf{Ej8_C-nEB3!OZN5GR6JrQODn?jiYps4f(5=t)bVNHaiTN8 ze)PzteB`NG$(Gi~<(nroHTa<_b^ZG1a_ZY;;8h~`@GHztc~rS1g7ofY#%tN$=KA(w zfdSb_`$*2&iElQnmG3yTl#EGA6U+Af@x`P|KTR`W4)U3sTV|vvS1yfvVCa8oYMq3( znOYpWMC@qcT2&D4AvwtP&+~2ccV=xQ5bg{(Y5H%?j59_El802^G?sd18_I=tE>?n6 z0=M{3&)%+-2&nh1`6J+vv_Om0(WyUGh#1M%?lbMw1DQJoPoapi9*asJ$%BZk?tcFV zv?f+H<2Ve^oIT+nU3oQ~*iJMS`eTChPba!a%xy_){_#k4vd^tNV42MCC$!@9 zY5hOWq~TUCu$BiK4PDa|mnu=LH61J19Ry>Mhw6$Z0xbZsK%U{s20)r)6@y?4{`1=J zaCNfOz`{A&4#hWduBt|Qg1vN7(%8u^x}=G9c`E=hLn>yC4M}BJh^s%yg0m-U_0mQ1 zUD{Y9(3ugOY_v@087Jt?O-P&!J`pE&MGWI`IBAtq47*|dkWabWl{T#< zuB}rr&;)&#J5=~kcNG#OPWjxW(L3IbV6@M$C=b$nE`)wypDB}T$Jl8W&X?@@5%7ZW z_L2~-xpZ1T?0|P3enhx4(|(>WDIEp%!uOTdnnUm3G4*kfk!Mav*N=na!nguS7R>y$ zm>_v8`9&ujmMY=btLCw|@jWE*QIwHWTIz|2Mi>h8vR;DzRd&=tF~y*umv2x#buZ

    N5uJ{Twrt>D`a$y7?-Z+o~{CR5Y9mu8$wdX3cY|e-w3RFxtAOWbk!g35m&u~@nceR8%q7hn%OC91uQt$~Ry zt}Bp#s|y~%A}IFU#Gn118!ZjpnC^9}GliNj$(h{OovB#sot0x2I{Ka*7!*&hOb;jC zAW9hwx!Xs8I99CD)kEE7I&l6iMVPyhxqnWs4xn(QQl>&dI6z&1s)MZBR*pVlLER%` zc;jyy_EizmBam!W=|9e?n>s@Oq3@)eUCp*-)x>7AD!_QZw`!u zA|J0d<39l^QT8y;>68o@;i+gh%#?2}T9ZVcNlPNtCV`<;g3jLx2esGgvp*<3OZYZo zIXNF~1+2xAX%u%v?MH9jnaPFXR@aWx17(@xUs|B@rFL4@K)g01-rjf!2;4-wfC1&2vjgsQ%L7XMqeWI_fg)e_~YGZ?FbyJoqo+B~X| z(up?IgQ4gzHMfE+n3p_PRU7(&!6eBrY0GE-24P5D!qpENOm&%ib2v*3lM=%}qQ|Xg zq9s*s#pco0b>>E7xkqg=nf+!FOY?`t996!X$jMwTdSxkUruT;Q*oAQ@utn**=>@m4 z+Hy;s)w_cE(|byD&FSt!jS8Mw47V24p0%#WCCyhq+`iTf4c+W)>o(gRw@ep4{G_$^ z@D8o9!-lB($ZXapju~O{^?tZOe|lX5L{KU_hs9JXxbq8<0*96dxTaM76`^&3itIED@yXjh zAHq}xicYzmWW+Nvt$UwGx-~=HIMC6JB-Y(jlYzbCRxXv`>n#%1rO0jb_9xKv$Q9h1 zUR3PG{;N57RWrQ&)ZX@Zu@3e5FoxUR*K|?KUD*{cNt)BhgEGE}MvcwF5xqoYc{?_- zYZpEVksjzKu=C$AGYR%@y+k6a)}@%+ks(T7(9oZ~rD(&qGghn0CYp%3BIHS1eN1sB zp7PdzjdTzdg*?h!WPUhu*2$wS6rex4x`k9OXW#R*ajn9SO|Yu?@)K;P^YDJtiY^@9 zGeQ8_>I)ytp2Ml=Y%2R$-~mx!I=Di-%7Mqz$S8_rvpU4M<7-*(Fhn-ohh*s-;n}ri z!I^*Tszb`sarn{04>!1tKEc)N6YdII9}931eu}NRc{I_YRrxqX>v>UWhttb2~@9QuzCD_Y6 zUJ&%1pGSLZ9sO3c_8wv5*GrY-CG@&&LXvCZyQ))R>xb^eJX4BxHoO_Du^8X+rjL<2 zD|V~mr?X%+~OruO0?;9D*CE@>*tV ziatH^L~QV8Nc;i-)MDMr*5FZ`{$4h51d17$fWuIAu9`^*gnZCRxJOQ8cVS|^@bqV@ zUe_nyo}GIh-94J#tQnUsojDw^LBTkMgo8V|eu%}Phg`chpmpa{Is47}YOTOLxG~G2 z+Dg&W5C%^lZy z-u+Hbg+RcH`yoC;`?b5kRw)u#b2a!)x{%{T>KFO!j=S^G4u*2Z2n-qOzcw>Mx>f#S zcqz)yYzz^~`5;O`7Si?#gFI8*LT1_h;=~}%)mhVwmjztV2dQnZk>TOOPSJd_FKu-v z(ZqKUSFvz}+FrbB1p#6iFf!-NUlzFb4u&G`xEj2|=UVfgREV~w(x0&P4tmtL#d2cv zQ*AtQ^)wBW%B^qoJN7+ShU5O^R=FGCd(N{6^X>cNMjh7lLHRd-KwSIZ=W&z$1x5dN zP@6Jo#vGSfCuPd*H-L?Z@F*9l$kZVHJHqond||)eG5p`WJCy(~#sD89h`WEx32vN( zw`0z(YKovd8@dfQQ9`>*+ZNg{Bh|xrWn0ajF;DW}AAiEeDmbSlI6gV*Fls-);nyOy z8bNZt?cdh#+lFfr!O20iFU`;^ZiZ9pU@psBbDLX33@sH5M&Bjim?Td<&XT}6FxhZa zWJvb^6DGzAA(>)C*!Y!Yw)19AwnOAjGznMP^sBw|Y(VV?>6Mcr)`NT}_~$ecS;T@_ zi!tqCI^3sUzl?Ua1H5(BGF^_o!e_t1Xy;;Ch8eWhM^hZkZ_E2|?|iXr_XuYm<<__J zH>}L@9faos6O$~5iYd8p5dv}zOh>caL0|6-y0dm#xWQR)sHUQ9KC9x^KJ!A{oCBu- z@Ws*2bg>A>6VV=2_|$z;%l+8$ZKv2l7h;ZgMiq%p^1_-c$LQ3JmC=x5kJ0^%Z{vrW zV9}TTEpf8_5_z?V{yoHEUAW-czapa%F@mq_bSA4_7t-jPbl=-b%KjCL(SPMT|;4 zKEG0h^e~#=Hry1{i}R`=Mx{opDkx{ZHwyDRbvkAkfvMnj1ts$TAMV~dEUJBPAI5Ei zfV7el(kb0acXvzo&^3f2ozgLcjT^h-KDb#8QDcdyRBjUfBqKJCLjaqZysiOMI8OPW3jU92e z%SuCU_p~t`Aco{W$z%IW(R(>K_gO4jx1nAmxtlS+#;Nx0M8^yt9~|C7=~;9gk;b2b zJj-Ubr~q2+#-d&VEWt(+OD($h!O(=jlz%z3GjZR3BbZi)&eorslF zwH1g0TGUZYU)V!imy3}UB79$VtCOpfgY_;OZ3yw1KHd0S*;+{{chdM=r-VQO|h`|CYGp=WhCxFp*{=Zm(?v?So_9n_KSs^?JR*K|FAW0BF0Xagkq*3kZ?w4*sFZ={>gf+ky5HdU8q?#7_^bNQo-@b5?@(MG$ zUxb{y(oZLkc6GH(89((8mEg0`rxsrm)Z0$&3Fq`)6bV~UkOXzykI)%8<}t9}p-wVV z?09*`X~)x#DsmdZ5sEnQCWQ!72+$JRZd;jdKH4u1*a_%;KB9E37BOs2t02h%XYQ^+ zRiE+T;h(p-UfL<-sgLLuaSsRx@KDH$Jv6Of z9eq8w#mw+ZDbbfEIWbDc3W!O#U7w`u=!$uc5 z=;kxu_!V5{xD9rfTdE5x#`Ij3q`)Q2HC(nVDl}fAb(U%NZZ!LMbw6px+1eYlbHolb zIQgZ^OR1)(T)QJii5(RN`dpY~oU8dgT3t7LEKbvd)Z3);jcztO;XWFvf&E1B7@|t7 zu#^)a4dg>`=Uk1`*5noF{*R}%!fylIh|$EZlf$i!Y)S2H`en8l&asNB3aXWCZ+nY7 zDZiG(1&6Ix;!2p$?jMi@-c5-OljBq6SP7?5Q+lZMa2PocdHGwS1D~Nh$X4d)UyRo zT&g1b*kpqErV)wWYh7Xs5RKD_3Y9Ld@t0xF*U&S+s?Rh7R{(BN5R6G+e$}sUBz8J74oS! zXgd}aN^3wplRs$lQ>%@CdA3$JmTe7naE3_`h-1gua%^T08sKxVb)<=GP#dNS@%RA8 z+x#=8GUnxQS=o3BF2p3&Nr9;9<_^6SJ)k{hJpw=2K%-#Sr|xgNg$?JMY5WUAx;@{1Q&2HAq`B8;iD~ShLvs7N0`i1 zD-U>O7K;L{>=cEINCw9X8a~KFA|3)EX=-yaSLs#l;Nh#x>d1 zIZLCjBu{cZtQtbSZ><^FX$;!L@S*Rx2(oh2c>a=7)?&7@HdeE@#4e^mB9$K>1+~{6 zj9_d$ND$3P*_GYisFZT*`TK#Xi)?Cj!ZU?f2jix#3SaPWr9fg2YsqWy==q4!eU7y->L58C~j5l*Suf~%;_CP8&#Dn#gjWqaup6L25GkY zUJp(^`A84Y>8??+@Ur$ef(AuwSUMAsQ3)GU8J`S?IJC6`LD%S)1+lrW0Gu<47`5f_ zV@&VLY_k1~sLU@hG^vw-ba6_$O}RH2MKb1%YVL?tam@vkmzU|RN~VhBBdu(Nv%zjp zSN3F62pKa@7hMk6L$mYrS@ciFGRNWb{ z&drwcN7BWGRoDFe#Qt(`bF`?E?T*?g+)HwJ!H{Z}6_LQ*mDgUL4d2Y!Vgc$`Z*nJ4 z%KpVO2lkry6{lxvB$3~3Av8$#fdQsui;k`tXGzNoWb6p@*HR51sB>p3CHXy3-mN@@ z+f^rt`+P{N%6-l1St6LGAkk8P<(zN9NVzi}v4V}u7N^Cp74+e{vi28C`7{NAA8;M? zv9nX1&7If*>~tR?>i;Fi-iV9}-?;bYMOugTZ2nN}dI+~=${I#4m`%1{=Bc2}RN&i| zU_TyofBlwj!xB8GOM+zrOS?(4V>p%Y%<)`j3OFSS4Q-M6c|%JNmf0ag1yetpy5nX& zEcQ3t8|j4Oo6X*BLx+NK3;I8{8&*M9kL}9aFCQBPzJ`;_C|VXB7g)F$K+Nfl?<3HD5`z|0r{>M% zlc4+Ei!_?+v9~LUYcp{e-f&j3#f9|@)~Cbvu)>HH%tz_B%)DwvUyv+#PfcK9`O*kH zNK&{Lf7gTWMj2)ooEXDMYm!Tk%a4}uA25Di;a@QRoYW42Ou!+6WV$81k*&P0x})hd zf6B`K708^=jyMfEQP%QuYSxlUqOtVA{>AtLBA>jOTJ^Uhwbt>$2PTlA2F32mL^^^K zHz$UD3(Z$Rei-53A_GG^W zNQqZ_&`OD$+ z5Zc$GjIA|76)3CMd5x`G;n#X7^vEx-HUXuG$IJp_Wruu+Hc{j&&I!rFR+orXH!+`Q zMExp;){)VVT>5r>r^?}IuieQ>4X|FR6l=W1`6b3`dp>+;q3-n4)Tl@~2-muif)t~N zL@T(7-~y4!ri|%Rj>SNx0y&uj`{ctX4|No$Rp`58nNVr#nfk+fji}hj$jB!i9?UeJ zEUimd_FEbLD@{y0bb|OX@lTAifeC^U=LBZZV<7|GwX|_8vtz04yC1*q?;E+EA+mPk z>DsvI(B{N;|81d^Q-pU<%_T#Tp)2v&#yyT1We~zV13kky*}mg?jkq4TCv?L7O>*0j zxM50TjP@ByWeBQuKmg|bT$j~$WJdj6cez|88fGVoqqB>KZffghQ`EhLuU=JMr!^-c zqy1t5BJe%1S_J>f9`b`t%`%Mwl?$%~tpVcxJdKtk3QTCBy1&I2>5@XRdpz0;rm7y* zDtRO3-Kb}+2ht+RIUe%-PXrE~9YxQz$?I?bk_vhp>QdmQ?Gg78szg_hiP+XYixVnB zDVoA8-iYnShgdYnP?sPnJQIr;bx0#r`PcKx@EcEWBN;_HJN}Ay03XT ziwhrP1zh4D|5|9?@QFi4#y2Zg>x5monGL~Wc@n-=UX1zY2~zD(e=Ouu#Zhmq|Xn51X;^(j7t!7FADEniLbh+h0G)GQT z8WqcCoL9Y5!`S-l@zLn%pDU|bHBR*%-?Bwe?lMJ)+<(7_8NB=93EkTXqA4D{cJPd8 z({=M5TT#iGp*4G!B=sun>dq4^-)uJ7-qTOItLC4#M_INCmHIj}6Aj;1%~cC zo419P(5WnLD^E#+RQtH1f4^H-8SSyFo%zlh8uj5Trp;^Ve#V)2QPETfj?1|z6-uNZ ze7Z}4aU$A8CcGvq-=$&e+eXNy@&^Unqk6LwBakI+;)gr?l`!pEryI?LY4Fix9Ox|K zX%}@_QiW;>*evmXW1F|A5;PVCG*dy+{zy*06Hz{G=Cfj*HB2FN8uPS5+aipxtIQmiyRnNqPoc z^%xJ8<@zA6c^l@J?rJVQ*vq07JUx67gy(}ⅆ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

    uc2(hZ9G4&IU4d$2p2(bdpE@x&PC9%My*rq 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 WRV1!DQpNajX=;wM#@3o#jQSUeQco@b diff --git a/docs/images/hybrids.png b/docs/images/hybrids.png index b56e09493b593fe58e37a10eb1fc40ce4995ea4a..2ab9d71eb045f51c0c617f61e87ceeeb260802f5 100644 GIT binary patch literal 25196 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 diff --git a/docs/images/improve_viz.png b/docs/images/improve_viz.png index 2d393ebbf2a8ab43f6018c44abf9b2d2ea8a05ef..bee6bc731adcd3b80184071b9992a044ca3649d4 100644 GIT binary patch literal 23174 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

    VRwUw#OnTXREh76Cx3O-=7I=JU$4!tg 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 literal 35002 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 literal 39084 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 diff --git a/docs/images/rename.png b/docs/images/rename.png index 00f8f931147c6974c6daa56a81db30f4611d5227..187924a7208c696d44fb8f48198bfd8f72e3fbec 100644 GIT binary patch literal 10424 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 literal 9341 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 diff --git a/docs/images/renamed.png b/docs/images/renamed.png index b26be82e5a3b2793e26d4c2e093308aa3403a6fc..227a60a3d36c56ae0cac4f2ab28f6709058a1a41 100644 GIT binary patch literal 50128 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 zÜ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 literal 49981 zcmb??1yEeiwF<2!yAetXQpgDS2oMku$THI6UmzgfH$XtVdxV1lAMvn23J1Tv zcM+9Qg#$NVI8*R&H8(caMcjca$}+oDm%+3K_qw&}%B-wJ}2a5hXD$ zgwP{MbJ=q#pvI5@B)ae4W4(`m@axj=G`-XJIc>PF4of>PZ*W(Vm6b&#|F`u?Unp^l zi2u_HsxYl1!vAi=)%i-Y|Nan4wEdsccDx<=vVQ#dp`@-J3OpXLiDPUPb zTwHg?pBcw8P?Yhn0id2oGk%S#jEE8Cx2B|!oYAZ zBy?Urzh(+}p@04M?Y*xM33v=pq`bUolarJ078NBVpdnaUS-*vb{^{G#PcSbp@6Q)) z?Iq>;UFZ1tcvjM9B5C5du-e*M*`R|m)&;@Cf9*W%wt4?tT3&wQ)-k$^f3Ze)Du(jz z?OGUA2Xq#Gnu_D|w$(dU>fhNhO-M}S_eQr0Uzs~xxu&C{3I!kAnErmD4Jcke-w#F= z+5j6!#KxiY;lcCh_&9K0Uj~ZET0&CN{hKxx78X$)zYW+Bot@dk!^7_u??sxEMQn1j z^ilHPkOr+w{BeJRa{rxg7-b0wi6PkMvnAnKZZ0nOmo6J%W$f+cjP|D(oPhaN)aR|!-Dq}bG|a>y7!TBA8z9@dG1+tR#Qadzt`TQp&C8(Q zYqS5a)+~a*Cb@<72GbI3hJ^U|sa=EpHCiJhBV43V{l4l>8hUzy*{jo~uu5dt#SD2< zQ%W2r-HnIKZKBawB7QE?j$*KTfKQ^};P?TyHh9=$n|)z23JO#V3@6$dYx(u{9MjX& zd`EE+5oC;vF$D#bTU%SLC)`3po$EsjIU>i_1qB62OD%_GcOr;}x_ZYTgoeuWlptZ- zZagfBA8lV>fZm@Qgv?itH8B&%kMds^+(*TtWeq+l`{WX2OP=+~j${}U4P!_CS(3vn z7}(g7+S>S%`8D}CDN~jwS3T?24JZp2%vC`ClHJYeO(%^nDk?J{>*Li&Mn=HaM#I1m zb93VyiX%DaX#)GGsj2A)42+qoR(d)*9`_Smuy6MF_d7mZ7=gW7C?~Ej3>5hSOo{9oX6r_S{wg0U<=*%0s>WQdhM8CfcPT{bZSa+C3Y>O-x{ z{&PQ>1^&Cd*qsfTbIcXRNA$AQsBUdADkBP?+rO{I$&b397fh%4IDPWOmd%;KuP*v4 z+6-TCxSwdg_zQy>nY-G*}$GL?uYQ}=g*%{ssZ~VWlcu@ zf{ay_l~k0JJLzE>?!cMv?Sbtk8%d!rda|#lfojgqY~bM%2`=#gs^+{jx8|$^Vo&bo z6)yx=OE&r=FcwbTPu%&{)YRTX1|Dpy>gxokE;G)TEoUp~1LDGh8+Y5DEO%dRqT| zZaq^>TT~}ar%vl;0p|CTyY^k8Ed#HOV>Yw#W5p-UA|VMM>Xp$Z;P{d*qE%edhTsF{ zViD<};FpE#3$dKUAkY{EKPO7mKoBQW46lJ-WbZ^km;Pv<^~hf7>c{feHNxpF22Jwv zg4Nd#$0+VkeXgC~8sf&NXN(4nYYijtr0%w`YC+0IJ*U7zmy}{ZVx_ zwW--z@h@M{iQ{0q*4NKpe|KlB^s(K}w$iEXfNCJ_`^|Rb*%PgG#0TRv5Yfqs|m_zyxpPcu>nJEZp>vxY46xIyLD{O;t{msd`F z&EdTi1%@MO3kA4=NRo)=`6;#gB*qeh#_A6G5q(W5`<*F6Dh39hwHLjym%m<1l&5m% z6tD0Kylvl(bz#v(&DUN<)AxJPX@kLZ9D_bh7&uU*S2he^e4Fa4 zX8ZK!On5Im@uX*!8n;vTay+VawW?Z+kh0Y+yNQZ(xiRXVEYy;$cBt%F`^`G5n8xo!2Z48wWx$3WIThr{rxB<7PG59%w6bLL!PI42L zc2f5&FB{tGZ&NZy_xH7LQ;ov-GquBw8VTB;A<-he7qUR71x z+M3?l%7;%t0K2mi5)u-hnhICHwh7q2)OE>voqME$e`QVWnQwTn4Gaz?(GRIjxuPWx zZf9<||Lt6TAj_MIYEKHn7qcGnE7JrW{fhkx2ay3K#iQD)r}sPE0YKJv?Rf0S@3gsb zq|RjTuAq}U*QggwL~pNa&%9xFuEXynWfsrhW;310$`2b>^({-HLosMQim; zPH^T*<$6$Ro%2ZKRqb^}M^>nTWV|4Mn=F%ATvXqQ%Qhb>?zSV(SaVak(d{1F%BjIw zw83yK2?JHWgV+`rT#1XDeo#|Y1>Z5)=gg00OXafolEC|>05Ra}MB&^b7@t(N!m7*2 zz!PxU9$X7Oq1V$)9<7ET;=myzpQeHkv;i8HmIq%^fE>6;;*yeJSP%imgVo;8`LChy zKyr5WL})~8B&8@OKG%auWCF`TZ)?4@s_=&6&n${sG73KkJnW8*uk~6?Gf0g4T1D0U z>54%_fxZd|{!f@TT$r`@;vd15fU3e_8ZjmxbM5lTZ3(krq5HXI>2Ud$!d3|AmAa~dbfXQgY4^RBCN%xOcc0xC=A9)-%Al%zJOi(JoQT5Yd;hdIF zwc3|2K{JQ_r|u?A%Mnpg6ciLtDWh{!GlhQ5TYu1QgM6?ZOBe#m4=}2b4K3m1;&Og@ zxQvZhiX-BmH_4rwY3u_71-A-rwYpHicU5F`RumBqjoXSw$wF9J8i>9mXdpF0$<%&D%fCJu84 zZ>f5$!w86o1e1+Cgt7Wz*p1BRgtm*P?zMH#{=yIG>FKdvxw)LaU=VeNt3WMy%$WOG zL7{VR%?=F9qVYL@nXEOUQAoO$AHUR1SrT5Xx6$Jr@Ef8OR9CZrp_YBP;b`a4bk40Z zsJ0!mv!2+(lZhV4*k)Smbl%Cy@VMzc-`NU$58(LlWijWW zdSssF(`=n6E2+v9;v5hTs;Pb14My_0e=~$yUu*WHfB0P@03Utc9`~89jP$6oS?Kn~ z+H8>3j!d?g(eyA;|F?fb_{n*N>Fs=BJ5LiJ>2LG`AuTJreX>~RN6d$fkN+Eto?uGV z1doNdl>>a@8p1SAdy*k5@+??zQ(25e3GkZb6IMsH!^mZ@_- z4;eWj74N4((urJ3w^K^ZWe7TRVK{6aDo&d%wp&$X4%`YUF@vttUA* z=!>x8e%1M7*@e=0g3KW>n3K8O5Q#5tZHSZE7%YhF_9Ho~v~e20peGAfCrbdB$N;TDg&w>Y#Ebpu z)Yqk%?a?pKPm_xDzeW2h8w73&KW7S$QBcz&IN0HZba}@nl!P#J$p$9>l@jZA1g2*k zNS+6}P#oA8-Z`a;$yTmyhB0^PdkCK-CBCE}Tv9O_U!JUq#g`96$=se%f_7{DPx>Yj z3@XjEyg%At?|=7Ocb;#-slDT-*ScE`DNrvrTlAQ(_Q>_IO{>#<)Fvz2^IE*`J)Z2BZ#d0cW zoO2fYpQzbNUi!Z50mjMBBam4futG94^x0;wBZumo1nG-f7cUmj_tpi&B-ZuhjZ}%5 z?e#~uIz93*{?3Tw33UGu1fxpaqJQT9Pb*-aRrzm3K#2Cg+yUDO%|DquIF~n)%KO_& zU{fLS|Fd0!uQpv!F8TQP6_8(3kfRviLqp#_F`xN_1g|07FWY#sP$S!XgO(lRsl^eN zFq+FfS2taNx3;pf!aI`u%k1IdD{$><3Uq*`SKTYj>#o+65HKt#&94wqB}B>ay1;id zX1p$D8oEv5EPvETQ9ct@4={m$bOI>f9ig8DH(7wkCiwUEEiS&4dWu50tph5g5;x*X zkC1I{9($GJN{%k3xpZ3^?g(thrT1cPqxE7y9^F^3+l-JfEsCXJvL{T7(oos4XFe%B zi5pGJAr9m04VsG|{|REq{Z%345R%ahO|Nx*W6YLt!b8PuzU$#~fsIuI3=4Pt`EOFa zLubY?L9uNq^w`GC;E80dxOb^Wv3GPJ^GI8JM1qIO#~c{fp|F{qsy@e=ZE9F-Lm z_R&;WCFoceDk+1cx0NZb-C`7iCBPbwS*Ys=()Pd;Jv|-SNMK+1fA7Xxe#~Svy^S zSvhkVfkg5jZ+Rj;s*~01r@G>9a{^n)$d_2QNY_00uKG6|_L!-F)@QJ50t1qm6J}W3 zC*`LU_u2R3+4j2X6LGq>4hoIqGcx{VcH%qX07jR7*a+O<`0q>>`;3#g#;j#Lg>OteOt@oUoc(2RVc{2v1 zcn2(A6#Ds_!jr7l$QSBbi174#!VLeknClVSEe7mz55{5!8|35V`4lWnr7b3-+tuxG z+3>apK>TQWKJXD&!rt){n08?lTZQ{)bsO#alA)Rjgx^~fwm&RJ)%B(b#LKu}qGy71 zBmLkqsGZqa^jrQ}b>R?TsMHpX949E==|{`IpH|f#6OM#{ER6XNd8X~aNXXTiP0Z5>{hrL_Fv(lr1-yugd-X+yoQDbV1389dD|YJcqqFblylt-Cn-1o-yc{W ze&*-HBOu@(nTHR5P*(hhqeDZ(bN`nu1Ct>Cla>5`4@TtVeX;*q{{N|qA)Z;}4}UCy zcjo`xhQo6vz%e`iogjM3uz&v^*|VePlVs=hX~2+u6RPJbxVMPEdyBVmUGWN+epZ)U znm~3_*`ZRZwL{Ra@+iq5BWK(B=SFqQlCiZOJepDjJ)N@SeQ| zB@UC>hJ}agX8&`ef$l~O=Wl*UWOaAWfNwBJA}aEb167JYJ;l-L>}}e6@A6A{=0u(} z+*ySP>DJ{2t*SZ$#TYTL%+zhQc0Jc+H^!(@(EXB3L??V5FBe4Z{c->?h`AZh5#hsg zN`LPuY?DWQCHsVjvGXE`q?CJsvljsPM7P3m-RZJCUdPBW``Nkj1>ZXnr-=oxGh7Bt^TBAu_kK-=v3y|44ZUW z;meQy!8$I2TL^lUp;Pf-*^kxlZT9A$V7HL&c*Z2&$Bg|!5bj_A)BHRhwQS zNF3O-7PP)+`edQ7wa%a9f!aj0oF+CFA=A8|a@-!{=dkuUgdZ0Y1}Xnns=z*r69xHV z6BE&Szsf~?jCT`s*DG!guEXZWv%0|92Wf%cXsx-_cjq(q8|}QKat!CW4o6RsQIp;iWHqZ1aip9*>3*vMI;U#&dbfT z6Q7UBfYZ7D7&oJs8w~WdN%ijTw4bghnV|2yUepmB_>NeLM$5wXJx>zUDmbYnAQgt# z=X(|=jvr#j#VWj)dgg`N3r$Q}NBH3+P-l^Fy~a?Pyk>z5FfYaB&BoSg=I{fL_n6kF zJ}nmU1Y%+g1E8$IzoM}d;i)`x2$16eq#i4%oQX)j!-QbW=oGfb#C zkL?&PeVUCRp%C&J|FgFjWl<)|>Qhvd-_#n3#t~+K4ENqWY}V1KXwdBYx5p;TSU&f7 zg{Pd+Lt}B~5i6J`4>Q$2IRVV+P&!h4#!iCvP^z-?TPzUmDQ|wO~%0B*n#_ zq%j7f{sdtpj{J;~`;NY>k$1YV4rV@Ywr@|%r6)A81KUuLMwtw#AGvNZ<0T=4=j-Xn z^|!}wrDC|As>lf*$w@oraCbd-(7s`L}s{m`gyWV}kYmXx|>yJ7t>Fh%hW zeMXyrIKee?s_uy1PW-6VTAuW30&Ae=ihSoCi4>mPrNfqd~Af^<; zfJ?o|taUM5K5ch0BDo(!C~BFK3U5(SGPUae7GET}!PXII3-89^`$1wR#PHXv+e*A< z+_4^kMLILsY$7YgI>97>2=TiP9C<%>+@Rc2rqu7OS?Lyc4akM;ld~V9o3`BF)Yq(} z#tm&a8r~f7{4E4_Z_yq=nPOJYy~&2XpZlb(a#)0DL>#3;v6_EX%~MdHTZEFu2m8#> zzJ|fO_(C7D$D)(0wXPYqdY%OZL*eqpAacAH%XM@2|FzzhBsN5DNe+Q~$suM8!7`WN zb^ZzElwj1Ssz8~isoX)Q^o1q$x~8}~G`kObbK@pV zeZ?QAlxxEmvTZG#%z4eeh?)zEDi(Cg6nm$cpYtIquDbqpg}rZehyuCrC0JP;u+$Sh zk+=?wwzytjriwl{i6IIii0IsAnK|b{8aMjkkTF(yx*sv#;W($pK_s8|0AaeOA#TjG z5morW-Q-@*Ev}KsRh-Vz?PD##uiq6T<|I*Y+cZv2?yPs%2K#4kjem#DV`6c>PVJPt zGEJ9NeCi66*Y8C$*Kjh=vC%0v)M4Pn@Q8<^#-!&$SLGH(I#5@WY6rDKhUf!8wy zg{C<)`!1$GHt@)=CbJ1>j0l4t!_n{n7iE8Hw)@Hwk80DizH-g6U$bpmI`xO`S^^3;bEy-ntl`0|6roRfF+4jrEoRhSYoM-E>oN^=(`egkktEqoWmP za^}*C_=O!lA(}VJDj?zJOwMEY!UKfQ+AS+@CuewKQeRI#*dj2R%O z*hQc`qFS8#aFN2(M~ZJ?ewC;7wCB6$H$}6e>U{@xo(~WKj!-6Ss78p;EGn0G1&wVa z?lHc)W+o*~0n)zrYi2#S{nXrbr@^@C=6YvxZi0Cun$Yp<@sI0)#Jg5CQkUh8t%Kn5Q;z-fRj}niK zc+=3A4mL+bZZf##+4sl%YHYkqZ){q$1?q+kI~Li9*t@sF?3jCi(W0=oF&_M3)nBMc zK0ZTabJWFaC*Um=Tw}|#|NT8GHkOKp#_|u45)IU`06ExV|EK z@+wgvK|mAWM>Vi(w@wWU3&+ZB*ijhyqf}vwysGgFMkN$2=6N+n!Y#JTndOP*w#TBE zLq_oX?<)Ul0fJR-E1s+Sa}1B7wxc5DsXC{GR){U-wt6=!$CnCNX(ZiZBgMiG>KT8&BdCX79x zW}Aolrr%1}9J^2hgF=KSk@(6$HXg64np#~r*AS{pP7c+R+UH`%E4GRd&-5=eK?^Q~ zS4qTkfMDVJkhL-yr=2d-eoUG~Kz)5gMiOdH(E~4)nl%STqC|bJ9Y(JD`TNw=L5+@nUT{cM=N&3lIoWYHmGj$zEZ+0? zEW#EU+P^6hJn}b0^Yn4~)GD(t9}F;`^|PdB3OqC&!(f8}qL1@(jrMkiYb)BKFy#$k z=tW1%zLx-c*-nj0N#t^1Nc{<{o{Nh53n>S`f7H}L@fZu`XD;P6JP^S41qcDC@ zG3N2ZdgQk7Z-&BD`r8+MzQ_%owIO%LJoT)Y->ohMg$;nxIgzagzB~ISCnhD?dh;o) zM_ks#crcOBjV+Z)#I~)IGPGFkxyt0(^*u}N;}3r~6q|RJ-DZtj<+&;)SQ42P2}$cZ z{rGiwb#3ocMgtL9pq%iu3h;G~8Q(jsq#r}#qoVgg=CD6BQYs%lel?^ zSVOuCDQD7@P;a`O7`GE9)ay$a$`rVn_r@NAa$u%Dh0U^Vjx5-){vD3Q^@{&jWnC9G z+b?GW@C*ToI~Jqqz&lVcL4pnxV)fmoL3w$_{t2oGze%+x;9g#=xpSv`5rHUajuP%7 z>h@h05)v*;=RZd=QJlhjyFvxDGH<_!biCVqQz)6{||&+WuK? z!bHoP*sD%fIwp!@pMZXNxix54c*IzKR*6f$z#&K*+(KK?xPL7zE!ixsnb+yL5Rvz# zRlaLkJjDN=u{!RG{BjUsMp@7$d9on8pM{2J8Nv+MjR!rNfEn!2R$4J8KE8Bt`L}2J zlN)j-QP45pAk0)gIBH3R;@$pB3?9nZ${h=%wUAjIN&nf<|Fr*YKEI<44b7T5^8|*y z!-X8h^DMhp+}EQnDQlbN(LG~OXiXR9eg2UIs4gkIF?f6RWR{z|X&#-y_lYXqhPd^9 z?T432E0dFEi&^IEAVp8lxLvWgwP>fft^j`aPo(5<=N_WZO@h_q&t&}gitYm0CJM&d z2Mc9uow=L1ALaGVBX0~JOeG0=pH_=D57M6G1#sW2B;VhIT5xG_Aje-`R@wwBqfm%@ znkd*RU80_-U2S+nue|ZG<#Nq-=CU-z;xs z5zkjBAx$VkTX})wk0MZ@)5V@(w45`i*F~4MQoiRnVjwhZ1}>U6;z;qn;gU)SfHk2g zt!eT_0gk^3TiNGV=(2?;Ox+_n)KN2FTs9lEmEn1C1T*1ne#K0ykK4pDVrobdt%db) z&MNhnjny8`ZAz%Nim2q3NIzryE~CkK%Xn%~G`D3*1LFCQ=ugNE?pz!f(PhV3pF4$| zO{?;ft;$eG9lSvo?jPTpZ4etG@rAc=_T4=MViCCRX=j&?823H0q4bjd*4Q?S5F4^9 zm`Ry!VJL8)l*;l3fV;e>wn0v_)$k3X?!Mv&v2m7}iQyn?v5F&YQQ5UN-;z1i9(tTL ze-bdKA`aFv@(>)Ci;+uE4JpW*p3cwhqnI&>NDJEL>ObWG1 z$o`m@FHldy#F10vVp!XLl-9&o4pq-^sL48Lsz^qWz?lP3M;Zm>; zLb00K;N=PwlrSj~B8euO6+0mcOHDtd+7X3Ze*4~gc&1f*`~Di6WT5&!vAvVx=ZrYb zJJG=|KoCF`>QB~drl|E^9wHQxQi1uSU`@^WzBG9FcTC6)3a?R&4eXCktIuA$F(xa| zb30|_N0br)tKu`M^GfulPZTfq)^LLN5q~fA&bv(d{YM;qi@~3#f-u^;xT9?WBx1wm z9V_g4@1Q1C6GbkM6KRN*`^%T{t)5uop>|1b!LvEj$cf_Kj`e9vkUtd*qr1Taz3p!3 zgK+ULPF*O=*sbnH+?PFt<;NHf=%eOqn>O6_SNRV9_$}`Inh8eZ(ERu!YgmU4XM*#g zGg9_9%DPU!S`{Mngx6W*z^`qR0dF zSutnNwIL!Rio|TO*l1Ky{UT+XNsd0n`3h07nqdd{64#imJwM%badNH0qq+Y6?L+zD z{nf?vBV`!jwj!$V$l)Slt}8dSVpc!9`8!l*mdh%QC?2mX%F3y0t-FI)xq1jJ&=#=k z34@oT9o{7Z!;-Yr|>P`ee2IOUGi&q zFG`SS4C!DWH%Jh^aeHedXRy(~l_}yBpVeyqRZ`L-ne{f-8!3?HZg*Ysx*z{&y~#vD zQ2zC;av5eVyJ!A7OzXRj#Qg}-#E+OB;Z3M7#@cPVTI{mTZL;uC7Lh6?#6I72Y#fRk z{haC|AcW)uLu3Z|1_4fJ`Cd_0TwEk zUR2|juhvxk5XBxurZ+Q+)zdKhO`vZMFK1YHfH!QHfCol*<_T(}0sKw@l=Q|%4exYr z{TIaSHiM1(7WIpqJp%wJJ%A`x=89Uhd&3Ac#o}LM{Bgc$Rp9v))TgNbirwYu`Z50% z_VLyO6ddDowmYThwQ%!NcM=;A#HlDx-o8oNrPUY&0^RaI4*0O7-jEV}S>MGuF?|qB#@l6&li?XU) zB*vUMwuQlgWJMi0V!1BWPf4pp;qC7!I_EA0t?wA! z5J?SZo={P)$Qw(YGeTvXM5ty~nds^QMWRF~3nkPgEwD`No_D5JEDK7h(zrpmpZq9N zP0FNmoKhcX;A9=q9`zZp&gcdu9xwUqX2aT=?M&Bm=)sQraExx9#mr>rF|A9Ci){GO zWwmDxY?<+)S2B&K#Ric-(SptD#nRk= zAKn~tk}tyJYL=lKraPhgz*2f5v)2;J5Lf=?z+9nK@N3c|z5kGIuTC({s5q58$7R(F z6KNnzSyGXQ$JJol<(Qlz71_N}Hbid2vCGwoPZ}ot2Zf{l_v!2In}M-PHot$+>S=fQ z+}qo7>EtL{dO#^lDIO63dP-$e2;`}3xd^bUpeK63a#xrNWMIE#H#QM+UhsWV#=v%< zJ;p%B_}&^ItOe!(^u8)|W5b3INRh6SQ|As=NBI2$tQdycQ+z0&r?E}W^LwkhKR1|^ z`XnwD*K6MXZte9+Kxy%sF1W|hL_b3i-l{{PLY;o0T!UtXiVa;{@7)-p`nPALOEf#^D5$ZYz7|Ea*UUP+~0}@ z4XsBR3&xm@kKizhqu3T(7C-Ia#2MelZFShG8@sq;*s)FTW+mnYF2FM}H1XjD$Wpu= ziANfMnI<%TFj>smenpbqKN!%zg?h_kKPWUP<+kcGGesFoK=j?}m)Pg$br8Y*pco?~5Omf`?!0|)v%ksVfO#^sy8-|`^j7gFb3H27 z75WO@Q#T5suzH*=V?uKDnTavdyMX*Yk`d_VZM2YF)h&G(G+P}7b_wM~*ahUu??pL~ ziXweLpFYHv35{ayJM^o%DDFDlD}aTAQFLRMv(ZbbzEFNMxR&Iyf4~dS_e)l$t!oY# zff}>5@zB&P=BDkL?9jP6TTNNZD+iM)31)sqb&HiPv1^&Pw=d(lRV`^tOWOGO+Fj7? zj+?!?4V&8Hk1x%D%)swG$Misd6uxWkj*jd&mMWZ4&JzF$+(v7ti{GXw@XlKxTS(AD zzv@20j435U8}MPpxqRGEAF2aftlu0%58D)yh8{G7B`ZxBmIYHsm?s5(}2`8@Uianb1@Q2D%oaBKQYvL=Np=$LyRedTZlX zg2H0=_Ts-rxa#2nkowDI4F~22V)53&qGRj4!KqV2o14pdke3+Z0s_o zSc&_pdgauOnalPu7Hu<;0iv8R-7H4JAg-RTO-mEm0di(i7yNQLll~oA4;R78(Q^F# z1JeD9H#=W`@)L7^0F9v5yfS6~Zq3*HMRj?%=_2>M#Iz+TqLLKc#3jEs+0iE5(mW+! zRagk!wCpDj)W~W&OE3eg)1UDAz{adPeH9#6ii(|Q4jmpp*)pi4&{=Rcr=kbyWr`tg zY%DocKas$;fHE+iyHYMp&Hdf**t-y#QLa)z=faw=`=2)M2o@x)Jm1ujFmg+jQS-9q^$tSlYGFPZQ?Q-p;S@ zf}k7+2c0~iB1VXj9$1I`!LoJAMt+K1!P!>B{H+__t$lZtBxKKDPK5*%{XJd@~Hrt>96tny9By{KZJ zEc8#5!R?C$Wn8#|g3649yB>QG-keM9LO8QMb);?1D?2YddCpNyT#b(>Q?8{D7Op-p)cXiQsX~k|hme%WO_tFyFsPV#tf+_Iwk*fsChskjq>YPG0)@E&y;{ z>amEOdl((_`zX7}?E-_l1|QU88k@~pKi|Pjtf9*2q--(rvc!cgP@M%3{`0y(IW&Rn zA7AKMomqVVP$}K~rbNlKKD}L4&5~YJ4kyrnB_=3zC~_*X%jyzJ-X;M*h~eVI^d58= z-^@TD0l#p0y%Vio!U%YfXkKw~yITZj8~SjReiC8xJYSdzsqF!4uzsV&G4DH%e@khB{+lsX_YQBI=ky*zJ&8RFA<8R+ zAt|~av8pt85euk zc@N{nV?9|mc7`u2uN;_bzX@z+EK%;z%&Ux-1gPVCx_`WydQ*RSDaLyU?jc#}K2Rjy zxMTJ64Fbd6qDg#fiHV)56!SaX-tS|;fX6S#fSfnMuJd-LOaJ+ohS$KPwDo|%s0M)^ z1B<3to^74-%*zU5I>n7qz+1!2_SDMrOqV+XpnNRgs%p%^=f~@K@yMI`{;9>4sJc(b zh``HCi{J@G`?64XdRs!*-kp*wE<9PP>r7$d8dZjNnCl>3c|is`o?Y`hs?oDRW+R68 z(8xzZCz2G0t5iQpOiuigr@B)OeGfYnP&~94<3EI>bUOEp;@ZJctYXewE?^66u@y3N z&VQIP^MR0^9Oo`Oq84=+z?|*ccgn>J4r2CFSo*jIhp}i-_*D?ez!{UVs7$yjuo~@Q zOVXe*di=wPxC&qfe>A4&gBt;(kYd$wu$1nj${tS{>UKkiz}@l!oUr^GDY+;|grmpX z0$K&I!R%m9j}U?ElO&rMQAZ^z=OQj%^4d0EB3VK_1sGjnMKbdufDTx|Pq96?&x7_f z0#LV3yL$BQu`z5dN$4h{Id4hXzo6c=3iqYvue^@u6UA*~pX83NQJ*yPJU*v1>ACBe z+wQM>uO^Zl6P>%<6Lnx)&I~^QaM(Jp-46@LWSCF$Y}x1eKc~4!DIRO5&D>u&2xd)O zXip1k$i`VL9T=^Y3r1(S6*m5EKtM%k+3|}sDu6fe2729Ti-sLY=!);qy>B>hN9$;f zr;fzILvckO9#;Tv*F7Y0t#o z`P7Ft+MtKIf?ms)G()#8p2X39#+Y24`;C()C zC*&2ny2-0OoqloDZwiH<*i}ZS9&D|cE?pf#66;mQhl4mWt5>9`uY>T|mX_hhZ;3Wu zzV51B6OwZ_^qN<$WNUErnZeOg^R?D@`pE&pBo-26QN)1_2GEYRn_*rjEBpOgR%GXC z;9`zIP2ldjj#vZ$NuOESg~Z}CpI02qLog*oao_k%198{;U-b%HI|<*y{RFN;o7{T{ zQNjKqqV0)N3msunJ=}rI-;#qLeP9}h-q`=>PsBq;-{%pd*R4^zh(f)$#q8oqyV_F- z2?oUbgZK+1g4fOVJM2b&a~VUr{Ha63<)k4g`R(HlopI-h`n8FrTR%Q05pHM-ltqNqT6LC$;}nGsW$| zd}T@eD6AuX21L|q_?R^J5&T$-=-hmR?Jvg}_shGq0gXtT7w@Y8OlUQmG-0=okM|YS z#daM&>(*EP8>SoVm|T7sWR$-`RYoyF{P6p9IS^&DQD3EnIx`%F@_9 z@CZI%X+3t>&UYpcJ>@X=w>vNsx*5NnQgO+1sNDAYelegiT|BY9BGHO?<_~G-Wk&Ed zEAR9{qc2Lj%4|4p`9biHYB2u)tXL{I>=Q@%5x~)$r+!VdMlb!->bHeSfRv*{Ev{)c^fxXp{uUcj2X^ft|%UFKM&pZ!_((dJm&A)zHt z&#J*=c(oyvg}ZN1g$_n)(*~uv1%kslE9<2TzjOrr25nmmcVmI!>u>)pg~E$FpYQ(X zI?)7pV`&~#b+6|rN|Lv}5~H>RXEG@r5Z0{Yo?8n94&RrR5sC#?%-D$p{f`Wx77s*uj{Hv~2x5RupAJ zur;|I+GoVmi#jS1;>$<}D)Gy-?{A?D*@@K_h8Dn7m%h^Zc|m{jz}4Nh{BJUPYes%l zQTzK^8Qz^(ht()SA(U$`9Q}3u$TjEMI&(A^|26IM9_UyMHN)Km7g}znfAo7$6++S8 z6Y*!3$n_AS#tLkwo!XFjF-oj~+)Yy3$l@1IPb@{uj>fbkfHsNz(tD_PB=hwYa#`NV z-$gKet{w8Nwya*T)Z3BCI5e$O1@2icH@jn1~MU%u!B$ia}zn>|o+Th_~7%XI@E&ILZAw7A|5k4}!F&Oo9gUrs) zwttpizs7YLnj3y6z{A5rl6a3HEiX;SBF}0)XV0~23$%BSI&*KB$S$ud-f|@_E?ioz zzf)ecuQ+gMsuw&xYFwS9)sU07l$}z8Vs|4~o>YQ)kGBWoAAqz5MFrV6{QT&7W4PD) z=r0W9)P3jB1-$PSQ?+F*%F3JN4yHXJHL2w74G&x+Gt7&CttpQwKBGw;g%x>mm(&zk zdmT){xR!w24YQ4ou%>doQLiN08N9nU0teY86I*H+wlG7XN9LEtwcU{7%63UAsXcwZx__~m#%Ucwf`#_{CJQ})tAmQ6;O=_g!H+bt|yYZxBi`y7iWSRp1RYbI; z+}3nOK8M|H!Xo+@XS~Rmp7?93Lo-_$q%1+#BG8XO!BCSFt8DslBQDX?!HZ7Ey{Sl3 zUNV!>+?GVQ$0v&V`d+x``Y>5K6Jk&jhFT3{^OSf$&$9DrNkmSRaifQ?K3P(SgOdpY z1J?G{XxNA$@B_yMDa96k9B|`h@Uy%nve;9TQ#O)4(mS%*#diYYNY*^WkdecWrMd>g z=CEIbe{QjDNfo2D`0*-&jM(=I7|h=|;$CtFRO;UZvXKv%3LX8D?%gEN2Gm9h8bZZc zXZGUnf3xiY_nnpz&6Etrei|?hVW)kbkK3!;cw7z-O5AY!R|~+vR4}&ce|?IdC1dTz z8e-7YxvnN%BbYQcHFU%`%5gc!!S=-tvwhk7#GYW31Yl++L2Zqe^X2ZZZFhPu+I?{K zO0j%7^h>7+rGXz|M)ikND(a(;enm+JS*3G>uqsjS7~2NZY_IZ?8&Dl zhjXKB;P9*{oHQ}AgPnYz&Ul2*n*!l+n&y>phK|fAO6}cEh?=tCDYT^wVitQo`Y@Zg z`4du^kXCL47p%K}&z*T*&l!GF6phHx7X5*i=@hoP&C@Bz+gtK3kZ=iq$e&tM0Omr{ zm3&&lc#DXk%>mm>jmvh-wC75dMQq1`n9K!Uvo|l^^Gbh=&&TAHbmc$$%jH+GuhUV@ti@*`>kP=te*nd#?=1+Qr*fvB_zMf_q5LnQPse&x7_ z=zoN+XNK0KTz0TERw8u~p|4Z6&z>A0p4O1#I+UE+(ov&t8&skS_;zMoK8|zvmmA0p zqM{082lgy2tUNJm%4$R`_yQj~;*_V>{KnyTqaR)n?#{X6Q&k6=OVy~C2vsLOQkZC2 z)NQmpP!2+XAq%IVSR#hZQrbJe|25a}SqTru5 z6@ErTz#Mf-n~Oz6paGKz&xL6=Wh;Nln9n?8&>-8IPL|Mx-k^pVLTgX+hs1e({l3ZW z-EN=)`o@)=N4*XYuwlJrDHyftk~Id!fbPDYRYB^(F1Ocy8>p_A{fYKzl0T zajEP!3FDTgnK;1ovN3H9s8Nx7P*Zux>#a>pU(`@T?!R^yv&pWd z#Bx3MI+W$bRCxbS-G6!@a~PbSqrU>S(hp?4`a{06q`rEL+;@B(9tZ zd#X+_V_4tUkrUevBIfUdgBbZ~0`igqJ+bVPl37f?U!hQ7wu5Huk8MKp^9X-=U~nGv zW5BGA!@$`NPU3zV0DjU;D1(PaG77_U8!`GUTx0AZw#!WgW1-d%%X9r9-t~j5G6SqN z8QpIJ=L&io)0Oe%j%$CSeRAs;a9CY`YP=+$x3e>pp7r3bA{QK=70%20dI-72L;>p5 zML4mjbmq-)god7}idmiZcMm&%@^{2jlslZoymk)!=kbZ@fpk;}l`9!Sx5Z_dh-(Gx z^BSE+W&Bv)K}i}V9EfZx3|!7fQgNf_zjN|tmXWM-Vz;mFz<1h+!%+rhvM5!>m|W( zuB6cKdehyD^-ov%459r1E~DJ(1> z8;&dY?ZH9D2t*MGjrHHe_k)Zz5ZN;*JJ7XLyOVQBRh^uU|UtH!EPmWQzumtw`%* zqTHapXZ|c#Y5vCB3ZWat-aqMzE|;wSEA?a>M&~Y0@3~h6s!UeuIMHK+{RQ8!z{d3P zv^P&|R6?Y$07TMp_|r;acgk9Or0Kzd?|k`H%6q4`?C%q``r}Cku~-aQQ&;*s15(Gc zw>8;n;8?!Wq#)ks6rQc|?u3Rsol=Y>F)Va`i9;pZ{H9Ffo`FT0zVAjBhx%{OI^HE z1PKDB+8cq@`sAu8i6E=hpsXC*fhNY2vgj)!f90;96j=+lH{_t+=oI=#Ihwy%=Hza@ zrvK{}h3Y}n#fTUQjW@h|>A|3Yniz{WU?>UF(~|Lk6ykYPX>%{$b6&tF|;j)8qb{WN7@ zXLGRotO0wlmXkF|sN++B#Zt6&2J0v@QAcZEBkav)douK*;?SfYdc)nSoU zUHw3&7^ax~Im0^|X&hI4;Lwa!n$qyocbUO&8MC+@8DsjeDLaTY`s7xG)a92%#>XPM zQP(S8rpt)X3@4rHBEnB;f8NvU91`rLnsvVVg!=@oGtqk>OW%-5p|1vM+Z=b9qLMqFwl3XLJ?uRJ^EOan=!-1 z8DCH8RhHVqx1bEUoB0I3w7D8d$boX3AiunX2j&eTils@nl2OUE6XbhnK7ua;H@0cx zZs8?;tAeYep{{&d9RAoC;|O}^P2!n~BEp26mLVR>JV_ss$B%krFVOb)gJ8`ga}5{B zIOCAk3d`3_5xz5RY4jSMlCmS%234A9!Ts1KLfPxkp2MtK}5BxT& zPr3mvJJw_6dgc2~Co^K2@^rw~`rt;preH80G{5;F!BX6VYyige{3r4Ib@JYTubW{* zce-DA{A_^YhWBE83#J>f$v9%wuC|~d1p>&0L^jbfnE=7iNIjPmImvAr zjkH*2oYt0DU^ePvP0y=Kfijj8oP#ukcfaI$c01cfnx3*x z?bsqILh6s)&EkMz;{>R`?HDp}}uH-I+lVGL_)g5^L@t&xB( zeIG$TLNZ7wq$?-3jr>2>`?U{;uNrggT;(9z1`9Q@J8u#^yaMXtOG8-wq0CdZB{R2- zrG-6eFlzqL*D59y(H_$mZ7+EZ`f~QW`;T>CC=Qq{j17D0e@`w4Yt%>*U*hk(b zw{Ii(@1;vM&_^=VMHnsz%JMuHVI`lFQFTc-ZC6yK5LZ}<>5d7Kyag-O#T^Mc7YOo< z>ZkXK)jOh=+MRMkp3Pm(HB#2I#U!c^iH?h$v%FdR$+ppfV;fIz`kkyh8_ zG8-W`uZ=KX{`r>HCH~!%T*f6H9wq)zEy=c2x{|a%?0jao`)T@J+>hl}zeCKJ3Q%|E zT4B{i*=_H|{f#<#%5SiI=)j4PG(0+s0>a9lAzTeu{szlPzP9@8O(7%m?eVZC`) zkz;ber6j4(*l83G4)}<@QyXtTzIa4%YiPiHG>CT$a#;;X!##ze`+8=J$pS^+*w5W4 zHmV~DKRw<4@?7pz#KGzDWas(pr0v z<&31mA+#LkmuavXmqYym@MN>oldW?=VOy`s4GG*s?g)%n2%hFFPLjwL|Bm| za4N{tDFs}`fY4_h(LV)Dh0?vXeC>?$%r$F0%=y7tZQ){6_7k~{(X;?^U^x`=r_@4l zUwvd|)8+EbzE7U4?yWvVaTY$dU`WTfpSpV7VG$AXJa)mPn1CUSvrMF|Au_ed+4R;7 zsGm>$FEwsvnXD%TPf_a}B4NOU!ccej{pQ|8=|))RJr((IzAIvEBA%}y!R36@o`uA> zdNrF?RG9N9`NN|59O~(=Z+rL;xtD-S-rq?U3RYwSq)g91z1>lVRjzUArGE0(r6bb)ja~(1k#2Tb1y{%)H65H> zp9U3i5(EfOXi6n;dh*(2^fg#q-{4@y-jL1eg0Y}whFf_)=wbM)&tiXaiP+9@GR96# zsgS<&?G|Hv3k+W14)vz}()k`HaE+wf*lC24?hM5t8F46xs`<7tEV^9%9ZReJboPX$ z8rGQ7T-}t5?R(Tj_4}t+^75`@D+*d?4zom7Uo(P4lc2K&ip0wd==KOUCz`}w_pF6S zuW>>W4P`@F1smV~XUzm?NT?PQHb}LnHh%HjG+x(s&!{$RqyZ0 z4qp$K6E&D1ftOhMkf$~G9J2lpI*U-BXIP$iY^3HDgH4tacQ=lyI0qF&(CuoF*YjGk ziHBB%_hORdP7QoTx(&AsKVo+FnfEJn?WOe>dfUcl*}wW*bKmovpVu=pGooR{)zpL^ zo2^>43H7LyTc@H*E@I^NXv0KRvB=(^yVf4rJgyEwnB_IJcuOMlbQT=eu@D#I3|*Sg zML)EyByyLXTTx*&BlDd}Yx5aEsg|^s_VP!JXjF$DhkskD9t`N!|2yJ6eV8(ozCg_{I1Vd3m~} zUh>Bd`AmF3NwbPlg{F*0u7fm5mCiM0({TSuv*lHt%v!U!+rwP(){-0{q=YePJrR8* zrWtl~YKaOp2i02Apu32MTwZGvH%HijiiT$W0fW(6sl3!<#aUqag2KS_)SEm}pz8e@ z54xotioRv;MA86B8J(`NCB>i}hONvK@vuu0)k17_KhueHCM4p2V^DDk2$+H@V^~vWN4##FI$N|5V;4 z#YkVgd(v}%rtquz?gXu_h z)K_VM_Q{m3h@V=2J7-{8ah_W(42y+Kk(}Xs!5S9Sq0Hw6zp39^~=)KVjm)i``Muehs?tYVH!i8=5T@L@_x z5`$*DE-BJy>HkO-7bZSNI5XcUW6m7UEm47-Ia-_zxh2&WB&w|{Z8l76UmDJnlXyCu z^l7%cmfW2s?juuG&8Vw=@E>s_J?V*$$B+LJ zI@s+p)ZcfStGv%)TWU2yJ{KA3#^^we3rSyJ$3=k69yPphil3B(tgS}bcVxcWlY1A5 z+cCX_&<l7iz%qI*l4e#Srg=8IB ziP6YUaC09j_e24-ZhM}}OK7VD`ol>;n*3$YPtwhnr&u_Bd_m}*Ws-frAX-}f>r1A| zns-)q<-4)TA8%ieZT!8T*%I;ijt(cgGv7jONXX>x2l02i9+vRD!#z3-eTWQ(Ih}(y zHI&_c_{7d#DaOW4Nlj1U7!Fi zT27^U!IihRP6ybi5Q*sU3z`$p^D}fNq+3|@R}%_y zYdcxk1b%Fkm1_1gx*Z`d8w`v{rd7>=GY)^Hvk+aVINMZ(%R zWbO|7RHBSsROG1@=z&pKc=q~2U^x$VyXx&>cX0-d$?p0&D)Bvj%6P9li^IxKz0vdA z^I;vG#fOhku^Ush_yEQhjNGBE9bKI(e?m;86Ie!N!*MQfB?Q?R4@`fQ{cI`O>w+l|TSLG^>%-Q#LYS=3(!3u9_FF>G;M$T#M# zRH0t7yBrwI|5w^6y%c=^@Snhz^>=_7SBh(r$w07}>tyf(Z+lRhtESpLIqzFvFj@au zr2Fiqqe9Z6nNUo3CD>ed@>j{@?W%u07)fexl&5*Hmj<$0UVSxU1K|#$0 zb^#pY=GK8}xOWp#x7CiULV3Sb-L|2UtW^#XvZMR@dT6Z&bnW|lKI%@9&$j@ZXi48@c;n-{w%65!to}lt zpoH6S%PlCt14OM_?#Yi9HlJl0WfVU=oduok<)C2f9-4PY{n0PtS}4~$o0L2QuDaO> z($WR|q_%DF&{_!SGV}#C2#fnL88ly-hNO}F(HpU1!qi>jJoP4?JT(38`gh9&=-2tb z2_JQz{&{y))V6=qQhxe3-I4#~0hpdzU;hGxpt_sQRg(?8Ymu>M)a_$?yV;U?^7Q6& z=pD|#zVZB&Vo%>S5QGh|o~PWKWl+6yfxo9@pHk8{IN-~{>*13z`2C)!b>>JXpa0yu zI~GyY`!=ffof{`2VqVEVLQnkjHEDn;mgJ9~Pzn^r%!i2q^A#0O*_z5n)Pyd^^a0mk zNP`KZ2D1?g;*!#Ovy!QHV4Q>fuL}ry+T4CvbH>cqqav22&`Xd@ERIl@_?aR*SNT-R zoaA1g9Dd7CU%4sKx=|($YJ{qKs<3jh$8p=CH>kv4Tx@b}l~HYm!~+cF`XyYbYUhoL zT`90@`M>Op+<$n!GSb%`B;vOx3Lr4j?G-%tHjKUegiaQf%%t$i=)yQOBjo1VC)C5_ z_X8&E#_a+tlDawIR>J1UoF5yH)PO@n^ipjVL1p;GY?+=NThf!t`A8AXrq_7LsJD0a zIPxpWOdv#+OJ)dMb$8pJTYWBSy?9@=5`KSofig@%C*$r4dAf=UQ0ER<@f;4mL;GXh zlR&Jgeu)~n`n>Ckz({>KK90C#{8Pl*(T~W=q=i@m-=3@>SI}`SU%E(mT6$N~mBJip zBK}O(U4I_{Fhz|Zj~E`LqH}H#K8$*xYeCkt41{X+H&b2qdwLo-(UI~e$z)jJvry1e zbWe*JT+yPhyjwWAA#TwU0O=@&m4)q<{46ROv+ypOaa*wpz5|U|PtJj6|5`!KL|0CY zP>ni@iXXti!Ix)WPVyvfKDxiKNWnxJn~t~RpQ?1Pn&$pe_YuQ+=W8Ga6M6201%e`f z&XAbc>)$lN?(qItBJqaHAJYmBUj3sh^?&z(@K$<((J^EsYeR!LJO=?nZv83`t;kik zV==C=`L=_r7aJrgk}jSsc$x#;RN&}0h#|m~8%SgTYh(2ygIRM6_$IfF|=-s0X77c$CQon)Fz$Vl+5Re=+ZgEiWx`cHu6T`$v=lwb7p?s z3vtAne&O~UYe+@ZBw82lI8q*nc9q~${tB~kHitL2G_!I)Ijj;CF+5gq>WHIs?KAw` z-nnszYyfMvZwp*^f1NmKEDO?h=&e+VvfNo{+;F~yg<~vt=zm^qnLqtGA>BWT6WMkh zo)muR-gflh^-=GxRizv%u$*a!UMCUcFGm|0rm4Nd8u-2aS~6yDpVBjCjk+&Y|4xC^7$eyt-&AL>hNYqzn%f)jY2tphmSQ`aiv z_QImDe%+!mahQ`S1sP39E3(dg=F>VxvVXd!%Jt(G-x;-r0>0tB!a{!OC1`*WA6uQr z@o7_gw0C*(lTg_15l(H+rMq)WAUZ}yg0W5_5itggsO07OEB`@$#1$9anjNI8j@z5o zp&hFizKJ703yO9Ka72@`1`cyG@F4E5=x^3&cTY6Ey&a~cgu;rJukjmCT?)YF#KCj= z7Ob8@4Xb3!-10+=36F_eOkI!2n$s#DDz4_nE~gLC(U&>Uzh>1hG@nf#BkMM3ZUZOA_G{e+!-`3orQN zHLIRH&T=SZ85#8Q6&Uz@j=xJ6ple;Zs^s0PadXVOata~0zhsUz^_RDXR~}~m-3yS4 z-}1~z%N_^JN3%U$<*1xvNnp3pg~5^7al)e2Xz^=tVw`nbe1LH0TEiZ^WeLP5FhXN> z<#FL{310B=lkry)6b~n8@KZWOiuRmZn+<4Et0@hvFbI^_oI-^D)u)FM&if_kzJ6tP z^LaG5zP|7A!?|c{GUdv62WMe#%LlX%4us?(q>?y?o6P;e%N?;47#F=kB1Z*hD`f;9 zm@tP1Zr{0e)?038y+{=cHNE(vmw)#*w~lb^Bbk*%!sX z{oEUYQ=u+HK<<3f_&p*L6FE5x7H03ImEJHr!=_{9{`v7XsvY~}@zTZy?kn})YMXai z0rZt8fZ4&XL1R?ZA0!*(<~QoZuzi{-+5RFB`GskU|2zLI%qt)MKH$X_vHsz@3&o76 z-*uza*X#K~ujb~^woNw*o_bW%xAv%k+G#RB^fxvp}CM>O(4om9BCa}}Q zguTITvzH}7NkzqFry#28FQC}FP`_OAUaL0EyTwyYNT>^NtfQeJ>J)cMK(4-dL+$`l zbyMWHe|gNNCKe=t&u==!knC6uFBfv4d~@I zHeSl`7jwOXL0CIm?;4-K4*>!{-c-Gg&Q1QtO*vFQ|-Hf_E;TbC559B-M-?S?imvWS!> zV+1d5N6WgcuS+`jFCjGu>Gm8l(hW^rt=^A)?`^usd3#giMpw%IIa#sO?JU(0*$*jVuM;*(Lz#M>EZ+p8}v+2N&{?ykh8(Q8I zccQ}O$&;R5@FhIgfFc^ZR8`3ih zczD)}jjt0Xv;>wgCl}aby-r3f*9`2}u5CHrmsB5}yzE`RzU-jCJcp9_r;M&hYwR|W zsO_vHz*rh=tSCb@?zGuzw{Te@4Z z<}v81)nf5kX<4zxJ?t^>jAeB2j*-P>Dh@1ZFb}}P5_LnyRAmyX_#|iwyivbGn0CJJ znnD(F`;T$r@*VP1Qz}x`oD$ILxQ>Fz6imqPA+vTG^xzGASkV}$#BpmTjnNj5`MXaL z#8^P65jq;BxQS5Mjph$FY|$p=I#rC_1hp-=#jM<33H_#4F;#zv-Tz&j_&*I@{{oi( z1jAg8hvhnMK+#Sr{^_lc4@tw!ySe|Kq>c4mL;p?Eg05UMiC@I(2>uo+2@bxi0%Zb? zHm1JaHzLL0=lvFz6&8MqwEiv1xqp4MwVKpB*v-{FZv{%rl_O{NZK&*^cwZPRK@K-@ zAzvy$ZUyYdUEaa{3?~|gnW(~ue$}PkaX0~XTr5x(iwzUyEq?wYLd9-@G?cJ~(#Din z-FGY%MW4;cp4f>4FYZ1)I_y|bsUrUnpNuuOec7!P^Np@02q0;R@+Kl8X4sWFlOj*p zc>yc7^Dl)E|p9Be^M=x;!&bB1b4O7(syKjzMzEwPw zirIdvxIkv7UM}o*p@sz=8Piia$IRFi1|W5!AFA6u^T(Q34&06>4vqaP1Fshpk;I`A z$AOD`x*{}aa6haTC;nn1k^E9eyh8!r1gBcv@D4gA9cDqe+3_*^m($bv+v(xF!P*qZ zgZKfYX(>98RONic54BP49h&+M&XUYA_WdH6)|mH-HH@!34sd!U4W(YYQ-Hywx{hUaWrZ8JgV}KMn1z#g((jc18YB z=1fzLw?E4};<2Wm%!mSf{+ZfHzES*cA_wIq1{(TpzQY;b8*zmvMdXzk$>P zx+QNbFk%dOm4x@90mI_XvKPY$lP5IoUijO=|KgqSNTG8d*1>FT^6nhOurPl4we2{N znmFK=uJ1Ei00V7qJN}o0YOY~#rl{md{m`FoS;JZZA3Tpe&0d>fH0+rNBK6Uq?YV0E z6)U}1Ga<)TKO5Q+8J!?$yxWi7`OQ7g;bTZ~;FCGrQEOY+v8OP~X@LltwWaJS;+~FJ zmnLIt8N0CqGCvJZ=#sYr{82W1`xj)QQ|I-dwMdw-ftPhmMc?5xj7S}HQY1Z+{0ukW z*ps(P1(W&rer8FQX^{$)hvh;B|4X&DmHvAjXaN&n*>lN%Q-1mQ4^iFol9Q8r`}VD) z#$!`zWceJR8n|d9^T`%d$nTSkhB?J+uOS>rtbGBIS9{XscAq4d$6T-HfkN!YiO#-5 zft>p9b|B)(K>sz{cfMVoTAvfCy{ysULxHO6mYvJ*!kO-dm3F8aXx$lWfEMq$RIm$Y zz(Ew8i~o1W*00o=W7`QnC~4J_N*;>w+g<%1O8ES_-~S(_lzvjLd~_`6d-T*j)3vTq zcW>4~_5PE}%0+ZfNx7>pE$w?u*Q@v+I;&g zlK8?~;p@op;ip`N$zNG@V&ayJ^e3Dt)nv{f%%+GGIGmgHOVy`A+zpwP;-6mu9J_j6 zKfgAgdD!FY2*xwL#U^sQd2>M^)w7g*;zDP#BE+B&2pKtz0&%s{i@_0^gpvD8T;@<+M&VF3B)H{<*YX9a0C~ zQm0}x20VoZx;-}%Nifri<+jdzwK&REZYdnNgCJ-Jc#Y{P9;xb2iR~$N&wsz1{Gnaz z)5MNzrM3lP`f#D)522G@328iXC`^U^l*vXdOV)%3`J?$l>Xq=3grV?=5+EM9=ubpw z<5Rx(Xr==V3cuCfHz*ccoXR_)rkD%vr#``*x+NEj1-ITCNmLfiH@8N2x`1Y|$^DEh zF8W~(K^+m*ag<3+1UmTk@-4=b_}U$hF2WhJ(%CMV(#!9uJk$R?TIc@@j_%{7;U@!Z zwL*5dx$2W6%DgoPmgN2O72U()xNgzdlo+XjRb|;3H{8_MGZ>k&3YYJgG4Fr1ObQEk zGYH38(i*NDiOkzyyu(LU7JRXZPrea~^dMwIw-*b>FxZ02nS?`_43cHd0 z$sd{t`7TIxLb5L?oI6yh$}aW7nY=$q&<)QwG5ZRTpdZ4QI=)#H9*zGq>!-~So9042 zz%{1KjIY%ZN?$12efw+ThslQyN@HdE0><3cO<_GuEfL}HcJ7+k{LZ0<~kU}8{F8xs}~zK;cCsA z3EPL%!X6U8!@pRWiOKyit1?1n$fg6%ly_p+&XI_rrF&)?UR3l&L3;AOtWjC+6%7kZ z#?Wp^5#j59P!4we0d5aIURUvp(v+D%86c(}R#B?)r;E9O-{NW*y>*@s1~{+*x;oBJ zcyoCY#?r321jvj|Xq9OPI*)2AYzGxHwAtc%riS^r-+@RC*YD*BPr?V^Xo-R9F(61& zeEWloE&fi+=vxE$aIW-lH-c_Bg%iRz>$0Oldy&RJrh&?@$6m+LN&Od0F?)2>U?Xn* zB`64bbXJe4bN4JxB_DT1=40c;+23$dYAg6dw6`R0j1d`WhK~(?*q2CA7#dTmk1B69 zW3cOmVfHid)EWh_9BE6oXKU3njP0Md9=6eSFFR%_JbvzdDF`dtZ|1;}xR)~xEgM4F zpF;R?`evNxMxAiJt|yJcq{NG z)i(StM&D{abbcJ>xA|qX8-NAwwjuy~RF#jB(cj|J25>3Awjso~ciE~mjNPBP2Y2oV z8@|Jl350;;mTXE;_+f(A=nT>v(J=VuK%B?N#t&RNArtc%Z4qi{O7qkt$&Zto8+Ks- zElkodsN3qyk{ueea>ConPEi_0z;e>_SFf$XbbiW|`BWlQt76JoU90dID5?|Hfw|Iy z<}@nAR#eYN8gtf82+Gh-nn0F45P+pXYrln<^3WW)H@lj?NDK{%Y?DE1Q_fDf!U7jX ze&2lHZ3>GgwyE~1$hZ23?(_eZv&^XP!*NnU`MtnV;OQt^+6D|$s!Hxtq3XO%R^JW zh1(lFfr&Ej_A+)(;5^5-qgSsu=sv6M8FvRjCf3&Ti&t;Ph0BBX%EP_pN-?yR1 za8M(BO)0TCJF1d7|7nDJ$s_qbd;Zlx}Om1moRW8|Iwfs@e<4cb= zHdMrRB}j_Co%zN&!(*Rg$y-eo+C77uG5p+2XrZw&>0uK--I9*Bm(`dyA@T;XGTL$K z*f8)!SHa9vRO8qC2M1^F&B|Jw8L7l6-lMmPvoZ-uKy-z55WQdSwQ_`B=2Wb-)? zg3**Vd2V>;Cbd_e$(5t%o-h%I|D)4fR?=zQ?c_2ko`&wgT8f>`*=$P7aJ>=bb!MrN zg(kZTa^d=Br1{x&)n-c_mA!WFvcV#9O>Y!|_uyj$4u^h?`q=r`v1v3bN7C;%8k}!I z>sOaoRAfxy*f(Ke&IT%ukeQv_Rtv!8F#U)d%Tq38!R6#2f*G$ODN;0HRuhSL5B9{% zo}aN9S=rJr_$Vp+Pou=$68OE_SfQsk!QMbXjJe@H<36{0ZFs7xCg~6~wK2{>2~H&s zMUWdb?Y?H^U@ZdHYN-0Bw=+{`%zylt5Z)9Y@*U|AzKT7KI!lpwz!54Byp41N32K1~ zUy>*wBYnvyQ16TN+*PeSeVfL1v{D&r)aD(!)T>jqSNnFYX}Ay)rT5OFx9X~<<|u>9 z56{9m+Hu5Bm6FpSF(oQv1Db%q-K6tf=D^WwV^|S)y$mRA8eu|PR9b3nFmyU|h?Z$80IHyhz3 z&NcUbO`8rxO=(wtv&+YHFK?+yho|RVfv+urC|L~+_r-m7S9=o*D|2&m3V3^MeJ2c> zqqW|z_DxI2UdC*tDM*VBPW!h<=N9d9E`wtr>HGJhZUZ%TTYIPoKJ-6R-9&kJsi~<4 z=g5MCk(~?*whd1c^pR9qFbRMUeNNE<{zE1Xz{r{>{W<&tan5{nzh1+*j!!QY^x?~o zeJtF(2uK+X>D!AGK;(g6aZ|Ya)ag|CyvOFO$VA&{Mumdhv~0C1w2lLpkew{VA&Gir zC|dYtCi_Fn3x_%Vn6ZagV#2Q~2q=;B9Y@q0lIfWI?b)G{ga(Feh~zQ% ze3fzu1y4Tt0KvRW1x3EH)ZoCBd_|!Zvv2-s_c!$iog$3H@5+3z*tFa~V?}=%!uQD7 zKdVXJIeq(cL`*@>?=o?4urMCkZ>S+mdXPlX1pbfnCRUi(&-8h0qxWcWfFm@U2`Ez` zU8MYtq}~ah>a;&D29$A}AHeJ6i?RNTBu@0Mwm%HNF>fMoB2pMXl~AqsfG>$t^z3U@ zPiX{eo-VDBzuO>XGyHysqiQph)40hqgt>laHD4cXf$x&0#PkQPy|Ws2cCKBdXhM4j zT0=(RGFbtjTNsF2PN1?(i`4n^t@C&=YVIWqQWK+Yqy3gB!c4W5L~c^usXnTAc0Out zG58^=aMRh~Z1F08*`JYpz9u_LZcAWIgfK~km}|b~x$IWAG#G%wr8gMxq=&2Qn3#~3 zEP{WW{Wz%dZnm~pDPHw-wENI@@}(AHXp#Eo>7ehblKhn{9^TH|Gl7E?xSyv3otQ%2 z;q^9tI*HN>~jh+PX3j^AyZq5=(XGSCt_zlIpH1Eht6fGnZS4ED{SQ{>8=X! zg|6Q*Hy4Phk*hlc--L^ri$Q1xQLEirLLdb}?0#oHa4zXFcAjX?Ns7hbW<;=!9eA)p zE7n@WTTGOhlWShn#M#vy>%CTNJ|XKk>M$71-YSHw%am;|0L@x*EXdxlH?PIb?4}un%l1*OycSFB3>uS4=w|-N;0M=B8T7urKJi`)t$CqSVbb0ckit z&6+JJxUBFnIg}@C70{uOs1tRBwtZ@jG|hBv{cnbiu?fT>y?JM{ci62M^u~;4a2FCH z)~)hro8ZRm+qGmCdPzPU0ml{UBmJ3y{pxR>Y-+m9HFD+o7M^hJ<^A~8<)_+@yKxGwb^^9&k)IQq z{foCG)T6MzEy)VpLpZ~wz?YX*E7)q#7aEL8g_qk5f#0H1&na%!Tk}7vK;u}dB}aL> z!-BSYY?V~Txoe$c+Mqg4xb_Rqa_}wcKs;VZ;f`@^=!>i3RH+1Lo6L(z-b|iA^<{s? zwQ*NV)FALkUWLd|#C=&SBWWEoG0>)m#0vPZ-Po^XMd9KEE&@;cHL-fjd646StPv(= zsd1V#jo~#b}0@bPkv^Vcziq#em>f+E4hur1+_EoT*fO(ZbB>yYL;uCbu zuY7BFUB7z)Vp8B_;uY?``{=paRdZD|2puysbhq-b6*FjP+fW=PjGOY3z`HwRe*v>$ z8=s$$8saE}C2Qy5M5Kvi7ZCroNGoPfACn}aTmtiMg5NUr+`4;Bsxzzcvo-MRG>)^q zp%U~6G>)ljLwK5KWg(ZWwDaVA3bTHM6_RRt#3e;M>r&mk zMrs}4!p3JFp91?6(*3U2@DGG$n!Gf`2jWI{lT@)gG-@mXjaUXg=}%3Ag{{EPn;puw zTy|s&{Zf#7SuX)li!E!{8vTQ#x%Y|L&vqPg&Q{<`r}RYJLxRt(<2YB!WPmyA>;-=L z9&Jr}hFXS2MzB*2wj;9}U+?M`38Qsi)|Avwr#Vd_fqAm|nh8RYO+GC_LO_@4DkB3c z)3^H3pMM8!;imgS&RR72@mZgo$YSbw8 zDPg0YD*$?s62O|;a;qfQn2q^ZX^-Ihz9(^5rl+zbZKugW?cy7Fu3ULTD6PW~ z44OuNOHtB6gmdYAVZ`(h+`?6Kx|2p&ftDhxzC#s30inyWn|(rlOhST)va+%5TU~kj zZ5cKNkIZxnW3n|agXk)|-RO|#FFpcPTD{U3W`h@EaC|%Cc>$7eStjg zzmb$r2#3pwrWE;SYv`#!J|4Usswd2+>OgWb!4`c(h~={cspFI%B!(wa(_H zIIHZDgF0i4;p1_~y{slP3rV@2aa1BCzX20*uq5)!<20ZyAvVH^lepOawn;2Bgwbul zGRM{(^1f^L9v}Kk6q@YB2fctYXm4Gp9jx`D@c7kUJ|w3mFSXATQzh#(Z%klZ-!qX3 zC)H4~C5BRjVs0uvnvAVVTpt?|tbXTIEh`IJxx*R`FJFjtH>cDBfPdcn0*+nC2KRT_ z<6rpDuu%a)syXDZs)xeARXzS6z}_D;M@%dy`r9L+qK16@--jpvb00Arw+!~HF{6<3 z%#fjZ+-04nbt-(H;Mz%RD~?j)7u_KSP=K|aw4Gh=K+=1p6U+UpJS&Xj4ROc*S4Una_OFc6#)K{v>tPc;7wJ>s~PcdYggxNYj!fx;_wR$pQ7cP~zvEXsa3l$>Yr zrZc059%Y9v1sno)LTcuFzaiRAT$wT%UE^U^weOD^KHtF2IxAJagnU+~4Jc+g&Ha#7 z!uAy8(4L?&;nbxdFKebidfo{oeqv zYV1bo&hRO7_8@U)zOWhMjGtSAbKw+K%q7Z$wxiR9nY-@PD&lgtPrw174=80WDtA-a zsdZ?HZgE5@fv*0(o{ws&aE^)!<;~%|G(|xt!20WCk436KWPz+wd69&|bH^ku4*zMQ zf3VZJI9ZwhtKjSfE&^CpM6rnMtul9UZMws9WS8ifabg_aV9*cxIs^BtWD+mT3}VTl z+PL%&#r$+Lp?%x_b=amyrg__`bFzqEq4V{6CZNo6j#K+#{tdYVGEKr1`TGz&chx4B z&xQ{NCs{EPvSkiFz*Pnn-^ve}K9avn{!_mAuS1m-^9a~qp=ty2jAP0X23@Paku$-lYAfe${3?qZc;a^SrnTbbqAZ1i|$?s8q0+`5(vGQ+fYP-grFHWT62c!}3du;2vNVx|~-hol2uZfq6^b zgsK2)51Rv6Wu~QhtQZ9gv;2qbQR=<2*P1JTT9SX+aAFFhQCe4oQX7rl`m^!@QbH`3 zVL;eHnaQNB1~=PWgaeL99@wAqL`b`%8G`1=g_0z&(^>h-3M5f~r4ugVM9m z{4o*K|EybNl5vLk<$dyUDP+3fPvCV<(;e0b;y{F%Snl(0cN!zMvLB%1&fw7k2*GHT zj-mWle}5h?Lybl8hgMg75fBy5R1>gL@pocC*B>eCal-G(!~w-2nVhq2c;#%VH-BzJ z%%w?fRn-jNLP@ll@ShK%9B*{TJ9Ob91n0qr2c#BJX_le)cK$zp#H4K26 zSM%5Je)rSUi)Nmtyl7?a;*9QRNe+~NpT195Ow*qA;bgZBl>JbmqTF;P^hX+plsW_B zUVujIO`rdO(w9OFS~KKyqzm}2LR^N;-wUHA56-5cImP``qUl%MwfXL50pGyDUTFqy zTb%K8$GKV6%*90RValXD-|u$YiFQd-Xre6C?u0UrxiF0c`WW*BYOqyJ==lqK8qSdI zioJg?4xOt`S+1!DVo6ab7(RPV+sqO zh8~JOC8H#}1%kOR)-W~j&vTP}Fr2)#0&{3Rm~-8zc{H~p@0f!K!C*FU{LO|kYmkvq zbA&UUJ+0o9Z(3sZ3l}Dsxbxucdl3*7t<`4-&*YRN=QIc{tW3LOARh;5!!zH!kg(!8j^E9_ zDFyJ{sYkuHJaq;uG&oGXU)b`G75J=-UTZK?{owaFeXfrR_@YdWgcfH8c4<%5Pnk17QxNc~>zcNKs4a2}hB1y>Sk_62GcCuK!K${e zrxgUC=x9q@MaubNK9yzp&ty>y)tIlR0|{Llt%+4$B1zO%#nz3RX5UW`krG_F`FLP% zQ2?M!td0sSyIW7oTsCFzL~qET%ihyPN2_s~e##BJ@Bl_%2couq!F*jqWTskd$$V~u zd$F*z&fZC2BCiG$3)V!|#?><0GG>*nX<}1!K~Fu+kxZXqgyDN$Lre;yvpn!dHq8?;-X>kgA@BXa5@jD<-YdOohIPdTJm-B;w4~{t zoEA6~rzj=GNiGD#n{FEyXu@drf>&EeW__(By6YBnd2a-=z3Y>Al~uUYr|=_o*S}eh z{fu;Cm_LAh5}|#jJL6$iW;kJiUL$x{R>8FUTiAnVM8}um><1krvg9Wua{_7u86e7<8&|y%jG7j{z9FS?0K9$tqhvn4L3ux(ojNvDiivDsqVdlnrz#3Z$JT& zCLp~@5m1`+PEb)qngUX!OILbtNk9~&OYcOAAc|6@hYq3lUP6;zLg*odFFw!n`mVM2 zUNdXHwg1_f$z+n5BzNvy_jO(8dHl}fobGAjdf?se}JOga98*xX?^`FQAm$VhyKKWC-&)h;nv8g9WDOOG0&8Rl$j;e!{9#zKNWN0 z-2V=LGIy(k>i@mTu9Flw*WrUV{7iBx;ThdE_ zEbsBrZ5HSMx&?U`hi}|;N9&(Xy7-y+f10lTFLwj$Jubmn5Z4-(Mt?q^?uxJPIm8n$ zc$#oZ7Qvb9N)J1`1Hlx?5_jA25L%+;%m4Yta73lR7 zw*`Bw^+K`^I~qY3j#1{}YY|Nabx+0h|2m-#JKeCYy!g_*(oR0pcy#&;vWjwqwTLYp zbXZ1^FKvZVqcsVF9IN9%VD30wr9$khjGD#$br9mH3o%jH14DU|H`L{45o6apFsVHXUcDOTlr0glvD{giQu z2#h<)Pz{XkTCnI1Q|Uemi+dM6)#o#ZpL5+CE(_9yVfF-Wv((N?VjUSoY1W}=Pe)x* z(u%hyZ1U`VzBr~`*ja$47h3B)r1n`V5WZ=@_6Vqme=}Cz0DPKuKA9;IF4Q2K3t5O# zBru&xdZIQo+*};AbEGT{cHdOimZEM}3I$^|6hrR!DZ3tzdA*RyT-;fkvJd0X@C9}C zFZ9@3;Lhd({a3KLu&zjBF~z{1Xqp<-NwJYMCo2oj6dxLe&s{fRdM{I3%BjOa;}*7i z%NwcaFrkK`&hvA{ODoRCDY|yN+#4Z7Y#nIl6r6M(q69`oy3mGm%vztOS(7wlc7~-> z%x53Q{!DGG2}L8P-~>hJTln=WmYSoMehVq2&L)dTaT%62z{~;jKt}`7#Rgdw6w;D2 zdt1u=>r{u(Q44M!Ma=m|H;|{=84X$ea;{hAtPB<+)a;MmgE4F$h6y%=92^1bM}~A5 z0tf3v!!j=mNf$rGc~+9ajkDa~YuZ;0OCvDrxmfUX(_o9z>)^duK5;@ z4{ctUsph37ynMc&O>OPxIh|^!)9m=pFjVx$lGf00)EDN$B}BH;vMm%LfsEx3Lai7B zt@^^iU$lMO(fnL|(?j6hShB#l*m~I3+%oa_i1qb3HQ&Wy?1d|%iqL*#H!GBNSyo|z z(Ok_V=sY#pz?XtQFq}{Qf{2eP3FIgGAW#R*f10Mm!KJJd=eBTeu5<40KFg^Xt8D+y zVj5iKQicnTfa5FyUZ=-bT6+go{e*)7<4Q2)Xj}8PO$&~}M>=3Xi!+M5xYDKr;NGzo z_6P=16bq6qS%4{1>~BDT%NvtFJTb8cAlG24N5gQ1!&LKNYRobade8CJ68x-ln3D-U zwH#U%r}m*4;6shs-q#1zm9F-{pfZ5lkcaB4fd>ztVz(TI|q_c@PSUD^ffUBO0kgd?xct^ZZE2k?? z#Sc)>p{86~rB(}fJI&bSX^ciH>eNui>XniOtoqqMqvDxcfw{he9p1S_c?TKlXimG2 zFHBvDHgzf3Q9u}H6`C|yx8WS_VUEh$896-7HryyTwka2Jo{s@!$YtPJasdG_g)uXd^)ig6~PI7^Dp2x{)5QoUby;}+_Ln%|SICn${vxzA=jF`Fk893^+{-HB>1&xsVwU;pYz_J=&<=s?GM zoF5N3EmQ=bH_u(@F~(qb)XC_}y|zZV z9&soKrTzNlnYQeEb@h3dL%%ze0+QG&Zco+Y$pe@^45h}Zpv%PjdHMMzD%*#KXB2L^ z+i}}@f{oZED0p^%s;jH>@~bV*KclmsR{hLJ*VEIJrnyX)mhoUGPyK<(IZ`}9&U5`^ zmf}Ub!74XfUuA+FA+X(?k#W+nFzrA&Tj7km1bO91l{f2}E26}>lJ7Vz<|c$^f|-*O zHyh%OurY(*w-;Sidkp;C@DUmx}Jyne)wC_Lq8|{%!~Qe8sZXcwrd=Kq8U-X*5FzN0txXw&F#8 zCXT-Hhl9?`&N&k3#8TD-5N4w}HQ!V}Z$MraMZEZg3YNfVs zp%7|F*UnjspZ2i;_w$Xnd_RK_QipA#aS0w1!pr$p!RK-YA{R@P=5lUKZ%$u{t=oK!mmOyD@*Ch5OTKcU@cRqi6v&k5%0``OCDEdb>)rLf|#mO{6?FX}RcTDY% zlu6@PJPYK3O;>M;IQhF}i#kDuvcx1BT}gHjoU(=5kXYi!I!2GaT9;%kh_wuh(gSf# zadULn`ia8$R2!9)Rt+vykteF4ID8q*0jjOp$jcXetzUU(`ZS=u?*NU>cj4TU-P}Ts zPS9)GoshOIo;5W!m5F0<2iD$_{5m-W_E|q}HJXPmL-_3nYq#X(0v>D~Z;g4KGyrhW z8b-^_ciC7hHcJj){KZ_-(2)7#N4K|sqq~(Y)ui_!FIo9LOwi)g6u@fZxcI`@ebk=F zj?$Q6liJ*q!qv0jY<|zj^H5*39bExtLs#%Wh^Aae`kmiXRwSfvY+^=_SzRIIahf6h z>%1LuhH(S=>Pt4cJ z4{1d)hs4qVG;qErs>dXdRK~t2TDM0n;R)MudRo%Qt8f?P`gyG^XLch;UfM-pqMFo^ zA20s2j*rYZh*)t&;V)(6L*b=$VI8-JoGNVYx$lxrB6sRm@%Jm7{GiIv0l@tI-nWNK zOrcHp!H+h#*rknTw9ZId)DlO16}ZHZtK~!soU){)9qgGOq%hR>|6niob*fv*5f+4ExuGq*pMxi^iHU75;F)2j>~VJfgzLM)Jk$y?O}F$ z#s&V-f|+|1IL?0_wM}If&E0)8*j2#yGfV^3OZlr2$J6Vw@LrVRp14uK9D7N{1I%`2 z531F3-WQ>)o1kaphSD9i@TQKQjD)`HtUNE%dwj1(};WcYL>P?{Q+ z^V4Xsra0eiw>!TK8r`K4H^>?O< z&GlwhjEN$%MMJpBQMfZ>2EQ0GYN~Pz?>rX!`tsv!-;0#o#QTL^af%U}Sw?hcAfL@S zT-`98`;UtAy0ewsQVZ#ZIJtEKx%TaI4_!`31m{IT{G-ajeRaRFPAKCU1xiU;Qq<>p zeVhe^?Si8uOX0%ii{8j#)WwH5=4sd>BzDbH;zDjuW_g=(e|JimF%Gu6Oy0#0NL~*c zI`u%6UrGuJln;A14HC(q3EF$x z5fZR*`>Ha?IZ7ccmV?gzLX$U~kE+SZfK$UR&cecImBuKBlxzQ*z`&`N2rEf&fFMbbHdH`=ZN7|pS6+^2u=#{AXrD;V<>iZ{y;r*s^Ii6dDtI5^Cqv8y?w0`{Un;Q>y*tixLKV|fZvg=l%q*{ zYREnun1j)J#Tg-X1!4#byx7_#<{|l!#=M&tZH0xl(Jp20=jv3WBR|K9@?|LR=K}&Y zvktlrW|%|bRxcxGcsK(s%8y6p*@H4n8ep1Wf>FEU${=kw;DgOvnfApiZ|2VxBLw;H zgtZR&G8d6*Ykzn*eNd|tO-ZoqsZ>(i&G}MhsiFY1V%>)JsP@O?y!P44G8%o5J-tlk zHowO;cF#RtuGVQLOPMw%t!$^@5m`QLnST-=l*~3hjH^URs4bSh9XC%IV6GoHkd3fe z*Z|f7mXGeiR_xDnB{4_7lH|1LHh2+A0v#doDosX6q*OD~>M?~C@M7jZ=}~V~fIFHL zB$Iw?;r!Q7L0>}K91<}23b0%G%5Q29#xCR5RNGC_XQ#GEcRcwSy}3^g5EIggY;~V~ z_zAo;trZcP%$WWpQ_Ks%$fu1RvWO73Q&2G3OPswrrxfUzHO|oe-sXA`OHRlvikA8& zr`^O44+BbY@Y6+ip9L(teDjF}haybXSyB=E%;xUDwUXbewdKk{wgO|KBT*&pteKJ? zoKt(Kb~qg*P$%o;zO(OLvbYv}^}tW)7oLmo`h0(9|D*)`mH01BoC{I@`e|u(a6|ew zwtCGmqA86@jsKLMS1YC(ow3E`%{3ORDQpwVWKJN(Vigp}{v*Cpwq(QJI9o}+-*D9w9B3loKc+p<3LT#?__*f1MEogqJ7%qR|Eo0^ zYmPq%emV4{o{wcT_7#C^^($a)eAoB7ex|Cst&49xL2^U8U#$>2QEp1Q+FFcEc5aQ% zpAU-dzxZ2;CZ|s6ReX1hru^6=`FVYur7~$}=Ax3uMK~IoWCF%ilFxDcBa9<$26@jO z8~N&Se4ko-)hwNw$Lh@Fr>@~r6!ehrMOeu4>#nV;<&H;3xds(3y<~8T9Gjw`ICeaN z_oh1jNY%|W$sNV_8bq}8nK^X#MJ|nASWK0T=$=bU!qbd~j07nuCUp|H0soJ+D|DOo z-zhk4*ZiQw6_W{$BxRNs>F<$xE#P;Bp;RoFFI%MING*2U-|j6?Sw=tnJX%>k6gO^9 z-eb)1+W3&RB0t7L7$TI!r4jyMzC40rJCD9jex2M$nfSDPfIEY^~i}6*(1_DNt~LP z^p%&K16+vGD?5}tL7DeLi%ul}N~~+e(>}Mh;X zgmz_|^In;7r4*99)RF%`b3l}}59U(MOjITsG`a^po;8>9810)R|1xWMzkXof6V$)u z5r1#!aRy;+#d_Zj*bbKvaYH(&0f znqjwlRS@SGNpG79-lQjQ0Mja!j4c}0dVNYG7JT?_PSnq zxC*s`oTVJMGz0=ZrH#kfCN-M&CD2rh8Kml>UU3okv6R^sB>cP;US&;CeABr!?_{6b z!(97T>uPJo*XXauWSbKI8<{jrRWQ>yK5wq#AAW@tr9W<`rEm?8Grp>Cba)sNX~!YW$tX*yS9Sa@k|Uu5VOGm{xMRO`HvLDjp`#k zmIF_K%zVF*F8)XNiy->L#Nc24Q?%c$e>Nvv0?vzP z(BRtXSMXnF#VeQZX00ukIx=5A>7?tlVLmCTd|?&TzSO;=@dXo`n1`tUUr-t0gME&t z()uI2GA%ou6&FsQz5Ruh*iKO z{o%lqxst41s)Vg4e^mD`D|vOr%;EXbjqSOQ>{~L|TA~Q?yl83>RbvoHT5hYAGv*&^ zmLqrTQ)pK+gWJGrt2YP#G<=Uh@E#yM>lsbTxTKo`@8(G1vnqQiemGB~ zW2|IwC{}_i?M#jLtcEXIAKBcA>-XPI3DP?M`%1p$wmo#L0P+NQr*^h@eu-Q z^?hz*>Y)8EEc(l^_O~hR0lgU}9N*K5$YS8P54u;91ZE9X_PYU+BGj7OI`7X?p??q0^R^M(D@w3K;>q!Z;A5xVBU1D9YN1Ra zPlwFEwH}{M14Hcr@z|($(gqYVN{oNx@M~>v%2dFPfUA zrt~(^=ZSlhCTCiXc*+%39r zVT~a*;cqDBwl4hR{Hbg^>SX@fMf6i+dq`-|-Pe^Z1bvgV9zG%741Q(Ln--L3wCI^7 zl(24+z-&oeAJuDfPa;d`3WGGgaHss_p|W4-2FKzfJw_Ep@X7@D~XxD->s9kB->@2|X?3_^1lM4xO4#lm}J(TM2e|pcGoH(qr^GRQ~maXPOS`hqkkri44!FIU25EJ03)uhJTdm?XLU7I z8TH!>?ly`!Ld~3=YUnH1#Z`lD@nz39NXMUb`VnZeO}EA>scr3t)@pdnRB^>cpCe}| zeJ&Yt#jg4kt`Q(H9x zh{AD0^({4*dq$u5@$j5Bl*RAY>1az7dx*-Cs3^(4=+|qF0e8>qt%raLWiBu*gQwHlxFHs8cTX;W|KA6JDV-xo&_DV zfyEBG&%iXBOb9Fu^S9MY4gujhz`;GD znM>cmO>geRt)Rgnr4VaU3raRtHVK?{$acd%6=t(JG~T@sr54gK1z?q3r@l(Wk5h8H z+~e$orMG<3Nh0~0=`F>ZxTn9wNR2IRIb(TXf0Q%X66a#U_(eIu#{@FwOVk-0o$p(1 zM=FkZll6NJkzD}Ea&vw!{h5HAh$-kGDkxj|#;kaTmN@`Qh3`-0Si_p3A)?A05NZ)D zI9x3W6I@x+{bw8pc1DV2#K1ne@=`EzIGG&`+Wc z&#m6(&I>3Xe9NT&?KC-bkvp`%IsJQFh_|$g;vL632c(pH0LOYO6ek(xb z718GOnDXYIkL4bgRmn%)Pd3mL+KmBO#Ne|9%OGB%_4P}8G$i&lxZ^?toN#hAU^sJmu9SHaH@z$9NLQo_}!hDQ=&Krto20b&VS6Al< z%HwvXiM-r|z3o;wj2n2j>#rgs)caqhIecv)R zHKZ?CfHDF_IP0qP%y_a8!0fEe3R;9;tQy$;W|2Zp(l^)j*dYAIGO=U_OEWaY4>Iq8 zcPPwUV2L|cR~=4(yXPqGuh&J{KP&PN&M@Z!TnNeyL^Ae%sWN&sZSaaA1pp%8*wv!> z4vPes@S|@ew6C}mxg)aj6#Tv)6S|fOY ziOyL8C+7PLSCAH_?d^+^&$IzI7%#xGN~yYq34@P8m{1n^y~VYL8TA7g&8sCKXZR&F zdIPr^Z36IYdBy5`$y*jhOr**?<5E>RmFCL+^)Ai|967b5=)EV^?<&g_Q%aGZ_xP z*r@Zl6Y5F<-P^fGz|zu~RV82DCX_+Kyz9X#DTl4^#n`;(XFk1nb;%W!KTlQF$V^>S zMa{#~ledTj?I35hVhjMixx3SeO4VLz_7z3HTIuOt=qMbPTVTw+YhfY7Kf9Du;UWGi zTT&TEFo#nL{pu=Q`z%n9HY5@FqQM=vK#iK3zj?ky2{NsZ*@++@a z!>CH2RuPvVXymj2i#W5|tt^Yo5|t^%u2W_?!%*-p#t;{IfSYGk740HW@Rs!Z7pyfE ze7mh=XJseff;Z?ngq2zc=3MxAs=EBW-W>rO>5C?=r-nbayDiKY$hCW+$8VZ0)<_gj z4tvFp#AFegW?bG|vmocxIbX8&4^B*dDi|SnhaZveiGt{s$?Gid^7v(sZ4`{9KX@u$ zz+3b&!RL{Ku9KifY2!QROK&0>mU4l_FQv&cxQ}i0ow?;;&odgfrJde%OHcfAIKJ*YkBQG<+wIiN zga4e%2px!he|2F0bfrA?8`s_sk&+lLM|Q4BwX%C*By9VpY~%B1IHs6FLvRP&MgHW7 z=spVPmt&vf&*7&GYF^~W7_MevZK6ljEcYfi&bKrkT^7xx&@0k8WsOSR;y(O@PuASu znWlxeb(0#_0U2u*+Q1;UOksuVMrWzSHw%>W0^QaxqpcS(EB2|(bq!B^<8I!7%RfF# z))~9ZZX9c$Fo~muXT0|{p{awI7TQx-Cg?QOr_VBsj6d{0?+WzaIeu|?*|dz4G5h|D z#b`I9_b#{Ty^e{+&x?_=>9svAMj~~KC_VPHZVwxz-@;tu!ZC?!BaXxsGZuH}B1#x@ zU?Y4RFQ4DOl!huvA-QrB&%7u$qy_yC-Cx&#?ZBJC&r?=KL+nUH5j7S+#FLJ_e1<1 z;l06_oriwSncu?w{cAaTY*)KzNJ#9O=6uzdnBLB_iL#Pce>~}VQGY3DCJ9 zfVQ4=)ZrLFe8a!b<fNqO?@B(Hu)Uv}khGZ#Um!*y~5C`y2MeV(+WHR7b1L z#w*LKq!S~@kIi|7=QonF0kHE9Gs&Son7MphCpd> zgbsavdO~k{CCXH9et-SDgqTZoEAL|7CgOGK2&5Y_vS7{vY1SOcEIp{rOh@ecuO#jm z$w;YBPI7vjt7$Z^09(=6U)NF>omNt>fZsJNVOu@NLCJ<)Q5dlCCQk7v8!Ab$!;x-t zI7eeH+vo~^fV6P&*re4O$fm$jmsJNBy|!bV%&}QAjA=w=4yDyA^vpKun#*Fw6R;7O zVl8;Rs@{(6V>^b(p;__3W={K0`4KXJ+5vfTKE%4N$L77yC=E?ki-UBPso)RYq5rh0 z{T&`LtKnTR{{ixOSO0hf(Zompu|`u>75@(||2?vQeCAdE|GuG4Ct>nSW?O0?$7!rh zRnsche1i!SP{3qL?j}AvYfSmu;i&s-0tP7Pjpn|20j-^?N6vCR#V4KRvI3?X_$*pC zlMQBn?6Cc|87blWeLyx7OwecQn-TK$B_1rZ^|d~gnS&B9rbCPFEE=otEVaWQ8mIH7 zW^8{r`MbrLvDRN-vh7wBI?Kau6h6Ck;V*2fbCvAoRWd|zVO?cn7=KH|5JYHW*vE_U zJ?nfe6tycq>+X8jY!P{5zvA(1?Bjz#-x1ks1uIqT!nc!lI-&3=fYH;126sE_l=C-R z((I+lbY$zRiyw!6teVL}h1sUr^X^UQ;09Ubl`|JW2~9QBWr9mEsIpRC3C53q@K_Vs ze|jD3GVdY-hjFtxY;(!Y1=S{A0J#ojYTZlE^lH%r!qCdk`Bl36m%DPz+LQ-OyyG5RiNtLBK?V0+5%sjM?Ul{-?gD7-+L$DK zj@b3ed&HOZuw6{nw16lUo%_j-zN2#*LDQCbO~J+ZrrMfj5|ocp$|3%+<2Yt(KH7Dx zVOv+Cp4BV>;v1dWt9dlwh2A&BA7i!FG5>;HKa+Kq9o@;f=8Fx}I(xP6b&{3PT#KoU zPy7zCCqbwpzdio@*2$8Y@5H*IJ2caWq-`&Q2BNi?t(BYYGR|hZYGhJGF3TpTQ(#xA ze`e+uALD)kb~4{wE+R6w75lDI;a?-O?sDnUoS=drjjTN7U82*srGI7$(J3iZ?|S}4 zZKdn{u9>uX;YPx)D|i1vldbeML%mBcg1EjmLtS-A{tyXSg+bU`{SUpVk>!<2Mq_4G zW^Mw?FLh@4$ji#kCiU2TKK%3^I!QOvoEVcP$Z<;x7JTI9Dn&@{MtqG_Nw%HpPC^xA z=hn}n*b7=thNT(PM_3#IaKrjotKG;WI;k%dmI%*5l*YN=85!DQS8<$tBjZ=Gj`WKmFd+iDjjaH>cLah`D74)w5c!7SuZ`ZQKCXg*d?b zk$c5OKRR;vFr!iB3XCRO{l$69&u+w#cT?$NUlYUo#6%WY<>^0Ro-kLFw>(7Bak*t3 zcUJ+thW+^;oP4vLX7H0X{GIea7ASu-^q2jq&0hwA6#<$>X-0N0z_9@KeF94>K-e5mtK=v-k;dL0z?NDwJ>GrkGcg1`>ai_N;}2U_Y$Ve$8*hDZ!2YhGwhNJyL6vurYH6W&=t z+)PePa*ca- zgwTM!JcZxQD`q<3uV>OC?2&a=izM64zAS8elx!Yo?*;ph0+0i%Df$O&72FMrE{@?Ad#2ULqhpErv>SU%%cwQ#vz4$b+I!$dD9xHrQc z^flWk;vsN4E)WVCoq`FV{S_z`45U%Rl{M+7kg!dEu@8Yz)<9Q^9ZQAsRHESUiYaS- z`_3d~SM~2lO=b2eX|_qYtD2@Xk3+&^2G|xOG&*v$ zM=D@ld#AKP7_2`R1bOM$GZ!&$6qRM1ER%Qh9*~_ zMzMP*wDKM?E2-Z`-@L9PFbqD#($H#kPAjl(j$9MLFZ1y)tYXBv6nC?K_g*p{_lms9 zFu9vy(fpm~vPTw{rJ-*tI{TM^*OdFWe`OQAFz^d?02y@pz9Lz%0#vr))z zMXUSk-%fo^a8s-8%b)4pmh3c_ERAu=_=GmMPjv>pP@w4Vv%7dBTc*s?Soe1zZ^+(#OKOR`V{r>>OdLv)} diff --git a/docs/images/summarize_one.png b/docs/images/summarize_one.png index 76a994e8bc7d248a3c943358d919a848689ef10b..985f9a6f5a7d6773c3e9a7940e857de88b1b67e2 100644 GIT binary patch literal 55301 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 literal 16223 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 OkeB`_RU>Kg`Tqi5QnTFv diff --git a/rsconnect/shinyapps.io/pavloh/bgcviz.dcf b/rsconnect/shinyapps.io/pavloh/bgcviz.dcf new file mode 100644 index 0000000..6239c2a --- /dev/null +++ b/rsconnect/shinyapps.io/pavloh/bgcviz.dcf @@ -0,0 +1,11 @@ +name: bgcviz +title: +username: +account: pavloh +server: shinyapps.io +hostUrl: https://api.shinyapps.io/v1 +appId: 6426702 +bundleId: 5975253 +url: https://pavloh.shinyapps.io/bgcviz/ +when: 1654270096.51746 +lastSyncTime: 1654270096.51749 From e0d131a545a9ebd0fadc6f6fb0767a0625c5e414 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 3 Jun 2022 17:57:07 +0200 Subject: [PATCH 148/199] Added new images Former-commit-id: 319118ce5f5191699f15675e74ce805eeca36d42 --- .gitignore | 3 --- docs/images/anti_all.png | Bin 0 -> 33590 bytes docs/images/arts_res_server.png | Bin 0 -> 67680 bytes docs/images/arts_thick.png | Bin 0 -> 6385 bytes docs/images/arts_thin.png | Bin 0 -> 1355 bytes docs/images/biocircos_color.png | Bin 0 -> 24880 bytes docs/images/biocircos_colot_check.png | Bin 0 -> 5885 bytes docs/images/biocircos_dt.png | Bin 0 -> 34692 bytes docs/images/deep_overview.png | Bin 0 -> 118099 bytes docs/images/deep_sidebar.png | Bin 0 -> 47674 bytes docs/images/download.png | Bin 0 -> 9424 bytes docs/images/group_by_hover.png | Bin 0 -> 71192 bytes docs/images/new_order.png | Bin 0 -> 75156 bytes docs/images/no_resize.png | Bin 0 -> 121038 bytes docs/images/old_order.png | Bin 0 -> 72740 bytes docs/images/pr_arts.png | Bin 0 -> 32702 bytes docs/images/rename_options.png | Bin 0 -> 25768 bytes docs/images/restore_box.png | Bin 0 -> 27182 bytes docs/images/select_menu.png | Bin 0 -> 10267 bytes docs/images/sempi_res_web.png | Bin 0 -> 24028 bytes docs/images/with_resize.png | Bin 0 -> 104139 bytes rsconnect/shinyapps.io/ostash-group/BGCViz.dcf | 13 +++++++++++++ 22 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 docs/images/anti_all.png create mode 100644 docs/images/arts_res_server.png create mode 100644 docs/images/arts_thick.png create mode 100644 docs/images/arts_thin.png create mode 100644 docs/images/biocircos_color.png create mode 100644 docs/images/biocircos_colot_check.png create mode 100644 docs/images/biocircos_dt.png create mode 100644 docs/images/deep_overview.png create mode 100644 docs/images/deep_sidebar.png create mode 100644 docs/images/download.png create mode 100644 docs/images/group_by_hover.png create mode 100644 docs/images/new_order.png create mode 100644 docs/images/no_resize.png create mode 100644 docs/images/old_order.png create mode 100644 docs/images/pr_arts.png create mode 100644 docs/images/rename_options.png create mode 100644 docs/images/restore_box.png create mode 100644 docs/images/select_menu.png create mode 100644 docs/images/sempi_res_web.png create mode 100644 docs/images/with_resize.png create mode 100644 rsconnect/shinyapps.io/ostash-group/BGCViz.dcf diff --git a/.gitignore b/.gitignore index f9ca51f..b1401c9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,9 +39,6 @@ vignettes/*.pdf # R Environment Variables .Renviron -# pkgdown site -docs/ - # translation temp files po/*~ diff --git a/docs/images/anti_all.png b/docs/images/anti_all.png new file mode 100644 index 0000000000000000000000000000000000000000..7c943f3a9aa35de4e26a5547e9d6d0b2ea45b9d7 GIT binary patch literal 33590 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 Wa|fKeygXdK+~V``W1>fWv-+QccmnbO literal 0 HcmV?d00001 diff --git a/docs/images/arts_res_server.png b/docs/images/arts_res_server.png new file mode 100644 index 0000000000000000000000000000000000000000..d82e16a711529952fc49c5624d747b93a05af316 GIT binary patch literal 67680 zcmZs@2RPU5`v$B%fr4Vq z(nd=B4b$AEjrgDSc9Q2*H{$=?HX7Z-pZD6I)v&*0ZDQ}JZ);3(&C1%+_=KIIt+BC{ zovF3`*t#My{LoSILsGWJ`u5kYtyomATN+c`v}NHIV6im5&ce;b&CPO(Uxg*-e?`meBC@5Gc&PhwCI)#t4IqIoiZXcf*n=V)2KF3}#dxzr4oo9ERZI|?w+abOE z;*RY%9KwFbCIuQe+s|Hczxl`O*wM9np0XBfS+i+Pot)%awz$Xbp+@XHQ!AhP3LhTW z{D5_2c_}2+^;&g-o!!`2_>^$J93>5t#aXu8H39pDZ)W(hIF07?Q#k!?zGiKE&f`Tw z0y~rE(hYl|{j(jO;_i!o3lf&Aqr__->^^4W;Luwu%Un`c)=$Sd=s#7ox>&?0eDmS_ zR6oy+-_mS5?~g~88x>pdZ}F@!;_k5(+~mk{`^@wJy`#^qE}?TC+H#lskOISTeY8^)KzkK7ajhYe2|6ZV*=x$ zLx=Dc6v=88NvVbMMIOs{X64VHpT~2HA3b)=xi?t-j(bhG;Abjkw~xOv&6{)VI6i&) zba>YTW|5HL#?<~c#}2%#Z-}nPUR_#GbE zS()ozzhT3gM^RBVc%h1gnc?OlPjP&h$XuuQkDou^*>p)JD27qqDlyPsm>zsyWy0h- za!TeQ{inNI_sv!4t`v_nXE+ZfzDmo;Sl2n;^*Mi{bf2oKYMND>P<}zdIR%9;wY87M zm%3=;5)#(hO#D8p<34lwXR=mVuEX#>fB)VFb=}^Nx7RI=Iu;pD_LLtEme0-2)kxD@ zbK=B_F-kOsi@X{Z*D$kZhnlxpOS-vBS9(Rfqc9H zc2+WUcxdRkn7dGQb@fv3Nl*Rn(GqS;6J`1HePIvx3qR|R^3<8zs^iqP;pU%TC3iN_ zY81K&Zr!@|OIcaa)2Cmsnv$xjyC^s=L>kRc_F{R&76uOD#eJsc{+0$#28M=y2YN0Ybp1Qh6?!dF|L5B)Bds|>bUIGAzkgS5 zcbigttClpLcM^*b%5!aV)MBdVvY)!Hd+>%Wd(xaH47TkT`qCXJUj6n;#@tlY>O-}p z4SF*}4fx~TmF2~$*`n2}O`cUR`0`g*7TMU?(hN#AD@BTwH>De1!SbFD;Vh}Cp}7?h zu1}i86g}ZzB*rH%FFQV_!Y@>=QfdJmtj)1^IHZU?t!1*l@Atsj~qD?_v%%KVcE9P zyfHD>g9m*&=7ZIBy6_Mr{uM&Gd#P#)N({QXe3{vKc!D@0oxJw)m@Ey9UA}y|1flIb z7$2g1H2CS7IJ(DpqG77xKz#=FZ`tl_!zjgaVZ|`+XOiV^5Cbo0q`hC?A$JR$2IB-B(Ru-p< zNo;9c>Sb(fj!oCvmMrVC>gs?ych<*hIsb(|=k*YQz>F(uglTs*RP6#ZP5fGyBpov!6P(LtI?EXOg+dl7?9<{O#N0 ze@B`>A4|=b)YN21Nl8&vSI@X!&t4rVdR|_B^Qlv(>~G%WzE;h6bF}q-U?9yw*?{$W zHIbrNdLD-%RV-5Kple=@qO|mSoQm#>lSN-@Y67#fPrrEaqA5*(U2ktMPUr8wKK7BI zh=?jWT{j6?St=zZCA{=IRB&*6KxAm}^@jcIA{| z>GfyX@RtZrdI? zUWTpB&CQ63N6()-HB6lhD!*giGf*3Q$H(X5#fzVCFq`t7dH($QL+>y1_NTeElxk9g z#_>IM_4U_HP4zx`ZOG2axu~ps=EjXv0RaL0!43P$@qVZdwZDEnP+&jE%e(8sg$rF8 z5fKshA3R_^cFYg)6Lu@-R~dU{Yo0vpWY3ko7|NO4U3WMXp?Y9=Qq z4Sv19{yK<&E$uBdF~=vG^svWT3)_x zVbL>HBmOEm*&j&2%iEhIxyZ;!eDh9P+9M}U^y0Hon4(n@ZEoHyMNvvg;Y4`&=sBYd zki*I-=Jx#ILu$62n^Y2?c768cahW#VwRwZSzW$feQrpR%b7J#7verxuPx4K1Q%=pxjc1I{V zRz*$OonzZs8nFMoqT*KHZTo-!$?A|vZ8W@g%~$EwXH(w43ybn>J5^LvOs`+>!g}?7 zrV*D;R;zDrzVGWx#dEEiji3K-ZuNQVj_%*Ti;I1>q-z{6&U~$WI8Ebtc6RpmUAycX z&LCsrG?(J+p0??vVD?-(g>-ZJ^l6rmirPVY)ytQ!sw=l$6;wEXz8keSf2vye@UG3& zle>DNvZ=VZ*yhHKHJn)wLPA22 z@)_Q|d2`xj`taGaXZd#8Q#Plu|fLA-K?^*vOrLGWn#NfV1G0;#Hb|RyLV6T z>!SnG($X6jJDmF?kb+o4DiUA6j?T?xaCLRXr+viv2GWvZeavOkc}Dfl`HopV_4YO?jX153nMX`R6alO^a}P? z^(bm#?Af8X2S!HNczIQuW+Pok58z)mKB8!CZIwHJ{xjaV@vwFZ zuRjpg-Mf?u?6gsClbet=3v_5{Ig}7qzJv9zx_f&|a_ssal^dZ(*0;9@;QiJf_w@86 zkGsU)mZ})WzZH1)T}H-rbMwzQaRAj^_5;e{5fQg5g6r_R+tpQ3#>V!*!OzI=#r9>#WkY=bZrcrS98Cht9hN2G(7Xd zsmq5B$2cZ7c3rZXUs%{aM9Z5uN15EGFS@zAlV<{!SPee!X5~!n)fsn$ z&q}}NiZAMixl+{5wqIX#udpp_9kNPH%gU0CSGhXnvDs(s$&)9sE7qZ5*?9g7qBB3L zI7?4Rus#L~eZX8vv+SXsKJYg|Ey;PNL46QqeCEaY%#3k;g5pS99$m89d7MU*jL@;d z#em64Ta>_Azj*G}YNU1N#Xni;n#t;-v-lQW-HxaThJ(2d_f9mt+$Up^xaYp~%Z>ze zW&BpHUjZKl9fo${bJEhdo^f9NHaF32S*Ik;T6@9HoYxp|@Ua}*LOCNNBTgtK7Wtzo z?^>kD^sFqp1d(0$rNsm3RsG0M*@p$m$0Lo0tqDXXE8WR)1pk%%_Rjkr?5AGiTmP>= zEK6ZAxI-0+i>c5>HRdZzySfUaLIU(4X;{0Y#C_6>&d(1=CV%we#RHYZk#xmt*Ej%a zC9!t1B1o0^*kv`m5o@irGJbiiXjP0H7ofDpd|gzHvHYoR=0D%Y#Kd&b9q-D_ahhP& z^_V|&OzmxFUHp0Vh?{TX<1y_C9JdzluzJYcCZKCfAVDKg9i_upT6<3>RrjdhiS9=-)~n(2+Qj0A82oHN6;S# zevq|~JZoEF&qW6Zfjnv~4Zo^}hMcprAaeNccg^ItbN}2|l*NC!Yi@1*DlP5N&!1{C z{tONoeg}7A)oM>FQNKCMTDw(UQ&S$lhc0Y-tYg)LP8Lrk{Zcpl^aTQQx&R&|w6yk- zOe`d{IhAhD9+gX%q_A!j0E130F70m(9{k&=&;Q|~7^IjhSFYgcaQcj<+F$UQH@!37 z!pFx)LA{sz&hBGstq=eA8&dcGA*mPwNgYQSySlni?tkTHp@}i6df`)UwDx0rJ5#cn zE6;-?{~mekp?~%4t`JZ#ga2K?7N&|gS0|@V;ODn*(ZB+V_)@{NxN z)DQmmm8kJR(lk_5R5;T%wzj$d?;p5$c-KQ_@yPLUn^VbBWC>T1B+MQU2*|Mqb@liA zswJIGR@0sGkdNPq1_LJ)zfh#N$rYs-^{Xd$HmIU^ZgH`@r{|7*{K5u#_J41D@`A0W z@}n6OI!Sw14TsUzDo(G?oc_ploz2&x3d#@d_!s`uQD+p$Tl@=||Ie}bf1Hv3`yX!n zrNQHUHRZKkn!E8I+-el*x5H**|8Qs){{8`yoIhKEKc2gO{fJOR0MIj%405w}zS9mm zIy&TMD-CCq?9+CA)Rf-0cN~;q3DzlSi;ju8UEn%f*WS)~JhZ(E+5X25Rn*`;em;P; z7gbawrKHyF@!No`j(^*#8-M>MUF~%< zGfCFR*lQV6)5EC${4HviFJDwumA-s=w@Joce3pTMfsLbMR%ly%dirC4RqYuk5mC{- z0#>aK7j9@EY?YL@&CJYzt=Qx*GZhxap8n>|1GH?NV`CTW?Rn+n-!)pEKY#vISQYSG z=fJ?+v1gNiNjsc)=@n8ehnU!kderR!Uwa3K8`A?9zkU0L!i!~(Rz8gK@e#FD%zZ)c z+O@`R27yoov<7wn@K_zLu&Sn(mhS$3Svk3lLJ>+$`~m_YNJG(TNrR24x`C_xR*H&> zJ^lTcw6z~bMKOC*ZY^$aUy%*`WR_X?D zDjv|@z5Dk+m6XJnxli3>Ma0)ye~&*OGB^I22B@{wb9K3qQMD1Alv%@3&=k(owX&WQ z(P%g8-B#xN@A&%asw=yXG@U|IdO=&eb?eqQTefVOpX(09Qc^REba;WcIt4F)wQ7I-SbqyZ9l)T~b*x}u#svYFnVD(PQ5cb| zl|_I@vxQ8u8joF{0(iB%si~>Tqd4$gP9uN*STbo!-K9Rj$2XJ9WQ2$VGq|!?v>Jwo zLyQl!WTjR;^+gwi_8-iWJl@fobpV^qTM=@yKR|etg_n1l%6o{!JZMHBG7xObyU#l> zeygeJj}OsdJ$(3HQ&Uris&ZR%bNQRgNlk_B!eGQAlzdeZzm%8XM+d{M6fTENLn1C- zeSlJxo&Ee|(b5y}h4oEMa(GwGI=T>@eIiy4|EiwV7A*D1hy`dc1j7*D zz4w~Q&lT8zwX~qS-**50eSR8VM@L7rzd#b6D^pQ!fFNv#4o!4=(-@>{kTtZ5S4GBV0$$ugJF>5exRtpp>aOCRn< z9`aH=W0|QrKUr}S#N&mH)YLs-NJX*r4#Pjw-R5oa{peYjO7^)~J=5ynb{LgU{G%S% zqp&c)W(#&PvBJhb02Rmqpm%^^O0apBxi)KJ;`_s_3lE$);qSABZZk~)_#~`+$p_1p z=iJ7d(Jc|`3k)ABV{z2VGzY&$lTE`}SL9BS32gCF1oLRO*v2>vYe z^bJmcJ11Qp4@n98Py65-6eH(-@LpI2z}0DQh5dqtkbw2 zxI{vXB5dN~;`F%aHS%tr0N)}q{&8LL^7qEZ5cDHrD|3eI3eWXuRrmSJY~HekGywM> zK4cRRXzW`AbBkT?N_-V*fI6_WGF!yK%DNU(jUDyXt5z|}C6GEOE&XL?$s&vTAA-;FL0|U$`}Z?o5>OlptQu=;B@7J@sw5JI?y0yp(iLxpwm%PiYIt^d0B$xC&tIm z#H%ciq%;&4OQMF+pE6hvnr^AlbD6HcI^uIh#TI`VkQe(%OZWQq>yH-vc4hk=A3>n_ zUE)WG3Ty~CSwE7=QEbA)!|D0Vc9D)3Bql)eo1~;rQCEJ$(ubcA@j*dSAO#Bx3yGit zv7w1k7PVh1%gPu+3u+G`p5o30J?FP%01ha=2|V@e*&ZFYiL>wCy#sA^fR)wjdVRtv z<8QmVw8f?>dGHoC{Sl5&aG+&mC{e7g4gE+Y$x^b!2+!{}Q9?JjurOK4Q$sQSU5X|~ zEeXURK?_SuZU7r-*iC9*o^_jTb0q3RxS$;+T6Cg8q1^#8Xq;}zU;f*|DC+X`>sL8W z?d*@~hGk&(srT_e1UT8bZ{IO(T|g34o;2qv6NrL=NQ_wW%5cG;HR~uhM&;oAGcYia zEtk3_s^H--E}a(a%4A59^3|(V5M=0iOdgIe@YINWMpH(r3g7|A`6&p3r@%7e z7?gkg8l9693g8Y@P>S!uk=@$z!4iz%&K)~GL1a58FAoNOwCv>2G3;2EhN^ zj;LwV`<#alcY<^U7xM5%cj-knHIpe1G^oNiM?QjcM?&1Wb7x)bwQmOL$~rnk;Y5Mv zU}2#E)2_h&86Snicu`wh!O*aqZ~s)X+`nGXvI~b5h-+bXY}GsGeVYUb8LB9cg(F}C zIB}}Mt&!3IMG##K;6IbwxCF4HMcomQ$k`BLkoAf`w|@RCMK1!lZP)OVBcoXX4TYtp zC8~4F(^?1_2q08XE_!OnGv6B;e6T{zN?=Wq71Y%BBqt|-?A5LXRfXdYfYa?wBNmMV z4lYV2kf{pKmuf!m=>6#olqO*2R)@x`Z0zi;LFIB6E|A3lwT`E+@!GJZ32N#-0jr*N z*D+&Ai{LxacN7!tbSNnmgddBTSR~?&KvtZ&slKX%AUT7|3D^z}4hAtsyKf(wfi15t zM49w{3m&i+0%!kFGnpO5IZ$ljUS*{MD=RBW2*BoVujUbYZ8Ue7GlnAuOgwaQF2olI zaHtV1fcvBnWolM|2)SM1ZGpN8nrsbcpyA=8M?oW&vRl5&%nU}AZd$+H*w`4o04*)8 z)auIe#LP@Da5e$CNI_5K4_R4Rp-)7oP>FZ3lWN%Xe|iDXq4XCnj%MUMb3y*+=y}V| z#>VBoU_UuE)r^dXb_;~Qg~f670~W2>k7wIm1D`*q2dyp%5gmm9hA7tZ)w&T z$RO*ewsrpbqX-San~DY>b|ytt z+S#)k=uYa4Oe_RLH3yHnJ*CkKneb_F@TSzP%*-3$^pQ>F6cvp@$Em8Rp}2n5U0qOz z3hvu%VFC)Dm!JPhWMnm%q>G8FlF_S|AO@X+ECet}a{h-8dkS<;_Gpc@<%IxsKY9A} z4st)-18A;es0P28OC1f~?ETzvti6ip?vgR6dwSfVhjDC>m`TwFcrxdVRZAjIK)qjR z7ivS7LsEl0P7!w~HK@ccF{t)letv$6fuZv8lBtdLt*yw?9}Ut`7!s3`4gz2SyyBG0 zV><)&iU2ne6i`H(Axr@yGl6EsRs}tI!b&|lTIhHrSU&6rosXmh)+_JkpWn!#;=R{$ z5B*1+^zsP^*kN6u8M?lwc8_YdNI={N%b&Hg;{iL$%g1*EDkw;9R8xiLTx%c*f{L*C zixble2!Z~Hz{1UKpBkT>w@BAOXZpn;9UUfG8x&F~^XMQ@8xhBNb5m2(=!As3$R`_H z`1$$k@Mh&kI|Is$xKRQK$N#Dx{nQtvQ*x|PW?%-mI+b%A-DX$KJ9I{z)Xaq$N)$pKqvdctT*rW!-0Wv)tu{a%%va_ ztUw)D3V;YwGVq*z5W1XPUAF{_;G~nU1Wd+p1)`3wAN*QXW!(AkHrAgU84nM!b(GW} z>+7e~_gfqeDz~w-GX(t%i$&e9U*CorlIDN=orG>kTox}uT%q|#Lc|$>-nTRot%-LY z9`?h2DxN)d`t)-Y+sU6=))V;W#(1a1%actj&#u>FZs&->Rz<-o4w2*hQ&uDPTf9Ly86S zQmk+gv4liPa-fZgPz0m(mP;2V0ejxD?O<&WjuRrUB7>O0e%23Lsf2iPi@A_00RN(^lEEsaZn+ARR8_cB4|IbUDthPH;fp$3C$Zi zZ5b57kK$t>8|Y?`u0=U0}XTy_fYpZv~{;D6uN!Jn)uZ%rc*ZhC(gU!x2JxN_ zzcP)W-n!Lzti3?;?0_awDCy`pdR8dcueU*`PU0P;8oFSx>i`QNJyE@h!iN5?9I*<- z2_X2B-E?YVLLXiQHV%$;A@%FQu_1{@qdeTYMSRAatjEjX6J1kPsSYjNZRAO1p1#&rqg$ zBM?8TO8kW=G4NV3uX-2ftJ}&phj?ovvxCDVtN`k)^Hkra3>x>STGKd?XAt-h%Jlpe z^yo>^bETU%a*C}k*~tVj-q%S*{TB-t_l!g}jBYS{Ty7MOqk)8>FZ8*kA(ct>f@kk; z##EKObze2I0$P)`JR2sz2Fpv{-5P7tQK&oP3Xa{Mupr>gHf`BLD--P4Klrn;aSKgo zbTkW5Gl3uu$~;V)rv@@YpZ2x9dv zQb9%r&*R6Bp?F>d(Rlv6AJ^+7*C?z1Gy;{YS8>`iZ30p&)qN`l1<}pG%mP?%cQrVs z-L1$~3ncD8mit}km~s}C{Rvvc&Sl2z z=2$!O;#O!Kz(ySaV^cXYs;@82#^DE1 z#eT~>&1B$fP(BBcGOU79YMYwA3XkP~Mn%6vHRe9sRtC=Sc%`CyuhcK7r-042c6Nzx z-t6=m8r`4=s^kp7II(`9LKcj^`)0)bR6hQZW7F~@uL>H2*xGvv>{9V6ILvo=ePF;0 zm-5{P#^laea%w8wS}DI0uV#zU8zLz8@HjpW4L!2HL7X&rcnt_)IKZeo_!lss04C^6 zk!#;2+GrOXxl;gLRJ1(?L>$x~f*^!vZ)crDp*V|TY%P>Rkig>f(dbp6 zRPXWYrJC~eJkm%D83eGX%PG%p40IH!${RLp03Jd5kg&6x;>+YdAFqOAO&HkIo+~0? z_`-!91CYs(gdL^4hIDf;Ps)UAp=$vqhT#CZF4$o-cf~U!ot^ z-vw+>_517fcUG+vRgY4ujgE}G-^=_x;%{vPB{Ez&gum;SmWOzGpTc8d$jg8&f;(`N zpQ}TS%1gDRO&d3+ZF3Z(N1PbK9L;kTo7-rC+OPQM| zZU2~?lXD=b{P4+>5VX5`dk=|Brz(8P=H6~7Z{%gUbI?zH7gK z*P~qzqsn(6c9~c>R5qSaL_UDGZgY!+gTpCsw`yoSa`*oBU`Sv!8T$kep-3LbUuwRKKyYia9G%6eAN;RSshtuhMW zXL!-xz2heIDp?gs)t!nK#n3Q8 zhkJMK6kHa&yfo1XfNzBe#f}yi6vMjJRnIaD{wYwMaYF*6x&-#$co*8e7w&G^3P?=N#=VMj-l4ml;N)uk~a3)XE< zSbUFA-}S1<5G4c}q|zCoUO?A<;AB{!EyHHBW!O_*@A1`z#v(-Ld#=mcj#u((ZaBUufyM#6ly&Z$ z;EmsRxK8K-2O(LVk-IXWrloZr`IM8B6Ou(I0Pm|;uO0>Nr=>k;;fg>>s`;H?BISY7T|RfKGXYAsn)G84B4C_clwLu~Wr&38%!Q{w6eU#Fye$T8`fe7Ifw zuP8EZF|V(Bu5H?%DiqDv=;fGK=cv#n!Po$RPIM@EHi(xUfX}2l{CfQ*173z41X61K zyu+&lilN*-2(HGHWBg`9$0qO>PkQX`%-7Q_L!Jsex{nHIhuMgKKjL|*-W@u0bTe42#Kg1>`o_lSC z7SI-`86F~dFw_e?9ct!vLBV(~H+o)mxYhsXcf$GxfO4ac@2`vM=;m4My&4f=WZACJ z30E20p&g>en`PBfOPxw~9j8-@jGO83rmbc?{qa%WSZR{A?yr3eHh*V~TPjW(a?^9| zr8ctuB|QXRxn%MluOU0xfbX^wzfz{Rbc{`AbA@Gike(PW;P+o5UdG^D=01q_h`9%s_0oW9`&ZufU*=PmGa z0L5V1#g?ZpLGMONL-RGUvN(p`=p%m7$36&sDsd>cdn{U_@d0i#?k@Ew8w}=t;~-zh ztNKA=2t?yV^gwV7aC=u^qT}4zvp$MA4ulc`v-kxn$-R3U;fb3EZRWFvAWgIqXs01i zQQ|$S|4aiuec6=jgj*GT3Ly+(@!NX zjA{?nH^Z)9$<56T&NCPa@4+7%mfx!Dhn5963chq;qQl3J8-b}N)X$Gg7k2F3du06= zlFVR4Kn1Y|7y$q14WlClXNZ3ndym5T!#p4j4FdcJMp!!(7NQWW42(#N_u#>yC_j1d zU^6(9yV9&(5S95e@=gm2!zEh=I^78>z&w&W@nReee&@b;ldR2{=c+3VisrG`+c!{>q1?s~xExrtw{?PNEr(76b{BYs z%=d($T{UOobw8GSM8aY8?;rK5#L

    tsmk8r{?}25I1*Z+NuxbF_5B`lI@mMr*!GrFvk{E}I3fV$gS@{;Ucn~UOpY0%L0#WGLRiHaqhgTu3 z2^c{ANKKeyfw}ey-+Wu;2!8szm;05^PklD&+MuqkPV~?#SN3+e&+Z4- zD4wvVIl7SU{HDr;ha?)P5YR-n@891R>!Uu~2Gcbt3X&C8j$GoFzuxN{qeJQ=gnRJ=yZ@{U zB?dW1K1E?IZr;2J_h87$!a2$3AC8|mp{TK^1wmNGyj#UBLo3 zJ~j9*dXJZj>k)BqtrHA_t@HKkPVD{?EF!Y8wWK`^326-E%qM3atsNAhw5mc37YH26 z`T$Vvxjd}vHdQ51e0n_)2r_p$EbTsf4dG%!$o-pW!jUG&2DHznBa&#K;1BghSM~Ro zYlEnd{;a(_$in&ZMhvddq4C9$^~O97SxXF_SY(ia4WuVM2nR%p1NIII2`NLO43K7( zU=KQl*$$`y$9wucizK35Z@mS!DLsX<4TFH3f%1JYp@;!&8(;tw1U7V_sP4!2Y{8@m zH9glE({oSc*c2j!W~gMpIHrDeI)pU?d*xF?pAx5hc;n{HzafyafMbPcWAm0=dvUka z9uNwsj%4-(S&l>{J-z7^%ZSxQ7x?diJzl{WjV=%9!bSwjJTbCAS4c>ryaEay=n@U4 zEbKk-vZ%KqA;W(UJz5xH0<~=1SA0o=zBQqK5ECh+T!Hr?E<-@<|2bUrKHg$F5k~C) zWo4j-kZg)U(t>-{?>$Qae=9`kTTsb?6A;&3=*vJCf=%7NHU@nxnUaHb?L0mXj0JoI zoxQzhwY9^mC@PLzO0XHMJEYG}3#tW_4|+<%fuiz&bSK_Z$~1>CQP&S?&(CI!{*(wR zH<}X8&Cce6V-rLuaR|do46pXD_uF)?<5Xj)BerpPFP9z#vTkf#ob>a3f?{Gi|EM?~ zjMgA~LlcJbuzlxFFSVrjw{NK-TG*GpijN2MOcDC3ic@a+ixd~{QjTwMs=w%2!Y@-8O{>nR} zO-K;1`4Exc4xy=&>W8uhVXtf*jfhRdY?tkZ%dhIu-Hp%AUc*Elp@lA9T%(&({?#7EUh@e}i`U`t@Nf5{4vL*xB#G z4c+1*Bs#aXPj%hv_nN=^s|?3hmzi%kwx9bEch1Q27h8U6-pd4zOGne|2TiR_qhm97 zXBLPab#;x&)a)O;-(V2)r^D{~1L>D7-k^ip+O9g?)2*pOYXd{UkxG9zKF}57D-(f@ zS2=NT5ZR5xi)f~snl!>TD7(~S#nJ80#(KDQ?4cg`2QJXPg0?+0YI3=W4Q2>PmxzSau#gZs9Ngju_ta^3?koll z`y1P_Da3Ve3R|!|Y^?eiNE6Q;6P<0X@8*N~0IqVE{Pu!ym)W%OfO{0d~`InI-N?d#l1 zA&yeo74Bs-2q47i=bFz%OKaEgBW(1nMyGAcJSZfW{bz=;t-yq#{Fc8QvYvoS2d7<( znGg^AmL$c7Bah`UwrCY-DJmjjkrJ~;VF7qRDPE5UoBnfzBaPdznGC2`}nZKdVqgX&kZ z$#hY4bo4Nj)62%;P1Mx+L!0#*zoE8uERQ;hJFl*?A;;w}3?+%0lnk)LF!J~BN(0^E z+=ch{gLO<(vbvzs{efC_b5yfF04=V-C^O6O=xDG!GK$Oo^-Ee@o-1yEh(CuNFz;hM ze1*q~4sRb2DHJ@Ac*!+iCpbj5TA-tonXc?EM4QS9%EKs$^6r?q`B$L+VY1XL=Ym>G6Gao+hR|HUBoQ{Aba#nikvXD<*A%KpKVTlS@978 zEyoIA$j_D$hV$;?{Ao0t{g;5PuB!Vih=;;6Ty?dhv7)}7_QHjlu&dOyHEcQJhX=BF zuJrK9xpr+p=W}Ky<*Gp5;g@4q{(nu)>W2TUz_KyQ7~u4*Prg_50Ygdp4&v#vXV`Kb zme}oJU59t6l5Y3^>5Wb)IY9@- zX>}8{G}%C=voXrwab%LJ_qp*UC$9z;2-74D<Bf5L4QJOIJ#vl|^yOJu z880i0?7VgA{`;$`{S(e^)y=MdG8@H4mamw5{{7Vk-ciYA&E4eWKeL)ODAzza@i{(4 z{wpgUK#s59zBO8!n~;h;M{p>Lx}LEyDPm5q&u?EZ;S?>s;LAcSXqk> z%yllX1rYdk4LyOqqoe2WpDkW28;cz!);D;uh$urOCS*LcA{fE0=U23-ZIIZ$UjOt? ziA`-Y z6B~=uxL{NQTqIQKn>Rxe>auvb?W6ZMzS$r_zh`M_X(J8IE6CJ9-&9xkdem8BQzt>Hlc0(=bKC^+G}TUbvyfI)7~@OR~Cy zyz}R~+MFEdr{NF=bMD;pSQgJjy!nQIer49ZWkKPbo}L!@fBp`P!;DzpSXkV#<#<8p zI)oSIWmtpRDgmn$UM1fHwwx@5RfP54EQqCjZTq^%Z&d zvWf~n;Nq7U%5uX_Z!8vHk9{lVVhgF*v~_DqX({EtePIVuuOa?4H0beG8k(9OfqeO& zU|I&_2#8ZyZwn7XsE9K+RJp=G+z6FBcklil7`P`HGpCew5?{7)_M64kGq>b4b`{ck z9y{sz{qm!H&}bC-li!ZfWV4fyU|Bl0U64Eg`G1=z5+DElVfGw}!2kVqk55VpP42e; z{dt^5v2x|W#?Q*0p5lOzAB&5<01Z%8ec$T<*JDJkOPc4hLt<+QJoxM3Deb<%f#+ zgajDFZbM17F%(C`4+|SN!UU>L=iuP=cL6%7{a}M(bs>Ysp`m*ry94zC0@}7%qRgXw zOJVu}LMI0so6+}{gAHbUn5f_t5PouexB|Qbn%iJHMvD#g zhUONalDJdqfvpi%HU5NZJBPEPE8Gsi|!ol^33pLn| z9owR%rA2&9$UELCzs2tm<2=L>Y%M0jaXM*0$m~~7(T;iZW^<+{`d~J0?kDhG1Wn!0 z)nz9C0kJzeYK2Y<4n$a)!RUAc+5$#n_v;!P9b5h=VtN^5_1K8^$yVln!Gx091kVI) zEU5L=g0HQ>xxjG+$MVkY+s7j!Oj}x7h&UF;Z)t${&3YS%u{}`J6ksDJsc7CDJ9exY zL@l%ze51U?_#fCIQgn-|SC$vi9B|Jo!JGrp5PUN6gX6(8w6yB+S`cy2!V(PxK&i&# zFHcak3(H2u^XFrsUl$gNfzE?*3A34zPQN#S`&9J0m|gq$C?{thaVVFRl(;PnzJezM z{<63;g%}nA6GiSK06Tc)y=iT9v}SCrvaaq0^z?wsFl}{1%D|8^rR9`WZeAW?Z^?WZ zW;|Y{rqb~6@G$P*4}MG^yb4@v@}Cxfk5Ak7Y@`vL{+>qjrU>mkKAMzbcxhhd=Dt{+ zU0q=&fyl;oFWTka2kQ5EwMiu4c#$mXSVlgIwpcfGlp>$wey$BOg21eI0O>y1I zs#K3l&%{Iqb|b>%!xaGT1>iH}q;4N~u&TsYzt6&1DdjqfIs*KK4$6~cQ8-|2JsS7E`Q75P0c1=0RvTU!JOBpf0z z&AHu^n|-`6{Da&C=7GHfVhnz*6a+TJ@XyW7q2x0%GMZuK$8n7Z1w!s)s2_}*L5YUq zvNRFs8TbDE(?jQ@cYKh8sivmJK0IVEL|oyp3Kq>*Srg(2 zZ$W`GYCAJ@8A@~&?(_PfgRsm?)K>Z(;!k>5<;AZ*g-+efw zf@;GIel9}k+PkXTlcObPA}EJEr~Zz{+rcpp7y@c}kO%pa4!&pXWBkbs5 zF?T?$f7tUIPHB?koL6-PxEF0Q6>i>wNeL329Y(M*)-U+mI z5k3LpNJndeK_iLVJvMM(p9gn{#AKTJ%X%iE1o4fN0ZRTiq`6=fVKQV7o(prFc)7o$ zZNjGO%aJjzUoS^POT24Pk?I^#&N1eRM*Y;`xqOs5lF(rO0IBPXfuT@0W{mU`Vhk>w zpFe-%o`>)C^>!5tsajb9GsEO|g)*Gz@`{SQetwEe4E14=$R$AAm_&%D1->ij3d}ILfPll)u0Dx13L{{E zv5U!LP9Jp|&gflqbhM0&mAG}r3rCxb;UFQC8#GjphVowD2^&Ahfdl$qEuAu8qfkrL zQ3Rd<0$G}VC4LA(FGrNy6XxXsSn0;9o1|ocU0kJNMtBQ#CT_7(s!a>xwCZR61mR{5k&H1j4u=H-FKnAr(Dfrj}Oq!wz*9% zzd=WYdB1z`ju5pISeX2y5Ptfi{B6>)96IDfE@VO-g-sb29#7ZQYNtGd>7!;1J2^23{Jj#!vP2K{zo%k&#MZq+w?OHnal^OztT_ zvD+)^!i&Zz9)J+@8Dx4B=G(pS!$LE_CXsvs?;2>X7w2+=aWMrhO4wJoa)^zM+=K>c z8Jf>=%&G3$v&R;5RyaMrsi`ONyMQ4;mw@P8^Lg(wGfTdGdw|!&ln0We_Xp6nRb8Kb zi6(pW=(o6xV|SA8B)H%p++kwB682v61g2Eb-h&CZZoZxN?p-l(9F8g;D9-+&^)q5&L}wL>`x?+r zl5Pceh9DM+b+x@c68j0Em>BwD(y5b*fFp_#_h~)z(!;z9yx~_e&31zwhK+#WW#DpP z0}{}%+!EhE#h&9DA8{ANz}Oha!Gr%C+>T>9go!$kDTRvdu|4p95kwILx zC~NKMu_y@OAAnKT5$+4{1ugBspFjVzg>!Rr(~EoLPix_pkUm_MW`djYpjmjKmTqGf zJMRCJ5*Mc6a=&X)?xm=6P^*ixHow`we?O6TP=UxrV9>BI!ik%KaQG$UwHO9OU`d<6 zT*?hx$_HN~v@SZFZ;`)EhW`f3NGpq}d@%OF4Ey*k9x=Iz;G7cwB?t%Pg|z|#0&tc9 zi~!2*#O*i`er&qOD$tSx!_)5H@2`_uhR&A^Mude4_e8tk<|OUBoBr_X%O%=YRaIdc z2S=3==>i%IcD=H)lF~t~*H#d?1`tLjcJD6LB-Nup8$^G{{T5_?PNagX@*iQ+@+KuE zAwQoH^$of9?#yAn*6hO@FqMuu`kOcT#g_*!q<{FpWLtn6{@{m}f>?kHxyFoky)Gz- zK*xClCk2PGzhKxi*urHax}ve(e2I6AX(P6^c5s?m#^iCO@z5DmW_^<^hO{HUCJNqIOo8?m%(lnETkJ1mS4Opn$3J}JNDK-A z;^bLe99tsKX(&C=XR~oN6A-b=W@!{n7=Zwd)_%w21@t*s`cUTA;F2q-AOzpz330{_ z{FxO94GS~Gm5OZ=={TpqeldU&LYxzLiS8fTupuxUhR{J{C;Ue>C5FS3N+y_z;T*a8 zp#r-hjs*A(Lw$V-peUsF=V4(y7#D))Vhy=W4s(Cn`A(0~YkqHP+Sod9Pv-2|$8fdc zVMtd(?0Z+QiuNqmn`M&AA{H01<)xsfyg#wH^FIm^AJ4LVb!$$|^8yeYI^%U*j-#!f zFQ`OTL;s7RT-)BwNOO4M7us`35=Ty+44HI+pAFNy-z=vnJmnCrY)6kiKxd_lNj0=( zuuK3NkpXnh= zBWKWvun7vzf4DtJQ-vzUP@h8N>6>QJrn9bwxvCJeGM`?uE(QckiCS8j9?7 z4s9*U2(Bf>YA~^D>jzZgnnM4HIve-xa_a6__6d>LydQ7~$LOf76AnL^3WKqojSUMfcZ3HFEjolb?LxOuP#aK-(-#Z%2JMBwx?`GUA5!;Q+~W!C zAm5>`s*2?}hi^rXgcz>x=%~Sr0dfeaT3cWUlnRe=-^U=sFc68sE{L%wyp`ddfV~f7 zm&!hmp!oPhWIh$Bg!Jbm!=SJMIuT$5HVIgW3jSP_IGFCe>$FkL$Aqp;pJ91fKR7Tv z9JDqZh4;mJd0e?9E?#tixdoU6 z{UrFgi%AV+)(tIV8gA2V8I4t752{;_!%8K}xTv^}$Ba6TwM_vsi}GRg9a&Z0R49GD z09M31j6_-2)`nsBn4Fw>*Tu!rfq_mODwH&U{KN62HEZK8Da8yl>}1D}AIG&g+|H)< z(Gj~gmqb$~CBJ=)H&%qR0p*%w?U26wzg9p6=wbKn-74eG8K`zVkPrroE%fzI zS@a!!R&IoMC(~r))=v0B?t`Vp0zR8G?!Ti48KwO#)}JiJ$=McDbyx=0chv7tF-#?XL~2ze zLs1zTM53h0Oe#r4M3bpfi3|~$Nit6%Bx52&rplaojFO>H#!Q)#A@jJ;yY>D4_OW05 zj$^<4AIIM7)mkk*KF|HR@B6y0^E%J-qQdoxYK_=ZAbH8hy%BDE_#o%ATYVOV3+w<3 z7Qs~I78hp&2cJl=(*W}X^i5ey;68(!2`jp+z!pJ#!U0=@y8`+MB*P8i?xCP$!-Wst zJ+N_A%)M`3h=551jK~;cm<#}60wBO;i~ot&m6@4|)xj52@Uc)*q6h0PRz+k$SR0iU z#C_ywA%Iw@=ytuI`H}h%oep`ZI#6GuT3o#uWxOhL-+R~CZst~Rs zAKytx&$1q^9b((Eg}d*;Ht*BGOJLbXP^y`!L(Yyxv!G@tPrk|l97${a!31pHJm_eV zfSy@Fnf>{Gt%NH|xgP~>!<*|3XmTLX5DE+N4S_2OSiGpI2<)V-Efs&5@Qz^;fFN~ru&7-CFb~cK z7K=MP#8Gkmj`qf_tXHJ&|MaRVKq`fjLUQk|awO0&U&5(lMYbQ6^V+#fXI6s-eZ^yN zl{!*5iZ0n&Z+7bIs6c?R~z0EQ0(FKD-UF8ZHDhY3y~4n8rPg=mEULRdqKkxe+OC=#B*;RHSwp^RRvFHxm zw(FTucf}<15ziL{e1s{%bw8z0uK&mDgluW(Wl4*XOvTY8!2f|!22lX*j7vG zc$D-=yE_M84?yTeDn*zMps5Zp8Qveng9&OAAVgS>RYr@3=bjyOq=#uVlu^OxY7jcT zl2YZTPX=}2Z;>7176HqVxT({Nmn&vV{Oy2$C~7TSb9!#M9tk#%ay4?7s_JTgD*slr zB42^ch`N!9fnhv3>+V6;7?#Ulo15{ai}6y#(-zmMo9Z{K!tcBVo0 zOK-3Z;yZb)F7bJqg};snNJoGQOFvmER=59`3-F0HR;7x-l;AB#MJ{=vlZ1XeaU_Ah8TmJHn>f>I@!$bSd}`1At`h>bB|OQ|tp*A! zH^hbmh63~xI;gH@mt+nE6WSYEOmId9?V6aJy15l~c5-H1m5BMe3TP{?=h-ZW1tA>! z*oSwc?oYuv`nkB-&;EYbtI4+!*3kGQ>Jy-%zEaDx><*(w(2t^jL z+~Mk2i_17BQ1}tnGbCc*0mN(` zog7>^ZUi*8pMDofJoUf?jSAVl290QV(8&V1oUHyK_9iXu8W;)acm$|tP_OC%HT8@7 z8vc7dB^)p;{4aOh_1t1|M3k^~T+#Rs$=#G~_wMi(J_$`Qe^ez23089uY>}!!&Bbx_;@Aot0 z*fwv{HRj+@M2U{{h+jREmV_#4IO9Unw8p^DFm~%nydsEEck=SO1E(=CFn}8yAXOS< zIH)4AHx1fzr!ozg0AgsUNpTMKY^aNoX^4MH=$m*J{~Y6(y)6iJ?-V-oKk6!#7G zh<-W;St0W(hR@278!_{TbcO*e5&UkHeo1J&K(l~f3PUrj6_O!lqznXqK&=6}CBPy; z=PHVG&UXWqq;_$S}$Y z?p8M8&q&+wJKw<49no`;MN9Mxp8ojOI-Li`kW_i($zNo-o?Yy zFMUaR0@ie^#;W;J#eY1v6+;Bin{1FLaI#T*?oQt=sJF%zI#)Q5_kM$X zdJGmkZO8U=1MYz$0G23A^noQHv|GYG34NrT5rZA%onyy!)48s6mz~J~H;Y;(; zLp*LFcOM^^9(EOI(WU_gv(ZAlAohC?uQTLr^ooae&B3xxZR-Pal)-Gi*Gegd`6K7_ z#&Y`oxUdl0mNE??0$mDMbcblw7MQth>xhW3uy~pd3-nD;Uo5mX8UAoSuySVA(Kcbu zLM-ZlS#Im^P*>MVP2JlJ%X8%VaM=m&2iA4YMhhlGPM9??ZWCYM4lD_0yjJ{);f9%t z^731C`)_x(qV3c9eZLiqw)9-wT20K&*)uIR;cS5cXhQfD%aot=#nJQ@ZUfFkg(j|gA z5DH8LD%=OKDZh4TWh9*N+<{{t-9wPZl$D*ymmvFxaV3%xSoYmMGfapVK6ct>W#_;HVi!ikZT!R+r=kNL+E)t`1MWt&Yk$b&-vIv zZ`abv|9Qy&<=OvV{4wv;>aMl8P|9J%gp=wgdEdeURC(8q4z0h&+-J{PpI2ihi_xXN z32d^(hx_*J!=v|C2l6%OVk033fZGi1aa?k!6k%|%R_)xsE9!?|-?jEBsMshhKqH<1 z1d0~C&=ljSi+}_oBmm3hP(Av0*|TNQRd~$#1Xb|a*ol;n=Abc9G8q2;;`h6Ntjs#P zGu$B`Jlntf_R4?0`QwGZpv&KPm90ej5`TX+{@65;<~pkioNl)rJ^Os!&3JOP`udUu z2kUreYX86h(cXhBaryw~yk0Sqz3gmZ9Ano!pT88Z!-p_6gE63MeWyDD2ewPq-PHUw zMQC(RJiNQ>@2f1N@&l#oUxL^FgZlNqFv7}yaXvaoi<$*vE5PBR!99V&4|IC@xLZl@ z47DvRzfMMo!090Z7%=2n=u(uIl-xKo92gvo!32*1?*f!&ZxB6++JTHPL1T~fazhO6 zEUn-sAa)tRWyo+Agl}BLr00lh$M}5*xISb7s;bse&}Rli3c-^MLO_QV(A}D3+-Rrp zfiPx3?;a$1((pNUtf{vq1ZX}P+JpWb?LHzBB7=@V5JDaSX<1BiG94i=gaJ%O1Ax_3 z9ri!4x-A1`0Ch2_4_$+URVZPg*(t*N&#rHRI||r6APu;@em(r8x{w@i8kAvR4z;~y zUj?5zxGaEhgRw-Nqh<@}1`!h-#JPa5Fx$?)TQ_gkp<9Hv2c;Ph9#=F%5vmXyDjFIl z#NwxtHPKT7re)lyNNxBF0-ean&KZ?L#8;x-fI*6U5Pxxd`;yJ~&-d;_X-fPWP>7T-i88n(D-#$7O_Djc0Fi(BOAVn z_jI!0qP;fRi=|JHuwuXp3DG@0hkKc10Hc#Kt+6o>@R>QZ(G5O&rQ_Pc^APr8 zmBGdU$O&+eI3@pUs6fPPigBcZ<}Qu`EDY4TaAj$f5D>giQ-eCQ8`^9Hu1%XZ?a0u9 zted!)pN%y=UpEBfQ`iX}Jbd^izA8z8u}jh9JNHUva(bHhm9m?vL#06~RMJe-#RkPA z5rcZ*=%gN0r|4$`VmD18gS z!o$J=UW`7!muxq5jFDgVK)#89B|+1O@);!>UfvFK{oh|ra`ASEZAL{!$9=KQXtct_ z7L?$E<|u27i^21OO7YksB+7bad5J7IN=V!}f7*HNL zVs=K_9L{jijgjyIv>yo>Kw+FeZZMgUQbIRHMf|nkJM52o+rgpm$V0;TK~vtCad9IG zZJ_^SgffMz#eSi+6V8)vz*%ucA@`Fu$BO~W)CE@^j3rH$(XNY{1)CDw?HN$5Ice_IyV|Go}I9GV!=BLO0#&~{brpqGB#7_E|kUNDHlIl3Tn!DHdX3rM-zzT~3c zOR6P@g)9dhyl-@cr+q5t>|5mGzATkyj!RKN+69p-8MXlXEX3e9z}pEK0iZV|O734n zK#crJ%w9j0=~J0k`<{OprQOWnG(aWJYGDKTZTPP~eW-7G*%? zaGQhZf+AF*;60O5anXOAvIl{jlh!n>o>8(BmLo=nfyS~Og(fwezom+YV`Dif&eIja5h4qX8US^2z$olo%#^pm zgb9tzZUFx1rlW}t$~M6~z=XgHn4L;>ICu4G%l<4Vq6tkE)dlg)h4aBGAuSi8ARv>_ z;H83UTsl?->=aKxjRZsiV4B5$0jyk<@*rm;C=>mmx;7UOFccBu7=8!K#EbK`_(6cp zDwx&=Ced$JRr=M}^fR_O6+c8VgKcy9$`!hy0rVFU7h#;9JB60IT`Pk+S|$j#U>qTC zT*nc|7XUM=A<7)>G$chs%)HF&k(~S%DKEKm1j-!@x;T-1vGYw5pnAe+FhnoynvTx> zRxx2TZWo6x6{0)~X=88r3xVN75Hf&JqZq_P0Kvkaplc4_ci=*Zqaer9VV|L2g;fTx z00y9F#^YIlZP6k>=WqNDRx0SoLcVsevp>=;8ijz2C&xER!@-(^nbi%@q+)lsCw_A5 zF}uG27#Rx$0Pe4OP9-9TzAH%DdJZt}8N(_uwfiPNS|c0E=DoG83+;t_oh0f9HZ z19Vd~?)Wuxp8{y1COi&uoaTp9LxhYYA}XEjtm-pGi~=9ySV92o zxv*V9pCq^wvJBu-$dr&W7ZV=S_gZ_x=5e*Pwg2beTM|AJjA%B%$Q1RwXpA|b_u$<^ zUyWe=xi`j+4=flsK$*-<+_Hz^xIDY_dZNe&_sbWH2ZEV za6Erp6=3#|k{&!PM4G248_uqxwB7N_^(*+emkJZE^;Y&|oXd9vrG?8SSA1Rmtb#=V`1(=gCN>aBF1&}<4XfJlNV9l|Q z$&>{Qqrihg!8ljSx%?3L33^aJAazH(jsiwD@qmYq2I%TfTFiht0`VoUoD4$n^_7kL z60*99&^#ArMs*?iMZfCw{9o1SBt0Y?oNNY#SPWPsZwC@2w0Xhb?g37zQ~i{; zAs5k82bd0$lZMt-VrNJY0y5|Zv>Y;%6X+-gXvl(>i3d9lXb30`#QsId=}F>}+Dy(3 zd9PrJq4qBa5`|_C0f&$PyDV;B01N$aQc@D}?IwmN;BO!lZb7bz_=}4GC{aLX1adz_ zqsW!TeqeB+X2+0R;Dq4c$y`YE3eG(mLV^oRe+aE`{}_GHv&9_&&I94v>gy*~iPWHC zKutLqrhkwX5E2=##vQ)wm^BBd+4oML3(*5!#5NE>>?iC}6bSE|phEFMPEMwYl7PET z6s{m>%z$k22g+Vry%qa2|2d7|79rPzEW7P!JA(e%m%FL6E&}i|Z#D$mhEVnt6ujhq z=Rj^t)o1LJNm|th!CNBp;7DFd%rKCnf52YYA1Ja(RU1U7&gJPWSlB_~Q-KvF zoQ{WP+H>1rJ~xJ~k{jn%bXGbwS(!;B6y_S@_!D3NV-ei3GwPIf&>zVu@$lN9|ot zykLEL7y2_Lc=P~3?jm|IfXDz-A;3alY#2yG>V=JCi%F=!(I&{?TEtLvY{*+CUd&)H zp4`ZWdamlzrD zqJ4|laAcRn*n3`n{$8xz9x<^{_>mCXVZ;{FvPD`BhkieQ{}Ob2E0KGChX#j~79ehc z0Qnf^J8+7TL1KXln_s&i44@WRuD2T$PrqacJX?-CjTP)la2|Bgdm=|1)d3zSM9M)D z8^x)G)yPZbH>_Xq_s};4u#7!GOn=GfU65p8C$S4r7a8nWrPQ(?(O{#x12bbIp^gHL zB0?FHd-tNC-+-*+nc2Xa(}9H{kEUwo!805qPFk1*ONPasq?f={oo@2|m*#={_;N5P5qV=aVtbG|FH^e8c_NuLP`9Wp@_VZ@#d zCsYRSh7jZcsbSL-QaXyomAS|jUWuYb!)GBOg5duFb-*PV1J`0~83IAb$#ubMoZu+c zSBP8#%~V$o>wl1Zn+DgwvjAi9fYaK{{O&`jEF)d z?w+0jrysAiS4X{x{#`;3IFa60lPge!^`?{-x&5iJ5JLL?A2u(z7GwQVDtJkM6-et)3XnP!$CDWLl6xnNd&Z97RsWQphBG+0Iv7!R z5O=BA0kN_4d4wV-NX!YAq9S=0X&-PDB+5jlLuRUlKfZP7`xC_vII)DCj=F=8wf`lB zpz$8?{CPE4fH6_lKQasdWjy0;gJX6Mksg^IvDgL?0v4+%pTM8L@vkBg{|Bt4G1RJH z!dOABSJ{^>FJ}-fIUk_7Gt4F#~$Y( z2BbzH1;BRZI#-soA(tWUu;^N#eFF4`j5+<5aX0u#;yNLpQGEJ0*xF!0doh!v5>~!J zSqWe}AYUi*?cgyg_-|tfUB|^rhsCvsY!x7)e~`{V`VS^&T!i&{xK2YThK@iSYCjAF z!PW!7(@VxkBdZ`}eYhYac|?w6i?W;eln{oGMSD>F9a2I-8Vn)|e_u0w+ti28pSf{} z(ZfS&2wzrcVn~d^75dfcEs7VIHEV;Hfy<`*_wUaLEXFxC5MYoYuw<|(vNPP`WJeGw zic+KxCXE^n4}<0lpoq{}v7wM$jiV*_qpPbJ!SpPyO3*KGdO(vUVhto>x~O)*(0_Zg zijja(5XpkV2R|lg$Xv`cjEvsFQi?zZ*iOViAL2teA_H9`e#gK>z|kTORA1WL_xB0F zhYSX(bC7_2!tCH!=7WetP@iQ81cCfA%0DftQ!R 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 literal 0 HcmV?d00001 diff --git a/docs/images/arts_thin.png b/docs/images/arts_thin.png new file mode 100644 index 0000000000000000000000000000000000000000..b041d3b655416eb7e36dd5c45b2379a479437934 GIT binary patch literal 1355 zcmeAS@N?(olHy`uVBq!ia0y~yV0i*$>vOOHN#}*46+num*vT`50|;t3QaXTq$r9Iy zlHmNblJdl®4t{M=OC;^d;#)V$)1{F3*~`|W^=v_OiSi&7IyGV}8kLNaqx8On+j z42%`BO7j$q42+Bv3{92n!3>{}TMSv1sQV zf!_>a=9_skM4m}r&^TlK+2z_ug|2wKXTdy}cd0Hf(e1>1lK9>+R(2>wG4iIddlE?ygeJsr$Yk&%VAc z_4T#2JFCCv&9kqcrysvBj0)%0qX>2&>gKX>=zhq9TOnJd4)i_N>c zYwEUb+kAX{o?Kq;-};6VXlTRL?4$CLYp-Tmmc9zvSNnU~$B!T5*G2Cx%iXnW*QbAf zf1f#f_V2f1`uM*dwaY7)+k+NWo2(JP;zG2AQSdw;?=0N(+;=u zt9yQXcXxJUV`I&~KbC9PuI0|wi`z3JXyufXCr_4?moHzwJl%8t-s0!yVs;j(^2^)# z)YsR4dvkMg^6|cHOv>R-dh z&;R_v!RDRy|LfS;*^MnMX571X&!+B=#plnT?bq5@eoBekTQzm##*O=H*Y`@BKfAND zxbpY6Ts3v|>5o5xqB|i_+vvpA*I#WaKdHpV#@g?>ck$xHXV0GPsr&nDd3IEEbn&Aj zonO9wT^hIk|2Mhh_M)_%PxjQCH*ezq{Wx6T+t>H(P%F1(-Jgncb1WwVz5C?V)z#d` zLqX1YaQ}kI{u@92>sAV$J8XTO--HQ~Q8OC;D}u9GFC8=GFaDiAD(nniarGcCdb;|# JtaD0e0ss>eH4p#* literal 0 HcmV?d00001 diff --git a/docs/images/biocircos_color.png b/docs/images/biocircos_color.png new file mode 100644 index 0000000000000000000000000000000000000000..f353fa3a3b761dd48224dfc417c1a2df24ed95fd GIT binary patch literal 24880 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 Vb^ApMZd)7i;GWvue0ifc{{eYYjxPWJ literal 0 HcmV?d00001 diff --git a/docs/images/biocircos_dt.png b/docs/images/biocircos_dt.png new file mode 100644 index 0000000000000000000000000000000000000000..193471ae7efa15696627ace5742e20010ce4f316 GIT binary patch literal 34692 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 X>-6!jGg3dw?@&&hJ|S$}{Gb01um6^V literal 0 HcmV?d00001 diff --git a/docs/images/deep_sidebar.png b/docs/images/deep_sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe028311b0106bb7adad3c6f802ec5895588d317 GIT binary patch literal 47674 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 literal 0 HcmV?d00001 diff --git a/docs/images/download.png b/docs/images/download.png new file mode 100644 index 0000000000000000000000000000000000000000..556ea9801dc028ae018d33232223b621882e7dea GIT binary patch literal 9424 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 literal 0 HcmV?d00001 diff --git a/docs/images/group_by_hover.png b/docs/images/group_by_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a429de97bee97141cb89405b31f136442bec554f GIT binary patch literal 71192 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

    |t{j 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 Pm(rVUI4f#~<(~fwyvg#! literal 0 HcmV?d00001 diff --git a/docs/images/new_order.png b/docs/images/new_order.png new file mode 100644 index 0000000000000000000000000000000000000000..0748c1d81edb266c7c38b843c74f12775da1aa0d GIT binary patch literal 75156 zcmdSBcRZKv|3CZ|*`j0=Qc1}uq(oLpBqDpy%!-JtjLJwz3Z;~+gvr1MN;)5{blcR_U|`i9|_G zB5hKnro>l@>-J~iKNQzaozckuZR7X>{RO-E}NH*;qzl8uAo6)T}@md;jI z4%ciQT_(s&W$;7%#1F|kTbaAqIXdjtvb$nMy6(JN_{eU1SBKrA!lI(PMUF~}iAjna z*)6Z2sb%Z_orXl(O*(t}q?UW^-!3;TmLKcKCW8)XP;93-NJ~w-_wHR@`@OUjygScj zKUx)wZexgkI$$sMVveQYtMcv~4l({?m+x%bseya8L|Futt`B&5p z4e0_YJ-_{Ez4`wA_l{cTe;0aC-N@+HkG&$(bRqb^>GRWN3lw|tk+2X{FhQ;CMae!g znh;oWhfBrOh6`w^X@0~p6+09pSfQfjSV%ZjNMRj(1zJmvEuAjJ3zMFW7 zy;ZYwt`{_>=e;N=rEe0y{bwy{gzKc8u$*CtkT>y#JKc&u4Gbm(+5gX94Nr5UIKNxv z|K&xZ{rX&*gN{|u{YN`-=?ThB86yn)d3pB;3er0{Ik`{$+H7QG^sU6(>&E)h(6^?h zO(aff&+X@;1tSXA7pMBCmWJZ!d_$@%{DXq}rw8kll$89!!WazR*$3>A50o=CHC0-e z9z1vX=UW=LiEagFXHnwiK3ubL8U3zmzoMIEQnkLe;xaj`)$&-q%F0R{@47V~eGVVK+ z`H?B9sXfx~X=&MB=r$2;z{<@XKGu=PbLh|(4-XI9rX-r>*$z8|NHCEEqiEioD z$x23ITV-V({`>bY6YhjXK!@bV#6(R;SIO?l?b}mxKTH#C z8lG$GbKYue(>pFHSrT!D*zJug>G}B-;c+rS-qHep{;XzcI{1`dO0p^P_m-}6dt8{u zBQDN%#HRk^vlDK;{r$J+$2tAQn>mM3Rs!H)VI9rKe!hEUimqk$`2p{7&sn~oZ|!cAkyE~S z^@@6^{+ayMtHP(`<>OOQf`%I6EUQCzeERa`w45Ai6FK?RWS{)s_BT|I4jEV6+Dvz` zTYvqE&)VD%w`ZG)-D%IuGs0H^{8eGaop=-SZ%p+`O+MK<|w;gF&7{ znCIMxcINJZPoF=hPG8yfZ>vYVD{Q=%u>O1Qn^ z;}cP2-et!eI`4QbjGH$mDA;~~9g|(;*i+&@JrJz5n?xFENxiL;VQ{e1L|K{EXJt(M ztz*xwBi3L1om6g3eS@DhTPbKMs?AabO*0y$b=1oawHExnfrvi%hKbQ6jOjHct%g3k0 z&qN~a-@m_N;(*%okNDbTvzqML&6`L{t`gk^t^)SoUk7KEEGtt}ko?}iKZYlMduFJ? zvg7@g$C9pTovSLb$G38O&u-l*?huNq*~iOkzA)aE?>4b(e!MFL1$xoSs{HF$hKKuA zZ@qhW^pJ6ZzsJn)cbV@o88_QdtqEmL?Z zTN{JUH8mYLD8Z$uW?Wq}Cgrqval482&?#MAD(jck6UT!bb+FP~c1hjoF7`TyYnMBB z?p&H~cEK^nZhGwZP;Ob1SKl7-6&5pa9D8vg@eG#X#q3f~ef<{FeN_9kp?Y%^Ke0Gh zot#eM`g1P*I7GioO3$3<<*i$rhz`hh*yOa14l6pKu*FAeF^5ie(&WHr=GVrBtZ0q_ z@$q|z9krF`jMCg(&-k6(SE#dLt5pBB$b-oj$< z$oC97Sy@@^I;x*Pe`>7I(a@aK(Ac(xTPCz7oV&8Jl3X+8d_YW0%!4<6=#GCXle1ES z4ECRKkBAAob3}J*Z!>MoVbi`}t$HLst1MYi_Rm{q^b8+Cq=z()3_0T@caW(^NE^C9zTXRTDEZHY-wHY7zc+dDWfm zfZ?5w7OSp(tPdVE=U7hc*#0O|4twdQ&lUBQ>q4y@OMYFYzT6mBlT)b$(W=-F@-x4` zM(MEHSX=KsdX%Nub55f`=<|&4%KX@%Pj|dL)!)t!%u`cS&bP@F6cipGciO9=sTr`u zm}ydc_o=vJ0ycvC?4PaG_qgcT*w|Da3zK1@wdGpTB_t;1c+T0Up3x$z4^!mZ8ymH^ z4qZEaSEs0GX=(4r#)hJyTYh;g(uQKhEe2ibcz<^Dsq5pNG}z>`e;Ub;+P9RAcNL1b zj%d9$%-eGP`gJ}&KK12pjqj)iVou?QKh{)iXKahotfHSEIv$oE<}G~W4vhl2bb z*NH%)f%f!pd#}tZV7n6C&EKCwB~HfJ-mr9So?~`yZfZCsZtsZ`9JrtA<+)LoV@(8F z^5meUHRb7ZqP-h(F7jo%l|99Yr;?tV0>U{~ zM?Ad1&pmy!$!XnC?8>XD`7R?)bv-@*b3ZIDtZu}GkxP12R;StTY%FTnCF?^kw;UrQ zB*f4VC(E{;shjm&>vlqaO?W>_T%&`Akum7Q2Z@gsB51jkj*gDWE7}Xjdk-F@A#H!Z zoR^am@zcZuaOVtGJ^HZeA*oT{*+#{RApxD&e)v6BA%lHIN5roD+-~YU$5K&QDRS`> z)1I->A6Zi!j-@mcl-P8~y_dzJ4;j-kGBT3}5&7OL$M790OUtTa9c-eY>M#x-VPPgxQg^uXwQI!QTwGi< z0|+1~-xhjz=|}Yg-g8V$OuOeYHS-*dzr;!~4;EIs;jaxH1|Tb348-2i?XN+tdVUY3n*%`a7% ztLMeV#TDJ%^IL`n4=}xdyV^rx|KJJ>8=F9v+u5_hwPFu4Uk%Ra>Nq)xynXkMg>sW$ z6V<{r8N+AtIjlLc+gE2AWJ$_H>U=Be#@*NgedFWzii)HL1_x>CzJB>K`KOVGlAP!c z-4B+pyGBIJDckM5az#i_JDbJV#AlDihKJz0zt$>Jmq!fb6b%i_4O-8&4^5({nO6of zRP>-TSJ=dP?_U*i++=>X$^{o?(6BL5a!zUgex2FpyY)*~DXO>q$TXHuJQJ3*b4}?^ zl||==YgDMLs5Jk)ygWs`0>G9K3w`#RHxEa~cGFx`+C)~i5qQ#j>Q_KZ$(OHR1LR1g zmNacT2M32c;o)r2sVm)0?=I;kV`{y1_61DR%e_eBxiBtt^rOa&8&b~B&cq{mcMoXu z)TvX%i_c~D|Ngz7V$;4F6o9Wlmn`vUo?2@cvVQp*s(ox{u5kL|)rp1vIBLv1_vg{U zz+>52HmMggYEvJW`Q5v>Wu!GdC^B+;>Y(C1PBPNpwj6S=`M(kRYV8yi51gblH8djc z#XH*A1Oa)z`Vtow7N)XZt9<@^U~zGA(^#Z;S@fN|cPp@)BI4r0t-n5@sbmVSvPkam zT%J9M-nf;8g?C2ZA#>Vcgs38mpSc2EC`5EA)*1v*3{;{(kML2&2=~h%w18@%B-Z!GS%}JcjOy?wVvb`MqYYy1G_{afsiK ziqhuoxaQ^Fx z#Y@$vlV8Pq${HHfGF*j(gr+_pi0cI$5S4xKh==IQ%h|^FN)A(O+O+obg|UFR%knFi z=^qEwnwdBj^r~28EQ%Hyt|MXXe z7(E~gfPzzktd>=GSt`ECMVUJ~GJ=Ty?Z{L6Q^6nc^l1pXKRF4!@r4Yb!&f`}}A|fK%xnDt<38V&w8Ex0wz zv&^v)*C_W!DCw>LZ9mdk;?42($MZ0|RY)N~9_2+5OO`dY?L$l)pH6 z+YFBmtqqUGqQaj>dFaqT^@LHLE5zW>y4{JG!OZ&WS6$zGQAv2NoC#&W39*8LimDQ| zW*f%M!m>F+Y2VQxcJ-eLM%@&-yLRmY_`F?QEPWc_i%f4M&DoX&u`}diQN`1J#J{4Cyd6JA!LqG}30sQaXySF%!o;8Ufrt(~B2Y|i; z)Dc2F03|3ZFDH`^+M?}#d2MB(20LEFd)bA4hbV>X==UnTRzzf^KZJ#?n1VI=PW_W{ z8>>{(Uh}6N91gv|+`j43rBVJd22QjUiEF=KK(zpG|A;O^tObzCCiRJ81>+ANKCmCL zrblr#zScjoefxGZQ2y-q?*l>HTwGj)?OXT=sbqP1+4e^!*S2ljvaRY^UB)|in3$Mo zU+*M3Id@ukQI}Qp4)#Csmux1)3kYscD#O4G#4NA`UOw(RvR(AZk;WG%$tfr)Yp=M< z`mW#j&_QSweobX%cUc6OSXl!v{mATV%dyOU_f7%(PsHVqIy*Z%iSJ6p8|$w-2|9)g zs|;Z~Og!t*okwZGHrU>CZQt$>LTLdGjo+mLK4^S(fk#k3mqPW4SmUC*?AolR)Qv@^ z1LtGQmS%>CeWRVO6K`7TqcQwaCFT||uw{F$m2F!#!Q~j_<>gnQ^bn+5Pmet}Hy3L~ z=j-c>@)d|p3MIP4A9)LF>p%!8JW^7ex|v2NFJ9cIqN>_AFyPO7E?Px7r`LAM+<6@0@_NfbRHTP0*-pF>#-cr9H%4+IuwF>bKmAkeb|=1^#;38Fxr~4lJv#r6K zsHOUM7j}FTuJtF{5BD(tTaIoutkiLpe^T~;?()LX8nge~4gdf1)0CCWBd{B0_ncKy zDg#bp;@}8bUA+OFmtb({bU}%UmQfRjF*QiNfBzcwT`?+fp&|8-k8jb`)P(-D2jmKZ z79kjucJJR$nPpOZ>)A6d=&<*nJtHQ?CeqLMR}ACVtZi&~PMk1Y?7&od`SPW(u<)zN z94*BM6N;y_JuW?Y-u=4l=9~LZb=Bit!@}%))!V|gV|g?Nfduof_HEM8(CGd3>sDEr z+@Fz>(kun^RE3@rZ}Ur+Rx;mg0@y^;mQz%ux_R>^ZF4d(5oR`_Z*1DMiNC0HVYp2f z_3G#6Cq7+j5&=}(zq&NTE@I(dA*L25Qx$W>W)ic$t)n9mbqnQ$Sw{By-^X7z7=kfQ zD?WXq_VfG^AZbSkdFX?`8WR<-y16M9ULR9W*U7lcTJAOIEy*pASiq^M?auMTRbhc3 zjPaN>PHz-F^F3Y;k49a$|jMLeg-S3|xN~ z>tT~nDC_)P4$mZAg?(1tzdV;NRL(ocy#@COPr^f6?P*V( zI00Wkr`?A|+vQb)gTnID?vnj1%T~=gVy3MZ%+2@E($O6?$;urvS0E=N-G68}<(g{2 zDyZid=d(-$Wkdnjn0;f(`NqcD!ky4i|A2t1!usb%gaVdw{#kd(-9oMt*Ujetw(AwS z=QO#Po0~sAVzcGRu`6j8gnJ=gzXFoMXSBU*lJh;j8(f*0nT|)<2}S?4X{m{MKo4lq zR!&ZOH#avz0z7g3Z`lu1->~d#;XQf~>u=tsVypm8u=f7EVdt7j=i21&@84Uxv3B^$ z(My4VWxK`1whs>vx8*zW6kH!$-hWrgaPDjHfXRm)xEC)B@ z?&(>}K>4aboN4R9N;AJrD0B@*L1MWL^A1V6{PEjZUnqs?^3DAz+VLrSd;S~V-sz(0 z+SZT^_1@ZU1t`ai*{}Io$HdxtKeT&7+9amnVbhY+_?bQoAUqp$h(xDQ79D%}`IX17 zXBvIDg&{%X`zSKf3=^0bf+{NXqN1WuPy)c`%%MnWWZWk(fJGH8r-U})|Ahv`B$amCFnW*;~TNoK@bOAIo-%NiOGA-e>thtwQ zmG?u@Tw+4Pw-hyQba$;k&-Hd-nUz#jB3JYQvUZBust>M2vQhI*U`vwJdC6{0-z0sW zV4VBS*@s5Cq%El_FSDTu11G5~yw9KEyywLvYnc@7_D1WBMJSFg>s zsVc2OjfepC5TIVj@I8h4&eJ15-wBkg%^SYffAgDbNWDZrH?wF|keUF8H_53I;0q}? zkAZ{3aVbyJPA4`b_McwHm}6Tu8G0fc|44U=rEkw^MMX<+FG5-*^Z`LeXuK$9!qNg# zCMOjY7w6cw@_*>KFjSy^K-Jy-xXZ2499I%)n~W`%`i*>e}xwJJ1)_P1)!P zI30OV6A<|o?Pl`r8IHEL)Nmf+Z!KNf8hl#m{CS;457ZxqP}*BJxl^ZZF;PE0;g(t9 zLO6GGqd(Fwe%ftgV{`n(2|A%t0ZnuLlEF8a94c>YNALYl7C^yqY2t#eu5Kc0GxjOr zZiR-1Vgw2<6bTV*c8FBIxZ*qm!pbrFWL=4`RkIE=x4L*G* zEKC8cfYggs0>EYobmbQmTs6Bz7DYp$bu_Nsctq%Yr3~zv!Uwp4zv~9Ge}I86W}=%st+@ zjq~~?UbBC0LcZI>%ez^~;H~=d`Mr)OZ0cjnu?@|DJ>fF))8DA6sp&_B5b`KtQB6)> zh17Cx(ddE+u8?2so?U0Y2*`QP<#y3`_l&zH6tvsZ`FpTIVx>H`i92-qrKB7HZ(@m# zPw;-Vd}w`n^e{p4zz$&pU&vp>(6(5d>?15Dg6a@F@bP2z8`xg7KOU(Q#rQRJ#}VO6 z-vv`4{t=XhFa#K7SN-4?@e2rO5AscLM!VfR__H)^=0c;4)}U&u#LM&Te3JL36A}`x zPW@7Vj=l|EfSkR3T8k6N?Ovk3Rubz!*S5QK~pjwv~`PK-2 zgJJy-&J%n854!hoRPv;RG+~%lHHsg8@*} zKfV1T>oqSZ={6n;fomuBr2Awq8B~MFU2%K4E0!*7o#+rg$#W)DPDSNQse@h^nyY17 zw)v-q21PWO?&W3elcLqdQV(d)DOBE8sxHe4%`M*ayZ)Jg_@eIh504%_`cmhipsgS* zr*SUfwv>PfdBIT^^UGKG1*!brtg!0XZ`j31pqesU zj)~3fDLDZ9r0nBI3M>U=i`z|aOE=a}5FR{HW1yz_F2mc-$H_3jULbr3_*K4PeC<>qDt27eqAQ;siUw4FYCmSzj*aX*w3$i4;aCcO{NyhK(2 zxe`c7M5N$$UY)KLtlEOoz6-S`ub-l>V!%O>ku8W8h9>@fQi_4 z%;OTI?Z1-=e|F0jNY>JXB?23)qOtKphNbR;7p&I{2J>n2<_->9sHmt2F`h%*;Un@L z``sRIv071|H&%IijDc|JFlWP1$^!!fW#7Ir!6uGu4~mJ|0sg7gT}fO8e5+cq8=^;# zRtOyMd5^r~<%&Q)+9K+imXF_q~2C7;{afah;BiF6wzW zOL2GPGs}_au%e=PYF5Au%)5&`{2nUzP>)~jKO#81*=-scGry0KKz~&>epkTE$Wr}NXsk@Fo%sZoIdS0 z?dG4i@>`uj>~b5^`}gnNmuFM61>u)s#+`dII(@bC#iXCATih$e@9?LARJfvf6O=WVz&IMHvDR7%O#7s>hd3$@qnBGJ}u0=Pd zVWPV@1lz(4ik)a&Kww}+T^$`*-$$(V)*U+zKCJ%ngTS-Z(L#pbiaf3nQ6&U!*u@<< zk?x?8n_KD|9Tk8YBq6Z_9mfwO74YFE5UM4FY^1T6n*NN8U?Xk9p3ct6xe1X6w|I4N z(!2<^0EXkOs3;b6c4DcFN^a=$_oUU^1w)TXgsvqlB61TBB9ttl=FR#bqClX?E&Ao; zh=9(0OH^e1SXK2oQr82Ukw{P3|Hx!O=UH4{{)LjlWPPNptEJ^nC}e=xV0T;KOf{xz z9!Ncu-QC?yFaj;DNcHLmX163q1)K*yZ6(a;`T2R`$)u#DsHCS5K@Uvc{2NQ6m^Ki4 z=wVsAOmuTCO!PcbPOq2Hj7}T%0@5QYo-FeHz>lV;Q{ZVW^`*IUuu~baAJ7lv6Q#(? zFaku}#*L6BF~_nK%*JPFkd0tvX;k<9i{$)*gK4lhNj_K)|Aw&8&=-k`iNbeY1Ouyu zHT4v_Wu01ypl{S@wc{<{u3D}6D0D6B{1Weh19;X%49b4t6LF7zO=f&&kBEqzba2RQ zapUCXHs#HjLr>cZSOw3t49N>zd=2Jm-`~Hh)n4)1`Tg-aPZfXd1c+HIj z^!ThWP%-ZEkB(-AfR{sXD=BxT>gwuzkD2{`P0$D)|HO6G zQZ@yvta=$D=8|EUX91a#UFODd{Arl|<778hH5UcZu+SnjWPx+-joC($&f=k>=qp72!1@mV`0@0Ij2Hn8 zomv^q>s#th)NCI!ZC}!B994aGP32kcg=ldSGF|0)Jw740PfOs>eD|q@&OLsGF2kF! zr{asy3F)Mzr3r5v8;qKUrX1vjY1giMXa$zQY4+ZSx7FTTfFis&-{I)=>mv=ZLP)mV zx_OffVMwdom@a5kE9UEDeVz*b!PPGYdKvLYs^Mn6}H z=Nv6Ib_Hyp9Ipk3)y4ksm(Fe+PZx#;zY=Rf2%m2G|HT46Q5ugKY#wbVs#xgMAT7Zf$Jp%AU0zmk6_^5#zUfE zk%Bf-1%JN}iWN5do@2*!e%~y9O|%MZN9O~%si8m=FOrfdQ0v+PV?%Mihg!RIpJTOo z5N&`Bq4D@7UTJb+p{6l0*LXe;o&v<0R5p%C}(7W1{WVqJ8r8sjj{nrK-T| zy12vU%V#%~ zt$)um_}JY+t?lMvm;CEvPn!A#)Y_*2 z19kA$Z?v@kBQ8vBb6g*sSI-kx(#%p$>c|%53Y6c;!HBek-X;zP^(rkd{kxi#KipZ3a}3)!^B={am|{h*bIU1WFh63)~ul76?K4~v_F@HmNF7$~23@?~`M)snXXOpk%gL{C< zBu~02DN)0s15LPx#41hQBOyadXu|}EJ)WZVtQn@>agXVJKn_IemBwyBI+EDErR&S- zT5KbbDE92$O#j*U~+hZBk|XjNXe)PVz3hVL(L_4GI{A+cxQJ_U=Watz zs5LQ28^1XXEU(!=NAQwu!C);Z&Ubd4CH1Ll_11ET#{bQ&-NN$HUMaBlvZ-?y21_Mo z{2y)2>&KJt(x>l}sM+`9O%Y8#Gc&U}lHHdsT|&qNrh)Efrt^-XOuOUL(^pJXDBZ2* zdOn@~e1@FyfVsYo1!cm{Xz#9-S`pCDRB!~u08NnNEi79-@SX6 zY|t9LVT3#D^Qn6oC8c(^%7SpUQG4vdW+Z?+-ezGrlifO~d?aOSu+&b|17`{N)tsVM zgD2Hmn^!>Qtle?J8Y_j~}+0dGV)>mm#rb&18F2vE+)n+dU5L zo~)w&A9%PDl(3pVbcjR4gAI#w4TtFMI&!Vf#ZT*Y?YcVx#+c-E^=cXVqlnY5(=ls= z%r^2N|MlI-sI&$#i6HGU(}=r9jw7*_+7aR&HEDP%c{XQ2ZW^;pWeNKm$*ppt4CCSs z&(7X2YA`f3JXh?SevLukL^sG&jN9Leic|4M+C-DkS6BbvCSf(sH4^(jP2xEjKaos@ zwMGnR+^9LM0K~PUj6*q&+V9JoE-XT=5-}PK=Lm!G;b9tx;<2*6@aca4rbJ6eilQI8 z&wg+XPl5>Q5KH^62u1_J@E{btnEH6+K`sB;%_aUy`)(yCC%33A)!qlCtxcMmp57({ z#YZCDM^)uYP74@Aai?1yHYu z6nnIw{@!Me7e&*Sk;)|tXub!HhTvKg*}a&@s$Duv4_-V-U{!Xs2Q~B-v;8J#Ee(Vj zV;K=@sqZ6dASJi>wOE6_D;UOWFkZGM3#*HEE^Bh)Nzsk2af*Pq$M3+*V`hKTz zXfNovp4}wIuv1LV#N>JB_h;LHoCz>=U#E*!j^FAEpD*VcW%ZNI)Wcti;0?&={<+X6 z4AGl&EQGFD;tMN%#@Ge@IVZhBETlrq5r$vII_V z4?c~6?Ay+_X#4(|nTLE9`=}6MAc!0e1Negt6U`Yr#}f3FkUW;hUk*><-~cC}P=$Id zEG*l`gw6QE>kCUd`?6R(6gA$*-R(ZnB7I(U0;)$^wv8VxjM6}8&ePM=M1UL1R;O|| zGCDdCSs%jX0o{-{H;?~z>ur9%-tauHycBV`z#;ifQh)|V-&PP08s`0F-QBx@EUJ>u zK1||ot~&?L1L)J)cO&-MGeqbD5a|l5e)>>rF_KGzlJAPgHP8}La@Xy_chtjeIf-8u z-K=L{XV8do?Uz4yjt&&B0kotUyB@+k7ayzRmaynVhLiu**scdlf@StI)CQmycrhVNpTCr(aQbn+M{OHkvx4SUxbf0{$uBHTh{#0Lo2H*3K9>fod9u`AT zpD+~k1Op#Fe0WBlEj9hJRX`ezzd+$y8cwJ&!nBF!E!}4(FuZ5?lFCEYl?OUAsAgv` zipWP15oAQ}>XO~z54*ZAPLN=jW0c0%1n=iRar3JF=%e%10~?vq2H!g?Y4*%i_og4* zqy3&c?J;tN#IYK%k~4S=>M7^Bh&)?G#il)bl6%4-bP$d=Vm_RNeTF=w)B37M0E=DP z<<9&IiyH*NBrH`7b{rN$=9~Q6OI4286K-2@HtzV@`mnG!|fZ2?ZJa{ zBFLZNEYl7I*V6a(L`kee+UkXP8ZlB#OM;PM+wy8F66gVYPHxY^2^J&|di(lr;#y&d zFxS?W;5d}y4er_!)BhfEKpIVCd44PeUq9&ma)*?=Fr2zO#PKwU6jxnbKBBL`z+{Hj zr>q@l0@sjvzsmjg>N{I`S_%%eoIPSzMncAx9`Mx`>CzDpe@OX6x`Ti;>v7r&sQnSn zLtgim78m)tN)!HD{yAy67b3-9%zE45s24Ro{b_K?t24hL!nlWB-YpMzx;YwMnOHF5~RK zinsG*d;p)-ABasjQ&N3rq^8)*D^?PclC)%GR+fdzgjCqyP4;9+XTTwe6K-g&#J3=INJ>f~NaM>>d|bwb zXa{w5@-RygAlOYoWm@dXOJM|-o_=w07oO=J_XQ9dTJ5CtQB_I`er9U-r=ekK)?1j< zVzH?$pz0ApAtVQdulCAOP*5ms-VfLm5-zh$jcIAyRd5tKiI7nU5P#H2tIqlaqJB!! zR5*mviyaByqs*LYZ^jcpl(p#B#dG}trn3u}vREOfb1GcvN3 zFsj}&el}5sSd)1>$BrGTor>)f$@r7bUU>&Qg21qw`b{B-!^0sW9r!UE|56z*vfhSd zX2tzI@>lyRHYcT|^lz+BY!KnyvvZs1sHxT45)DKT7XKUMc+Ny685Oy21#$cDiLUMQ z>zOM0smm&j5=Qf!n(urSh7!}f`D&l0&FDSMJs6iaO$3G^Q=C>%F#mXGE5W{mJFm9) zll(Bd3AVt0UmWH!;Tgf)y$O*7!6iYXj*)J{;PhRe;U?&X(bSW1XF$kfDUYEkCCI%-PL zL}x-d#Lp*6t%Ji8$BH2{^W?Q!g9+kc2SLpR$TY z)SHL^0U#nK@fzw@Kei)riaQ`6;L8wXk5hzi24mOU=Zs}t>85zqS=WaZrseaKu#>{fAeU9 zF`_sqR0A+OFn@>44-#DOMCk^rL8UUGv%?*fU7aMiZg?JsfEgkxmN+z{QNzK^Ob#0p z!_oM0hdEpuc)vHb(oIyqAI`!pB1Uz8$w5#^s1Y%uK7*zt&K7AKu@5ES=iw1NihE^c zO-HQcyH*7ZHjvf(1ITqX)Am6MD4`|rGrP3s+b>IRabk*4uIx=Br-gEOA8!5u+WV^a zduyu#T8)K;#YKZUE$zA{5I?L@NW&u@nz6i7nirf zf?5joL7*4rmz`d`Rd}-R&kpRYqgvfhX}@b-TqkKuJJk*uYep5zx{OE|FRuM92{_f@ zci+Qu`?`tGvs$IPFR9akRB5XnJ-4;?soL_-7Nq`FCq%M?1 zLO)M|wVL@x5vS*F=DJbL(|;o}21HBun!l_PBf1$H^{D{OcG_WNCU9C()7tyUkt6X6 zq5g1R;oD@x!lmbyF-ip$hc%9B_L?DSjzSl5wgpuGN=kH_E9Ti zc|Anf`%g#SVaQ3ER#BS~L?vXeL%jAPX1_)*$ARW&t6;s^pV z&B(>?JtBTvPp}$gb3sGnmSf4%8NCwMQ5~0&mb1jUXs{#VZ4UswE>;gv`C(>Sz{h+n z?)bb~=-1#g?vXz&smwsSTJ>u2hg9o_bAg>2F(%O?EsB>l zgg8imxk$J00=-_mN#Mn6;CMP|3dHYljA%2aeOp^w8Qe!$wWkz@AX|~WP~NmDN;|@7 zsWs+tz96BPBqtN6u2J4f5Ru^wVqwh?xg;kie@DJmdsubLu%_GAuK1a`BJ4E@qS^PTOfKUh8|4D8Z12mm7$Lgn_2+P zIv1wp;jlb%nZ(MXMIzorL!m+P$Vb57xBB(;7WYKAevnD_#2z+k>2|Gh% z($TOm&*M29>Y{}Pf4_sgK-h&4&Vq0b5M#I(8U%5I?)2WRI0vR1FG`?ZWE4eiEM5h5 zBV3h=eBT{Ab}T|39LQV%alxk3w)Vh_`_q0#z9|7=-#>`#dCvb0#*$HIs5o{P1>^8{ zZ-2P#8Juz;EDn`tk}Ocgh){eV%rZpl_wC=m7ZyDcu<&bQ{Y<=p2EIwKKiEIzU%t?X zb8pDbkDriAQjGVdnv)zW_Nnxhg(7|pEs zl@^ly`tF_W7f$AUOVXE%blAOpn1cHL{Zl`aRD66thWfiGJ!X`ldh8XTK)i9cY8Gto*ox~UxdJzi{c^IF^GV_&R~oKIm+X%23`d|mdQakk#&a@Cbv z3N|;LS-k0fCj)u&96R>@R5SbM3FU&E9zc_GGI7VAhJi9IG>Z*wv>)FXo$)=CNrA6H z+SLlVRkjqjczAp?zd1PIXYy}c9osvlXyQF)2#-78=nz72#E=78O@Trl zFyH>xPBTL7H``mb?c{KKYM{%y_lJoS73#ZGXA0kTkFfClEnJe@4cun|QC2KhPxaS4eDXvYtm5AVVJYZT-^}7nq?y>x z9ikVN;$xwh-I#0DMNPi@IMW3935%i{yoKM0o^N=l{|0hKVvgOhKTN#B;4oc2#sSDX zn4VR_pTnnh0mp|9{%CMPBE(~9@X=E5ZAK+k)nu4`P;nmPXq}Gomh{$I+>OWY7#nxI z*N&6qGcfjC2uG(%+ji1Z0*ZcNR+B2nV-bG(b$0YeIOJG1kAjQPPA+#B#lVLWwW{52 z;@-CzfKGjU4Z6ehMSw4Mut@}&F^__=dPD#M5p4cJsmPZ_z9mpyKjIc1!&%JhbfyDQ zjYmrvtT%01fAkHf=~S7o{rR>B+KVDiJfR5#$QLdMOdM$VYJJ4|&5pvZ%u{klFCKduvf5$v z!tDG{fvB(61e>ptk^ax=p1n(Nt?}j&N-TVjm2CmA9<``J0%8prOrRs1T+x!)T!nXx zXxm%mcgy1k-CeSwhQp>2cD9I@se+&-XVIuXG(H}6L4T+)q2pZZ&Z`Y{Ny#?R#pWV^ zj|rGI_zpj){_%tisvzp1q^X>(B}5 z%ESMDN7ozV)OnnWC&~=rwu`_M#0J0sAZ8jK97ztX=B^MW`uu~ZPrW|y6z-s> zgfR{QX+bYA?c$qu;hkZ4ryEa6GK+kjUN}O&RdC#rCOwu9U zLn#Z6Wwv6!oIgl$DQ2qkQ~o#IxHq}!O7%8-4U71Dfpz`SXi)L-E|f#g8cmj%e{FHr^>WdzDi|wG=my5ggZ< zG5n+6OxR2`1~hxdB~n>;@`!$Oma(doOk$%F)NEQZ=f)eipSnxlGAg(4?n(Ri7&ZF! zGIU<+2%s@oA=}nQCJ6--RJyrJUnZ&J6zv}RWkm**wI})RUgK%DwwN`nf zPsQ(qnJD+*n)O!d4t8v?6&h*p7k=5!;Kq_3Ss(9C7Z`& z>pA2L*L|yEuCqESGR^x5yBT`SL?!p;bCvgvzkgG6J-?=7cIwUBziaFzdsGFiiZ-!~ z<>kj-wHq=`Dzg9WcR{UNCCbQsha0Nuqc(8c+c=6N10&pwTG(k6 z^Bz8oI%8Yc?XF*EDlF-3R;duC`xDo{S^v8CjN~5Gg690XY}z4#bLCEPjvImP<5Tt3 z~?_u)w;15)f#;X~ot z{hH6L?AWDrI-KhGWb+L-k=_-3o>v_S;)?HY+?CGW!{zYwj#`E!@B6})js>ngVTIO7F-P1-}U7vg@+pWPK`I-$L=;cWIklaE_OrE2=V#yQ{kp^R^KE`?gtl?tvMunBiKkbTnYr-F2Ndq@4t z@VMmjGowqcYb%Q_Y4W2o{gaGWv@KrJJ-ef?Z7bzBkYD`QNP^|fBSrw?U|(ASACtxH zeb2@(4%Md4dJZJ6Ca8!E2}n2`Uis0m|7agI1JA?@r$>dImMlLU&+B;R)M$VIz<-4^ z;+)m2%YT|lL@vC6K!hU+@vJ(Wy8)kqRq|l;SRqbu{MmU*#$A7hA7eAHjg?hSwo}SXRr7X=Zuit7exiW)UBHL+~M14Y>PS0{X#q_7dx^KRHR&!Q$HvQ+i@{;E9 z3Kt58xoumVgvY2t4yOnTvbDzC_hW6RSjj-6i^d)g~a_cfVC)$dC%eoYgnl1*4 z^$mqT=RevUF!HV-^_x3srNlSrQ-{e%@g$n3GCr)IHj>uIk2*HnP09*C5#o)@+UUIN zyLKu6ceG7g?xM#pMn~sxZKG0NF5R2k8q5#&-!bBs-tn)w?`<_fW(;zf!cVvbYH*08 z?<<`?oisgQZR32gZm)xvxxl^NtE=*cP8U0D#70GKNln|b%}L#4_{q%lJ^Hb>;{#`V z)8Mh8y1Hvl?lTA8me>i_y!So1%Oh4|7H7X4_D#8qt;HFJG!7^fz8aD!x#kgJ#6`8n zmDu>@!{TkcZAhPr>h7_>ITi~-scUYO^k;Y|6KQ-5Bc&UnDjToF9l1P0Q#5wdg?&++ zRmzx3_dF{}$iaPk&;6Hgi_FEmzJKKt(afP&sJZ0RRf%PaUz$s7TUaX`SLMm{W-2WZ zIwxg199%Q?o+^SfFQ|9&eCJXFc|c%6wyExp8ttF|*)ji9U_}3=;#wI@Use0u;6v>f zn)Hyf?RdDg^chk<+tZ`$q4)#5GkF}nyzdGJKL|f5PW4rlb1Gez&v}zUdSu$gs<2F+y&Onds(SdV{!yOv{ioG8sR4+B=W`KJsh+H7}3E z7Qg-zx}^Ia<6^-%rTLCBk6KL1%*6URn%Ey!1r-Q6l$>!^&oql6l}7P6n=fB! z++)YxhqJzwcz7JTekktL#?bdhyHB!H40g1Bj!F;z-PfI&pMvj6Urb~^a<|jVRWx2< zr$6)hUav)i=Gho!Z9e(4Rl%#*Eop`X&?aB1Jx{z+D%(8K-r91hD@gt+Yjm5VevNk1 zhgzqXQ6l#~B{x3&4+tT;^ez{R1%A)Y1=Aa=Bb$2vFUsBn9?SlHAHSt&kR+orDoRqw zj?g2O6v`|KQOTa!t0AFCk}?}26_Tv%B%308@4d4!?*DPo^Z9(gzt?}f{$4N7Q{r~r z*Y$qC&+|Oa<2cUs#&RuBvs%P%(=7}8*Z05SVr@NJD5>+kiT#4{!u*%b3u0{*tV-t` z47YB!h+g1`xsp=f?^LJuRCz$rvMXM^y5dVApPm3qY+dj5+Or%FeqPNh9W0I2&FLFX z94Q#R6d@g#o!pRQPDOFWti`N_EdKDOkQYN$l%(P2Ww}|I?8}{w2Y9LnD0lj_WT#D( zs0`0frUZsN`c>+r-ShZU_sG(gSM1?@<}Wt|$@s?=H3bhiRp{@{MSa#+ux+I{UfBNj@ZoP>j^G^@~POZ=-wbN00U@*NLm0=oip!fvYPM`qi1b>bMBJyS92f3v30!n3vWtG~Vom4w;^Zig)h@F4?cY&>b9ENSI}_Q~iVUi8O{LEr zXL-19_!jL{q4nCXk@W|x+BzF6*_-@y!DJ9%Z}zgzXUS;t zO`J;EQk7=1JddAFN^Qx~J>ADUAV+iL;=tNpCU=TERfYQ;m(~=pYvxTKzGS*LBER!H zkL8~0jHNL%JUuaIMDm{2y;j= zlzik#JkguZAA8wYl#w#(Ab#%0-wc^}jx}n1yA!SmY|HZ0RLQt6e|jZ3Cr%OMx*|0n z3YQp-ndy1FOT1Pd`s#l~!Xjw)pH#2t+0M$UZP2$dsA`~5x5aiT!Tif|jcOE zHMiR*nf*r+fwf|We_udQ#M*B6ugkxer$0QGWEd+lF}JV<@$Eb@KBlTFqmL)I)sJ`F zuy?;W;C-!E!p4#lEL)3!3DqvT^BEVFWkYN^qfUz<>`{E2%^?3oU|nzgD}e7fcM|>@ z)Kzl-iNDW(PbrmX%AI{bqe?Az++;0F)Xm-_$+?dF$4q=~YRxCX$5W~ER-2Ot*RC&?uF1KJsH*RuBhvxQMcQOmjT= zI^1)-dnB+v$xZ_Mmhwsc*u2v4pL?8_n5(UR@Yb&xoGK4JeqAdP@~1I|Kt_be1ncv73`cnzob(RIz=4vjp!SHs_a|Y;&>y`u|!3S z&spzyh;3Fzk+eqJ7KB|Rq$7@e%*fA9=tOM7;y4)?>@4}ZL00Md;0ax^fGMN$|GGBt z)DVw{n>U=}y3E>RC#z0xHVr$K#Lju6`5H^k@;F|y@t1imWl|0E>xR%jb-!)KI2vDx zway&dMLy|p>%UQ52#<(_XFD+&>lvI%NlHqkEy@|t(aP!Lz0hB$C(yaG>PgwJwX<&0 zZZ|1>x>M%n5=VTQeY<(QdAZ+zP2Z?3Hc2^Khd6U_T#ZdoMd?c7d|*(--GW~K(xBsb zgiN9Cu}9=e&M2=|mn%m~?Ehm__j8I{u>U(7ATalh3C_ z^Vyeji}tzrp!vcqXWHb@=@0duTX{SqX#QiQ5ug%YpXI|oyHvLn>vZZIYV6_imx`N+ z%41qXp$%SQ)l2@>KEI9r?_&4wTeOQE+1o!v*iql2 zP>cm6*@PuEm@6wa(pWW*F?Ts8a3NPimy3CHc{xWl8^DeYc zZ#q+Q(|Xo8#dTuOdH4C{S*vm;Vk6g)hyOWtL9&x>sf=SZ^cFJM?h*b^*Z+jGwk6-L zUJ$cf%IDA+SMYvPwk7h(Q_bd0e8IktNQFHWs)qojXitSAm_%>Hkn@%ezOacr!|6b!zm=d>AOm+471L4J2_W&BC zZaXw%r=85??!b`Oad~6%n|-Xi3!mR}&#H~$j^yGUIk-ICn5J9#-&7#>Rt0<0KXHxa z0?th>P2s*WcYoga%3l8n1>FUknRd+>$Cp!U|Bdw%4sr_4{x4Qy=r>Mub71ac z<2jqr^YqfYU5W+hIs`#FiLYPys7JUzT?0QFZKUinSLHDAJT&3>jw=umE1<;Y%5KtR z@{nb%bw9UMIT$k7SaCrNM07I@LL@@aFP}o8-L$9}Zb9WOp@E zUk_>=^L(%`LBH_JIjeNvQY1yzsTW;MRO?bjJubtN<*Bi53 zylxlZQ?-(2bkYN;0uZD=M;^?DWDL+Y0j#zy&xnD7S%`K|b3)Fa!S@7l6p0^DMgE*c zK~m1*SnV3!jXXDlEt)xabMjIqrOxdunMLqvuUqb2(T5{{eqL~uTk2V`ZmH-0;aFtCLi1&W$9nf_8ENf} z{E{!YbjcMjM2OMh3%^T3A_NVdh@BRh0cb6JLbo0n=?S#+UK-sV%@~tL+YfF80@yUC z*d6auvpaY|(n9Du*q!=!6K)L>HwV9=tKE=dwv)-XfWeEGxFYL|4i{ZF82?KAx*#%S z<<1yIpFSD80#sTD5a6MtJs+55AP?uZxDCane#sd{$&cRFZd?v7gQ-aw`~jkS4agd7 zHVOfwDlQmvoIxKF{#=lm>LqI(es05<+4C|Xp@ch7#Lu>iD{@#*P9zsv=n6V}uO z5;56btnECK42SB_LU!i|m(0`G-N`%mrjY0F@ABGLNmysczJP(kZSc#d8ch=5H-TF3 z?m{xa@yQCwv2lEU1fMj;qD|@Q)d64kp5ERnpqDTL+q4uJ7xkX<;!2L;7n?~6Gr>2r{2wSw?dwC21`m=W=R-a&Te!I>~d0| zkA-R5Kj_omTHFbp-k5z3-c9q!Is!KXTy_Kidu$ig+O-1a&EjyXna7U-hChCd{po5_ z`%7;HF_ljah`83iK&g@4(A71tzeity#R0U5=jbzmK12NixA22jvJY$~(Y?)w;n-OpDwyZ<~I183oOf(J`5 z_F}3}qbYXOx|z7ODmLFn7W@*(4R<^%e|2@qi0Lmd2kzph^SGw!6lklj>G?-8^BVnz zQz<&O5ocP+3RZeu+R_f+e2@6g3-lf4&{$qzBI5r=A=mXB3zssc`V<9RrwT8DsWQ4D__@wl1;R{$!Iwhm6Yre7A8Q|A86XJI}ab8ok6P# zZ+v1nsj{=LuMm5k1RD!JJa!mO`(Vp6FftN4vzCRd`QFeK-&$Q=Fn3B}>HsU;oaWU% zA|kJEDlC&p-qkYd7I;Nf*>dP^q<7QoA?NI+u@ke7PGq{Mu;pa!rZ3tj+{Y4%mTUg8 zDm=&D*GcztdQ>dU{Up_FWl?)?j0S1Ev@W5Yx$$wvK8`o$zB;B$ixxrKHRG+dj$J@` z@XnLdTPI9Or0Zkajmu)C)mA<|K-XI>A|Fe%fq}jq&6Q&>cP{RAoa^u+K7D^L!K=rg zyfo&1A_dMWyP?J$*~`UD9I-scLwyYW4uz#_z3eG+V>H;lv@9{2XyKw2L;(%foUw(a(xkRdB{ez#T6hxLXxpr zexTshM0srW2kt_H?7YsdLXOe!e_DF$Z1|SXC3c06eJyJlb=>s&=h>>_mJg9j0t2TD zH>@`)Os1>&I=FrxFv=krhiAW|80O|Yt8BhW&UvLAu%eOsMQLsH=YM_`%T_?m1{cf=(&RdYa zh*~>|qknk+eo@WtW_x9qr3pt|hUq%@dvcqq3x9OQK>Kvld8%Mak#v zujrHgIkx`nq9A<|s=N}X?sY{~e?C7;XwI(J(%L5Mji07UZ&a5g#oUa$eYIP=!@X>$ z^~ezKU!2}YYOCDwkMBpHJ}5#w=Ib^DS@5&?I{) zM_PP;d^#YkHHUq2vPj-9pJ@w~M?oQ-rnx8zke)B>d##XR`fWO zI?T3Go_0U(Nw?0^+g}wC+V$<~44(}diSQ?ses}G&eJhUZ6b$ZM<3jS_6$?eW=8>11 zJ=R9KOQ=V9z|eqV{g`l6+44?%wu+aE90o|g!=KBZd+j$`x5r7EbPP}1Amz_vmYtV7 z9Z){22pL9&?GfqNKbmo^@@65NZjEH}pXVA!zdUi$CKQOrOz^Ayw?Gq#hBESzdA5uaBHDGp?rs&1ch^ltwS+D{uO4RT$N;KU=JzZ0+v4 zblgVV)shq0c;}F&bJf&xTTG_#j&cXd+x_HWE&IIPQ_auYHd5)$*gbikVAc21Woa<^ zS>}h)m^B+&XmXSt^#6!o9^#5&3K&^%HRB=2}5WEZh+*CQ!; zFUodbgnX<0WOy3?J4QCi&#%E&eY3pUGYsOKoH=cJanYSXi%Hvyt%yILh~Dt2evP=Z zDK&{&tb%eEsx^P|RzGZPHmc=^D9XBiEl-outZj1jc8O;SEw};xUYrOoop;likLIxM z=~W&vn2vkMxj*b#4f*BiSsA9r>*RY!NMX|BoT&ddyse8an@}h*ol5X3=&hW1W!eCe3P}`*d+m`@-_CW4S*^ zboCNzzxFZ{s7QUz#BmZ)O5)EYH!I{yj;|JOr=a(@E~;m6cID05c}?)e@pmztD>HMn z)oOog{QoID6g6*WNn*Zg&Bc^*Zdm_FeDAY`>@Jv#I?%rCpwAC3B`- zQCrTglM?o#wPC-~^q4vE&ppef;~Y$(8BvMKqZcn-rMU9C*jHNFCC}fc@KJ!vRutss zf2#ZR1b$4+1kbtEu77&g=Nr!Oc=xoq2|2!dyQO&!C8RNH^D*zH(Cp*fkJL-O)*kHn zpc(#};P|B)#X9m}^pI|*Zsi3B!{dionV8*21MkL6*+wEfOx)^g_2HFcD}KH1a@MBnzTqcB4xEZoS=}t@ z!%qw9<%@-@;v)hzZkjB=$^+r*I;ba*7F4t_;r$?s1J}coI?!92?Okd0F`~Ol|L$&s z>34Kn>$@nC!SCiz=w*yo+{dslF!sBSB`o&Lhau;Vtp3Tx2XI zC{Hg}PvB7itCzp-W#z)y8T0UuvGp@=b6nijr5Q<&Yz3))1X5UA{p|~@#Ic>3)X(3| z@uBx9mA(9wZP)=u4vtE=go6;fe^Lus7ShEoq+x`?85|DixVEKBpr`8O60(bfgQKd- zxVO!5UG>_UUtLLBacE=y>NmP=JeUmb+a4jIr0+@$R|TIN4-=hX5vPzBsLN8^mc9VV-e{juW`Fu4ct#RbN^3t9TVK7`} zbLSyqD#Hb)q1@wBJwRj`6H(yr5C(=+n_2tOfxlJaV6PHn^NE^@>goKlY?SayYFczH z>EQR1vLW8r^DfHWyXGXJ6x4{qG2Q*V4C)m~Mu>qE%u=nOV>@7)Ksr(}3W8X3^k^77 z5kg`2vh-@J8gTg5pAy?Poo`3MKHwpv9x61FZKNno%99upCxbh%vUlqFy!OyZVb2gfF-WY zaQ)$I^72B74?52HurB_6m7p(ZGi`DUWxvrbGB9^BVR+z{c7}bYkCfJ+sG-|jimYpd zw2KF;!NAn{P_2}_A1}@a%-FX&dV%`OWE={%E9rM#sNV{7_6y&K;;G~qf%;?6-w@1{QUk<-AsXQVgQN~OqZb@ z@Ai`%)q`FK?q5ETWm%y<01L|qKBl0#LDXv=cisieHtf@Rc`h;Z}d zBudchXi2^WUpdHgr@#&!B#sM0%7ed)7oiM$4(=TtZY#W*&Xi%zKz1TdczJj% z+PJ`8K?Ru7jT`$RC}L~`F&rOJ2Ud?m^>=zsFDT5aHlzeg(^dq1-J-JdxcrDp>IUsDQ?7-NOrnvTXA;Z9lL(kN6L4*T0Ref`94^Pe@&oyhmIPj$%VaTkv-4OMsooUZ zH;i07^H`^}qJqyVa+4y4?11b@NRwD-njQPXudx&U27H{cn3$Tfac4t} z00$SWL?4MFi6joHnoCO}(-RbN_m`EgmRP5=Qe8PU|Rry-*-0!Lg^+b++Y$(;DHi9hpP|1=g};G;*mxE?;I2e68X04*POwk5P;&ABi-Y~D0{&&#VCfdRHz z6)@c|wyBgV1O=<$P-^p6ASK%+Y~N-?5}=xx-El@FagMtJGAm3D#rA}br3PfDpPy|rv;S?S% zcy?y0CsyG@}>aLNsiqv?2@c%%;n`)ev$f?;(3tfkr ze;p0Kq@^Aivj*p^#{20{57Y(d+~8s0-9%6_L6p?35{FS^6r7O=S9)FDwljlg6rM&z zC?PMpn3LUI@R|bBn)!T=Wx^g63cn9kXaBa=`<&yy&29j~+1=}89wK-r?-)FA9xkQk zUQfCryyLWD+;h*i|M#vsQ&>I8CvH}n!Z z&7en%CE%+z@2Q@_$q-%d`H&xEQQo92q>nHlhTolfkLO<+l+S8I_kjAl>Y~TG!=&cw z^y_X4pI?DcdkUx5JKG0{wCYCWnwqTH)*&61^e<^MjV4lTt1Qo`^>Hgqp`gJ)v(17w zG`~$B|3gU*nZ1y`ve54r1<9|TwZf9hPDu+-Jhe2K&zr@!4%}MV)If=Lu5JaDtJim4 z$dqz-dU1tKbwaS$Q5;@BD<9kbUSPrF8kvx{t1AWqTKSei*Rzs2dqe$(8P6#M)tH;Wh^DC`>zT!_TJ9(a;Y`iC7 zq^?;_xl)Ec_cx%%!`MB$91c&T=#*iBMG8PF(F3nk&6D`w@3J`44}aa^t@R4 z-A^vLgm~lElSW5B{O7Xcx2?P@`EeFtU`*vG;kWv%v`?(2dQW(cR2OMVib(xl6S5-+SNQX%s_&ql-_OXw zT0aa$jBG-}rBpx3vCO2Z?~;-E9hUA{SBoDX*xn@zr%&XxAHObK19!5B)1R=yv~NP% z*BqEZa?(y85%F8wYosqa?uTJ@Ml>-30WPlW0pYH7+CF?n0SE3=cr0Cv2_m(Q#BD zjopqc44D;td4kdV*s^u2EHVc|2}fk~XceLti<9}1-B{~Gj0GcUyblW2aq>q0V`{!{ zzVG{0!NbtE+aK10UDVOJ_B(so+aM`J3&RjQWi$oynXaCmb%aL}p%Y~hzOe-v1!0jv zNacwVD>x+K80>*?2`9drLry|<=N7yT&@xlVUcb6|HTSQctM|)HDScD>l<9;&7#wKr z%@mwT`*O6U-~3+P$feGqhKhq4hqRQGUQfy>p64x&WN(SjFKtrk6s1q0I?;%jMd*mI z!A~?oXQ_-VW*(2lsQ%;2g=CD>B@DkoHzT2jxQ2lysDG^5TxW^mXtLR+asq7@Av|>m zDF~xd_oX4-7FSH|h5gzY+%1JNNhrQ_TqaJS%!0&GA9^vuk$JEAn030tpMjW`HVk|u zgc*c_5D^fS^`70kUlzGBhmOf2`l0c;n$Kda$>Y_g%D2BELZk>G;{7mNykNN*t&zFO zh0Y;D%&1uQl5s(immzcJDpH);jn`I?kCV8-@tGOE-ysdAu+ccu3`I;PiuTc&;o(;& zd~P54&4G@idBzAael;IWRR=Tuz^KC zkK#g>lL*Fcae^lZjD(Q*z|SOYX{HIFTAp!o6^uur`RN_)LSB60yR|s$3BM)q^{>Gx z8j_xmzj$u@5QPg`v7UK)?Wp_-v9jlPAAf)9{UU9^FG|t6DP`s5=JtY5-Ve+=+Ia0r zDK8WN`0JyfY3G2d9&3!M+FeyG68@YB3i3v)AtCLE4b8#kL6Y7%FJU77zI_EX1ksi1 zU#cWub#bI+6@NrDF$wX}!XKf^qxrChXl|PwtnpnK%ZVI{&)A&N;+Nmi{@P#KI!77{ z3n7T`A8s+@a2cmiK02`$a?ick$B^`*l-Aw0gBuAG^dUcR%SN*o%u$pPBRViPfD@Nr z8|NEue=eji!r2ct_0N#gV|K?O%s(A;8wohY-a*_I=voP|<(ms?&0V{8y(mkpjlX;b zR+5(Dtc)f5gO#Db!^3@nQNcu=fsIMz-8#-ABE+4CV0CUPk_;tFgRj*};;;R1C4kYV zA|R^>KK%SH@I=!&$n~`Y@cs4;g{&~AMTXZK8x!#r{d~ed+^OY;@MJ!n%r;|ZYz{|! z`i@u>J=%>{^fu%7m=z5Z0Y1A02*_sZ;C96`>4Y9T21H$cUTEbeLn6vWwMXK*F#o>q z=g0R;LpvJ^l0?0{+p=cpNMFP8?b!(Vw{|@D`foOPzsI3|haGM^iubZenMlkAc5!jR zWR$g--^2hDzU%1LM)(~d4jGk0tNV|{`XB7?-pS~vS$EWSVtXz^__lZ7zIzZ?I!Y+* z#`=Sd^fqQkFcw8t^`tbJ^L}dKO~{nRiO1`@2=Q-pnHl6kj^laM1ArOc`11$FAaxz} z{Mgmm3BTJO=rDwhf35exW1oc3^Gj+QhMhq3KmsSDHA^prn}vqTV@Jk5&*H0uzNEhE z&SFf;##-*!(~t_De4V%gc-{{VW3i?mE0K zNAtcm&C1ca)?+?&D&|yr+~pmc$3pD$Uq`?96ZuQx>+0g8mrWsOJIHkAVW!(j?)zWdWy`z@!sdvY~lxxi$=xw~Ah>xHR=SkZ4=*4W)} zK^PlYuaf`21THw4(`A+-A3s*fgt;Q3O6pa-WF+_;YVm}`y8nS(Zu5^FG%*o;&SxAB z0n_``vjnGt#HuWs1bpkd0eik=P1(*Pd#rnWA3og6$$1ArU3wb{cBqd5q=Mfu4}_3# zWAaj6p)IKC)+`r$;Gf_{plD|&idu8jbD}~Ff-wkWn%gA9l|UCDRO-YLf`0QMu&OeH|*!jyWJG>lYhM7=9nEMUbhCN`D ze2UXgJB45%X!<1QG>V5CN8fT6mD*|eBYwI5ubi)ns&O$J ze7wDP@7Z%3oEVa2wW8PrHptU2$|p}!Vax7=yO0N*7{Kg#cl14a!$JF`%fEekw#eQ0 zKZ^q6PsU4Ek3mod^4RDY3`&Y2+EAuc3&ZJVHIiJXpV~wLzuTU0`_{Z3YtY01B z)yc~^DAVfL`Z0s#r8J5V9GaHbzVV+|pZ#wONTVg5Jjf#cbnWzFM?AY|ZtsA6u;TUW z(J`FFeYpRN1<7PH&{0BaI+}uk-xzn`f}REu8gQhI>&epdoQw0NfQA-cO+S}hk*D(o zZ+c&&H9SM8tf7gAK0U1oN^cSn`Io4B(UrLkkb^WYM&{oJJL-#G=j8s6#uTo~-8wqJ zQ)V5B>YklEW;_&D2k`NF<#!CMreY#r5gVS%xVyciYla`-UEEG$3Jjqyg(C^{o2%-q z1AESu*U=ERG>`}OAncGn=wyWuximpl!I3l6DvGd$ELq^jj~Bq(q?~J)ra^!LmPLak zG?Qk4cnmR~msq>gXnq?%RdUUF|9;D=j3LLx$pXBt(WOTaM(c``7sP1BGCTfiLS9vV!g zrM}2Us5m$xOWlZ?r6%vGfyPYXrS+fsw$|)x`CE&3Z>$BdM6_Li3pSfUcHRp}!2m9r zuue+CEdd2>An(Z@l^57KB!a;Pa@hGOS9qFvW}`>Jk5zx@QwyMFwQCKi$>OmvtfW%`A^j1~qaA?7qLI2{npQPnbkmggh7Sb;20v&iuQ1|+`c}aTTe`{@ zx7<@=x>nYYJneJ|Z^B2LJ|)7X4)fZJX_F{Qaht90m0oHS4==CD zlvS{{wKqrA${m^mTJJgsNPlPYQlI-WH+epiygf>8Pu13yfGLr<#2x2y@hWF?XUCti z5WT|m8&86QFdpKQD97w;j-?_xqt()1ZuOUb9_FL8F!Np0{=Gw_{@}mJ2H)9E%{rYQ z6WpghFDVM`sghpFkL9_Ot?k#w3_YM39^Eyy)%oM2e7HxF z^W7b`Q+U~(7FUrAlMZTqz7HUoDBXawL*~A`CKp+8eYUG}ph2W#?{*X+1s>hR)UwK< zG*E5Bu=6KSJI^&PW4@OS()|=o;nn4(q*%Qc(9qpSz?1`ngY7Gpq#GIj!JT_kY*!oF znKtt{cC_CC>}BA$nZ z>(C`LiBSvpg`GsH1dj&m*E2iK({2&|07PO8kHXJ}YJV@|6oIM*DD@6?X}n`Qxphy= zZ*LnaNu`)4n(Mt3F16~oZB1cLS;{<<8t&?RUGVoA(?)dg5^M_D>`Cnt4#2pdl~3pN zUOdQzI2gh@g|hd&s%k#bwE$nccf zAy|0QfBHGyCVX|r(fN4>XlKo|=WU`uK?mvw2%qrR&!=;rJ1)I2oOH6!V*hoAEJfzL z2#D4ZhU9#Sa|<6)5r5y(DE&^-aXzapS0>gTQS1|OUH@R9ZgS?a{)Hj)1xG_&o0*Z8 z3{kTwhoet|gR3zYTek^#d%QffA~DS`#O-Q{ReLBnP9y>kEn`qr=&c)ZPXnZ@GdNL*|ewv&d<;y%1cFp+=)$bb%hoRzz z%p9xY;K8!Gh{un=A`z)T=8h)f%LJB3t9=Us+j)N2;AB#ttvGA8|7AYSq_HBhCRt+g z1x5jlx%5ebdRhf1pX}v7CMdj9uKQ0pWf9;NQt0HA3`HD)B7>CB!?7uM_;(Q14HDSvm9xMr z^i%8H*|Fl?jfGX(wM$A$J~o&l>gqN)z**b12{WE{JlqOKCNcj8yzrVj3`N_V>&u^A z-(SB{`u+a>TcZy%2=S4A;qQsm%@)VMmPW~X3u81cNff=+-{k{2FgPMwfJFhE1n2?x zJ;hoo0y*N(9A5+Gb}IabjI6WaAYuu4K?t1CR_8G(;)K#LB(Q}LlXznKpSJ6C&F|p` zhWE+KQ%N|M(KbB{(?jGca+nl|<`o~2m!iXZ9d>P*zpKuW7Awh%bXe&!ebYepz9Yf7 z6i!$r$;ox=zcIRv|I2D)gLNJdx@^i$WosX{KpL^rjbYLP0(Zsi zgh-uszDV6KewA?;euy<%pmk2L1meET;B3W|EtS_P?)>a!p<EKesWMvo8{muN2kUZ*?OhC~R5z&)GMRCGHCman$9c81}q z#ALv9^@Xn(hMn{|P<}yC$Eh%u<;Qt#>*BqO{ikF$_KT30TINSadP6OG@i{Xj(rCOm zH<9PJno4aI{QL9s+y_Zf#%dm)1KlG9|8^53s8>MSt*==5D5*;hKBLk3Q}}+>Cj)8G zp%uuUOOEkLt^daUonv2(%_Ry~r|Tk+QLf1Kw#p(WQ-=IQ$^TZkiGjS5pn!$Sx}R4L zF;k-OBQdPro%`~qq6m0je!aJ!-#!V65L)W|!zWJ&W^1w;WyR(B?Zs~+KG?#dH-I0$ z;UAM(FG>NC*P=zIS01^X9M`s$-osY?>_6YX4@huQevy=aU`;Lg7s$VVm$VYoWy=bk zhfb|Kt5E%RwO>R}Z^X9xFGbl~dEbcab1F#dXC9-mV_iKf=r_=>oZELFB|~hzCi+I) ze}0bA<|8Hcsr-v#XDYn`pQA#C@| zxsQ%*pfx%5-WYdyqD5Ry!@}s;^35lar?-Zzt~d(r_lm<3>?fmY^7~tF68CMZ3ZM<0 zgjDr~2%=?;gOey&h*4~b7f5Mv2Xa|}gnk08*vSzK_YCzu)BRM!VZ6_zF^ijsWjGaY z7hj#c_6H~5U{ha^rVcSO4&$3r)%%2>pJk!BxA|ud>Whz1y_|I23C1>@gs5LcN8iIi zoaivoDcX~K;h@7&_MEHchuoVblNy?1$HMdU#-|TIlUS$=ml573Az?t?!QO56Jv&*$ za4aKdfq8h$Xlvu&cNEDe{9xm`-N)pj;?UzYPt8zYz+eHQ79i052@oq(HS6XU;_HS8 zgfeq+vQ#l88FeE@95xItE%8W7hAK+iz)*yD zNXn609lB_VvI7upqiKZh@?`L0q5C3Q%E>j3FcM8{8i`wGon*!vcuQU!{xDl{JqcY8 zv}Z=xQWY1i#tt%Vf`!lVW=VI5v(O|Po~aNMiH0ER=+VsT){NTzVb@uEGAd0NCAekX zv(?$5iM>~qS0nzw^oTxZ+3+<}4n=ydJzLL0yI=_L4wwqHq>nDqOaV|X6>h!pHj2-H zz`%S|Mz`4t_-)5zH4U@v@gj-++#qzzQ>U8e(0U}g8gCFvH4oVYu9`pGlHwF?%Do=r zI3-AH@!5X{^-fLr5*4CJ?FXeJS+_?o_YV%wD#^)7Fs)|j0vV;b(fJ{JKjqP;lFp*mG050Kp5Nxn<(!CXL(?(_)XJ+oUwM_I2c&?7+Un7& zuDu-bj@XK8c!Y!kF;d{98Q>msuWWQ>{?XFXdYyt!9N|v3Yp<~klsnDP1Uzgs zHZdV`(>n}r!v|VD<11XoaG(jZDDawuguB#tO*~@R$=H9C4Ou{JTSfSzN9}b}XA0jq zyIWN+<)np=Ewx#H`!3n^nx#3vg6^c|{O*PV9$+M)Wkz=T|j~)q{1RrlCRHX4`?Pb%3#3%<1f&*cl2w2V3MNV3GRs6_@@kdk&h!aE*+~ zE>JCxMPiMKiqlIepX4>sQ6_4ura)lUu_!WZ+oi6qj=PP- z?qS`~UO4I22ULW%n8&<&wZ<#|A8-hX7J#2^tAwg92}49;;{kpicvt*!=A5dA#z{p* zTI>ha-)}yApn(zwzENm%!j4Qli&&O+LrkZ{X`Cl^RTPYy!9imHgwU(uL9ab>Whf{p z2z>MbzenNPfrhl^pz@KsR zW9loh9RD$UDMGmzg_)!Uvbi}2_V3q2I!YmLyNpGsb#U$C`_4{%h`iW68HNwi8wq#Z(?0FDaag%re?FloW!gkRyTj)On=5@RTEKt*_A>Lvlex-9_XiuF zNwlAR6!`Z}$s0ob#Zf;pqak(F0^>tYsjCNZFkF6?a#S9s5<@@e#4ypf^5Xg%=Pq23 zht+;0LwF8?NaR$9;~n7Kn=ilR*}uOXWk6hGYR7J;Q|j80e{SnnWT9Ftc`2HDr@L ze4a%|+5&tj%$Dq>>m+OL#Kw^;*ye3M;D5NWY;I9^*4Bo&iXJoh_qoe2KtAbanc~$q zN*iflCG0w`sj4mKpzuk?AUwE4HRhvBON!A0;u9e(JBhTC<}I$KJPop*^#c{k}7WW{c4)Gf}dq zgfgR~{gorGUruL~Uj52S@6DYk88LVFd!d?|?cB{RTmnjU+vf-0KD6`={^>e+n{9=x z7gZDC_Qz=S%Mc$#auhg(h}cJ%)e*$Vm#N)T}n z*eSLA;HHjo=>Y-t&t_LWnv4or*+yfqCREj1db7ihT=qWl(j-H>?aYE(UUD)&sn^2q zv%&3|E@{U#ff;6z$e0KZUV;|}B-eF>P!b{|LUV0Av~BSoTuIDfC%9`L z*sF|`i@W&v;tR~8hrNH*3SZtLxJM{Z$S9V$_OHCWRxV$n6$|B}XZp%MUU5^fUH-Dh z&z{^GZJ^JUr+P`j0>*+kc9{yBE^=jAnQ z7bWfsZKe#RYZBO*^KU9qH|w+S zYDVU%>NG^PY+>}|KDtIZbyVQS{_iClAM7o-8ys8}_hD_Vi(Gw(za_U_VbIfCl4hh) z^AL%C{l_-@S%V96)3TH0E{GghG3}GhCuoDjCtzR~vr~Sogo|M&7+zr1dE*GgjF!b+ z(dbo!edz|%@pAC5FJ-xdygb47amx?A3p-nTIGCAF85~NBasXfeRcO;dhGAIF7EElr>1s_~ zxLQjdGDsvbh*5@H!W~gE&TYRmxCw20l-SNg;fkEsq9z;CfZ=i9k(8OC7kB|;jH+@S z%kb;M^OAj=jYsEsZfaik;uT@be=c+()ne}=d0FAttC&RB@y$$Qn0jdKZ-Z&?CN@s-;eNd zNa>6Stn^R%v$sUGFtFb;?6(X%?qy(^F2E+?k*>!dO}UUb-1P8Tn>ndDYoSx2JU2-6 z*bt5FnxUB{Qre#5s|T=rKf-r`d8(?4iYzRBF=Cn-7VSjIYW@a-GhZ^XKUi5VENU&}+lD+V|5_kokCcyg`KeGkWIcO%aXvHTJr)vHVy9 zgy?$Pwr%Hhbo@$tUd6}z!IzX+D(a?_A?0aRf|hTtk@Tds?pl#`4z61eU^{YmplJ73 z>C2vyFE1@gP{vYPa!-%j*F}Y!k@r0)(P9|z-u(F0Wuj)ohjkt-PKmA*nqXYWec`f> zK}TDGl?qY^W z4=HJilm7V^oT*gvq{|j&uSmFTF=-8cG`m;lJ)>sivO^VB`*7qvv9mcY_QLbraba%- ztEC!GkncvTx~?!P?-JSy5hJ2~D=I3w9u0x0BScwoH|@_&s*~-k5^L_1dd`nioLwL% zRvcSqFKRo^(ylZxRe6)@i>=wz&63j6*tc(y)-;Q`s=_SbJ=2-s-nga0w;sIIH&*lE zyMFzK?pFU4Y7*%wT!jKs2m)yo!$e5AxT=t4wCD$+bN3Is^FO`qa@N!9FeCdu)ACbk z3|p<H7QoQ1e#~hKBike=?n0=G95M5PvOJ&pH4)c3D`gH$6I|jOm zN_OCzwv_4%!;RdtqO$*T0sM+J^$$vVziHuxGfbor4N1Z^q|57WgHP+w-F>pdE1=xV?Ab$|@6$Eg{vkFFKDM$D%SE0uUWX^m>CL$vjJ{HCo1z1`1)gj( zc=zGkh07%BP2+bxJ4T+~&A4QLbVG|vA%=g-7I@gqW#&>L_T9YuJnJ8&e_683n~1_V z>O||?8`|f8{t#mf&c8L$z2QMY;UF^ypTzCh{`ES6^vbegM^6WP)Y6FaW|SVQczKWK zw(x5F`1{1HnGo_aF`04^s1DIQ$)3RoIaJJfXbRkUrX&|NLafSw>)|)Qa0G6!SD|Y@ zEkzP|`c#is>hxLdgT0*8hnd;;40q94abLcT^dSB-P4k2|g+i;9tJMoEyl&fv8&}ZM zfqtMGpna;TsR@?JMG-uWuE7z5O)D{r7zZv%XWcdv+4-JO%4VEIph5?x!QvAkv|u zq3Gy%MAv;OIU(!g$48JiV9vNKzC=LUsjW^XTLOLVfA%BJq^egGlvG5~;pjMjadrsq z_mt#Bon!fHzRh6!NxN+`SY{{AXN@NeDK{BRTkdiTVguT08*NW>nxzcn+0wFM2mi{`&tvGZj^$~7*1+g12YKW8Hx9R5(&eg8q%HL`b2!AL?W#HvMVs3o zLu>Ku5J_s&hY`~LJw*!Td_545tSu9=LB}}P|de)#Z zhj}V*&EKPTxLQ4pA)`Zq%|p@^S*hX0A8C}5YS()$dAQ`hY;Vq|Czkkbeh?jqh_{(- zV=g3`&oDTT1n?*C!9GMtZ=zdDR21m%Zee2jP6$w-_qfA$My@+-Wm&$M)H*0GMAcEo zvX-5$_Z8>#rY#&rg|?s8Ru^xrpF4v0o~9yX8AF>J)V%Y-cfC^E`lN9EL-HoxTE*#+L=31My@z-c5VV?B|b| zb6NHyFOz0l+Llb_vShnm?)ECnq2IMXEzqf5Y4Dc8;?)N+%2z7dRAs_{{M>WUIs5yk zJ`;iGmV0Nvhf9BS3%_;0h^f*rwF!p^hGBd>@0>5Oo_aGYA^n3RR_dAMWHJk*Wz9K( zfmspy0K4EPPgc6oATu^V(FHNrHApE*SfSSF&5@3>`&+y`&R%?R@^UlI%aW_odTV z<8i|=XT!0`yDLr$TwD%cYzqz>AAGRG_hmej%|Fu7OU?ou()|nkrqdgnPY1UvmA=(A z*|qzpeP)ZfA#{CenwqH&4<{$BF;A)-eKoXXvR`E4a5LrINPxeS$0%!J`1)=k&7)kVB9=7 zX;3sXrk$P-S0wO#%u^TEB>b{l&bG(1d|%UOG#1`q8jX2{KWFb9o0!c?x^NI&F+4#c zgNDG^E@SEM_tU;+zkPE|;&w%=z58tCRlzGs4U0~+1DPuu=TTR(XBVp=P2Zy{EY0R; zsW%BQ4;QFC@{gTkiS9JGkaNK|#^fLoER43B9?@!kr&|Kl9+d$Eo=dj{-88oN6>jSK zQ+p-pZgskQ3nTpoP(+^gYef#21%>1vT=Q_vXq4$Y=^6yK zU(q){^dr6R+cx?QQ6S+m?A*EO7>Ue2CF1^?ma) z+R;Zwd~}6l&aSWhjclnUE#1nDN~=CO9wZqw$}h*%kJ`MHUgz&?4557=?a86m-~zXq zrCc;1rZRkILoth4H+GH5xg*-}mmhA0b;7 zPMV%q&PvwY`a6%Em0n<1bOxLA_CMjy4(qS9J9C;J0Cj5RE$-~K9Fv58C+@VU&i^RW znTR*GuNc%u+<+S7kj7I@wui*dU#-n;AHd?!1}3O(q~W7 z&A~Sc-diQ6^Q!XAJr+~cVw$uqPyel0`u{RmV^8QbQlPo_LO^RtWL6fF=ch+Zo%6GM z-_^w(9Iss0mhYU|AG$m71M42@$C7Us9nZMr8gBl3glt6?(gnwujFU!|xIDet(tGPN zPrHhD!V!iOpMlnM#-S{BrRmQ9oaYf*TU^oOLyK@%r=$+Q8%tB&rgqk(b5QT%4UIhS z;pqRhB>QNDf9zvrpvy|pE8{vjUVx&_G1x-)xS@9myE z&iw>=P*n@FSwJM6d{g*?41cp5)sl1@ke99I-yd$;>9{{FkI?lNN zsZ8APg^rvj<^j2b;Aw*_QxN)JkTpQ`&}sPR>sR8Ds=9hqAWQ3frkRmdp~7vmPg+ZF zO}wfr`L+U-P1?(Ur48vU$t;}nLEp)X%N3iqI)0%8hpM;L9pn{&-slXV6m^Zha2hx0 z_=UWh5KAe5?yYj$Q6QMgU<5J=GJtsaI}d(5%Y^2ar|pxn_D_r5ypP`Z#gq>kBG+3R z^mAKR>aZ?f_T|67LGU_%214t{!Q9r)Kz#x2q(7EXwmNmMLo3BQevc`6LNr2(6`!2k z6Z^z`jI9s_Od12JU^0JXADXNV|NcTx+3Na3x?m#Nf;7pHUU_4a!3A@7=&mt=WGOk* zT#e2IJ(#Vl-_vNldnY%9XE|!l)e1C*zfQAp2^?y@XBwKaKcJ>kda^IJWYOQH@im1o zfh!tjzy}G$GoJ?L5+1@mK-@_|7qTFEU^S86`q{DILh-?DjCw9Y1Xo_|F>hl(-1eUI z27?kpCdq)4(Fw8|N(_Er>Ib10Aq`XV!ciQQ*}0BG;KS=Rc+6|p9V*q=JDjy`@Z0Kx zx3&ITN>9<&HFKYfr~FU88g&J205jb*Lz`6H58Qdnuul{N|8LoFuL!$!WC*_B8K8*fUl1uF(S}il=>p;*o zv4mx@on4P6hu$3knK;*1gDZJo4fng_g^q><9;dxtRe}wW4QdJrBA}p#9%(_0r+}_w z7Kj6TczAveX&{3DZAL13Y60`fJ7=<@EGZLpYd0}6&S>{`cQb6-bR3lyW{e{zV^tLk zze!0;U+tLQQ&}fO@={()@37^bc3r&%83(4;QBIu}+wkDj-<{3~lK*umc!P6Kx<$y$ z=Cu+(8Hmurn;R=IrFaY+lQhf*A(**C;fxl#Vn!XsiMSo6)cxp{T*z*=(XlGo^u0Yd z7?^W9XlUm76RL3P$jd@S?e3AzGPHSEwwh&PjN1Ay;qte)F_Y(e9+mJdsO6zqm}E{c zxIVv-VYk`VDWH|Cxak*YSaoO!l9QL8LhJAu6y9W_{hh|Y`G%;#xYo6o-bXflnRT18oZ``^JNO@1x3#m zhzj4E&;d~El(lqi@rF&u`)l_83V*TQXhJ|Rn~#9oe_kyyNAIuN!^^u1J++gfJUpvX zo4nf1EnW%Stn2RvNH0F!7Y)`XF-<^#xcK>Zb8;??9*sC~|Hh5QxaDXvJj0%gr!=bk z%3G)Y^Qyy15%QcfyCIp>F~;P}!3wuiXC0J3cw}tgAM^Fspz5c1pQb-Fpdx*WX_5-`^np+o?^y zeZe<6<@8RmKUdS;Sr_F+hx$Lt4(}&hpk*`ahyYmOmziUq#mn>HldUH#9{}A5|2sz= zU8Cty^knf7#(Y1MK%1b44>KIpTv=o|%Suj6&UZrHzXg=$yQRANmr5A3BqdJw*C(~w z<_&w4u1D7Veff?fb0a-Cn!@M2KTyzoP1J5t(rJkzE%YDOdxA^$0O{2tpbKS)>?p2l zXX(VZt_6!tA5b$iPj0PZeghBWR;sL`Vswuki$(ogHe${@B{s+WkgZjqzG11@!#gL- zT+q3S_Re0$!rwO=e-g#cbt^pANC+003frK;ZhTN@fyJxj2y74rN-twa`ipb|NgYwL zfL@TWYSO0rrNv+`XMer5g_1R1B{l_mQz^Ke*PBhhL71aH_dbHV2J1C9yT+Kx9H_-Hb6q*;a18Rk18i$bt=Y?*iC!SJQNuAeszU$@pPq!wL zG(+`ve>vdrds{T=*&uEii8TFJo>Nh| zIia>z=i?#P`?Db!XJ{|SakUm3h|t$!d2biT+p#d!7E51xu;ol}N>=T%OYup?0h5}LMbsFuYLCrgIt@?$LoVXD}OkDO}{pM zmJZm*C{^s8makKXIgf_$7bgEDGME;6tf~~tC41_WKJ-rDSJP`UAb!FST~J7KDzE;u z{fE4qyTTMi<(z&e*1xH1jG7A&Iqv6cWk;rp@KmccRjV$^t@HnA2NT7I)@qrXp5O?R zW)Ac0o`>w5H0#n&LoC)Ay$hMe*#y=ZKQT?eU&Z;qf{mIA5^ zH!L(RTwq2^kvc;i4O6$(rsH0Uhw!CAB@5vr!1TJBp(7Z;vQ!CRyhCwryLo`b2Qu^< zNI9Gc92zc|vnt(vX|LGbsW0vbFs}J2p}uK1)Di?0mT^qG^Cwkiv{`ouCp9GA>?2$B zNE;b_rNSB`UZ?#!O*ME;kV_TD0ycwu4IJruss8JL7kc zH&0q=3)9t&73wvIMgv1TxrIk7=KGYmtx*r}k5m5ugR^7e5>0nEB93pIXIQb6K8L|iQ)pnrcF@uj(E#D!#K*Iv^asiYGPjqHd5C=8CxOm-S2IB&!pkV8oTI#cCU_Kwgx;hRMjRM>&dhl#`bP7TtihL7U!Hmf}`U>bczx81=kfu2;rK}{m;;lP+MF3yD_t% zIWLkNXW!^Rzd`XB$J+_$GRAM)A%U$1 z)#R_O8Q8(lC!v`&D@b)GtD!CMk%`AY}!wN+2NB(E1A4Ct4HM>yYdT45DY8HG>DD9ckeL;fV zgRu4xD858u9RU$WS-RD=^!D`lLq6?{`xxQf{l+7b)#WQjgu;L@i35)XcaA&_mhh$H zFdHN>VAOGa4O5u0ydXikg>r_=`6%Zu5MA*hpdJaxY-7`cQx% zZ7Ul$Zx%N806hL1T|{q)KgQz)T7G0&TEL@6kJxu@GTKJJbQS4|Aps)1EYZBU?=hnV>6winp!F7p1-Rc3hGQ}HmPZnX|C971vZ3f0*f&YfOiyQG*N|I z`mHLg0&y$4CP+z-bUA``i%y*QgakTv2?;h&;Hd^Pv?LjyvceL<-bf<&8*tg}fj%~i zz1uyJ&5a?)6U0N@F%=?KaM3x+BTRa?;v%J0B%;WMJlRz0!ZbexwBR@7xhKMJhkxs` z??9vipAKEQUTAprBrYC07?ll$494PPrHm@arlC{_soq? z=3k$l2MN0HSAhc&{6jv`L(~+8?7OV9DUQFI4N2VtMitHh2IXb5sdR4K)%xa{zLELI zr#K747mmz*Sth9qzCJo4F!u=e%>)7)Yh6d)T2#T06X7^gPyq>dcDkw10J0Ul8P({? zCGDcRMHHkPq&o%b;XR}Y-&A-%CTN=%&e=n`#g0NU4fkK^5g^65Qi!Agn(&%0h2Kg& z=ZPoLAMH~Qh{Pj|^M2dDkDKpnAYoZ6IV*th!~ng&AkZ1yxA@&Iz=S0yqAI}RI$^cm znP(yx-$uIMAzqgS=|pRAFS%kdeUty+-ew#{6urBq2p(HkDf`P}}KPGZxh2Annj2QaH654go6p zV~BWvAZ0Bq=?V-Cd~(X6+k%d3Ddg%l^J$j7xw(=!%OQJOdw`}o2?P#vFE1Us`rX}r z$MfE;n?4qqtSmib%F$@1@xt`|YxgN-NjSQGaRP?GWn_bP=W3I7WG?3t4f{0gg&+y; z)~771okZ>t71tH^9RBuo=w{V+{Cd+Mb8cpfGz%O!iJe|H3?XsXuX)SBDf5pD@boyZ z0d`Z=NEc$Wl$s2zjUaSxWXw9|h9#TmhzH+dHiHZ5_zYJQjv*G4f99xX9yo0X<&9 zflHpd_pYOhfCZd8E;$xe+2nuLl$x{X) zi(k|Q?A|L@>&~t7|MjKmQc<=0ul*EgvUJU4U2PpQKrl{1;dyVMP}Ztj`MZP9(=mN) zxBA>`JK!3Z$jvaP+d2`-rydDhMQ#79eeNOf!J^He`fHMseGB`j zDPkR5O;zHHwrlNX>|8Ahj8A&=s=Mxbl{ScM8jo7U18q}Q(Wh(xp==Kmc>rkRfeRQA zu>OV+zJ30H-n&&DrQn4V`5)<1I~Vz$aA*6zeEni~-lYhju9F@Pj68rBm~-Mnek44; zXhshGM!Uin;yssEy=;E8c9U*<9$l~B*GMCNkPIG#hMof53)yQy24Eu6D+r&l<*h!x zjgfOS$%Owm>+TagCbuyX%x8)I8v0FO-pA||)i#Q4xyT{hb~N+KJKO&*Q zVkN12bPWv+r0q6L%t1*_tx12T_L)3AiOCmxcEwe)N?z{#-9NqUIy2)7)uKWh?=Y#~ zwV5x?wNnYnvy#M{NCceHe54- z+3`}>z=>t9HZkp0+$eTqmyKJS;zaKW=<)DF?Q!Nw$%8GU7&bD?n+>Hu1 zdS)3{n?HQ*srSLrH0f|rnh|}9#iV)1xYr%q^=Rwhg&ijtn)LOh`z$_-XPCE_qt%e< z`xV?v(C^9mnrA*iyump{Bv{cIGmECARm2wbzs-|6d-JhYY4Ueb^Jg*B5t5zWOZkIs zt*m6#L?m*uUWDYkS9Y?7-knH4Bd~36(RuBqD^|GYhu=B5M^0AuE4U7*{EoGD%s(Wy z8KL@q*eODLAUV1v+Rnq>eqBJxnux_BHed&+SUH?)+AK&EC_(TBEhu7Pw)gGZw=bYE zvw3pVd2pf81D(~#r8&gJW@g1|yx|f35RRkQt1YE>bqsP8fWL2n{Q{heMFN4K=oWWM z)-|B`i#x}Vw996TD_W+_e_a^9#I5qnqspD};;4YY``3P3*BA$$NjEX9J76;V?#kOk z&a4+B+^*TxG5UqC%QEr0bK?#g9s?sHMqI-D{lA)=k(Xbo%0pm|Yzk7wg@}Bywf7SX zW)9CkmRPZ3`$`T|I*uJPTU9S_@ZZI^F*7kanfkd_eWW!*O~Y(tnU}oAaBWLV=`+>( zm6^+e%GZ?hxhz_Icd_4rrln*5sQj8OwXe8(LRE z&4~&qW&+LgC&AmSp}J~dE;AV6^zLo3^&FL+kiL~$bNgt(PgrduOs&m9&(|yD#nAXk z=GsA_oO)WXSM&KC-{lC)D+^q4;)mrMTt?3xo-iIfo0_rJ?(SsySfRz`uvNo>6zb@& zZ5+MdCak;l<$LcvnH{HNuODhoKM~6CsQ^ zBVP5k-udKRcCi?46kbEoYmkY`s zKQRf2o0C(9_`09<=gx2m3#$f@sq+KK6KW9FKY08&0p(m1tknVE11O`Q=~XSQ*^~vU z)c|`_NRzmz+w`lg9^{{1yZHiQoGn@dAA^22GgwNg>XX@`0(5Bn-g*3$JqM&`sK zPd{t)+!N|XyznnvqtU|rT!_HMYtji6ib66@5+1b%acKjBbK@?6BJumyu)iYfzA&M) zpkiidMB`Pnc3(mA8()z z{K|D|jHT{&{Q;~Q?v)&PQpv)qnwrl6Ld)m;j*;@(%v+BFbr>$l_zA$9qW~DZ_i}UF z!LO+Jxa4a?zvdJ;;Yw&)AvFwgmDH^j=Be%pE?}ihW4d{=&lVA5WS1=fFG%6#xQt99 zTo3kgaD#C}bGjk0=U6zOx$fPPXYK7Xsv;zH2IukUpCezMY0<%Ack6nj2)(vb&n8~= zS0~*Ibx;8EBan z>R6u?c0wXR-1>ke-4{rInHVn@QoXGIATNKqe6-~BAqRspiM;tG{*=f=7hdQ}HwZ}w z04I+H-UvY%yQQ&Wz7jii4%(dZg-?w>d*W87Qy zO!F{QdX3vtQQQ!9pUnam8b_GHDqYaYsmD{(faFq^F>clLSOx#CgepC)OE1sAg5)E4 zaDm=i|F6fx*bozu#(tpS4e6l&I`cEi;nbQ6f28HJD`&tcfnLo6kU z^)4i<+V$5Sm;C*DZTI-pEA&n2B8a~6!aDW1%jw3$3mz4B62d;c% zPu3~ah6{@XxR&ZzSBf$W)qY5widI+S?_?iA<6gBv(-G+P0i=7-{Z4r|4|hiv2akFT zQlu-`%+AP3u^NTkpV>bl=E9H&IkX3;sH#3hauxOI)2F1*lA4Pr?!ATXe=^y3=v2t$ z=m+$v?ChL_I?M!8a%04z*4dh`y(yF|8GwpOzsf#0^tDivaBhR`-%KB?p>baYveXXMQFL>xFXLtuu)pS%0MgqFL!p7F<8jDl>VgSi%!wiSP z0@S10Wb9x-hlIoxsFn@vUp>s>PoNk|$i)I;kp3zw%-JDWR#nIZt)4>`p<5$<^xV*S zq<>8S`4Y7WoYRElHt5l#^IhlhIcMC$jhi+-L;eQ7dLNJn6)UTkBt+=x?Nu8>Jj8P- z?6hnxDVR?{!4R2~f2Bbk#QmbtI|pbuxoQqy`T2#b9D97FC*ouii2bOf-d?>Wb|oX< z6~MVF?W`23D|k3-funADh0b`T?0hE^)imx;Qzzq9Vp8|{AARWd zop(%sB*3PX(`jbyLp~Rtb(D~3T*4qJrII~<{KSbtyI1TUkBvoA?D&q?gmV0_* zl3HdL?2~jvUS)rx^gaHr`XK${_`>a-^0zlmDT!7*bUEhhrc>UUKN;k(h!U9i{CPbR z)B~UxV}X;9n(XD`szC;yj8SjKI31Z2izyVT4JcBDqF!TYyQ*&G^xG1gkP1d>G?*Z^ z0I*y*Fv=iH-1artQ3ieOh~qP-4^dq-ynnfw%rERY@ywaSr9LEHs=@|H&p9_sDmlCdC3gw$k1#jjR2v4X< ztf5@ViWH`YWNI8y#&0=~(0Kx8Ms-UxGllXsq28osG~K=@EIsMP+t}aZXXU=TTJb*m zy(a>W6$`>TV)ko)*YBK|^5Bo^8Q1F4*beQ{F$@o&|0q86IbQ<+e)7I~@EFcvuwfd4 zj0fT2=2C(bPk-nn)kRuSq>7hNnf-!-Hhn0jr>s&`HdfIdEmqo*>(Gq&Ej z*UabeyM8*aMShE~6jZIAsqb4ZAoVeB#Ujd$Ou0haoVO_(N`%REeVD1_omZ7jj^?gU z3Bu?hZXx|IP7@=l#+siPdWUK>s_Y`(+y8uFx+Jb!zMF41rLr3MKj4%z{YZ*ssnoZ4 z5MzknC(rNIemtWgw--Vg>*D7Y?5n3JyQI%O#Y)CU<-K{j^Z1&}YwUGL_WJmSKEt_5%XR|(OtZQt=rq(cu+IA4 zt6J;BO~zXW&kgqdcj3v@?1InP8i&Z)EluSwB~OIglq8xmo7i$tu2^I5rJ|oD1(EIm zV9kNn%vATu+zzf?yGr`5;CnocYF1G^4ZaVi+q*sPtq*oO-4l^If8vPdgEL_}_^ReQ z_NLWF-uTv)+1kS9f!DHRt+)xo(9(qu&s9%$o1<+ zoon9BTK?WaMT7Fmz(0q>u|79UEx#p)+H5Di`;7CdQzqKsSB@n(2JfB%@zn`<#Lr!BfZjwMe?-FbB*2`OU3y6n zbbyTWDrT(+l+J^s@t|q20boPWlP5{2B3%Lc7@*wicvSHA{=py-I?9dovH!g6-G^$$ znD;pwT(~w*O?Z~UdRN&hTV$ofm zuLe}_cKNnBx{I9dpYuf&+mdY)M?&SP@!mlwnkL)KAXI^uj{B^4`iZat=AI}+8dL}l zZVp;V4>;Tq#Fu~gP>(ZDn!oGg6Vx%%1n43K8EN9VxYN^UI7lK+vugB~!5Tv$dP>oa zdlktoj(e0A+BPN`KIH718`?MBc|(5qKQHy;s>a8H1tmnsLJdyw)ze?EPV#Wc-0_`f zaodBuqbKB4lR_^%PE%H9Vp~RGSd2`z5k-h3?Fcc4(~`4a*EV38k>9()R|yGdb)o*b zS3)Ac6K|CR{6L5=V zL-z6k0fB)BFsdfe15G+L5yPOGePi|`yGp~`t@SUL?RU(o z@uyJe#sJ0sX{e($rE{bXThKgk^K&?1L z3W+bl@t=!W825OEtRCLG-MWI8<$&>nmP`u^-P&78gP36}(YmqM9Oj=K9-+3H+3elj z;U9?~dSad<+p#b|Nku!O0=jb}A2fY~v!$&h?xotfSl4vUI>QLJSg4>HApn5PU$Fah zU4(J*t<`Dgd6veS9o!!wM){ToBHtY3coKz$QLiv-PCJfJy&gkTV#)FXhJB7mATeVK z@cAp$N7_MZa)#=!9YCX#0U4&vPvH^e0>;M2?ND%Uhseg5Bj0J0Jn-e`py`$>T17HL zvyK8HK9;~T2rKVC)7mir(OS3UuKNQSP@yhoC4`?INqz;GRjUylB$+gp_& zW^rCy5fW(W!-Wg(m5>!ShBDq|lCcB3NboK z7Iq+sm|!@FiXOyPN%ER=a12!qV-)l*I!HGgq$eP36~&k!>L~P3ju9u%y5=@206cMZ z2}ms)#YF7(Bo4K)NjTSU>|NuT{d;bnWwlyT!`{M$PSeF5GoL4gAT{NN6%++Svq6{u z`9yeXYR=tZOC42$OTKut5cu}n5zbSD*oK|6bK0zq1d9*3Mtho*MdYhzC+0T z!n)MTO*u8~D4qgJ+856@Hu2?aw9YQ9DV%n&9K8B!+}S`W%3ZuO^p*o(ZmbL?fRjNAZpApUkM$WJzxjs*aRi1#P&@ilQR$i;X>$iI-nkdoSgDMC!T04evjRo*sii$ z7RvjI5C>1xcIf*kjXpYs(C4EAq7Il0B2nDuNYyY*f0y5J_1is-OLo2gNnnaOrtuP0Ao$pZ9-T4P#s7BbfpO2 zWzp~(XhM>&gVEjy=qM&m7D_1i6@UFmqGSnKl3|lc168BkmxVWkuUdW$$_{`Uk{Txw z0;=G-)f4C9N*M4DR#ejAwOi4kj>nXW0`k(4NeJ;R*{;y_C}DGdXP)J1JMbe_+nqMc zp+uWPk~OB(K?j`x5>A2I*5ve|(>f__Tyt8mI-z*Unkhb$QEO;E6hCj8^i+o^U9Xa-Xk0diZo4yZ>ZErd zXql72vm~Xp1=rUY*DQ*@_=XuMX4k?_Bx&n7wAQVD{RKQXXt0H8*y z%`E0X#qUpV{s`aCpxiOLz^3ko^rrRUY_)qq!>^i zhZwp#ZniQKCoJv`^qhxG*kfpO5>!!@^C3`i4)3f!weg^VB&IA=>tGoYwV(92$ucgq z3Yoa!Uny?_+s&JRQ4_NTttO++w|7-URkXi(k*$Nt?NOLyK;VBL zrhP{O23S+M|6cHyqz7xXLKYTcZ2q#^0dLk2UjY!$2y}$Ke0+%d^YJkT z+Ij_78YJ1x1%ME!JU2U(I}FxMfIa4AF_ZhwGq zf{3_FfON2zpT7xvofzOPY+Sk!bf$t81e>S|+!Z9Okmsu7JP}vE*({560_W^exMSxE zyTNy>tzRD_D5>J(rl%W9?8EkCBt*VVk(0f<`SyB^^BcGIoU4`}U)b$<`SQT;Z^f7V z4f{?W=g|TFTCE~H@tJ#so>KV{I@7N(7JUvC(O{0DjzS$kIZ4jl&|j5Yn_y7XGu|$z zWNP{xWgZj7kfH&27BbV#3=B#myU$cc^AE1W91Z6gQ=li@5PN>PA%GbvYSU(~;{*iT zckx=$hu$?(`63cdwIH+OUrx``NiQ$S1zehByswNTh~x z-Kh^>+PFhDVrl%t_&o`)gak?ja~?|NK2+ba=Gfk0)4qnl397u|eGGxjMJsD+ z&+)}%mC3ChQA%lj7p`KxYJ5S&@N>9Zw`Qi?FZvmM-o46~U9TZzVeb~7{ZV|+*Ehvk z3+5Aj6tavXr}*LNoGs8|)$&sBHb+0S))0<$UJDr-)AVWPREF4(d1l3>mp9DZ)B?pI zX4H86MzOTpM6;nJzE%F8Vp8;lwfgAi2l_jexOA5pE=>wfjO{Mqhay)ACu0qeNw{bFJj zr-pxm)W71jg#t}269|J3w7^Eot=kB&yUN?5#?^cOk zdTZ7j!HQG9Cc@LUe&yv72i|q9Z)0&hnm~7Vz@bbhrI^~Cd?vopIyUl@*w_|TFOGKB zNOfR+%IYkS^q95eBQN|C&U<)Ot72m?lk>#)gF}sv?}SW1^Xzy_c@S$?U?oeqL(ul$ zdGt#wvU_X}{rdi}H`XfA+m|F>H(r6+2Dg1Cz;^nl5v+2~Kt2>iFfQa`Knw`)@tDt3 z)pesh)69)|%g&7hD^<+`vWcg`?<;S%aM&~%ert*OGC#~*iJS8}wb~$^Yj2{J$ccAv zZ=#PMoCt-a^+1~S#yQHtE#uhF0{Q^NsUsMcXxkWzE*hlsZFG@ z>?v<0X=z>G%eK5%A7)a&QoT>}p0l>@YdGihHaXBYWa8KfF%_jZ?F;b{9sL0gQX!!l zBIW+s$A|Z2GO?|o90APN{u3-COu9IMyl-En>jcs&DS`8;c`GQCD|v^1hgg1q=jDt!y#KfW*Xu|^8RZ2#NZB4EC@6>R zaCy|R`_s$HzJmZR`7D;6R626x8W}i(%0+vTGWp&<0+&eL8TDq`B@3i8$n_Ne68t-b z!g8N>pxCs_&-dm`_)(uL`+nEL3DMrsaJ2zsG-{u~D`CzS6|x2mOE%Ax~@pRTu~j!J9($ZigvA1Otd9hKE5XRY(RHQ#``ZEw0~z01(ZNx zzv1NaQ}wd#E7RL+%Tz7PvDDiaRTpg!z(k`z=l3N9p$mn5mE*G2K^+Fcz+%%L z1T+8p5HsyVbRNfI^4yk{btd`g&8YrO*F6P}!drL>d}Xtb)_+-+t@ngy)24rS@!}0~ z)fb-%ipqT6ntz##KiI9w{(nArg!aKsHs@%L_t|FA-IH5Fm;O1)m9+0$r*p|<3ILkA z(vB0SGyW~sqe${RJ+fNMyj|AXv|ZP7J?%3Ld{^*c1_M{FupW7HZjIMQ&1={MMAzU= zPl4VEXM%+1qeG{>>e~waqUW?9z9qhpYwyXe7x-G19OFjrh}(z@W(NA_X{VBw4-+Jc zsDv>rwvWcrdfrOPD#+cd@h-9RqjcEkeECv0M#c@k_wTC#V|(D|r)voX4IqQ)<+?IA zJt1oO#S`X$8z4UW{VH!a|BJrIBR2OARaXzOuET%{?Ay9mBSj?Y4vw^QQ!SzCU zMPhzLU|@8K7h}bc{gwv|IE+*lswh;<>4*a;UOqUXDzTkXr1@v15V{8i2JXC&JZ4vL zdQAS8`sVe}l&OhTc+Q1SQX;R0B|(JPQos6_gq-+VVgmo_6cfQLapkaKlEh z$b4_#`G`l`!p97HY5<8^AB>WN-0+9>+ykH$zB>RrEc)rw9oNs%EnnJ5o;L4LNe}H^ zyLPFh&e`X>vWdQT@AfmzzO7P2)$nn{et!@UQ2SsXc|dR61?FFFklrsj-z8ZOdj;s- z#Tm>dZ{H>C%N+&DO}0jhHH%)s=_c6#vQ?BSSm?msl&&V$hFu(Z0PlsgW0>-lj;byx zX|E6>WgFCo_;2ouXOq6ThyYVnA z--#ju)psUkgs-rUtM$G3g)JDu$ zUO`zF|NNYF%?YYiVR6*G;rs?JVVSjM(aWDyM&2OjLScXKg7&j}0Y{=7Scm!r5-yJW zrO{yC?b`J$sW|aj+BONE>S-10`?(E$@w87B=>k-vEZ5@;mWNCcI2j4T!{N5KO)X}1 z4rN*drJk^WsGEf%ZIe(K{(Ho^oI=@<=xxMR{b@x2M^mTAzwOWDLsnRT>rA0^+E6p^ zOjEYC`FU-S$le3q;vqbLR2h8555{lX2%M=br)mQB;I(k?(O?@gPoCO|sb))V%^crRclm zzlkMDe~*G=-8}NYx%zLDa(kBByQy+-$p6wpZd}n@*n{%@-!>m=a_7V)B>jv!;e)eO zNJ&dmIvi2m$E3D#4RdPH|L-}zpPksAS0lHGQqpTYb#pdL8X8&scKBo(6Ahy3VU)+zXx? z)I4NwCPK4>aQ{cP7kd7{Yz|OnE#41K?A^ETEO3_?IKV_R(Bk62QA~`FKe_cj8KGH= z@l8BPmO(Ah0OEB{S@{8n5#+MLaCg@~1~b7_6?Ry~eSqYy2h`QZy+aZb3 zw;KjJ3Jd8r!KAD2ZOI5W{HRDCB9rDtLG9xb|GX_HLv7t+Qn^KWG9Mf-4q39lky&c$ zT^DNcW$!bkE5>o*5Cj&@v1wFF^ z&w{lR)g9Q$sCg^Un-;ArR7DUYEphk=V{d^|*Q|)ecBgqgb*`spJPz3#CUh_4Cylih z=-EEyMAL?uEvjyKg=n5Uv!NcD{-({FRr7y2ilbhq48EF=nY^5w5YRcoB|*tIiKVc9 zIqI`1xu^f)5!be`!v1{ODkdFtmbd%U6W*EE*qk)uM3LTDTj>d)Wv_^c8cK{0IY^Be zXlWn^r2CDLn+NcnUQLefh6+l=q(rPB;n zV(fUDqxjO@i)d&4dOdD`^N{@C7Ght5GHhuJvR>UyH)$EzadHE$(ZYNS>Rz z!G$=0_MOrUwUrcEQuZOr_AFhyx5D5IES#~sdf!o=Rf8h!6R$UJ9X^gz5lLn_+!weNGwR{?r%P^DJ-YV zIpw@>wc5XDb1@T%?AT?k&*U6+zkM|218-Vb`M;gLoSm2isQ_i>I;HS^8#rWBO2${8 z{$u+W-6fVJzO!HQI3h;8}CEB5~aQz#v!0vvrxU!rsUrt zeWd@qg{tWAMUnT2B~4b;EunoKLlp^3JVl+%S(3_CN7FpQxJ!q_{vET4=D*^bp7meT zG&vkZ{dw)R5xxXAm`Wl-%798uM!q=x?Xph$3aV+;-*B<$0PW3`vi;6^#8d--JM?R4 z-#=?eTeC0sX6CxRzE|bC3JWb!A3UA*( zYsx~i&RNF8RvVO=8;(?knl|6xD){%nS#rb|7O9Nq?&uD8e8TabYI~Ju>;1n6E^45i z6idug6A`Ceq(0qwp@WC_|NHEJ>RHn~TU@j(oj$=Z+p` z$qU5r-~G1^LA29tdRv!%f3K*W|Agkt&_Pv}zcGA0DJD{~42ESL%0?{9sAhqtabrGz zuVp}2L=^8X*9qFk+rw<*r5V8+WHRa+ba-|HOzjl|(ji7RWPlI^_JIDq`Em?DE_H>} zZz(J#bsjHFbJO*!CAT*{tnS%r9|+$nw9~LEv<7^MowDG)y}L#3@DZlE#dH);85`Q8 zHtXv1-0 zj-1p|1c=H?N>AZE^3iv|BH{cB#DU$i(_p2%0?;K}OK3TmWD*|*#Gc%>dm*|i{yCoB-wz83AGk%$5Yz=n+*&Kp1d$JuW8B0-sy6gKDX z($5lPbDsFchi$PR{yq@$BTbm`9tm0lA#)<&6{dv&3~3}brz{So#V}Oo?B~xIamR~3 zVA41Wj&eKkCMApZOtXKX`S~vl7uw9TAMy(Qec&s%5Uemr*!PhA8#v;J{j0IpE4PjIbRs;`p)K!6W!s$7pFhv(^X9YnCieWbCy~vx zhxb~!#IUN04ApPEf?r?Kx$JLtEhJC-sN$5?I_ooe3fN{jQk(CW{yVVbp92HR=Y+mb z+QZObo4LJz?diwwv~8&H#->7lN{f#W+`=8&{vDT__Q}9_Z{zLNm4U=aF9;u8O}m)N zmE=l4>Wk-3Cq6yLc%gdp`)qgWUpsb1m}VO}dk|62uDPwLAyTI5*z)hFEB_po7EHrV zKjK4Zjhz!qGHk?()t*8s9GQVb$_4n`KZ8(5b2O{Io?h@pbm<=SXD`w|mrct_ZpD** zS6@lY{?uRdUDWnnh5!kb!7hC#n}4};xy-M~7D;Y;t$G(VJZ}&iArl^lDcE-3Kb_?Z zuK1f8+@Rg3BE{jK38Fva45^5llm$&6%&uD(5CaKOStVQBR~Rjm(A}-SQ;+6n85(K% z0h96g>*AI#-Vd9)g61lovy4Chg~qL_q3VIf-<9>luG9bZ)l`W>-s#|D-i=S?8HT2|o|1gl(EAHEI z59B&fALpzfc8Gn}4OBVj?=MTcEf2o3?N^e3^aJ97RRsB znY4!|T*G@5p|^x*O0fND@Z6t+A+LZL_lOxE*Sw@0ec>s9Jm(lR8hrM3td`Ihb4#mo zL+yLR2U@Uj>Kkg|LEsmH%#Wf3C&(H{NrY0mXcf(gGQH`yZDbnPFdJL7ZC7EjRl^MV zN-3@9jb0m~XF&jMK#%Ivi20v!2$;N!2{2W}fOM29vUuRi;*&}kEh9kVhzKMQ)&j`7 zjcAjMLeUk^h`?g_V785H^ zDbCX5Bh@Ki=h&qIF?fRTKWTTB$ae~OK?UZF2gaZ2r#A~h00s4QZ)({`(@}l$uCkom zJpwtJwPl?}G41)NJK=?(jf_5k_UY>&@q)Jw>a74P?V7R>m@9-HJc~*fd=wgu{Gk*a z6dG!3D}>`wF7Ei|VIVwA>7oy$U#>#iS!EcSEO+{J>|$?M7g6m^rm`{$)=O%C|yC2%OWhMXaV{gEauj#vPV#`wr{z#-nYM? zGRMG5!#~dBFI?`mE57vhpAAaUHAb3tI3l%bGWv;tyc-l|uUohMf!_amwiN!2#(%Tp z4_ezgxPA1}n?ZZrM4Z5%6Vx?!FO=j#srR-w=rjLZVm)Kk|M<#{v(q2uN7lYBA-49< z>k(}s|NQ+F4cYwj_y32*2vKx*F91MgXzT3>MVor03*Nr#7;taU`Xp1j{1Hl_aNW8{ z=QuN4&G1uD59L=rfBp*odJq^Jw!RNO0H}u`Zoq;&K~svI(*CpLR}Do(rEJg!MMZ-$ z_>(5!_Q{<*DIi*Vz$UjH^`=0C5txse3e$r`tQ;1@7SrzWliUXmH1r+xNdrZLP27=G zQ^7mmCwe*>`Robw_2yW9z4p$R&BQiT20fQ5GBUT|)4<+g53aau8)Kq+{(L;NDP(IM z3dX};r1aEIrg1?1?dII%7>Fal9b$l`Jd24TkUe?bUwu@x~@E4k~daHfqJW9T!lN*~KycE|bIslCSlszbHjIq$sh)Eil)|SR8LI%rZPP?kIa&^T> zk35+ijiqh;gTa4vty#7FX%1hwPJqAvI$>Oz!dj(ZxPTWqty8TICOUkQl9JD3pEYM$ z=_TW2ez^SCL;ks{YqZ|+68i(U8S^2Fm2q*3cpL}k_*TY!d)HGZ+`x$;J*MGDvTG-; z4@%zrlR+-JzvRaCn3P;m*j`Gnd0wgdzQ5Bs^TJfK z{WE80Zb81ByGmM5+RStk`uY;^?=Rh-9TrJEC*6h^}W7fm-`Rdvl%yq)Ey9vt||7sp_cllOQouoZOn;#pxwMDAZ$Q1NA09Xu!>`zXx6ZNP*}d= zh&}fL+wYMc-P!qVpC3hcZfMwYb)9P5^fB!?M;Ccn#wT087913$eAxoxMDYAnwZ~q_ z{q*gj%LF}&bQ2I%qvq_jYc`ApXl+c!yhv%V{$x(9$bxJHp*^YRIllb+1E>d6qH%)) zDj03@+S0D^TF(?Vu%FM-V%glJT*G4Sao6_6yqBShs)6?Nl66nlhOu%7+DGIjDoAQP zj29pmuIV~lIs+U6Ib=WbL0{}#$W$%I;MK%v;P)?GTZrNUn*H2dvQ){ zi^a2_PX5Z@a>p`yIaEyja&B7En~gIk#Q%!Bl6YvhQRU_Yoi8j`=z>*v*!T+*6^c7u zrjl9;gBiox<2hVHon`FLrj}J9m{0oo(>7Z(CAM-oW%(o0&;SY*;o#StT{QfEGRwgJ zJY8fp{H94w$L$$}0?1D~qhrX&cY~!x{=`GVX9^0|Xx!jP;(HGGN&eyzOba|u2!xqiC!)E^l9MDx(|8Ybs+Q#r+ zkUv#+li5IF@s#zx-Ioqrs*U$_bw@4!p4Xs9PN%Vxgm$vd3%N~Zd20D*x<~h{9ubrC zWyrN@9UR@O*I*EKzi`?^hKk{tcZk;aamfzPQ^J0~(G)Mf@nmmX-M9(3<}l$L*C^)%n0ZHiaU+5tAd z>b2b?9&Q~KPT@P;F4&*c$u4YsKW_Ny+w7X-VfOtCPEGx{1BaVFJ*3}s(P}BjGD>7W z2PfwMa5v!|X8{Bw==5y>Am;76eq(6v4>&nOX1m!QqNJ7tnqm%eMAC>A9le;fm(TU_ zTpL}Kr-77bcKfh%Z{um7fyjXJfDj8;JLz_dD~#6X4&`P3kg&6(T6{Vk_ssYBOQe1) zPREmg+vwqZ`tf|$vW|sG z#(W(^UM;O5JH1oevgfpW9c&vBPe| z$&)7)m6eNov(G?eDnZ6mzhI;X0fWw{OY>!`c#rytfo*pA97Y~f`-1GeY6kA{@bZ6- z?I~%E(d6Py%;hXuUHA6kQCqiTeG-47Ey|+X22u?5B9NWe^b@R&KN~G%tgIXReqRgb zMhKz3CR%UtF=OLIM6V>UfaEVms^2C-31Vlv#`P!w2iVd`HQRMR2;Dc+D-3oBW~)z2 z*PuRk^b(Yt+#7A1YOvKq9{0o6q+)vrtBB@N4WW6XJv86SpiZK}kKRA;eos8?uQidB zG09!65&x{@3H9fP&B^@D&w|f*JSD#zHM}|BuBqu(Ek18Z`zR%lR{PxF(C8nzZCC8z ziM#!xBis#!y@Id4f8U%enyIyIV{+}X<4N6V2Zcmq3puGQv9d3Z2I;QNznM!5-im@~ zQQy6n$NR;sq9?+#Y64=Yy$;6B&AjSo^AsY&D?Y~c3jU1Iu8oX04{0;bGWTJ7x@E@^ z3%2zX0ZV!Pp9oedvd5&A(@icIa%qaw5~1aLVUq}v&c~NQh&11Tnvk4wiV7Xb~#&(+^oW`o~bsgBlmf_&Aw7BU1q%Mxj%=G#i5gdmu?%$ zC4F73Zdf#AZ-SB;x_*?>+h0^IUhU?+eDd$|4HJ2b4GH-A;5l7Uz8bF&Yt3Hi!pOp7Hv z`)|7LC!@5S!L|hD0VRic!r9}5yN7l*JJ=U+wKX6|7$Cigj`C6b zr`_eYx*$lZ^KSU8dzt{tg%hF>w1S4Je0_5UmFOyFwH|9@Zh8QT~P znJ~>HDN|WOWeH{qWYm~imU^IU@M zBWO1?f6QIR?kucUX#@%HADi0hO)piUbV+Gi157^Y_NKru)R^k43}ak%HQfYjvUCJr zqo9+RDUH4AFWkL5d$5svScW47*d(XA**X5-mxeb*KB!w!+Ph)SdAsU=7JpOGXk8sT zrmo>t>wvM(>?|6aBWFC_rty81u37X81QyT2S5*rb(!N$6-4HdKI(2HigX+ihuh_*a z{slHa+Bxvhp^%+BJ79(*8CQA9CUwLZ`gEN;UzpHKWk(;Ir#98G??!otX1RJMmQK8H z){=btH9nwq;*K0n%N>XYgHR{w2k+K*D9>O#}b8zyzs z**9`pKg)rtPt?0^{OaBU^IukO(A0^zFmthL&wZ-j9o0N^arJPs^M^g#TA$_EeWPk$ zW4UNcYW8uD@aU-M(;^+SP8wo>K=*y|-M}I^<6h z6+r_LI{U7;v_R8fZmUo0x!)#vH$+g> zJd=}?Q)e7r=$IS}{*a8juo-l{6sv^;K;J4~coUV^nYCh7y~>m})D__LRclY&*Sc1s zH*{$5qN0|+9oop(I(O}=J7K~Sa?eXeFR~Llw!Zt~2HjG9qgdTi^=J2YMeQrLb}mnK z{HD!bYNY^2Uw*K)P_3=^x_0$_iQW_a9=#i8MK6w7M0YFBsa3_-w{1#kdo|AG5PXbe z#9W)nUkfg-oG#hu-+!hL8ntRy?wK=wkvX?I;bNz;ifp!%nhrF|Y616$bszs33RWW( z0+R&bWNB+VQXyfa)MmGA-Wh1^!RbDeCt zG{gBPCusQk`WliUDFsGRIpZe{orV*tLxv0yYC6(kS_>8|K%ESssO3scGQfFiYHE&8 zuSBAID||^ps*Iwd@2S98!o3=%5J0AIY>((#XWqIsom?w z{y$%U>XwCL_2WZ_KBJ%TH0@_|D{jaRO#!yU2nZbMOO5N z`jgxGC>%^)_V6FtFXh6v?c1%EEUEsmKHf%Ot;=BT-u=Cg@xkqnh)nE6flk%S2V67r%v-JvK%n2G=y40{?kn3LOxg=tzHm~y= z0UXPCSS3=SBKH^SN3I6jJfMbNu(`YYrR9h$^&C3c7XH~NV@=Dc{e80KjVjt%m=AO! zHHHoyicF!EbkT{W4)p4-qVnu>M1t2Yw-|VEmHg_CImBGwV-S>KX=$eRYuB1Q5=^tO zw>4`ZAMdSw7_;?BOF-hdd+r{8yZ$}vN}RiP^!7C_^fdlCo&-#xXl>Q-QDS z@6|C;Bip_*^M1^>S*;glx9o!aRgJ={1VI5oK~WG`=EA8us(FgxG(^8gG)qtcdfm`4 zcI14Z0_ZFT>MTC?uY`mIN)VRj<|{n4^%f?3Z=~fL^ty6iU|`_Hi4y~YgI#&P?Bz>+ z3V|Gq(CJBKJYW9&d1!I5ZRqq3pO9~()RVR5vfALxo>i5VTI}13^74U${mkAqH)pye zL|?p^Q*CbhwSj>-w`5PY1>$4jJ9entI_U5Ba?bWnf3yQ@%tyd+wwu!WE>yDy0&0|9 zYKq6Q&6^VuD;}nxB7&zL{q=W>0e-5=9tUn5(fh*Y-qXnn0gWpZGdBOxaNFI>EAZO2 zYYrY&ZWB0r>uY7L*W5qFbDD2Xk4a8WwofRU_avp%?!kePU2H#$?_}Fu>oeIlA3vJI zWRtQjNtmbb*NdtT$*ul$-}v@YhoucChVqCKb-!=9;?P@SJ9S3-wYw{wZ^w@xU*%@X zQ!0A?D|gD@@-Q&^_`3XjOg&xxYJbfAxRKg_*1FT_rhT_hK8Y;&FXq&@{iPL}fAr8^ zOaFe1ai@X1{$tPDUrJloul;+;KmISDVro=`!Oqo4`>H$zQ)u;N(?@jS%+U5TChy*n zv9Nvp<>$2WkH<)UUg7>YbDH@!K zP1i~;J~vVCg<@Z%O}ryyt3ByuI;4C`1k&x@G-H1`aYA>>lvMXN*O-Y!NK!GIJbCiW zy?=hr>O&1vam)Jk_V^nFo!Ue04&%rVK zmO1hd3E;lQT1-L{FzWk+SdS98M02)xQAymBJGhc=N#kEnED#7Ws5l^UD>`GwSP(&t z;ex6k#RW5s?JVKgo!_CWe(SDU*el5ROjK>|pQyeiTN z$y>ePx);f-z}P22ko)7kU%BvGVr&Fh`rMF?=tkJ7-ZHnF5{yETk zpqgk2l;`y6)1t(I{7)48!Y>C8vQ1m{YXpp|pmEMY9CIY*Gz7ud42^GuA~Pc+mvD66 zlRm$94$K-=)!|KDZs=a`hU&5p+Zc)`7G79tfi3PbbJyzz#)X^sh5=;({hv%QOex<2{MFdauU72dwQHdI zFqZ(`ienyA3t?jRfk3YdQ73Qr*SSaDLhs#M%?j2EOKZLn~k zpq#lc=FXdUBskbEGNBoE%P@`tE0v#iHx@DTGdyFZvw*`2#tC@W!4Drk^f>tHwiLy= z*@YofJK{<7;4PhiHK7^FwuoAKIXu!Gz7uLEiyeJ>jVX^!Ok4u%PAC2Xw;S_5{{9xc zCG~zQG!s1Z#^f7n7#S^vDr@29cG2VbQun=4ceWSrQdnf#FkId8{-fxVw?>^8UU6dL zt^l2OE+j~G;Dkh4Hxx%DqC_nc@v{jEyO(|Sl-xraDL}R#A4D`O zPLHu>Zi>aabrEc^d4<_DwbJk0abi2pnL8Kk)-JNVHsPuI?b~-4-#%^n^aH)#1TBeK zOyC*KeIPHh;=5Xf&g=;uZy9l(&9AF=W5#})<7;8`?YHv?f(ZmprK@D^w zEXsl0vSpX)NoJP0X|rfVEJ*Ghb#V7WWa~Z}GI&+#IRNcj9aM}iiu2=(QyEY#;0bhz z8<5S{W;A%esv`vjmgGb8@ZR#tM7<-U3mt=;ZX&eg%C*!1wOD9sx})|{oNJI%hkJE6 zb&p;)OK*7A7ca%Q;-rsymMO|eF7uy7JeworPTG|X9EiZ6m6Pc=V9~Q5Am?n289X41 zf3AJ;1<{N!`q8WJ*4W!;xFnceeN}#sl2YN>8Qnvtby5j9%pRR8_{Y8rCNl5IfCf-b z^`Y1kD1dOO4Tuf3!wI)Mbx0`Mh=~$l`5=@lq)DX^ST>^3=SKZ-yBcBPu@f?#yg0Se z5f^U1aA@V?$}5G7%kL$>ae zmWIQ^^9D>E<?dq4<8ALQGM_Ytp48gY_mn1<^Lq5P?DfBm`3YV1fLfjv zLMc17kgxieZR^eM`Vm0y#MguY+v(c1s}pn1XYT%V0E0QMu0Lorz_KUB06yo{ur_B> z({*s8#50$;SVO}U1NqZgR-XQTzpBO*0)4hiWJCH2A|UuUPq&2Hj$UB$ZMzi7Fa^kT zppJ{^9Cql?K~sTuI5*@&#Co!#80v>kpkyQ?!Vgxd-=2Q;&^0QUU#eF$V*Iy6p7+ep z&$qg^$yqT#tK>cv4D`45fBG_rss$nrGlWRb_Y!Jnkd7DeZ6PAtY&fHhP;{}eekjCm(9`pFIY4@HzI$Bzl$_m)b!(Df( znD$>CZ*%H!`c`jmXnhZ!{Tv&N+d|ao;i6l=96NUkcs-d?Gj2q90-^;4)jA;XQCrUg z8~=9xIrFbSd&Uqta2VIVpEzlfZsUO%YO@*8l)nD@=JE6UT-VGQ(E4Jzx<~3I1X+b5 z9Y?i;ex(CMZ$~Hu4(@>{Kd`qVFyw=#_+00-t`90+c7@3_@y4t6aS0S}qQNEwYe$k|DkR7$lK?{P9OH3`Z>i zFS$(+vVmYhIc6B50Ggxaw3pPwFON=maOcjQrqvs{Z-O<>FQ2dM(6OWNl`~69mX(#2 zA&@nmyZrQ${XR~Jwj$g(ZX1Y|K`^P|rC-1WIq=@_BrO=c^G;7(nv#-o6>7g_g3B_C zie6TI+g3^Ro;Cx?GL~i>IjBICW$zek1{zqHkT^#R5`>mefal8US+1_GY(C+t9`VkO zL#@vX1s9f%5e_B6tB93}q;Kf0>ucClqOC?k9SX;ynzcdTKZkJZ-{=Z* zNPbNV7_)F|sRIc2lvMqMj+YQgIULl*Vv)j&K&&x5$8XvN9u4 zwZP~08Zt40gxz9UUqosnxcm{|c`@9ER`uqFOY<(hR=1D2So9*w>Q?IYc3Q%#0jIL= zefxHJUiEO>WUf*h^99TT#BXwLS+N1yY`zU>)S2uxGnj628BQ@VUDaBBeSKL?IdZs( z@)s{+G^X#l%e_j|j(Z@DF&aE0#*Vdwog9F3rK}N+mUlE2iST3j)r6*EOQj4$@)--8>j_3sI&Z|B7L|9M|yzsQi%dqyU&* z)#%G7tywvVRtSiNNbQT%g68q(L0>6STbrXPuZE&9AujM4MzS1h-#{l>gK@zELa zF-h~0Ty&4%W7;48=Uk|_kc{LJ@w1d2;iS)ps7v-;APTIWK!R+?e9UQ8RNnoB>5T+R zBzqfHb|aeOj-Zcc?(IyKhb$~4^YQg9mpNIPEs0W8o!)zrXUY4ThcPGE0$%CP^+{Dj zX#Lk+^%r`K!ui3LNY{A{DlM|A7M|*p~>=)lxSxFut&e z?_QYXu{QLUT)4S{R~&QC&hR^MzzVs@4=pWH2~N6pO&1Cg3lfVKl}ILTN5MoH2KUcQ zx}$_m4U8gk1bC1=ShrVHBr@gCK%| zShYwP0)P$<#l^+to;h*}MYXEFKgkgX zL#z!KF1gP?FH7Tii(s~3Ph3MjVVHvN7D1|^tMKOgi$qZ&c?8ACJQgEDECLp6<~TKS zIT%$w0TA;x|8DE zDX$Y;fHDanIePJ-o}0e0>Xerw_uwj%Q>4sd=hHMpDJ*S6=n}*V64+6sShi+Aa>ftE z10V*ijp@d*kd7SI<7$|in=;#oHoc_K5QyMF=!pBhUjHtB13R$3QppqfDsn` z1`Uehc1trqJ5kdCQ(cReM3i-0Y)Hsg#4|NOTeBPM>+6FiY&gr^3#ED^vF*8sW_hAm z1Hos@)~(UYlfC(cKl^tdbjN?_BhnLHJ3Bj(O_4AgCFdi3rNH`3|4FKEDs{UEs%pA; za%mpOu?9=VGYhy3rAXgJ*robp-o1M$I5@by1~e~d>@WCIM%J7R9)?GZg!_Tv%f~>* zZ-2ij8Mn3PN*@*Tc#gH36^J1zP+>u9E)_AVZ?>2VSzTti$+5uNdB#dM0$VPOEf*;b zR_a@B`cN!LU_LNq-I>k6+pShQdWC3KSz8-b(bH`ykvqIu-Bn=?e`lEk|Jw2TBN zMC9Zoa3{*k*HJf?E(%1~208hR^~oMut!#kNu#S;xqHP$DmZ~C8xHl*f)sU&@(0>t) znFw@hjlo+JrZr7OP*kK{$zTi}3$*!jH|YTdf+&uH82?qP&Qf%YCK@w(^b!?SVunI? zqc{#`N!iGtW3(E!JxP6oeh5S7!$46nC&ZNa?A+~PVp-f?P{$3WTs&LJabyxz?;0dh z7rMB_&Obdd5_J)U$ZN0#Crag=kR7+K)N61Oa5rJDV!)8kl$v-3IVpk|;o~kqizD@T zwHO~;L18IT=fEJtJnVneogrK2(wGfK2PFzEpsHqWz0g2J2v%Z4k@%rw;1*j%dID*O zVQ~h0tP`@;A{2(skgw6(4RD08jArb9P-e%dR*V(N3#4JG?f!yU5tS?fB!bndu}XKn z{G(K&rGL2OAD@s zgvOHpp2-Q}Y)dC7fEnsI!&40E_5BvgQ2lIx88B5T*+XoPd-wY9WnE{={b7)AX_XM94NNrhNCEKv5B zEd)s1eCNoQ#ng?6nhQwFHz`bfS{ki)@7+r?=$)UlIA%9zOm{SHcf`n%bMYslER*uS z-h{jD#Bz$7rpV`zhEGBdLK%jGa6(^5P_-2Bm|GgBP@>Rf6XoB44u%t@x6B6*9?|S< z%rnzh%bTfUT6nY5O_f-woQoBs*-PKWL4sGtJ+o|TQSB3IG5a4mVPV6bYI=f4n zQG+jm6Wk?Ofa`>8we(aY?d=a#9@>tvJb^iztxeTc zWZ$TQjwPkl9pZ%tY{p-UCHpsZjUc9wwaO|^fhH~TdeX&1x9VDn&$1V%(YBGeSw1a<=PiZr**BVX(A*W+JFLX=@_blWp$&dBdkLxO@DEs@wgqb@#iMC4RNkI36G z6p@$`00rL1Z}n0P*z-b-or?*I<8xT9H&>rd;v&S35}sK~UX!wYYs~WGr$&|!WFz9` z!0^@(NAS%AW(>2KDi=Iejo?%s}0;}z4+&uFaaFVJtYiq`7g zyZ7`}As^qN&O6-rewrk&M(WnZQg1gklE%yR{;#$+$P(}Hdmh)&r?p|>S-+fI{;gvE xYtF~-AE-MY)$xBnbf)|_mg4_orIXrvJB{4m-FbM%9Qj1WjQQWiPFu0_e*iqi=C=R< literal 0 HcmV?d00001 diff --git a/docs/images/no_resize.png b/docs/images/no_resize.png new file mode 100644 index 0000000000000000000000000000000000000000..86570db2cfd3383a8e3079278bf9abcc606bc6cf GIT binary patch literal 121038 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%0A@r^1!^MuT19ajZJ}mVj$0Ew-?%27s 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 P=}I8NH4UZ>m)i6v>*) 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 DyV6@m literal 0 HcmV?d00001 diff --git a/docs/images/old_order.png b/docs/images/old_order.png new file mode 100644 index 0000000000000000000000000000000000000000..597ccecc29e24e51d95525762f36c56093c35330 GIT binary patch literal 72740 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 literal 0 HcmV?d00001 diff --git a/docs/images/rename_options.png b/docs/images/rename_options.png new file mode 100644 index 0000000000000000000000000000000000000000..bac9c243da11b3e8fccfd65ca858b267193c567a GIT binary patch literal 25768 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Šs?W8@C};C_HXL^A_z!y(bTi$4|=Yb`_ITh;vgYH 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 literal 0 HcmV?d00001 diff --git a/rsconnect/shinyapps.io/ostash-group/BGCViz.dcf b/rsconnect/shinyapps.io/ostash-group/BGCViz.dcf new file mode 100644 index 0000000..8536d46 --- /dev/null +++ b/rsconnect/shinyapps.io/ostash-group/BGCViz.dcf @@ -0,0 +1,13 @@ +name: BGCViz +title: BGCViz +username: +account: ostash-group +server: shinyapps.io +hostUrl: https://api.shinyapps.io/v1 +appId: 3755940 +bundleId: 5975302 +url: https://ostash-group.shinyapps.io/BGCViz/ +when: 1654271186.15009 +lastSyncTime: 1654271186.15013 +asMultiple: FALSE +asStatic: FALSE From a7ed9da46cad1ed8ac6e77f059d44b30a8092e79 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 3 Jun 2022 18:15:48 +0200 Subject: [PATCH 149/199] Fixed image visualization Former-commit-id: 75f79933ab104a8a7a35f1f5d90341740605a338 --- docs/Additional_analysis.md | 2 + docs/BGCViz_renaming_and_coloring_options.md | 5 ++ docs/Input_files_options.md | 5 ++ docs/Logic_of_the_output.md | 55 ++++++++++++++++++-- docs/Quick_start.md | 3 ++ 5 files changed, 67 insertions(+), 3 deletions(-) diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index 58a1e41..255e7f0 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -74,8 +74,10 @@ clinker --plot Then, after the analysis is done, the default browser will open with the interactive visualization. For example, for the default S.coelicolor data, results for group 3 (grouped by antismash data) can be viewed as follows (while using antismash results GenBank file) : + ![clinker](/images/clinker_example.png) + This is a result of running clinker with the following command: ```bash diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index 1555ffc..ba49cf8 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -25,8 +25,10 @@ aminocoumarin|other|||| The data used for renaming is stored under "Code" and "Group" columns. The default file is available is the BGCViz directory or in the [Glossary](Glossary.md). The one is free to use any renaming scheme, but the whole csv file should be uploaded in the file input in BGCViz: + ![rename](/images/rename.png) + **After the renaming, "Rename" button will dissapear, and only "Reset" will be available. After reseting, "Rename" button will exange it. This is made to indicate if the used is already renamed, or not. ** **Please note: After "Rename" button is triggered, SEMPI, Antismash and PRISM data will be renamed prior to plotting automatically** @@ -46,10 +48,13 @@ The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy- The colors for arcs and links can be changes for single session while program is running. The current coloring scheme is situated in "Biocircos plot" sidemenu. To see it first check the checkbox above Biocircos plot and then then scroll down: + ![bio_check](/images/biocircos_colot_check.png) + ![bio_scheme](/images/biocircos_dt.png) + To edit the cell, just double click it. WHen you finish editing, press Ctrl+Enter. **Programs in Hierarchy column are written the same as on Biocircos chromosomes** diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index dcb10ce..7d2911d 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -45,8 +45,10 @@ BGCViz::sempi_to_csv(project_archive="project.zip") ``` SEMPI project archive can be downloaded from the site with "Project" button: + ![sempi_res_export](/images/sempi_res_web.png) + **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** # DeepBGC We are expecting the default DeepBGC tsv output file. Please see the example in inst/extdata folder @@ -79,6 +81,9 @@ BGCViz::arts_to_csv(project_archive="arts.zip") ``` Zip archive should be downloaded from ARTS Export tab (Zip all files): + ![arts_res_server.png](/images/arts_res_server.png) + + # GECCO We are expecting the default GECCO tsv output file. Please see the example [here](https://github.com/pavlohrab/BGCViz-datasets/tree/main/example_data). \ No newline at end of file diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md index 48bb593..06dde85 100644 --- a/docs/Logic_of_the_output.md +++ b/docs/Logic_of_the_output.md @@ -12,20 +12,28 @@ The "Compare to DeepBGC" sidemenu is available only after DeepBGC data is upload # Boxes Each plot or option group is encapsulated in a box which can be closed or be hidden. Also boxes can be resized, so the plots will be resized accordingly. For example: + ![no_resize](/images/no_resize.png) + ![resize](/images/with_resize.png) + Closed boxes can be restored afterwards with option on sidebar: + ![restore](/images/restore_box.png) + Also, boxes can be **dragged and dropped** to change their order. For example: + ![old_order](/images/old_order.png) + ![new_order](/images/new_order.png) + # Select menus The select menus are populated after certain data was uploaded. Therefore you will not all the possible options right away. This is made to avoid possible errors. All the options for data are: @@ -40,8 +48,10 @@ All the options for data are: Select menus looks like this: + ![select_menu](/images/select_menu.png) + On DeepBGC and GECCO comparison tabs the following data is available for analysis: - Antismash - PRISM @@ -52,8 +62,10 @@ If you have uploaded your custom data, but prepared it according to the [guide]( # Upload Data Data upload is done with the corresponding file upload menus. Detailed description of the input files is [here](Input_files_options.md). + ![upload](/images/data_upload.png) + After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. @@ -64,8 +76,10 @@ After the files are uploaded data will be extracted and added to the plots. It i ## Rename The renaming of a data is going to be applied only for antiSMASH, PRISM and SEMPI datasets. The field looks look like this: + ![rename_2](/images/rename_options.png) + The default renaming will be applied, if the "Rename" button is pressed. If you want to change the scheme, you should upload new dataset. For more in depth explanation please refer [here](BGCViz_renaming_and_coloring_options.md). Renaming options are used for better link and arcs coloring in the biocircos plot. The hybrid checkboxes for antiSMASH, PRISM and SEMPI when checked, causing to clusters to be visualized as 'Hybrid', when they have multiple products. @@ -74,13 +88,18 @@ The hybrid checkboxes for antiSMASH, PRISM and SEMPI when checked, causing to cl This menu is adding some width to result clusters. When checked, the overlap of the clusters will be based on old data, but on the plots they will be visualized thicker. + ![improve_viz](/images/improve_viz.png) - For example for ARTS data: - ![arts_narrow](/images/arts_thin.png) +For example for ARTS data: + + +![arts_narrow](/images/arts_thin.png) + + +![arts_wide](/images/arts_thick.png) - ![arts_wide](/images/arts_thick.png) ## PRISM supplement and ARTS options @@ -88,14 +107,17 @@ This box contain two options: 1. Plot or not the PRISM supplementary genes. 2. Only plot selected core model hit for ARTS data. This option makes it easier to see paralogs og the hit and where then land on a chromosome. + ![pr_arts](/images/pr_arts.png) + ARTS data controls are used for better understanding of the core genes duplication. If the ARTS core gene is intercepted with other BGC, then the one can plot only this core gene paralog to see the location of the duplicated gene and if it is intercepted with other clusters. **Note: ARTS core gene duplication data can have more than two genes. Therefore all paralogs will be visualized**. ## Download results for further analysis Downloads filtered and grouped results as a csv file. See [here](Quick_start.md) for workflow and [here](Additional_analysis.md) for an example of an additional analysis on the output. + ![download](/images/download.png) @@ -103,12 +125,16 @@ Downloads filtered and grouped results as a csv file. See [here](Quick_start.md) The thresholds here are applied globally to all plots and the data cleaning options for DeepBGC are the columns of the .tsv output file. They all are described in the DeepBGC paper. + ![deep_filt](/images/deepbgc_filters.png) + Also, for convenience same Filtering options are available on the sidemenu sidebar: + ![deep_sidebar](/images/deep_sidebar.png) + ## GECCO filtering options Identical to DeepBGC filtering box, but with different options. For in-depth explanation of the metrics see GECCO paper. @@ -116,22 +142,30 @@ Identical to DeepBGC filtering box, but with different options. For in-depth exp # Compare data with DeepBGC This sidemenu is generated after the upload of DeepBGC data if this data was not the only input. Sidemenu can also be divided into plots and filtering options. + ![deep_side](/images/deep_sidebar.png) + Plot part have two plots with their respective options and delivers a purpose to compare DeepBGC data with several filters to the chosen reference one. After the comparison, one can choose the optimal threshold of DeepBGC data, preserving the balance between novel and already annotated clusters. The choice between reference annotation for comparison is Antismash, SEMPI and PRISM. + ![deep_overview](/images/deep_overview.png) + The first plot in this tab visualizes several clusters, which are annotated solely by DeepBGC, only by chosen reference program, or by both. + ![deep_da](/images/deep_anti_comp.png) + On the x-axis, there are different thresholds for a chosen DeepBGC score, on the y-axis - number of clusters (divided into three groups, described above), which are preserved on a given score threshold. Any additional thresholds can be also applied to this plot and will be written on the upper right corner The second plot can be thought of as a mirror of the first one. It contains the same data, but in form of rate, in place of counts. + ![deep_rates](/images/deep_anti_rates.png) + The rates are: - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how many clusters are annotated only by DeepBGC. @@ -146,6 +180,7 @@ The remaining third box is for plot controls. They include: - Choice of a step for a barplot. - Choice of the starting point of a barplot + ![deep_cpm](/images/deep_comparison.png) @@ -156,13 +191,17 @@ The same as DeepBGC option above. The plots on this tab can be thought to be "Genes on chromosome". Here are two plots available: - The general "Genes on chromosome" plots, which contain all the annotations from all tools. On mouse hover over BGC, information, particular to the chosen tool, is shown. + ![all_annot](/images/all_annotations.png) + - The second plot visualizes the data from uploaded apps, which is intercepted to the app of a choice. Default reference app is the first uploaded and all the clusters are plotted for it. **Note: if there is no interception available between the uploaded apps and reference one, then this plot will remain empty. The good example is the choice of SEMPI data as a reference. Then the RRE-Finder data is absent from the plot (usually) because no interceptions are made between them ** + ![anot_inter](/images/intercepted_annotations.png) + The second plot has pretty simple controls, which consist of only one option -> the choice of reference data. The type, which is used to color the BGCs, is a subject of change through renaming and combining data as hybrids. More is [here](BGCViz_renaming_and_coloring_options.md) @@ -173,18 +212,24 @@ The type, which is used to color the BGCs, is a subject of change through renami The biocircos tab is become available after uploading two or more datasets. By default, the links (lines that connect different chromosomes) and arcs (the boxes under the chromosomes, that corresponds to the BGC) are grey. This plot is also affected by the chromosome length, which is a mandatory input. - The first plot is a circos plot. It is reactive, which means, the one can make it bigger or smaller with the help of mouse wheel scroll. + ![biocircos](/images/biocircos.png) + On the cursor hover onto a link, the cluster IDs and their types will be shown, as well as, linked software names. The type here is unaffected by renaming and is shown as is. On the cursor hover onto arcs, the type of the cluster and their coordinates is shown. - The second plot (Become available by checking "Show Biocircos coloring scheme" checkbox above biocircos plot) is just a legend for applied colors for biocircos plot. These are a subject to change through coloring dataframe or manually per session (more [here](BGCViz_renaming_and_coloring_options.md)). At default, all data is visualized in grey color. + ![biocircos_legend](/images/biocircos_dt.png) + The controls of biocircos plots are hidden under "More" button on a box on top right: + ![color_biocircos](/images/biocircos_color.png) + After uploading data, these are available right away, however, there is small use in them prior to renaming. The coloring is based on the groups, which are stated in a legend. If the no color is specified for a chosen BGC type, then the base color is used. Therefore before renaming, when the coloring options are ticked, the majority of the links and arcs will remain grey. The coloring options for the links includes three modes. These modes illustrate different logic of dealing with the linking clusters of different types (because one color for a single link must be specified). The modes of coloring: @@ -198,12 +243,16 @@ The coloring options for the links includes three modes. These modes illustrate This tab is being shown after more than two datasets are uploaded. To logic behind this tab is to summarize the links between different BGCs. To support than purpose a barplot and a table is generated: 1. Barplot, which counts to how much other BGCs the chosen one is linked. On the x-axis, the BGCs are plotted and on the y-axis the link count. This plot is useful for basic prioritization of BGCs which are annotated by a chosen app. + ![summarize](/images/summarize_plot.png) + 2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. The last row indicates cluster, that are inerecepted outside of a chosen data. It means, that they are annotated more that with one tool, but not with the chosen one. + ![group_by_t](/images/summarize_options.png) + The options for data summary includes: - Option to choose the program, by which the interception will be summarized. - Checkbox to visualize all the BGC for a chosen data. By default, only BGC, which are intercepted with any other ones are printed in the first column of the table. But if the purpose of analysis in to emphasise the BGCs, that are only found by the chosen tool, then all the clusters will be printed, if the checkbox is ticked. diff --git a/docs/Quick_start.md b/docs/Quick_start.md index bef11e5..0b3c7ee 100644 --- a/docs/Quick_start.md +++ b/docs/Quick_start.md @@ -21,9 +21,11 @@ The upload of the files is pretty straightforward - use the properly named file After the upload of the first input: + ![anti_upload](/images/anti_upload.png) + **Please also enter the length of the contig in the corresponding field under uploads. This length is used for correct representation of Biocircos plot** @@ -92,6 +94,7 @@ It is a good practice, to rename the type of clusters after uploading. Renaming To rename the dataset you can press "Rename" button under  "Improve visualization" menu.  + ![rename](/images/rename.png) From 75f79933ab104a8a7a35f1f5d90341740605a338 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 3 Jun 2022 18:15:48 +0200 Subject: [PATCH 150/199] Fixed image visualization --- docs/Additional_analysis.md | 2 + docs/BGCViz_renaming_and_coloring_options.md | 5 ++ docs/Input_files_options.md | 5 ++ docs/Logic_of_the_output.md | 55 ++++++++++++++++++-- docs/Quick_start.md | 3 ++ 5 files changed, 67 insertions(+), 3 deletions(-) diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index 58a1e41..255e7f0 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -74,8 +74,10 @@ clinker --plot Then, after the analysis is done, the default browser will open with the interactive visualization. For example, for the default S.coelicolor data, results for group 3 (grouped by antismash data) can be viewed as follows (while using antismash results GenBank file) : + ![clinker](/images/clinker_example.png) + This is a result of running clinker with the following command: ```bash diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index 1555ffc..ba49cf8 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -25,8 +25,10 @@ aminocoumarin|other|||| The data used for renaming is stored under "Code" and "Group" columns. The default file is available is the BGCViz directory or in the [Glossary](Glossary.md). The one is free to use any renaming scheme, but the whole csv file should be uploaded in the file input in BGCViz: + ![rename](/images/rename.png) + **After the renaming, "Rename" button will dissapear, and only "Reset" will be available. After reseting, "Rename" button will exange it. This is made to indicate if the used is already renamed, or not. ** **Please note: After "Rename" button is triggered, SEMPI, Antismash and PRISM data will be renamed prior to plotting automatically** @@ -46,10 +48,13 @@ The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy- The colors for arcs and links can be changes for single session while program is running. The current coloring scheme is situated in "Biocircos plot" sidemenu. To see it first check the checkbox above Biocircos plot and then then scroll down: + ![bio_check](/images/biocircos_colot_check.png) + ![bio_scheme](/images/biocircos_dt.png) + To edit the cell, just double click it. WHen you finish editing, press Ctrl+Enter. **Programs in Hierarchy column are written the same as on Biocircos chromosomes** diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index dcb10ce..7d2911d 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -45,8 +45,10 @@ BGCViz::sempi_to_csv(project_archive="project.zip") ``` SEMPI project archive can be downloaded from the site with "Project" button: + ![sempi_res_export](/images/sempi_res_web.png) + **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of SEMPI, but the result plot will label these as "SEMPI"** # DeepBGC We are expecting the default DeepBGC tsv output file. Please see the example in inst/extdata folder @@ -79,6 +81,9 @@ BGCViz::arts_to_csv(project_archive="arts.zip") ``` Zip archive should be downloaded from ARTS Export tab (Zip all files): + ![arts_res_server.png](/images/arts_res_server.png) + + # GECCO We are expecting the default GECCO tsv output file. Please see the example [here](https://github.com/pavlohrab/BGCViz-datasets/tree/main/example_data). \ No newline at end of file diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md index 48bb593..06dde85 100644 --- a/docs/Logic_of_the_output.md +++ b/docs/Logic_of_the_output.md @@ -12,20 +12,28 @@ The "Compare to DeepBGC" sidemenu is available only after DeepBGC data is upload # Boxes Each plot or option group is encapsulated in a box which can be closed or be hidden. Also boxes can be resized, so the plots will be resized accordingly. For example: + ![no_resize](/images/no_resize.png) + ![resize](/images/with_resize.png) + Closed boxes can be restored afterwards with option on sidebar: + ![restore](/images/restore_box.png) + Also, boxes can be **dragged and dropped** to change their order. For example: + ![old_order](/images/old_order.png) + ![new_order](/images/new_order.png) + # Select menus The select menus are populated after certain data was uploaded. Therefore you will not all the possible options right away. This is made to avoid possible errors. All the options for data are: @@ -40,8 +48,10 @@ All the options for data are: Select menus looks like this: + ![select_menu](/images/select_menu.png) + On DeepBGC and GECCO comparison tabs the following data is available for analysis: - Antismash - PRISM @@ -52,8 +62,10 @@ If you have uploaded your custom data, but prepared it according to the [guide]( # Upload Data Data upload is done with the corresponding file upload menus. Detailed description of the input files is [here](Input_files_options.md). + ![upload](/images/data_upload.png) + After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. @@ -64,8 +76,10 @@ After the files are uploaded data will be extracted and added to the plots. It i ## Rename The renaming of a data is going to be applied only for antiSMASH, PRISM and SEMPI datasets. The field looks look like this: + ![rename_2](/images/rename_options.png) + The default renaming will be applied, if the "Rename" button is pressed. If you want to change the scheme, you should upload new dataset. For more in depth explanation please refer [here](BGCViz_renaming_and_coloring_options.md). Renaming options are used for better link and arcs coloring in the biocircos plot. The hybrid checkboxes for antiSMASH, PRISM and SEMPI when checked, causing to clusters to be visualized as 'Hybrid', when they have multiple products. @@ -74,13 +88,18 @@ The hybrid checkboxes for antiSMASH, PRISM and SEMPI when checked, causing to cl This menu is adding some width to result clusters. When checked, the overlap of the clusters will be based on old data, but on the plots they will be visualized thicker. + ![improve_viz](/images/improve_viz.png) - For example for ARTS data: - ![arts_narrow](/images/arts_thin.png) +For example for ARTS data: + + +![arts_narrow](/images/arts_thin.png) + + +![arts_wide](/images/arts_thick.png) - ![arts_wide](/images/arts_thick.png) ## PRISM supplement and ARTS options @@ -88,14 +107,17 @@ This box contain two options: 1. Plot or not the PRISM supplementary genes. 2. Only plot selected core model hit for ARTS data. This option makes it easier to see paralogs og the hit and where then land on a chromosome. + ![pr_arts](/images/pr_arts.png) + ARTS data controls are used for better understanding of the core genes duplication. If the ARTS core gene is intercepted with other BGC, then the one can plot only this core gene paralog to see the location of the duplicated gene and if it is intercepted with other clusters. **Note: ARTS core gene duplication data can have more than two genes. Therefore all paralogs will be visualized**. ## Download results for further analysis Downloads filtered and grouped results as a csv file. See [here](Quick_start.md) for workflow and [here](Additional_analysis.md) for an example of an additional analysis on the output. + ![download](/images/download.png) @@ -103,12 +125,16 @@ Downloads filtered and grouped results as a csv file. See [here](Quick_start.md) The thresholds here are applied globally to all plots and the data cleaning options for DeepBGC are the columns of the .tsv output file. They all are described in the DeepBGC paper. + ![deep_filt](/images/deepbgc_filters.png) + Also, for convenience same Filtering options are available on the sidemenu sidebar: + ![deep_sidebar](/images/deep_sidebar.png) + ## GECCO filtering options Identical to DeepBGC filtering box, but with different options. For in-depth explanation of the metrics see GECCO paper. @@ -116,22 +142,30 @@ Identical to DeepBGC filtering box, but with different options. For in-depth exp # Compare data with DeepBGC This sidemenu is generated after the upload of DeepBGC data if this data was not the only input. Sidemenu can also be divided into plots and filtering options. + ![deep_side](/images/deep_sidebar.png) + Plot part have two plots with their respective options and delivers a purpose to compare DeepBGC data with several filters to the chosen reference one. After the comparison, one can choose the optimal threshold of DeepBGC data, preserving the balance between novel and already annotated clusters. The choice between reference annotation for comparison is Antismash, SEMPI and PRISM. + ![deep_overview](/images/deep_overview.png) + The first plot in this tab visualizes several clusters, which are annotated solely by DeepBGC, only by chosen reference program, or by both. + ![deep_da](/images/deep_anti_comp.png) + On the x-axis, there are different thresholds for a chosen DeepBGC score, on the y-axis - number of clusters (divided into three groups, described above), which are preserved on a given score threshold. Any additional thresholds can be also applied to this plot and will be written on the upper right corner The second plot can be thought of as a mirror of the first one. It contains the same data, but in form of rate, in place of counts. + ![deep_rates](/images/deep_anti_rates.png) + The rates are: - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how many clusters are annotated only by DeepBGC. @@ -146,6 +180,7 @@ The remaining third box is for plot controls. They include: - Choice of a step for a barplot. - Choice of the starting point of a barplot + ![deep_cpm](/images/deep_comparison.png) @@ -156,13 +191,17 @@ The same as DeepBGC option above. The plots on this tab can be thought to be "Genes on chromosome". Here are two plots available: - The general "Genes on chromosome" plots, which contain all the annotations from all tools. On mouse hover over BGC, information, particular to the chosen tool, is shown. + ![all_annot](/images/all_annotations.png) + - The second plot visualizes the data from uploaded apps, which is intercepted to the app of a choice. Default reference app is the first uploaded and all the clusters are plotted for it. **Note: if there is no interception available between the uploaded apps and reference one, then this plot will remain empty. The good example is the choice of SEMPI data as a reference. Then the RRE-Finder data is absent from the plot (usually) because no interceptions are made between them ** + ![anot_inter](/images/intercepted_annotations.png) + The second plot has pretty simple controls, which consist of only one option -> the choice of reference data. The type, which is used to color the BGCs, is a subject of change through renaming and combining data as hybrids. More is [here](BGCViz_renaming_and_coloring_options.md) @@ -173,18 +212,24 @@ The type, which is used to color the BGCs, is a subject of change through renami The biocircos tab is become available after uploading two or more datasets. By default, the links (lines that connect different chromosomes) and arcs (the boxes under the chromosomes, that corresponds to the BGC) are grey. This plot is also affected by the chromosome length, which is a mandatory input. - The first plot is a circos plot. It is reactive, which means, the one can make it bigger or smaller with the help of mouse wheel scroll. + ![biocircos](/images/biocircos.png) + On the cursor hover onto a link, the cluster IDs and their types will be shown, as well as, linked software names. The type here is unaffected by renaming and is shown as is. On the cursor hover onto arcs, the type of the cluster and their coordinates is shown. - The second plot (Become available by checking "Show Biocircos coloring scheme" checkbox above biocircos plot) is just a legend for applied colors for biocircos plot. These are a subject to change through coloring dataframe or manually per session (more [here](BGCViz_renaming_and_coloring_options.md)). At default, all data is visualized in grey color. + ![biocircos_legend](/images/biocircos_dt.png) + The controls of biocircos plots are hidden under "More" button on a box on top right: + ![color_biocircos](/images/biocircos_color.png) + After uploading data, these are available right away, however, there is small use in them prior to renaming. The coloring is based on the groups, which are stated in a legend. If the no color is specified for a chosen BGC type, then the base color is used. Therefore before renaming, when the coloring options are ticked, the majority of the links and arcs will remain grey. The coloring options for the links includes three modes. These modes illustrate different logic of dealing with the linking clusters of different types (because one color for a single link must be specified). The modes of coloring: @@ -198,12 +243,16 @@ The coloring options for the links includes three modes. These modes illustrate This tab is being shown after more than two datasets are uploaded. To logic behind this tab is to summarize the links between different BGCs. To support than purpose a barplot and a table is generated: 1. Barplot, which counts to how much other BGCs the chosen one is linked. On the x-axis, the BGCs are plotted and on the y-axis the link count. This plot is useful for basic prioritization of BGCs which are annotated by a chosen app. + ![summarize](/images/summarize_plot.png) + 2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. The last row indicates cluster, that are inerecepted outside of a chosen data. It means, that they are annotated more that with one tool, but not with the chosen one. + ![group_by_t](/images/summarize_options.png) + The options for data summary includes: - Option to choose the program, by which the interception will be summarized. - Checkbox to visualize all the BGC for a chosen data. By default, only BGC, which are intercepted with any other ones are printed in the first column of the table. But if the purpose of analysis in to emphasise the BGCs, that are only found by the chosen tool, then all the clusters will be printed, if the checkbox is ticked. diff --git a/docs/Quick_start.md b/docs/Quick_start.md index bef11e5..0b3c7ee 100644 --- a/docs/Quick_start.md +++ b/docs/Quick_start.md @@ -21,9 +21,11 @@ The upload of the files is pretty straightforward - use the properly named file After the upload of the first input: + ![anti_upload](/images/anti_upload.png) + **Please also enter the length of the contig in the corresponding field under uploads. This length is used for correct representation of Biocircos plot** @@ -92,6 +94,7 @@ It is a good practice, to rename the type of clusters after uploading. Renaming To rename the dataset you can press "Rename" button under  "Improve visualization" menu.  + ![rename](/images/rename.png) From 912a18c26f7571efd184d3534cb0137a3b04118e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 07:30:09 +0200 Subject: [PATCH 151/199] Add rconnect image to the docs Former-commit-id: 4f2ceef3d1cbc9f1cb895f5edea8b180ad67ab94 --- docs/images/rconnect.png | Bin 0 -> 11436 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/rconnect.png diff --git a/docs/images/rconnect.png b/docs/images/rconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..04d57e9ff85a193b4fbeaa79327a92cf3bd8e87e GIT binary patch literal 11436 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 literal 0 HcmV?d00001 From 4f2ceef3d1cbc9f1cb895f5edea8b180ad67ab94 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 07:30:09 +0200 Subject: [PATCH 152/199] Add rconnect image to the docs --- docs/images/rconnect.png | Bin 0 -> 11436 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/rconnect.png diff --git a/docs/images/rconnect.png b/docs/images/rconnect.png new file mode 100644 index 0000000000000000000000000000000000000000..04d57e9ff85a193b4fbeaa79327a92cf3bd8e87e GIT binary patch literal 11436 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 literal 0 HcmV?d00001 From bdb9b9bbd0b7573b59104a74053128613da271b0 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 12:05:21 +0200 Subject: [PATCH 153/199] Better Description Former-commit-id: 910a5594b71d4ba0b718cc23b2e9e85f9a7ed8d5 --- DESCRIPTION | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index adc53f7..2d31223 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,10 +1,14 @@ Package: BGCViz Title: BGCViz -Version: 0.0.0.9000 +Version: 0.99.0 Authors@R: person('Pavlo', 'Hrab', email = 'pavlo.hrab@gmail.com', role = c('cre', 'aut')) -Description: BGCViz is a shiny package, that aims to integrate BGC result from different softwares for same genome sequence. +Description: BGCViz is a shiny package, that aims to integrate BGC result + from different softwares for same genome sequence. On top of additional + filtering of GECCO and DeepBGC data, package allows to form groups of + semi-identical BGCs, allowing better annotation and boundary resolution + of each one. License: MIT + file LICENSE -biocViews: +biocViews: Visualization, MultipleComparison, FunctionalGenomics, ShinyApps Imports: BioCircos, config (>= 0.3.1), @@ -30,7 +34,10 @@ Imports: stringr, tidyr Encoding: UTF-8 +<<<<<<< HEAD +======= LazyData: true +>>>>>>> 4f2ceef3d1cbc9f1cb895f5edea8b180ad67ab94 RoxygenNote: 7.2.0 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues @@ -45,4 +52,4 @@ Config/testthat/edition: 3 Language: en-US VignetteBuilder: knitr Depends: - R (>= 2.10) + R (>= 4.2.0) From 822b6091863800692b7b6e0d7cfce6f0e093060c Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 12:13:04 +0200 Subject: [PATCH 154/199] Added vignette Former-commit-id: 0468716eebeb62ff90a5268d724ddb815bb8e8a4 --- DESCRIPTION | 4 - vignettes/.gitignore | 2 + vignettes/BGCViz.Rmd | 293 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 295 insertions(+), 4 deletions(-) create mode 100644 vignettes/.gitignore create mode 100644 vignettes/BGCViz.Rmd diff --git a/DESCRIPTION b/DESCRIPTION index 2d31223..b0426dd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -34,10 +34,6 @@ Imports: stringr, tidyr Encoding: UTF-8 -<<<<<<< HEAD -======= -LazyData: true ->>>>>>> 4f2ceef3d1cbc9f1cb895f5edea8b180ad67ab94 RoxygenNote: 7.2.0 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues diff --git a/vignettes/.gitignore b/vignettes/.gitignore new file mode 100644 index 0000000..097b241 --- /dev/null +++ b/vignettes/.gitignore @@ -0,0 +1,2 @@ +*.html +*.R diff --git a/vignettes/BGCViz.Rmd b/vignettes/BGCViz.Rmd new file mode 100644 index 0000000..516167b --- /dev/null +++ b/vignettes/BGCViz.Rmd @@ -0,0 +1,293 @@ +--- +title: "BGCViz" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{BGCViz} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +# Quick start guide + + + +**Note:** The guide is divided into "steps", but no "pipeline" or sequential steps exist. Rather after files upload (Step 1 and 2) you are free to use the analysis according to your needs. This guide is used mostly for a quick introduction to the BGCViz capabilities   + +**BGCViz is intended to be run on one sequence. Therefore, it is not possible to analyze genomes with several contigs. One contig at a time only** + + + +# Step 1. Getting the input files + +A detailed description of every possible input file is [here](https://ostash-group.github.io/BGCViz/#/Input_files_options). In short, prior to use, antismash, prism, sempi and ARTS results should be downloaded. And if, downloaded correct formats, they can be used right away. + + +# Step 2. Uploading input files + +The upload of the files is pretty straightforward - use the properly named file upload section. Prior to upload, no UI toggles and elements are shown. + +### Note: You can use example data from S.coelicolor, pressing the button on "Use Example data" box + +After the upload of the first input: + + + +![anti_upload](../docs/images/anti_upload.png) + + + +**Please also enter the length of the contig in the corresponding field under uploads. This length is used for correct representation of Biocircos plot** + +## Results with only one file upload + +1. The first two plots are available for the analysis on the "Annotation visualization and comparison" sidemenu. The first plot contains all the results for the antimash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. + + + +![anti_all](../docs/images/anti_all.png) + + + +2. The second plot shows the BGC, intercepted with the chosen one. As a rule, on the top, there is an output which is used as a reference. In our case, this output is antismash. After uploading more files, they will be visualized under antismash one. And only clusters, which are intercepted with the chosen one, are visualized. (On the upper plot all the data is visualized). + + + +![anti_one](../docs/images/anti_one.png) + + + +For now, this plot is the same as a plot above, due to lack of data. + + + +### Controls + +"Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Global options" sidemenu option. This will rename the multiple typer regions as "hybrid". + + + +**Tip: We suggest using this option after renaming the clusters (step 3 here). Because several product cluster can become monotype after renaming. Therefore more information about type will be preserved.** + + + +## Results with multiple files upload + +Let's proceed and upload PRISM and SEMPI results + +### The example S.coelicolor data is available upon button press under PRISM and SEMPI input fields. + +The plots in previous sidemenu changed. Also, two additional sidemenus appeared: + +1. Biocircos plot sidemenu contains dynamic circos plot for all-vs-all interception results. More details in [step 4](#step-4-color-the-links-in-biocircos-plot) + +2. Summarize interception sidemenu contains data, that can help to prioritize clusters, based on how many times it is annotated by another tool. More details in [step 5](#step-5-change-the-data-to-group-by) + +Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, a new "chromosome" is visualized with these genes, named "P-supp". More details available [here](https://ostash-group.github.io/BGCViz/#/Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox in Global options. + + + +![p-supp.png](../docs/images/p-supp.png) + + + +They are more controls for data manipulation available, as well as more plots. They all will be discussed in the following steps. + + + +# Step 3. Rename the input clusters + +## Step 3.1 Rename the clusters + +It is a good practice, to rename the type of clusters after uploading. Renaming the clusters will hugely affect the coloring schema. In other ways, it will decrease the clutter in the legend and improve high-level visual comparison. Also, renaming is somewhat essential for coloring the Biocircos links and arcs. + + +To rename the dataset you can press "Rename" button under "Improve visualization" menu. + + +![rename](../docs/images/rename.png) + + + +The legend on the plots changes, but the "Type" field upon mouse cursor hovering on the cluster remains unchanged. Therefore, the initial products are available on mouse hover. Alternatively, the "Reset" button reverts the clusters types to the initial ones. + + + +![renamed](../docs/images/renamed.png) + + +So , the color indicates, that the product is ripp (on a legend), but Type field on hover indicates the true tyep (lanthipeptide-class-i) + +The renaming scheme is available in the [Glossary](https://ostash-group.github.io/BGCViz/#/Glossary). Guide how to change it available [here](https://ostash-group.github.io/BGCViz/#/BGCViz_renaming_and_coloring_options). + + + +## Step 3.2 If multi-type - make hybrid + +By default, all hybrids remain intact after renaming. However, it is possible to include renaming rule for a particular hybrid (nrps__pks -> nrps). The last step in renaming is to tick the ".....rename as hybrid" checkboxes: + + + +![hybrids](../docs/images/hybrids.png) + + + + +# Step 4. Color the links in biocircos plot + +The other tab is "Biocircos plot". By default, no coloring is done (the data should be renamed, or, at least, match coloring scheme (more about changing colors in [here](BGCViz_renaming_and_coloring_options.md)) and about link coloring modes is [here](https://ostash-group.github.io/BGCViz/#/Logic_of_the_output#biocircos-plot)) + + + +The first plot is a default circos plot with an all-vs-all interception. More information is available on hover. The visualized type information (in the links and arcs) is a default product naming, not the renamed version. + + + +![biocircos_one](../docs/images/biocircos_one.png) + + + +The second plot is actually a legend for circos plot: + + + +![biocircos_legend](../docs/images/biocircos_dt.png) + + + +**Note: "base" color indicates the default color. Please include it, if changing the coloring scheme (more [here](BGCViz_renaming_and_coloring_options.md))** + + + +The coloring options for biocircos plot are available under "More" button at the top of the plot: + + + +![color_biocircos.png](../docs/images/biocircos_color.png) + + + +There are three coloring modes available for the links, which are discussed in much more details in the appropriate [section](https://ostash-group.github.io/BGCViz/#/Logic_of_the_output#biocircos-plot). The problem with links is that they can connect clusters with separate types. Mentioned modes are just different ways to deal with this issue. + + + +# Step 5. Change the data to group by + + + +The last sidemenu called "Summarize interception". It contains count barplot, which shows how many times the chosen cluster was annotated by any other tool, and "Group by" table, which shows which clusters are intercepted with the reference (first column). + +For our example, the barplot looks like this: + + + +![summarize_one.png](../docs/images/summarize_one.png) + + + +From the chart we can see that cluster #10 from antismash and #9 from prism have pretty good amout of data supporting their annotation (let's take arbitrary clusters with high count). The group by table reveals, the intercepted clusters: + + + +![group_by_one.png](../docs/images/group_by_one.png) + + + +We can conclude that cluster #10 from antismash, #9 from PRISM, #12 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#54) and 3 regulatory genes (#51-53), as identified by PRISM. Types of clusters can be viewed with a pop-up with hover with a mouse: + +![hover](../docs/images/group_by_hover.png) + +The interception of all named clusters can be confirmed in the Biocircos plot, or by reviewing PRISM and SEMPI data as a group_by columns: + + + +![change_summarize.png](../docs/images/change_summarize.png) + + + +By default, only intercepted regions are showed. But if the purpose of the analysis is to show novel regions, annotated by just one program, then tick the "Show all BGC for the 'group by' method (+ individually annotated BGC)" checkbox. For example, if we group our data by Antismash and check the box it becomes clear, that many clusters are annotated only by this algorithm. + + + +**Tip: Check the last ("NA") row in the first column. It shows the clusters, that are not intercepted with the reference data but are intercepted among other methods. For example, cluster #6 from PRISM is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI (#7). The similar situation is with PRISM regulatory (#4) gene, which is not intercepted by Antismash. If we group the data by the PRISM column, it will land in corresponding group** + + + +**Tip #2: You can view the group by column in "Annotation visualization and comparison" tab for feature-rich visualization on hover. Just choose the same column in the select menu for that plot** + +# Step 6. Compare to the DeepBGC + +The clusters in the previous annotations are can be thought to be "boolean". Therefore, they are either annotated (so exists in the data), or not. The DeepBGC data contains several scores alongside cluster information. This program uses the deep learning model, which can annotate different from rule-based methods, novel clusters. The scores are deepbgc score, activity score and cluster type score. More about the model and the scores are available in the paper (DOI: [10.1093/nar/gkz654](https://doi.org/10.1093/nar/gkz654) ). + +The output tsv file is the standard input for BGCViz. After uploading several plots are available in the new "Compare the DeepBGC data" tab. + +1.The DeepBGC comparison to the reference annotation. Therefore, the barplot shows how many clusters annotated at every chosen score threshold only by DeepBGC, only by chosen reference data (here Antismash) and by both. In the upper right corner applied score threshold are visualized for DeepBGC data (the default are 50%). This plot can help to choose the annotated/novelty rates for DeepBGC. + + + +![deep_one](../docs/images/deep_one.png) + + + +2. Connected scatter plot with Novelty, Annotation and Skip rates, where: + +- Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how many clusters are annotated only by DeepBGC. + +- Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash. + +- Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how many clusters DeepBGC missed, assuming, that antismash is a reference annotation + +These rates are just the other way to visualize the bar plot + +![rates_one.png](../docs/images/rates_one.png) + +The controls for the comparison plots looks like this: + + + +![deep_comparison](../docs/images/deep_comparison.png) + + + +Note, that you can choose which data to compare the DeepBGC among PRISM, Antismash and SEMPI, as well as score and plot step. + +The data cleaning options for DeepBGC are basically the columns of .tsv output file and are the following: + + + +![deep_filters](../docs/images/deepbgc_filters.png) + +The filters are applied globally for DeepBGC data. For convenience you can use the filtering sliders on the sidebar, not the one under "Global options": + +![deep_sidebar](../docs/images/deep_sidebar.png) + +Therefore, BGCViz can be used not only as an interception between annotated BGC visualization tool but also serves as a nice GUI for DeepBGC data cleaning. The results on the cleaning can be then downloaded for downstream analysis (Step 7) + + + +**Note: The tab and plots will appear after DeepBGC data upload. Therefore, if no Antismash, PRISM or SEMPI data was supplied the plots will result in error** + + +### The same workflow is available for GECCO data + +# Step 7. Data download + + + +After the analysis, you can download all the data as csv files (under Global options). This is particularly valuable in the case of DeepBGC data cleaning. Alongside the datasets, group_by table will be downloaded (as visualized in the "Summarize interception" tab) and group_by script for downstream analysis with clinker. More about it [here](https://ostash-group.github.io/BGCViz/#/Additional_analysis) + + + +![download_button.png](../docs/images/download.png) + + +```{r} +sessionInfo() +``` + From 4cdd25773e0f5feb5ec987cab664518ad91f8054 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 12:46:30 +0200 Subject: [PATCH 155/199] Add examples to the functions Former-commit-id: ef08c0bf554665e9f1e32646fa148ce45890bd9e --- R/fct_format_transformation.R | 19 ++++++++++++++++--- R/fct_helpers.R | 10 ++++++++++ R/run_app.R | 6 ++++++ man/antismash_to_csv.Rd | 5 +++++ man/arts_to_csv.Rd | 6 ++++++ man/get_defaults.Rd | 4 ++++ man/prism_to_csv.Rd | 5 +++++ man/run_app.Rd | 9 +++++++++ man/sempi_to_csv.Rd | 5 +++++ man/set_defaults.Rd | 9 +++++++++ vignettes/.gitignore | 2 -- 11 files changed, 75 insertions(+), 5 deletions(-) delete mode 100644 vignettes/.gitignore diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 366ea5a..d1ab8bf 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -7,7 +7,10 @@ #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' +#' @examples +#' \dontrun{ +#' sempi_to_csv() +#' } #' @export sempi_to_csv <- function(project_archive, write_to = getwd()) { trackid <- NULL # Silence R CMD note @@ -44,7 +47,10 @@ sempi_to_csv <- function(project_archive, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' +#' @examples +#' \dontrun{ +#' prism_to_csv() +#' } #' @export prism_to_csv <- function(file, write_to = getwd()) { data <- rjson::fromJSON(file = file) @@ -84,7 +90,10 @@ prism_to_csv <- function(file, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' +#' @examples +#' \dontrun{ +#' antismash_to_csv() +#' } #' @export antismash_to_csv <- function(file, write_to = getwd()) { Start <- Stop <- NULL # To silence R CMD notes @@ -141,6 +150,10 @@ antismash_to_csv <- function(file, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location +#' @examples +#' \dontrun{ +#' arts_to_csv() +#' } #' #' @export arts_to_csv <- function(project_archive, write_to = getwd()) { diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 830b407..14bdf3d 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -85,6 +85,9 @@ hybrid_col <- function(data) { #' #' @return csv file in specified location #' +#' @examples +#' get_defaults() +#' #' @export get_defaults <- function(write_to = getwd()) { rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") @@ -98,6 +101,13 @@ get_defaults <- function(write_to = getwd()) { #' #' @param csv_file - path to csv file with default options. #' +#' @return csv file, written to package settings +#' +#' @examples +#' \dontrun{ +#' set_defaults() +#' } +#' #' @export set_defaults <- function(csv_file) { rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") diff --git a/R/run_app.R b/R/run_app.R index ad9915c..46442a4 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -3,6 +3,12 @@ #' @param ... arguments to pass to golem_opts. #' See `?golem::get_golem_options` for more details. #' @inheritParams shiny::shinyApp +#' @return running shiny app +#' +#' @examples +#' \dontrun{ +#' run_app() +#' } #' #' @export #' @importFrom shiny shinyApp diff --git a/man/antismash_to_csv.Rd b/man/antismash_to_csv.Rd index 7495d97..95d57d5 100644 --- a/man/antismash_to_csv.Rd +++ b/man/antismash_to_csv.Rd @@ -17,3 +17,8 @@ csv file in specified location \description{ Function, that returns dataframe, out of supplied antismash json file } +\examples{ +\dontrun{ +antismash_to_csv() +} +} diff --git a/man/arts_to_csv.Rd b/man/arts_to_csv.Rd index cc8bf8a..43a28a2 100644 --- a/man/arts_to_csv.Rd +++ b/man/arts_to_csv.Rd @@ -17,3 +17,9 @@ csv file in specified location \description{ Function, which extracts tables from arts result zip archive and transforms them into BGCViz input } +\examples{ +\dontrun{ +arts_to_csv() +} + +} diff --git a/man/get_defaults.Rd b/man/get_defaults.Rd index 2bea393..d1601aa 100644 --- a/man/get_defaults.Rd +++ b/man/get_defaults.Rd @@ -16,3 +16,7 @@ csv file in specified location Function, which downloads default options csv file into provided location. Then can be used with `set_defaults` function to change the default behaviour } +\examples{ +get_defaults() + +} diff --git a/man/prism_to_csv.Rd b/man/prism_to_csv.Rd index 340bf0f..c6dd417 100644 --- a/man/prism_to_csv.Rd +++ b/man/prism_to_csv.Rd @@ -17,3 +17,8 @@ csv file in specified location \description{ Function, that transforms prism json object into dataframe, which could be written to the csv file } +\examples{ +\dontrun{ +prism_to_csv() +} +} diff --git a/man/run_app.Rd b/man/run_app.Rd index c6c36f7..b891232 100644 --- a/man/run_app.Rd +++ b/man/run_app.Rd @@ -36,6 +36,15 @@ expression in order for the match to be considered successful.} \item{...}{arguments to pass to golem_opts. See `?golem::get_golem_options` for more details.} } +\value{ +running shiny app +} \description{ Run the Shiny Application } +\examples{ +\dontrun{ +run_app() +} + +} diff --git a/man/sempi_to_csv.Rd b/man/sempi_to_csv.Rd index f2d40c3..6660d83 100644 --- a/man/sempi_to_csv.Rd +++ b/man/sempi_to_csv.Rd @@ -18,3 +18,8 @@ csv file in specified location Function, which transforms Track.db file into dataframe, which could be then written to csv. Download project folder from SEMPI and supply as `project_archive` argument to a function } +\examples{ +\dontrun{ +sempi_to_csv() +} +} diff --git a/man/set_defaults.Rd b/man/set_defaults.Rd index b174e52..14a2b62 100644 --- a/man/set_defaults.Rd +++ b/man/set_defaults.Rd @@ -9,7 +9,16 @@ set_defaults(csv_file) \arguments{ \item{csv_file}{- path to csv file with default options.} } +\value{ +csv file, written to package settings +} \description{ Function, which uploads default options csv file to the package. Use with `get_defaults` function to download currently used default options. } +\examples{ +\dontrun{ +set_defaults() +} + +} diff --git a/vignettes/.gitignore b/vignettes/.gitignore deleted file mode 100644 index 097b241..0000000 --- a/vignettes/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.html -*.R From 17ed1aae5429b10e81a2f10d0fa9058785918cad Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 13:34:05 +0200 Subject: [PATCH 156/199] Changed indentation to be 4 spaces Former-commit-id: 4af2cfd5825824a9640808ba8c57a972ed811a57 --- DESCRIPTION | 7 +- R/app_config.R | 28 +- R/app_server.R | 3080 +++++++++++------------ R/app_ui.R | 584 ++--- R/fct_biocircos.R | 212 +- R/fct_deep_reference.R | 188 +- R/fct_filtering.R | 160 +- R/fct_format_transformation.R | 342 +-- R/fct_group_table.R | 24 +- R/fct_helpers.R | 16 +- R/fct_reading_functions.R | 432 ++-- R/fct_reading_processing.R | 254 +- R/fct_validation.R | 278 +- R/mod_barplot_rank.R | 160 +- R/mod_biocircos.R | 158 +- R/mod_deep_reference.R | 58 +- R/mod_deep_reference_2.R | 288 +-- R/mod_deepbgc_plots.R | 448 ++-- R/mod_download.R | 78 +- R/mod_gecco_plots.R | 446 ++-- R/mod_group_table.R | 216 +- R/run_app.R | 24 +- R/utils_deep_reference.R | 208 +- data-raw/deep_data.R | 4 +- data-raw/gecco_data.R | 20 +- data-raw/rre_data.R | 4 +- tests/spelling.R | 8 +- tests/testthat/test-app.R | 2 +- tests/testthat/test-golem-recommended.R | 35 +- 29 files changed, 3882 insertions(+), 3880 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index b0426dd..69e408b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -4,9 +4,10 @@ Version: 0.99.0 Authors@R: person('Pavlo', 'Hrab', email = 'pavlo.hrab@gmail.com', role = c('cre', 'aut')) Description: BGCViz is a shiny package, that aims to integrate BGC result from different softwares for same genome sequence. On top of additional - filtering of GECCO and DeepBGC data, package allows to form groups of - semi-identical BGCs, allowing better annotation and boundary resolution - of each one. + filtering of GECCO and DeepBGC data and choosing optimal thresholds for them, + package allows to form groups of semi-identical BGCs, allowing better + annotation and boundary resolution of each one. The output of BGCViz can + serve as input to clinker software. License: MIT + file LICENSE biocViews: Visualization, MultipleComparison, FunctionalGenomics, ShinyApps Imports: diff --git a/R/app_config.R b/R/app_config.R index e6c06d0..1239bfb 100644 --- a/R/app_config.R +++ b/R/app_config.R @@ -2,7 +2,7 @@ #' #' NOTE: If you manually change your package name in the DESCRIPTION, #' don't forget to change it here too, and in the config file. -#' For a safer name change mechanism, use the `golem::set_golem_name()` +#' For a safer name change mechanism, use the `golem::set_golem_name()` #' function. #' #' @param ... character vectors, specifying subdirectory and file(s) @@ -10,7 +10,7 @@ #' #' @noRd app_sys <- function(...) { - system.file(..., package = "BGCViz") + system.file(..., package = "BGCViz") } @@ -24,18 +24,18 @@ app_sys <- function(...) { #' @noRd get_golem_config <- function(value, config = Sys.getenv( - "GOLEM_CONFIG_ACTIVE", - Sys.getenv( - "R_CONFIG_ACTIVE", - "default" - ) + "GOLEM_CONFIG_ACTIVE", + Sys.getenv( + "R_CONFIG_ACTIVE", + "default" + ) ), use_parent = TRUE) { - config::get( - value = value, - config = config, - # Modify this if your config file is somewhere else: - file = app_sys("golem-config.yml"), - use_parent = use_parent - ) + config::get( + value = value, + config = config, + # Modify this if your config file is somewhere else: + file = app_sys("golem-config.yml"), + use_parent = use_parent + ) } diff --git a/R/app_server.R b/R/app_server.R index 657ea39..0baaed7 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -5,1603 +5,1603 @@ #' @import shiny #' @noRd app_server <- function(input, output, session) { - # Your application server logic - # Silence R CMD note - Start <- Stop <- Core <- Chr <- NULL - ## --------------------------------------------------------------- - ## Some lists of reactive values to listen later - - ## --------------------------------------------------------------- - check_to_rename <- shiny::reactive({ - list( - input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco, input$anti_sco, input$prism_sco + # Your application server logic + # Silence R CMD note + Start <- Stop <- Core <- Chr <- NULL + ## --------------------------------------------------------------- + ## Some lists of reactive values to listen later - + ## --------------------------------------------------------------- + check_to_rename <- shiny::reactive({ + list( + input$sempi_data, input$anti_data, input$prism_data, + input$sempi_sco, input$anti_sco, input$prism_sco + ) + }) + biocircos_listen <- shiny::reactive({ + list( + input$biocircos_color, vals$need_filter, input$label_color, input$label_color_class, + input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, + input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, + vals$coloring_datatable + ) + }) + inputData <- shiny::reactive({ + list( + vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, + vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input + ) + }) + dynamicInput <- shiny::reactive({ + list(input$dup_choice, vals$need_filter, input$prism_supp) + }) + deep_reference <- shiny::reactive({ + list( + vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data + ) + }) + + to_debounce <- shiny::reactive({ + list( + vals$cluster_type, vals$gene_filter, vals$biodomain_filter, vals$score_c, vals$score_d, + vals$score_a, vals$score_average_gecco, vals$score_cluster_gecco, vals$domains_filter_gecco, + vals$prot_filter_gecco + ) + }) %>% shiny::debounce(500) + + # Some dataframes that are used through the app + some vectors of untercepted values + vals <- shiny::reactiveValues( + deep_data = NULL, anti_data = NULL, rre_data = NULL, prism_data = NULL, chr_len = NULL, fullness_deep = NULL, + biocircos_deep = NULL, deep_data_input = FALSE, tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + anti_data_input = FALSE, rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, + seg_df_ref_d = NULL, seg_df_ref_r = NULL, seg_df_ref_p = NULL, deep_data_chromo = NULL, + data_upload_count = 0, anti_type = NULL, prism_type = NULL, sempi_data = NULL, sempi_data_input = FALSE, + sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, + rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, + sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, + prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, + known_data_input = F, dup_data_input = F, arts_data = NULL, arts_data_input = F, seg_df_ref_ar = NULL, + df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, + need_filter = F, filter_data = F, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, + can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F ) - }) - biocircos_listen <- shiny::reactive({ - list( - input$biocircos_color, vals$need_filter, input$label_color, input$label_color_class, - input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, - input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, - vals$coloring_datatable + + vals$computed <- list( + anti = F, deep = F, gecco = F, arts = F, prism = F, sempi = F, prism_supp = F, rre = F ) - }) - inputData <- shiny::reactive({ - list( - vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, - vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input + # Making coloring datatable + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + vals$rename_data <- utils::read.csv(rename_file) + rename_data <- utils::read.csv(rename_file) + coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list(dom = "t", ordering = F)) + # Variables, that holds data uploads boolean (so if data is present or not) + data_uploads <- c( + "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" ) - }) - dynamicInput <- shiny::reactive({ - list(input$dup_choice, vals$need_filter, input$prism_supp) - }) - deep_reference <- shiny::reactive({ - list( - vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data + data_uploads_inter <- c( + "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" ) - }) - - to_debounce <- shiny::reactive({ - list( - vals$cluster_type, vals$gene_filter, vals$biodomain_filter, vals$score_c, vals$score_d, - vals$score_a, vals$score_average_gecco, vals$score_cluster_gecco, vals$domains_filter_gecco, - vals$prot_filter_gecco + # Universal beginings for variables, used in the app for different data + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre") + # The Namings, meaning how to label the data on the plots + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder") + # Dataframes undes vals$list, that stored the data + data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data") + # Used in barplot on summarise tab + Annotation on chromosome plots + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") + # Used for deep reference 2 plot + soft_datafr <- c( + "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", + "seg_df_ref_g", "seg_df_ref_r" ) - }) %>% shiny::debounce(500) - - # Some dataframes that are used through the app + some vectors of untercepted values - vals <- shiny::reactiveValues( - deep_data = NULL, anti_data = NULL, rre_data = NULL, prism_data = NULL, chr_len = NULL, fullness_deep = NULL, - biocircos_deep = NULL, deep_data_input = FALSE, tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, - anti_data_input = FALSE, rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, - seg_df_ref_d = NULL, seg_df_ref_r = NULL, seg_df_ref_p = NULL, deep_data_chromo = NULL, - data_upload_count = 0, anti_type = NULL, prism_type = NULL, sempi_data = NULL, sempi_data_input = FALSE, - sempi_type = NULL, biocircos_color = NULL, rename_data = NULL, group_by_data = NULL, - rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, - sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, - prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data = NULL, arts_data_input = F, seg_df_ref_ar = NULL, - df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F, filter_data = F, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F - ) - - vals$computed <- list( - anti = F, deep = F, gecco = F, arts = F, prism = F, sempi = F, prism_supp = F, rre = F - ) - # Making coloring datatable - rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - vals$rename_data <- utils::read.csv(rename_file) - rename_data <- utils::read.csv(rename_file) - coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] - colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list(dom = "t", ordering = F)) - # Variables, that holds data uploads boolean (so if data is present or not) - data_uploads <- c( - "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", - "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" - ) - data_uploads_inter <- c( - "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", - "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" - ) - # Universal beginings for variables, used in the app for different data - soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre") - # The Namings, meaning how to label the data on the plots - soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder") - # Dataframes undes vals$list, that stored the data - data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data") - # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") - # Used for deep reference 2 plot - soft_datafr <- c( - "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r" - ) - - vals$score_a <- 50 - vals$score_d <- 50 - vals$score_c <- 50 - vals$domains_filter <- 5 - vals$biodomain_filter <- 1 - vals$gene_filter <- 1 - vals$cluster_type <- 50 - vals$score_average_gecco <- 50 - vals$score_cluster_gecco <- 50 - vals$domains_filter_gecco <- 1 - vals$prot_filter_gecco <- 1 - vals$gecco_sidebar <- FALSE - vals$deep_sidebar <- FALSE - vals$deep_global <- FALSE - vals$gecco_global <- FALSE - ## ---------------------------------------------------------------- - ## Helper functions - - ## ---------------------------------------------------------------- - # Need to get them to a tidyr::separate file later - # TODO - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add remove them - for (file_names in files_in_dir) { - if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { - file.remove(file_names) - } - } - options(shiny.maxRequestSize = 100 * 1024^2) - - disable_event_logic <- function() { - vals$can_plot_deep_ref <- F - vals$can_plot_biocircos <- F - vals$can_plot_barplot_rank <- F - vals$can_plot_group_table <- F - } - enable_event_logic <- function() { - vals$can_plot_deep_ref <- T - vals$can_plot_biocircos <- T - vals$can_plot_barplot_rank <- T - vals$can_plot_group_table <- T - } - - ########################################################################### - ########################################################################### - ### ### - ### DATA INPUT PROCESSING ### - ### ### - ########################################################################### - ########################################################################### - # TODO Make tidyr::separate functions for different data types. - # For now you just have duplicated the code. Specifically for ARTS! - # Reading functions: - - process_antismash <- function(data, example_data = F) { - if (example_data == T) { - anti_data <- data - } else { - anti_data <- read_anti(data) - } - vals$anti_type <- anti_data$Type2 - vals$anti_data <- anti_data - vals$anti_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") - vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "Antismash" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "Antismash" - ) - shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "Antismash" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Antismash" - ) - shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "Antismash" - ) - } - } - process_gecco <- function(data, example_data = F) { - if (example_data == T) { - gecco_data <- data - } else { - gecco_data <- read_gecco(data) - } - vals$gecco_data <- gecco_data - vals$gecco_data_filtered <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) - vals$gecco_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") - vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "GECCO" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "GECCO" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "GECCO" - ) - } - } - process_prism <- function(data, json = T, example_data = F) { - if (example_data == T) { - prism_data <- data - prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) - vals$prism_supp_data_input <- T - vals$prism_supp <- BGCViz:::prism_supp_data - vals$prism_supp_data <- BGCViz:::prism_supp_data - vals$prism_supp_plot <- T - vals$prism_json <- T - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - } else { - if (json == T) { - processed <- read_prism(data, json = T) - prism_data <- processed[[1]] - vals$prism_supp_data_input <- T - vals$prism_supp <- processed[[2]] - vals$prism_supp_data <- processed[[2]] - vals$prism_json <- T - vals$prism_supp_plot <- T - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) - } else { - processed <- read_prism(data, json = F) - prism_data <- processed[[1]] - } - } - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - update_ui_with_data() - vals$prism_data <- prism_data - vals$prism_type <- prism_data$Type2 - - # Add chromosome info column - vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) - # Add ID column (same as Cluster) - vals$prism_data$ID <- vals$prism_data$Cluster - vals$prism_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "PRISM" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "PRISM" - ) - shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "PRISM" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "PRISM" - ) - shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "PRISM" - ) - } - } - process_sempi <- function(data, zip = T, example_data = F) { - if (example_data == T) { - sempi_data <- data - } else { - if (zip == T) { - sempi_data <- read_sempi(data, zip = T) - } else { - sempi_data <- read_sempi(data, zip = F) - } - } - vals$sempi_type <- sempi_data$Type2 - vals$sempi_data <- sempi_data - # Add chromosome info column - vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) - # Add ID column (same as Cluster) - vals$sempi_data$ID <- vals$sempi_data$Cluster - vals$sempi_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") - vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "SEMPI" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "SEMPI" - ) - shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "SEMPI" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "SEMPI" - ) - shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "SEMPI" - ) + + vals$score_a <- 50 + vals$score_d <- 50 + vals$score_c <- 50 + vals$domains_filter <- 5 + vals$biodomain_filter <- 1 + vals$gene_filter <- 1 + vals$cluster_type <- 50 + vals$score_average_gecco <- 50 + vals$score_cluster_gecco <- 50 + vals$domains_filter_gecco <- 1 + vals$prot_filter_gecco <- 1 + vals$gecco_sidebar <- FALSE + vals$deep_sidebar <- FALSE + vals$deep_global <- FALSE + vals$gecco_global <- FALSE + ## ---------------------------------------------------------------- + ## Helper functions - + ## ---------------------------------------------------------------- + # Need to get them to a tidyr::separate file later + # TODO + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add remove them + for (file_names in files_in_dir) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { + file.remove(file_names) + } } - } - process_arts_archive <- function(archive, zip = T, example_data = F) { - if (example_data == T) { - arts_data <- BGCViz:::arts_data - } else { - if (zip == T) { - arts_data <- read_arts_archive(archive, zip = T) - } else { - arts_data <- utils::read.csv(archive) - } + options(shiny.maxRequestSize = 100 * 1024^2) + + disable_event_logic <- function() { + vals$can_plot_deep_ref <- F + vals$can_plot_biocircos <- F + vals$can_plot_barplot_rank <- F + vals$can_plot_group_table <- F + } + enable_event_logic <- function() { + vals$can_plot_deep_ref <- T + vals$can_plot_biocircos <- T + vals$can_plot_barplot_rank <- T + vals$can_plot_group_table <- T + } + + ########################################################################### + ########################################################################### + ### ### + ### DATA INPUT PROCESSING ### + ### ### + ########################################################################### + ########################################################################### + # TODO Make tidyr::separate functions for different data types. + # For now you just have duplicated the code. Specifically for ARTS! + # Reading functions: + + process_antismash <- function(data, example_data = F) { + if (example_data == T) { + anti_data <- data + } else { + anti_data <- read_anti(data) + } + vals$anti_type <- anti_data$Type2 + vals$anti_data <- anti_data + vals$anti_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "Antismash" = "Antismash") + vals$choices$group_by <- c(vals$choices$group_by, "Antismash" = "Antismash") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Antismash" = "Antismash") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Antismash" = "Antismash") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Antismash" = "Antismash") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "Antismash" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "Antismash" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "Antismash" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "Antismash" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "Antismash" + ) + } } - vals$arts_data <- arts_data - vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") - vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") - update_ui_with_data() - vals$data_upload_count <- vals$data_upload_count + 1 - vals$arts_data_input <- T - dup_table_id <- vals$arts_data %>% - dplyr::filter(Core != "Not_core") - shiny::updateSelectInput(session, "dup_choice", - choices = c("All", paste0("ID:", dup_table_id$ID, " ,Core:", dup_table_id$Core)), - selected = "All" - ) - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "ARTS" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "ARTS" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "ARTS" - ) + process_gecco <- function(data, example_data = F) { + if (example_data == T) { + gecco_data <- data + } else { + gecco_data <- read_gecco(data) + } + vals$gecco_data <- gecco_data + vals$gecco_data_filtered <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) + vals$gecco_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "GECCO" = "GECCO") + vals$choices$group_by <- c(vals$choices$group_by, "GECCO" = "GECCO") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "GECCO" = "GECCO") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "GECCO" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "GECCO" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "GECCO" + ) + } } - } - process_deep <- function(data, example_data = F) { - if (example_data == T) { - deep_data <- data - } else { - deep_data <- read_deep(data) + process_prism <- function(data, json = T, example_data = F) { + if (example_data == T) { + prism_data <- data + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) + vals$prism_supp_data_input <- T + vals$prism_supp <- BGCViz:::prism_supp_data + vals$prism_supp_data <- BGCViz:::prism_supp_data + vals$prism_supp_plot <- T + vals$prism_json <- T + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + } else { + if (json == T) { + processed <- read_prism(data, json = T) + prism_data <- processed[[1]] + vals$prism_supp_data_input <- T + vals$prism_supp <- processed[[2]] + vals$prism_supp_data <- processed[[2]] + vals$prism_json <- T + vals$prism_supp_plot <- T + shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + } else { + processed <- read_prism(data, json = F) + prism_data <- processed[[1]] + } + } + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() + vals$prism_data <- prism_data + vals$prism_type <- prism_data$Type2 + + # Add chromosome info column + vals$prism_data$chromosome <- rep("P", length(vals$prism_data$Cluster)) + # Add ID column (same as Cluster) + vals$prism_data$ID <- vals$prism_data$Cluster + vals$prism_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "PRISM" = "PRISM") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM" = "PRISM") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM" = "PRISM") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "PRISM" = "PRISM") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "PRISM" = "PRISM") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "PRISM" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "PRISM" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "PRISM" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "PRISM" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "PRISM" + ) + } } - vals$deep_data <- deep_data - vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Start <- vals$deep_data$nucl_start - vals$deep_data$Stop <- vals$deep_data$nucl_end - # Add ID column as number seuquence of dataframe length - vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) - vals$deep_data$Cluster <- vals$deep_data$ID - vals$deep_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$deep_data_filtered <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) - vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") - vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "DeepBGC" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "DeepBGC" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = "DeepBGC", - selected = "DeepBGC" - ) + process_sempi <- function(data, zip = T, example_data = F) { + if (example_data == T) { + sempi_data <- data + } else { + if (zip == T) { + sempi_data <- read_sempi(data, zip = T) + } else { + sempi_data <- read_sempi(data, zip = F) + } + } + vals$sempi_type <- sempi_data$Type2 + vals$sempi_data <- sempi_data + # Add chromosome info column + vals$sempi_data$chromosome <- rep("S", length(vals$sempi_data$Cluster)) + # Add ID column (same as Cluster) + vals$sempi_data$ID <- vals$sempi_data$Cluster + vals$sempi_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "SEMPI" = "SEMPI") + vals$choices$group_by <- c(vals$choices$group_by, "SEMPI" = "SEMPI") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "SEMPI" = "SEMPI") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "SEMPI" = "SEMPI") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "SEMPI" = "SEMPI") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "SEMPI" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "SEMPI" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "SEMPI" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "SEMPI" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "SEMPI" + ) + } } - } - process_rre <- function(data, example_data = F) { - if (example_data == T) { - rre_data <- data - } else { - rre_data <- read_rre(data) + process_arts_archive <- function(archive, zip = T, example_data = F) { + if (example_data == T) { + arts_data <- BGCViz:::arts_data + } else { + if (zip == T) { + arts_data <- read_arts_archive(archive, zip = T) + } else { + arts_data <- utils::read.csv(archive) + } + } + vals$arts_data <- arts_data + vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") + vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") + update_ui_with_data() + vals$data_upload_count <- vals$data_upload_count + 1 + vals$arts_data_input <- T + dup_table_id <- vals$arts_data %>% + dplyr::filter(Core != "Not_core") + shiny::updateSelectInput(session, "dup_choice", + choices = c("All", paste0("ID:", dup_table_id$ID, " ,Core:", dup_table_id$Core)), + selected = "All" + ) + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "ARTS" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "ARTS" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "ARTS" + ) + } } - vals$rre_data <- rre_data - # write.csv(vals$rre_data, "rre_data.csv", row.names = F) - - vals$rre_data_input <- TRUE - vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") - vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") - update_ui_with_data() - disable_event_logic() - if (vals$data_upload_count == 1) { - shiny::updateSelectInput(session, "ref", - selected = "RRE-Finder" - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "RRE-Finder" - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "RRE-Finder" - ) + process_deep <- function(data, example_data = F) { + if (example_data == T) { + deep_data <- data + } else { + deep_data <- read_deep(data) + } + vals$deep_data <- deep_data + vals$deep_data$chromosome <- rep("D", length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Start <- vals$deep_data$nucl_start + vals$deep_data$Stop <- vals$deep_data$nucl_end + # Add ID column as number seuquence of dataframe length + vals$deep_data$ID <- seq(1:length(vals$deep_data$bgc_candidate_id)) + vals$deep_data$Cluster <- vals$deep_data$ID + vals$deep_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$deep_data_filtered <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) + vals$choices$ref <- c(vals$choices$ref, "DeepBGC" = "DeepBGC") + vals$choices$group_by <- c(vals$choices$group_by, "DeepBGC" = "DeepBGC") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "DeepBGC" = "DeepBGC") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "DeepBGC" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "DeepBGC" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + choices = "DeepBGC", + selected = "DeepBGC" + ) + } } - if (!is.null(vals$rre_data$Probability)) { - vals$rre_more <- T - } else { - vals$rre_more <- F + process_rre <- function(data, example_data = F) { + if (example_data == T) { + rre_data <- data + } else { + rre_data <- read_rre(data) + } + vals$rre_data <- rre_data + # write.csv(vals$rre_data, "rre_data.csv", row.names = F) + + vals$rre_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "RRE-Finder" = "RRE-Finder") + vals$choices$group_by <- c(vals$choices$group_by, "RRE-Finder" = "RRE-Finder") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RRE-Finder" = "RRE-Finder") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "RRE-Finder" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "RRE-Finder" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "RRE-Finder" + ) + } + if (!is.null(vals$rre_data$Probability)) { + vals$rre_more <- T + } else { + vals$rre_more <- F + } } - } - - - #---------------------------------------------------------------- - ## Loading and processing of example data - - ## ---------------------------------------------------------------- - shiny::observeEvent(input$anti_sco, { - process_antismash(BGCViz:::anti_data, example_data = T) - }) - - shiny::observeEvent(input$gecco_sco, { - process_gecco(BGCViz:::gecco_data, example_data = T) - }) - - shiny::observeEvent(input$prism_sco, { - process_prism(BGCViz:::prism_data, example_data = T) - }) - - shiny::observeEvent(input$sempi_sco, { - process_sempi(BGCViz:::sempi_data, example_data = T) - }) - - shiny::observeEvent(input$arts_sco, { - process_arts_archive(BGCViz:::arts_data, example_data = T) - }) - - shiny::observeEvent(input$deep_sco, { - process_deep(BGCViz:::deep_data, example_data = T) - }) - - shiny::observeEvent(input$rre_sco, { - process_rre(BGCViz:::rre_data, example_data = T) - }) - - ## ---------------------------------------------------------------- - ## Loading and processing user data - - ## ---------------------------------------------------------------- - shiny::observeEvent(input$anti_data, { - disable_event_logic() - # Read data - if (input$anti_data$type == "text/csv") { - anti_data <- utils::read.csv(input$anti_data$datapath) - } else { - data <- rjson::fromJSON(file = input$anti_data$datapath) - types <- sapply(data$records, function(y) { - lapply(y$features, function(x) { - if (unlist(x$type == "region")) { - tolower(x$qualifiers$product) - } - }) - }) - types <- Filter(Negate(is.null), types) - types <- sapply(types, function(x) { - if (length(unlist(x)) > 1) { - tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) - gsub(" ", "__", tmp) + #---------------------------------------------------------------- + ## Loading and processing of example data - + ## ---------------------------------------------------------------- + shiny::observeEvent(input$anti_sco, { + process_antismash(BGCViz:::anti_data, example_data = T) + }) + + shiny::observeEvent(input$gecco_sco, { + process_gecco(BGCViz:::gecco_data, example_data = T) + }) + + shiny::observeEvent(input$prism_sco, { + process_prism(BGCViz:::prism_data, example_data = T) + }) + + shiny::observeEvent(input$sempi_sco, { + process_sempi(BGCViz:::sempi_data, example_data = T) + }) + + shiny::observeEvent(input$arts_sco, { + process_arts_archive(BGCViz:::arts_data, example_data = T) + }) + + shiny::observeEvent(input$deep_sco, { + process_deep(BGCViz:::deep_data, example_data = T) + }) + + shiny::observeEvent(input$rre_sco, { + process_rre(BGCViz:::rre_data, example_data = T) + }) + + ## ---------------------------------------------------------------- + ## Loading and processing user data - + ## ---------------------------------------------------------------- + shiny::observeEvent(input$anti_data, { + disable_event_logic() + # Read data + if (input$anti_data$type == "text/csv") { + anti_data <- utils::read.csv(input$anti_data$datapath) } else { - x - } - }) - - location <- sapply(data$records, function(y) { - unlist(sapply(y$features, function(x) { - if (unlist(x$type == "region")) { - unlist(x$location) - } - })) - }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- gsub("<", "", location) - location <- gsub(">", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - tidyr::separate(split, c("Start", "Stop")) %>% - dplyr::transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - } + data <- rjson::fromJSON(file = input$anti_data$datapath) + types <- sapply(data$records, function(y) { + lapply(y$features, function(x) { + if (unlist(x$type == "region")) { + tolower(x$qualifiers$product) + } + }) + }) - process_antismash(anti_data) - }) + types <- Filter(Negate(is.null), types) - shiny::observeEvent(input$sempi_data, { - if (input$sempi_data$type == "text/csv") { - sempi_data <- utils::read.csv(input$sempi_data$datapath) - process_sempi(sempi_data, zip = F) - } else { - process_sempi(input$sempi_data$datapath, zip = T) - } - }) - - shiny::observeEvent(input$gecco_data, { - gecco_data <- utils::read.delim(input$gecco_data$datapath) - process_gecco(gecco_data) - }) - - # These are for ARTS data processing - # input$known_data and inoput$dup_data - - shiny::observeEvent(input$arts_data, { - disable_event_logic() - if (input$arts_data$type == "text/csv") { - process_arts_archive(input$arts_data$datapath, zip = F) - } else { - process_arts_archive(input$arts_data$datapath, zip = T) - } - }) + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) + gsub(" ", "__", tmp) + } else { + x + } + }) + location <- sapply(data$records, function(y) { + unlist(sapply(y$features, function(x) { + if (unlist(x$type == "region")) { + unlist(x$location) + } + })) + }) - shiny::observeEvent(input$prism_data, { - # Read data - if (input$prism_data$type == "text/csv") { - prism_data <- utils::read.csv(input$prism_data$datapath) - process_prism(prism_data, json = F) - } else { - data <- rjson::fromJSON(file = input$prism_data$datapath) - process_prism(data) - } - }) - - shiny::observeEvent(input$deep_data, { - data <- utils::read.delim(input$deep_data$datapath) - process_deep(data) - }) - - shiny::observeEvent(input$rre_data, { - - # Read data - rre_data <- utils::read.delim(input$rre_data$datapath) - process_rre(rre_data) - }) - - ############################################################################ - ############################################################################ - ### ### - ### INTERFACE LOGIC: WHAT TO SHOW AND WHEN ### - ### ### - ############################################################################ - ############################################################################ - # Update choices - update_ui_with_data <- function() { - shiny::updateSelectInput(session, "ref", - choices = vals$choices$ref - ) - shiny::updateSelectInput(session, "group_table_ui_1-group_by", - choices = vals$choices$group_by - ) - shiny::updateSelectInput(session, "ref_col_biocircos", - choices = vals$choices$ref_col_biocircos - ) - shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - choices = vals$choices$ref_comparison_gecco - ) - shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - choices = vals$choices$ref_comparison - ) - } - # Observe input of chromosome length - shiny::observeEvent(input$chr_len, { - vals$chr_len <- input$chr_len - }) - ## ---------------------------------------------------------------- - ## Simple options showing/hiding logic for every data input - - ## ---------------------------------------------------------------- - # SHOW rre_width parameter if data is available - # and hide_viz == F - shiny::observeEvent(vals$rre_data_input, { - if (vals$rre_data_input == T) { - shinyjs::showElement(selector = "#rre_width") - } else { - shinyjs::hideElement(selector = "#rre_width") - } - }) - # Show anti_hybrid option if data is available - # And checkbox is unchecked - shiny::observeEvent(vals$anti_data_input, { - if (vals$anti_data_input == T) { - shinyjs::showElement(selector = "#anti_hybrid") - } else { - shinyjs::hideElement(selector = "#anti_hybrid") - } - }) - # Show prism options if data is available - # If hide anti is F (checkbox), then show them - # Only if prism_json file, then show Prism-Supp - # And if hide_viz == F, and prism_json, then - # show width - shiny::observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T) { - shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T) { - shinyjs::showElement(selector = "#prism_supp") - } - if (vals$prism_json == T) { - shinyjs::showElement(selector = "#prism_supp_data_input_width") - } - } else { - shinyjs::hideElement(selector = "#prism_header") - shinyjs::hideElement(selector = "#prism_hybrid") - shinyjs::hideElement(selector = "#prism_supp") - shinyjs::hideElement(selector = "#prism_supp_data_input_width") - } - }) - # Show SEMPI elements on data upload - shiny::observeEvent(vals$sempi_data_input, { - if (vals$sempi_data_input == T) { - shinyjs::showElement(selector = "#sempi_hybrid") - shinyjs::showElement(selector = "#sempi_width") - } else { - shinyjs::hideElement(selector = "#sempi_hybrid") - shinyjs::hideElement(selector = "#sempi_width") - } - }) - # Ahow ARTS data options, if data is available - shiny::observeEvent(vals$arts_data_input, { - if (vals$arts_data_input == T) { - shinyjs::showElement(selector = "#dup_choice") - shinyjs::showElement(selector = "#arts_width") - } else { - shinyjs::hideElement(selector = "#dup_choice") - shinyjs::hideElement(selector = "#arts_width") - } - }) + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- gsub("<", "", location) + location <- gsub(">", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + } - shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)) { - shinyjs::showElement(selector = "#improve_visualization_box") - } else { - shinyjs::hideElement(selector = "#improve_visualization_box") - } - }) - shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$prism_json == T)) { - shinyjs::showElement(selector = "#prism_supplement_arts_box") - } else { - shinyjs::hideElement(selector = "#prism_supplement_arts_box") - } - }) - ## --------------------------------------------------------------- - ## Data processing options show/hide - - ## --------------------------------------------------------------- - # Count data uploads, to show tabs and corresponding - # options - - output$deep_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >= 2) { - if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { - shinydashboard::menuItem("Compare data with DeepBGC", - tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), - shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", - tabName = "deep_filter", icon = shiny::icon("filter"), - shiny::uiOutput("deep_filter_UI_sidemenu") - ) + process_antismash(anti_data) + }) + + shiny::observeEvent(input$sempi_data, { + if (input$sempi_data$type == "text/csv") { + sempi_data <- utils::read.csv(input$sempi_data$datapath) + process_sempi(sempi_data, zip = F) + } else { + process_sempi(input$sempi_data$datapath, zip = T) + } + }) + + shiny::observeEvent(input$gecco_data, { + gecco_data <- utils::read.delim(input$gecco_data$datapath) + process_gecco(gecco_data) + }) + + # These are for ARTS data processing + # input$known_data and inoput$dup_data + + shiny::observeEvent(input$arts_data, { + disable_event_logic() + if (input$arts_data$type == "text/csv") { + process_arts_archive(input$arts_data$datapath, zip = F) + } else { + process_arts_archive(input$arts_data$datapath, zip = T) + } + }) + + + shiny::observeEvent(input$prism_data, { + + # Read data + if (input$prism_data$type == "text/csv") { + prism_data <- utils::read.csv(input$prism_data$datapath) + process_prism(prism_data, json = F) + } else { + data <- rjson::fromJSON(file = input$prism_data$datapath) + process_prism(data) + } + }) + + shiny::observeEvent(input$deep_data, { + data <- utils::read.delim(input$deep_data$datapath) + process_deep(data) + }) + + shiny::observeEvent(input$rre_data, { + + # Read data + rre_data <- utils::read.delim(input$rre_data$datapath) + process_rre(rre_data) + }) + + ############################################################################ + ############################################################################ + ### ### + ### INTERFACE LOGIC: WHAT TO SHOW AND WHEN ### + ### ### + ############################################################################ + ############################################################################ + # Update choices + update_ui_with_data <- function() { + shiny::updateSelectInput(session, "ref", + choices = vals$choices$ref ) - } - } - }) - output$gecco_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >= 2) { - if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { - shinydashboard::menuItem("Compare data with GECCO", - tabName = "gecco", icon = icon("fas fa-dragon"), - shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), - shinydashboard::menuItem("Filtering options", - tabName = "gecco_filter", icon = shiny::icon("filter"), - shiny::uiOutput("gecco_filter_UI_sidemenu") - ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + choices = vals$choices$group_by + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + choices = vals$choices$ref_col_biocircos + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + choices = vals$choices$ref_comparison_gecco + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + choices = vals$choices$ref_comparison ) - } - } - }) - output$anno_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >= 1) { - shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) - } - }) - output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >= 2) { - shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) - } - }) - output$summarize_sidemenu_out <- shinydashboard::renderMenu({ - if (vals$data_upload_count >= 2) { - shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) - } - }) - - output$deep_filter_box <- shiny::renderUI({ - if (vals$deep_data_input == T) { - vals$deep_global <- T - shinydashboardPlus::box( - title = "DeepBGC filtering", - id = "deep_filtering_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), - shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), - shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - ) - } - }) - output$gecco_filter_box <- shiny::renderUI({ - if (vals$gecco_data_input == T) { - vals$gecco_global <- T - shinydashboardPlus::box( - title = "GECCO filtering", - id = "gecco_filtering_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), - shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), - shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - ) - } - }) - - output$deep_filter_UI_sidemenu <- shiny::renderUI({ - vals$deep_sidebar <- T - shiny::tagList( - shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), - shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), - shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), - # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold - shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), - shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), - shiny::sliderInput("cluster_type_sidemenu", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) - ) - }) - output$gecco_filter_UI_sidemenu <- shiny::renderUI({ - vals$gecco_sidebar <- T - shiny::tagList( - shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), - shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), - shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), - shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) - ) - }) - - update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check) { - if ((as.numeric(listening_value) != comparing_values) && (rendering_check == F)) { - shiny::updateSliderInput(session, updating_value, NULL, listening_value) - return(list(as.numeric(listening_value), F)) - } else { - if (grepl("sidemenu", updating_value) == T) { - shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) - } else { - shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) - } - return(list(comparing_values, F)) - } - } - - - shiny::observeEvent(input$score_a, { - res <- update_filter_values(input$score_a, vals$score_a, "score_a_sidemenu", vals$deep_sidebar) - vals$score_a <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$score_d, { - res <- update_filter_values(input$score_d, vals$score_d, "score_d_sidemenu", vals$deep_sidebar) - vals$score_d <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$score_c, { - res <- update_filter_values(input$score_c, vals$score_c, "score_c_sidemenu", vals$deep_sidebar) - vals$score_c <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$domains_filter, { - res <- update_filter_values(input$domains_filter, vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar) - vals$domains_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$biodomain_filter, { - res <- update_filter_values(input$biodomain_filter, vals$biodomain_filter, "biodomain_filter_sidemenu", vals$deep_sidebar) - vals$biodomain_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$gene_filter, { - res <- update_filter_values(input$gene_filter, vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar) - vals$gene_filter <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$cluster_type, { - res <- update_filter_values(input$cluster_type, vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar) - vals$cluster_type <- res[[1]] - vals$deep_sidebar <- res[[2]] - }) - shiny::observeEvent(input$score_a_sidemenu, { - res <- update_filter_values(input$score_a_sidemenu, vals$score_a, "score_a", vals$deep_global) - vals$score_a <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$score_d_sidemenu, { - res <- update_filter_values(input$score_d_sidemenu, vals$score_d, "score_d", vals$deep_global) - vals$score_d <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$score_c_sidemenu, { - res <- update_filter_values(input$score_c_sidemenu, vals$score_c, "score_c", vals$deep_global) - vals$score_c <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$domains_filter_sidemenu, { - res <- update_filter_values(input$domains_filter_sidemenu, vals$domains_filter, "domains_filter", vals$deep_global) - vals$domains_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$biodomain_filter_sidemenu, { - res <- update_filter_values(input$biodomain_filter_sidemenu, vals$biodomain_filter, "biodomain_filter", vals$deep_global) - vals$biodomain_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$gene_filter_sidemenu, { - res <- update_filter_values(input$gene_filter_sidemenu, vals$gene_filter, "gene_filter", vals$deep_global) - vals$gene_filter <- res[[1]] - vals$deep_global <- res[[2]] - }) - shiny::observeEvent(input$cluster_type_sidemenu, { - res <- update_filter_values(input$cluster_type_sidemenu, vals$cluster_type, "cluster_type", vals$deep_global) - vals$cluster_type <- res[[1]] - vals$deep_global <- res[[2]] - }) - - - - shiny::observeEvent(input$score_average_gecco, { - res <- update_filter_values(input$score_average_gecco, vals$score_average_gecco, "score_average_gecco_sidemenu", vals$gecco_sidebar) - vals$score_average_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - shiny::observeEvent(input$score_cluster_gecco, { - res <- update_filter_values(input$score_cluster_gecco, vals$score_cluster_gecco, "score_cluster_gecco_sidemenu", vals$gecco_sidebar) - vals$score_cluster_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - shiny::observeEvent(input$domains_filter_gecco, { - res <- update_filter_values(input$domains_filter_gecco, vals$domains_filter_gecco, "domains_filter_gecco_sidemenu", vals$gecco_sidebar) - vals$domains_filter_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - shiny::observeEvent(input$prot_filter_gecco, { - res <- update_filter_values(input$prot_filter_gecco, vals$prot_filter_gecco, "prot_filter_gecco_sidemenu", vals$gecco_sidebar) - vals$prot_filter_gecco <- res[[1]] - vals$gecco_sidebar <- res[[2]] - }) - shiny::observeEvent(input$score_average_gecco_sidemenu, { - res <- update_filter_values(input$score_average_gecco_sidemenu, vals$score_average_gecco, "score_average_gecco", vals$gecco_global) - vals$score_average_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - shiny::observeEvent(input$score_cluster_gecco_sidemenu, { - res <- update_filter_values(input$score_cluster_gecco_sidemenu, vals$score_cluster_gecco, "score_cluster_gecco", vals$gecco_global) - vals$score_cluster_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - shiny::observeEvent(input$domains_filter_gecco_sidemenu, { - res <- update_filter_values(input$domains_filter_gecco_sidemenu, vals$domains_filter_gecco, "domains_filter_gecco", vals$gecco_global) - vals$domains_filter_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - shiny::observeEvent(input$prot_filter_gecco_sidemenu, { - res <- update_filter_values(input$prot_filter_gecco_sidemenu, vals$prot_filter_gecco, "prot_filter_gecco", vals$gecco_global) - vals$prot_filter_gecco <- res[[1]] - vals$gecco_global <- res[[2]] - }) - - shiny::observeEvent(input$restore_box, { - box_ids <- c( - "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", - "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", - "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", - "ranking_barplot_box", "group_table_box", "upload_anti_box", "upload_prism_box", - "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", - "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", - "download_data_box", "gecco_filtering_box", "deep_filtering_box" - ) - for (id in box_ids) { - shinydashboardPlus::updateBox(id, action = "restore") } - }) + # Observe input of chromosome length + shiny::observeEvent(input$chr_len, { + vals$chr_len <- input$chr_len + }) + ## ---------------------------------------------------------------- + ## Simple options showing/hiding logic for every data input - + ## ---------------------------------------------------------------- + # SHOW rre_width parameter if data is available + # and hide_viz == F + shiny::observeEvent(vals$rre_data_input, { + if (vals$rre_data_input == T) { + shinyjs::showElement(selector = "#rre_width") + } else { + shinyjs::hideElement(selector = "#rre_width") + } + }) + # Show anti_hybrid option if data is available + # And checkbox is unchecked + shiny::observeEvent(vals$anti_data_input, { + if (vals$anti_data_input == T) { + shinyjs::showElement(selector = "#anti_hybrid") + } else { + shinyjs::hideElement(selector = "#anti_hybrid") + } + }) + # Show prism options if data is available + # If hide anti is F (checkbox), then show them + # Only if prism_json file, then show Prism-Supp + # And if hide_viz == F, and prism_json, then + # show width + shiny::observeEvent(vals$prism_data_input, { + if (vals$prism_data_input == T) { + shinyjs::showElement(selector = "#prism_hybrid") + if (vals$prism_json == T) { + shinyjs::showElement(selector = "#prism_supp") + } + if (vals$prism_json == T) { + shinyjs::showElement(selector = "#prism_supp_data_input_width") + } + } else { + shinyjs::hideElement(selector = "#prism_header") + shinyjs::hideElement(selector = "#prism_hybrid") + shinyjs::hideElement(selector = "#prism_supp") + shinyjs::hideElement(selector = "#prism_supp_data_input_width") + } + }) + # Show SEMPI elements on data upload + shiny::observeEvent(vals$sempi_data_input, { + if (vals$sempi_data_input == T) { + shinyjs::showElement(selector = "#sempi_hybrid") + shinyjs::showElement(selector = "#sempi_width") + } else { + shinyjs::hideElement(selector = "#sempi_hybrid") + shinyjs::hideElement(selector = "#sempi_width") + } + }) + # Ahow ARTS data options, if data is available + shiny::observeEvent(vals$arts_data_input, { + if (vals$arts_data_input == T) { + shinyjs::showElement(selector = "#dup_choice") + shinyjs::showElement(selector = "#arts_width") + } else { + shinyjs::hideElement(selector = "#dup_choice") + shinyjs::hideElement(selector = "#arts_width") + } + }) + + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)) { + shinyjs::showElement(selector = "#improve_visualization_box") + } else { + shinyjs::hideElement(selector = "#improve_visualization_box") + } + }) + shiny::observeEvent(vals$data_upload_count, { + if ((vals$arts_data_input == T) || (vals$prism_json == T)) { + shinyjs::showElement(selector = "#prism_supplement_arts_box") + } else { + shinyjs::hideElement(selector = "#prism_supplement_arts_box") + } + }) + ## --------------------------------------------------------------- + ## Data processing options show/hide - + ## --------------------------------------------------------------- + # Count data uploads, to show tabs and corresponding + # options + + output$deep_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >= 2) { + if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + shinydashboard::menuItem("Compare data with DeepBGC", + tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), + shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", + tabName = "deep_filter", icon = shiny::icon("filter"), + shiny::uiOutput("deep_filter_UI_sidemenu") + ) + ) + } + } + }) + output$gecco_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >= 2) { + if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + shinydashboard::menuItem("Compare data with GECCO", + tabName = "gecco", icon = icon("fas fa-dragon"), + shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), + shinydashboard::menuItem("Filtering options", + tabName = "gecco_filter", icon = shiny::icon("filter"), + shiny::uiOutput("gecco_filter_UI_sidemenu") + ) + ) + } + } + }) + output$anno_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >= 1) { + shinydashboard::menuItem("Annotation visualization and comparison", tabName = "anno_sidemenu", icon = icon("fas fa-project-diagram")) + } + }) + output$biocircos_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >= 2) { + shinydashboard::menuItem("Biocircos plot", tabName = "biocircos_sidemenu", icon = icon("fas fa-circle-notch")) + } + }) + output$summarize_sidemenu_out <- shinydashboard::renderMenu({ + if (vals$data_upload_count >= 2) { + shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) + } + }) + output$deep_filter_box <- shiny::renderUI({ + if (vals$deep_data_input == T) { + vals$deep_global <- T + shinydashboardPlus::box( + title = "DeepBGC filtering", + id = "deep_filtering_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::sliderInput("score_a", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_d", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_c", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + } + }) + output$gecco_filter_box <- shiny::renderUI({ + if (vals$gecco_data_input == T) { + vals$gecco_global <- T + shinydashboardPlus::box( + title = "GECCO filtering", + id = "gecco_filtering_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::sliderInput("score_average_gecco", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("score_cluster_gecco", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("domains_filter_gecco", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + } + }) - # Logic show/hide selectinput in Link coloring in - # Biocircos - shiny::observeEvent(input$label_color_class, { - if (input$label_color_class == "R") { - shinyjs::showElement(selector = "#ref_col_biocircos") - } else { - shinyjs::hideElement(selector = "#ref_col_biocircos") - } - }) - # Make hybrids from the data, if checkbox is checked - # TODO Put the function to the root. - # Tou have duplicated code - shiny::observeEvent(input$anti_hybrid, ignoreInit = T, { - if (input$anti_hybrid == T) { - vals$anti_data$Type2 <- hybrid_col(vals$anti_data) - } else { - vals$anti_data$Type2 <- vals$anti_type - } - }) - shiny::observeEvent(input$prism_hybrid, ignoreInit = T, { - if (input$prism_hybrid == T) { - vals$prism_data$Type2 <- hybrid_col(vals$prism_data) - } else { - vals$prism_data$Type2 <- vals$prism_type - } - }) - shiny::observeEvent(input$sempi_hybrid, ignoreInit = T, { - if (input$sempi_hybrid == T) { - vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) - } else { - vals$sempi_data$Type2 <- vals$sempi_type - } - }) - # Rename the data, if button is clicked - shiny::observeEvent(input$rename, { - rename_data <- vals$rename_data - if (vals$anti_data_input == T) { - anti_data <- vals$anti_data - res <- rename_vector(anti_data, rename_data, vals$renaming_notification) - vals$anti_type <- res[[1]] - vals$renaming_notification <- res[[2]] - anti_data["Type2"] <- vals$anti_type - vals$anti_data <- anti_data - } + output$deep_filter_UI_sidemenu <- shiny::renderUI({ + vals$deep_sidebar <- T + shiny::tagList( + shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), + shiny::sliderInput("score_c_sidemenu", "Cluster_type score threshold for DeepBGC data", min = 0, max = 100, value = 50), + # Domains, biodomains and proteins dplyr::filter. Remain >= of set threshold + shiny::sliderInput("domains_filter_sidemenu", "Domain number threshold for DeepBGC data", min = 0, max = 100, value = 5), + shiny::sliderInput("biodomain_filter_sidemenu", "Biodomain number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("gene_filter_sidemenu", "Protein number threshold for DeepBGC data", min = 0, max = 100, value = 1), + shiny::sliderInput("cluster_type_sidemenu", "Choose threshold to assign cluster type for DeepBGC data ", min = 0, max = 100, value = 50) + ) + }) + output$gecco_filter_UI_sidemenu <- shiny::renderUI({ + vals$gecco_sidebar <- T + shiny::tagList( + shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), + shiny::sliderInput("domains_filter_gecco_sidemenu", "Domain number threshold for Gecco data", min = 0, max = 100, value = 1), + shiny::sliderInput("prot_filter_gecco_sidemenu", "Protein number threshold for Gecco data", min = 0, max = 100, value = 1) + ) + }) - if (vals$sempi_data_input == T) { - sempi_data <- vals$sempi_data - res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) - vals$sempi_type <- res[[1]] - vals$renaming_notification <- res[[2]] - sempi_data["Type2"] <- vals$sempi_type - vals$sempi_data <- sempi_data + update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check) { + if ((as.numeric(listening_value) != comparing_values) && (rendering_check == F)) { + shiny::updateSliderInput(session, updating_value, NULL, listening_value) + return(list(as.numeric(listening_value), F)) + } else { + if (grepl("sidemenu", updating_value) == T) { + shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + } else { + shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) + } + return(list(comparing_values, F)) + } } - if (vals$prism_data_input == T) { - prism_data <- vals$prism_data - res <- rename_vector(prism_data, rename_data, vals$renaming_notification) - vals$prism_type <- res[[1]] - vals$renaming_notification <- res[[2]] - prism_data["Type2"] <- vals$prism_type - vals$prism_data <- prism_data - } - shinyjs::showElement(selector = "#reset_name") - shinyjs::hideElement(selector = "#rename") - vals$renamed <- T - shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration = 10) - }) - # When the new data is uploaded and renamed - # is T, then rename data on upload - shiny::observeEvent(check_to_rename(), { - shiny::req(vals$renamed == T) - - rename_data <- vals$rename_data - if (vals$anti_data_input == T) { - anti_data <- vals$anti_data - res <- rename_vector(anti_data, rename_data, vals$renaming_notification) - vals$anti_type <- res[[1]] - vals$renaming_notification <- res[[2]] - anti_data["Type2"] <- vals$anti_type - vals$anti_data <- anti_data - } - if (vals$sempi_data_input == T) { - sempi_data <- vals$sempi_data - res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) - vals$sempi_type <- res[[1]] - vals$renaming_notification <- res[[2]] - sempi_data["Type2"] <- vals$sempi_type - vals$sempi_data <- sempi_data - } + shiny::observeEvent(input$score_a, { + res <- update_filter_values(input$score_a, vals$score_a, "score_a_sidemenu", vals$deep_sidebar) + vals$score_a <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_d, { + res <- update_filter_values(input$score_d, vals$score_d, "score_d_sidemenu", vals$deep_sidebar) + vals$score_d <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_c, { + res <- update_filter_values(input$score_c, vals$score_c, "score_c_sidemenu", vals$deep_sidebar) + vals$score_c <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$domains_filter, { + res <- update_filter_values(input$domains_filter, vals$domains_filter, "domains_filter_sidemenu", vals$deep_sidebar) + vals$domains_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$biodomain_filter, { + res <- update_filter_values(input$biodomain_filter, vals$biodomain_filter, "biodomain_filter_sidemenu", vals$deep_sidebar) + vals$biodomain_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$gene_filter, { + res <- update_filter_values(input$gene_filter, vals$gene_filter, "gene_filter_sidemenu", vals$deep_sidebar) + vals$gene_filter <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$cluster_type, { + res <- update_filter_values(input$cluster_type, vals$cluster_type, "cluster_type_sidemenu", vals$deep_sidebar) + vals$cluster_type <- res[[1]] + vals$deep_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_a_sidemenu, { + res <- update_filter_values(input$score_a_sidemenu, vals$score_a, "score_a", vals$deep_global) + vals$score_a <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$score_d_sidemenu, { + res <- update_filter_values(input$score_d_sidemenu, vals$score_d, "score_d", vals$deep_global) + vals$score_d <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$score_c_sidemenu, { + res <- update_filter_values(input$score_c_sidemenu, vals$score_c, "score_c", vals$deep_global) + vals$score_c <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_sidemenu, { + res <- update_filter_values(input$domains_filter_sidemenu, vals$domains_filter, "domains_filter", vals$deep_global) + vals$domains_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$biodomain_filter_sidemenu, { + res <- update_filter_values(input$biodomain_filter_sidemenu, vals$biodomain_filter, "biodomain_filter", vals$deep_global) + vals$biodomain_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$gene_filter_sidemenu, { + res <- update_filter_values(input$gene_filter_sidemenu, vals$gene_filter, "gene_filter", vals$deep_global) + vals$gene_filter <- res[[1]] + vals$deep_global <- res[[2]] + }) + shiny::observeEvent(input$cluster_type_sidemenu, { + res <- update_filter_values(input$cluster_type_sidemenu, vals$cluster_type, "cluster_type", vals$deep_global) + vals$cluster_type <- res[[1]] + vals$deep_global <- res[[2]] + }) - if (vals$prism_data_input == T) { - prism_data <- vals$prism_data - res <- rename_vector(prism_data, rename_data, vals$renaming_notification) - vals$prism_type <- res[[1]] - vals$renaming_notification <- res[[2]] - prism_data["Type2"] <- vals$prism_type - vals$prism_data <- prism_data - } - }) - # Reset the renaming. Uncheck the hybrid checkboxes - shiny::observeEvent(input$reset_name, { - vals$anti_data["Type2"] <- vals$anti_data["Type"] - vals$sempi_data["Type2"] <- vals$sempi_data["Type"] - vals$ prism_data["Type2"] <- vals$ prism_data["Type"] - if (input$anti_hybrid == T) { - shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) - } - if (input$prism_hybrid == T) { - shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) - } - if (input$sempi_hybrid == T) { - shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) - } - shinyjs::showElement(selector = "#rename") - shinyjs::hideElement(selector = "#reset_name") - vals$renamed <- F - }) - # Read the uploaded renaming scheme csv - shiny::observeEvent(input$rename_data, { - rename_data <- utils::read.csv(input$rename_data$datapath) - vals$rename_data <- rename_data - coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) - coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] - colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") - }) - - - # What to do, if hide DeepBGC comparison options scheme is triggered - - - ############################################################################ - ############################################################################ - ### ### - ### COMPUTATIONS ### - ### ### - ############################################################################ - ############################################################################ - shiny::observeEvent(input$prism_supp, ignoreInit = T, priority = 3, { - if (input$prism_supp == T) { - vals$need_filter <- T - vals$prism_supp_data_input <- T - vals$prism_supp_plot <- T - if (!("PRISM-Supp" %in% names(vals$choices$ref))) { - vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") - vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") - update_ui_with_data() - } - } else { - vals$prism_supp_data_input <- F - vals$need_filter <- T - vals$prism_supp_plot <- F - vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref) %in% c("PRISM-Supp"))] - vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by) %in% c("PRISM-Supp"))] - vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos) %in% c("PRISM-Supp"))] - update_ui_with_data() - } - }) - - # Compute all interceptions on data upload. - # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), ignoreInit = T, priority = 5, { - # GENERATE DATA - if (vals$anti_data_input == TRUE) { - anti_data <- vals$anti_data - anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - if (vals$deep_data_input == TRUE) { - deep_data <- vals$deep_data - deep_inter <- vals$deep_data %>% - dplyr::select(Start, Stop) - deep_inter$seqnames <- "chr" - } - if (vals$rre_data_input == TRUE) { - # Convert numeric columns in a dataframe as a numeric - vals$rre_data$Start <- as.numeric(vals$rre_data$Start) - vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(vals$rre_data) - # Start/Stop columns from rre data as matrix - rre_inter <- rre_data %>% - dplyr::select(Start, Stop) - rre_inter$seqnames <- "chr" - } - if (vals$prism_data_input == TRUE) { - # Store master prism data in local variable - prism_data <- vals$prism_data - # Start/Stop columns from prism data as matrix - prism_inter <- prism_data %>% - dplyr::select(Start, Stop) - prism_inter$seqnames <- "chr" - } - if (vals$sempi_data_input == TRUE) { - # Store master prism data in local variable - sempi_data <- vals$sempi_data - # Start/Stop columns from prism data as matrix - sempi_inter <- vals$sempi_data %>% - dplyr::select(Start, Stop) - sempi_inter$seqnames <- "chr" - } - if (vals$prism_json == T) { - prism_supp_data <- vals$prism_supp_data - prism_supp_inter <- vals$prism_supp_data %>% - dplyr::select(Start, Stop) - prism_supp_inter$seqnames <- "chr" - } - if (vals$arts_data_input == T) { - arts_data <- vals$arts_data - arts_inter <- vals$arts_data %>% - dplyr::select(Start, Stop) - arts_inter$seqnames <- "chr" - } - if (vals$gecco_data_input == TRUE) { - gecco_data <- vals$gecco_data - # Start/Stop columns from prism data as matrix - gecco_inter <- vals$gecco_data %>% - dplyr::select(Start, Stop) - gecco_inter$seqnames <- "chr" - } - get_inter <- function(inter1, inter2) { - query <- GenomicRanges::makeGRangesFromDataFrame(inter2) - subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) - interseption <- GenomicRanges::findOverlaps(query, subject) - inter_from <- interseption@from - inter_to <- interseption@to - return(list(from = inter_from, to = inter_to)) - } + shiny::observeEvent(input$score_average_gecco, { + res <- update_filter_values(input$score_average_gecco, vals$score_average_gecco, "score_average_gecco_sidemenu", vals$gecco_sidebar) + vals$score_average_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_cluster_gecco, { + res <- update_filter_values(input$score_cluster_gecco, vals$score_cluster_gecco, "score_cluster_gecco_sidemenu", vals$gecco_sidebar) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_gecco, { + res <- update_filter_values(input$domains_filter_gecco, vals$domains_filter_gecco, "domains_filter_gecco_sidemenu", vals$gecco_sidebar) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$prot_filter_gecco, { + res <- update_filter_values(input$prot_filter_gecco, vals$prot_filter_gecco, "prot_filter_gecco_sidemenu", vals$gecco_sidebar) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_sidebar <- res[[2]] + }) + shiny::observeEvent(input$score_average_gecco_sidemenu, { + res <- update_filter_values(input$score_average_gecco_sidemenu, vals$score_average_gecco, "score_average_gecco", vals$gecco_global) + vals$score_average_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$score_cluster_gecco_sidemenu, { + res <- update_filter_values(input$score_cluster_gecco_sidemenu, vals$score_cluster_gecco, "score_cluster_gecco", vals$gecco_global) + vals$score_cluster_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$domains_filter_gecco_sidemenu, { + res <- update_filter_values(input$domains_filter_gecco_sidemenu, vals$domains_filter_gecco, "domains_filter_gecco", vals$gecco_global) + vals$domains_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) + shiny::observeEvent(input$prot_filter_gecco_sidemenu, { + res <- update_filter_values(input$prot_filter_gecco_sidemenu, vals$prot_filter_gecco, "prot_filter_gecco", vals$gecco_global) + vals$prot_filter_gecco <- res[[1]] + vals$gecco_global <- res[[2]] + }) - inters <- vals$inters - index <- 1 - for (i in data_uploads_inter) { - index_2 <- 1 - j <- soft_names[index] - for (p in data_uploads_inter) { - x <- soft_names[index_2] - if ((vals[[i]] == TRUE) & (vals$computed[[j]] == F) & (j != x)) { - if ((vals[[p]] == TRUE) & (j != soft_names[index_2])) { - res <- get_inter(eval(as.name(paste(j, "_inter", sep = ""))), eval(as.name(paste(x, "_inter", sep = "")))) - new_res <- list() - new_res$from <- eval(as.name(paste(x, "_data", sep = "")))[res$from, ]$Cluster - new_res$to <- eval(as.name(paste(j, "_data", sep = "")))[res$to, ]$Cluster - inters[[j]][[x]] <- new_res - inters[[x]][[j]] <- list(from = new_res$to, to = new_res$from) - } - } - index_2 <- index_2 + 1 - } - if (vals[[i]] == TRUE) { - vals$computed[[j]] <- TRUE - } - index <- index + 1 - } + shiny::observeEvent(input$restore_box, { + box_ids <- c( + "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", + "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", + "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", + "ranking_barplot_box", "group_table_box", "upload_anti_box", "upload_prism_box", + "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", + "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", + "download_data_box", "gecco_filtering_box", "deep_filtering_box" + ) + for (id in box_ids) { + shinydashboardPlus::updateBox(id, action = "restore") + } + }) - vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) & (vals$arts_data_input == F)) { - vals$inters_filtered <- inters - enable_event_logic() - } else { - vals$need_filter <- T - vals$filter_data <- T - } - }) - # dplyr::filter ARTS, DeepBGC, GECCO interception data - # and general dataframes to plot, if data filtering - # options are triggered - shiny::observeEvent( - { - dynamicInput() - to_debounce() - }, - ignoreInit = T, - priority = 4, - { - shiny::req(vals$data_upload_count >= 1) - inters <- vals$inters - if (vals$deep_data_input == TRUE) { - if (vals$need_filter == F) { - biocircos_deep <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) - vals$deep_data_filtered <- biocircos_deep + + # Logic show/hide selectinput in Link coloring in + # Biocircos + shiny::observeEvent(input$label_color_class, { + if (input$label_color_class == "R") { + shinyjs::showElement(selector = "#ref_col_biocircos") } else { - biocircos_deep <- vals$deep_data_filtered - } - if (vals$data_upload_count != 1) { - new_deep <- lapply(inters$deep, function(x) { - new_to <- x$to[x$to %in% biocircos_deep$Cluster] - new_from <- x$from[x$to %in% biocircos_deep$Cluster] - list(from = new_from, to = new_to) - }) - new_inters <- inters - update_list <- names(inters$deep) - for (b in seq(1:length(update_list))) { - new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from - new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to - } - new_inters$deep <- new_deep - vals$inters_filtered <- new_inters - inters <- new_inters - } - } - if (vals$gecco_data_input == TRUE) { - if (vals$need_filter == F) { - gecco_data <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) - vals$gecco_data_filtered <- gecco_data + shinyjs::hideElement(selector = "#ref_col_biocircos") + } + }) + # Make hybrids from the data, if checkbox is checked + # TODO Put the function to the root. + # Tou have duplicated code + shiny::observeEvent(input$anti_hybrid, ignoreInit = T, { + if (input$anti_hybrid == T) { + vals$anti_data$Type2 <- hybrid_col(vals$anti_data) } else { - gecco_data <- vals$gecco_data_filtered - } - if (vals$data_upload_count != 1) { - new_gecco <- lapply(inters$gecco, function(x) { - new_to <- x$to[x$to %in% gecco_data$Cluster] - new_from <- x$from[x$to %in% gecco_data$Cluster] - list(from = new_from, to = new_to) - }) - new_inters <- inters - update_list <- names(inters$gecco) - for (b in seq(1:length(update_list))) { - new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from - new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to - } - new_inters$gecco <- new_gecco - vals$inters_filtered <- new_inters - inters <- new_inters - } - } - if (vals$arts_data_input == TRUE) { - if (input$dup_choice != "All") { - vals$arts_data_filtered <- data.frame(vals$arts_data) %>% - dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") - if (vals$data_upload_count != 1) { - new_arts <- lapply(inters$arts, function(x) { - new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] - new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] - list(from = new_from, to = new_to) - }) - new_inters <- inters - update_list <- names(inters$arts) - for (b in seq(1:length(update_list))) { - new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from - new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + vals$anti_data$Type2 <- vals$anti_type + } + }) + shiny::observeEvent(input$prism_hybrid, ignoreInit = T, { + if (input$prism_hybrid == T) { + vals$prism_data$Type2 <- hybrid_col(vals$prism_data) + } else { + vals$prism_data$Type2 <- vals$prism_type + } + }) + shiny::observeEvent(input$sempi_hybrid, ignoreInit = T, { + if (input$sempi_hybrid == T) { + vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) + } else { + vals$sempi_data$Type2 <- vals$sempi_type + } + }) + # Rename the data, if button is clicked + shiny::observeEvent(input$rename, { + rename_data <- vals$rename_data + if (vals$anti_data_input == T) { + anti_data <- vals$anti_data + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] + anti_data["Type2"] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T) { + sempi_data <- vals$sempi_data + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] + sempi_data["Type2"] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if (vals$prism_data_input == T) { + prism_data <- vals$prism_data + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] + prism_data["Type2"] <- vals$prism_type + vals$prism_data <- prism_data + } + shinyjs::showElement(selector = "#reset_name") + shinyjs::hideElement(selector = "#rename") + vals$renamed <- T + shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration = 10) + }) + # When the new data is uploaded and renamed + # is T, then rename data on upload + shiny::observeEvent(check_to_rename(), { + shiny::req(vals$renamed == T) + + rename_data <- vals$rename_data + if (vals$anti_data_input == T) { + anti_data <- vals$anti_data + res <- rename_vector(anti_data, rename_data, vals$renaming_notification) + vals$anti_type <- res[[1]] + vals$renaming_notification <- res[[2]] + anti_data["Type2"] <- vals$anti_type + vals$anti_data <- anti_data + } + + if (vals$sempi_data_input == T) { + sempi_data <- vals$sempi_data + res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) + vals$sempi_type <- res[[1]] + vals$renaming_notification <- res[[2]] + sempi_data["Type2"] <- vals$sempi_type + vals$sempi_data <- sempi_data + } + + if (vals$prism_data_input == T) { + prism_data <- vals$prism_data + res <- rename_vector(prism_data, rename_data, vals$renaming_notification) + vals$prism_type <- res[[1]] + vals$renaming_notification <- res[[2]] + prism_data["Type2"] <- vals$prism_type + vals$prism_data <- prism_data + } + }) + # Reset the renaming. Uncheck the hybrid checkboxes + shiny::observeEvent(input$reset_name, { + vals$anti_data["Type2"] <- vals$anti_data["Type"] + vals$sempi_data["Type2"] <- vals$sempi_data["Type"] + vals$ prism_data["Type2"] <- vals$ prism_data["Type"] + if (input$anti_hybrid == T) { + shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) + shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) + } + if (input$prism_hybrid == T) { + shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) + shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) + } + if (input$sempi_hybrid == T) { + shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) + shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) + } + shinyjs::showElement(selector = "#rename") + shinyjs::hideElement(selector = "#reset_name") + vals$renamed <- F + }) + # Read the uploaded renaming scheme csv + shiny::observeEvent(input$rename_data, { + rename_data <- utils::read.csv(input$rename_data$datapath) + vals$rename_data <- rename_data + coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) + coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] + colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") + }) + + + # What to do, if hide DeepBGC comparison options scheme is triggered + + + ############################################################################ + ############################################################################ + ### ### + ### COMPUTATIONS ### + ### ### + ############################################################################ + ############################################################################ + shiny::observeEvent(input$prism_supp, ignoreInit = T, priority = 3, { + if (input$prism_supp == T) { + vals$need_filter <- T + vals$prism_supp_data_input <- T + vals$prism_supp_plot <- T + if (!("PRISM-Supp" %in% names(vals$choices$ref))) { + vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") + vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "PRISM-Supp" = "PRISM-Supp") + update_ui_with_data() } - new_inters$arts <- new_arts - vals$inters_filtered <- new_inters - inters <- new_inters - } } else { - vals$arts_data_filtered <- vals$arts_data - vals$inters_filtered <- inters - } - } - if (input$prism_supp == FALSE) { - inters$prism_supp <- NULL - for (name in names(inters)) { - inters[[name]][which(names(inters[[name]]) %in% c("prism_supp"))] <- NULL - } - } - if ((vals$gecco_data_input == F) & (vals$deep_data_input == F) & (vals$arts_data_input == F)) { - vals$inters_filtered <- inters - } - vals$need_filter <- F - vals$filter_data <- F - vals$can_plot_deep_ref <- T - enable_event_logic() - } - ) - # Compute the Biociros plot. Store information to plot later - shiny::observeEvent(biocircos_listen(), ignoreInit = T, priority = 3, { - shiny::req(vals$data_upload_count >= 2) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_biocircos == T) - ## source("src/biocircos_functions.R") - # BioCircos! - Biocircos_chromosomes <- list() - arcs_chromosomes <- c() - arcs_begin <- c() - arcs_end <- c() - arc_labels <- c() - arc_col <- c() - - if (is.null(vals$inters_filtered)) { - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } + vals$prism_supp_data_input <- F + vals$need_filter <- T + vals$prism_supp_plot <- F + vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref) %in% c("PRISM-Supp"))] + vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by) %in% c("PRISM-Supp"))] + vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos) %in% c("PRISM-Supp"))] + update_ui_with_data() + } + }) + # Compute all interceptions on data upload. + # dplyr::filter while ploting then. + shiny::observeEvent(inputData(), ignoreInit = T, priority = 5, { + # GENERATE DATA + if (vals$anti_data_input == TRUE) { + anti_data <- vals$anti_data + anti_inter <- vals$anti_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + if (vals$deep_data_input == TRUE) { + deep_data <- vals$deep_data + deep_inter <- vals$deep_data %>% + dplyr::select(Start, Stop) - rename_data <- vals$rename_data - coloring_datatable <- vals$coloring_datatable - - index <- 1 - # browser() - for (upload in data_uploads) { - if (vals[[upload]] == T) { - # Store data in local variable - corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) - init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color, coloring_datatable) - # Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes <- init_data[[1]] - # Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- init_data[[2]] - # Add arcs begin positions. (Start column) - arcs_begin <- init_data[[3]] - # Stop position of arcs. - arcs_end <- init_data[[4]] - # Add Arcs labels. Can add only one label... - arc_labels <- init_data[[5]] - - arc_col <- init_data[[6]] - } - index <- index + 1 - } - # Add to tracklist. Then it can be populated with links - tracklist <- BioCircos::BioCircosArcTrack("myArcTrack", arcs_chromosomes, arcs_begin, arcs_end, - minRadius = 0.90, maxRadius = 0.97, labels = arc_labels, colors = arc_col - ) - # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and - # from second one. IDs are duplicated, if intercepted more than one time - - chromosomes_start <- c() - chromosomes_end <- c() - link_pos_start <- c() - link_pos_start_1 <- c() - link_pos_end <- c() - link_pos_end_2 <- c() - label_1 <- c() - label_2 <- c() - label_color <- c() - - # CALCULATIONS - # ----------------------------------------- - - - data_uploads_2 <- data_uploads - soft_2 <- soft_namings - soft_names_2 <- soft_names - data_to_use_2 <- data_to_use - index <- 1 - for (upload in data_uploads) { - data_uploads_2 <- data_uploads_2[-1] - soft_2 <- soft_2[-1] - soft_names_2 <- soft_names_2[-1] - data_to_use_2 <- data_to_use_2[-1] - index2 <- 1 - if (vals[[upload]] == T) { - for (upload2 in data_uploads_2) { - if ((vals[[upload2]] == T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { - output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) - chromosomes_start <- c(chromosomes_start, output[[3]]) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(chromosomes_end, output[[4]]) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(link_pos_end_2, output[[8]])) - label_1 <- c(label_1, output[[9]]) - label_2 <- c(label_2, output[[10]]) - label_color <- c(label_color, output[[11]]) - } - index2 <- index2 + 1 - } - utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) - } - index <- index + 1 - } + deep_inter$seqnames <- "chr" + } + if (vals$rre_data_input == TRUE) { + # Convert numeric columns in a dataframe as a numeric + vals$rre_data$Start <- as.numeric(vals$rre_data$Start) + vals$rre_data$Stop <- as.numeric(vals$rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(vals$rre_data) + # Start/Stop columns from rre data as matrix + rre_inter <- rre_data %>% + dplyr::select(Start, Stop) + rre_inter$seqnames <- "chr" + } + if (vals$prism_data_input == TRUE) { + # Store master prism data in local variable + prism_data <- vals$prism_data + # Start/Stop columns from prism data as matrix + prism_inter <- prism_data %>% + dplyr::select(Start, Stop) + prism_inter$seqnames <- "chr" + } + if (vals$sempi_data_input == TRUE) { + # Store master prism data in local variable + sempi_data <- vals$sempi_data + # Start/Stop columns from prism data as matrix + sempi_inter <- vals$sempi_data %>% + dplyr::select(Start, Stop) + sempi_inter$seqnames <- "chr" + } + if (vals$prism_json == T) { + prism_supp_data <- vals$prism_supp_data + prism_supp_inter <- vals$prism_supp_data %>% + dplyr::select(Start, Stop) + prism_supp_inter$seqnames <- "chr" + } + if (vals$arts_data_input == T) { + arts_data <- vals$arts_data + arts_inter <- vals$arts_data %>% + dplyr::select(Start, Stop) + arts_inter$seqnames <- "chr" + } + if (vals$gecco_data_input == TRUE) { + gecco_data <- vals$gecco_data + # Start/Stop columns from prism data as matrix + gecco_inter <- vals$gecco_data %>% + dplyr::select(Start, Stop) + gecco_inter$seqnames <- "chr" + } + get_inter <- function(inter1, inter2) { + query <- GenomicRanges::makeGRangesFromDataFrame(inter2) + subject <- GenomicRanges::makeGRangesFromDataFrame(inter1) + interseption <- GenomicRanges::findOverlaps(query, subject) + inter_from <- interseption@from + inter_to <- interseption@to + return(list(from = inter_from, to = inter_to)) + } + inters <- vals$inters + index <- 1 + for (i in data_uploads_inter) { + index_2 <- 1 + j <- soft_names[index] + for (p in data_uploads_inter) { + x <- soft_names[index_2] + if ((vals[[i]] == TRUE) & (vals$computed[[j]] == F) & (j != x)) { + if ((vals[[p]] == TRUE) & (j != soft_names[index_2])) { + res <- get_inter(eval(as.name(paste(j, "_inter", sep = ""))), eval(as.name(paste(x, "_inter", sep = "")))) + new_res <- list() + new_res$from <- eval(as.name(paste(x, "_data", sep = "")))[res$from, ]$Cluster + new_res$to <- eval(as.name(paste(j, "_data", sep = "")))[res$to, ]$Cluster + inters[[j]][[x]] <- new_res + inters[[x]][[j]] <- list(from = new_res$to, to = new_res$from) + } + } + index_2 <- index_2 + 1 + } + if (vals[[i]] == TRUE) { + vals$computed[[j]] <- TRUE + } + index <- index + 1 + } + vals$inters <- inters + if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) & (vals$arts_data_input == F)) { + vals$inters_filtered <- inters + enable_event_logic() + } else { + vals$need_filter <- T + vals$filter_data <- T + } + }) + # dplyr::filter ARTS, DeepBGC, GECCO interception data + # and general dataframes to plot, if data filtering + # options are triggered + shiny::observeEvent( + { + dynamicInput() + to_debounce() + }, + ignoreInit = T, + priority = 4, + { + shiny::req(vals$data_upload_count >= 1) + inters <- vals$inters + if (vals$deep_data_input == TRUE) { + if (vals$need_filter == F) { + biocircos_deep <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) + vals$deep_data_filtered <- biocircos_deep + } else { + biocircos_deep <- vals$deep_data_filtered + } + if (vals$data_upload_count != 1) { + new_deep <- lapply(inters$deep, function(x) { + new_to <- x$to[x$to %in% biocircos_deep$Cluster] + new_from <- x$from[x$to %in% biocircos_deep$Cluster] + list(from = new_from, to = new_to) + }) + new_inters <- inters + update_list <- names(inters$deep) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$deep$to <- new_deep[[update_list[b]]]$from + new_inters[[update_list[b]]]$deep$from <- new_deep[[update_list[b]]]$to + } + new_inters$deep <- new_deep + vals$inters_filtered <- new_inters + inters <- new_inters + } + } + if (vals$gecco_data_input == TRUE) { + if (vals$need_filter == F) { + gecco_data <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) + vals$gecco_data_filtered <- gecco_data + } else { + gecco_data <- vals$gecco_data_filtered + } + if (vals$data_upload_count != 1) { + new_gecco <- lapply(inters$gecco, function(x) { + new_to <- x$to[x$to %in% gecco_data$Cluster] + new_from <- x$from[x$to %in% gecco_data$Cluster] + list(from = new_from, to = new_to) + }) + new_inters <- inters + update_list <- names(inters$gecco) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$gecco$to <- new_gecco[[update_list[b]]]$from + new_inters[[update_list[b]]]$gecco$from <- new_gecco[[update_list[b]]]$to + } + new_inters$gecco <- new_gecco + vals$inters_filtered <- new_inters + inters <- new_inters + } + } + if (vals$arts_data_input == TRUE) { + if (input$dup_choice != "All") { + vals$arts_data_filtered <- data.frame(vals$arts_data) %>% + dplyr::filter(Core == stringr::str_split(stringr::str_split(input$dup_choice, " ,")[[1]][[2]], "Core:")[[1]][[2]] | Core == "Not_core") + if (vals$data_upload_count != 1) { + new_arts <- lapply(inters$arts, function(x) { + new_to <- x$to[x$to %in% vals$arts_data_filtered$Cluster] + new_from <- x$from[x$to %in% vals$arts_data_filtered$Cluster] + list(from = new_from, to = new_to) + }) + new_inters <- inters + update_list <- names(inters$arts) + for (b in seq(1:length(update_list))) { + new_inters[[update_list[b]]]$arts$to <- new_arts[[update_list[b]]]$from + new_inters[[update_list[b]]]$arts$from <- new_arts[[update_list[b]]]$to + } + new_inters$arts <- new_arts + vals$inters_filtered <- new_inters + inters <- new_inters + } + } else { + vals$arts_data_filtered <- vals$arts_data + vals$inters_filtered <- inters + } + } + if (input$prism_supp == FALSE) { + inters$prism_supp <- NULL + for (name in names(inters)) { + inters[[name]][which(names(inters[[name]]) %in% c("prism_supp"))] <- NULL + } + } + if ((vals$gecco_data_input == F) & (vals$deep_data_input == F) & (vals$arts_data_input == F)) { + vals$inters_filtered <- inters + } + vals$need_filter <- F + vals$filter_data <- F + vals$can_plot_deep_ref <- T + enable_event_logic() + } + ) + # Compute the Biociros plot. Store information to plot later + shiny::observeEvent(biocircos_listen(), ignoreInit = T, priority = 3, { + shiny::req(vals$data_upload_count >= 2) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_biocircos == T) + ## source("src/biocircos_functions.R") + # BioCircos! + Biocircos_chromosomes <- list() + arcs_chromosomes <- c() + arcs_begin <- c() + arcs_end <- c() + arc_labels <- c() + arc_col <- c() + + if (is.null(vals$inters_filtered)) { + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } - # Combine labels with mapply to one list - link_labels <- mapply(function(x, y) paste(x, y, sep = " | "), label_1, label_2) - # Add links and labels to the track list for subsequent visualization - if ((input$label_color == T) & (length(chromosomes_start) > 0)) { - group_colors <- plyr::count(unlist(label_color)) - for (i in seq(1:dim(group_colors)[1])) { - subset <- unname(which(label_color %in% group_colors$x[i])) - tracklist <- tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], - link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], - link_pos_end_2[subset], - maxRadius = 0.85, labels = link_labels[subset], - displayLabel = FALSE, color = group_colors$x[i] + rename_data <- vals$rename_data + coloring_datatable <- vals$coloring_datatable + + index <- 1 + # browser() + for (upload in data_uploads) { + if (vals[[upload]] == T) { + # Store data in local variable + corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) + init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color, coloring_datatable) + # Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes <- init_data[[1]] + # Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- init_data[[2]] + # Add arcs begin positions. (Start column) + arcs_begin <- init_data[[3]] + # Stop position of arcs. + arcs_end <- init_data[[4]] + # Add Arcs labels. Can add only one label... + arc_labels <- init_data[[5]] + + arc_col <- init_data[[6]] + } + index <- index + 1 + } + # Add to tracklist. Then it can be populated with links + tracklist <- BioCircos::BioCircosArcTrack("myArcTrack", arcs_chromosomes, arcs_begin, arcs_end, + minRadius = 0.90, maxRadius = 0.97, labels = arc_labels, colors = arc_col ) - } - } else if ((input$label_color == F) & (length(chromosomes_start) > 0)) { - tracklist <- tracklist + BioCircos::BioCircosLinkTrack("myLinkTrack_master", chromosomes_start, link_pos_start, - link_pos_start_1, chromosomes_end, link_pos_end, - link_pos_end_2, - maxRadius = 0.85, labels = link_labels, - displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] - ) - } else { - shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration = NULL) - } + # Function to get interception between two matrices. Returns a list of two elements - IDs from first matrix and + # from second one. IDs are duplicated, if intercepted more than one time + + chromosomes_start <- c() + chromosomes_end <- c() + link_pos_start <- c() + link_pos_start_1 <- c() + link_pos_end <- c() + link_pos_end_2 <- c() + label_1 <- c() + label_2 <- c() + label_color <- c() + + # CALCULATIONS + # ----------------------------------------- + + + data_uploads_2 <- data_uploads + soft_2 <- soft_namings + soft_names_2 <- soft_names + data_to_use_2 <- data_to_use + index <- 1 + for (upload in data_uploads) { + data_uploads_2 <- data_uploads_2[-1] + soft_2 <- soft_2[-1] + soft_names_2 <- soft_names_2[-1] + data_to_use_2 <- data_to_use_2[-1] + index2 <- 1 + if (vals[[upload]] == T) { + for (upload2 in data_uploads_2) { + if ((vals[[upload2]] == T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { + output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) + chromosomes_start <- c(chromosomes_start, output[[3]]) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(chromosomes_end, output[[4]]) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(link_pos_start, output[[5]])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(link_pos_start_1, output[[6]])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(link_pos_end, output[[7]])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(link_pos_end_2, output[[8]])) + label_1 <- c(label_1, output[[9]]) + label_2 <- c(label_2, output[[10]]) + label_color <- c(label_color, output[[11]]) + } + index2 <- index2 + 1 + } + utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) + } + index <- index + 1 + } - vals$tracklist <- tracklist - vals$Biocircos_chromosomes <- Biocircos_chromosomes - }) - - shiny::observeEvent(deep_reference(), ignoreInit = T, { - shiny::req(vals$data_upload_count >= 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_deep_ref == T) - shiny::req(input$ref != "") - shiny::req(vals$data_upload_count >= 1) - - if (is.null(vals$inters_filtered)) { - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - ## source("src/deep_reference_functions.R") - # GENERATE DATA - index <- 1 - for (upload in data_uploads) { - if (vals[[upload]] == T) { - data <- vals[[data_to_use[index]]] - assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width)) - } - index <- index + 1 - } - lett <- rev(LETTERS)[1:9] - tooltip <- c( - "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", - "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p" - ) + # Combine labels with mapply to one list + link_labels <- mapply(function(x, y) paste(x, y, sep = " | "), label_1, label_2) + # Add links and labels to the track list for subsequent visualization + if ((input$label_color == T) & (length(chromosomes_start) > 0)) { + group_colors <- plyr::count(unlist(label_color)) + for (i in seq(1:dim(group_colors)[1])) { + subset <- unname(which(label_color %in% group_colors$x[i])) + tracklist <- tracklist + BioCircos::BioCircosLinkTrack(as.character(i), chromosomes_start[subset], link_pos_start[subset], + link_pos_start_1[subset], chromosomes_end[subset], link_pos_end[subset], + link_pos_end_2[subset], + maxRadius = 0.85, labels = link_labels[subset], + displayLabel = FALSE, color = group_colors$x[i] + ) + } + } else if ((input$label_color == F) & (length(chromosomes_start) > 0)) { + tracklist <- tracklist + BioCircos::BioCircosLinkTrack("myLinkTrack_master", chromosomes_start, link_pos_start, + link_pos_start_1, chromosomes_end, link_pos_end, + link_pos_end_2, + maxRadius = 0.85, labels = link_labels, + displayLabel = FALSE, color = coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] + ) + } else { + shiny::showNotification(paste("No interceptions are being made in the Biocircos plot. Please provide data with clusters that do have intercepting borders"), type = "warning", duration = NULL) + } + vals$tracklist <- tracklist + vals$Biocircos_chromosomes <- Biocircos_chromosomes + }) + shiny::observeEvent(deep_reference(), ignoreInit = T, { + shiny::req(vals$data_upload_count >= 1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_deep_ref == T) + shiny::req(input$ref != "") + shiny::req(vals$data_upload_count >= 1) - # MAKE COMPUTATIONS - sup_index <- 1 - soft_lttrs <- lett - rename_y_axis <- vals$rename_y_axis - rename_y_axis <- lapply(1:(length(soft_lttrs) - 1), function(x) { - soft_lttrs[x] <- soft_namings[x] - }) - names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] - for (upload in data_uploads) { - soft_lttr <- soft_lttrs[1] - soft_lttrs <- soft_lttrs[-1] - if (vals[[upload]] == T) { - soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = F, inters) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more, inters) - seg_ref <- seg_ref_g - - if (input$ref == soft_namings[sup_index]) { - shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))) > 0, "Reference data is empty, and so, insufficient for plotting. Please select another one")) - plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref, vals$rre_more)) - soft_let <- abbr[sup_index] - lettrs <- lett[2:length(lett)] - labels_1 <- list() - index <- 1 - for (i in data_uploads) { - if ((vals[[i]] == T) & (soft_names[index] != soft_major)) { - df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = T, inters) - seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = T, vals$rre_more, inters) - labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) - plot <- suppressWarnings(add_more_annot(seg_df, plot, soft_names, index, vals$rre_more)) + if (is.null(vals$inters_filtered)) { + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + ## source("src/deep_reference_functions.R") + # GENERATE DATA + index <- 1 + for (upload in data_uploads) { + if (vals[[upload]] == T) { + data <- vals[[data_to_use[index]]] + assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width)) } index <- index + 1 - } - plot <- plot + - ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("") + - ggplot2::xlab("Chromosome length") + - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("Annotations' comparison to the reference") - to_plot <- plotly::ggplotly(plot, tooltip = tooltip) - to_plot <- to_plot %>% - plotly::layout(legend = list( - font = list( - family = "sans-serif", - size = 12, - color = "#000" - ), - bordercolor = "#FFFFFF", - borderwidth = 2, - title = list(text = " Cluster Types ") - )) - } - seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) - vals[[soft_datafr[sup_index]]] <- seg_ref - } - sup_index <- sup_index + 1 - } - vals$rename_y_axis <- rename_y_axis - vals$deep_reference_to_plot <- to_plot - }) - - - ############################################################################ - ############################################################################ - ### ### - ### OUTPUT PLOTS ### - ### ### - ############################################################################ - ############################################################################ - - ## ---------------------------------------------------------------- - ## DeepBGC Comparison tab - - ## ---------------------------------------------------------------- - # Render barplot - mod_deepbgc_plots_server("deep_barplot_ui_1", vals = vals, score_a = vals$score_a, score_d = vals$score_d, score_c = vals$score_c) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - - ## ---------------------------------------------------------------- - ## GECCO Comparison tab - - ## ---------------------------------------------------------------- - # Render barplot - mod_gecco_plots_server("gecco_plots_ui_1", - vals = vals, score_average_gecco = vals$score_average_gecco, - score_cluster_gecco = vals$score_cluster_gecco - ) - ## --------------------------------------------------------------- - ## Annotation on chromosome plots' tab - - ## --------------------------------------------------------------- - - # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information - # For antismash and PRISM data showed only ID, Start, Stop, Type - mod_deep_reference_server("deep_reference_ui_1", vals = vals) - - mod_deep_reference_2_server("deep_reference_2_ui_1", vals = vals, data_uploads = data_uploads, data_to_use = data_to_use) - ## ---------------------------------------------------------------- - ## Biocircos plot tab - - ## --------------------------------------------------------------- - # Render Biocircos Plot for all-vs-all comparison - mod_biocircos_server("biocircos_ui_1", vals = vals) - ## --------------------------------------------------------------- - ## Summarize tab - - ## --------------------------------------------------------------- - # Render barplot with number plyr::count of interception for BGC IDs - mod_barplot_rank_server("barplot_rank_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) - - - # Render table with data - mod_group_table_server("group_table_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) - - # Download used datasets (as for BioCircos) - mod_download_server("download_ui_1") - - shiny::onSessionEnded(function() { - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { - file.remove(file_names) - } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { - file.remove(file_names) - } - } + } - shiny::stopApp() - }) + + lett <- rev(LETTERS)[1:9] + + tooltip <- c( + "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", + "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p" + ) + + + + + # MAKE COMPUTATIONS + sup_index <- 1 + soft_lttrs <- lett + rename_y_axis <- vals$rename_y_axis + rename_y_axis <- lapply(1:(length(soft_lttrs) - 1), function(x) { + soft_lttrs[x] <- soft_namings[x] + }) + names(rename_y_axis) <- soft_lttrs[-length(soft_lttrs)] + for (upload in data_uploads) { + soft_lttr <- soft_lttrs[1] + soft_lttrs <- soft_lttrs[-1] + if (vals[[upload]] == T) { + soft_major <- soft_names[sup_index] + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = F, inters) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more, inters) + seg_ref <- seg_ref_g + + if (input$ref == soft_namings[sup_index]) { + shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))) > 0, "Reference data is empty, and so, insufficient for plotting. Please select another one")) + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + + suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref, vals$rre_more)) + soft_let <- abbr[sup_index] + lettrs <- lett[2:length(lett)] + labels_1 <- list() + index <- 1 + for (i in data_uploads) { + if ((vals[[i]] == T) & (soft_names[index] != soft_major)) { + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = T, inters) + seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = T, vals$rre_more, inters) + labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) + plot <- suppressWarnings(add_more_annot(seg_df, plot, soft_names, index, vals$rre_more)) + } + index <- index + 1 + } + plot <- plot + + ggplot2::scale_y_discrete(labels = c("Z" = input$ref, unlist(labels_1))) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("") + + ggplot2::xlab("Chromosome length") + + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("Annotations' comparison to the reference") + to_plot <- plotly::ggplotly(plot, tooltip = tooltip) + to_plot <- to_plot %>% + plotly::layout(legend = list( + font = list( + family = "sans-serif", + size = 12, + color = "#000" + ), + bordercolor = "#FFFFFF", + borderwidth = 2, + title = list(text = " Cluster Types ") + )) + } + seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) + vals[[soft_datafr[sup_index]]] <- seg_ref + } + sup_index <- sup_index + 1 + } + vals$rename_y_axis <- rename_y_axis + vals$deep_reference_to_plot <- to_plot + }) + + + ############################################################################ + ############################################################################ + ### ### + ### OUTPUT PLOTS ### + ### ### + ############################################################################ + ############################################################################ + + ## ---------------------------------------------------------------- + ## DeepBGC Comparison tab - + ## ---------------------------------------------------------------- + # Render barplot + mod_deepbgc_plots_server("deep_barplot_ui_1", vals = vals, score_a = vals$score_a, score_d = vals$score_d, score_c = vals$score_c) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + + ## ---------------------------------------------------------------- + ## GECCO Comparison tab - + ## ---------------------------------------------------------------- + # Render barplot + mod_gecco_plots_server("gecco_plots_ui_1", + vals = vals, score_average_gecco = vals$score_average_gecco, + score_cluster_gecco = vals$score_cluster_gecco + ) + ## --------------------------------------------------------------- + ## Annotation on chromosome plots' tab - + ## --------------------------------------------------------------- + + # Render interactive plot, which shows bgcs of antismash, intercepted with chosen app. Also all app bgs. On hover shows all available information + # For antismash and PRISM data showed only ID, Start, Stop, Type + mod_deep_reference_server("deep_reference_ui_1", vals = vals) + + mod_deep_reference_2_server("deep_reference_2_ui_1", vals = vals, data_uploads = data_uploads, data_to_use = data_to_use) + ## ---------------------------------------------------------------- + ## Biocircos plot tab - + ## --------------------------------------------------------------- + # Render Biocircos Plot for all-vs-all comparison + mod_biocircos_server("biocircos_ui_1", vals = vals) + ## --------------------------------------------------------------- + ## Summarize tab - + ## --------------------------------------------------------------- + # Render barplot with number plyr::count of interception for BGC IDs + mod_barplot_rank_server("barplot_rank_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) + + + # Render table with data + mod_group_table_server("group_table_ui_1", vals = vals, data_uploads = data_uploads, soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) + + # Download used datasets (as for BioCircos) + mod_download_server("download_ui_1") + + shiny::onSessionEnded(function() { + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { + file.remove(file_names) + } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { + file.remove(file_names) + } + } + + shiny::stopApp() + }) } diff --git a/R/app_ui.R b/R/app_ui.R index 1b555e2..2355f26 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -5,296 +5,296 @@ #' @import shiny #' @noRd app_ui <- function(request) { - tagList( - # Leave this function for adding external resources - golem_add_external_resources(), - # Your application UI logic - shinydashboardPlus::dashboardPage( - shinydashboardPlus::dashboardHeader(title = "BGCViz"), - shinydashboardPlus::dashboardSidebar( - width = 350, - shinydashboard::sidebarMenu( - id = "menu_items", - style = "white-space: normal;", - shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), - shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), - shinydashboard::menuItemOutput("deep_sidemenu_out"), - shinydashboard::menuItemOutput("gecco_sidemenu_out"), - shinydashboard::menuItemOutput("anno_sidemenu_out"), - shinydashboard::menuItemOutput("biocircos_sidemenu_out"), - shinydashboard::menuItemOutput("summarize_sidemenu_out"), - shinydashboard::menuItem( - tabName = "restore_boxes", - actionButton("restore_box", "Restore all boxes", class = "bg-success") - ) - ) - ), - shinydashboard::dashboardBody( - tags$head( - tags$style(HTML(".main-sidebar { font-size: 15px; }")) # change the font size to 20 - ), - shinyjs::useShinyjs(), - shinydisconnect::disconnectMessage( - text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", - refresh = "Refresh", - background = "#FFFFFF", - colour = "#444444", - refreshColour = "#337AB7", - overlayColour = "#000000", - overlayOpacity = 0.6, - width = 450, - top = 50, - size = 22, - css = "" - ), - shinydashboard::tabItems( - shinydashboard::tabItem( - tabName = "deep_sidemenu", - mod_deepbgc_plots_ui("deep_barplot_ui_1"), - sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), - sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) - ), - shinydashboard::tabItem( - tabName = "gecco_sidemenu", - mod_gecco_plots_ui("gecco_plots_ui_1"), - sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), - sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) - ), - shinydashboard::tabItem( - tabName = "anno_sidemenu", - shiny::fluidRow( - tags$div( - id = "anno_data1", - shiny::column( - width = 12, - mod_deep_reference_2_ui("deep_reference_2_ui_1"), - mod_deep_reference_ui("deep_reference_ui_1") - ) - ) - ), - sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), - sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) - ), - shinydashboard::tabItem( - tabName = "biocircos_sidemenu", - mod_biocircos_ui("biocircos_ui_1"), - sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), - sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) - ), - shinydashboard::tabItem( - tabName = "summarize_sidemenu", - shiny::fluidRow( - tags$div( - id = "summarize_data1", - mod_barplot_rank_ui("barplot_rank_ui_1"), - mod_group_table_ui("group_table_ui_1") - ) - ), - sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) - ), - shinydashboard::tabItem( - tabName = "uploaddata_sidemenu", - shiny::fluidRow( - tags$div( - id = "upload_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Upload Antismash data", - id = "upload_anti_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("anti_data", - "Upload Antismash data", - accept = list(".csv", ".json") - ) - ) - ), - div( - id = "id2", - shinydashboardPlus::box( - title = "Upload PRISM data", - id = "upload_prism_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("prism_data", - "Upload PRISM data", - accept = list(".csv", ".json") + tagList( + # Leave this function for adding external resources + golem_add_external_resources(), + # Your application UI logic + shinydashboardPlus::dashboardPage( + shinydashboardPlus::dashboardHeader(title = "BGCViz"), + shinydashboardPlus::dashboardSidebar( + width = 350, + shinydashboard::sidebarMenu( + id = "menu_items", + style = "white-space: normal;", + shinydashboard::menuItem("Upload data", tabName = "uploaddata_sidemenu", icon = icon("fas fa-upload")), + shinydashboard::menuItem("Global options", tabName = "options_sidemenu", icon = icon("fas fa-cogs")), + shinydashboard::menuItemOutput("deep_sidemenu_out"), + shinydashboard::menuItemOutput("gecco_sidemenu_out"), + shinydashboard::menuItemOutput("anno_sidemenu_out"), + shinydashboard::menuItemOutput("biocircos_sidemenu_out"), + shinydashboard::menuItemOutput("summarize_sidemenu_out"), + shinydashboard::menuItem( + tabName = "restore_boxes", + actionButton("restore_box", "Restore all boxes", class = "bg-success") ) - ) - ), - div( - id = "id3", - shinydashboardPlus::box( - title = "Upload SEMPI 2.0 data", - id = "upload_sempi_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("sempi_data", - "Upload SEMPI 2.0 data", - accept = list(".csv", ".zip") - ) - ) - ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Upload DeepBGC data", - id = "upload_deep_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("deep_data", - "Upload DeepBGC data", - accept = ".tsv" - ) - ) ) - ) ), - shiny::fluidRow( - tags$div( - id = "upload_data2", - div( - id = "id1", - shinydashboardPlus::box( - title = "Upload Gecco data", - id = "upload_gecco_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("gecco_data", - "Upload Gecco data", - accept = ".tsv" - ) - ) + shinydashboard::dashboardBody( + tags$head( + tags$style(HTML(".main-sidebar { font-size: 15px; }")) # change the font size to 20 ), - div( - id = "id2", - shinydashboardPlus::box( - title = "Upload RRE-Finder data", - id = "upload_rre_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput( - "rre_data", - "Upload RRE-Finder data" - ) - ) - ), - div( - id = "id3", - shinydashboardPlus::box( - title = "Upload ARTS data", - id = "upload_arts_box", - collapsible = TRUE, - closable = TRUE, - shiny::fileInput("arts_data", - "Upload ARTS data", - accept = list(".csv", ".zip") - ) - ) + shinyjs::useShinyjs(), + shinydisconnect::disconnectMessage( + text = "An error occurred. Please refresh the page and try again. Also, if error persists, then you are welcome to create an issue at https://github.com/ostash-group/BGCViz/issues (:", + refresh = "Refresh", + background = "#FFFFFF", + colour = "#444444", + refreshColour = "#337AB7", + overlayColour = "#000000", + overlayOpacity = 0.6, + width = 450, + top = 50, + size = 22, + css = "" ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Use Example data", - id = "use_example_data_box", - collapsible = TRUE, - closable = TRUE, - shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), - shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), - shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), - shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), - shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), - shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), - shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), - shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) - ) - ) - ) - ), - sortable::sortable_js("upload_data1", options = sortable::sortable_options(swap = TRUE, group = "upload_data")), - sortable::sortable_js("upload_data2", options = sortable::sortable_options(swap = TRUE, group = "upload_data")) - ), - shinydashboard::tabItem( - tabName = "options_sidemenu", - shiny::fluidRow( - shiny::column( - width = 6, - tags$div( - id = "options_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Rename", - id = "rename_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), - shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), - shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), - shiny::fileInput("rename_data", - "Upload renaming and coloring scheme", - accept = ".csv" - ), - shiny::actionButton("rename", "Rename"), - shiny::actionButton("reset_name", "Reset") + shinydashboard::tabItems( + shinydashboard::tabItem( + tabName = "deep_sidemenu", + mod_deepbgc_plots_ui("deep_barplot_ui_1"), + sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), + sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) + ), + shinydashboard::tabItem( + tabName = "gecco_sidemenu", + mod_gecco_plots_ui("gecco_plots_ui_1"), + sortable::sortable_js("gecco_data1", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")), + sortable::sortable_js("gecco_data2", options = sortable::sortable_options(swap = TRUE, group = "gecco_data")) + ), + shinydashboard::tabItem( + tabName = "anno_sidemenu", + shiny::fluidRow( + tags$div( + id = "anno_data1", + shiny::column( + width = 12, + mod_deep_reference_2_ui("deep_reference_2_ui_1"), + mod_deep_reference_ui("deep_reference_ui_1") + ) + ) + ), + sortable::sortable_js("anno_data1", options = sortable::sortable_options(swap = TRUE, group = "anno_data")), + sortable::sortable_js("anno_data2", options = sortable::sortable_options(swap = TRUE, group = "anno_data")) + ), + shinydashboard::tabItem( + tabName = "biocircos_sidemenu", + mod_biocircos_ui("biocircos_ui_1"), + sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), + sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) + ), + shinydashboard::tabItem( + tabName = "summarize_sidemenu", + shiny::fluidRow( + tags$div( + id = "summarize_data1", + mod_barplot_rank_ui("barplot_rank_ui_1"), + mod_group_table_ui("group_table_ui_1") + ) + ), + sortable::sortable_js("summarize_data1", options = sortable::sortable_options(swap = TRUE)) + ), + shinydashboard::tabItem( + tabName = "uploaddata_sidemenu", + shiny::fluidRow( + tags$div( + id = "upload_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Upload Antismash data", + id = "upload_anti_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("anti_data", + "Upload Antismash data", + accept = list(".csv", ".json") + ) + ) + ), + div( + id = "id2", + shinydashboardPlus::box( + title = "Upload PRISM data", + id = "upload_prism_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("prism_data", + "Upload PRISM data", + accept = list(".csv", ".json") + ) + ) + ), + div( + id = "id3", + shinydashboardPlus::box( + title = "Upload SEMPI 2.0 data", + id = "upload_sempi_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("sempi_data", + "Upload SEMPI 2.0 data", + accept = list(".csv", ".zip") + ) + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Upload DeepBGC data", + id = "upload_deep_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("deep_data", + "Upload DeepBGC data", + accept = ".tsv" + ) + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "upload_data2", + div( + id = "id1", + shinydashboardPlus::box( + title = "Upload Gecco data", + id = "upload_gecco_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("gecco_data", + "Upload Gecco data", + accept = ".tsv" + ) + ) + ), + div( + id = "id2", + shinydashboardPlus::box( + title = "Upload RRE-Finder data", + id = "upload_rre_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput( + "rre_data", + "Upload RRE-Finder data" + ) + ) + ), + div( + id = "id3", + shinydashboardPlus::box( + title = "Upload ARTS data", + id = "upload_arts_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("arts_data", + "Upload ARTS data", + accept = list(".csv", ".zip") + ) + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Use Example data", + id = "use_example_data_box", + collapsible = TRUE, + closable = TRUE, + shiny::actionButton("anti_sco", "Use Antismash example data from S.coelicolor"), + shiny::actionButton("prism_sco", "Use PRISM example data from S.coelicolor"), + shiny::actionButton("sempi_sco", "Use SEMPI example data from S.coelicolor"), + shiny::actionButton("deep_sco", "Use DeepBGC example data from S.coelicolor"), + shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), + shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), + shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) + ) + ) + ) + ), + sortable::sortable_js("upload_data1", options = sortable::sortable_options(swap = TRUE, group = "upload_data")), + sortable::sortable_js("upload_data2", options = sortable::sortable_options(swap = TRUE, group = "upload_data")) + ), + shinydashboard::tabItem( + tabName = "options_sidemenu", + shiny::fluidRow( + shiny::column( + width = 6, + tags$div( + id = "options_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Rename", + id = "rename_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), + shiny::checkboxInput("prism_hybrid", "Visualize PRISM BGC with several types as 'Hybrid'"), + shiny::checkboxInput("sempi_hybrid", "Visualize SEMPI BGC with several types as 'Hybrid'"), + shiny::fileInput("rename_data", + "Upload renaming and coloring scheme", + accept = ".csv" + ), + shiny::actionButton("rename", "Rename"), + shiny::actionButton("reset_name", "Reset") + ) + ), + div( + id = "id2", + shiny::uiOutput("deep_filter_box") + ) + ) + ), + shiny::column( + width = 6, + tags$div( + id = "options_data2", + div( + id = "id3", + shiny::uiOutput("gecco_filter_box") + ), + div( + id = "id5", + shinydashboardPlus::box( + title = "Improve global visualization", + id = "improve_visualization_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), + shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), + shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), + shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") + ) + ), + div( + id = "id4", + shinydashboardPlus::box( + title = "Prism supplement + ARTS options", + id = "prism_supplement_arts_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), + shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", + choices = c("All"), + selected = "All" + ) + ) + ), + mod_download_ui("download_ui_1") + ) + ) + ), + sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE, group = "options_data")), + sortable::sortable_js("options_data2", options = sortable::sortable_options(swap = TRUE, group = "options_data")) ) - ), - div( - id = "id2", - shiny::uiOutput("deep_filter_box") - ) ) - ), - shiny::column( - width = 6, - tags$div( - id = "options_data2", - div( - id = "id3", - shiny::uiOutput("gecco_filter_box") - ), - div( - id = "id5", - shinydashboardPlus::box( - title = "Improve global visualization", - id = "improve_visualization_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("rre_width", "Add thickness to RRE results visualization"), - shiny::checkboxInput("prism_supp_data_input_width", "Add thickness to PRISM resistance + regulatory genes results visualization"), - shiny::checkboxInput("arts_width", "Add thickness to ARTS results visualization"), - shiny::checkboxInput("sempi_width", "Add thickness to SEMPI results visualization") - ) - ), - div( - id = "id4", - shinydashboardPlus::box( - title = "Prism supplement + ARTS options", - id = "prism_supplement_arts_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::checkboxInput("prism_supp", "Visualize PRISM resistance and regulatory genes"), - shiny::selectInput("dup_choice", "Choose duplicated core gene to plot only it", - choices = c("All"), - selected = "All" - ) - ) - ), - mod_download_ui("download_ui_1") - ) - ) - ), - sortable::sortable_js("options_data1", options = sortable::sortable_options(swap = TRUE, group = "options_data")), - sortable::sortable_js("options_data2", options = sortable::sortable_options(swap = TRUE, group = "options_data")) - ) + ) ) - ) ) - ) } #' Add external Resources to the Application @@ -306,17 +306,17 @@ app_ui <- function(request) { #' @importFrom golem add_resource_path activate_js favicon bundle_resources #' @noRd golem_add_external_resources <- function() { - add_resource_path( - "www", app_sys("app/www") - ) + add_resource_path( + "www", app_sys("app/www") + ) - tags$head( - favicon(), - bundle_resources( - path = app_sys("app/www"), - app_title = "BGCViz" + tags$head( + favicon(), + bundle_resources( + path = app_sys("app/www"), + app_title = "BGCViz" + ) + # Add here other external resources + # for example, you can add shinyalert::useShinyalert() ) - # Add here other external resources - # for example, you can add shinyalert::useShinyalert() - ) } diff --git a/R/fct_biocircos.R b/R/fct_biocircos.R index 4bad000..7b54c64 100644 --- a/R/fct_biocircos.R +++ b/R/fct_biocircos.R @@ -6,29 +6,29 @@ #' #' @noRd initialize_biocircos <- function(biocircos_anti, name, Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, chr_len, biocircos_color, coloring_datatable) { - # Make chromosome list for Biocircos plot. Use chr_len as an input - Biocircos_chromosomes[[name]] <- chr_len - # Add arcs. Quantity of arcs is length of dataframes - arcs_chromosomes <- c(arcs_chromosomes, rep(name, length(biocircos_anti$Cluster))) - # Add arcs begin positions. (Start column) - arcs_begin <- c(arcs_begin, biocircos_anti$Start) - # Stop position of arcs. - arcs_end <- c(arcs_end, biocircos_anti$Stop) - # Add Arcs labels. Can add only one label... - arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((biocircos_color == T)) { - arc_colors <- sapply(biocircos_anti$Type2, function(x) { - if (x %in% coloring_datatable$x$data$Name) { - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] - } else { - coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] - } - }) - } else { - arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] - } - arc_col <- c(arc_col, as.character(arc_colors)) - return(list(Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col)) + # Make chromosome list for Biocircos plot. Use chr_len as an input + Biocircos_chromosomes[[name]] <- chr_len + # Add arcs. Quantity of arcs is length of dataframes + arcs_chromosomes <- c(arcs_chromosomes, rep(name, length(biocircos_anti$Cluster))) + # Add arcs begin positions. (Start column) + arcs_begin <- c(arcs_begin, biocircos_anti$Start) + # Stop position of arcs. + arcs_end <- c(arcs_end, biocircos_anti$Stop) + # Add Arcs labels. Can add only one label... + arc_labels <- c(arc_labels, biocircos_anti$Type) + if ((biocircos_color == T)) { + arc_colors <- sapply(biocircos_anti$Type2, function(x) { + if (x %in% coloring_datatable$x$data$Name) { + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] + } else { + coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] + } + }) + } else { + arc_colors <- coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"] + } + arc_col <- c(arc_col, as.character(arc_colors)) + return(list(Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col)) } #' add_biocircos_data @@ -40,90 +40,90 @@ initialize_biocircos <- function(biocircos_anti, name, Biocircos_chromosomes, ar #' @noRd add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_label, data2_label, rename_data, class, ref_col_biocircos, coloring_datatable) { - inter_s_rre_n <- data1_inter - inter_rre_s <- data2_inter - # Add link start. Just populate certain chromosome name times the lenght of interception - chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) - # Add link end. Just populate second output from the vectors, used above. - chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) - # Add links start positions as a start from dataframe. This vector is for chromosome start - link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s, data2$Cluster)])) - # Add links start positions as a start from dataframe. For chromosome start variable - link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s, data2$Cluster)])) - # Add links start position for a chromosome stop variable - link_pos_end <- as.numeric(c(data1$Start[match(inter_s_rre_n, data1$Cluster)])) - # Add links start position for a chromosome stop position - link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n, data1$Cluster)])) - label_1 <- c(sapply(inter_rre_s, function(x) { - x <- paste(paste0(data2_label, ":"), x, ",", data2$Type[data2$Cluster == x]) - })) - label_2 <- c(sapply(inter_s_rre_n, function(x) { - x <- paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x]) - })) - # browser() - if (!is.null(inter_rre_s)) { - if (class == "P") { - subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } else { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) - } - }))) - if (length(label_color) != 0) { - for (t in seq(1:length(label_color))) { - if (!is.null(subset_vec[t])) { - if (subset_vec[t] == F) { - label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + inter_s_rre_n <- data1_inter + inter_rre_s <- data2_inter + # Add link start. Just populate certain chromosome name times the lenght of interception + chromosomes_start <- c(rep(data2_label, length(inter_rre_s))) + # Add link end. Just populate second output from the vectors, used above. + chromosomes_end <- c(rep(data1_label, length(inter_s_rre_n))) + # Add links start positions as a start from dataframe. This vector is for chromosome start + link_pos_start <- as.numeric(c(data2$Start[match(inter_rre_s, data2$Cluster)])) + # Add links start positions as a start from dataframe. For chromosome start variable + link_pos_start_1 <- as.numeric(c(data2$Stop[match(inter_rre_s, data2$Cluster)])) + # Add links start position for a chromosome stop variable + link_pos_end <- as.numeric(c(data1$Start[match(inter_s_rre_n, data1$Cluster)])) + # Add links start position for a chromosome stop position + link_pos_end_2 <- as.numeric(c(data1$Stop[match(inter_s_rre_n, data1$Cluster)])) + label_1 <- c(sapply(inter_rre_s, function(x) { + x <- paste(paste0(data2_label, ":"), x, ",", data2$Type[data2$Cluster == x]) + })) + label_2 <- c(sapply(inter_s_rre_n, function(x) { + x <- paste(paste0(data1_label, ":"), x, ",", data1$Type[data1$Cluster == x]) + })) + # browser() + if (!is.null(inter_rre_s)) { + if (class == "P") { + subset_vec <- data2$Type2[match(inter_rre_s, data2$Cluster)] == data1$Type2[match(inter_s_rre_n, data1$Cluster)] + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + }))) + if (length(label_color) != 0) { + for (t in seq(1:length(label_color))) { + if (!is.null(subset_vec[t])) { + if (subset_vec[t] == F) { + label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + } + } } - } + } else if (class == "H") { + if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))) { + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + }))) + } else { + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + }))) + } + } else if (class == "R") { + if (data2_label == ref_col_biocircos) { + label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + }))) + } else if (data1_label == ref_col_biocircos) { + label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { + if (x %in% coloring_datatable$x$data$Name) { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) + } else { + as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) + } + }))) + } else { + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) + } + } else { + label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) } - } - } else if (class == "H") { - if (grep(paste0("^", data1_label, "$"), coloring_datatable$x$data$Hierarchy) < (grep(paste0("^", data2_label, "$"), coloring_datatable$x$data$Hierarchy))) { - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } else { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) - } - }))) - } else { - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } else { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) - } - }))) - } - } else if (class == "R") { - if (data2_label == ref_col_biocircos) { - label_color <- as.character(c(sapply(data1$Type2[match(inter_s_rre_n, data1$Cluster)], function(x) { - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } else { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) - } - }))) - } else if (data1_label == ref_col_biocircos) { - label_color <- as.character(c(sapply(data2$Type2[match(inter_rre_s, data2$Cluster)], function(x) { - if (x %in% coloring_datatable$x$data$Name) { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x]) - } else { - as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) - } - }))) - } else { - label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) - } - } else { - label_color <- as.character(rep(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"], length(chromosomes_start))) } - } - return(list( - inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color - )) + return(list( + inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, + link_pos_end_2, label_1, label_2, label_color + )) } diff --git a/R/fct_deep_reference.R b/R/fct_deep_reference.R index ed5a0f9..c83a0f9 100644 --- a/R/fct_deep_reference.R +++ b/R/fct_deep_reference.R @@ -8,25 +8,25 @@ #' #' @noRd simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = T, inters) { - if (inter == T) { - data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] - } else { - data <- df - } + if (inter == T) { + data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] + } else { + data <- df + } - seg_df <- data.frame( - x = as.numeric(data$Start), - y = rep(letter, length(data$Cluster)), - xend = as.numeric(data$Stop), - yend = rep(letter, length(data$Cluster)), - Type = as.factor(data$Type), - Type2 = as.factor(data$Type2), - Software = rep(software, length(data$Cluster)), - ID = data$Cluster, - Start = data$Start, - Stop = data$Stop - ) - return(seg_df) + seg_df <- data.frame( + x = as.numeric(data$Start), + y = rep(letter, length(data$Cluster)), + xend = as.numeric(data$Stop), + yend = rep(letter, length(data$Cluster)), + Type = as.factor(data$Type), + Type2 = as.factor(data$Type2), + Software = rep(software, length(data$Cluster)), + ID = data$Cluster, + Start = data$Start, + Stop = data$Stop + ) + return(seg_df) } @@ -38,19 +38,19 @@ simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = T, #' #' @noRd add_arts <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] - } else { - subset_df <- df - } - seg_df$Hit <- subset_df$Hit - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Core <- subset_df$Core - seg_df$Count <- subset_df$Count - seg_df$E_value <- subset_df$Evalue - seg_df$Bitscore <- subset_df$Bitscore - seg_df$Model <- subset_df$Model - return(seg_df) + if (inter == T) { + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] + } else { + subset_df <- df + } + seg_df$Hit <- subset_df$Hit + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Core <- subset_df$Core + seg_df$Count <- subset_df$Count + seg_df$E_value <- subset_df$Evalue + seg_df$Bitscore <- subset_df$Bitscore + seg_df$Model <- subset_df$Model + return(seg_df) } #' add_prism_supp #' @@ -60,16 +60,16 @@ add_arts <- function(seg_df, soft_namings, df, inter = T, inters) { #' #' @noRd add_prism_supp <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] - } else { - subset_df <- df - } - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score <- subset_df$Score - seg_df$Name <- subset_df$Name - seg_df$Full_name <- subset_df$Full_name - return(seg_df) + if (inter == T) { + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] + } else { + subset_df <- df + } + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score <- subset_df$Score + seg_df$Name <- subset_df$Name + seg_df$Full_name <- subset_df$Full_name + return(seg_df) } #' add_deep #' @@ -79,15 +79,15 @@ add_prism_supp <- function(seg_df, soft_namings, df, inter = T, inters) { #' #' @noRd add_deep <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] - } else { - subset_df <- df - } - seg_df$num_domains <- subset_df$num_domains - seg_df$deepbgc_score <- subset_df$deepbgc_score - seg_df$activity <- subset_df$product_activity - return(seg_df) + if (inter == T) { + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] + } else { + subset_df <- df + } + seg_df$num_domains <- subset_df$num_domains + seg_df$deepbgc_score <- subset_df$deepbgc_score + seg_df$activity <- subset_df$product_activity + return(seg_df) } #' add_rre #' @@ -99,26 +99,26 @@ add_deep <- function(seg_df, soft_namings, df, inter = T, inters) { #' #' @noRd add_rre <- function(seg_df, soft_namings, df, inter = T, rre_more, inters) { - if (inter == T) { - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] - } else { - subset_df <- df - } - if (rre_more == T) { - seg_df$xend <- as.numeric(subset_df$Stop) - seg_df$Score <- subset_df$Score - seg_df$Stop <- subset_df$Stop - seg_df$E_value <- subset_df$E.value - seg_df$P_value <- subset_df$P.value - seg_df$RRE_start <- subset_df$RRE.start - seg_df$RRE_stop <- subset_df$RRE.end - seg_df$Probability <- subset_df$Probability - } else { - seg_df$xend <- subset_df$Stop - seg_df$E_value <- subset_df$E.value - } + if (inter == T) { + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] + } else { + subset_df <- df + } + if (rre_more == T) { + seg_df$xend <- as.numeric(subset_df$Stop) + seg_df$Score <- subset_df$Score + seg_df$Stop <- subset_df$Stop + seg_df$E_value <- subset_df$E.value + seg_df$P_value <- subset_df$P.value + seg_df$RRE_start <- subset_df$RRE.start + seg_df$RRE_stop <- subset_df$RRE.end + seg_df$Probability <- subset_df$Probability + } else { + seg_df$xend <- subset_df$Stop + seg_df$E_value <- subset_df$E.value + } - return(seg_df) + return(seg_df) } #' add_gecco #' @@ -128,16 +128,16 @@ add_rre <- function(seg_df, soft_namings, df, inter = T, rre_more, inters) { #' #' @noRd add_gecco <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { - subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] - } else { - subset_df <- df - } - seg_df$Num_proteins <- subset_df$num_prot - seg_df$Num_domains <- subset_df$num_domains - seg_df$Average_p <- subset_df$average_p - seg_df$Max_p <- subset_df$max_p - return(seg_df) + if (inter == T) { + subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] + } else { + subset_df <- df + } + seg_df$Num_proteins <- subset_df$num_prot + seg_df$Num_domains <- subset_df$num_domains + seg_df$Average_p <- subset_df$average_p + seg_df$Max_p <- subset_df$max_p + return(seg_df) } #' define_spec_seg_df @@ -148,19 +148,19 @@ add_gecco <- function(seg_df, soft_namings, df, inter = T, inters) { #' #' @noRd define_spec_seg_df <- function(soft_names, index, seg_df, soft_major, df, inter = T, rre_more, inters) { - if (inter == F) { - soft_major <- "Not applicable" - } - if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)) { - seg_df <- add_prism_supp(seg_df, soft_major, df, inter, inters) - } else if ((soft_names[index] == "arts") & (soft_names[index] != soft_major)) { - seg_df <- add_arts(seg_df, soft_major, df, inter, inters) - } else if ((soft_names[index] == "deep") & (soft_names[index] != soft_major)) { - seg_df <- add_deep(seg_df, soft_major, df, inter, inters) - } else if ((soft_names[index] == "gecco") & (soft_names[index] != soft_major)) { - seg_df <- add_gecco(seg_df, soft_major, df, inter, inters) - } else if ((soft_names[index] == "rre") & (soft_names[index] != soft_major)) { - seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more, inters) - } - return(seg_df) + if (inter == F) { + soft_major <- "Not applicable" + } + if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)) { + seg_df <- add_prism_supp(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "arts") & (soft_names[index] != soft_major)) { + seg_df <- add_arts(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "deep") & (soft_names[index] != soft_major)) { + seg_df <- add_deep(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "gecco") & (soft_names[index] != soft_major)) { + seg_df <- add_gecco(seg_df, soft_major, df, inter, inters) + } else if ((soft_names[index] == "rre") & (soft_names[index] != soft_major)) { + seg_df <- add_rre(seg_df, soft_major, df, inter, rre_more, inters) + } + return(seg_df) } diff --git a/R/fct_filtering.R b/R/fct_filtering.R index a2ab10b..7ad8e37 100644 --- a/R/fct_filtering.R +++ b/R/fct_filtering.R @@ -6,57 +6,57 @@ #' #' @noRd filter_deepbgc <- function(deep_data, cluster_type, score_a_input, score_c_input, score_d_input, domains_filter, biodomain_filter, gene_filter) { - # Silence R CMD note - alkaloid <- nrps <- other <- - pks <- ripp <- saccharide <- - terpene <- score <- Cluster_type <- - num_domains <- num_bio_domains <- - num_proteins <- NULL - score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic", "inhibitor", "antifungal")), 1, function(x) max(x)) - score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")), 1, function(x) max(x)) - score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) - if (is.null(cluster_type)) { - deep_data_chromo <- deep_data %>% - dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo %>% - dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Cluster_type, "under_threshold")) - # Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo %>% - dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter( - score_a >= 50 / 100, score_c >= 50 / 100, - score_d >= 50 / 100, num_domains >= 5, - num_bio_domains >= 1, num_proteins >= 1 - ) - } else { - deep_data_chromo <- deep_data %>% - dplyr::mutate(score = apply(deep_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) - # Cluster_type column. Here extract colnames, and assign max value to a new column - deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] - # If max score is under_threshold, print "under_threshold" - deep_data_chromo <- deep_data_chromo %>% - dplyr::mutate(Cluster_type = ifelse(score > as.numeric(cluster_type) / 100, Cluster_type, "under_threshold")) - # Finally store deepbgc data in plotting variable. Do final scores processing - biocircos_deep <- deep_data_chromo %>% - dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% - dplyr::filter( - score_a >= as.numeric(score_a_input) / 100, score_c >= as.numeric(score_c_input) / 100, - score_d >= as.numeric(score_d_input) / 100, num_domains >= domains_filter, - num_bio_domains >= biodomain_filter, num_proteins >= gene_filter - ) - } + # Silence R CMD note + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Cluster_type <- + num_domains <- num_bio_domains <- + num_proteins <- NULL + score_a <- apply(deep_data %>% dplyr::select(c("antibacterial", "cytotoxic", "inhibitor", "antifungal")), 1, function(x) max(x)) + score_d <- apply(deep_data %>% dplyr::select(c("deepbgc_score")), 1, function(x) max(x)) + score_c <- apply(deep_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) + if (is.null(cluster_type)) { + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo %>% + dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Cluster_type, "under_threshold")) + # Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo %>% + dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter( + score_a >= 50 / 100, score_c >= 50 / 100, + score_d >= 50 / 100, num_domains >= 5, + num_bio_domains >= 1, num_proteins >= 1 + ) + } else { + deep_data_chromo <- deep_data %>% + dplyr::mutate(score = apply(deep_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) + # Cluster_type column. Here extract colnames, and assign max value to a new column + deep_data_chromo$Cluster_type <- colnames(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene))[apply(deep_data_chromo %>% dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, which.max)] + # If max score is under_threshold, print "under_threshold" + deep_data_chromo <- deep_data_chromo %>% + dplyr::mutate(Cluster_type = ifelse(score > as.numeric(cluster_type) / 100, Cluster_type, "under_threshold")) + # Finally store deepbgc data in plotting variable. Do final scores processing + biocircos_deep <- deep_data_chromo %>% + dplyr::mutate(product_class = Cluster_type, score_a = score_a, score_d = score_d, score_c = score_c) %>% + dplyr::filter( + score_a >= as.numeric(score_a_input) / 100, score_c >= as.numeric(score_c_input) / 100, + score_d >= as.numeric(score_d_input) / 100, num_domains >= domains_filter, + num_bio_domains >= biodomain_filter, num_proteins >= gene_filter + ) + } - biocircos_deep["Start"] <- biocircos_deep$nucl_start - biocircos_deep["Stop"] <- biocircos_deep$nucl_end - biocircos_deep["Type"] <- biocircos_deep$product_class - biocircos_deep["Type2"] <- biocircos_deep$product_class - biocircos_deep["Cluster"] <- biocircos_deep$ID - return(biocircos_deep) + biocircos_deep["Start"] <- biocircos_deep$nucl_start + biocircos_deep["Stop"] <- biocircos_deep$nucl_end + biocircos_deep["Type"] <- biocircos_deep$product_class + biocircos_deep["Type2"] <- biocircos_deep$product_class + biocircos_deep["Cluster"] <- biocircos_deep$ID + return(biocircos_deep) } #' filter_gecco #' @@ -66,34 +66,34 @@ filter_deepbgc <- function(deep_data, cluster_type, score_a_input, score_c_input #' #' @noRd filter_gecco <- function(gecco_data, score_cluster_gecco, score_average_gecco, domains_filter_gecco, prot_filter_gecco) { - # Silence R CMD note - alkaloid <- nrps <- other <- - pks <- ripp <- saccharide <- - terpene <- score <- Type2 <- - Cluster_type <- score_a <- score_c <- - num_domains <- num_prot <- NULL - score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")), 1, function(x) max(x)) - score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) - if (is.null(score_cluster_gecco)) { - gecco_data <- gecco_data %>% - dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Type2, "under_threshold")) %>% - dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter( - score_a >= 50 / 100, score_c >= 50 / 100, - num_domains >= 1, num_prot >= 1 - ) - } else { - gecco_data <- gecco_data %>% - dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% - dplyr::mutate(Cluster_type = ifelse(score > as.numeric(score_cluster_gecco) / 100, Type2, "under_threshold")) %>% - dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% - dplyr::filter( - score_a >= as.numeric(score_average_gecco) / 100, score_c >= as.numeric(score_cluster_gecco) / 100, - num_domains >= domains_filter_gecco, num_prot >= prot_filter_gecco - ) - } - return(gecco_data) + # Silence R CMD note + alkaloid <- nrps <- other <- + pks <- ripp <- saccharide <- + terpene <- score <- Type2 <- + Cluster_type <- score_a <- score_c <- + num_domains <- num_prot <- NULL + score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")), 1, function(x) max(x)) + score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) + if (is.null(score_cluster_gecco)) { + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Type2, "under_threshold")) %>% + dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter( + score_a >= 50 / 100, score_c >= 50 / 100, + num_domains >= 1, num_prot >= 1 + ) + } else { + gecco_data <- gecco_data %>% + dplyr::mutate(score = apply(gecco_data %>% + dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::mutate(Cluster_type = ifelse(score > as.numeric(score_cluster_gecco) / 100, Type2, "under_threshold")) %>% + dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% + dplyr::filter( + score_a >= as.numeric(score_average_gecco) / 100, score_c >= as.numeric(score_cluster_gecco) / 100, + num_domains >= domains_filter_gecco, num_prot >= prot_filter_gecco + ) + } + return(gecco_data) } diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index d1ab8bf..7105f23 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -7,36 +7,36 @@ #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' @examples +#' @examples #' \dontrun{ #' sempi_to_csv() #' } #' @export sempi_to_csv <- function(project_archive, write_to = getwd()) { - trackid <- NULL # Silence R CMD note - utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) - fl <- paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB/Tracks.db") - conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) - - data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") - RSQLite::dbDisconnect(conn) - unlink(paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB"), recursive = T) - data <- data %>% - dplyr::filter(trackid == 6) - - types <- sapply(data$name, function(x) { - tmp <- stringr::str_trim(x) - tmp <- gsub(", ", "", tmp) - gsub(" ", "__", tmp) - }) - - sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) - colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") - sempi_data$Cluster <- as.numeric(sempi_data$Cluster) - sempi_data$Start <- as.numeric(sempi_data$Start) - sempi_data$Stop <- as.numeric(sempi_data$Stop) - sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) - utils::write.csv(sempi_data, paste0(write_to, "/sempi.csv"), row.names = FALSE) + trackid <- NULL # Silence R CMD note + utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) + fl <- paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB/Tracks.db") + conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) + + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + RSQLite::dbDisconnect(conn) + unlink(paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB"), recursive = T) + data <- data %>% + dplyr::filter(trackid == 6) + + types <- sapply(data$name, function(x) { + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) + }) + + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) + colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") + sempi_data$Cluster <- as.numeric(sempi_data$Cluster) + sempi_data$Start <- as.numeric(sempi_data$Start) + sempi_data$Stop <- as.numeric(sempi_data$Stop) + sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) + utils::write.csv(sempi_data, paste0(write_to, "/sempi.csv"), row.names = FALSE) } #' prism_to_csv @@ -47,39 +47,39 @@ sempi_to_csv <- function(project_archive, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' @examples +#' @examples #' \dontrun{ #' prism_to_csv() #' } #' @export prism_to_csv <- function(file, write_to = getwd()) { - data <- rjson::fromJSON(file = file) - - - types <- sapply(data$prism_results$clusters, function(x) { - tolower(x$type) - }) - - types <- sapply(types, function(x) { - if (length(unlist(x)) > 1) { - tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) - gsub(" ", "__", tmp) - } else { - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x) { - x$start - }) - end <- sapply(data$prism_results$clusters, function(x) { - x$end - }) - - prism_data <- data.frame(cbind(start, end, types)) - prism_data <- prism_data %>% - dplyr::transmute(Cluster = as.numeric(rownames(prism_data)), Start = as.numeric(start), Stop = as.numeric(end), Type = types) - utils::write.csv(prism_data, paste0(write_to, "/prism.csv"), row.names = FALSE) + data <- rjson::fromJSON(file = file) + + + types <- sapply(data$prism_results$clusters, function(x) { + tolower(x$type) + }) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) + gsub(" ", "__", tmp) + } else { + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x) { + x$start + }) + end <- sapply(data$prism_results$clusters, function(x) { + x$end + }) + + prism_data <- data.frame(cbind(start, end, types)) + prism_data <- prism_data %>% + dplyr::transmute(Cluster = as.numeric(rownames(prism_data)), Start = as.numeric(start), Stop = as.numeric(end), Type = types) + utils::write.csv(prism_data, paste0(write_to, "/prism.csv"), row.names = FALSE) } #' antismash_to_csv @@ -90,56 +90,56 @@ prism_to_csv <- function(file, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' @examples +#' @examples #' \dontrun{ #' antismash_to_csv() #' } #' @export antismash_to_csv <- function(file, write_to = getwd()) { - Start <- Stop <- NULL # To silence R CMD notes - data <- rjson::fromJSON(file = file) - types <- sapply(data$records, function(y) { - lapply(y$features, function(x) { - if (unlist(x$type == "region")) { - tolower(x$qualifiers$product) - } + Start <- Stop <- NULL # To silence R CMD notes + data <- rjson::fromJSON(file = file) + types <- sapply(data$records, function(y) { + lapply(y$features, function(x) { + if (unlist(x$type == "region")) { + tolower(x$qualifiers$product) + } + }) }) - }) - - types <- Filter(Negate(is.null), types) - - types <- sapply(types, function(x) { - if (length(unlist(x)) > 1) { - tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) - gsub(" ", "__", tmp) - } else { - x - } - }) - - location <- sapply(data$records, function(y) { - unlist(sapply(y$features, function(x) { - if (unlist(x$type == "region")) { - unlist(x$location) + + types <- Filter(Negate(is.null), types) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) + gsub(" ", "__", tmp) + } else { + x } - })) - }) - - - location <- gsub("\\[", "", location) - location <- gsub("\\]", "", location) - location <- data.frame(location) - colnames(location) <- "split" - anti_data <- location %>% - tidyr::separate(split, c("Start", "Stop")) %>% - dplyr::transmute(ID = rownames(location), Start, Stop) - - anti_data <- cbind(anti_data, types) - colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") - anti_data$Cluster <- as.numeric(anti_data$Cluster) - anti_data$Start <- as.numeric(anti_data$Start) - anti_data$Stop <- as.numeric(anti_data$Stop) - utils::write.csv(anti_data, paste0(write_to, "/antismash.csv"), row.names = FALSE) + }) + + location <- sapply(data$records, function(y) { + unlist(sapply(y$features, function(x) { + if (unlist(x$type == "region")) { + unlist(x$location) + } + })) + }) + + + location <- gsub("\\[", "", location) + location <- gsub("\\]", "", location) + location <- data.frame(location) + colnames(location) <- "split" + anti_data <- location %>% + tidyr::separate(split, c("Start", "Stop")) %>% + dplyr::transmute(ID = rownames(location), Start, Stop) + + anti_data <- cbind(anti_data, types) + colnames(anti_data) <- c("Cluster", "Start", "Stop", "Type") + anti_data$Cluster <- as.numeric(anti_data$Cluster) + anti_data$Start <- as.numeric(anti_data$Start) + anti_data$Stop <- as.numeric(anti_data$Stop) + utils::write.csv(anti_data, paste0(write_to, "/antismash.csv"), row.names = FALSE) } #' arts_to_csv @@ -150,86 +150,86 @@ antismash_to_csv <- function(file, write_to = getwd()) { #' @param write_to - path where to write generated csv file #' #' @return csv file in specified location -#' @examples +#' @examples #' \dontrun{ #' arts_to_csv() #' } #' #' @export arts_to_csv <- function(project_archive, write_to = getwd()) { - Start <- NULL # Silence R CMD note - utils::unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) - known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/knownhits.tsv")) - dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/duptable.tsv")) - locations <- sapply(known_hits$Sequence.description, function(x) { - utils::tail(stringr::str_split(x, "\\|")[[1]], 1) - }) - - start <- sapply(locations, function(x) { - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x) { - stringr::str_split(x, "_")[[1]][2] - }) - # Parse known_hits data - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- known_hits$Description - known_table$Model <- known_hits$X.Model - known_table$Evalue <- known_hits$evalue - known_table$Bitscore <- known_hits$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <- known_table$ID - known_table$Type <- "resistance" - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - # Parse duplication data - get_location_duptable <- function(x, y) { - test <- stringr::str_split(x, ";") - test2 <- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))) { - id <- paste("hit", as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id, start, stop) - res <- append(res, list(res_1)) + Start <- NULL # Silence R CMD note + utils::unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) + known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/knownhits.tsv")) + dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/duptable.tsv")) + locations <- sapply(known_hits$Sequence.description, function(x) { + utils::tail(stringr::str_split(x, "\\|")[[1]], 1) + }) + + start <- sapply(locations, function(x) { + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x) { + stringr::str_split(x, "_")[[1]][2] + }) + # Parse known_hits data + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- known_hits$Description + known_table$Model <- known_hits$X.Model + known_table$Evalue <- known_hits$evalue + known_table$Bitscore <- known_hits$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <- known_table$ID + known_table$Type <- "resistance" + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + # Parse duplication data + get_location_duptable <- function(x, y) { + test <- stringr::str_split(x, ";") + test2 <- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))) { + id <- paste("hit", as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id, start, stop) + res <- append(res, list(res_1)) + } + return(res) } - return(res) - } - - dup_table <- data.frame() - for (i in seq(1:dim(dupl_table)[1])) { - lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- dupl_table$X.Core_gene[i] - fin_data$Description <- dupl_table$Description[i] - fin_data$Count <- dupl_table$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) - } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1:dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- "core" - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - utils::write.csv(arts_data, paste0(write_to, "/arts.csv"), row.names = FALSE) + + dup_table <- data.frame() + for (i in seq(1:dim(dupl_table)[1])) { + lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- dupl_table$X.Core_gene[i] + fin_data$Description <- dupl_table$Description[i] + fin_data$Count <- dupl_table$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1:dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- "core" + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + utils::write.csv(arts_data, paste0(write_to, "/arts.csv"), row.names = FALSE) } diff --git a/R/fct_group_table.R b/R/fct_group_table.R index 1a4f12a..a76009a 100644 --- a/R/fct_group_table.R +++ b/R/fct_group_table.R @@ -6,17 +6,17 @@ #' #' @noRd refine_unique <- function(data) { - n <- utils::tail(data, n = 1) - data <- utils::head(data, -1) - n_list <- stringr::str_split(n, ",") - out <- sapply(n_list[[1]], function(x) { - x %in% unlist(stringr::str_split(data, ",")) - }) - res <- sapply(out, function(x) { - if (x == F) { - x - } - }) + n <- utils::tail(data, n = 1) + data <- utils::head(data, -1) + n_list <- stringr::str_split(n, ",") + out <- sapply(n_list[[1]], function(x) { + x %in% unlist(stringr::str_split(data, ",")) + }) + res <- sapply(out, function(x) { + if (x == F) { + x + } + }) - return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) + return(paste(names(Filter(Negate(is.null), res)), collapse = ",")) } diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 14bdf3d..407d040 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -90,9 +90,9 @@ hybrid_col <- function(data) { #' #' @export get_defaults <- function(write_to = getwd()) { - rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - option_data <- utils::read.csv(rename_file) - utils::write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + option_data <- utils::read.csv(rename_file) + utils::write.csv(option_data, paste0(write_to, "/BGCViz_options.csv"), row.names = FALSE) } #' set_defaults #' @@ -102,15 +102,15 @@ get_defaults <- function(write_to = getwd()) { #' @param csv_file - path to csv file with default options. #' #' @return csv file, written to package settings -#' -#' @examples +#' +#' @examples #' \dontrun{ #' set_defaults() #' } #' #' @export set_defaults <- function(csv_file) { - rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") - option_data <- utils::read.csv(csv_file) - utils::write.csv(option_data, rename_file, row.names = FALSE) + rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") + option_data <- utils::read.csv(csv_file) + utils::write.csv(option_data, rename_file, row.names = FALSE) } diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 4c443fb..ad56658 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -6,20 +6,20 @@ #' #' @noRd read_anti <- function(data) { - anti_data <- data - res_validation <- validate_basic_input(anti_data) - if (!(res_validation[[1]])) { - anti_data <- NULL - return(NULL) - } else { - anti_data <- res_validation[[2]] - } - # Add chromosome column - anti_data$chromosome <- rep("A", length(anti_data$Cluster)) - # Type magic - anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) - anti_data["Type2"] <- stringr::str_trim(tolower(anti_data$Type)) - return(anti_data) + anti_data <- data + res_validation <- validate_basic_input(anti_data) + if (!(res_validation[[1]])) { + anti_data <- NULL + return(NULL) + } else { + anti_data <- res_validation[[2]] + } + # Add chromosome column + anti_data$chromosome <- rep("A", length(anti_data$Cluster)) + # Type magic + anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) + anti_data["Type2"] <- stringr::str_trim(tolower(anti_data$Type)) + return(anti_data) } #' read_anti #' @@ -29,223 +29,223 @@ read_anti <- function(data) { #' #' @noRd read_gecco <- function(data) { - # Silence R CMD note - polyketide_probability <- other_probability <- - nrp_probability <- alkaloid_probability <- - terpene_probability <- saccharide_probability <- - ripp_probability <- NULL - # Add chromosome column - gecco_data <- data + # Silence R CMD note + polyketide_probability <- other_probability <- + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- + ripp_probability <- NULL + # Add chromosome column + gecco_data <- data - gecco_data$chromosome <- rep("G", length(gecco_data$type)) - # Type magic - gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) - gecco_data$ID <- gecco_data$Cluster - gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) - gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) - gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) - gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) - gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) - drop_cols <- c( - "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability", "other_probability" - ) - # Read data - gecco_data <- gecco_data %>% - dplyr::mutate( - pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability - ) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$proteins), ";"), length) - gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) - names(gecco_data)[names(gecco_data) == "start"] <- "Start" - names(gecco_data)[names(gecco_data) == "end"] <- "Stop" - return(gecco_data) + gecco_data$chromosome <- rep("G", length(gecco_data$type)) + # Type magic + gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) + gecco_data$ID <- gecco_data$Cluster + gecco_data$Type <- stringr::str_trim(tolower(gecco_data$type)) + gecco_data$Type <- gsub("polyketide", "pks", gecco_data$Type) + gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) + gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) + gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) + drop_cols <- c( + "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability", "other_probability" + ) + # Read data + gecco_data <- gecco_data %>% + dplyr::mutate( + pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability + ) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$proteins), ";"), length) + gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) + names(gecco_data)[names(gecco_data) == "start"] <- "Start" + names(gecco_data)[names(gecco_data) == "end"] <- "Stop" + return(gecco_data) } read_prism <- function(data, json = T) { - if (json == T) { - processed_data <- process_prism_json_suppl(data) - prism_data <- processed_data[[1]] - prism_supp_data <- processed_data[[2]] - } else { - prism_data <- data - prism_supp_data <- NULL - } - res_validation <- validate_basic_input(prism_data) - if (!(res_validation[[1]])) { - prism_data <- NULL - return(NULL) - } else { - prism_data <- res_validation[[2]] - } - prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) - prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) - return(list(prism_data, prism_supp_data)) + if (json == T) { + processed_data <- process_prism_json_suppl(data) + prism_data <- processed_data[[1]] + prism_supp_data <- processed_data[[2]] + } else { + prism_data <- data + prism_supp_data <- NULL + } + res_validation <- validate_basic_input(prism_data) + if (!(res_validation[[1]])) { + prism_data <- NULL + return(NULL) + } else { + prism_data <- res_validation[[2]] + } + prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) + prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) + return(list(prism_data, prism_supp_data)) } read_sempi <- function(data, zip = T) { - # Silence R CMD note - trackid <- NULL - if (zip == T) { - utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) - fl <- "./SEMPI_TracksDB/Tracks.db" - conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) + # Silence R CMD note + trackid <- NULL + if (zip == T) { + utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + fl <- "./SEMPI_TracksDB/Tracks.db" + conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) - data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") - RSQLite::dbDisconnect(conn) - unlink("./SEMPI_TracksDB", recursive = T) - data <- data %>% - dplyr::filter(trackid == 6) + data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") + RSQLite::dbDisconnect(conn) + unlink("./SEMPI_TracksDB", recursive = T) + data <- data %>% + dplyr::filter(trackid == 6) - types <- sapply(data$name, function(x) { - tmp <- stringr::str_trim(x) - tmp <- gsub(", ", "", tmp) - gsub(" ", "__", tmp) - }) + types <- sapply(data$name, function(x) { + tmp <- stringr::str_trim(x) + tmp <- gsub(", ", "", tmp) + gsub(" ", "__", tmp) + }) - sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) - colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") - sempi_data$Cluster <- as.numeric(sempi_data$Cluster) - sempi_data$Start <- as.numeric(sempi_data$Start) - sempi_data$Stop <- as.numeric(sempi_data$Stop) - sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) - } else { - sempi_data <- data - } - res_validation <- validate_basic_input(sempi_data) - if (!(res_validation[[1]])) { - sempi_data <- NULL - return(NULL) - } else { - sempi_data <- res_validation[[2]] - } - sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) - return(sempi_data) + sempi_data <- data.frame(cbind(seq(1:length(data$trackid)), data$start, data$end, as.character(types))) + colnames(sempi_data) <- c("Cluster", "Start", "Stop", "Type") + sempi_data$Cluster <- as.numeric(sempi_data$Cluster) + sempi_data$Start <- as.numeric(sempi_data$Start) + sempi_data$Stop <- as.numeric(sempi_data$Stop) + sempi_data$Type <- stringr::str_trim(tolower(sempi_data$Type)) + } else { + sempi_data <- data + } + res_validation <- validate_basic_input(sempi_data) + if (!(res_validation[[1]])) { + sempi_data <- NULL + return(NULL) + } else { + sempi_data <- res_validation[[2]] + } + sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) + return(sempi_data) } read_arts_archive <- function(archive, zip = T) { - # Silence R CMD note - Start <- Core <- NULL - if (zip == T) { - utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) - known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") - dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") - unlink("./ARTS_tables", recursive = T) - locations <- sapply(known_hits$Sequence.description, function(x) { - utils::tail(stringr::str_split(x, "\\|")[[1]], 1) - }) + # Silence R CMD note + Start <- Core <- NULL + if (zip == T) { + utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) + known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") + dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") + unlink("./ARTS_tables", recursive = T) + locations <- sapply(known_hits$Sequence.description, function(x) { + utils::tail(stringr::str_split(x, "\\|")[[1]], 1) + }) - start <- sapply(locations, function(x) { - stringr::str_split(x, "_")[[1]][1] - }) - stop <- sapply(locations, function(x) { - stringr::str_split(x, "_")[[1]][2] - }) - # Parse known_hits data - known_table <- data.frame(cbind(start, stop)) - colnames(known_table) <- c("Start", "Stop") - rownames(known_table) <- seq(1:dim(known_table)[1]) - known_table$Start <- as.numeric(known_table$Start) - known_table$Stop <- as.numeric(known_table$Stop) - known_table$Description <- known_hits$Description - known_table$Model <- known_hits$X.Model - known_table$Evalue <- known_hits$evalue - known_table$Bitscore <- known_hits$bitscore - known_table$ID <- seq(1:dim(known_table)[1]) - known_table$Cluster <- known_table$ID - known_table$Type <- "resistance" - known_table$Type2 <- known_table$Type - known_table$Hit <- NA - known_table$Core <- "Not_core" - known_table$Count <- 1 - # Parse duplication data - get_location_duptable <- function(x, y) { - test <- stringr::str_split(x, ";") - test2 <- sub(".*loc\\|", "", test[[1]]) - test3 <- stringr::str_split(test2, " ") - res <- list() - for (i in seq(1:length(test3))) { - id <- paste("hit", as.character(i), sep = "_") - start <- test3[[i]][1] - stop <- test3[[i]][2] - res_1 <- list(id, start, stop) - res <- append(res, list(res_1)) - } - return(res) - } + start <- sapply(locations, function(x) { + stringr::str_split(x, "_")[[1]][1] + }) + stop <- sapply(locations, function(x) { + stringr::str_split(x, "_")[[1]][2] + }) + # Parse known_hits data + known_table <- data.frame(cbind(start, stop)) + colnames(known_table) <- c("Start", "Stop") + rownames(known_table) <- seq(1:dim(known_table)[1]) + known_table$Start <- as.numeric(known_table$Start) + known_table$Stop <- as.numeric(known_table$Stop) + known_table$Description <- known_hits$Description + known_table$Model <- known_hits$X.Model + known_table$Evalue <- known_hits$evalue + known_table$Bitscore <- known_hits$bitscore + known_table$ID <- seq(1:dim(known_table)[1]) + known_table$Cluster <- known_table$ID + known_table$Type <- "resistance" + known_table$Type2 <- known_table$Type + known_table$Hit <- NA + known_table$Core <- "Not_core" + known_table$Count <- 1 + # Parse duplication data + get_location_duptable <- function(x, y) { + test <- stringr::str_split(x, ";") + test2 <- sub(".*loc\\|", "", test[[1]]) + test3 <- stringr::str_split(test2, " ") + res <- list() + for (i in seq(1:length(test3))) { + id <- paste("hit", as.character(i), sep = "_") + start <- test3[[i]][1] + stop <- test3[[i]][2] + res_1 <- list(id, start, stop) + res <- append(res, list(res_1)) + } + return(res) + } - dup_table <- data.frame() - for (i in seq(1:dim(dupl_table)[1])) { - lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) - fin_data <- data.frame(do.call("rbind", lst)) - fin_data$Core_gene <- dupl_table$X.Core_gene[i] - fin_data$Description <- dupl_table$Description[i] - fin_data$Count <- dupl_table$Count[i] - colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") - dup_table <- rbind(dup_table, fin_data) + dup_table <- data.frame() + for (i in seq(1:dim(dupl_table)[1])) { + lst <- get_location_duptable(dupl_table$X.Hits_listed.[i]) + fin_data <- data.frame(do.call("rbind", lst)) + fin_data$Core_gene <- dupl_table$X.Core_gene[i] + fin_data$Description <- dupl_table$Description[i] + fin_data$Count <- dupl_table$Count[i] + colnames(fin_data) <- c("Hit", "Start", "Stop", "Core", "Description", "Count") + dup_table <- rbind(dup_table, fin_data) + } + dup_table$Hit <- unlist(dup_table$Hit) + dup_table$Start <- unlist(dup_table$Start) + dup_table$Stop <- unlist(dup_table$Stop) + dup_table$Start <- as.numeric(dup_table$Start) + dup_table$Stop <- as.numeric(dup_table$Stop) + dup_table$ID <- seq(1:dim(dup_table)[1]) + dup_table$Cluster <- dup_table$ID + dup_table$Type <- "core" + dup_table$Type2 <- dup_table$Type + dup_table$Evalue <- NA + dup_table$Bitscore <- NA + dup_table$Model <- "Core" + arts_data <- rbind(dup_table, known_table) + arts_data <- arts_data %>% + dplyr::arrange(Start) + arts_data$ID <- seq(1:dim(arts_data)[1]) + arts_data$Cluster <- arts_data$ID + } else { + arts_data <- archive } - dup_table$Hit <- unlist(dup_table$Hit) - dup_table$Start <- unlist(dup_table$Start) - dup_table$Stop <- unlist(dup_table$Stop) - dup_table$Start <- as.numeric(dup_table$Start) - dup_table$Stop <- as.numeric(dup_table$Stop) - dup_table$ID <- seq(1:dim(dup_table)[1]) - dup_table$Cluster <- dup_table$ID - dup_table$Type <- "core" - dup_table$Type2 <- dup_table$Type - dup_table$Evalue <- NA - dup_table$Bitscore <- NA - dup_table$Model <- "Core" - arts_data <- rbind(dup_table, known_table) - arts_data <- arts_data %>% - dplyr::arrange(Start) - arts_data$ID <- seq(1:dim(arts_data)[1]) - arts_data$Cluster <- arts_data$ID - } else { - arts_data <- archive - } - return(arts_data) + return(arts_data) } read_deep <- function(data) { - polyketide <- nrp <- NULL # Silence R CMD error - # Fix colnames in deepbgc data - colnames(data) <- stringr::str_to_lower(colnames(data)) - res_validation <- validate_deep_input(data) - if (!(res_validation[[1]])) { - deep_data <- NULL - return(NULL) - } else { - deep_data <- res_validation[[2]] - } - drop_cols <- c("nrp", "polyketide") - # Read data - deep_data <- deep_data %>% - dplyr::mutate(pks = polyketide, nrps = nrp) %>% - dplyr::select(-dplyr::one_of(drop_cols)) - return(deep_data) + polyketide <- nrp <- NULL # Silence R CMD error + # Fix colnames in deepbgc data + colnames(data) <- stringr::str_to_lower(colnames(data)) + res_validation <- validate_deep_input(data) + if (!(res_validation[[1]])) { + deep_data <- NULL + return(NULL) + } else { + deep_data <- res_validation[[2]] + } + drop_cols <- c("nrp", "polyketide") + # Read data + deep_data <- deep_data %>% + dplyr::mutate(pks = polyketide, nrps = nrp) %>% + dplyr::select(-dplyr::one_of(drop_cols)) + return(deep_data) } read_rre <- function(data) { - Gene.name <- Coordinates <- NULL # Silence R CMD error - res_validation <- validate_rre_input(data) - if (!(res_validation[[1]])) { - data <- NULL - return(NULL) - } else { - data <- res_validation[[2]] - } - # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) - rre_data <- data %>% - tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") - # Add chromosome info column - rre_data$chromosome <- rep("RRE", length(rre_data$Sequence)) - # Add ID column - rre_data$ID <- seq(1:length(rre_data$Sequence)) - rre_data$Cluster <- rre_data$ID - rre_data <- data.frame(rre_data) - rre_data["Type"] <- "ripp" - rre_data["Type2"] <- "ripp" - rre_data$Start <- as.numeric(rre_data$Start) - rre_data$Stop <- as.numeric(rre_data$Stop) - # Store rre data into local variable - rre_data <- data.frame(rre_data) + Gene.name <- Coordinates <- NULL # Silence R CMD error + res_validation <- validate_rre_input(data) + if (!(res_validation[[1]])) { + data <- NULL + return(NULL) + } else { + data <- res_validation[[2]] + } + # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) + rre_data <- data %>% + tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") + # Add chromosome info column + rre_data$chromosome <- rep("RRE", length(rre_data$Sequence)) + # Add ID column + rre_data$ID <- seq(1:length(rre_data$Sequence)) + rre_data$Cluster <- rre_data$ID + rre_data <- data.frame(rre_data) + rre_data["Type"] <- "ripp" + rre_data["Type2"] <- "ripp" + rre_data$Start <- as.numeric(rre_data$Start) + rre_data$Stop <- as.numeric(rre_data$Stop) + # Store rre data into local variable + rre_data <- data.frame(rre_data) } diff --git a/R/fct_reading_processing.R b/R/fct_reading_processing.R index dd178e4..5bbecc1 100644 --- a/R/fct_reading_processing.R +++ b/R/fct_reading_processing.R @@ -7,42 +7,42 @@ #' #' @noRd fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { - dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] - duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) - test_score <- test_score[order_vec] - to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] - test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] - iterate_one_more_time <- c() - should_iterate <- F - for (i in seq(1:length(test_name))) { - if (length(dupl_names) == 0) { - should_iterate <- F - break + dupl_names <- regul_genes_orfs[duplicated(regul_genes_orfs)] + duplicated_values <- which(duplicated(regul_genes_orfs[order_vec])) + test_score <- test_score[order_vec] + to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] + test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] + iterate_one_more_time <- c() + should_iterate <- F + for (i in seq(1:length(test_name))) { + if (length(dupl_names) == 0) { + should_iterate <- F + break + } + if (test_name[i] == dupl_names[1]) { + dupl_names <- dupl_names[-1] + test_score[i] <- paste0(test_score[i], "/", to_add[1]) + to_add <- to_add[-1] + iterate_one_more_time <- c(iterate_one_more_time, i) + } } - if (test_name[i] == dupl_names[1]) { - dupl_names <- dupl_names[-1] - test_score[i] <- paste0(test_score[i], "/", to_add[1]) - to_add <- to_add[-1] - iterate_one_more_time <- c(iterate_one_more_time, i) + if ((length(iterate_one_more_time) > 1) && (length(dupl_names) != 0)) { + should_iterate <- T } - } - if ((length(iterate_one_more_time) > 1) && (length(dupl_names) != 0)) { - should_iterate <- T - } - while (should_iterate == T) { - for (i in iterate_one_more_time) { - if (test_name[i] == dupl_names[1]) { - dupl_names <- dupl_names[-1] - test_score[i] <- paste0(test_score[i], "/", to_add[1]) - to_add <- to_add[-1] - } - if (length(dupl_names) == 0) { - should_iterate <- F - break - } + while (should_iterate == T) { + for (i in iterate_one_more_time) { + if (test_name[i] == dupl_names[1]) { + dupl_names <- dupl_names[-1] + test_score[i] <- paste0(test_score[i], "/", to_add[1]) + to_add <- to_add[-1] + } + if (length(dupl_names) == 0) { + should_iterate <- F + break + } + } } - } - return(test_score) + return(test_score) } #' process_prism_json_suppl #' @@ -52,98 +52,98 @@ fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { #' #' @noRd process_prism_json_suppl <- function(data) { - Start <- NULL # Silence R CMD note - types <- sapply(data$prism_results$clusters, function(x) { - tolower(x$type) - }) - - types <- sapply(types, function(x) { - if (length(unlist(x)) > 1) { - tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) - gsub(" ", "__", tmp) - } else { - x - } - }) - - start <- sapply(data$prism_results$clusters, function(x) { - x$start - }) - end <- sapply(data$prism_results$clusters, function(x) { - x$end - }) - - - prism_data <- data.frame(Cluster = as.numeric(seq(1:length(start))), Start = as.numeric(start), Stop = as.numeric(end), Type = types) - - regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x) { - x$orf - }) - - names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { - y$name - }) - coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { - y$coordinates - }) - - test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs]) - - - reg_genes <- data.frame(t(test_coords)) - colnames(reg_genes) <- c("Start", "Stop") - reg_genes$Type <- "regulatory" - reg_genes$Type2 <- reg_genes$Type - - test_name <- names[names %in% regul_genes_orfs] - ref_names <- test_name - order_vec <- order(match(regul_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$regulatory_genes, function(x) { - x$score - }) - reg_genes$Score <- fix_duplicates(test_score, order_vec, regul_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$regulatory_genes, function(x) { - x$name - }) - reg_genes$Name <- fix_duplicates(test_name, order_vec, regul_genes_orfs, ref_names) - test_full_name <- sapply(data$prism_results$regulatory_genes, function(x) { - x$full_name - }) - reg_genes$Full_name <- fix_duplicates(test_full_name, order_vec, regul_genes_orfs, ref_names) - resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x) { - x$orf - }) - - test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs]) - - - res_genes <- data.frame(t(test_coords_res)) - - colnames(res_genes) <- c("Start", "Stop") - res_genes$Type <- "resistance" - res_genes$Type2 <- res_genes$Type - test_name <- names[names %in% resist_genes_orfs] - order_vec <- order(match(resist_genes_orfs, test_name)) - - - test_score <- sapply(data$prism_results$resistance_genes, function(x) { - x$score - }) - res_genes$Score <- fix_duplicates(test_score, order_vec, resist_genes_orfs, ref_names) - test_name <- sapply(data$prism_results$resistance_genes, function(x) { - x$name - }) - res_genes$Name <- fix_duplicates(test_name, order_vec, resist_genes_orfs, ref_names) - test_full_name <- sapply(data$prism_results$resistance_genes, function(x) { - x$full_name - }) - res_genes$Full_name <- fix_duplicates(test_full_name, order_vec, resist_genes_orfs, ref_names) - - final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) - final_reg$ID <- seq(1:dim(final_reg)[1]) - final_reg$Cluster <- final_reg$ID - rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) - return(list(prism_data, final_reg)) + Start <- NULL # Silence R CMD note + types <- sapply(data$prism_results$clusters, function(x) { + tolower(x$type) + }) + + types <- sapply(types, function(x) { + if (length(unlist(x)) > 1) { + tmp <- stringr::str_trim(paste0(unlist(x), collapse = "", sep = " ")) + gsub(" ", "__", tmp) + } else { + x + } + }) + + start <- sapply(data$prism_results$clusters, function(x) { + x$start + }) + end <- sapply(data$prism_results$clusters, function(x) { + x$end + }) + + + prism_data <- data.frame(Cluster = as.numeric(seq(1:length(start))), Start = as.numeric(start), Stop = as.numeric(end), Type = types) + + regul_genes_orfs <- sapply(data$prism_results$regulatory_genes, function(x) { + x$orf + }) + + names <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { + y$name + }) + coordinates <- sapply(data$prism_results$orfs[[1]]$orfs, function(y) { + y$coordinates + }) + + test_coords <- as.matrix(coordinates[, names %in% regul_genes_orfs]) + + + reg_genes <- data.frame(t(test_coords)) + colnames(reg_genes) <- c("Start", "Stop") + reg_genes$Type <- "regulatory" + reg_genes$Type2 <- reg_genes$Type + + test_name <- names[names %in% regul_genes_orfs] + ref_names <- test_name + order_vec <- order(match(regul_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$regulatory_genes, function(x) { + x$score + }) + reg_genes$Score <- fix_duplicates(test_score, order_vec, regul_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$regulatory_genes, function(x) { + x$name + }) + reg_genes$Name <- fix_duplicates(test_name, order_vec, regul_genes_orfs, ref_names) + test_full_name <- sapply(data$prism_results$regulatory_genes, function(x) { + x$full_name + }) + reg_genes$Full_name <- fix_duplicates(test_full_name, order_vec, regul_genes_orfs, ref_names) + resist_genes_orfs <- sapply(data$prism_results$resistance_genes, function(x) { + x$orf + }) + + test_coords_res <- as.matrix(coordinates[, names %in% resist_genes_orfs]) + + + res_genes <- data.frame(t(test_coords_res)) + + colnames(res_genes) <- c("Start", "Stop") + res_genes$Type <- "resistance" + res_genes$Type2 <- res_genes$Type + test_name <- names[names %in% resist_genes_orfs] + order_vec <- order(match(resist_genes_orfs, test_name)) + + + test_score <- sapply(data$prism_results$resistance_genes, function(x) { + x$score + }) + res_genes$Score <- fix_duplicates(test_score, order_vec, resist_genes_orfs, ref_names) + test_name <- sapply(data$prism_results$resistance_genes, function(x) { + x$name + }) + res_genes$Name <- fix_duplicates(test_name, order_vec, resist_genes_orfs, ref_names) + test_full_name <- sapply(data$prism_results$resistance_genes, function(x) { + x$full_name + }) + res_genes$Full_name <- fix_duplicates(test_full_name, order_vec, resist_genes_orfs, ref_names) + + final_reg <- rbind(res_genes, reg_genes) %>% dplyr::arrange(Start) + final_reg$ID <- seq(1:dim(final_reg)[1]) + final_reg$Cluster <- final_reg$ID + rownames(final_reg) <- as.numeric(seq(1:dim(final_reg)[1])) + return(list(prism_data, final_reg)) } diff --git a/R/fct_validation.R b/R/fct_validation.R index f4c2f08..0043632 100644 --- a/R/fct_validation.R +++ b/R/fct_validation.R @@ -6,12 +6,12 @@ #' #' @noRd check_if_column_exists <- function(data_names, column_name) { - if (column_name %in% stringr::str_to_lower(data_names)) { - return(TRUE) - } else { - shiny::showNotification(paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"), type = "warning") - return(FALSE) - } + if (column_name %in% stringr::str_to_lower(data_names)) { + return(TRUE) + } else { + shiny::showNotification(paste0(column_name, " column does not exist. Data was not integrated into analysis. Please recheck your data and try one more time"), type = "warning") + return(FALSE) + } } #' validate_basic_input #' @@ -22,46 +22,46 @@ check_if_column_exists <- function(data_names, column_name) { #' #' @noRd validate_basic_input <- function(data) { - data_names <- names(data) - if (!(check_if_column_exists(data_names, "cluster"))) { - shiny::showNotification(paste0("Cluster columns was created on the fly."), type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if (!(check_if_column_exists(data_names, "start"))) { - return(FALSE) - } - if (!(check_if_column_exists(data_names, "stop"))) { - return(FALSE) - } - if (!(check_if_column_exists(data_names, "type"))) { - return(FALSE) - } - if (length(unique(data$Cluster)) != length(data$Cluster)) { - shiny::showNotification(paste0("Cluster columns contains non unique values. It was regenerated"), type = "message") - data$Cluster <- seq(1:dim(data)[1]) - } - if ((T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))) { - shiny::showNotification(paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"), type = "error") - return(FALSE) - } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)) { - shiny::showNotification(paste0("Type column contain empty data. It was populated with 'unknown' "), type = "warning") - data$Type[is.na(data$Type)] <- "unknown" - data$Type["" %in% data$Type] <- "unknown" - } - if (!(is.numeric(data$Cluster))) { - data$Cluster <- as.numeric(data$Cluster) - } - if (!(is.numeric(data$Start))) { - data$Start <- as.numeric(data$Start) - } - if (!(is.numeric(data$Stop))) { - data$Stop <- as.numeric(data$Stop) - } - if (!(is.character(data$Type))) { - data$Type <- as.character(data$Type) - } - return(list(TRUE, data)) + data_names <- names(data) + if (!(check_if_column_exists(data_names, "cluster"))) { + shiny::showNotification(paste0("Cluster columns was created on the fly."), type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if (!(check_if_column_exists(data_names, "start"))) { + return(FALSE) + } + if (!(check_if_column_exists(data_names, "stop"))) { + return(FALSE) + } + if (!(check_if_column_exists(data_names, "type"))) { + return(FALSE) + } + if (length(unique(data$Cluster)) != length(data$Cluster)) { + shiny::showNotification(paste0("Cluster columns contains non unique values. It was regenerated"), type = "message") + data$Cluster <- seq(1:dim(data)[1]) + } + if ((T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))) { + shiny::showNotification(paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"), type = "error") + return(FALSE) + } + if ((T %in% is.na(data$Type)) | ("" %in% data$Type)) { + shiny::showNotification(paste0("Type column contain empty data. It was populated with 'unknown' "), type = "warning") + data$Type[is.na(data$Type)] <- "unknown" + data$Type["" %in% data$Type] <- "unknown" + } + if (!(is.numeric(data$Cluster))) { + data$Cluster <- as.numeric(data$Cluster) + } + if (!(is.numeric(data$Start))) { + data$Start <- as.numeric(data$Start) + } + if (!(is.numeric(data$Stop))) { + data$Stop <- as.numeric(data$Stop) + } + if (!(is.character(data$Type))) { + data$Type <- as.character(data$Type) + } + return(list(TRUE, data)) } #' validate_rre_input #' @@ -71,46 +71,46 @@ validate_basic_input <- function(data) { #' #' @noRd validate_rre_input <- function(data) { - data_names <- names(data) - if (!(check_if_column_exists(data_names, "gene.name"))) { - return(FALSE) - } - if (F %in% grepl("__", data$Gene.name)) { - return(FALSE) - } - if (!(check_if_column_exists(data_names, "e.value"))) { - return(FALSE) - } else { - data$E.value <- as.numeric(data$E.value) - } - if (!is.null(data$Probability)) { - if (!(check_if_column_exists(data_names, "score"))) { - return(FALSE) - } else { - data$Score <- as.numeric(data$Score) + data_names <- names(data) + if (!(check_if_column_exists(data_names, "gene.name"))) { + return(FALSE) } - if (!(check_if_column_exists(data_names, "p.value"))) { - return(FALSE) - } else { - data$P.value <- as.numeric(data$P.value) + if (F %in% grepl("__", data$Gene.name)) { + return(FALSE) } - if (!(check_if_column_exists(data_names, "rre.start"))) { - return(FALSE) + if (!(check_if_column_exists(data_names, "e.value"))) { + return(FALSE) } else { - data$RRE.start <- as.numeric(data$RRE.start) + data$E.value <- as.numeric(data$E.value) } - if (!(check_if_column_exists(data_names, "rre.end"))) { - return(FALSE) - } else { - data$RRE.end <- as.numeric(data$RRE.end) + if (!is.null(data$Probability)) { + if (!(check_if_column_exists(data_names, "score"))) { + return(FALSE) + } else { + data$Score <- as.numeric(data$Score) + } + if (!(check_if_column_exists(data_names, "p.value"))) { + return(FALSE) + } else { + data$P.value <- as.numeric(data$P.value) + } + if (!(check_if_column_exists(data_names, "rre.start"))) { + return(FALSE) + } else { + data$RRE.start <- as.numeric(data$RRE.start) + } + if (!(check_if_column_exists(data_names, "rre.end"))) { + return(FALSE) + } else { + data$RRE.end <- as.numeric(data$RRE.end) + } + if (!(check_if_column_exists(data_names, "probability"))) { + return(FALSE) + } else { + data$Probability <- as.numeric(data$Probability) + } } - if (!(check_if_column_exists(data_names, "probability"))) { - return(FALSE) - } else { - data$Probability <- as.numeric(data$Probability) - } - } - return(list(TRUE, data)) + return(list(TRUE, data)) } #' validate_deep_input #' @@ -121,35 +121,35 @@ validate_rre_input <- function(data) { #' #' @noRd validate_deep_input <- function(data) { - data_names <- names(data) - col_names <- c( - "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", - "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene", - "bgc_candidate_id", "sequence_id" - ) - num_columns <- c( - "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", - "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene" - ) - if (!("cluster" %in% stringr::str_to_lower(data_names))) { - data$Cluster <- seq(1:dim(data)[1]) - } - for (column_name in col_names) { - if (!(check_if_column_exists(data_names, column_name))) { - return(FALSE) - } - if (T %in% is.na(data[[column_name]])) { - return(FALSE) - } - if ("" %in% data[[column_name]]) { - return(FALSE) - } - if (column_name %in% num_columns) { - names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name - data[[column_name]] <- as.numeric(data[[column_name]]) - } - } - return(list(TRUE, data)) + data_names <- names(data) + col_names <- c( + "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", + "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene", + "bgc_candidate_id", "sequence_id" + ) + num_columns <- c( + "nucl_start", "nucl_end", "num_proteins", "num_domains", "num_bio_domains", "deepbgc_score", "antibacterial", + "cytotoxic", "inhibitor", "antifungal", "alkaloid", "nrp", "other", "polyketide", "ripp", "saccharide", "terpene" + ) + if (!("cluster" %in% stringr::str_to_lower(data_names))) { + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names) { + if (!(check_if_column_exists(data_names, column_name))) { + return(FALSE) + } + if (T %in% is.na(data[[column_name]])) { + return(FALSE) + } + if ("" %in% data[[column_name]]) { + return(FALSE) + } + if (column_name %in% num_columns) { + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) } #' validate_gecco_input #' @@ -160,33 +160,33 @@ validate_deep_input <- function(data) { #' #' @noRd validate_gecco_input <- function(data) { - data_names <- names(data) - col_names <- c( - "start", "end", "average_p", "max_p", "type", "alkaloid_probability", "polyketide_probability", - "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability", - "proteins", "domains" - ) - num_columns <- c( - "start", "end", "average_p", "max_p", "alkaloid_probability", "polyketide_probability", - "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability" - ) - if (!("cluster" %in% stringr::str_to_lower(data_names))) { - data$Cluster <- seq(1:dim(data)[1]) - } - for (column_name in col_names) { - if (!(check_if_column_exists(data_names, column_name))) { - return(FALSE) - } - if (T %in% is.na(data[[column_name]])) { - return(FALSE) - } - if ("" %in% data[[column_name]]) { - return(FALSE) - } - if (column_name %in% num_columns) { - names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name - data[[column_name]] <- as.numeric(data[[column_name]]) - } - } - return(list(TRUE, data)) + data_names <- names(data) + col_names <- c( + "start", "end", "average_p", "max_p", "type", "alkaloid_probability", "polyketide_probability", + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability", + "proteins", "domains" + ) + num_columns <- c( + "start", "end", "average_p", "max_p", "alkaloid_probability", "polyketide_probability", + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability" + ) + if (!("cluster" %in% stringr::str_to_lower(data_names))) { + data$Cluster <- seq(1:dim(data)[1]) + } + for (column_name in col_names) { + if (!(check_if_column_exists(data_names, column_name))) { + return(FALSE) + } + if (T %in% is.na(data[[column_name]])) { + return(FALSE) + } + if ("" %in% data[[column_name]]) { + return(FALSE) + } + if (column_name %in% num_columns) { + names(data)[stringi::stri_trans_tolower(names(data)) == column_name] <- column_name + data[[column_name]] <- as.numeric(data[[column_name]]) + } + } + return(list(TRUE, data)) } diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R index 2260062..76b8b27 100644 --- a/R/mod_barplot_rank.R +++ b/R/mod_barplot_rank.R @@ -8,98 +8,98 @@ #' #' @importFrom shiny NS tagList mod_barplot_rank_ui <- function(id) { - ns <- NS(id) - tagList( - div( - id = "id1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Ranking barplot", - id = "ranking_barplot_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput(ns("barplot_rank"), height = "600px") %>% - shinycssloaders::withSpinner() - ), - options = list(handles = "w,e") - ) + ns <- NS(id) + tagList( + div( + id = "id1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Ranking barplot", + id = "ranking_barplot_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput(ns("barplot_rank"), height = "600px") %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) + ) ) - ) } #' barplot_rank Server Functions #' #' @noRd mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - # Silence R CMD note - Cluster <- Count <- Type <- - Start <- Start <- Stop <- - Label <- NULL - output$barplot_rank <- plotly::renderPlotly({ - shiny::req(vals$data_upload_count > 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_barplot_rank == T) + moduleServer(id, function(input, output, session) { + ns <- session$ns + # Silence R CMD note + Cluster <- Count <- Type <- + Start <- Start <- Stop <- + Label <- NULL + output$barplot_rank <- plotly::renderPlotly({ + shiny::req(vals$data_upload_count > 1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_barplot_rank == T) - antismash_count <- NULL - prism_count <- NULL - deep_count <- NULL - rre_count <- NULL - sempi_count <- NULL - prism_supp_count <- NULL - arts_count <- NULL - gecco_count <- NULL + antismash_count <- NULL + prism_count <- NULL + deep_count <- NULL + rre_count <- NULL + sempi_count <- NULL + prism_supp_count <- NULL + arts_count <- NULL + gecco_count <- NULL - if (is.null(vals$inters_filtered)) { - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - index <- 1 - ranking_data <- NULL - for (upload in data_uploads) { - if (vals[[upload]] == T) { - counts_var <- plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x) { - x$to - })))) - # Check if ID is in dataframe and if it is - extract all information about to the local dataframe - anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)), ] - # Add prefices to the ID to plot for a barplot. - counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index], ": ", x)) - # Add label column to the dataframe, from which we will plot - counts_var$label <- rep(soft_namings[index], length(counts_var$x)) - # Add type to the dataframe, from which we would plot (from annotation dataframe) - counts_var$Type <- anot_var$Type - # Add Start positions (to visualize on hover) - counts_var$Start <- anot_var$Start - # Add Stop positions (to visualize on hover) - counts_var$Stop <- anot_var$Stop - if (is.null(ranking_data)) { - ranking_data <- counts_var - } else { - ranking_data <- rbind(ranking_data, counts_var) - } - } - index <- index + 1 - } + if (is.null(vals$inters_filtered)) { + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + index <- 1 + ranking_data <- NULL + for (upload in data_uploads) { + if (vals[[upload]] == T) { + counts_var <- plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x) { + x$to + })))) + # Check if ID is in dataframe and if it is - extract all information about to the local dataframe + anot_var <- vals[[data_to_use[index]]][vals[[data_to_use[index]]]$Cluster %in% as.numeric(levels(counts_var$x)), ] + # Add prefices to the ID to plot for a barplot. + counts_var$x <- sapply(counts_var$x, function(x) paste0(abbr[index], ": ", x)) + # Add label column to the dataframe, from which we will plot + counts_var$label <- rep(soft_namings[index], length(counts_var$x)) + # Add type to the dataframe, from which we would plot (from annotation dataframe) + counts_var$Type <- anot_var$Type + # Add Start positions (to visualize on hover) + counts_var$Start <- anot_var$Start + # Add Stop positions (to visualize on hover) + counts_var$Stop <- anot_var$Stop + if (is.null(ranking_data)) { + ranking_data <- counts_var + } else { + ranking_data <- rbind(ranking_data, counts_var) + } + } + index <- index + 1 + } - # Fix column names in the master dataframe - colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") - # Plot - plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + - ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + - ggplot2::theme( - axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), - axis.text.y = ggplot2::element_text(size = 14) - ) + - ggplot2::ggtitle("Number of times cluster is annotated with other tool"), - tooltip = c("Type", "Start", "Stop") - ) + # Fix column names in the master dataframe + colnames(ranking_data) <- c("Cluster", "Count", "Label", "Type", "Start", "Stop") + # Plot + plotly::ggplotly(ggplot2::ggplot(ranking_data, ggplot2::aes(x = Cluster, y = Count, Type = Type, Start = Start, Stop = Stop)) + + ggplot2::geom_bar(stat = "identity", ggplot2::aes(fill = Label)) + + ggplot2::theme( + axis.text.x = ggplot2::element_text(angle = 60, hjust = 1, size = 10), + axis.text.y = ggplot2::element_text(size = 14) + ) + + ggplot2::ggtitle("Number of times cluster is annotated with other tool"), + tooltip = c("Type", "Start", "Stop") + ) + }) }) - }) } ## To be copied in the UI diff --git a/R/mod_biocircos.R b/R/mod_biocircos.R index 9982d2a..0acab30 100644 --- a/R/mod_biocircos.R +++ b/R/mod_biocircos.R @@ -8,100 +8,100 @@ #' #' @importFrom shiny NS tagList mod_biocircos_ui <- function(id) { - ns <- NS(id) - tagList( - shiny::fluidRow( - tags$div( - id = "biocircos_data1", - div( - id = "id1", - shinydashboardPlus::box( - title = "Biocircos plot", - id = "biocircos_plot_box", - collapsible = TRUE, - closable = TRUE, - width = 12, - shiny::checkboxInput(ns("ShowBiocircosColoring"), "Show Biocircos coloring scheme"), - sidebar = shinydashboardPlus::boxSidebar( - id = "biocircos_box_sidebar", - width = 25, - shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), - shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), - shiny::selectInput("label_color_class", "Choose the mode to color the links", - choices = c( - "Hierarchical-based" = "H", - "Purity-based" = "P", - "Reference column-based" = "R" - ), - selected = "H" - ), - shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = "") - ), - BioCircos::BioCircosOutput(ns("biocircos"), height = "900px") %>% - shinycssloaders::withSpinner() - ) + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "biocircos_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "Biocircos plot", + id = "biocircos_plot_box", + collapsible = TRUE, + closable = TRUE, + width = 12, + shiny::checkboxInput(ns("ShowBiocircosColoring"), "Show Biocircos coloring scheme"), + sidebar = shinydashboardPlus::boxSidebar( + id = "biocircos_box_sidebar", + width = 25, + shiny::checkboxInput("biocircos_color", "Make arcs in biocircos colorful, based on the class"), + shiny::checkboxInput("label_color", "Make links in biocircos colorful, based on the class"), + shiny::selectInput("label_color_class", "Choose the mode to color the links", + choices = c( + "Hierarchical-based" = "H", + "Purity-based" = "P", + "Reference column-based" = "R" + ), + selected = "H" + ), + shiny::selectInput("ref_col_biocircos", "Choose reference column to color the links", choices = c(""), selected = "") + ), + BioCircos::BioCircosOutput(ns("biocircos"), height = "900px") %>% + shinycssloaders::withSpinner() + ) + ) + ) + ), + shiny::fluidRow( + tags$div( + id = "biocircos_data2", + div( + id = "id1", + shiny::uiOutput(ns("biocircos_coloring")) + ) + ) ) - ) - ), - shiny::fluidRow( - tags$div( - id = "biocircos_data2", - div( - id = "id1", - shiny::uiOutput(ns("biocircos_coloring")) - ) - ) ) - ) } #' biocircos Server Functions #' #' @noRd mod_biocircos_server <- function(id, vals) { - moduleServer(id, function(input, output, session) { - ns <- session$ns + moduleServer(id, function(input, output, session) { + ns <- session$ns - output$biocircos <- BioCircos::renderBioCircos({ - shiny::req(vals$data_upload_count > 1) + output$biocircos <- BioCircos::renderBioCircos({ + shiny::req(vals$data_upload_count > 1) - # Plot BioCircos - BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) - }) + # Plot BioCircos + BioCircos::BioCircos(vals$tracklist, genome = vals$Biocircos_chromosomes, genomeTicksScale = 1e+6) + }) - output$biocircos_legend <- DT::renderDataTable({ - shiny::req(vals$data_upload_count >= 1) - rownames <- FALSE - new_data <- vals$coloring_datatable - color_vec <- new_data$x$data$Color - options(DT.options = list(pageLength = 50)) - new_data %>% DT::formatStyle("Color", backgroundColor = DT::styleEqual(color_vec, color_vec)) - }) + output$biocircos_legend <- DT::renderDataTable({ + shiny::req(vals$data_upload_count >= 1) + rownames <- FALSE + new_data <- vals$coloring_datatable + color_vec <- new_data$x$data$Color + options(DT.options = list(pageLength = 50)) + new_data %>% DT::formatStyle("Color", backgroundColor = DT::styleEqual(color_vec, color_vec)) + }) - output$biocircos_coloring <- shiny::renderUI({ - if (input$ShowBiocircosColoring == T) { - shinydashboardPlus::box( - title = "Biocircos coloring scheme", - closable = TRUE, - collapsible = TRUE, - DT::dataTableOutput(ns("biocircos_legend")) %>% - shinycssloaders::withSpinner() - ) - } - }) + output$biocircos_coloring <- shiny::renderUI({ + if (input$ShowBiocircosColoring == T) { + shinydashboardPlus::box( + title = "Biocircos coloring scheme", + closable = TRUE, + collapsible = TRUE, + DT::dataTableOutput(ns("biocircos_legend")) %>% + shinycssloaders::withSpinner() + ) + } + }) - # Updating values in Datatable on edit - shiny::observeEvent(input$biocircos_legend_cell_edit, { - if (input$biocircos_legend_cell_edit$col[1] == 0) { - vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 1) { - vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value - } else if (input$biocircos_legend_cell_edit$col[1] == 2) { - vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value - } + # Updating values in Datatable on edit + shiny::observeEvent(input$biocircos_legend_cell_edit, { + if (input$biocircos_legend_cell_edit$col[1] == 0) { + vals$coloring_datatable$x$data$Name <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 1) { + vals$coloring_datatable$x$data$Color <- input$biocircos_legend_cell_edit$value + } else if (input$biocircos_legend_cell_edit$col[1] == 2) { + vals$coloring_datatable$x$data$Hierarchy <- input$biocircos_legend_cell_edit$value + } + }) }) - }) } ## To be copied in the UI diff --git a/R/mod_deep_reference.R b/R/mod_deep_reference.R index 15aa6b0..d98656c 100644 --- a/R/mod_deep_reference.R +++ b/R/mod_deep_reference.R @@ -8,44 +8,44 @@ #' #' @importFrom shiny NS tagList mod_deep_reference_ui <- function(id) { - ns <- NS(id) - shiny::tagList( - div( - id = "id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotation comparison to the reference", - id = "annotation_reference_comparison_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - height = "100%", - shiny::selectInput("ref", "Choose reference data", - choices = c(""), - selected = "" - ), - plotly::plotlyOutput(ns("deep_reference")) %>% - shinycssloaders::withSpinner() - ), - options = list(handles = "w,e") - ) + ns <- NS(id) + shiny::tagList( + div( + id = "id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotation comparison to the reference", + id = "annotation_reference_comparison_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + height = "100%", + shiny::selectInput("ref", "Choose reference data", + choices = c(""), + selected = "" + ), + plotly::plotlyOutput(ns("deep_reference")) %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) + ) ) - ) } #' deep_reference Server Functions #' #' @noRd mod_deep_reference_server <- function(id, vals) { - shiny::moduleServer(id, function(input, output, session) { - ns <- session$ns + shiny::moduleServer(id, function(input, output, session) { + ns <- session$ns - output$deep_reference <- plotly::renderPlotly({ - shiny::req(vals$deep_reference_to_plot) - vals$can_plot_deep_ref_2 <- T - vals$deep_reference_to_plot + output$deep_reference <- plotly::renderPlotly({ + shiny::req(vals$deep_reference_to_plot) + vals$can_plot_deep_ref_2 <- T + vals$deep_reference_to_plot + }) }) - }) } ## To be copied in the UI diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 685c599..410b21a 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -8,162 +8,162 @@ #' #' @importFrom shiny NS tagList mod_deep_reference_2_ui <- function(id) { - ns <- NS(id) - tagList( - div( - id = "anno_div_1", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Annotations reference", - id = "annotation_reference_box", - height = "100%", - width = NULL, - collapsible = TRUE, - closable = TRUE, - plotly::plotlyOutput(ns("deep_reference_2")) %>% - shinycssloaders::withSpinner() - ), - options = list(handles = "w,e") - ) + ns <- NS(id) + tagList( + div( + id = "anno_div_1", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Annotations reference", + id = "annotation_reference_box", + height = "100%", + width = NULL, + collapsible = TRUE, + closable = TRUE, + plotly::plotlyOutput(ns("deep_reference_2")) %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) + ) ) - ) } #' deep_reference_2 Server Functions #' #' @noRd mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - # Silence R CMD note - x <- y <- yend <- xend <- - ID <- Software <- Chr <- - Type2 <- Start <- Stop <- - Type <- num_domains <- deepbgc_score <- - activity <- Score <- E_value <- P_value <- - RRE_start <- RRE_stop <- Probability <- - Name <- Full_name <- Hit <- Core <- - Bitscore <- Count <- Model <- Num_proteins <- - Num_domains <- Average_p <- Max_p <- NULL - output$deep_reference_2 <- plotly::renderPlotly({ - shiny::req(vals$can_plot_deep_ref_2 == T) - vals$can_plot_deep_ref_2 == F - rename_y_axis <- shiny::isolate(vals$rename_y_axis) - data <- NULL + moduleServer(id, function(input, output, session) { + ns <- session$ns + # Silence R CMD note + x <- y <- yend <- xend <- + ID <- Software <- Chr <- + Type2 <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- + activity <- Score <- E_value <- P_value <- + RRE_start <- RRE_stop <- Probability <- + Name <- Full_name <- Hit <- Core <- + Bitscore <- Count <- Model <- Num_proteins <- + Num_domains <- Average_p <- Max_p <- NULL + output$deep_reference_2 <- plotly::renderPlotly({ + shiny::req(vals$can_plot_deep_ref_2 == T) + vals$can_plot_deep_ref_2 == F + rename_y_axis <- shiny::isolate(vals$rename_y_axis) + data <- NULL - index <- 1 - for (upload in data_uploads) { - if (is.null(data)) { - if (vals[[upload]] == T) { - if (dim(vals[[data_to_use[index]]])[1] != 0) { - data <- vals[[data_to_use[index]]] + index <- 1 + for (upload in data_uploads) { + if (is.null(data)) { + if (vals[[upload]] == T) { + if (dim(vals[[data_to_use[index]]])[1] != 0) { + data <- vals[[data_to_use[index]]] + } + } + } + index <- index + 1 } - } - } - index <- index + 1 - } - tooltip <- c( - "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", - "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", - "Num_domains", "Num_proteins", "Average_p", "Max_p" - ) + tooltip <- c( + "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", + "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", + "Num_domains", "Num_proteins", "Average_p", "Max_p" + ) - plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) - if (vals$anti_data_input == TRUE) { - plot <- plot + - suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3)) - } - if (vals$deep_data_input == TRUE) { - if (dim(vals$seg_df_ref_d)[1] > 0) { - plot <- plot + - suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_d, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score, activity = activity - ), size = 3)) - } - } - if (vals$rre_data_input == TRUE) { - if (vals$rre_more == T) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, - Probability = Probability - ), size = 3)) - } else { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ), size = 3)) - } - } - if (vals$prism_data_input == TRUE) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3)) - } - if (vals$sempi_data_input == TRUE) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_s, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3)) - } - if (vals$prism_supp_plot == TRUE) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p_s, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score - ), size = 3)) - } - if (vals$arts_data_input == TRUE) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_ar, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, - Model = Model - ), size = 3)) - } - if (vals$gecco_data_input == TRUE) { - if (dim(vals$seg_df_ref_g)[1] > 0) { - plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, - Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p - ), size = 3)) - } - } - to_plot <- plotly::ggplotly(plot + - ggplot2::scale_y_discrete(labels = rename_y_axis) + - ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + - ggplot2::ylab("") + - ggplot2::xlab("Chromosome length") + - ggplot2::theme(legend.title = ggplot2::element_blank()) + - ggplot2::ggtitle("All annotations"), - # What actually to visualize in tooltip - tooltip = tooltip - ) - to_plot %>% plotly::layout( - legend = list( - font = list( - family = "sans-serif", - size = 12, - color = "#000" - ), - bordercolor = "#FFFFFF", - borderwidth = 2, - title = list(text = " Cluster Types ") - ), - autosize = TRUE - ) - }) # %>% shiny::debounce(200) - }) + plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) + if (vals$anti_data_input == TRUE) { + plot <- plot + + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } + if (vals$deep_data_input == TRUE) { + if (dim(vals$seg_df_ref_d)[1] > 0) { + plot <- plot + + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_d, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score, activity = activity + ), size = 3)) + } + } + if (vals$rre_data_input == TRUE) { + if (vals$rre_more == T) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, + Probability = Probability + ), size = 3)) + } else { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ), size = 3)) + } + } + if (vals$prism_data_input == TRUE) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } + if (vals$sempi_data_input == TRUE) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_s, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } + if (vals$prism_supp_plot == TRUE) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_p_s, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score + ), size = 3)) + } + if (vals$arts_data_input == TRUE) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_ar, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, + Model = Model + ), size = 3)) + } + if (vals$gecco_data_input == TRUE) { + if (dim(vals$seg_df_ref_g)[1] > 0) { + plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_g, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, + Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p + ), size = 3)) + } + } + to_plot <- plotly::ggplotly(plot + + ggplot2::scale_y_discrete(labels = rename_y_axis) + + ggplot2::theme(axis.text.y = ggplot2::element_text(size = 10)) + + ggplot2::ylab("") + + ggplot2::xlab("Chromosome length") + + ggplot2::theme(legend.title = ggplot2::element_blank()) + + ggplot2::ggtitle("All annotations"), + # What actually to visualize in tooltip + tooltip = tooltip + ) + to_plot %>% plotly::layout( + legend = list( + font = list( + family = "sans-serif", + size = 12, + color = "#000" + ), + bordercolor = "#FFFFFF", + borderwidth = 2, + title = list(text = " Cluster Types ") + ), + autosize = TRUE + ) + }) # %>% shiny::debounce(200) + }) } ## To be copied in the UI diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 53b0422..a3e9467 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -8,240 +8,240 @@ #' #' @importFrom shiny NS tagList mod_deepbgc_plots_ui <- function(id) { - ns <- NS(id) - tagList( - shiny::fluidRow( - tags$div( - id = "deep_data1", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison", - id = "deep_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput(ns("deep_barplot"), height = "500px", ) %>% - shinycssloaders::withSpinner() - ), options = list(handles = "w,e")) + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "deep_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison", + id = "deep_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput(ns("deep_barplot"), height = "500px", ) %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC comparison controls", + id = "deep_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput(ns("ref_comparison"), "Choose data for comparison with DeepBGC", choices = c(""), selected = ""), + # Score to use for thresholds + shiny::selectInput(ns("score_type"), "Choose score type to set threshold", + choices = c( + "Activity score" = "Activity", + "Cluster_type score" = "Cluster_Type", + "DeepBGC score" = "DeepBGC" + ), + selected = "Activity score" + ), + # Chose step for barplot (as a threshold to draw a bar) + shiny::sliderInput(ns("plot_step"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), + shiny::sliderInput(ns("plot_start"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ), options = list(handles = "w,e")) + ) + ) ), - div( - id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC comparison controls", - id = "deep_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput(ns("ref_comparison"), "Choose data for comparison with DeepBGC", choices = c(""), selected = ""), - # Score to use for thresholds - shiny::selectInput(ns("score_type"), "Choose score type to set threshold", - choices = c( - "Activity score" = "Activity", - "Cluster_type score" = "Cluster_Type", - "DeepBGC score" = "DeepBGC" - ), - selected = "Activity score" - ), - # Chose step for barplot (as a threshold to draw a bar) - shiny::sliderInput(ns("plot_step"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), - shiny::sliderInput(ns("plot_start"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ), options = list(handles = "w,e")) + shiny::fluidRow( + tags$div( + id = "deep_data2", + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "DeepBGC rate", + id = "deep_rate_box", + collapsible = TRUE, + height = "100%", + plotly::plotlyOutput(ns("deep_rate"), height = "500px", ) %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ) + ) ) - ) - ), - shiny::fluidRow( - tags$div( - id = "deep_data2", - div( - id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "DeepBGC rate", - id = "deep_rate_box", - collapsible = TRUE, - height = "100%", - plotly::plotlyOutput(ns("deep_rate"), height = "500px", ) %>% - shinycssloaders::withSpinner() - ), options = list(handles = "w,e")) - ) - ) ) - ) } #' deep_barplot Server Functions #' #' @noRd mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - # Silence R CMD note - Start <- Stop <- Source <- - Quantity <- Score <- Novelty_rate <- - Annotation_rate <- Skip_rate <- Rates_data <- - Rates <- NULL - output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) - - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - deep_inter_1 <- vals$deep_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type == "Activity") { - score <- "score_a" - } else if (input$score_type == "DeepBGC") { - score <- "score_d" - } else if (input$score_type == "Cluster_Type") { - score <- "score_c" - } - deep_inter_1$score <- deep_inter_1[[score]] - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)) { - deep_inter <- deep_inter_1 %>% - dplyr::filter(score >= dataframe_1 / 100) %>% - dplyr::select(Start, Stop) - if (length(deep_inter$Start) > 0) { - deep_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison == "Antismash") { - anti_inter <- shiny::isolate(vals$anti_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == "PRISM") { - anti_inter <- shiny::isolate(vals$prism_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == "SEMPI") { - anti_inter <- shiny::isolate(vals$sempi_data) %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - # Get the interception of two matrices - if (length(deep_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query, subject) - inter_bgc <- length(interseption@from) - len_new <- length(deep_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - if (input$ref_comparison == "Antismash") { - used_antismash <- length(shiny::isolate(vals$anti_data$Cluster)) - inter_bgc - cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == "PRISM") { - used_antismash <- length(shiny::isolate(vals$prism_data$Cluster)) - inter_bgc - cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison == "SEMPI") { - used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc - cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame( - c(rep(c(as.character(dataframe_1)), 3)), - cols, c(used_antismash, inter_bgc, len_new) - ) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - } - - # Store dataframe in reactive value for later use. - vals$fullness_deep <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText <- paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), - paste("DeepBGC score:", as.character(score_d)), - paste("Cluster type score:", as.character(score_c)), - sep = "\n" - ) - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + - ggplot2::geom_bar(position = "dodge", stat = "identity") + - ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + - ggplot2::xlab(paste(input$score_type, "Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) - }) - - output$deep_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_deep)) - - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_deep) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison == "Antismash") { - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Antismash` + test$`Only Antismash`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+Antismash` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash` / length(data$Cluster) - ) - } else if (input$ref_comparison == "PRISM") { - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") - test <- test %>% - dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+PRISM` + test$`Only PRISM`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+PRISM` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM` / length(data$Cluster) - ) - } else if (input$ref_comparison == "SEMPI") { - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") - test <- test %>% - dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`DeepBGC+SEMPI` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI` / length(data$Cluster) - ) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% - ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color = Rates)) + - ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type, "Score threshold")), - tooltip = c("Rate") - ) + moduleServer(id, function(input, output, session) { + ns <- session$ns + # Silence R CMD note + Start <- Stop <- Source <- + Quantity <- Score <- Novelty_rate <- + Annotation_rate <- Skip_rate <- Rates_data <- + Rates <- NULL + output$deep_barplot <- shiny::renderPlot({ + shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + deep_inter_1 <- vals$deep_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type == "Activity") { + score <- "score_a" + } else if (input$score_type == "DeepBGC") { + score <- "score_d" + } else if (input$score_type == "Cluster_Type") { + score <- "score_c" + } + deep_inter_1$score <- deep_inter_1[[score]] + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)) { + deep_inter <- deep_inter_1 %>% + dplyr::filter(score >= dataframe_1 / 100) %>% + dplyr::select(Start, Stop) + if (length(deep_inter$Start) > 0) { + deep_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison == "Antismash") { + anti_inter <- shiny::isolate(vals$anti_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == "PRISM") { + anti_inter <- shiny::isolate(vals$prism_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == "SEMPI") { + anti_inter <- shiny::isolate(vals$sempi_data) %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + # Get the interception of two matrices + if (length(deep_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query, subject) + inter_bgc <- length(interseption@from) + len_new <- length(deep_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + if (input$ref_comparison == "Antismash") { + used_antismash <- length(shiny::isolate(vals$anti_data$Cluster)) - inter_bgc + cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of Antismash and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == "PRISM") { + used_antismash <- length(shiny::isolate(vals$prism_data$Cluster)) - inter_bgc + cols <- c("Only PRISM", "DeepBGC+PRISM", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of PRISM and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == "SEMPI") { + used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc + cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame( + c(rep(c(as.character(dataframe_1)), 3)), + cols, c(used_antismash, inter_bgc, len_new) + ) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + } + + # Store dataframe in reactive value for later use. + vals$fullness_deep <- data.frame(fullnes_of_annotation) + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText <- paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), + paste("DeepBGC score:", as.character(score_d)), + paste("Cluster type score:", as.character(score_c)), + sep = "\n" + ) + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + + ggplot2::geom_bar(position = "dodge", stat = "identity") + + ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + + ggplot2::xlab(paste(input$score_type, "Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) + }) + + output$deep_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_deep)) + + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_deep) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison == "Antismash") { + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Antismash` + test$`Only Antismash`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+Antismash` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash` / length(data$Cluster) + ) + } else if (input$ref_comparison == "PRISM") { + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of DeepBGC/PRISM data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+PRISM` + test$`Only PRISM`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+PRISM` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM` / length(data$Cluster) + ) + } else if (input$ref_comparison == "SEMPI") { + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of DeepBGC/SEMPI data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+SEMPI` + test$`Only SEMPI`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`DeepBGC+SEMPI` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI` / length(data$Cluster) + ) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% + ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color = Rates)) + + ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type, "Score threshold")), + tooltip = c("Rate") + ) + }) }) - }) } ## To be copied in the UI # mod_deepbgc_plots_ui("deep_barplot_ui_1") diff --git a/R/mod_download.R b/R/mod_download.R index 19d5542..8f3cf1c 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -8,52 +8,52 @@ #' #' @importFrom shiny NS tagList mod_download_ui <- function(id) { - ns <- NS(id) - tagList( - div( - id = "id6", - shinydashboardPlus::box( - title = "Download data", - id = "download_data_box", - collapsible = TRUE, - closable = TRUE, - width = NULL, - shiny::downloadButton(ns("download"), "Download currently used datasets (as for Biocircos plot)") - ) + ns <- NS(id) + tagList( + div( + id = "id6", + shinydashboardPlus::box( + title = "Download data", + id = "download_data_box", + collapsible = TRUE, + closable = TRUE, + width = NULL, + shiny::downloadButton(ns("download"), "Download currently used datasets (as for Biocircos plot)") + ) + ) ) - ) } #' download Server Functions #' #' @noRd mod_download_server <- function(id) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - output$download <- shiny::downloadHandler( - filename = function() { - paste("datasets.zip") - }, - content = function(file) { - flst <- c() - # List files in directory - files_in_dir <- list.files() - # Iterate over those files and if found "_biocircos.csv" add to the flst vector - for (file_names in files_in_dir) { - if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { - flst <- c(flst, file_names) - } - } - # create the zip file from flst vector - group_by_script <- system.file("scripts", "group.py", package = "BGCViz") - flst <- c(flst, group_by_script) - utils::zip(file, flst) - }, - contentType = "application/zip" - ) - }) + moduleServer(id, function(input, output, session) { + ns <- session$ns + output$download <- shiny::downloadHandler( + filename = function() { + paste("datasets.zip") + }, + content = function(file) { + flst <- c() + # List files in directory + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add to the flst vector + for (file_names in files_in_dir) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } else if (grepl("group_by.csv", file_names, fixed = TRUE)) { + flst <- c(flst, file_names) + } + } + # create the zip file from flst vector + group_by_script <- system.file("scripts", "group.py", package = "BGCViz") + flst <- c(flst, group_by_script) + utils::zip(file, flst) + }, + contentType = "application/zip" + ) + }) } ## To be copied in the UI diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 01f2b72..08caee9 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -8,239 +8,239 @@ #' #' @importFrom shiny NS tagList mod_gecco_plots_ui <- function(id) { - ns <- NS(id) - tagList( - shiny::fluidRow( - tags$div( - id = "gecco_data1", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison", - id = "gecco_comparison_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - shiny::plotOutput(ns("gecco_barplot"), height = "500px") %>% - shinycssloaders::withSpinner() - ), options = list(handles = "w,e")) + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "gecco_data1", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison", + id = "gecco_comparison_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + shiny::plotOutput(ns("gecco_barplot"), height = "500px") %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ), + div( + id = "id2", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO rate", + id = "gecco_rate_box", + collapsible = TRUE, + closable = TRUE, + height = "100%", + plotly::plotlyOutput(ns("gecco_rate"), height = "500px", ) %>% + shinycssloaders::withSpinner() + ), options = list(handles = "w,e")) + ), + ) ), - div( - id = "id2", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO rate", - id = "gecco_rate_box", - collapsible = TRUE, - closable = TRUE, - height = "100%", - plotly::plotlyOutput(ns("gecco_rate"), height = "500px", ) %>% - shinycssloaders::withSpinner() - ), options = list(handles = "w,e")) - ), - ) - ), - shiny::fluidRow( - tags$div( - id = "gecco_data2", - div( - id = "id1", - shinyjqui::jqui_resizable(shinydashboardPlus::box( - title = "GECCO comparison controls", - id = "gecco_comparison_controls_box", - collapsible = TRUE, - closable = TRUE, - shiny::selectInput(ns("ref_comparison_gecco"), "Choose data for comparison with Gecco", choices = c(""), selected = ""), - shiny::selectInput(ns("score_type_gecco"), "Choose score type to set threshold", - choices = c( - "Average p-value" = "avg_p", - "Cluster_type score" = "Cluster_Type" - ), - selected = "avg_p" - ), - shiny::sliderInput(ns("plot_step_gecco"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), - shiny::sliderInput(ns("plot_start_gecco"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) - ), options = list(handles = "w,e")) + shiny::fluidRow( + tags$div( + id = "gecco_data2", + div( + id = "id1", + shinyjqui::jqui_resizable(shinydashboardPlus::box( + title = "GECCO comparison controls", + id = "gecco_comparison_controls_box", + collapsible = TRUE, + closable = TRUE, + shiny::selectInput(ns("ref_comparison_gecco"), "Choose data for comparison with Gecco", choices = c(""), selected = ""), + shiny::selectInput(ns("score_type_gecco"), "Choose score type to set threshold", + choices = c( + "Average p-value" = "avg_p", + "Cluster_type score" = "Cluster_Type" + ), + selected = "avg_p" + ), + shiny::sliderInput(ns("plot_step_gecco"), "Choose step for plots(barplot)", min = 1, max = 50, value = 10), + shiny::sliderInput(ns("plot_start_gecco"), "Chose plot start point(barplot)", min = 0, max = 99, value = 0) + ), options = list(handles = "w,e")) + ) + ) ) - ) ) - ) } #' gecco_plots Server Functions #' #' @noRd mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_gecco) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - # Silence R CMD note - Start <- Stop <- Source <- Quantity <- - Score <- Novelty_rate <- Annotation_rate <- - Skip_rate <- Skip_rate <- Rates_data <- - Rates <- NULL - output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) - - # Create empty dataframe to populate later - fullnes_of_annotation <- data.frame(NA, NA, NA) - colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") - fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) - - gecco_inter_1 <- vals$gecco_data_filtered - # Decide which score to use for basic thresholds on x axis - if (input$score_type_gecco == "avg_p") { - score <- "score_a" - } else if (input$score_type_gecco == "Cluster_Type") { - score <- "score_c" - } - gecco_inter_1$score <- gecco_inter_1[[score]] - - # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones - for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)) { - - # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix - gecco_inter <- gecco_inter_1 %>% - dplyr::filter(score >= dataframe_1 / 100) %>% - dplyr::select(Start, Stop) - if (length(gecco_inter$Start) > 0) { - gecco_inter$seqnames <- "chr" - } - - - # Store antismash bgc start amd atop values as matrix - if (input$ref_comparison_gecco == "Antismash") { - anti_inter <- vals$anti_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == "PRISM") { - anti_inter <- vals$prism_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } else if (input$ref_comparison_gecco == "SEMPI") { - anti_inter <- vals$sempi_data %>% - dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" - } - - - - - # Get the interception of two matrices - if (length(gecco_inter$Start) > 0) { - query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) - subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) - interseption <- GenomicRanges::findOverlaps(query, subject) - inter_bgc <- length(interseption@from) - len_new <- length(gecco_inter$seqnames) - inter_bgc - } else { - inter_bgc <- 0 - len_new <- 0 - } - - - if (input$ref_comparison_gecco == "Antismash") { - used_antismash <- length(vals$anti_data$Cluster) - inter_bgc - cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == "PRISM") { - used_antismash <- length(vals$prism_data$Cluster) - inter_bgc - cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == "SEMPI") { - used_antismash <- length(vals$sempi_data$Cluster) - inter_bgc - cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") - title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") - } - - # Combine all vectors into one dataframe - fullnes_of_annotation_1 <- data.frame( - c(rep(c(as.character(dataframe_1)), 3)), - cols, c(used_antismash, inter_bgc, len_new) - ) - colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") - # Combine previously created empty dataframe with this one to store results - fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) - } - - # Store dataframe in reactive value for later use. - vals$fullness_gecco <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) - - # Make text to show on a barplot to point on additional scores' thresholds - annotateText <- paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), - paste("Cluster type score:", as.character(score_cluster_gecco)), - sep = "\n" - ) - - # Plot the barplot - ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + - ggplot2::geom_bar(position = "dodge", stat = "identity") + - ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + - ggplot2::xlab(paste(input$score_type, "Score")) + - title + - ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) - }) - - # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data - output$gecco_rate <- plotly::renderPlotly({ - shiny::req(!is.null(vals$fullness_gecco)) - - # Reuse stored dataframe from previous plot - # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data - # For more information please see previous shiny::renderPlot - fullnes_of_annotation <- data.frame(vals$fullness_gecco) - - # Store dataframe into variable. Widen it to calculate rates - test <- fullnes_of_annotation %>% - tidyr::pivot_wider(names_from = Source, values_from = Quantity) - if (input$ref_comparison_gecco == "Antismash") { - data <- vals$anti_data - title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") - test <- test %>% - # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) - dplyr::mutate( - Novelty_rate = test$`Only GECCO` / (test$`GECCO+Antismash` + test$`Only Antismash`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+Antismash` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only Antismash` / length(data$Cluster) - ) - } else if (input$ref_comparison_gecco == "PRISM") { - data <- vals$prism_data - title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") - test <- test %>% - dplyr::mutate( - Novelty_rate = test$`Only GECCO` / (test$`GECCO+PRISM` + test$`Only PRISM`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+PRISM` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only PRISM` / length(data$Cluster) - ) - } else if (input$ref_comparison_gecco == "SEMPI") { - data <- vals$sempi_data - title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") - test <- test %>% - dplyr::mutate( - Novelty_rate = test$`Only GECCO` / (test$`GECCO+SEMPI` + test$`Only SEMPI`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) - Annotation_rate = test$`GECCO+SEMPI` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed - Skip_rate = test$`Only SEMPI` / length(data$Cluster) - ) - } - - # Calculate rates and plot interactive plot with plotly - plotly::ggplotly(test %>% - tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% - ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + - ggplot2::geom_line(ggplot2::aes(color = Rates)) + - ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + - title + - ggplot2::ylab("Rate") + - ggplot2::xlab(paste(input$score_type, "Score threshold")), - tooltip = c("Rate") - ) + moduleServer(id, function(input, output, session) { + ns <- session$ns + # Silence R CMD note + Start <- Stop <- Source <- Quantity <- + Score <- Novelty_rate <- Annotation_rate <- + Skip_rate <- Skip_rate <- Rates_data <- + Rates <- NULL + output$gecco_barplot <- shiny::renderPlot({ + shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + + # Create empty dataframe to populate later + fullnes_of_annotation <- data.frame(NA, NA, NA) + colnames(fullnes_of_annotation) <- c("Score", "Source", "Quantity") + fullnes_of_annotation <- tidyr::drop_na(fullnes_of_annotation) + + gecco_inter_1 <- vals$gecco_data_filtered + # Decide which score to use for basic thresholds on x axis + if (input$score_type_gecco == "avg_p") { + score <- "score_a" + } else if (input$score_type_gecco == "Cluster_Type") { + score <- "score_c" + } + gecco_inter_1$score <- gecco_inter_1[[score]] + + # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones + for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)) { + + # dplyr::filter dataframe. Get only rows, which >= of a given thresholds. dplyr::select only start and stop of those rows as a matrix + gecco_inter <- gecco_inter_1 %>% + dplyr::filter(score >= dataframe_1 / 100) %>% + dplyr::select(Start, Stop) + if (length(gecco_inter$Start) > 0) { + gecco_inter$seqnames <- "chr" + } + + + # Store antismash bgc start amd atop values as matrix + if (input$ref_comparison_gecco == "Antismash") { + anti_inter <- vals$anti_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == "PRISM") { + anti_inter <- vals$prism_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison_gecco == "SEMPI") { + anti_inter <- vals$sempi_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + + + + + # Get the interception of two matrices + if (length(gecco_inter$Start) > 0) { + query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) + subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) + interseption <- GenomicRanges::findOverlaps(query, subject) + inter_bgc <- length(interseption@from) + len_new <- length(gecco_inter$seqnames) - inter_bgc + } else { + inter_bgc <- 0 + len_new <- 0 + } + + + if (input$ref_comparison_gecco == "Antismash") { + used_antismash <- length(vals$anti_data$Cluster) - inter_bgc + cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of Antismash and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "PRISM") { + used_antismash <- length(vals$prism_data$Cluster) - inter_bgc + cols <- c("Only PRISM", "GECCO+PRISM", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of PRISM and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "SEMPI") { + used_antismash <- length(vals$sempi_data$Cluster) - inter_bgc + cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") + title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } + + # Combine all vectors into one dataframe + fullnes_of_annotation_1 <- data.frame( + c(rep(c(as.character(dataframe_1)), 3)), + cols, c(used_antismash, inter_bgc, len_new) + ) + colnames(fullnes_of_annotation_1) <- c("Score", "Source", "Quantity") + # Combine previously created empty dataframe with this one to store results + fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) + } + + # Store dataframe in reactive value for later use. + vals$fullness_gecco <- data.frame(fullnes_of_annotation) + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + + # Make text to show on a barplot to point on additional scores' thresholds + annotateText <- paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), + paste("Cluster type score:", as.character(score_cluster_gecco)), + sep = "\n" + ) + + # Plot the barplot + ggplot2::ggplot(fullnes_of_annotation, ggplot2::aes(fill = Source, y = Quantity, x = Score)) + + ggplot2::geom_bar(position = "dodge", stat = "identity") + + ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + + ggplot2::xlab(paste(input$score_type, "Score")) + + title + + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) + }) + + # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data + output$gecco_rate <- plotly::renderPlotly({ + shiny::req(!is.null(vals$fullness_gecco)) + + # Reuse stored dataframe from previous plot + # This dataframe stores data for number of intercepted/non intercepted clusters for DeepBGC and antismash data + # For more information please see previous shiny::renderPlot + fullnes_of_annotation <- data.frame(vals$fullness_gecco) + + # Store dataframe into variable. Widen it to calculate rates + test <- fullnes_of_annotation %>% + tidyr::pivot_wider(names_from = Source, values_from = Quantity) + if (input$ref_comparison_gecco == "Antismash") { + data <- vals$anti_data + title <- ggplot2::ggtitle("Rates of GECCO/Antismash data annotation") + test <- test %>% + # Calculate rates. Novelty is nummber of clusters annotated only by deepbgc/ all clusters annotated by antismash + (antismash + deepbgc) + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+Antismash` + test$`Only Antismash`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+Antismash` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only Antismash` / length(data$Cluster) + ) + } else if (input$ref_comparison_gecco == "PRISM") { + data <- vals$prism_data + title <- ggplot2::ggtitle("Rates of GECCO/PRISM data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+PRISM` + test$`Only PRISM`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+PRISM` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only PRISM` / length(data$Cluster) + ) + } else if (input$ref_comparison_gecco == "SEMPI") { + data <- vals$sempi_data + title <- ggplot2::ggtitle("Rates of GECCO/SEMPI data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only GECCO` / (test$`GECCO+SEMPI` + test$`Only SEMPI`), + # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + Annotation_rate = test$`GECCO+SEMPI` / length(data$Cluster), + # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + Skip_rate = test$`Only SEMPI` / length(data$Cluster) + ) + } + + # Calculate rates and plot interactive plot with plotly + plotly::ggplotly(test %>% + tidyr::pivot_longer(cols = c(Novelty_rate, Annotation_rate, Skip_rate), names_to = "Rates", values_to = "Rates_data") %>% + ggplot2::ggplot(ggplot2::aes(x = as.numeric(Score), y = as.numeric(Rates_data), Rate = as.numeric(Rates_data))) + + ggplot2::geom_line(ggplot2::aes(color = Rates)) + + ggplot2::geom_point(ggplot2::aes(shape = Rates), alpha = .4, size = 3) + + title + + ggplot2::ylab("Rate") + + ggplot2::xlab(paste(input$score_type, "Score threshold")), + tooltip = c("Rate") + ) + }) }) - }) } ## To be copied in the UI diff --git a/R/mod_group_table.R b/R/mod_group_table.R index c029cfa..1f9b882 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -8,129 +8,129 @@ #' #' @importFrom shiny NS tagList mod_group_table_ui <- function(id) { - ns <- NS(id) - tagList( - div( - id = "id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Group table", - id = "group_table_box", - collapsible = TRUE, - closable = TRUE, - style = "overflow-x: scroll;height:700px;overflow-y: scroll;", - height = "100%", - shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ""), - shiny::tableOutput(ns("group_table")) %>% - shinycssloaders::withSpinner() - ), - options = list(handles = "w,e") - ) + ns <- NS(id) + tagList( + div( + id = "id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Group table", + id = "group_table_box", + collapsible = TRUE, + closable = TRUE, + style = "overflow-x: scroll;height:700px;overflow-y: scroll;", + height = "100%", + shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ""), + shiny::tableOutput(ns("group_table")) %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) + ) ) - ) } #' group_table Server Functions #' #' @noRd mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - output$group_table <- shiny::renderTable({ - shiny::req(vals$data_upload_count > 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) - if (is.null(vals$inters_filtered)) { - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) - colnames(df_test) <- abbr - added_inters <- c(soft_names[match(input$group_by, soft_namings)]) - add_inters <- list() - if (input$count_all == F) { - df_test[nrow(df_test) + 1, ] <- NA - } else { - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- abbr - df_test[[abbr[match(input$group_by, soft_namings)]]] <- vals[[selected_dataframe]]$Cluster - df_test[nrow(df_test) + 1, ] <- NA - } - for (i in seq(1:length(data_uploads))) { - if (input$group_by == soft_namings[[i]]) { - exclude <- i - soft_n <- names(inters[[soft_names[i]]]) - index <- 1 - for (d in seq(1:length(soft_n))) { - name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))) { - if (name == soft_names[match(soft_n, soft_names)][h]) { - colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) - } + moduleServer(id, function(input, output, session) { + ns <- session$ns + output$group_table <- shiny::renderTable({ + shiny::req(vals$data_upload_count > 1) + shiny::req(vals$need_filter == F) + shiny::req(vals$can_plot_group_table == T) + if (is.null(vals$inters_filtered)) { + inters <- vals$inters + } else { + inters <- vals$inters_filtered } - - index <- index + 1 - } - excluded_names <- abbr[abbr != as.name(abbr[i])] - data <- df_test %>% - dplyr::group_by_if(colnames(df_test) == abbr[i]) %>% - dplyr::summarise( - a = paste(eval(as.name(excluded_names[1])), collapse = ","), - b = paste(eval(as.name(excluded_names[2])), collapse = ","), - c = paste(eval(as.name(excluded_names[3])), collapse = ","), - d = paste(eval(as.name(excluded_names[4])), collapse = ","), - e = paste(eval(as.name(excluded_names[5])), collapse = ","), - f = paste(eval(as.name(excluded_names[6])), collapse = ","), - g = paste(eval(as.name(excluded_names[7])), collapse = ",") - ) - colnames(data) <- c(abbr[i], excluded_names) - for (p in abbr) { - data[[p]] <- gsub("NA,|,NA", "", data[[p]]) - data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, abbr)] - } - data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))) { - if (vals[[data_uploads[f]]] != TRUE) { - data <- data %>% - dplyr::select(-as.name(soft_namings[f])) + df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) + colnames(df_test) <- abbr + added_inters <- c(soft_names[match(input$group_by, soft_namings)]) + add_inters <- list() + if (input$count_all == F) { + df_test[nrow(df_test) + 1, ] <- NA + } else { + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] + df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- abbr + df_test[[abbr[match(input$group_by, soft_namings)]]] <- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test) + 1, ] <- NA } - } - } else { - if (!(soft_names[i] %in% added_inters)) { - matched_v <- match(added_inters, names(inters[[soft_names[i]]])) - soft_n <- soft_names[ -(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])) { - if (!(inter %in% added_inters)) { - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) - add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) - } + for (i in seq(1:length(data_uploads))) { + if (input$group_by == soft_namings[[i]]) { + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))) { + if (name == soft_names[match(soft_n, soft_names)][h]) { + colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = T) + } + } + + index <- index + 1 + } + excluded_names <- abbr[abbr != as.name(abbr[i])] + data <- df_test %>% + dplyr::group_by_if(colnames(df_test) == abbr[i]) %>% + dplyr::summarise( + a = paste(eval(as.name(excluded_names[1])), collapse = ","), + b = paste(eval(as.name(excluded_names[2])), collapse = ","), + c = paste(eval(as.name(excluded_names[3])), collapse = ","), + d = paste(eval(as.name(excluded_names[4])), collapse = ","), + e = paste(eval(as.name(excluded_names[5])), collapse = ","), + f = paste(eval(as.name(excluded_names[6])), collapse = ","), + g = paste(eval(as.name(excluded_names[7])), collapse = ",") + ) + colnames(data) <- c(abbr[i], excluded_names) + for (p in abbr) { + data[[p]] <- gsub("NA,|,NA", "", data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, abbr)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))) { + if (vals[[data_uploads[f]]] != TRUE) { + data <- data %>% + dplyr::select(-as.name(soft_namings[f])) + } + } + } else { + if (!(soft_names[i] %in% added_inters)) { + matched_v <- match(added_inters, names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])) { + if (!(inter %in% added_inters)) { + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } + } + added_inters <- c(added_inters, soft_names[i]) + } + } } - added_inters <- c(added_inters, soft_names[i]) - } - } - } - for (name in names(add_inters)) { - data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- - paste(data_to_add[!(data_to_add %in% - unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") - } - utils::write.csv(data, "group_by.csv", row.names = F) - data + for (name in names(add_inters)) { + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- + paste(data_to_add[!(data_to_add %in% + unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + utils::write.csv(data, "group_by.csv", row.names = F) + data + }) }) - }) } ## To be copied in the UI # mod_group_table_ui("group_table_ui_1") ## To be copied in the server -# mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, -#soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) +# mod_group_table_server("group_table_ui_1", vals=vals, data_uploads = data_uploads, +# soft_names = soft_names, soft_namings = soft_namings, data_to_use = data_to_use, abbr = abbr) diff --git a/R/run_app.R b/R/run_app.R index 46442a4..4b3476b 100644 --- a/R/run_app.R +++ b/R/run_app.R @@ -5,7 +5,7 @@ #' @inheritParams shiny::shinyApp #' @return running shiny app #' -#' @examples +#' @examples #' \dontrun{ #' run_app() #' } @@ -18,15 +18,15 @@ run_app <- function(onStart = NULL, enableBookmarking = NULL, uiPattern = "/", ...) { - with_golem_options( - app = shinyApp( - ui = app_ui, - server = app_server, - onStart = onStart, - options = options, - enableBookmarking = enableBookmarking, - uiPattern = uiPattern - ), - golem_opts = list(...) - ) + with_golem_options( + app = shinyApp( + ui = app_ui, + server = app_server, + onStart = onStart, + options = options, + enableBookmarking = enableBookmarking, + uiPattern = uiPattern + ), + golem_opts = list(...) + ) } diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index b07cae1..b5c6eb2 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -1,19 +1,19 @@ #' geom_anti #' -#' @description A function, that returns antismash geom with the legend, +#' @description A function, that returns antismash geom with the legend, #' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd geom_anti <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop <- Type <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } #' geom_prism #' @@ -23,61 +23,61 @@ geom_anti <- function(data, rre_more) { #' #' @noRd geom_prism <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop <- Type <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } #' geom_deep #' -#' @description A function, that returns deepbgc geom with the legend, +#' @description A function, that returns deepbgc geom with the legend, #' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd geom_deep <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type <- - Software <- ID <- Start <- Stop <- - Type <- num_domains <- deepbgc_score <- - activity <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, - deepbgc_score = deepbgc_score, activity = activity - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type <- + Software <- ID <- Start <- Stop <- + Type <- num_domains <- deepbgc_score <- + activity <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, num_domains = num_domains, + deepbgc_score = deepbgc_score, activity = activity + ), size = 3) } #' geom_rre #' -#' @description A function, that returns RRE-Finder geom with the legend, +#' @description A function, that returns RRE-Finder geom with the legend, #' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd geom_rre <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type <- - Score <- Software <- ID <- Start <- - Stop <- Type <- E_value <- P_value <- RRE_start <- - RRE_stop <- Probability <- NULL - if (rre_more == T) { - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type, Score = Score, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, - P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, - Probability = Probability - ), size = 3) - } else { - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value - ), size = 3) - } + # Silence R CMD note + x <- y <- xend <- yend <- Type <- + Score <- Software <- ID <- Start <- + Stop <- Type <- E_value <- P_value <- RRE_start <- + RRE_stop <- Probability <- NULL + if (rre_more == T) { + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Score = Score, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, + P_value = P_value, RRE_start = RRE_start, RRE_stop = RRE_stop, + Probability = Probability + ), size = 3) + } else { + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value + ), size = 3) + } } #' geom_sempi #' @@ -87,53 +87,53 @@ geom_rre <- function(data, rre_more) { #' #' @noRd geom_sempi <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop <- - Type <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- + Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) } #' deep_reference #' -#' @description A function, that returns Prism-Supplement geom with the legend, +#' @description A function, that returns Prism-Supplement geom with the legend, #' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd geom_prism_supp <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- - Software <- ID <- Start <- Stop <- Type <- Name <- - Full_name <- Score <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, - Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, - Score = Score - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- Name <- + Full_name <- Score <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, + Start = Start, Stop = Stop, Type = Type, Name = Name, Full_name = Full_name, + Score = Score + ), size = 3) } #' geom_arts #' -#' @description A function, that returns ARTS geom with the legend, +#' @description A function, that returns ARTS geom with the legend, #' specific to this software (to show on mouse hover). #' #' @return geom_segment with specific fields #' #' @noRd geom_arts <- function(data, rre_more) { - # Silence R CMD error - x <- y <- xend <- yend <- Type2 <- - Start <- Stop <- Type <- ID <- Hit <- - Software <- Core <- E_value <- - Bitscore <- Count <- Model <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, - Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model - ), size = 3) + # Silence R CMD error + x <- y <- xend <- yend <- Type2 <- + Start <- Stop <- Type <- ID <- Hit <- + Software <- Core <- E_value <- + Bitscore <- Count <- Model <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Hit = Hit, + Core = Core, E_value = E_value, Bitscore = Bitscore, Count = Count, Model = Model + ), size = 3) } #' geom_gecco #' @@ -143,15 +143,15 @@ geom_arts <- function(data, rre_more) { #' #' @noRd geom_gecco <- function(data, rre_more) { - # Silence R CMD note - x <- y <- xend <- yend <- Type2 <- Software <- - ID <- Start <- Stop <- Type <- Num_proteins <- - Num_domains <- Average_p <- Max_p <- NULL - ggplot2::geom_segment(data = data, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, - Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p - ), size = 3) + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- Software <- + ID <- Start <- Stop <- Type <- Num_proteins <- + Num_domains <- Average_p <- Max_p <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type, Num_proteins = Num_proteins, + Num_domains = Num_domains, Average_p = Average_p, Max_p = Max_p + ), size = 3) } #' add_more_annot #' @@ -161,26 +161,26 @@ geom_gecco <- function(data, rre_more) { #' #' @noRd add_more_annot <- function(seg_df, plot, soft_names, index, rre_more) { - if (dim(seg_df)[1] > 0) { - if (soft_names[index] == "anti") { - plot <- plot + geom_anti(seg_df) - } else if (soft_names[index] == "sempi") { - plot <- plot + geom_sempi(seg_df) - } else if (soft_names[index] == "prism") { - plot <- plot + geom_prism(seg_df) - } else if (soft_names[index] == "prism_supp") { - plot <- plot + geom_prism_supp(seg_df) - } else if (soft_names[index] == "arts") { - plot <- plot + geom_arts(seg_df) - } else if (soft_names[index] == "deep") { - plot <- plot + geom_deep(seg_df) - } else if (soft_names[index] == "rre") { - plot <- plot + geom_rre(seg_df, rre_more) - } else if (soft_names[index] == "gecco") { - plot <- plot + geom_gecco(seg_df) + if (dim(seg_df)[1] > 0) { + if (soft_names[index] == "anti") { + plot <- plot + geom_anti(seg_df) + } else if (soft_names[index] == "sempi") { + plot <- plot + geom_sempi(seg_df) + } else if (soft_names[index] == "prism") { + plot <- plot + geom_prism(seg_df) + } else if (soft_names[index] == "prism_supp") { + plot <- plot + geom_prism_supp(seg_df) + } else if (soft_names[index] == "arts") { + plot <- plot + geom_arts(seg_df) + } else if (soft_names[index] == "deep") { + plot <- plot + geom_deep(seg_df) + } else if (soft_names[index] == "rre") { + plot <- plot + geom_rre(seg_df, rre_more) + } else if (soft_names[index] == "gecco") { + plot <- plot + geom_gecco(seg_df) + } + return(plot) + } else { + return(plot) } - return(plot) - } else { - return(plot) - } } diff --git a/data-raw/deep_data.R b/data-raw/deep_data.R index fce0b17..10f8374 100644 --- a/data-raw/deep_data.R +++ b/data-raw/deep_data.R @@ -5,6 +5,6 @@ drop_cols <- c("nrp", "polyketide") colnames(deep_data) <- stringr::str_to_lower(colnames(deep_data)) # Read data deep_data <- deep_data %>% - dplyr::mutate(pks = polyketide, nrps = nrp) %>% - dplyr::select(-dplyr::one_of(drop_cols)) + dplyr::mutate(pks = polyketide, nrps = nrp) %>% + dplyr::select(-dplyr::one_of(drop_cols)) usethis::use_data(deep_data, overwrite = TRUE) diff --git a/data-raw/gecco_data.R b/data-raw/gecco_data.R index 44381e3..0be897a 100644 --- a/data-raw/gecco_data.R +++ b/data-raw/gecco_data.R @@ -2,9 +2,9 @@ gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv") # Silence R CMD note polyketide_probability <- other_probability <- - nrp_probability <- alkaloid_probability <- - terpene_probability <- saccharide_probability <- - ripp_probability <- NULL + nrp_probability <- alkaloid_probability <- + terpene_probability <- saccharide_probability <- + ripp_probability <- NULL gecco_data$chromosome <- rep("G", length(gecco_data$type)) # Type magic gecco_data$Cluster <- seq(1:length(gecco_data$chromosome)) @@ -15,16 +15,16 @@ gecco_data$Type <- gsub("nrp", "nrps", gecco_data$Type) gecco_data$Type <- gsub("unknown", "under_threshold", gecco_data$Type) gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) drop_cols <- c( - "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability", "other_probability" + "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", + "terpene_probability", "nrp_probability", "other_probability" ) # Read data gecco_data <- gecco_data %>% - dplyr::mutate( - pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, - terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability - ) %>% - dplyr::select(-dplyr::one_of(drop_cols)) + dplyr::mutate( + pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability + ) %>% + dplyr::select(-dplyr::one_of(drop_cols)) gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$proteins), ";"), length) gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R index 10624cf..78b87cc 100644 --- a/data-raw/rre_data.R +++ b/data-raw/rre_data.R @@ -4,8 +4,8 @@ Gene.name <- Coordinates <- NULL # Silence R CMD error rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- rre_data %>% - tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% - tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") + tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% + tidyr::separate(Coordinates, c("Start", "Stop"), sep = "-") # Add chromosome info column rre_data$chromosome <- rep("RRE", length(rre_data$Sequence)) # Add ID column diff --git a/tests/spelling.R b/tests/spelling.R index 13f77d9..2f02e7b 100644 --- a/tests/spelling.R +++ b/tests/spelling.R @@ -1,6 +1,6 @@ if (requireNamespace("spelling", quietly = TRUE)) { - spelling::spell_check_test( - vignettes = TRUE, error = FALSE, - skip_on_cran = TRUE - ) + spelling::spell_check_test( + vignettes = TRUE, error = FALSE, + skip_on_cran = TRUE + ) } diff --git a/tests/testthat/test-app.R b/tests/testthat/test-app.R index 8849056..94b301e 100644 --- a/tests/testthat/test-app.R +++ b/tests/testthat/test-app.R @@ -1,3 +1,3 @@ test_that("multiplication works", { - expect_equal(2 * 2, 4) + expect_equal(2 * 2, 4) }) diff --git a/tests/testthat/test-golem-recommended.R b/tests/testthat/test-golem-recommended.R index facc6b4..c41621c 100644 --- a/tests/testthat/test-golem-recommended.R +++ b/tests/testthat/test-golem-recommended.R @@ -1,26 +1,27 @@ test_that("app ui", { - ui <- app_ui() - golem::expect_shinytaglist(ui) - # Check that formals have not been removed - fmls <- formals(app_ui) - for (i in c("request")) { - expect_true(i %in% names(fmls)) - } + ui <- app_ui() + golem::expect_shinytaglist(ui) + # Check that formals have not been removed + fmls <- formals(app_ui) + for (i in c("request")) { + expect_true(i %in% names(fmls)) + } }) test_that("app server", { - server <- app_server - expect_is(server, "function") - # Check that formals have not been removed - fmls <- formals(app_server) - for (i in c("input", "output", "session")) { - expect_true(i %in% names(fmls)) - } + server <- app_server + expect_is(server, "function") + # Check that formals have not been removed + fmls <- formals(app_server) + for (i in c("input", "output", "session")) { + expect_true(i %in% names(fmls)) + } }) # Configure this test to fit your need test_that( - "app launches", { - golem::expect_running(sleep = 5) - } + "app launches", + { + golem::expect_running(sleep = 5) + } ) From 934fb8d2f6acc9e88446530a55e510e3c277b69e Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 13:38:03 +0200 Subject: [PATCH 157/199] Added NEWS file Former-commit-id: 22834408210dc197d96f19bce38d108fd4bd761e --- NEWS | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 NEWS diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..f8499d4 --- /dev/null +++ b/NEWS @@ -0,0 +1,2 @@ +Changes in version 0.99.0 (2022-06-06) ++ Submitted to Bioconductor \ No newline at end of file From abc97b4864c569e5aaee15977b4106319fe7d77b Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 13:55:00 +0200 Subject: [PATCH 158/199] Changed T/F to TRUE/FALSE Former-commit-id: cf4202fdc36a2f84bf0f738cb52c5b9be2a1f885 --- R/app_server.R | 298 +++++++++++++++++----------------- R/fct_biocircos.R | 4 +- R/fct_deep_reference.R | 30 ++-- R/fct_format_transformation.R | 6 +- R/fct_group_table.R | 2 +- R/fct_helpers.R | 8 +- R/fct_reading_functions.R | 20 +-- R/fct_reading_processing.R | 10 +- R/fct_validation.R | 10 +- R/mod_barplot_rank.R | 6 +- R/mod_biocircos.R | 2 +- R/mod_deep_reference.R | 2 +- R/mod_deep_reference_2.R | 8 +- R/mod_deepbgc_plots.R | 6 +- R/mod_gecco_plots.R | 6 +- R/mod_group_table.R | 10 +- R/utils_deep_reference.R | 2 +- 17 files changed, 215 insertions(+), 215 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 0baaed7..f705a43 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -60,16 +60,16 @@ app_server <- function(input, output, session) { rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = F, dup_data_input = F, arts_data = NULL, arts_data_input = F, seg_df_ref_ar = NULL, + known_data_input = FALSE, dup_data_input = FALSE, arts_data = NULL, arts_data_input = FALSE, seg_df_ref_ar = NULL, df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, - gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = F, computed = NULL, - need_filter = F, filter_data = F, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), - renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = F, can_plot_deep_ref = F, - can_plot_biocircos = F, can_plot_barplot_rank = F, can_plot_group_table = F, prism_supp_plot = F + gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = FALSE, computed = NULL, + need_filter = FALSE, filter_data = FALSE, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), + renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = FALSE, can_plot_deep_ref = FALSE, + can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE ) vals$computed <- list( - anti = F, deep = F, gecco = F, arts = F, prism = F, sempi = F, prism_supp = F, rre = F + anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") @@ -78,7 +78,7 @@ app_server <- function(input, output, session) { coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column", options = list(dom = "t", ordering = F)) + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = FALSE, editable = "column", options = list(dom = "t", ordering = FALSE)) # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", @@ -132,16 +132,16 @@ app_server <- function(input, output, session) { options(shiny.maxRequestSize = 100 * 1024^2) disable_event_logic <- function() { - vals$can_plot_deep_ref <- F - vals$can_plot_biocircos <- F - vals$can_plot_barplot_rank <- F - vals$can_plot_group_table <- F + vals$can_plot_deep_ref <- FALSE + vals$can_plot_biocircos <- FALSE + vals$can_plot_barplot_rank <- FALSE + vals$can_plot_group_table <- FALSE } enable_event_logic <- function() { - vals$can_plot_deep_ref <- T - vals$can_plot_biocircos <- T - vals$can_plot_barplot_rank <- T - vals$can_plot_group_table <- T + vals$can_plot_deep_ref <- TRUE + vals$can_plot_biocircos <- TRUE + vals$can_plot_barplot_rank <- TRUE + vals$can_plot_group_table <- TRUE } ########################################################################### @@ -155,8 +155,8 @@ app_server <- function(input, output, session) { # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - process_antismash <- function(data, example_data = F) { - if (example_data == T) { + process_antismash <- function(data, example_data = FALSE) { + if (example_data == TRUE) { anti_data <- data } else { anti_data <- read_anti(data) @@ -190,8 +190,8 @@ app_server <- function(input, output, session) { ) } } - process_gecco <- function(data, example_data = F) { - if (example_data == T) { + process_gecco <- function(data, example_data = FALSE) { + if (example_data == TRUE) { gecco_data <- data } else { gecco_data <- read_gecco(data) @@ -217,29 +217,29 @@ app_server <- function(input, output, session) { ) } } - process_prism <- function(data, json = T, example_data = F) { - if (example_data == T) { + process_prism <- function(data, json = TRUE, example_data = FALSE) { + if (example_data == TRUE) { prism_data <- data prism_data$Type <- stringr::str_trim(tolower(prism_data$Type)) prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) - vals$prism_supp_data_input <- T + vals$prism_supp_data_input <- TRUE vals$prism_supp <- BGCViz:::prism_supp_data vals$prism_supp_data <- BGCViz:::prism_supp_data - vals$prism_supp_plot <- T - vals$prism_json <- T - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + vals$prism_supp_plot <- TRUE + vals$prism_json <- TRUE + shiny::updateCheckboxInput(inputId = "prism_supp", value = TRUE) } else { - if (json == T) { - processed <- read_prism(data, json = T) + if (json == TRUE) { + processed <- read_prism(data, json = TRUE) prism_data <- processed[[1]] - vals$prism_supp_data_input <- T + vals$prism_supp_data_input <- TRUE vals$prism_supp <- processed[[2]] vals$prism_supp_data <- processed[[2]] - vals$prism_json <- T - vals$prism_supp_plot <- T - shiny::updateCheckboxInput(inputId = "prism_supp", value = T) + vals$prism_json <- TRUE + vals$prism_supp_plot <- TRUE + shiny::updateCheckboxInput(inputId = "prism_supp", value = TRUE) } else { - processed <- read_prism(data, json = F) + processed <- read_prism(data, json = FALSE) prism_data <- processed[[1]] } } @@ -281,14 +281,14 @@ app_server <- function(input, output, session) { ) } } - process_sempi <- function(data, zip = T, example_data = F) { - if (example_data == T) { + process_sempi <- function(data, zip = TRUE, example_data = FALSE) { + if (example_data == TRUE) { sempi_data <- data } else { - if (zip == T) { - sempi_data <- read_sempi(data, zip = T) + if (zip == TRUE) { + sempi_data <- read_sempi(data, zip = TRUE) } else { - sempi_data <- read_sempi(data, zip = F) + sempi_data <- read_sempi(data, zip = FALSE) } } vals$sempi_type <- sempi_data$Type2 @@ -324,12 +324,12 @@ app_server <- function(input, output, session) { ) } } - process_arts_archive <- function(archive, zip = T, example_data = F) { - if (example_data == T) { + process_arts_archive <- function(archive, zip = TRUE, example_data = FALSE) { + if (example_data == TRUE) { arts_data <- BGCViz:::arts_data } else { - if (zip == T) { - arts_data <- read_arts_archive(archive, zip = T) + if (zip == TRUE) { + arts_data <- read_arts_archive(archive, zip = TRUE) } else { arts_data <- utils::read.csv(archive) } @@ -340,7 +340,7 @@ app_server <- function(input, output, session) { vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") update_ui_with_data() vals$data_upload_count <- vals$data_upload_count + 1 - vals$arts_data_input <- T + vals$arts_data_input <- TRUE dup_table_id <- vals$arts_data %>% dplyr::filter(Core != "Not_core") shiny::updateSelectInput(session, "dup_choice", @@ -359,8 +359,8 @@ app_server <- function(input, output, session) { ) } } - process_deep <- function(data, example_data = F) { - if (example_data == T) { + process_deep <- function(data, example_data = FALSE) { + if (example_data == TRUE) { deep_data <- data } else { deep_data <- read_deep(data) @@ -393,14 +393,14 @@ app_server <- function(input, output, session) { ) } } - process_rre <- function(data, example_data = F) { - if (example_data == T) { + process_rre <- function(data, example_data = FALSE) { + if (example_data == TRUE) { rre_data <- data } else { rre_data <- read_rre(data) } vals$rre_data <- rre_data - # write.csv(vals$rre_data, "rre_data.csv", row.names = F) + # write.csv(vals$rre_data, "rre_data.csv", row.names = FALSE) vals$rre_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 @@ -421,9 +421,9 @@ app_server <- function(input, output, session) { ) } if (!is.null(vals$rre_data$Probability)) { - vals$rre_more <- T + vals$rre_more <- TRUE } else { - vals$rre_more <- F + vals$rre_more <- FALSE } } @@ -432,31 +432,31 @@ app_server <- function(input, output, session) { ## Loading and processing of example data - ## ---------------------------------------------------------------- shiny::observeEvent(input$anti_sco, { - process_antismash(BGCViz:::anti_data, example_data = T) + process_antismash(BGCViz:::anti_data, example_data = TRUE) }) shiny::observeEvent(input$gecco_sco, { - process_gecco(BGCViz:::gecco_data, example_data = T) + process_gecco(BGCViz:::gecco_data, example_data = TRUE) }) shiny::observeEvent(input$prism_sco, { - process_prism(BGCViz:::prism_data, example_data = T) + process_prism(BGCViz:::prism_data, example_data = TRUE) }) shiny::observeEvent(input$sempi_sco, { - process_sempi(BGCViz:::sempi_data, example_data = T) + process_sempi(BGCViz:::sempi_data, example_data = TRUE) }) shiny::observeEvent(input$arts_sco, { - process_arts_archive(BGCViz:::arts_data, example_data = T) + process_arts_archive(BGCViz:::arts_data, example_data = TRUE) }) shiny::observeEvent(input$deep_sco, { - process_deep(BGCViz:::deep_data, example_data = T) + process_deep(BGCViz:::deep_data, example_data = TRUE) }) shiny::observeEvent(input$rre_sco, { - process_rre(BGCViz:::rre_data, example_data = T) + process_rre(BGCViz:::rre_data, example_data = TRUE) }) ## ---------------------------------------------------------------- @@ -520,9 +520,9 @@ app_server <- function(input, output, session) { shiny::observeEvent(input$sempi_data, { if (input$sempi_data$type == "text/csv") { sempi_data <- utils::read.csv(input$sempi_data$datapath) - process_sempi(sempi_data, zip = F) + process_sempi(sempi_data, zip = FALSE) } else { - process_sempi(input$sempi_data$datapath, zip = T) + process_sempi(input$sempi_data$datapath, zip = TRUE) } }) @@ -537,9 +537,9 @@ app_server <- function(input, output, session) { shiny::observeEvent(input$arts_data, { disable_event_logic() if (input$arts_data$type == "text/csv") { - process_arts_archive(input$arts_data$datapath, zip = F) + process_arts_archive(input$arts_data$datapath, zip = FALSE) } else { - process_arts_archive(input$arts_data$datapath, zip = T) + process_arts_archive(input$arts_data$datapath, zip = TRUE) } }) @@ -549,7 +549,7 @@ app_server <- function(input, output, session) { # Read data if (input$prism_data$type == "text/csv") { prism_data <- utils::read.csv(input$prism_data$datapath) - process_prism(prism_data, json = F) + process_prism(prism_data, json = FALSE) } else { data <- rjson::fromJSON(file = input$prism_data$datapath) process_prism(data) @@ -601,9 +601,9 @@ app_server <- function(input, output, session) { ## Simple options showing/hiding logic for every data input - ## ---------------------------------------------------------------- # SHOW rre_width parameter if data is available - # and hide_viz == F + # and hide_viz == FALSE shiny::observeEvent(vals$rre_data_input, { - if (vals$rre_data_input == T) { + if (vals$rre_data_input == TRUE) { shinyjs::showElement(selector = "#rre_width") } else { shinyjs::hideElement(selector = "#rre_width") @@ -612,24 +612,24 @@ app_server <- function(input, output, session) { # Show anti_hybrid option if data is available # And checkbox is unchecked shiny::observeEvent(vals$anti_data_input, { - if (vals$anti_data_input == T) { + if (vals$anti_data_input == TRUE) { shinyjs::showElement(selector = "#anti_hybrid") } else { shinyjs::hideElement(selector = "#anti_hybrid") } }) # Show prism options if data is available - # If hide anti is F (checkbox), then show them + # If hide anti is FALSE (checkbox), then show them # Only if prism_json file, then show Prism-Supp - # And if hide_viz == F, and prism_json, then + # And if hide_viz == FALSE, and prism_json, then # show width shiny::observeEvent(vals$prism_data_input, { - if (vals$prism_data_input == T) { + if (vals$prism_data_input == TRUE) { shinyjs::showElement(selector = "#prism_hybrid") - if (vals$prism_json == T) { + if (vals$prism_json == TRUE) { shinyjs::showElement(selector = "#prism_supp") } - if (vals$prism_json == T) { + if (vals$prism_json == TRUE) { shinyjs::showElement(selector = "#prism_supp_data_input_width") } } else { @@ -641,7 +641,7 @@ app_server <- function(input, output, session) { }) # Show SEMPI elements on data upload shiny::observeEvent(vals$sempi_data_input, { - if (vals$sempi_data_input == T) { + if (vals$sempi_data_input == TRUE) { shinyjs::showElement(selector = "#sempi_hybrid") shinyjs::showElement(selector = "#sempi_width") } else { @@ -651,7 +651,7 @@ app_server <- function(input, output, session) { }) # Ahow ARTS data options, if data is available shiny::observeEvent(vals$arts_data_input, { - if (vals$arts_data_input == T) { + if (vals$arts_data_input == TRUE) { shinyjs::showElement(selector = "#dup_choice") shinyjs::showElement(selector = "#arts_width") } else { @@ -661,14 +661,14 @@ app_server <- function(input, output, session) { }) shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$sempi_data_input == T) || (vals$prism_supp_data_input == T) || (vals$rre_data_input == T)) { + if ((vals$arts_data_input == TRUE) || (vals$sempi_data_input == TRUE) || (vals$prism_supp_data_input == TRUE) || (vals$rre_data_input == TRUE)) { shinyjs::showElement(selector = "#improve_visualization_box") } else { shinyjs::hideElement(selector = "#improve_visualization_box") } }) shiny::observeEvent(vals$data_upload_count, { - if ((vals$arts_data_input == T) || (vals$prism_json == T)) { + if ((vals$arts_data_input == TRUE) || (vals$prism_json == TRUE)) { shinyjs::showElement(selector = "#prism_supplement_arts_box") } else { shinyjs::hideElement(selector = "#prism_supplement_arts_box") @@ -682,7 +682,7 @@ app_server <- function(input, output, session) { output$deep_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >= 2) { - if ((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + if ((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) { shinydashboard::menuItem("Compare data with DeepBGC", tabName = "deep_sidemenu", icon = shiny::icon("dyalog"), shinydashboard::menuItem("Compare with DeepBGC plots", tabName = "deep_sidemenu", icon = shiny::icon("chart-pie")), @@ -696,7 +696,7 @@ app_server <- function(input, output, session) { }) output$gecco_sidemenu_out <- shinydashboard::renderMenu({ if (vals$data_upload_count >= 2) { - if ((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) { + if ((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) { shinydashboard::menuItem("Compare data with GECCO", tabName = "gecco", icon = icon("fas fa-dragon"), shinydashboard::menuItem("Compare with GECCO plots", tabName = "gecco_sidemenu", icon = shiny::icon("chart-pie")), @@ -725,8 +725,8 @@ app_server <- function(input, output, session) { }) output$deep_filter_box <- shiny::renderUI({ - if (vals$deep_data_input == T) { - vals$deep_global <- T + if (vals$deep_data_input == TRUE) { + vals$deep_global <- TRUE shinydashboardPlus::box( title = "DeepBGC filtering", id = "deep_filtering_box", @@ -745,8 +745,8 @@ app_server <- function(input, output, session) { } }) output$gecco_filter_box <- shiny::renderUI({ - if (vals$gecco_data_input == T) { - vals$gecco_global <- T + if (vals$gecco_data_input == TRUE) { + vals$gecco_global <- TRUE shinydashboardPlus::box( title = "GECCO filtering", id = "gecco_filtering_box", @@ -762,7 +762,7 @@ app_server <- function(input, output, session) { }) output$deep_filter_UI_sidemenu <- shiny::renderUI({ - vals$deep_sidebar <- T + vals$deep_sidebar <- TRUE shiny::tagList( shiny::sliderInput("score_a_sidemenu", "Activity score threshold for DeepBGC data", min = 0, max = 100, value = 50), shiny::sliderInput("score_d_sidemenu", "DeepBGC score threshold for DeepBGC data", min = 0, max = 100, value = 50), @@ -775,7 +775,7 @@ app_server <- function(input, output, session) { ) }) output$gecco_filter_UI_sidemenu <- shiny::renderUI({ - vals$gecco_sidebar <- T + vals$gecco_sidebar <- TRUE shiny::tagList( shiny::sliderInput("score_average_gecco_sidemenu", "Average p-value threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), shiny::sliderInput("score_cluster_gecco_sidemenu", "Cluster type threshold for Gecco data (%, mapped from 0 to 1)", min = 0, max = 100, value = 50), @@ -785,16 +785,16 @@ app_server <- function(input, output, session) { }) update_filter_values <- function(listening_value, comparing_values, updating_value, rendering_check) { - if ((as.numeric(listening_value) != comparing_values) && (rendering_check == F)) { + if ((as.numeric(listening_value) != comparing_values) && (rendering_check == FALSE)) { shiny::updateSliderInput(session, updating_value, NULL, listening_value) - return(list(as.numeric(listening_value), F)) + return(list(as.numeric(listening_value), FALSE)) } else { - if (grepl("sidemenu", updating_value) == T) { + if (grepl("sidemenu", updating_value) == TRUE) { shiny::updateSliderInput(session, stringr::str_split(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) } else { shiny::updateSliderInput(session, paste0(updating_value, "_sidemenu")[[1]][1], NULL, comparing_values) } - return(list(comparing_values, F)) + return(list(comparing_values, FALSE)) } } @@ -941,22 +941,22 @@ app_server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code - shiny::observeEvent(input$anti_hybrid, ignoreInit = T, { - if (input$anti_hybrid == T) { + shiny::observeEvent(input$anti_hybrid, ignoreInit = TRUE, { + if (input$anti_hybrid == TRUE) { vals$anti_data$Type2 <- hybrid_col(vals$anti_data) } else { vals$anti_data$Type2 <- vals$anti_type } }) - shiny::observeEvent(input$prism_hybrid, ignoreInit = T, { - if (input$prism_hybrid == T) { + shiny::observeEvent(input$prism_hybrid, ignoreInit = TRUE, { + if (input$prism_hybrid == TRUE) { vals$prism_data$Type2 <- hybrid_col(vals$prism_data) } else { vals$prism_data$Type2 <- vals$prism_type } }) - shiny::observeEvent(input$sempi_hybrid, ignoreInit = T, { - if (input$sempi_hybrid == T) { + shiny::observeEvent(input$sempi_hybrid, ignoreInit = TRUE, { + if (input$sempi_hybrid == TRUE) { vals$sempi_data$Type2 <- hybrid_col(vals$sempi_data) } else { vals$sempi_data$Type2 <- vals$sempi_type @@ -965,7 +965,7 @@ app_server <- function(input, output, session) { # Rename the data, if button is clicked shiny::observeEvent(input$rename, { rename_data <- vals$rename_data - if (vals$anti_data_input == T) { + if (vals$anti_data_input == TRUE) { anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] @@ -974,7 +974,7 @@ app_server <- function(input, output, session) { vals$anti_data <- anti_data } - if (vals$sempi_data_input == T) { + if (vals$sempi_data_input == TRUE) { sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] @@ -983,7 +983,7 @@ app_server <- function(input, output, session) { vals$sempi_data <- sempi_data } - if (vals$prism_data_input == T) { + if (vals$prism_data_input == TRUE) { prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] @@ -993,16 +993,16 @@ app_server <- function(input, output, session) { } shinyjs::showElement(selector = "#reset_name") shinyjs::hideElement(selector = "#rename") - vals$renamed <- T + vals$renamed <- TRUE shiny::showNotification(paste("Please note: SEMPI, PRISM and Antismash input data will be renamed on upload"), type = "warning", duration = 10) }) # When the new data is uploaded and renamed - # is T, then rename data on upload + # is TRUE, then rename data on upload shiny::observeEvent(check_to_rename(), { - shiny::req(vals$renamed == T) + shiny::req(vals$renamed == TRUE) rename_data <- vals$rename_data - if (vals$anti_data_input == T) { + if (vals$anti_data_input == TRUE) { anti_data <- vals$anti_data res <- rename_vector(anti_data, rename_data, vals$renaming_notification) vals$anti_type <- res[[1]] @@ -1011,7 +1011,7 @@ app_server <- function(input, output, session) { vals$anti_data <- anti_data } - if (vals$sempi_data_input == T) { + if (vals$sempi_data_input == TRUE) { sempi_data <- vals$sempi_data res <- rename_vector(sempi_data, rename_data, vals$renaming_notification) vals$sempi_type <- res[[1]] @@ -1020,7 +1020,7 @@ app_server <- function(input, output, session) { vals$sempi_data <- sempi_data } - if (vals$prism_data_input == T) { + if (vals$prism_data_input == TRUE) { prism_data <- vals$prism_data res <- rename_vector(prism_data, rename_data, vals$renaming_notification) vals$prism_type <- res[[1]] @@ -1034,21 +1034,21 @@ app_server <- function(input, output, session) { vals$anti_data["Type2"] <- vals$anti_data["Type"] vals$sempi_data["Type2"] <- vals$sempi_data["Type"] vals$ prism_data["Type2"] <- vals$ prism_data["Type"] - if (input$anti_hybrid == T) { + if (input$anti_hybrid == TRUE) { shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "anti_hybrid", value = F) + shiny::updateCheckboxInput(inputId = "anti_hybrid", value = FALSE) } - if (input$prism_hybrid == T) { + if (input$prism_hybrid == TRUE) { shiny::showNotification(paste("PRISM cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "prism_hybrid", value = F) + shiny::updateCheckboxInput(inputId = "prism_hybrid", value = FALSE) } - if (input$sempi_hybrid == T) { + if (input$sempi_hybrid == TRUE) { shiny::showNotification(paste("SEMPI cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) - shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = F) + shiny::updateCheckboxInput(inputId = "sempi_hybrid", value = FALSE) } shinyjs::showElement(selector = "#rename") shinyjs::hideElement(selector = "#reset_name") - vals$renamed <- F + vals$renamed <- FALSE }) # Read the uploaded renaming scheme csv shiny::observeEvent(input$rename_data, { @@ -1057,7 +1057,7 @@ app_server <- function(input, output, session) { coloring_datatable <- data.frame(tidyr::drop_na(data.frame(cbind(as.character(rename_data$Group_color), as.character(rename_data$Color), rename_data$Hierarchy)))) coloring_datatable <- coloring_datatable[!apply(coloring_datatable == "", 1, all), ] colnames(coloring_datatable) <- c("Name", "Color", "Hierarchy") - vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = F, editable = "column") + vals$coloring_datatable <- DT::datatable(coloring_datatable, rownames = FALSE, editable = "column") }) @@ -1071,11 +1071,11 @@ app_server <- function(input, output, session) { ### ### ############################################################################ ############################################################################ - shiny::observeEvent(input$prism_supp, ignoreInit = T, priority = 3, { - if (input$prism_supp == T) { - vals$need_filter <- T - vals$prism_supp_data_input <- T - vals$prism_supp_plot <- T + shiny::observeEvent(input$prism_supp, ignoreInit = TRUE, priority = 3, { + if (input$prism_supp == TRUE) { + vals$need_filter <- TRUE + vals$prism_supp_data_input <- TRUE + vals$prism_supp_plot <- TRUE if (!("PRISM-Supp" %in% names(vals$choices$ref))) { vals$choices$ref <- c(vals$choices$ref, "PRISM-Supp" = "PRISM-Supp") vals$choices$group_by <- c(vals$choices$group_by, "PRISM-Supp" = "PRISM-Supp") @@ -1083,9 +1083,9 @@ app_server <- function(input, output, session) { update_ui_with_data() } } else { - vals$prism_supp_data_input <- F - vals$need_filter <- T - vals$prism_supp_plot <- F + vals$prism_supp_data_input <- FALSE + vals$need_filter <- TRUE + vals$prism_supp_plot <- FALSE vals$choices$ref <- vals$choices$ref[!(names(vals$choices$ref) %in% c("PRISM-Supp"))] vals$choices$group_by <- vals$choices$group_by[!(names(vals$choices$group_by) %in% c("PRISM-Supp"))] vals$choices$ref_col_biocircos <- vals$choices$ref_col_biocircos[!(names(vals$choices$ref_col_biocircos) %in% c("PRISM-Supp"))] @@ -1095,7 +1095,7 @@ app_server <- function(input, output, session) { # Compute all interceptions on data upload. # dplyr::filter while ploting then. - shiny::observeEvent(inputData(), ignoreInit = T, priority = 5, { + shiny::observeEvent(inputData(), ignoreInit = TRUE, priority = 5, { # GENERATE DATA if (vals$anti_data_input == TRUE) { anti_data <- vals$anti_data @@ -1137,13 +1137,13 @@ app_server <- function(input, output, session) { dplyr::select(Start, Stop) sempi_inter$seqnames <- "chr" } - if (vals$prism_json == T) { + if (vals$prism_json == TRUE) { prism_supp_data <- vals$prism_supp_data prism_supp_inter <- vals$prism_supp_data %>% dplyr::select(Start, Stop) prism_supp_inter$seqnames <- "chr" } - if (vals$arts_data_input == T) { + if (vals$arts_data_input == TRUE) { arts_data <- vals$arts_data arts_inter <- vals$arts_data %>% dplyr::select(Start, Stop) @@ -1173,7 +1173,7 @@ app_server <- function(input, output, session) { j <- soft_names[index] for (p in data_uploads_inter) { x <- soft_names[index_2] - if ((vals[[i]] == TRUE) & (vals$computed[[j]] == F) & (j != x)) { + if ((vals[[i]] == TRUE) & (vals$computed[[j]] == FALSE) & (j != x)) { if ((vals[[p]] == TRUE) & (j != soft_names[index_2])) { res <- get_inter(eval(as.name(paste(j, "_inter", sep = ""))), eval(as.name(paste(x, "_inter", sep = "")))) new_res <- list() @@ -1192,12 +1192,12 @@ app_server <- function(input, output, session) { } vals$inters <- inters - if ((vals$deep_data_input == F) & (vals$gecco_data_input == F) & (vals$arts_data_input == F)) { + if ((vals$deep_data_input == FALSE) & (vals$gecco_data_input == FALSE) & (vals$arts_data_input == FALSE)) { vals$inters_filtered <- inters enable_event_logic() } else { - vals$need_filter <- T - vals$filter_data <- T + vals$need_filter <- TRUE + vals$filter_data <- TRUE } }) # dplyr::filter ARTS, DeepBGC, GECCO interception data @@ -1208,13 +1208,13 @@ app_server <- function(input, output, session) { dynamicInput() to_debounce() }, - ignoreInit = T, + ignoreInit = TRUE, priority = 4, { shiny::req(vals$data_upload_count >= 1) inters <- vals$inters if (vals$deep_data_input == TRUE) { - if (vals$need_filter == F) { + if (vals$need_filter == FALSE) { biocircos_deep <- filter_deepbgc(vals$deep_data, vals$cluster_type, vals$score_a, vals$score_c, vals$score_d, vals$domains_filter, vals$biodomain_filter, vals$gene_filter) vals$deep_data_filtered <- biocircos_deep } else { @@ -1238,7 +1238,7 @@ app_server <- function(input, output, session) { } } if (vals$gecco_data_input == TRUE) { - if (vals$need_filter == F) { + if (vals$need_filter == FALSE) { gecco_data <- filter_gecco(vals$gecco_data, vals$score_cluster_gecco, vals$score_average_gecco, vals$domains_filter_gecco, vals$prot_filter_gecco) vals$gecco_data_filtered <- gecco_data } else { @@ -1292,20 +1292,20 @@ app_server <- function(input, output, session) { inters[[name]][which(names(inters[[name]]) %in% c("prism_supp"))] <- NULL } } - if ((vals$gecco_data_input == F) & (vals$deep_data_input == F) & (vals$arts_data_input == F)) { + if ((vals$gecco_data_input == FALSE) & (vals$deep_data_input == FALSE) & (vals$arts_data_input == FALSE)) { vals$inters_filtered <- inters } - vals$need_filter <- F - vals$filter_data <- F - vals$can_plot_deep_ref <- T + vals$need_filter <- FALSE + vals$filter_data <- FALSE + vals$can_plot_deep_ref <- TRUE enable_event_logic() } ) # Compute the Biociros plot. Store information to plot later - shiny::observeEvent(biocircos_listen(), ignoreInit = T, priority = 3, { + shiny::observeEvent(biocircos_listen(), ignoreInit = TRUE, priority = 3, { shiny::req(vals$data_upload_count >= 2) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_biocircos == T) + shiny::req(vals$need_filter == FALSE) + shiny::req(vals$can_plot_biocircos == TRUE) ## source("src/biocircos_functions.R") # BioCircos! Biocircos_chromosomes <- list() @@ -1328,7 +1328,7 @@ app_server <- function(input, output, session) { index <- 1 # browser() for (upload in data_uploads) { - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { # Store data in local variable corrected_data <- correct_width(vals[[data_to_use[index]]], soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width) init_data <- initialize_biocircos(corrected_data, soft_namings[index], Biocircos_chromosomes, arcs_chromosomes, arcs_begin, arcs_end, arc_labels, arc_col, rename_data, vals$chr_len, input$biocircos_color, coloring_datatable) @@ -1379,9 +1379,9 @@ app_server <- function(input, output, session) { soft_names_2 <- soft_names_2[-1] data_to_use_2 <- data_to_use_2[-1] index2 <- 1 - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { for (upload2 in data_uploads_2) { - if ((vals[[upload2]] == T) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { + if ((vals[[upload2]] == TRUE) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) chromosomes_start <- c(chromosomes_start, output[[3]]) # Add link end. Just populate second output from the vectors, used above. @@ -1400,7 +1400,7 @@ app_server <- function(input, output, session) { } index2 <- index2 + 1 } - utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = F) + utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = FALSE) } index <- index + 1 } @@ -1412,7 +1412,7 @@ app_server <- function(input, output, session) { link_labels <- mapply(function(x, y) paste(x, y, sep = " | "), label_1, label_2) # Add links and labels to the track list for subsequent visualization - if ((input$label_color == T) & (length(chromosomes_start) > 0)) { + if ((input$label_color == TRUE) & (length(chromosomes_start) > 0)) { group_colors <- plyr::count(unlist(label_color)) for (i in seq(1:dim(group_colors)[1])) { subset <- unname(which(label_color %in% group_colors$x[i])) @@ -1423,7 +1423,7 @@ app_server <- function(input, output, session) { displayLabel = FALSE, color = group_colors$x[i] ) } - } else if ((input$label_color == F) & (length(chromosomes_start) > 0)) { + } else if ((input$label_color == FALSE) & (length(chromosomes_start) > 0)) { tracklist <- tracklist + BioCircos::BioCircosLinkTrack("myLinkTrack_master", chromosomes_start, link_pos_start, link_pos_start_1, chromosomes_end, link_pos_end, link_pos_end_2, @@ -1438,10 +1438,10 @@ app_server <- function(input, output, session) { vals$Biocircos_chromosomes <- Biocircos_chromosomes }) - shiny::observeEvent(deep_reference(), ignoreInit = T, { + shiny::observeEvent(deep_reference(), ignoreInit = TRUE, { shiny::req(vals$data_upload_count >= 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_deep_ref == T) + shiny::req(vals$need_filter == FALSE) + shiny::req(vals$can_plot_deep_ref == TRUE) shiny::req(input$ref != "") shiny::req(vals$data_upload_count >= 1) @@ -1454,7 +1454,7 @@ app_server <- function(input, output, session) { # GENERATE DATA index <- 1 for (upload in data_uploads) { - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { data <- vals[[data_to_use[index]]] assign(paste0(soft_names[index], "_data"), correct_width(data, soft_namings[index], input$sempi_width, input$prism_supp_data_input_width, input$arts_width, input$rre_width)) } @@ -1484,10 +1484,10 @@ app_server <- function(input, output, session) { for (upload in data_uploads) { soft_lttr <- soft_lttrs[1] soft_lttrs <- soft_lttrs[-1] - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { soft_major <- soft_names[sup_index] - seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = F, inters) - seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = F, vals$rre_more, inters) + seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = FALSE, inters) + seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = FALSE, vals$rre_more, inters) seg_ref <- seg_ref_g if (input$ref == soft_namings[sup_index]) { @@ -1499,10 +1499,10 @@ app_server <- function(input, output, session) { labels_1 <- list() index <- 1 for (i in data_uploads) { - if ((vals[[i]] == T) & (soft_names[index] != soft_major)) { + if ((vals[[i]] == TRUE) & (soft_names[index] != soft_major)) { df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) - seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = T, inters) - seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = T, vals$rre_more, inters) + seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = TRUE, inters) + seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = TRUE, vals$rre_more, inters) labels_1[[lettrs[index]]] <- (paste(abbr[index], "_vs_", soft_let, sep = "")) plot <- suppressWarnings(add_more_annot(seg_df, plot, soft_names, index, vals$rre_more)) } diff --git a/R/fct_biocircos.R b/R/fct_biocircos.R index 7b54c64..8057d92 100644 --- a/R/fct_biocircos.R +++ b/R/fct_biocircos.R @@ -16,7 +16,7 @@ initialize_biocircos <- function(biocircos_anti, name, Biocircos_chromosomes, ar arcs_end <- c(arcs_end, biocircos_anti$Stop) # Add Arcs labels. Can add only one label... arc_labels <- c(arc_labels, biocircos_anti$Type) - if ((biocircos_color == T)) { + if ((biocircos_color == TRUE)) { arc_colors <- sapply(biocircos_anti$Type2, function(x) { if (x %in% coloring_datatable$x$data$Name) { coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == x] @@ -74,7 +74,7 @@ add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_lab if (length(label_color) != 0) { for (t in seq(1:length(label_color))) { if (!is.null(subset_vec[t])) { - if (subset_vec[t] == F) { + if (subset_vec[t] == FALSE) { label_color[t] <- as.character(coloring_datatable$x$data$Color[coloring_datatable$x$data$Name == "base"]) } } diff --git a/R/fct_deep_reference.R b/R/fct_deep_reference.R index c83a0f9..ed1190e 100644 --- a/R/fct_deep_reference.R +++ b/R/fct_deep_reference.R @@ -7,8 +7,8 @@ #' used for coloring and legend), Software, ID (unique number), Start, Stop (of a cluster, to show on mouse hover) #' #' @noRd -simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = T, inters) { - if (inter == T) { +simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = TRUE, inters) { + if (inter == TRUE) { data <- df[df$Cluster %in% inters[[soft_namings]][[soft_name]]$from, ] } else { data <- df @@ -37,8 +37,8 @@ simple_seg <- function(df, letter, software, soft_name, soft_namings, inter = T, #' @return dataframe with the fields, specified in simple_seg() + added Hit, Core, Count, E_value, Bitscore, Model. #' #' @noRd -add_arts <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { +add_arts <- function(seg_df, soft_namings, df, inter = TRUE, inters) { + if (inter == TRUE) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$arts$from, ] } else { subset_df <- df @@ -59,8 +59,8 @@ add_arts <- function(seg_df, soft_namings, df, inter = T, inters) { #' @return dataframe with the fields, specified in simple_seg() + added Score, Name and Full_Name #' #' @noRd -add_prism_supp <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { +add_prism_supp <- function(seg_df, soft_namings, df, inter = TRUE, inters) { + if (inter == TRUE) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$prism_supp$from, ] } else { subset_df <- df @@ -78,8 +78,8 @@ add_prism_supp <- function(seg_df, soft_namings, df, inter = T, inters) { #' @return dataframe with the fields, specified in simpl_seg() + added Num_domains, deepbgc_score, activity #' #' @noRd -add_deep <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { +add_deep <- function(seg_df, soft_namings, df, inter = TRUE, inters) { + if (inter == TRUE) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$deep$from, ] } else { subset_df <- df @@ -98,13 +98,13 @@ add_deep <- function(seg_df, soft_namings, df, inter = T, inters) { #' P_value, RRE_Start, RRE_stop and Probability in long format #' #' @noRd -add_rre <- function(seg_df, soft_namings, df, inter = T, rre_more, inters) { - if (inter == T) { +add_rre <- function(seg_df, soft_namings, df, inter = TRUE, rre_more, inters) { + if (inter == TRUE) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$rre$from, ] } else { subset_df <- df } - if (rre_more == T) { + if (rre_more == TRUE) { seg_df$xend <- as.numeric(subset_df$Stop) seg_df$Score <- subset_df$Score seg_df$Stop <- subset_df$Stop @@ -127,8 +127,8 @@ add_rre <- function(seg_df, soft_namings, df, inter = T, rre_more, inters) { #' @return dataframe with the fields, specified in simple_seg() + Num_proteins, Num_domains, Average_p, Max_p #' #' @noRd -add_gecco <- function(seg_df, soft_namings, df, inter = T, inters) { - if (inter == T) { +add_gecco <- function(seg_df, soft_namings, df, inter = TRUE, inters) { + if (inter == TRUE) { subset_df <- df[df$Cluster %in% inters[[soft_namings]]$gecco$from, ] } else { subset_df <- df @@ -147,8 +147,8 @@ add_gecco <- function(seg_df, soft_namings, df, inter = T, inters) { #' @return dataframe with the fields, specified in simple_seg() + specific to the software. #' #' @noRd -define_spec_seg_df <- function(soft_names, index, seg_df, soft_major, df, inter = T, rre_more, inters) { - if (inter == F) { +define_spec_seg_df <- function(soft_names, index, seg_df, soft_major, df, inter = TRUE, rre_more, inters) { + if (inter == FALSE) { soft_major <- "Not applicable" } if ((soft_names[index] == "prism_supp") & (soft_names[index] != soft_major)) { diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 7105f23..e4347ce 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -14,13 +14,13 @@ #' @export sempi_to_csv <- function(project_archive, write_to = getwd()) { trackid <- NULL # Silence R CMD note - utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = T) + utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = TRUE) fl <- paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB/Tracks.db") conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") RSQLite::dbDisconnect(conn) - unlink(paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB"), recursive = T) + unlink(paste0(stringr::str_extract(write_to, ".*/"), "/SEMPI_TracksDB"), recursive = TRUE) data <- data %>% dplyr::filter(trackid == 6) @@ -158,7 +158,7 @@ antismash_to_csv <- function(file, write_to = getwd()) { #' @export arts_to_csv <- function(project_archive, write_to = getwd()) { Start <- NULL # Silence R CMD note - utils::unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = T) + utils::unzip(project_archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = paste0(write_to, "/ARTS_tables"), junkpaths = TRUE) known_hits <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/knownhits.tsv")) dupl_table <- utils::read.delim(paste0(stringr::str_extract(write_to, ".*/"), "/ARTS_tables/duptable.tsv")) locations <- sapply(known_hits$Sequence.description, function(x) { diff --git a/R/fct_group_table.R b/R/fct_group_table.R index a76009a..494d164 100644 --- a/R/fct_group_table.R +++ b/R/fct_group_table.R @@ -13,7 +13,7 @@ refine_unique <- function(data) { x %in% unlist(stringr::str_split(data, ",")) }) res <- sapply(out, function(x) { - if (x == F) { + if (x == FALSE) { x } }) diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 407d040..bd88437 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -46,13 +46,13 @@ rename_vector <- function(data, renamed_dataframe, renaming_notification) { #' #' @noRd correct_width <- function(data, label, sempi_width, prism_supp_data_input_width, arts_width, rre_width) { - if ((label == "SEMPI") & (sempi_width == T)) { + if ((label == "SEMPI") & (sempi_width == TRUE)) { data$Stop <- data$Stop + 30000 - } else if ((label == "PRISM-Supp") & (prism_supp_data_input_width == T)) { + } else if ((label == "PRISM-Supp") & (prism_supp_data_input_width == TRUE)) { data$Stop <- data$Stop + 20000 - } else if ((label == "ARTS") & (arts_width == T)) { + } else if ((label == "ARTS") & (arts_width == TRUE)) { data$Stop <- data$Stop + 30000 - } else if ((label == "RRE-Finder") & (rre_width == T)) { + } else if ((label == "RRE-Finder") & (rre_width == TRUE)) { data$Stop <- data$Stop + 50000 } return(data) diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index ad56658..8c5a75f 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -63,8 +63,8 @@ read_gecco <- function(data) { names(gecco_data)[names(gecco_data) == "end"] <- "Stop" return(gecco_data) } -read_prism <- function(data, json = T) { - if (json == T) { +read_prism <- function(data, json = TRUE) { + if (json == TRUE) { processed_data <- process_prism_json_suppl(data) prism_data <- processed_data[[1]] prism_supp_data <- processed_data[[2]] @@ -83,17 +83,17 @@ read_prism <- function(data, json = T) { prism_data["Type2"] <- stringr::str_trim(tolower(prism_data$Type)) return(list(prism_data, prism_supp_data)) } -read_sempi <- function(data, zip = T) { +read_sempi <- function(data, zip = TRUE) { # Silence R CMD note trackid <- NULL - if (zip == T) { - utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = T) + if (zip == TRUE) { + utils::unzip(data, files = "genome_browser/main/Tracks.db", exdir = "./SEMPI_TracksDB", junkpaths = TRUE) fl <- "./SEMPI_TracksDB/Tracks.db" conn <- RSQLite::dbConnect(RSQLite::SQLite(), fl) data <- RSQLite::dbGetQuery(conn, "SELECT * FROM tbl_segments") RSQLite::dbDisconnect(conn) - unlink("./SEMPI_TracksDB", recursive = T) + unlink("./SEMPI_TracksDB", recursive = TRUE) data <- data %>% dplyr::filter(trackid == 6) @@ -122,14 +122,14 @@ read_sempi <- function(data, zip = T) { sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) return(sempi_data) } -read_arts_archive <- function(archive, zip = T) { +read_arts_archive <- function(archive, zip = TRUE) { # Silence R CMD note Start <- Core <- NULL - if (zip == T) { - utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = T) + if (zip == TRUE) { + utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = TRUE) known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") - unlink("./ARTS_tables", recursive = T) + unlink("./ARTS_tables", recursive = TRUE) locations <- sapply(known_hits$Sequence.description, function(x) { utils::tail(stringr::str_split(x, "\\|")[[1]], 1) }) diff --git a/R/fct_reading_processing.R b/R/fct_reading_processing.R index 5bbecc1..a49d232 100644 --- a/R/fct_reading_processing.R +++ b/R/fct_reading_processing.R @@ -13,10 +13,10 @@ fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { to_add <- test_score[(which(duplicated(regul_genes_orfs[order_vec])))] test_score <- test_score[-(which(duplicated(regul_genes_orfs[order_vec])))] iterate_one_more_time <- c() - should_iterate <- F + should_iterate <- FALSE for (i in seq(1:length(test_name))) { if (length(dupl_names) == 0) { - should_iterate <- F + should_iterate <- FALSE break } if (test_name[i] == dupl_names[1]) { @@ -27,9 +27,9 @@ fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { } } if ((length(iterate_one_more_time) > 1) && (length(dupl_names) != 0)) { - should_iterate <- T + should_iterate <- TRUE } - while (should_iterate == T) { + while (should_iterate == TRUE) { for (i in iterate_one_more_time) { if (test_name[i] == dupl_names[1]) { dupl_names <- dupl_names[-1] @@ -37,7 +37,7 @@ fix_duplicates <- function(test_score, order_vec, regul_genes_orfs, test_name) { to_add <- to_add[-1] } if (length(dupl_names) == 0) { - should_iterate <- F + should_iterate <- FALSE break } } diff --git a/R/fct_validation.R b/R/fct_validation.R index 0043632..0dfa485 100644 --- a/R/fct_validation.R +++ b/R/fct_validation.R @@ -40,11 +40,11 @@ validate_basic_input <- function(data) { shiny::showNotification(paste0("Cluster columns contains non unique values. It was regenerated"), type = "message") data$Cluster <- seq(1:dim(data)[1]) } - if ((T %in% is.na(data$Start)) | (T %in% is.na(data$Stop))) { + if ((TRUE %in% is.na(data$Start)) | (TRUE %in% is.na(data$Stop))) { shiny::showNotification(paste0(" Start or Stop columns contain missing values. Please fix this and redownload dataframe"), type = "error") return(FALSE) } - if ((T %in% is.na(data$Type)) | ("" %in% data$Type)) { + if ((TRUE %in% is.na(data$Type)) | ("" %in% data$Type)) { shiny::showNotification(paste0("Type column contain empty data. It was populated with 'unknown' "), type = "warning") data$Type[is.na(data$Type)] <- "unknown" data$Type["" %in% data$Type] <- "unknown" @@ -75,7 +75,7 @@ validate_rre_input <- function(data) { if (!(check_if_column_exists(data_names, "gene.name"))) { return(FALSE) } - if (F %in% grepl("__", data$Gene.name)) { + if (FALSE %in% grepl("__", data$Gene.name)) { return(FALSE) } if (!(check_if_column_exists(data_names, "e.value"))) { @@ -138,7 +138,7 @@ validate_deep_input <- function(data) { if (!(check_if_column_exists(data_names, column_name))) { return(FALSE) } - if (T %in% is.na(data[[column_name]])) { + if (TRUE %in% is.na(data[[column_name]])) { return(FALSE) } if ("" %in% data[[column_name]]) { @@ -177,7 +177,7 @@ validate_gecco_input <- function(data) { if (!(check_if_column_exists(data_names, column_name))) { return(FALSE) } - if (T %in% is.na(data[[column_name]])) { + if (TRUE %in% is.na(data[[column_name]])) { return(FALSE) } if ("" %in% data[[column_name]]) { diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R index 76b8b27..358c8aa 100644 --- a/R/mod_barplot_rank.R +++ b/R/mod_barplot_rank.R @@ -40,8 +40,8 @@ mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_nam Label <- NULL output$barplot_rank <- plotly::renderPlotly({ shiny::req(vals$data_upload_count > 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_barplot_rank == T) + shiny::req(vals$need_filter == FALSE) + shiny::req(vals$can_plot_barplot_rank == TRUE) antismash_count <- NULL prism_count <- NULL @@ -60,7 +60,7 @@ mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_nam index <- 1 ranking_data <- NULL for (upload in data_uploads) { - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { counts_var <- plyr::count(as.factor(unlist(sapply(inters[[soft_names[index]]], function(x) { x$to })))) diff --git a/R/mod_biocircos.R b/R/mod_biocircos.R index 0acab30..ed3edb0 100644 --- a/R/mod_biocircos.R +++ b/R/mod_biocircos.R @@ -80,7 +80,7 @@ mod_biocircos_server <- function(id, vals) { }) output$biocircos_coloring <- shiny::renderUI({ - if (input$ShowBiocircosColoring == T) { + if (input$ShowBiocircosColoring == TRUE) { shinydashboardPlus::box( title = "Biocircos coloring scheme", closable = TRUE, diff --git a/R/mod_deep_reference.R b/R/mod_deep_reference.R index d98656c..dc2a768 100644 --- a/R/mod_deep_reference.R +++ b/R/mod_deep_reference.R @@ -42,7 +42,7 @@ mod_deep_reference_server <- function(id, vals) { output$deep_reference <- plotly::renderPlotly({ shiny::req(vals$deep_reference_to_plot) - vals$can_plot_deep_ref_2 <- T + vals$can_plot_deep_ref_2 <- TRUE vals$deep_reference_to_plot }) }) diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 410b21a..2128ce6 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -46,15 +46,15 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { Bitscore <- Count <- Model <- Num_proteins <- Num_domains <- Average_p <- Max_p <- NULL output$deep_reference_2 <- plotly::renderPlotly({ - shiny::req(vals$can_plot_deep_ref_2 == T) - vals$can_plot_deep_ref_2 == F + shiny::req(vals$can_plot_deep_ref_2 == TRUE) + vals$can_plot_deep_ref_2 == FALSE rename_y_axis <- shiny::isolate(vals$rename_y_axis) data <- NULL index <- 1 for (upload in data_uploads) { if (is.null(data)) { - if (vals[[upload]] == T) { + if (vals[[upload]] == TRUE) { if (dim(vals[[data_to_use[index]]])[1] != 0) { data <- vals[[data_to_use[index]]] } @@ -89,7 +89,7 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { } } if (vals$rre_data_input == TRUE) { - if (vals$rre_more == T) { + if (vals$rre_more == TRUE) { plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_r, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index a3e9467..4bc07e3 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -80,7 +80,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) # Create empty dataframe to populate later @@ -163,7 +163,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { # Store dataframe in reactive value for later use. vals$fullness_deep <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = FALSE) # Make text to show on a barplot to point on additional scores' thresholds annotateText <- paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), @@ -178,7 +178,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + ggplot2::xlab(paste(input$score_type, "Score")) + title + - ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = FALSE) }) output$deep_rate <- plotly::renderPlotly({ diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 08caee9..883cd18 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -78,7 +78,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ Skip_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == T) & ((vals$anti_data_input == T) | (vals$prism_data_input == T) | (vals$sempi_data_input == T))) + shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -163,7 +163,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Store dataframe in reactive value for later use. vals$fullness_gecco <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = F) + # write.csv(fullnes_of_annotation, "fullness.csv", row.names = FALSE) # Make text to show on a barplot to point on additional scores' thresholds annotateText <- paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), @@ -177,7 +177,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ ggplot2::geom_text(ggplot2::aes(label = Quantity), position = ggplot2::position_dodge(width = 0.9), vjust = -0.25) + ggplot2::xlab(paste(input$score_type, "Score")) + title + - ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = F) + ggplot2::geom_label(ggplot2::aes(x = Inf, y = Inf, hjust = 1, vjust = 1, label = annotateText), show.legend = FALSE) }) # Render interactive plot with plotly for rates of DeepBGC data in regards with antismash data diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 1f9b882..af992c1 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -39,8 +39,8 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami ns <- session$ns output$group_table <- shiny::renderTable({ shiny::req(vals$data_upload_count > 1) - shiny::req(vals$need_filter == F) - shiny::req(vals$can_plot_group_table == T) + shiny::req(vals$need_filter == FALSE) + shiny::req(vals$can_plot_group_table == TRUE) if (is.null(vals$inters_filtered)) { inters <- vals$inters } else { @@ -50,7 +50,7 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami colnames(df_test) <- abbr added_inters <- c(soft_names[match(input$group_by, soft_namings)]) add_inters <- list() - if (input$count_all == F) { + if (input$count_all == FALSE) { df_test[nrow(df_test) + 1, ] <- NA } else { selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] @@ -70,7 +70,7 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami for (h in seq(1:length(soft_n))) { if (name == soft_names[match(soft_n, soft_names)][h]) { colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = T) + df_test <- merge(df_test, df_tmp, all = TRUE) } } @@ -122,7 +122,7 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami paste(data_to_add[!(data_to_add %in% unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") } - utils::write.csv(data, "group_by.csv", row.names = F) + utils::write.csv(data, "group_by.csv", row.names = FALSE) data }) }) diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index b5c6eb2..d40a2a1 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -65,7 +65,7 @@ geom_rre <- function(data, rre_more) { Score <- Software <- ID <- Start <- Stop <- Type <- E_value <- P_value <- RRE_start <- RRE_stop <- Probability <- NULL - if (rre_more == T) { + if (rre_more == TRUE) { ggplot2::geom_segment(data = data, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type, Score = Score, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type, E_value = E_value, From c4ed25e0e9df3f36b8163c826188639ed1c9357a Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sat, 4 Jun 2022 14:32:27 +0200 Subject: [PATCH 159/199] Added images to vignette. Fixed typos --- vignettes/BGCViz.Rmd | 48 ++++++++++++++++----------------- vignettes/anti_all.png | Bin 0 -> 33590 bytes vignettes/anti_one.png | Bin 0 -> 43606 bytes vignettes/anti_upload.png | Bin 0 -> 11862 bytes vignettes/biocircos_color.png | Bin 0 -> 24880 bytes vignettes/biocircos_dt.png | Bin 0 -> 34692 bytes vignettes/biocircos_one.png | Bin 0 -> 235191 bytes vignettes/change_summarize.png | Bin 0 -> 54932 bytes vignettes/deep_comparison.png | Bin 0 -> 32365 bytes vignettes/deep_one.png | Bin 0 -> 26914 bytes vignettes/deep_sidebar.png | Bin 0 -> 47674 bytes vignettes/deepbgc_filters.png | Bin 0 -> 64977 bytes vignettes/download.png | Bin 0 -> 9424 bytes vignettes/group_by_hover.png | Bin 0 -> 71192 bytes vignettes/group_by_one.png | Bin 0 -> 55768 bytes vignettes/hybrids.png | Bin 0 -> 25196 bytes vignettes/p-supp.png | Bin 0 -> 42089 bytes vignettes/rates_one.png | Bin 0 -> 34901 bytes vignettes/rename.png | Bin 0 -> 10424 bytes vignettes/renamed.png | Bin 0 -> 50128 bytes vignettes/summarize_one.png | Bin 0 -> 55301 bytes 21 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 vignettes/anti_all.png create mode 100644 vignettes/anti_one.png create mode 100644 vignettes/anti_upload.png create mode 100644 vignettes/biocircos_color.png create mode 100644 vignettes/biocircos_dt.png create mode 100644 vignettes/biocircos_one.png create mode 100644 vignettes/change_summarize.png create mode 100644 vignettes/deep_comparison.png create mode 100644 vignettes/deep_one.png create mode 100644 vignettes/deep_sidebar.png create mode 100644 vignettes/deepbgc_filters.png create mode 100644 vignettes/download.png create mode 100644 vignettes/group_by_hover.png create mode 100644 vignettes/group_by_one.png create mode 100644 vignettes/hybrids.png create mode 100644 vignettes/p-supp.png create mode 100644 vignettes/rates_one.png create mode 100644 vignettes/rename.png create mode 100644 vignettes/renamed.png create mode 100644 vignettes/summarize_one.png diff --git a/vignettes/BGCViz.Rmd b/vignettes/BGCViz.Rmd index 516167b..95cafa9 100644 --- a/vignettes/BGCViz.Rmd +++ b/vignettes/BGCViz.Rmd @@ -39,7 +39,7 @@ After the upload of the first input: -![anti_upload](../docs/images/anti_upload.png) +![anti_upload](anti_upload.png) @@ -47,11 +47,11 @@ After the upload of the first input: ## Results with only one file upload -1. The first two plots are available for the analysis on the "Annotation visualization and comparison" sidemenu. The first plot contains all the results for the antimash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. +1. The first two plots are available for the analysis on the "Annotation visualization and comparison" sidemenu. The first plot contains all the results for the antismash annotation. With more file uploaded, results for whole annotations will appear here, with respect to the chromosome position. -![anti_all](../docs/images/anti_all.png) +![anti_all](anti_all.png) @@ -59,7 +59,7 @@ After the upload of the first input: -![anti_one](../docs/images/anti_one.png) +![anti_one](anti_one.png) @@ -69,7 +69,7 @@ For now, this plot is the same as a plot above, due to lack of data. ### Controls -"Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Global options" sidemenu option. This will rename the multiple typer regions as "hybrid". +"Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Global options" sidemenu option. This will rename the multiple type regions as "hybrid". @@ -93,7 +93,7 @@ Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains -![p-supp.png](../docs/images/p-supp.png) +![p-supp.png](p-supp.png) @@ -111,7 +111,7 @@ It is a good practice, to rename the type of clusters after uploading. Renaming To rename the dataset you can press "Rename" button under "Improve visualization" menu. -![rename](../docs/images/rename.png) +![rename](rename.png) @@ -119,10 +119,10 @@ The legend on the plots changes, but the "Type" field upon mouse cursor hovering -![renamed](../docs/images/renamed.png) +![renamed](renamed.png) -So , the color indicates, that the product is ripp (on a legend), but Type field on hover indicates the true tyep (lanthipeptide-class-i) +So , the color indicates, that the product is ripp (on a legend), but Type field on hover indicates the true type (lanthipeptide-class-i) The renaming scheme is available in the [Glossary](https://ostash-group.github.io/BGCViz/#/Glossary). Guide how to change it available [here](https://ostash-group.github.io/BGCViz/#/BGCViz_renaming_and_coloring_options). @@ -134,7 +134,7 @@ By default, all hybrids remain intact after renaming. However, it is possible to -![hybrids](../docs/images/hybrids.png) +![hybrids](hybrids.png) @@ -149,7 +149,7 @@ The first plot is a default circos plot with an all-vs-all interception. More in -![biocircos_one](../docs/images/biocircos_one.png) +![biocircos_one](biocircos_one.png) @@ -157,7 +157,7 @@ The second plot is actually a legend for circos plot: -![biocircos_legend](../docs/images/biocircos_dt.png) +![biocircos_legend](biocircos_dt.png) @@ -169,7 +169,7 @@ The coloring options for biocircos plot are available under "More" button at the -![color_biocircos.png](../docs/images/biocircos_color.png) +![color_biocircos.png](biocircos_color.png) @@ -187,27 +187,27 @@ For our example, the barplot looks like this: -![summarize_one.png](../docs/images/summarize_one.png) +![summarize_one.png](summarize_one.png) -From the chart we can see that cluster #10 from antismash and #9 from prism have pretty good amout of data supporting their annotation (let's take arbitrary clusters with high count). The group by table reveals, the intercepted clusters: +From the chart we can see that cluster #10 from antismash and #9 from prism have pretty good amount of data supporting their annotation (let's take arbitrary clusters with high count). The group by table reveals, the intercepted clusters: -![group_by_one.png](../docs/images/group_by_one.png) +![group_by_one.png](group_by_one.png) We can conclude that cluster #10 from antismash, #9 from PRISM, #12 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#54) and 3 regulatory genes (#51-53), as identified by PRISM. Types of clusters can be viewed with a pop-up with hover with a mouse: -![hover](../docs/images/group_by_hover.png) +![hover](group_by_hover.png) The interception of all named clusters can be confirmed in the Biocircos plot, or by reviewing PRISM and SEMPI data as a group_by columns: -![change_summarize.png](../docs/images/change_summarize.png) +![change_summarize.png](change_summarize.png) @@ -231,7 +231,7 @@ The output tsv file is the standard input for BGCViz. After uploading several pl -![deep_one](../docs/images/deep_one.png) +![deep_one](deep_one.png) @@ -245,13 +245,13 @@ The output tsv file is the standard input for BGCViz. After uploading several pl These rates are just the other way to visualize the bar plot -![rates_one.png](../docs/images/rates_one.png) +![rates_one.png](rates_one.png) The controls for the comparison plots looks like this: -![deep_comparison](../docs/images/deep_comparison.png) +![deep_comparison](deep_comparison.png) @@ -261,11 +261,11 @@ The data cleaning options for DeepBGC are basically the columns of .tsv output f -![deep_filters](../docs/images/deepbgc_filters.png) +![deep_filters](deepbgc_filters.png) The filters are applied globally for DeepBGC data. For convenience you can use the filtering sliders on the sidebar, not the one under "Global options": -![deep_sidebar](../docs/images/deep_sidebar.png) +![deep_sidebar](deep_sidebar.png) Therefore, BGCViz can be used not only as an interception between annotated BGC visualization tool but also serves as a nice GUI for DeepBGC data cleaning. The results on the cleaning can be then downloaded for downstream analysis (Step 7) @@ -284,7 +284,7 @@ After the analysis, you can download all the data as csv files (under Global opt -![download_button.png](../docs/images/download.png) +![download_button.png](download.png) ```{r} diff --git a/vignettes/anti_all.png b/vignettes/anti_all.png new file mode 100644 index 0000000000000000000000000000000000000000..7c943f3a9aa35de4e26a5547e9d6d0b2ea45b9d7 GIT binary patch literal 33590 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 Wa|fKeygXdK+~V``W1>fWv-+QccmnbO literal 0 HcmV?d00001 diff --git a/vignettes/anti_one.png b/vignettes/anti_one.png new file mode 100644 index 0000000000000000000000000000000000000000..181c5d9898f005a6940368a94583fb2b1e5afe73 GIT binary patch literal 43606 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 F{2OVDPrd*E literal 0 HcmV?d00001 diff --git a/vignettes/biocircos_color.png b/vignettes/biocircos_color.png new file mode 100644 index 0000000000000000000000000000000000000000..f353fa3a3b761dd48224dfc417c1a2df24ed95fd GIT binary patch literal 24880 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%0ACC#<{#rm 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

      %f8F)}gwhx+MwNQstLDHBtNBdyGTItpW}KKnQ2R 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 Bw=@6% literal 0 HcmV?d00001 diff --git a/vignettes/change_summarize.png b/vignettes/change_summarize.png new file mode 100644 index 0000000000000000000000000000000000000000..15b21a4e53a560449d7f1c0b3ed05bc7f168e349 GIT binary patch literal 54932 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 TOT)?ak4Jm*EY0AF#@qfsW?PJK literal 0 HcmV?d00001 diff --git a/vignettes/deep_comparison.png b/vignettes/deep_comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..297de4aabfcf8ed211b8862439d609ceaff83e5d GIT binary patch literal 32365 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 B0ImQ4 literal 0 HcmV?d00001 diff --git a/vignettes/deep_one.png b/vignettes/deep_one.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5423e54b79c110b1af596298b38c2a5b0051cd GIT binary patch literal 26914 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 B{@(xq literal 0 HcmV?d00001 diff --git a/vignettes/deep_sidebar.png b/vignettes/deep_sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe028311b0106bb7adad3c6f802ec5895588d317 GIT binary patch literal 47674 zcmcG0bx<5}x8)Gr6Wk?OaEIU!g1fuByE{Qbu;9TVxD4)Y3GNPqySv+VUcIf_t$OwC zUz;i_^mI>m|Ky%~&J`jQT?NM#jp?%gN5m#!4nCrlOktWMc^ek%6SXil};K z9IsfoVyTe^URcO*wf|i8`SJ;|{qAFX1Qx8mqN*wkmdGC_x*rQl)zC-?Q&RgOilS$^ zAy`v{`FFN8t!Lp>$mCEMhCy8~nZ4wEF3TgwuX|&et$Y|~UC9J6BJV?dq#tt#$q<6i zKVfvMy@wG&|LTYhBQgQ~K^Io!{k1TRhRAyuf%pH@DgR0&HV%&R23alr7;$iih8jXJ z*$m+wLzDmA*7$6)6$b$l(q%Ii=5WyYOGfl(m&#I17!l9nm1(0OBsJI)TH2NXt<+S! z^j}kLW-`fTD%7n|v5?+<3%-VY#N$1dDr~!LIjyg+ z=geANRht^gxIy!KyqWgVf!Xk{s;xEIKQCfoD7-~Z0b zJ2hh`Mdae*ib_8xav1+rG4K8R_wRv`p{aIzjG3sgSJa2AJAaTz!t?ek_yXn(7!e_m3?ilsA&+6_Q!Pimmo+45Y3Wi%W@ZiN=Y1t6{iZHLhmPpj zO6C=x8*1052D$@EW!h=;k-m|UsP&tprVJ;1Qc}{#Yf@oZSq_5ed%x79)U;o#Dc<(J z(5Y#Vm!$qA`jm&~gvDR!I_vXQRG_XQ2U3*8?A-qM|HUYpBNC z&p#d>^QY|X zot?|EboL7eJmE8%tghbaNTj466U57<$D|WzG`=q{zPkZWsMV~KAYZOK8H_E=`q)U2k-6mxc7oWS=pRmj+FORCJp*J#9OMxeI)XP3GF>Q9e`k@f;WAXX;D90yM*Vme?uah%8 zZ+XaP^Og*|yxb1#z(sj`qwqD@8=0KLtvEX+slA2TuZ5}7nJk=dczQjt9KE0eMn4TZ zN80fsj+!?wh$E_J#4LR60i~4%Jvvpx~<{yy(-^D zjK}K}iAtJBRVi-wXV3VA`1{i`W+gnjU$=i{mm1Fo)*@d&GPn}s~5i4$<3{`pKk%C2k z1Gw#K4yEVrWG6|Z$T&w41aT)_JN&gO$&@nPVM3G7hNu*W3uQUmf|{C|s`l+XublrYjw3l+K`dqQ@I-conMxXy*vqsnj5mMr!Lj#ac2)0pPaWhuLK%#&xB$(Y3G}?v@;u@ z$FVS7+~)p%z6`0?20!7q`Gi!j(5?O$=jR31rMfdvR}#I3X2Uiq1_s8!*x2qw_qY4| z2lWzW0fFeBs7C-y{Oy^FcR%5)^4Dv0ia)jP5?-ao&H= z!?T#d@1IdV!qDdDTRKbZcJXml&>wVv|M&shD`;wp?U-g>0-SLjS-({b4J!!)=I0RtMeD8%9qf|ohX#!6JpT*;t}GtT713?eVlaM@Xo-Fvng9D zS9Bglb8|B%S}0;{*b%g?9yC2c8X6i5gqp_I>VCFdhnr$8u19ErfP;&Oi1?M7zHxLU z;iN>))zHxQw{Nw^j$4^d#w{QP%PO1;1vR?3xOhiPpAJA_w9Lb1Fe;Tg>roh}R zEL|fIBATWX!HyMHSk1@rH6j6DgwWh~=;+LU<$eVw)MBQ831($u`<;Ki^i=N9>5qcX zMHE;Z8Rz>pIxktU`NSRj?L>zglhh+3KmV)rkI19MyAC)F2M1E3%nV6+`QOFGhv7^D z0>u4g0!0K;l#adO;uOsdrQ)0rnAR0P*3ckwGqWY(e{YmHuWtfa+do7+K0ZlhyQxp# zWu&7k{8F$vdQh2LYQ*(*)*Hn-gH>s;uP-sR*4&AfI=Q|~BQ7iX?=x&;hv?fgaza&A zmEm;Zd!|2s*=|~BRp(o=2qWWi$!~9OfsJ1S*ijS;>c!1XUJhCIc0T0_@f2Tf^M&wi zaAvzee=IRn-ILSu?x^i5mNH{zS-KDS&Z*!i_8>aZO!{{oQ;pe{co+)dSm95@si`T; zg-^mM=10KQD{ZNObD6I2^AUdXudk`;85p>)xJ^1gk8IJrYX7#}>`-Ljf-Lh_!Ivbk zYT}T)Q$CYlpsUbCbX)%wwp3K6Yk?0|Yqt?zrCY z#SS<6MJ=ty=n)MjiyWmgOT71v!>*uIjf(Z%U3Ig?o6KDE(eylJwW{mvKa@07xh)&% z_SQ)R(9qB;Hh^Q$Zm=J%ME2j^3`JHeL|!TW{X3(nNyhW((a3Bzu&z$k*u>=G`m$$b z<=Z|%7>w(U^~@(MIBvZFn&)T2&F$mz*50i6jIUc=g`9=pVZjR57uI(C<{+Y-*#ngi z7V=vM2WobLXE&RhOmQjc5_kFnW#BU3aim!8c6bdJ7Z+ZSlOet{zrgl(fe#-ntTU#Y zJnookYHK{Vz>Ss!cp-TSn8dtp=C>BvCPr3LeW~oGW@c>W&z=MvReynb5D^WpHoGcp zway0km)%l*|I}3cs^8=0-kHS07;(#uzP`Sume$6>&S=#Jg}s)#mKMHIZZ5xoIT65^ z@dyZ}I9L$&2<_>hLc-6Al(wi{Pv(f}>FHZs&qNfjN=<4T8g4)HwHn&k^xs=#m(?)Q z)2nbt??0x03lb3l$R9xHg!tR+Nr--bWS#<+7-Ms5(vkz1$(QKlak`jEtPq`jL zV2fA&SzdcqZZ0`gG{JPhx?v3I?3hb*Y-?Y~N~@RKp^fY56t;y0E<}JI0R`m?cq+?q zI7wO^tlJ$Z@(us9DME$4J+QSep7T@iZfC%2G(B4zS*XY(Pq(es!zd_NYW^vi?-5p2hhBhRExuXxhR%l1rmf>g~+`Ll-5*`S< z0Wgu};sKYHm7R);Hr35WLqi5P-~dAghxzwfU=RusTVeu@d=)(h7KMr3`15{TF9#~h z=BURi6@@@FIGuZAW20m^J2_2yVNCI_oM$rRn5g5~7py4(sEMy%I^ z8%<5k)rPO==qe{4buCfg4}r~uA+ zlLi0RDahTrwWV!Ts2VgS#>Ksf$a@mK%O|xsS!&S&<;hRQJR*$Cipt8e*UhzGGx)0=$P-r!HS}P3{9Q zREKLE-2yiJl_!+0*=d&Tz3Stu5o&=BV}NtCsrT3(<{6Mw@5)X~hyc#gdur zJ#!aY-X8<(Mb~q;(tcqm{bQ3KqNTq{=TUR>C18f5J5n*qrHI>;6`8fle{OBgW8v6z z7AK%VJEjq0)<`J~ie_Y7cI%t#4%*x_W)jQVgB&EdSx2U13q=QOS9y&F)Jq3!z2bx% z9oUW3yNuJ6!p!MZySVnzQ;@gA?6TIn3N4&OBE@6qLnP-t?b$bjLs;EuL|P2g`Y&I~%MoG(Zz|MXARuDz#J zKEaMrrOtahpZukzUE{Fl&IQ)*-kHH_dx3U+usc3J;I@UqKPa))Z4ZVv;;V9T?OEvi z>R{J_`=sMpcTli*xOo~;R2h(Yc@M`yz1!2gT&RLaFx4g}aeD@lmNtF|`hyrsNz=EY zq;phzJ!87E1_u{*moJ+nE#_^FWRxz7_k8{NBZYiILXwxlPzQ0ew%o`=ZQbbverWCo zGb$<=4%9F2j+cmjx7P3kh{o2rg^zvBj9fpCFacp*P zWnKYWWsWZMTLLmR_D)NeHYOpTkG99*7idDAOBa{V?qnImRiu@ucLyu1dfByXXm4-3X z!YI#l`Y8$}A~s@kphLitgFsexWdCU!0qqp6Kre-avhR=M<34#>y>+;UFvWyrlP6cO zOHqu5mCx{PCJPrUIlnDDNZ<+m??B&IkCLS}IUg)>aiYaW9gjs)zYU_7Yy#LW_VG?x ze|xm_io%p3)4HQ6Vh>V-A!+Fa+!nBUH=7W1%19IkksieLK)~-A!FriQG&DG|4<_b# zSyW7n2cu-WaCtUYM*$H3RaG^A7e}Li2fsr*L8V})$P3e^y63VVO1gFh?pNpb_~>+@ z+b0(ug@pu*##9k-8E-q|!i*^*}No}C-pC_G{k z6N^uc)3@^y6Y~NOaW&TbUT>*xAjHSVpZ1whj3MRkD%h9QT@g6oG-M$!OIG=n4Ifw( zD^%oyUh8%utzCEa^-QF<35$3z=4U+&3|Eod9+R4Pk04a^=Q_S9AZWmQcPjJ5w6fT4 z$L`z=m72orvN-{Tf`Wp_vS~FHA1@gd3EKsb#lIqq3#}%|un)}~c9U>EG!|U1jVKYS z(w#;W17j^;w3UBXRLtbV@ZRpD27dk6-7|z#A{!R;MWk6d;#)299z|(P=pUu7v_go?OZ)hs{dETzgB;v+oEa1E|WwIahAa-gdbvtf!5i z_r^E4OC8MPb-!-cI9y~zfp(0vvwlj3WYh_ULFMke*g4o!(3eMJjoVW!Q>Fa-Cq6CX`iwDE&%_t#5B<%9dr?S_tynHZ@aL(ih3=GS3in$16~l0yf!2^<-0v zkGj>{&NW9=R5U9mcmL8@R$B&94G@H!DyM{V4M!pq@Sirz_^+OaTe#+C2YcaZ>1oNC zxx@RKG$H)$Wd+qW)qm#3;_~2cfpN&&t5feOWaStobP)`fe`1!%n_S;K1yGktfU{ui z1cQXp`=B`)3wIvRkk9o*WWNw~VTo^|TEZcJs6ToNeS^n$!dNmJL`Ov*Jbn#mI>q4Lux8fK=#&-{x28iIW5Od$ciwU4wN65U zx6q&)O4>HJ$YY>yJ-F4#YxZBJ`zc*EzR-m4A|ta|sSDTDGlfK>!Tn5VfXqZi^{0Nd zLVBo%?Z*!!RyMARhKe>_si^|Z3_ZyCtB?r_r(Iv(9Y=nwVm4VvQ&U-4S+(FUH9O^7bAej)PGT}vt=o!q zTD`r*G>+Y8pUY3UT0zG-6%-x(6ocPFPhYnu=gZ4%zk_P6|lEa$!=2(TQOJ820 z-EJ{uT3HE?;2&^lJ5RaUPzHtt2mA8d`ju|8HrBQ6D1On?)YMW^*A52g7=UoObH$4- z{+v0)25tBS$`Q&Xl&)Kk%Q0Ss)Ktc2>rvGah(_t|TE{idLcvBHr~OPj0Moel2Oz{1=) z$=UG;{qa)E2YN!CM|46FfBRF^Go=lu-zi2xS09R$W+#rm*+6m83dZ>HHRg7t$%EA~ zy>3VBhMDMTH%2bo#FXDD;@zMCMjlUQa$79E0knD24Jm@PFG~q zm(Rowv8|2FNTQ;$BO_Lm4bVz^WAB#qYrg(Qg>#P?``psBQj@WNwP(59Oh`>_E@{S= zp}X>Puq=CRDjuV%x;8He%$TadHZax}+*|;QCeM_=W-6J(B1BqHgCc>ekuCA_yr(9TAG;w$1zja?WJ39^r*yJ`GT-^aAdSn=X zTc5F!4sp!>)boLhl1Gpvki9?F*xpF0NZ+rjrlEUc06{}xoUS>B6rzx4K5B(ELxhRR zZhL&}Wjw%=u>!Gyh&#N2^4aj+f!qS8btzv~DN>R>le@e+^W|{G_DRCK#^_7|rqiszkj&Va~>}CKqKVwz2_7b%?5!>;)71*WNZ}08a*vKHj zdd>RK)E7(^A8`9(iHC{ziRo?6RQG~11pR-h6Z5if28<`fCkp%8sz!I$Obt@NTh6sG zzJ$kqwI`#YXHN(g;49M`+ub!aF*TMp^3OUgR517E1)TfwYRd(+-HhYwj8w}Fv80hc zQ~F$aIqM1-#n&3kx<2d~0_0Ex^mb%m1`(Zzgs|j`vJ?!B&Hp)ye)KTF8wV_((9zT8 zir!@{E#g>}94}TENVkJ|T?@U^VYWnl2MhPbGzsyaTe`|IhYuuuIQ zFumtSqdfG5X>GLoZC6wgg(vjEEH%ECMq%H3g8TGLfUjYy&Wv!$<0t~=d%M_6&z8t0 z@q%(*Wq%t7lC{V%TINqFn^Usz@DsAzO;`pn!OxWRyc8}7*l0Xz&+mAD7?Zj%83%v1W+}jXFBI^)4*n0S^ag7vR~bwhoDB z!#S$}wF9ATe{+-ps9N~l$(#o#AbilV+tHALOdx+nUjhPcn z(=@zobC4V!D0cI%*B*V!9>)w)dmkbZrXOtMY)vpOm#SX|DpN1>3K&ZXv0c$Wx}>-b zS9_YT7v*c?hal>7BGJIZg9QD3;Ml1<^N07g*8}5njaIn#OBGhV60|B6nzx?s(sI89 z)#iyNnUTM}%B^LskV^W%Y$#2(yGVrHp805)?VqqR(^?(ybDQxZ2Rv73gNpNkC!W@qgv^WY%6#aU^TPf6j) zVwIUrW|%3UHFqDo2>kCqv2wevAAUJgsjd@Pm@k9T1ZLC6rNeOgHuJ8I$wx=$<88Q+ zt*NTrN?1YU`OW2aio>q6=M!}~xcui}zO2^yVLP>%Qb1Iz_*QWaOVfD z4o;^1=26j6r6}x{=sgU7V~EBIv1JyB+rnPkeGV^mbhIvdakDWR{INeg^?oL4h}I)i zr)b|`-Qq$eIG;U6U+DA_AWV7dEjIdAW~;E@l7vDy5sNB=TkWyMYu+vh+bsL{=d0iS z^NWY&BE$FIW$ugHIt{3WI%7mVzPjlo*7XQ|7-k*W`((r2@fQ>cc%PLPIr`*@1~X*; ztUDg~hOqPH#w!+1Rw!Ynl&goQ+J#yt#`HIxp~$WN)rX)DA>QkMyLjE^o&ZaRICeb#W$e%8D4+`+z+m9VD7n1Ux^3>G0c$)oXSh~TNbhl?> zes*AB{PqrC(Eno|bw?jpm`}+6t_7%qdf8uSsAn24W9FCXdyssLC6SS`vZ`l$x;YFg zi9j5e_sV>mvs-WHEgHfveZnD~NK~^OaR{V)YZ} z?C6%4I#$$z618UBle%n zdvCg6KjNjj&6NX{hx5qFeNJ1-lugY0oulRfGd8`nR2BW*6tOoJqe~8mZU#PA4k_r{ zlR!{sCHjj*wAuar9*^&HpWR(G*^Gw&s(wqC_bvpsaLoIyP@}6}&7t$_`AjYI#P4Oy zy8T<2>9wc*m?1nqu4==wd|QHr9$wlC+$(HLpF>*t}hj+j0&=Zz|0KP)ciRiBiVi0SzrYs zDJwN=56I}{tTf7^f~~{Nd>_UnX(uOVN}ikD9Rp_9altQl$0iGb{?Ghp$So)Y;!aLd z;7g=0ekz)(efb9t7f&8n2)2;#4=zF`eYMOO*}q&Rb_Avb=Gh7`LUX^|@v`wIH!!AC zqzuPNQkJ8w_O&|5_O8z109kc3JMEQO{)MAxBCcOI=?!eaAOQH&jaN}AD`>{U91bnE zG?(|n7Y%*KjP8*|c*XGsUQwi4S@-u-{DflpVJ7i|C|tF(-@xoiMECqKvJE{wAgxQ2 zI-UJk^1@LIoJ0eF<6rzv@4Ox!h5*{?d@E0vJt~iWnsZTG-B~}+T&QQx7+(tr=j=}Z{-eF`2j@|$fDLu;~G)KSB64`tdP<#V)FVVgj^0gfB~vX-95IF zUXC59EH?X7J-~)C=r#oZwBswy2j<)K=@1*(pckX#oz4LB1u=aUb9p@G;i}N=NuJ2` zeZ09-y9^~29BO+IV!z9~tFkiu6EXdvjmXjBgL{6V-&iT)jU zFU>%)>*&m{Z{pR@YU$IuzuJ>99wFhzzM;awY~ZK3z`S+=C&Y+)v~r*t$>HuLY%Yv( zd7;W|`K98vgN~Ng3}65cUaNZmNuRL%{+V~zM;Hjg zihTH=%AWoMG5P;{isWeBdO8P+c)8(kS67bu0V*~UZ@ta8g3!<`9cqLxes>En^SeQE z|7MYGv0m==<*D-iWZ8>f=r&b5iPi6t(*I>wrsL(9Vuj5?0ez|7S_GPY*k^SY9$aW= z1AM7_7zeY>_QKDmzrDCtDp2T3&_COYv@>9u!$CId>v_$eHa=4K)x;#?iBmmS=L)n}PV~;ShS9zSJZAK} zr==JlrJ{B)7N|mvs5Em%YBZE$QThh$tn6g_{CV zOQ$>0d?JmxbqAU5?Zzj@4?W81Xtg@ATh~8k%_z;g7tdNdUtRHd?J@|xR{vaR^3>y1 z!Nk;0{Tze_*4f-V{%WiHj_>w(CmXx0w64+Rsezx{oCC_g!*plcdHq~z_w8a{VA%n^ z)f-#a$MqB;P+2P`Je@x4)V_~~dW9>yIhD4MntC>Q{N{{&h3NOZ#U}R<{Wv=d?dAVY}%t0Ur9(Jm#-ElTo&%A`#WqN3K%W3fNENpFVBXkY3 zukCK9*19phy7!ZJ=DY`9HI36sww5~jV6p(Svg1KM^Qc+pAf-}KQ#B-|m9M?Uz0fKT zne0}i?VnTq1;k5dym>{nEL%|S04UlXaOH2u~{7gYL3wQtUN_5+^ufNvy z_{&NTe7-&^^7TICL$tW)K*I^hwUfY>Uh7x-RrkpJV#}dHPb16~Fy#}qHZ->(<+BAm zO^hLGk^b<8v%l9O7D)fnk4N{<4<~$oG5UIp-aFY%G7&QSxo#oOeVU3uwTFe|jQT1dKla(Cl^yuiQ`}-68V>GSa z4!NU;hcaeMjCFLNEM{ksHBYP2lw88y*8IRh=)+9@hn$lLKh7uUTYKI9Th8Isn?Bf0SQGquBtOklT1AJ~X64M=CIz8Pp4pY6u(>EfDl%3;BL) zEDC2b0223F&F9=PA@=4k@u6+k$8UfOu~wt$0=TE<)m=8xQb!zB=c{C^I-|8W;Q{ba zwzI7}#5IhOOCcP{wdv;RVb9;4`FA}+$h-d-vWFXy_2tu=jOBEhkW0Ws)_JSDWq+4o zyXz70$;tg~ZS24IOIK$wnhJ4J8?q)@NDROk*_*hHF4w;16KHjv0+;bqE1;4LOs)BE zcFn!_e{@FULM`neg-Wi_9Zh&kADC%egRZ0LA9Ag=810)}jftX9ZR6jvZQk|0aa0(Vz!4x|9&fW@@-xB@PG0-V2l~aD_Dim@X){ogi?fptg*+v z$hx)yj&LrEApi*YoVEyKF=zlk)Xg9o939?sHcw_+DY%D;S5_`dBE`g2a4vQCO5Ys? zS+0C}dV7de(rvDYlBPX4Xz840WBcBL)n5<-vqGf`%q*1UhXt%aWTi=f_^HyGTwaY| z&a4MXQet4lCmbv^aFW>DgM6>&P|Rih5e=9XRIRZ)^s~0NcL6=pC)7DoWKcfxs= z)R1w;-f&DPC;;(uzY(cmwS6WrQt%llY1yA{w@JFRSKDJ(Ks6cjsXf2D5YL;OXtTn6 zy??b?s~L09o`U!eB}~Jx$%j1c}Zz%nzPfG-ccaskPOx? zJHq#{p2wNc|H1sQBayYgnl!~mb?e?B>*w@wOClCjXEGES@R$X>@Zi{BL2f0wkncsw z=~umjtwsy7l)*S@D%Yc#AZEdG|6>uKDTk$Ea?oIj6##gKM)vY4wYIv zAlUs?tk$bvUT>BBgCK3NIl$nithyBSef_9uQGQlP4sCBv(Qd~OLNs0E z(j?M`l_zv{nSZ+6x(B&s-oW>cqPJg20Ra1Dk2BaDll0PVx3%ux*`bnS;!{X%_C=*^ z-nfdwzxR9gYx8n83;+qf*$WasqM4unLZmFnXR}@~1U4e=Cx*?44TY-_8ymTXZuh-T~EF!=)v-Ei53=}2TKA7y^Y)ekDGfjh4!s!GKb?laJ3P-)O zNkkx5Ctf2ExL^P)OLb{3-f#Cc9>E>rx^T3Ol9VluQ;e2*RS>fC^RH*w%D< z@vyK@Njq%^_ECQv8vG^v2r zJ=vXQLZdMKG^iBiYmWf}K%m%e8W}TgF#ow`pA;^Nq#vl!g}1E4s%Qj=tU~8G+nFC1 z?mx1u*4zjGi)RP>ABq7+rmUpYeSKHQ?MPoK2$Ij3T=md=Tvj*+d@SGGYyW(DA=|4w_#pb<$`if&?03r#NH)MFk|#+YOo{kV+d1Db_}uo0{WfM+Qc@DJ*Z0pn zT&O>@c5Ek5)!{^cXXxR%Vy|k4zKkl|I>!jOhnCgZS5b-50@RgS^uRb#_-eb^&N_$L znxR`jW4~_`<3mwi^s(QrL^a-H7LQBGRxou%(c)PmaY_gbQyY3Sn_NpwOnf&VoE_SX zzoEnBXsu9ekI=U`SuMYeP-XK5#a3G*HQrRtI6qQ8^r%Mo#Z?0laN;e)JE2#dRK@|n zPT>-26DZ=8CMk;wa~1KboE`wH>2AfN!>TWx9{r=mUH1WqhdA09zyq~}spQIoXVxIa zve}RmWQhXh1g~DTKPQj_r()C+Rp)v?y7i@Mo0Z@H{2ao=or7@e8Hm8(B)8)d;t51d zE;iB~Ea%r8b?N(k#tow87+u`lE8?jEG5Sp+HX$`BT9;{Wd0g=C>|#Vs4VxYTfGHqb zFxaWCv3GJ64G<)tl^OB&*f^o>!#}8u06b~Kz`a`ia_+d<|}O?H`_?OqPL>e}8X(7CE~P@m|S%uoJ~ zs!bIbbm*4Zl|?*Klm4EXvgyvRu@7`hZ`e1t4ZID}(pLXl9Fg#g>i{+koj~|)RlsV# zg$i0cx=baLfTP~JR=3da$cDp%6z0&I$eN;S4Lz_4<^*+l=*5FpFzB2@qB6;cbDeg$ z?g*VkKzzi_<2KJ^%bHy_a{Abt@Us9vPBnRJ{T7JZ56;H-9moPm#UY! zr3}rl{R*;ap9d^bgee8n|K2h>MRGNZBqKJ;c)w{+6SD?!V(cg?Dh3vaE3p@!VRqH8 z4u_Vh^ryja^z}ec0t`r3P{RSA$E}{L(mXcP7joV!k;)wawf6Q1-^r-2Z72JnzU)q; zJT(O@1`HWHU%J;7E{ntKJDj)H_^qOG(8R=i3eVbW*UxH9p#HIIX$VQkp>jDn6M#CA z+*>@4CSI)RTse9W)8D=vjO7$AX6>U){};4D&>p4(^DooLl>zG~eAR zd{_T)0)B!)&s5Jl4GRk(j#sdRx+0;~j!=;#`YzY!mi4k(>L0ve>ieOB0C~LBVB0-( zL#{hE^7Ug}mGuSb@p4^ELFY>dpdo-zm774fkpF#J_MV^rbW2Y~2WuGWG5iews&~7J z#W)np&7TNct!C9b^Kv2&aNG5YM(@vmu?(T{^xov8Va@AlkL$xF*ud{sabGh!b6TGs zU!&#`0PYqL@FLwPPpsKY9x`){GBPT=SiLKx{#*?T1Q2-s^R*%^8*kW2>n-T~h}!_8 z&6X92`|O^~>w~8oRuH4bdt(EhVY?#V2+N3zbZUb;ai0TqsZD08x)~l1_<~aycgq$@ z$x?=C>6j{<#ty(k{yWVV$7^j_`g(kMla}|d^FmOikiO@~gxJs6PRYd!GN9-C9U?Sa z)LgG=YPY3AVCA^4Ht(y6R;wepi>&+Y??OmTmuC~M57(pf3oQU2FAnIr@`opdhD!Zz zfT=>=Ka7h3p|d*s$tb_{xoZExFAWv?F-5I9Nxb4{#C_d%F#|yEy6~)as|d6ZR5=1;NLX%*;UB_XGa z68<7k(q=rZccfpxg~d-PuVx8^H-&sPRX$+|PS@ii`Rp78daS`vJ3Dwwuq>`U0s0_ zD^LG$fPzBQmtWwYE={oLP$}E^5C{b3ue$fH01_My7!(lUKi@oJ=W*Vo%psQ0eLf4o z!oo3fuz~JMY+T*yiZcN+B97#|X|Mr|71OtnQK#YvAR4-}gPp}G&RtM6!9a% zY;b6{?O~Fpg-tN+iSumyA%1#qOhr{!*4G$gSiN#*i@CEo&rgL^stsDlT9$#Nz0zI~ zWi{gw2_UW8y4zw|9o{rr?@9hCOq#ColAmsZQU}oAgG(eQLzmX1Qfi9`8%6qVddt z2{|v@@9U-T(a$eHC*HPdpO)auZn(9I9?(^$)8@PL&A!J(BC7enYWwh9{vXY8-@FNR z9qw3~32Cw5>TG6%yZ%OBFS7tWbcarkVBcRE?U{DqsV7hG%RTh9^NsZB8weW^a`Gn9 zb+}<^PW!C)qGSmiKjp6aiVj0Y64A}&i&R=0D5+_V{3)B_0T}wHHx<`bJ-wQMkf`i= zvfcCZys`fM8XmQRFV4g(n_u56OLDpH==0iZi&a+t!vz+QrEB-b)a^`rAkae+cT<#qmO}O&|y<0Z;I|G^MWEdfR#SCniH4Jg@fLw{2VyH z7_W6){Gqe^uTGKh=J%fWR`2%AVHzp5hN9+x#aV~gu(?P}QO~M<`HlP~kT!(K1E^l_ z^-DK0r;s7zjS(Xv5ml$b*v?GsZj3l?<$S&8C|g)@nICu$H?{wMj}C!WAmFguEBKtAAsly)aq)R|Bf(;Qg-_^d{o}Dhd7XLe>ANTJ(Q9 zrO52xB$fxXO{qa{C+U?-uu5e0cPwB-A7zXUL$s#5KV_tmso>4?1W5I;B8`XT&@#`8 z9);2};c+$znMqU8i`Jnda{e5~7tCR9KrR2oL~A5=PAx4x zT-8ux>iH&!M~MF+C2{2MgdTd+joNJM`r*c5a9IKc@~eJWI~etw_nqO!k6H87#k z%}<*Atly)aZDLj5C@I5aG^Fv~oA&?Qy~P_WIF20KsPr2|uPW$S!JBD?zZj(bytsUj z>}ES1KNE%WioE)D8Ars`ayGc?TomPGIvw147nhMdw%-l?kKr=09zZp8lzOu=I0`Ux zYm7e`MlxF0VzK2j|H_$% zi$lpOtOmOZ=8qpTu9cC}(kz^uUV)4lr|_7eQ5a@7PId13>c_ETxplhH+R&{ZYxnnU zZa~_fAjmt|*t5y0>8VPZswl!h60eZ@FEEkH+U_TGg-uN`>?+ewb7M=z9(saFrC~vb z>HHtmJzakh3^~@RvN)KEjzn)0DGZowbeP(XV3}ekA5EFzCQT1WUF(uk(E;Buo89Uf z%|dy}nQ2|u*3=Doa1&4irUEH4lGHFVxMyXEnV|s=geI{#LObaxv|$IJ5=VEBY1>b zw{(#3HzEf{G;Z6IN5xnfWw*yht6}v?!)k#v^IPRN#8lXwg*3gVpNpyVP0BgGfsELv z^}p^t(_k!xuH>MfzyFAaCOf&r=GWD$8zy`_N)}=`)N>qdikFi1hMUeJ9Y25dTWGO4 z1NNsQ=`}*t?hOq;=qJdot^E7or`?GHUEW7+BU>^t>ZA$wuC#WgMf8U19^!O{!gkNd5hJ*p% zyf3cjoy`_cF!lO{jf#ts5$+ORs+ipZ=(jPv1K8d|$y%XxWYKiaY`uy#uzMEKc(0AnH$n{V;?(weEl9-ixs%sbudtMq+cVx0-d6>uK~ShZl#Z)I;l%A^EW zKx5;g5VaU1Um0KS+0U`2ws*M~l^)pz_+6my5s;b3`WopH<9|w@o z!w@QZMCCrlktGbCJG&TdcXj+qOEb1H`4$m@NKL)uaEOhIi#e0enyR&kg^T+Eqa{5g zkt18i`Gb9Y=+R~H3r(N-1*ftki`Y$q`>*!B64iF_Z3wzoIcoc!k480gMw~mv-hGn zUWTf!ajc-S6A@@Ezsnz~tK&$NrUDw?TeP5m?>+AS3y{q;BbP5Wg+iX6;a4&qSs5m} zI+4{!;gl7bL_P{)#xfw1#RaBEU|?b{`>0m{t3^dc^_iFVN7o|)Ju`Fv;$R$*PGPy) z8YlG(1mkwkHb|jg4pDLXXX|>_Nm3dzF;4r5tn0I|vXYaNL#4{{QIZ88-RKy1sp4p$+O9Nw~4eeW`pm4lGljAe0@elKrnd!9!5z? zSVSa@4B-cvXq?f9PcrWpYlUTU%TMF#q!ONAB?(LF6s6z6WH&M!P&MCWxi~9~O}mV@ z3s^jq_G^=bBUE_T!=c=*DSY>dTYp>wy2-?6rLjpoScxc_e!L}f)FNwxaTFAmA;=Tf z^+2D#W>G`J`lG84#;!9gJYvO|I5F=J!BgY!65DBWsVs!>8qCbhN4DA+y4m*H;N%30 zF`-lA&*F~Je6{Jnjle9wOd&T`7F?oj-KimouC~`zAl}TFoE)-5=>nL!B29C1YFb)a zN*bD4^WNQlJ)(YuiU^AyatbYyKi)&B)iCqJyr>6OPIxGA85tQQbaL(b3fkHPKrQ)K zaq*!%O@->2I#>BDf$=odbke7Uck9CA%{ViI?R+ImO=2C(Ylq7TUc(x=-cNZ0TmA<^ zKlqWHNsi;fl}qv^KUfTf!(2%h;g%>D3<(T73Khv`8cXy+8CR^4(ei}OTywCo-^}6H zwoCL9FK_}PI>6yIdq zv&tD#o5c7DFm(T5{;}mUVZ)y!yxw=^WzzlevE@A!*W(cOm_b|AqOEw@bnftgu)~B2 zo0KDVY#5BjMIUSG$YMgdX|?%uB@wT4VqSlY5ewwa$f8|;yxOGyv-=@RE70}$tvgV? z4ESRUnBT~e6Qtgid2+nEm{i34?4LfzC*eW|ia@l%e+#~|SBOPoD3`*FbK8Fx-}+G* zJFYj}W?8SjiHQL$@3D|`M*0P!r5o?m^z`JRtEuVX;Ls4AYNguYQ)f~*_;cU%yUk7- z3uBvMq<4<2ykQIJjkKf~QQ5KFRPUf2=?{YkO}`XzJ8sR{VJIs%d%sY7x0C3J!?i?3 z=??!d>fSo4s`vZ%-H4)q2ny06BHi7fARyhH(%s!4AuZh?ASK;hA|Tz}9UIudrt?00 zfA@@g?l|L|GsgMr-hUX5&u772d#&|6bI$ksHRo#nXY1=4_n|(NQe}ut(YOjPr}ulu zkFH(^99w7SKjI~#xe9hye_!`a6$kg4{xxOO|JNr}#`&Xgy8lVwT1CtXO@`?M-Jt$^ z+J5^S$@DCtT!k!!-}O#V>?P3sDxCnaWWzTyvpW9ly4S7MH7=PYr=~(9MP_o?FXhv*d=!i2|v#BOT^V*Gjap&o@a zfar_uTcH=cuIAlZ{Q*x|-7hg58(->|cAZ?QhFK;!$07|M9Uf&3TwN3Vx!8ZUlAiUA zTAl9&4i1h$GG}JLsy<43YhwQM@$M)Q8>W@K(W9m3B-#D{^!jE-6GUGG%ig zPtQ6LR%5{BZqwz?@o zZoRx_ZnjAiN;M3|udSDUy=JVj0+0;8%#e)Ktu1!0WJ0-_*Tw!=hzY?25OFI`dYtyT zZAU1avgD|C#_x=f&UU-P_&s7%5+aK%Mw^DBgtE$axvOgODe7CVG<*co_@jy{Dh86+ zGVHTRKkGzRiqBc&qqQBrsB2{)!1o6vR1SqqmQu*t?edRlJa#*Ytno6rS~}Y4Qj>?Q z&gN@-91S+JaE%iE<*d%)<>o+!gZX2HCJxVs@!`NB;l${UkK3E7?k;BU;WDunAYUwZFPPk&ey&UmmmTZYBl-z~Q|T1*KAdlXm;96NT2C z6zOvQ7sDDR<`w+ka>G(T^mgX@@%v(G!G0<6Eb)kE5EBoiv1KR=mQeC+nU`86Y>E>L zMDag=HD=YWC-L-|e2M)`+lgzvL!JUPo`5OD0f&Cbg(Meksw{=+j*MdXI&L&JkI7O` zFcizK){Iz2##~EFE9rQaPvA-)VO_NON^Y|y5!h14@G{Lq_hsxe{*ysY-19?^mqh%p zauvS9uQ`&XJg){7jHNuIvJkKBc?B})3{(#J_N#T&!3|Qe`kRoEvf_Sl?c^^R|MaK% zX1P`(R;@F`$$RBankN|eS}95UOCP_QX=x`5e5G^1Vb}r}2$I%nws+H1F#3HvW`I7d3(O0OHhSy`gwYqcBXvEHyFoRzYiEnG{JDs}s zvxU}{+PH9X#waQve36#!9PeD*vifVv!t6e#)T(~WuaO=(Z->lL62`mf?Ed#9`1`3$sa>`>>eJz%bzH^Mo{4BBpfG{&a)dcrblfvkd*0RCw&hSMoEjB6C8KY^1HI|!p(Yzw!HXpx6GF`0XHu9IO(%ZF%XoX@`n0av) zs|Kq!I#W<{gI`{)ir8dE9L9A(XmS*Wna6kHPUPdT7b&l9 zBs=WS)TGkScfxoCeWiz!OZeG4lwXi$e2^V1_r(z66aVjb_a7@X0T|Bj9uL_6=wE~( zG~@SFl{BCn5xG?8#n`D+LIgiN2S2&Yt^E<+an7?wCXoiutuPZO{7_;?X5&nG}QH9Ws9 z6Q4FOnP)34eMvME735^0nC*&z!zfneHEo?xcF(NpmdfTDgwWzHSLn&Th8a8Ka)bf4 z1ks{N{+MAyR9!C~%!nddG)UNn+w;9{ub48phX26PI%Urw1X9N|#YH zdRu^85{r_lodn&buBnzfUP9o(mWJH_$*8&0=bpba#SBCxXmK?1X>~dzUuyc|k8EAG zCuZRww77$3v_F1pd<5xajj4lO48%ixRaJAPLa7Lvc(Y?mgC)<47BQVjN%>JQG()k{ z6=P9%&$oLr-cB(eaRs*B|2q&~f`;(ZJ)Y^eD)PF55?j*+5k$|nZK?U}`Xf|;`0y|w zfkDJx0tGdJ!Ka$!1!$vlb#oJtv$b~_|7qtm=+cB&wRqw^!-tyr>3;Y5ThyPQ<=#Pr zMWZ%h>y#v1Zr~C~vzc{4*MHs67f_rrnY7ldL?qD zbi&Wi5m)l1+n9Wg>%i573&Ha|o34YK1YCAw$RGDkbEOg~a0i~hdgy8vk^CMe`!QEx zEMJV12V^QC?H`A98~+wJ=-S^-;5}Y!kZ&Ou$z>35+Ei?9M?B^Uka{z={pH3GD5njJ zbD!hZU|NtuVYc0TBo_R_VBkBaTb{Et*iQl1PaBp{_SaKPuTZlJ2~{xF$g9N%N-?DK z{nxy2$JE8kAiC~wT+t%zLFQB`&+ARqTkQKDez>!5kSz~pmN;jcm1C1u%-S@ z8tg}|xfUkP{QM!!gk7QRf+w1nBo~92?X$BXAP$XgHDK2_nO#C>kOea8d_j_Q<-Oe( z6m)doL`JR45eLG!uTb>1H^{*BI$b17$`Xe&`%O@>D-AdIJf?)hC?b-09qc_vdZTxIo!JC7b~P=W8>To_fOia9~Rv$ zdpJtKqR?t^k0>PZ=`N|~D(&vBbe!DdV>~vN&iJx^efIbu6pfGO8KEw);X{^4SVQGI zmwsxQz7UO#2Dv6kVH7L0)LYX96C2qr^f*$f3Gn}1x`;B--JqtEwGU@*Hw~fT6Mc_v(zs`_T+S1Q$6=z`tNm+_5jl*}7_1^r~jy}oy z_ufyjQCIFNa%`y;J}fs68nagAN&R}DU9@wk@@$Q?(quNs&V7}_Vcx#8Dtrt-TfOZH zi$kU!WOXvf;TlekrC=(MWdtc_=WK6s!Z3&N90TJ z|5`iP6^9*a<6Z92x+Rd6aU4md&po}oijI%(`WF(*P2v_^ed>5l$dyz?`S71xZD>1a zcP{k7x5hpg9sj#Tu3^X6W;Jv)6yPu6>o-p1K`2K3BUfFu5YNk5 zE&STUkHI>3-y5*|L5lLZMB#Y4Vx7%=JX+mh8!>@E&_$=ONJ#<|VPnMxIHLD9EFj(Z zP_70Eeh}z}r#ESOWNY&_ClyKc$fmD?JxEix?Yi3*9A{tZW!=>^T6h5oim279Z8T$x zV^C&UZZ1-Om9tqDAucYRbJpMDTI#@Qz0fQIzR~g7ah`rdB}6N-_0JFab-%2dOsgQ-uL3@30?oc8|=&fB?qxQ#u;6T4+xB+k`zfVv=jKuTwSHg$`rDJCr@ zX1jH|bXo7O2WClGa8!Ex^`It-7JBQ_(&LuJX0;q>qxz6!Li}J{#=-P;?xl{`y0it1 zXPehK|90LtH&S1}41~Rp%szt93!j@t_S0SKEAqSl+)YPYWg7ZK6N=c^zJ0T8>A|md z`a{0kQnc{C@m=%t3y5PdYO!cCJhYVg958-O*`()HW_Y~TaQK4Q&U3 zD#fejr_%4@lkI2Jza%)(>U}Ble(z9oe#fwZPuPnHC-Zyq{LBIxC*&LyuQ+K26 zw?-#50A^b?o>fK`ZPvSThl0&ZE=OYXiPuy`Y`)#?hM5lRhGw!Tpkl4a?Uab;NsWZl zvVlWub0}{&%EO)4P(7L6Mp_ZbO!n{KBZ4=EOS}aetXRmty>UK>eY7ygk_3>T4c072 zXx7ye;mA&Vf5W{wx5b|>>j9WUAvSjR4|xOBw0!OxLEp6Z+tcln=8~Aq%Q?5tlz+JY zYhL%zz;L!f6rm#u2pbL{@D z{QfVYz#?~l$)-WvaZBifU)K{`1zu*4d!fq8N~$eb4_GWzSSSh#;~)hiV<7cw&}Bq= z2TEB@JG+LliwihnxsDM2OQdXl{iCz|9a-M)x2r`38*hi--2g6 zjxdIXWU!p5B|!E^d}z(Z&C6;yp*C0No`DzJ4VOAdL636=iJbX#!BFqGNuhcPsF}Oz zB+<*iIG54#Y|-fL&R$=;=EzYM^OrsG$-9{l{?zY7=~3;M#_U+am=ZG7w=P{MFA=h}yZ5$O zz`SdXmyz#JQgiv{%LSY)CiR9Hp$%?Oj*eW((T3rV*`DFdqJ{03{)=Ght;WL+?+BY})H z$0o|!^3sVGkj-6_HB|Fcr66Ha^Qd~})aLFgcW#d8a=mkh+$?DP%Sp<0_cyysJXssZ z&v7HBv-R15431=p&Hm%N?5l=IS}6kC&#ySQ_I6kOfP{LiXp(fko2C_2lore?|=#}Yuw0I;N(56w_1M_ zOtvQP_x#lhf)qzRAJXwFOFwx_;uT)onsz0SJlD@*bW&?$7j zEq`F{9iv@twtDXIituw{^d~)LACN*YJDze4iRgS#EHjxO(zaZxUH21^{R$-&jLJr{ zytd-S10Fy`%g{!Yz~C8`YNSVvU;68t9S%LFHrSl-enjf8+e4QA-dpPW`zbDYW) z+{;jwN%K@~em)Wx?u-}Q!wue7gDkBYTQlfPsK-C;GaR1nJUq7ERIEoee2yGkbuW$j zBkbH9VC#zRaYjmLJ208yJzM)t*oVYxCzVBr>wU|o;ZTyPCqRfl=+VOOq3nF}sAaIw zz5Cxw9fTb9k)T&Ff;N#EOlwmGMB$F_6pDc}XxsQcl-t|Ned2Tft(Z!|5WMWakJY+2RH&chwmrKDAQ0&fM21+Sje!G4Vw(w{RdQy$s%I*rI!5 z!jcT6XPnqxL+y_TGKFSlQUroQbL_v@4~&w-x4aEX0=Y$BkRJAs`WI=$w|q(CehAzE z6;@wNLzO&LoaM|3fq;$g zoy}2svB`yP&>$7C${-O0e4Pm-DhidZa-|18Bz1Je1$ItGJ=g4>ZRguJ#Q*p2tNN}Q zP?W=lJAolIq*ZS_y=J|9cZs>`ah^Rq5&I+Q?=L)(?Ky8i7jAjpp>f*utZGzKeey%N z;0Iq6MN;KG25?VolQMv)#`Wg^P)>WrY!^0b*=;z`2pa=R$eUb=bPJ77tMyni4E4$f zz7BG4m4-w}E?u=xzmCaR|FQg6F1#B+k5z3Y_??pc71w85`kmgo{n$W>1H%U)XP>`z`a4SZE(UfQkIfl9y0hUAmsm_0>K5&PZRNaxABT{Tt+PE8Cy z&KvdS?L7m!LRZ{_Oq)*=lNL{(U1}~{D3x(kaN1NFuQT!~7V)4#C*FI)5O`|bGnVgX zIwzr=JEK`dS-FySR}upTbY9l400@*nqCn2=Mf%29)9%-QCFzZul(I^gMf6nr~xr-k?8q}Cf>E3UHwW*o^;P$WXA72 zQ~9y#xgNFm$5dJ&!+L|6oG%0k(Azg;Hh1L6AgsoRo@w$~az}>j%*W+`OShXg{Wk#x zKfg#%$3!QGgn<$1B%Beng|oDLg4Bf8YAd(7RKJzz&_C+=3R0Vy85%9#rAqT@mr|Nk zo+%L`<=}lAmHHd_x$mt5Im4uH=Dc9U!17}9eBpJEn!;C$XnA?1LPImSGHv|!ZC5`; ztIa8OC5D_1rdq7$^&q}#+i|vaz*V|f-}`;~dMww9)_cC;#tuiE?+HE4)sYY5Q^cQ; zy+HTZZi@YWlHzPM+amIm9K{r&FeMUC_3j~|&B!c40PYlXap*BFTZ6qmeG-14_nS*PR>#sgfvc2BemBm+7r$kKaJ?Y^fY0$H{K7Sne zr}MY6g0VUjR&Ft~MJ)ozb}Pq;KOu26PJS{fLzY}?yFcviCWP~&-PTvfG0qi7YVSUp z36TERQ6P7vsloi+qm6O=C71XL!Q7>1wvJB1BvEVrBt`0QIZAK0^j2gpB*K|C)74eh zVcz*WfrgN8E-4Kb3g8zux7)U$Y{`R3(iHu}`wxMxT7=o#H23p#2+DpyhLi}be0p`G zNKucaLwpDU{aA0D&hRTS70mz_m^L`RF~=|qj1 zdcLQS!+s!oBo(OhdwA+qIsee806$vc8P8B}Z-@rF#R_yiB0red!e=&A2mvqI9WVH8 zRNNz|(2HCQKJ4P7-{FI@`(rBH!F79D;B#c--BdLJ0D9nl?sLfQdTPtg(;{`0f_ zE}w6mx3B$NOo^H;oZktr3MGi+_l!%FD2=pJhD^QHLPkNU6i=Bh(-kY5UWY<0yv#qk zm&#@Wnj|uVr&Bhy?nhkANqyKlZs(Jww;5eU-C@7*v8aAY^VMMa3L)fboz*v9&(djw z`P_~?M1FpLZ`3mNk-qt@eez=~)(jhs74+Okm;#YsHy--~0hZf6e}iiy71m1WK=r+! zFMWMu;~OHP2ni#+H$MPdqfn?+Utj-IiDvg$!J}2Db+01fF>BB%LFl}@z+BV$P=C)^ z-_RgmqY&7m{SqKDYi;C%`~E6LUE|{%7f-4+=!uDmrwR`~)C(+T1T<)MeDW`9yG434F9a# zBm*cT)lw~LM~%_ZQQQbo>u$=Q{r}!6mQm75QdqzK4|emJIdw2eO7s+opC>&MH8J}; z!)M=!R{KCW$Wb{`0UNW!!ZJc|nj{5QN)Bm^_<;P&1`5pElMJ^@+9>8WEi4-r^}Kwm+b zw1~gHx7qwk`|7yb_Y&5dJTq76577cmT<2R>fNomfUI#V`WFfRsk0p6z7wu6T3y4!H z)oBaSDHBVK_G2I;10Tae_>Pzy87!-K_`f)idzrH6Ga1^QEIdm~Pq$Sl0$oyC0(JqF z?9i_)_{{hbxRsS7P&C86v&xTIuEmdh&zzuSRnot{%7q;TlL7!L7R1q5FE$3c=)X6P zC5I41h^lL7^1aSzWL7;sRiMI3h)2Of!IB{F^O1J9Vo3#-OG0KPZkFr7uWcGaQJHo& z1l$Oh5~_C{O8;?ggUP`^dN;WL2a`4)SI>cFZ=s& z_w70JTJq+B7 z;#)f+P@q1!d<@(boAGOvqDgQf z^!(4!K9#6cIWAege|2vb+jw+*@;I#s)a=!*iPKkLU32i8)SgegM16|%)Rui}tUxxC zUpCO*$SUF7rVTdWWYXwq`od&L>kKC@b#5dGT+>2&`B#UB6t!^t;c`(*K*w9U|V# zQ3kV7Dc%?_j8!}8m3k8s15B62yfZ77WB?Qc&Uba=SKeni44{kv9^&%v=X<^rm(q(9 z9>H3H$M5@enwL60vQ8!@KlnK-WrWG3EHostA;luq$So##*kIW2n4e`@=JNEm!k%h0W}9?QUcB2aL`yi(s5lQ?29UbD6b-R~ltYAIYgQb`c21$UaK(zFkR#H(z z=}f7E#p-R30u?dMflJVDH4;LAjstchAeOJjm!^wL$N)j}oGc9MqJ3rN5hYiR)R)g-U)d!RVWTThg=lJ%_oY5}kiDkc2K{TnFk!LycI z3a9aW7wSAPRvqXaikSxeHW}kmO$z{Mt{nG1h@z870NUls=>`@^6IRX`yw?Ei(eRtL zRm)3j>KpI*zuCirS$22skVk(6_=weBt+~=C<`=gPo~+x7?v971v8Nev&4i<>nL`_? z+?fg!xdmq}Z$9~frP@6|4v&uS?3oW6Ss8o!7M02oKLR@axT{g?Qm`$1NhJIS5aC-` zJewBRJh40wuTiSa7bum)kxYYzYTU(0~lfpEE&vzzw)#rC&jgW{Vr=xoHYw^mn& zRa^N9l<^T50pYN#Xt5D8l7G_=j>{K`74_YG;{<3c!kOCSN7e?o&?ROOc+BCLuU8!b zk`t9LWw_m4(>%7B>)~D6d}4lOY2a+F_UQ2Pw9QO4!nR#|MirSVXH95V7y6(K-PR)DXe|1c$OseQw* z*d5V5JpCMk?&3lbdH)};(xc9D1CE{#0u|cFGn%h-cWbP#EawM?X%mhlrhNo#WbpE3 zam6wZ8LK?t?gF>V9uUBXvUv(!jU2yxH}5R76Qqz4h1oY=DUb3OM75RNr%gcLwPVjB!q*LPY9JpBpegcQvEdx$y zBrL2Z;KOiJXT1jBRb0{CCKcPpnP)LtFolFR*4r9xtNd1e1iI8c-A^)6d5M5CkwfyVH%9{zO$Bvt146 z{W-*sIVO8gRt`4BZ3|;?BPh;Ecr5u_)z^a@&F51i|%%LY0Ox#N7qf7iX7) zOsyTd5r?%mUDyRgWa>Tp3*4LHUQ9Edn!_xIN0N%=%SEY2T&TO}IZ$O;?u;Trz` zH-ZCDqp7%%Q=eR3>sf>vgL##KBrf8A54_P(_(a*`6Qww?9M!Im&@AYT#UK(2VR9II z`WQ0gD)hN{xyMgtyNfk0$#pV_-KN?Ah(``LRxEN?PD@WS12+dGKW>Lble^z#zdU`{ zZ@Td(x8Km%7`u@;z>E8{ZHZi7c#SH2J35C$vQFPQ>KyobLE-pf&_vy@TWN0LnH;gK z+l-KMGbl&nsaJ$x)a~HWCq((eI1ua7ocZ119h8{}2}`T#z+=U|YU^c#jl{3#4=q%^ zyxOceh|-3z6=*&W6#7)M@9VZdK@G04eeSUW48ie$^U+a6*tyjw0IfzgX!tMMS6r5I ztu9n&E6E7K-j>2{ZmY^o6ITHD!c(nurX27qeW7v!W|9}CJJ))h$+U4wT7X^dOJAwAU@~c=^ox?uq6KZ^|NA$v(Us9+wp3x! z%E?|A^w9BVa~a`BTpV}dNBKP^f?48k_Kt>5RSd+0PG6X7O+$4)O%=}@#Q%qDJB7PY_%7F(*sZ?zVUyJPg z!EL(rI3!_7O2(F6xtWVJS8{dFyaA#5zla%4oAbBmD9yAH%a6?+oguIau$5Em6yrja z|Ij?KJsIEzJv*OORItT+6S_%MD)=Bb=<4nPubmF4eH}lP&C5(8(bc3B%jQ3tp=q+CFbFi#Nqo~=aT_->xIV0u8zj= zf#*EW152KN)qQ0r3|-5mg0@+x6!lFV2@>zP8VMMvJzA|b%kR2d`O|<0#{A1i_jh0* zGawY80x0*~Dw&1P^+3(@S?4}q3Xt%v2C2us5oBe}QWThNu+X1iGbzw+;ZdeleWC|S zhbv-Oj8{Wu>16gav;@c=<$Q9g-4mJ47qLz$3wK{uEz}_of2%u~0~>i= zp#1wLfp`13fVW5L!Aq6`9(l46cK|jL;LsX+37WWm5WG?%Yv)JoPCtu|b!k-TZyapf znuB$hXf8yCwZUB0GWp=G$A&}q=;c!d+?lCL<~6yhK+%*0%YFd2=+u#4JaV?lQ6i=)2$lbo}PwbB`4Q?Wk85(+t z$DVMJ=l!CcwZ`Jfj|4Buvmt_yCY2sRGUk-V!@B>98{k*xHzaBg{RzR>o^G4Z%B{9Z zAQOf15q)oIYAdjOdG+$lw61Zs^e`Eukk>TSF#O3s-cSXNUm4 z@>a#4{6lkm*O=+nD(S+Y)fg_6^%HO^Q@6jBOFuV^V1Qn?V$O)6w5pdTKu+vAsmjHGza*5unu9c zPh<|aY5bk;Zv|z^Eq@#4GwCK^Th&-7ums0t90FSk>9t@ndSh zDSa<1wvlW@3jH*bD154gu=KE_s6u}mv*y=zc?e}Jh7ml5tb5w&h)CJI*5U7V4`k=v z(xK0>tCqgrUDzCiY zBgw(vR=mAcGXFG@L1bG15$uDCJHrX8I>4aa8d>i7A|;UrA|oi%YK@=I`^*D0U0q$h z9*f!^EE+9xy)9m`fSl_2(2Rx%hjo%fwTe-q(~6#5;c)V zl~mZa_WztNaX8dfO3W_(5t9-c+{7EU<@qOzOw7$;;8G|P`oDrp?1o`~@6rTZG7fz9 zw?H|demUD?XlMx9$9^Qm4OGIWA&;sANF~NVBDud%m5A16ZS>`#wZ0MCXnt;zDjvnc zruHX_CiW+~C!|>r zZU9(`7{G$eMS#(a7S5$?I3;RbOM>X~jfTjedw1r($GTf88L1txA{D!JR=z2ub2I1rZ606Vk+H_=)*ig0 zr40iOPVnpboQ8C-V6U@AG^r$kSchnw<5OEP8>Vt2F)jdDH;mO|c?CX`OaSVa1gL8M zYK0k{h-HE~q^|)$ynENJ3EDh@<0h0&-4T60@Arf!gTJsVxNmjO<4g#~;7`Qk8hhVA z1BqJG_V%Qa;fTjSTL83DQd1`bz7HG}o>WxfcE}4zaRxEnPr226g-0;4TH*;063>6x zZ)rmsuqE|ALO?%^CiGNiIm92A(}_n?rF3iRfD7z`01OzlI7$WdG2+o=AuEb(=?>f*M*ua_(3ckYoeFqN4I*hedu7PsjoZreV zG?~(wG26A^aVm)--OQJX*n{kc&LnQ@PViYW%DnhW@30X(GwWqW>5B^#iPla7T)sgH(V_fH}nLIXbh;sD8D^B7gtdRvsx^ z{i!yl$#Op^O+T;iNpwyT*$;A%2bA*%BbRc61P#=O3ON!+j~yRjCIs-UrYLXzpZ}|F z4+r{b`4$OWz-8J2YIX7E6@;l?*9K%`Kb=7LiHlHGqM>@Z<5dglk?*+Al1-K%X@C{C zmaX>X0ZKxdx@1`*FYDpKDw~yBCXOb5592(YMcs6`J<;dezMI#^bhRLUcd-Wq)pY1Oe3@1%P5w>(*U;wtB!orWA$Qe)8?7Qvl6nVe^Q{$>g~E zbKAANw!c3B?%WB;8V|1*Py+q45N}3H3_Ms^Sh=st+Ggyj6#_t0=4k5~{859W*Y5A8 z*SxYnW-(VS>;5xrtbVcB<`nCs^9|_3qgDNqKo~^=y44N(UDxTXLvaxrfI@mmpDzy> zv(ox#nP{h#+ufN!4x4=SKH==A@;PIH*Olffd;;usGBY*oO4zHVr38~}d%${g^>C;P zZ4dEiG>!2Qs|4ae8n=&Mup#%;|HcC7);(DB*8*+0K$)ggtEGD)N^o68i%`|TK)uo2 zDWj7RQTL#C1i=dc`W^HA@Y1*9cb;Bu7bRIB7knMt`x&_J-)_$G6q}~57*6v+f8yB| z20p(cPP{}QkV~yHEIN{2+hA9NReyrcTr4sZveH!6rU%x5rEXo2Y@W=M zdv%PXGJ_seHe~Q_;E0;G`QnN5boMim_kXl=yWAe}}$%K|rrC*K*)} zxF{yfi|JeKqHeC)&5-9wm;b&2{$d@U(031q`mcUK=}p)@m!jw|zII`F$L07@7wX-G zhzQdthsiwX;4(4@fELr)eiPqK<0*g#my|_i@CA;VKKA>>(GmXzlKP{H50$#}tr6Sb zUN=A+V%E`tOd%J+H8po-5WKxz-PMe{hSlwFx(~ogOiW4W2KGsTb`H;yPQulD|4N+Y zep%262Clj|Xp@!$eN%esgA>v@(WyE@d{2X4mB!Pkb#pU{X(p&OOh55QZ`3344U>Eg z1#dIZ>JA^?vI8@QLa%O)=c9^D)yf#opc6wianAo8Gc9ACzP`3ewKrA#nAyQ@xF`2~ zu#pFBNSi=IMJ34Ku~5hfYHx$05^)Ao*@WVIo_yn0Y=MYZTIKumK!P5 zb$XCVQHDr^p8@~h%fqn>DR1$Ho-^dI#&_i#-OM&@`?;R>wwz=?FMRb^r~ZhE*!^w7%t#J4hwG#vjN2{gk#cE#B}aDws^0wb zuR4Swnmm>Z>f}ZvhY54`*Uw)8xm4EvtdbNKcn{2lPXHAMyAm#sJE2%)`ad`;3Mp|~ zrxbS*Jk0`N#6v?vQ<8_;9v7^h`%fW2qwe49(gn)(7fIPR3xp2P9Lo$;D@ei$yzJSH zeFio}lF5GD6moeOoOx+_nAnivFsM#iWBG*%tZv}ljDdCt(9#aNQw+}5o?RNEBP^H! z$-~WH1GoJ|=@S@!dpNf}ebC10+;^%4i|{ddTIT45Tz;DEKwKmNIwpW7Hr3Nu8Q%S1 z18ZGR{e3SO*;YBnwrfpIKhhQC|56^0Ci_LDA@X~a(6x3y!MAVEP(x7{Snm9Ro`-?; zIp~SM<wK38#)AVX=1+1p+umeIwsVQ?$q8KjZXW4;U(k2b+{m^~032Uw2Zfn>dfIXk z-qx>y_J3x~rbQWWZs=(C-j=UWkx99ze!$h$iL5)UO%e|n>gUAc>s?WUV?zlh_&7R^M#7@W zzEOi7anrG+pY0zBUp)u2IYdk3#|ymqkaD7XA2J5f22-=(@O9`FYFGpbDrsMjg?s6= zu>7#o^?t*x$00kz8jjHSqN6@$RoPhXhX9QD%}G_%`uX9uQiE+>j~S1jr$x^LFtUpc z)jqx;<@*@)ECAyV;)llu+W*bZ<~7NuuYwVq2Hgi!C1~R%;%L}Wu0oX~evX(P+l)TX zEO@FU;JxYH%It=7b)&jcp2Ro8v---2zqUW8al=@#F=TX zAOJ;hnX#6L3Txwlftxb9fOvtZSkBA7oi^xMU)6EhG~4_iI1Og8i0At7rURbW(O{4RS>|7 zxba4+cvnd~aKlBh86NO*3V)2OyhA$O*=o++-o;WWotNt>VH|?~VXxKE-V+gFSx>$C z91uL(WP#JFQ(yl(m7K5G`6s#qNsC|j!o#A$`N3OpLP3*X+h{fQbxuz;YGUX^W<6`j zb5S&DXmVVp8PcS!4SpVVO)i`&H8F93df^oT&{LJiB;RIqc>Ms@*ayG0aTPNWucwBS9~XD0@H2l z+u@&)u52Hqqi>g8f?XYl1gr~iJ_->%{I)JF__^73FKRDgUeU8BHod+gzs>Bk^5sp$ z+PWM~e8AJ^(J^4s*L_Y1TWDBAb3M(b)9PN?w7ecuqcNA_w8nFN4mQap((}UV|mlD_@9@&k1T8W&lq<*GZ==G;B8}ndK!? zj)g|v-XCbACx<3A;-pbhhK4IAIQM_=NCXHc0w5(R4-~p9P}qZ&C+U`V7b&e$tIk=*sHglwJirdBU(;xOaE^ug!AKLLQ#h$5yd3>^Ma-1YWez zincpW^W=G?KC2jT)PGNtQqa(Hw)sL@GK8v%~P8gC`>v@hE zzxw6$$i|HPdJTzwUGr~nxW}CSYKX!-p&B)?nA?^(Y|yW3OAmZwGz%zKrU~i7gU@sI z5(vrAW^&Qv1h*KOj1O6b@Fbhj>epgX>5z8^``r4_Nhg7&Ulq_}@U{Q2uP?X_{W4*? zu2_A!Ga4~Tz@h3C``2kC*Np1H#f1)nvXXbH7sK*$pDRPSC#d7nEUq99<}l9b%n5w(%96Ia^cj}1hVe;s(Q7_y$-cf5u)S-G(&&&}Tr1R-3`Tr@GrYli zP-nRRYGh{~tClW@psp=U{B7-KJ{nDDhS!IdJCP|n1Ox+3&2 zh|C;Gan4U7Q9eoMiX~t>?rerZHF@&Ge;ov7z7(<-{B9&&YwVl9T7BKj?hx-qw&0M%_XAXukaUPK6 zm75;lOKL=8DPj8C6FeHIbH78r5eInCqgtrftnRD3@YpnKHg3T z@29?8*o|Bif*_;wpY%>lRn16)`4mez?_)y>>d z(-Ei>*hIRfd!E;5C~v}N!+em+uHJn5avKp)efUj0tIIs`TTY$=?b~Yf!7L90A}~_j znwpiK9<6FtN=+>Z`Ws=lVT#Y~>KT|{^BpuD~%X_U(%tqUe zY^t-Hjcj9is&^mNcdq??dBG5;nAlkP|Es(2jE1WX+Z`klEhM5ueWf6}5WOU7h~C5K zQG$%#Yl4U#qSqh@!YI+pDAB{{gVBZ2d#~r2_xsLT-;eXHv(EW(ejGpcvXx|+`>dj`rB%M9H$WhbDJCZ_;s-NEc5ym+9BSx9}|O$qWeDIMHIq5 z)u{AS`&ch8JCNMD<2J4Qy0y}hkD7Qx(&blS>OB3t*VTaKMT%>iS)wBv2$m!7RBw{Hc9^F&Oh_$*&X@V_%oqlr~)89)bBt*pn|5adxuTp}jWORV2Sw zMwY^QGifD)3TC-}?(D6rcUJZw7+m8lL_M;BHA^TQP8zvj=K0N@``*2KC6k|Qg&pP~ z>s4EGF8U(ER8HOOUHPR08+FnN8{6gL*Ipy@QNHTwTG2qY$K@nMr&lZhR)@NtUKh~% zu|aj5oSq4!Mn?SMh+rlUw&c?(nyQh7GGZTiM*sA^S>nF?5^i=lcW)_2C#^bf#q~1qc?Pj${?fsS&$&KE}<;TrT z0@tU;9F#;r$oRE@EWABznyZDaB-$Tn_5?@N$&I8f*40?=10eEOlf=r!#pm#n*C-Ww z@Bjw|e@XyR(}d?sa(r-$iOKmEqPy!)s|mk`np!}M^=~cf4x37yA1Jo-^GxlKdXM%| z+=a~im5#Cg2RG*Q_TFjm^$)UgCF~54t;xyFZRfYcs?GTgUP*dK{hSih7x8@8^bO?C0oc{7C&s#oUG8P1F3=zT|GHB&mI$ z+HKnHs?@9ndT#`0D`LaUroU#zc$t1WOWg=F1zS8}yhi&(g%v?}e}}0%erccO*Mdsf zO0~rfsBB-Z8fzLK1&EY!igAh42a{V4bEW8XNsDJv>g_OW3DwMJhx$3F{R8^T*(}3v`Zs2vW;_{lx_<}hb_%h? zI|)%su0D#8(+pl;ak7f5OA}9lKw1Mu)nFYA(^go z$+Jg#L-gwQsIXS;1$!7@-r%2UL=XU!#6IOiIC<0iZmr5yi^AmL!@KQM_7k<<(FVuv znOp9|hf!#p9~6{5Rg&({tXdvcZ*7ahHeVqaropfm`NbU5sdL7An(z{XIHVSMgIyz^&&%%gX% z@-+bkZLx5IdPmJDKNR{E_7rUl$0WM08zKZhN9XA1v2sVIzHpfqxtP@ij?^^-6kG_$ zK>R<(4RM>I?z?loc;HH~jMz{hwx`;M;)|#U>RB$mW`NU#U!em%sGii#JIu=Tl1^7c zKqce#HdTDD*+eB%;bz*c?lx(BKD!ZT*84o$;RT?2>2s||gq2Qgid|0%p|-b5+Kl1( z#>g!(fivL$b`e@=h~7N+ZcnNFsaHW65Iw_y{Mh~)cn-o~)3e7@6Tt-)7>AAD3KIVI zxFAcKszZ$0JiqihGU@8d2g4)&B%eJsxIP)?Jb%b9l++fgK&K$G?Dg~4=AwhpR9)Xx zaR)JxjGWAu*fp^qqzn>@i=RlQbdJ_$1@4RTO@pjPTK+3U$d@_3F1`Us_Ufj?7m z{mzoEXoncW;si z$$Pa#(644x>k?V4P#l?nEvZ1l8 z*cS-fnwiD9x`KA~;r+wSo%yX9QqA~Cpgx^!+|7N9rWV@N^#qVey3QC=tsH4rvy>V&j zr!^k-!>HNxS71#uOjrU)>Xykw;qxg^1D37rS*nn>mh9Z#@zTR%#rVtCA1u~0-+94y zNMhh`H8^AegD+;a;DLD}6e5zG#{CA({nOrHq2bicdfqxTH$O4!uZCFr`cBs&M5kOH zkrHpH_6HMzRWg%yaQASn#@%01>@8V3td^jDy5#`AT)sWW1fI-+V+R`o_i*KI_IlCu4}u(UDJG)4L|`mUu0gXTRpqWs4WP{`+c->rGextj_MZ zG^y4P&g?TyU01vwo6YF(&k;XvzR*#*laKtqH;gPgbzI^e-#lWoMRjZDD<~uXIX!r% z6dbHQ7PU8YdTPk~&s4!nC|w1Mf9w43$M}&RxR6|_)k3st(V++Jly<&;aUO_NI44*6 z6lt#{w4LbVC$*zHI`e<;0dILeaK9l#&z>oA<~#(GxLVNW#`w)u>hT#Y8i$Lw z<+k)--?n08d>P^t-;2;EzmK}|%S##zxJhnLyp$F|n4Hq93E6c=O zbxIG4xZa}*DIh>-y1aW$tC>a9DkX(2&&|r>eooK-BPf}9l4K38{pw6EU$pr3J^#x_ zgp{kcmXROM(}IHE?J@wVC6e&pet$+vi_Jc8Jl107#rXDO%#fiGKd^!Olf*7D#59YE z<6@8KA@?b*&1?xL(8PSlT())f_144S`41aldM0Cn`!%a23`!|tBmrpADJeM2y*6R? z%Rq$iu!MOhoc;9O3<~HyGHsI)M#!e(^*7ZA-Y_8jx>=D|v4qL=@ZRVJ3cLLyTkZksjva2G>zZWfiw&ww zwhoXJO_n!@B|M@b{=T88{hpQliE3AI5Cb}2BgNV$8L7(Lx}|hU3DO#md<{_hbKh_v zVjvovSCv>Dk`jegnhu=^dYG6<>TsNVs(ekk2U3gA(V>=OR*ZY+YeQ(0GChygRhEfg zd-6Jd$DAN;aaZ}g*v{ZcKYoq?!&NrAGu0%y#ws^Lge%6u8*`=#ny)s%v0oI}C#~pT z{ca=OU9BgFSc4gC;7u{{gQ`^Qh<7=kd_>I&(Wsv$Yv0{>QS0H2dB-!&#;@++0qg7J{`Jr`mVC!aP74nv@D2I^7{8dG;{30FURDy8=r5J zVsZ!;#~YlUBDhYY%8-)b*vt!ISZIqu>ov{M3c#T~i*1Yz3trnzyKKitEBHdvW~j5# z0Oyszr!4a2Yv-qSmrE>Q_C$!6>sn2Q?t$R5Z|B9$jIN6A0!D5Wf)WmMgLD#$;Zzgew_RE0viBQ+QG=vkfR$nPKJM} zOB?w+@Kz5=gYc*>$VLd(dVjhIkKK;1 zF7!Hn5Xl3EwBueJ%8W(L73&(cBH=!a#`UwVx6Csh$U3Nz#Z*4>I6SpFfgMqeM2Cav zR}-J+rSU1eqvUet=WpRJ=8xW^HH>zj^@!IY=)>`_-g&_sK`#we;-_+Qu3hR7@DX1c zzQ@PC?HtvFKBv>lz zAK@p#QG(Tv1OUL|diJi;=e+&?R&5b*&E~FbZS!;(faEEAZHJ*7w56OSe2+OntO3?i zS^n_Ymzs}7MMExdt&r$b$J57mfcMbk1ylDf}~g@UzDPIq5#;}j`=#dIE@853H0Ylc2Zo-9*Dv2^tcCRG`4PgEz3hRS#fXI&rr&cZsWrgNO<+ z0C8ur#~4gO!A~>)YbZL4-<)s!=kKwkdrWE~5>6{%cx>b$>uFI#DV&yc877JFIwcgE_pza_ESXQPncAN(Nm|F}ElBANCVsjUZ zVbM=#lYZ#uE;QYZ9yZ?z9Jg}=6kd4ZwG!$o@YG_{zTF6w3%0$FXzxS!$iBnvX*^&f z>imfD=3FS1QC{cVtv8i0aS*y)w#J*r_kDeRSNU9oj)`f)`i>C0+dz2&;AeJ-P>fF) zP8;LDyomTQU`JLxR2khiCk)mE2#E;h>z_zEdT-pOH>ZW0Zd{%PWK^#z~eCA0LJE; z8cppb3HZ4{`KX}+D`N)Vt#%C*-pSife2*bjTPK0%jNV~@S9Uz62j;~iui*oyGdOS4 zL{(ookVT6*_?KZqLW1`e5Hkx=5_qTQ%~|YYn%`GWAU_zXqER00s3c@FR^hnQMDw=z6g2s#>;`F6wHsz3h5%{*@Gf96mf2G*&}H zIKbHbXhRh80_3ylnd4kn^-Nh0fTUkOOAWFEa(a|c@o0>0NRh_s)QMX?Nr0s?4Nj>q z#ved4c9)B)%@d-wQ>A`o7)p{9t29y4W>ER-73+XR1A=jQF(_XE__i6}O9~Kz6%!3a zaZwDfIdnQFoCEeB55>Pt6PN$c@}i^GxumnC>M9;&EwW%F7Jkm%H}NCM5Xb|41(}yx zSQjp!*mI=(_B)lhIp({05+TvV<*@`Ldwqk7fMYw{YRG>^4fGF zj4+dbqWqF{Z;$Ae$d;YeH-vwvtHilk!uofM{c!OSQ1euPGdd6(#1+{Y6Lrc45bBX? zL0dn)7odhrsO`6mOt)YZbBZGZvz=9x9`d0lzSa#<;74-ZVSIn)drPM%{-6S*Xt=Ey z_Ho*-s&pOR2t?jjlhue3kz;x>tmdj0TBWgzXaj{-{TdRTij~=Ymyagd7>VurTOV>qNS2mUGj&*(3 zKe6^1II)IW2p8@IxmtKk6BNIG{(ggan7lhbT-?Z|HG3r;d8)T+0rhiQ+?z#D4Sa;> z`-Dkly`3l=4Z^?W+*wQyIt(pf`HM6x!eJ=?C5uD`4ipz=4PL}AL4#rZHE0d2e(M>G z&-U3+oo@mf&q*o0GrHf_SxzKwg%6F>>q-O=a=!~dUHDMzi{Xmp^81MoYA4_h=&!E= z1}bt(iiVvzmNiIjJ%4BuTw%Ss_YC!BvZ`+ANV6zCM9l)P*>P7gAe+^A2Vym#XjeETj*P8pzT?%UAc7|E^IWlC^89rpO zNFA#(#UG7nqZRtL7^EPeMGML+=s0r&McNZ&jI67$Z}-9hv2 z#IN_F_9|ydf<`_w@8LN=(^_UCWf?gmBZ;5BB-h_%Bj?lHuq#WL&0@nD)9y*A1{#1{ zw+UUM=&2gt{JeUPM>-=IAQDsQ=|5$wlzjLcKQL=NzwqDP46VAJ!0EBO%A$Z2dObv7 z#VQ{Z!sovmO)(>Y3P%O6gZuV3Ipz_RMO)xKddo{U6@U^hHvW8@lfTT?xh3yXlR=sj z_bJs(c2_Pp5-@n2@!0ibU_AQAx6U0e1h1%1F7wtW^Tx;4C3!1<1C8>{r-x*H zs!v$1_S<3!s{t!6JT*2?iN%)^G81DRkLb#H2M-vJSV2%tzMA(A!VhuSS;4+FUg`GS z{ImGW%W?|hMvnowVfpRI4o{DbGh1#0ccGA^XBFiHL?rWpg0tV8GjT3T?QYV;>S928 zbLu-9=9C#E=JA)+RuHzlB?_|w**37K+Ci;%_t!R0ZBxbo;P5f}C&V%}{MR@#lg5Bhuvyy*q&~>O@bdkWbee(J;+A@64!DP=lkaX0l zc-6LrjUx6Id$hqfyu%>e(>2Il>y=035AC4cR$h2D#0y9*9s`b_`qd1Pa?X(&*H+sf z0+lj^QzM))gQur=DLgmJ){2C|2MNh!=qo{_vE<<5USLxI%J7?-rc9YinF;`3<+q=r z24ffmiTvkgoiXtRb^x9(&Cf7DJc|S(i?@~-;Af_h;d$t9)yv{15$}xQ!(zZ4SkWxM zC(YA>cL0~S^y7n%JIKC?@I4oA%0PUn!1S9}qbEua-Lcgozy*7>?+AH^nKESo5pCI7 zHOT?3z(?_O(wYRsQUAG*u)PGR@b5ji`%=*+#nvFfLO7tH^h>6{VaTY>(p*fA*wqC! zO5o`|>Nz9{L7!UD2%ShuR}iVBMN4dM$x>#2Qu|8TH5On4NgP1O`i|1;u{fSLsZdCI zRHjnic3^a=S)V?T%5?Q|n}FAe9S*UNO6cL-KQyRvUBL}3tfQCuY*W%(OrQL0)evY! z1gG3km6c3y$EaQ(8|HP|qNf@(4qHvh~oT-Yw&m86o5zK9eP1iu6CdNm{LR zo2fwv3h>Nfjku-dF~BEq8SNjUApYWu9Stu)>a?t-s2KY0XJu0p@yhg9U@?D>kyhI8 z!-u7!F&?0ViJ%jR%V+exaWX68x!+{`Cob98a93Dc*sz+c_1sgr#*g1r3{*wk!n-C= zXy~~mrSjt+YOGIr?$CtQ<#0L#G6U9|duIX~;iyYtCSdytXV{>$W<%M|TBf0$QODh#s@oDKmSjtsk}&i(bw3DKI7`Eu8Fy?)B`^F$Mi#g|F0Z zO;l%s*)hX4FMad;b{K+#m+!IsDtR7b@{W8-JEZ$oFxm63;Pc^R_%4z7T{}|&O^|eG z=o4o8hB29sxyo_6^vsO+rACyVk$(VpDF6jVFp;&UzQWE)x%Gc~^k|PX01uU0>S2l| z9Dt9&o~H~=NU3i9>!f-mP*n?;jS<0~V5&4Ddv!%2#F3|1ZEzd(F95yIqK&YFxTkDQ zg6pCvsw`W>R*{3qT9o>|R_pWLo$&X!2yc4UBjB$zgUOcWwoHPHFwKX5fu>+-;zU=! znxjSkH%qx^G73DkY5B~!#dpXfykwDwPKF{?`EPRYSt$q;N{o7w4~VN1{3}iIn1V1T zXD2*0s-%Q{mQBXvvUI}{HdR=2;zd1@9u5&crW+O z*6uhy8QBph@v+^!s_&L>ORZ0lQ&Y?MB2(j^4$*D{)dspc_ES=d`Xa~2s|r3!{46Tz zC9Pvr7}t3kM#Jd9Pz6YucxLDfk`!=$?KYgc!hRBp3@J@i-m98U1Wbj^d&d5c3f*MN z9E!oqmuyjZ4nV#`N>Y;;i3ZaJg+9mqa)BH%Dt}jpDpeBd!l|7b;}Aw5-(ERuY_^tx zqvGr7;x(9B*kqn->a#p;p3S_##lz-dUg?Z}`o;ivEO8~qe{|(_>1u2B#={UfYRPW# z?TnDG)hJXaMZK|5mqsm_^G2fj0wY?^q16W?x7XN!>=i7V(S? z%Ii08k{y-EoGOGdj^n$MflkX=@dmik%V)(KTveefOf4KD_TCOd|oJA-;MF%SvW4H9LOd^6e4n5(QXnMjBzHD7fyx>6pccyzk$_Gs*RGc66Goy=0$3|2&N4s4c&>W zZE8IzhqDL$s3~VaFR|^jfi(do8!nZFJxPl#U6Q+gHfMUi*|b{J-{^uRh>T*MLLAlO zgkOl8t04dpU0X5f2a2)!n!Fw&%gKek-TH;{-niXmyH6>Zd{30BlarHJkA=rY zg74ekvV9-0>#(fQ4yWBAWNMI(Btc~}tdmRM8vLnXZkCahqVdV*E zmxRB}f@o&F=`al@v(S0eR>`V&?v5yews;jJB~b&5LTFIVuKzn(4cWq) z4HT*Uzme5s5iu1?{;R9GbPKB7lKs#|n!4CC4?N(l8B?T>J4C>xn9^_uZqAcQw%*8i-y%)^R| z^M`>WS!hH=oC!sCO1U1#NNCu1>3V?(&-F_-Qa$)>)J~9SjYFgfXSUjlfbxOEn>g+R zt1e*vTaJcs$PJ(!{ow~Z%)kUX0Nh+&dhzX}Z)#66z;Em3WP2&K0IEsm5VO6l8lD$f zRQCX=S(e0o{GI*giqCqq1g`*+Mq z^9hF7IyjWB!}NhPLCY8@aV|rmbX@rw9zl`YvoGdI8hP|f=xy%YdaLi#)x+7WOhp9d z*o20KNda$^QbKiQ3QEe@)YRT!A}YOKb{5)#ouaMJ&%2mQ?~{!c3gTas8Zph%3AG&t zsjI%c@&q~(n#ep2*VI1Cz5RXOWTnSXo^>X`Q_jb_N3#BKh^an%t2=^u$=XFym5tm^|PuK}ro?m@w zYwxi=`bD^kVaX(yD$21KV;n8gGxRA%Ed*$5s^p|9wA_V9fV5t--G3`xU%~- zO~kdZ)#3>Y%h$9N6*)^vpbC(xcu=Gbn|c^jBLJtSWF-x0`!EdyOR2(ZSO;(@4v;cl z-X%7c(~+l945BUljptxT1eq_;-ni8V6_G7W+E~|!0NN)>DVRflmuMQc{>sfwfS@nc z*qM0DPQZC(fGJjUc%s%_5^N#=Q(nU+`2Ma`oI)h6Gbhbg(EtB`E35&mkeI}lvv^1R z_oy{Zd1Vih=LL7%3mnB!4`l_b-1`54bjGTFO>vBpb1VxA`J^WJ4A)1Kw<`m{#r~w|wmE-t(#{$+=DW$A zTZ=5dL4(#nJYopj>oU;QSVOGT2VdVb*gfghDb6xT>_6D_ zB!#@zy=n!x8JqT119#q+cxN0eQ1{GYSr@1%kmA!TZk?Met|CoI=bWPM+m7p3TYyxo zo0)GY(l0JmtGcZHDojLK>*_!2Xe)nqxS|3xlAvKES)954lH}zI`0NnkmEQN8_Ahfa zcmc&RQNBo8y+IT#)dF}TEO+fi;`tfK*IYyp_s{^V1lDJ@29X3PD+ceNW65+y-~vwG ziBM@f5sFnwb9p^+X7=N zX<6Yc!Jb+=@I`U-?!EiJ0aIbw^WD96{m5Y2NWSfC_b;?-sgf$g{Gyk8q51N>{#A5| zd%5#5L%B0ojjum4Loibn$c?BNRUfira6u6c6i06L^p*MmL3^2_t|`bC2JleW1QlRH zE^5!=X3_CgzEh1@QBlx(Zk*zFDu#`f=ZnIku@$JHA7`pOt@yG=qg;fox=)Mk2{MYVC5{_Ww;-Y@_($@n!<%tuEF_c1^5RB@-+`%*ukVz8h+Gbs zW%X>gqQFONlc*!gFHd8$F@*{5Y;TymNKtGn>JoUWsO}x~!g+1}=*1}pqmQenVO9WD zQldMi$&n+*KrNYdQY$^^8B**^fC{R_{CB#IQcZ@!>qi203=lA(m;ETFbvo)XeU5Ae zGvs$?hr^kf{kLqufp0hNvT0iSwgd48L?|suCfrgP$9nMRQ*guCv^zWPqp`EH0OeLXIECL1to2U2 zDwDFwuKwD&F%bYLxLx}DeZa|8Ts^up)ap+j;RgW_2%+fbwvoY8VvxPPJpw{vhjU)D z3iJcMtM``3^E-iqUA6mfVAE8IZ12x&ys?Y%^vu@IMZ81en!_?Y7=Wr^SW%Qg&*895 z^1(9gZ&_4Mvxy1v3eQK#0w2qVk*s&-4E{JZ**mz`*th4g7h~$OK9mgPRbWEqOb;0B z;E6fZ1+p?AW(APaZB0|t;B{-j%}0y#$9)Vx&hx#T4wXR_FUGtd1IQo*v_iL~SGz7; zUHJm40`$v707VU4Yl1t%>mwkafCvmoZrmw34VRBZ7-+=4xD^{@?GNuQHQd~oYV0gN zr~L--Uo}aAPk{X)3K&D7iqGrYlm+*io3H*tYXU$>1XZ~@Jj(m{7^vz7R})f8(ez5! zHeBa-7@T^WtS1^CJPIMnb?v=@Z8xe@PJL79<{P?+_n(0ZxE=mbu>p<0WKvoz|5Zo% c|K|5=(&7wAw~Zq1E(H82$g0ScNSS>6AK4Gk<^TWy literal 0 HcmV?d00001 diff --git a/vignettes/deepbgc_filters.png b/vignettes/deepbgc_filters.png new file mode 100644 index 0000000000000000000000000000000000000000..5157427696a905c1f02327ffc0dc476a38f459b7 GIT binary patch literal 64977 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 literal 0 HcmV?d00001 diff --git a/vignettes/download.png b/vignettes/download.png new file mode 100644 index 0000000000000000000000000000000000000000..556ea9801dc028ae018d33232223b621882e7dea GIT binary patch literal 9424 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 literal 0 HcmV?d00001 diff --git a/vignettes/group_by_hover.png b/vignettes/group_by_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..a429de97bee97141cb89405b31f136442bec554f GIT binary patch literal 71192 zcmeFZbyU@B*Dma~3*8nd2&jZeDk&{0;G(<3pckQ}H1?L1MJxdUk?syjl}&d`EKs_U zSaf{zb_?$B8RH$_dB^$A8Rw6~*yDLn*ZS2x?>VpQn%DfjmXi@DIZS?d*REY8m^-%> zcJ10XziZd-goFFxZ^BCc#=`&YwYrH>ItV{b2lf7fKcBM}RkK#KFtE0}XQ{u-(A>gI zpT+8drM|wom63(@%$^b<_z)xd&@D^-d)CGl<`R` zxcRuQ!+#fUi7G1n_4dx5UAr#q!rT^7di-vZ;OtaS+}he&OQ+<|t*aWg&g}e?M(Xrx z`LMuAK6yrW37kxCJs*w4P~EHEO3al)nz6mSuP;UXDM3%}+u7>Q-TgJl%dBGNc*y|K z_G@Q)XVo=A3SJUlv&d&(99A)LUFVgptDvq=?AYYTqaJXzKY!dxEfXe>?fmJ(iD9^; zpFiKe9i0E;*Y6J>K41Cu>#pn9zc_9Ge*XMDbl*RJj(K0D-v0f7_}k;Zes_CDQ+wdo z@1H*ZSBE!nS*fB47 zXxfCna{I{d{olQlvb5u>DQ%lhU&JqE8q#=_UFtZ=eRTUUhlj^a0?QQ2Y35l-J>E%q z{{AZS^&lyI>Ye*`tG@N$y!ij(+4R_)8fMceRNJ%vD1&8)tnh{sjkvdxfq}t`g;?2e zp&^&^j@K1*x37=Rkkv=5WPMJuh}f=KKEuk&nxLE*XkNTxKtd&;=HlWq^yuq-eFFnV z78YrHd;0*(^#pn*CdmgC-fel023q6fBde#k*Kz$pfaF^XF5_m}wj^~$b#--j50941 z;Z7fJy*g&xTWD`-WyRERi)_?aoT`b&M?m3wMRG!ObF=mO@*{nHePvtKUl;XWfi}EA z;6_hsOlsYnuxz-p*Ld&TLfqS=0oAFj(+H7oxjEIPc!&o%lda&}ui&wAk zBN6iZn_F6#3Xc3blAJNCo<6p&T)Vm^GtN$rpX+EG3ucv|59DZ{O}>n#WpV&rngZdX#;zDA`ca%rR|xed@9vdr)io197kOyb9CP)3~UOwIytG z6h@=Or6`a^Ge*0>_6j^4LcUGQUngh=CnvSOr8ARy&`SqLef_G&qLy}}xVTuO@Nv3I zs!p@ML}GfDM{3?2_)w+f0v+|YMy1c{No;rddBUN zjm40R%uKH#ICEFpy<1P5A6i){N=bPJvT7%cjvB43ttGl{ZH{;6rlw2Zy!ljUZIXjh z$Vtt0b0v27?%kaC|2`NJLfIfN@5yH~9%WD$Y+Qw-Lnj??OU%}*I!VcIE9E1+nJ2XT z?b%Hq`M1t%i(`>KLJC@1@5Wo>BdG)(MyCsA0{#5_dL3s3lXZ%^t{2l19#v2}EOr`t zn34T@&M5~{SXt+YiwX)73B_H-x|TPMQ=%~WnR2oX=-Z1ML7`1 zF*uhEqH0~Zur8cWxv$un*rDrcJk}g-X=m3_=}Y6aVQFc(u+SpQboHv-ae*Ih$0+%t zxUlVUj|R%enUGp-52D40d!KKTWGjk#vgbh8`O>m7Q9;K=<}8a49*g$cAda?7Ls=4X z&O7Pp=^FXg@%JA*;JWu^FL9znHru4F`OAwVTn4pg_Z>LUy|A5W&Worlik5A-=921Ntp~0@%8x%t~DF0imnjX znykq))txIVFE79E<%;m;awH1+*@22gj30g3Vx~+eUofXJu6DR4mWG~Q3_e!A3dg9d zsgZ=d<6otx@N7Sc^=RWoN`c36K7xyCzGiH&CpI@XaZ#`lj39-qE)V#4UEOL^)y=lw zfCX$hB`XjC&nphnRrwsX%d&{oNWF5VL7iz=iS-x`LSN(CwZli|IoR13>iK6F*x3~Z zDtz#?1c!-al)ZW#CRm8m1kGfPY=zR7By`#?A3nfsmW7G`3fDLzaqq1Z>SOB~leRK4 z^j>EboJ9Q+KNfr(uMeXnj;&e*_}bgMG_BfT;~nuimaAI_v{j#5lFY|S1>Ikt?C<{o zp>y zOpJ^YaQ}>R*}saZ8%>;cjVf1yDwD0AOWk;Hv`~5aTVc-&y0}dlsiyGQ2FA2v*AtEb z$#9>->pyO_#Vd+ayRN4PGOK?G6LhSusi`ptX%JeIN>oi%nd-`h6whJrs4El!RpCW@ zDSp%L)HjKbA3p}O>$^kxJ4PiCmzBjCS%k~WpZe>sgU+jCv1rqxJ+`sfZP8U|pZSu6 zLZv?^Q8|$wBOxiN2$y@BnmYBx5wh{G=?_f0bCRDveF|~;p{GYHWaIGRp((-gHkoiC z7R=myrgPNau&KCAS{rp;H$vLbY6Te?Z9#xuXPbN;~_L(%k7YP<}&Zm0(?GJ+eNGP58 z1gtdVGS#|Zu7H4m==28_)eQ}@OsXlZC?_1Cc1o)ZIlFk>c{S^i=hIer(#=D$f28<_ zgd{?wpR*$Wbu*uY)g8+B(NrEkln_gGf+t?L!Fw)oEV8FZzG}g#xXN%(w4JQ;>7b5qh**Qw_!U?Q3shF`LJWv9S$l7>r1S^4qD@ z1hQlsHC?iq{3;IxFhRQ@$9D2-1j@B2PfimGh#O0N_|>!K=H>~SxhYXK#6BMLo;Y5s zVWZDa_i@{-N-_dixpL*oDkSVPXU{VDRngkn*|jBWb}$$#zJb6J+*oKKzk1iL)*w?Q zStGi(R!VSlc>qW2>go!M?Y#W`75dkcCr@TU>OV>3x_ntYQp~HFVAp4Mo`!~|^!iKU zbv&zfvoDSKX;M;pHa0e|v)68Jtu(j}j*lmJQ}Q!HUZ}ydsdl7jBWQs+eE2XfF)>kS zV?hy4pq!}UrLp?!xopbwWgoA}t*xsQ&9yVrjo65LN-|+IlQ%K zsWcnV|z zdB4lDtPekQe|c<@H@b)k6ix)+#hHINPH`a({WV&bdEg75p%RI6T>d4J{^3uQfY#%C* z`}LJETUC?zM&A|XHrNtvP|Ij4@ljpbSPD99ip`fU?7j5Uj%)UOA_+e; z`e61Xp4z6=fwL@qBsE~}`hfe>ZU z$a+I7DlX0hp#G0P{y2Q_pqzhE6dB3b#=+D zsY4EW&aO%B{C#u;s-eW0J*f;d9EnP6D)W{dWK23t15{_cul9*dL8b(h$mg`21_)KX zlW;`^Ks(yI7R4)KP(2-1hVWc2>&w;CD$&=1q#V|!a=9Q`S5F^K*#mc_^!Ra}?Q~E4 z*3#CdZZt76L%1WrdEK2;zxs4t2#>5`Ls;@;3RMS!mnT3UggX)G( zsVA#vB8X0{e$Rnpqo1DaL8W&8vGZyM=;6rUzyD!&Eqm|k89IJ`&Dq&m2^kp` z$gfYjmzS3rE?l@FBqXG7+mpD*+_975Io@uK?$BUrPfpfGJ{9a3CVu{czt^-UM$)oG zifN+_{ayN+mn&Yb=sFVv%u69Qj`U2!^Om@CM{a4FU>4ZtI8!t?JKF?%p6Nq@a&ON^D=7bQmTTc5 zOdBn|Ay~oOGb_FRFP`@H0gz^5W|ji*pW-j1yf}Nr50(ruVT3>R?e@U~ikqts6HLs@ z%iG-n-1Exy>v^?4>T+*fv*DTCQ3%?*s(N6hJzVnC=&KhmFgO80K{^aTRycq9N_VDw zq*!%T)itp?M+XP;wN56;OtCVd3Q+9UH#U?b#Yg}gwWx)|N&o))HXS|vIB=T7hYraD zY?54ekmCm22uOzwgJKK5ROfd=dF+ro)E)>sGKW3!3|mo`DH6oGl)O<*0?rr@c{P9# zz&Pc>R@~@+MUnIFC$~$vnot3HdV1zwtmx?IB)~`QZD;d+akvkz8xy+Z*Y4kbvA29H zYH3)b!A!J-M?d2IlHJ^36+i=x=oe!UH(yMly3dqs3H?-49(uuLS+6dP-Ry{sih`AX zFSV88?&ZbxbR7T@X+9we<7fTt(-Zb9A5W2!CqRaLFi6ba>#gb|U~6SnL)NPC%!Mhl zQ|rTtnnQ;U@!8KsK~XtPP9B^ph!u8na#Bjw5rq4j7_9O`*ZQP;Q&F3@xwo&cFVEhJ zSQm;Vd2a<5urMmGucvnh2f_d>BVM^U z8RpW)Z&Ye#&-dvjYG_lx5VrKlkzL79SXJd}jI1djHI0NsHm!% z9bo`au3}&i0|eQM`;daAZZ9Bc12IcYl8SJJ0uk^F}%OA3{*uyJ#g zQ@7T+IdM_Z0LhK@=8Q0Yz!wF3y5N&E0<6>PuyZB=23p$Ms>~19c@+8fkB!BD`gEhL ztZZyytYt_;sFK`)-;y`@=~Md&=@W_Y@S|g5hM8y-gXQ|jT_m?0O$Gon^Fd8|-OU&u z7smkmJm&V=X`4OL`A(U2C!RWC#NLGa1w2?c)eiFuh+N=^cVC?;mY4`1xLh{GKtpru z2q|+T$REV<#8lFPjS6a4X1}T^4#WCE%@F{OR}^E;mdFONiz1n$K9s)=1QAHBm3@7> zG-94|4i5P!QbWx1F;rAkhmRd=|NHeR8zA&fQ!z0yCY5h4CcyQ;E;@7Wobmke;5LZ5 z6u>aDu!G;k#>VE`Oa#tQCjd{VdwcB`aA*13x1S3L2)HL>w>}@BW)Kk2g5x4?H(j#j z5>oLkMmoemDr@f3p5v8z>_ZebY#5}J+`M(m2I2?sf;PP$2L1yke|6QiL2&78_Y9<7 zNMk52r;FFjQR0SV4<(=-B%X!&2H`}znclg@MZ|50a9oCq7ccfbB4g2rN=v&6nK}Mm z>C0dN`;0n#X|yDs(|%45gs$7@ssMO8EKQp&Bwi(B)oMfl|IM2};Tu;VSpwL47}4zm z(h*RBn%s2&>FK=3aak69LP)6qeQj=TPC-rWZMipP;=6a}y{LtCd<5qHqOB?|y#+UL z;=~E=4RT?ZLWtGD;o%qxi$eKur@7a4*MN(D01@eII14p3HNmom<;CL0_)<*Ph-piV zbpCujKZ3geM*%2H0D^l|Tx>JZF73E9t(z%0fadq-AVuEE?7g zRko_LQ+=d9G*cbKJ}WrPC@2oxH4|-#vDY4ypB-sh-AvKQmbiECUWOWTKCnQqi3JH# z4^gOnF;JZKq)u|#P4`?{Gt4$@ph7|nlp6GS0AHI5@#x#HXB3lm~4T2|?C;Uti^DhUK_7R{Vi{+U9>yP9Rrq`-XLCgep#igR;wzm%4mZO$()a<@C$ z+rxE!Yz)~&_h@0X>7?1#L~2Rk`1SUam-UO1i3WEt%CS!Wl@5pacN=esGwCBmj@^$hIxI z6MblI>QN~PkH2Hzls?HEU6o+VedY!}J6_GIs%m+e`v%bq(yOn0YID_?fg3bKhK~a^ zO#8Ut!W;9#*>ZO5)+=h4MiAv-3mL@2GhYSL%IUQHP*hZOY<*=unBOiXn8zXoM3>Pf zaq0lL*)Z2l`w(ulRcxlZlwq$GgDT2pSbttrOpK9{v6?}|*WW)%)1pWjY8reu45|pH z>!uUzSWyHH?EY|F86rc9FcKE`AE(k99L$HXYC*w`IAs6duc0nCzT>q*$|z7M*#zB^ zVk)N}B5(%u3=k@YQlj{+jO@=p-y?7Xk&L3!>q0tgq!(0MP{!T=`m6Ezp;Md>%8vr} z!h)cJf&vldD!)*)()^97Yvp}kA^N{`i{(%7y0Ex964V4`os($p+%?-j^%%CuaT$Y&rI6}1noEr&W zK!Ok*G5YcCGkcH}5VALQkM%ErTv<$KisTuV#K(`=+JBzBcJ zfo)GxH|ffXM;gob(pOAZu3)I07ktx01;dB>>&+f*u$j0zrZ&BOdls!XY~>?ltp1Q? zL4ejC^a2>$m7NItDhu1eilkgI%?fWyKj7#&X5BHx&TA6+PO+OHV8F+)#kQAdXtHgm zG*GsJ%hGw`HwEcm6~x$9rqseqP{xvVOLRaNN?KoEUx2)Mx~l?d=OEuHK`P*ar~;as ztd@RL&|#qwq;8Nt8`uS1)OC-5uoqG8L!AnG1tIVCgAM8qKud_~Lz+gJ7BN^*9kVtT1m*UJ>^DeZq%0a=Th~({0c&I#MU=ie&IE-FN{XC>guA@hpoTx^ zL)N;!<#u+)MQ;T*42koEv^UP5ian%`n@8OJzF-9?^R~G&3^ehSUN%%uo(@Z;1rn}Q zdA(y&x2T8H-hzMUrkVAj7EXcoz{mW2Mmjpts;Vk|K9NWE`&OEV8cd*En^o^u4(!$$ zjfmTt_6x7lp4l4V737(vEQ=0TT&Br28YwAJsVOJnS|j?ppS>EPu)5@PY(Bas(o@%I zR@8ZYw!)$R_2n#BXD1pFNhU!-?fH=gRUaxrTFkANN1I>~5XE&~BG~0m<#f|x5PydN zh=g=LbY#B3X2O8u+7O`lHfRq(#MP-mRj}61x5jkmTJRKGuPsg`LOnt?(SwwQeNngA z>0__Unwb}sV18xsWm;Mzpsc}H?>z;oZ_W&ye+?Qt4?xJl01{UL807US0|d%_-a>d* zA0_klq#%$=OyB}WZB;4Q_5Nz=05F1NcC@E-9H+P<&28@7`K#RXTqKCZNOPY1@k0)T zQhM32B-obZBMaXA({CW$AQ)oFbRLU5dGcg+IK;xb&w0ssu+q2un#U2Dj%3YP5S%nX zY;4!IBj|Tbq;)`_A`W;Lv<>QJJDFFNNj6k#s~CJdVzXJ5KWw ztXrg!oGLFg30O%9$P!8%W6QGx`nKzHd8Fof-}fW9Lm&w1mh?K!OGg8|=jLwDJNFQR zD$#bT3rRMpqM(k$hB}f`HxD6c2>=NcnR5|8{^^UQ>?a`~MTcd-)K^U)6y1K}g3?0k zX255&dqZ~*YlOXhYa}qMdm5|!9QR{kfqB-YzP=uqQd5}+nFouw8HskygWEPD(S|8n zw#jsM?o4J@EK`~s?hrxtj*f^K;7lh*@G;E3L=J;Gs>2Rn_*q$HAkdWocG?Wro*Nn- z4#XUanmam|Tx(zzbS#54nYynt8PM!u^K-Ju1#g)Dgo2UT7Sr2%f5RgcU^17cjD z!AcqAlmut965d{W;P3CR^uZZz2ng@twF9Uk`~+8n)1Ox{feE7Ny_=!5yN#F`=K1@%1U4`zDh3PLtj>P|D-(={dL<503`!$ zIp`Z-ed?6RR66qI_U+rF1vAAQE`4eDp7GgDCjme=>&mK9+XT=EYOHN^F~9KLPrE{5 zX=vkNKR~@!idg%*qGICP=VuNJP2y(5e;^fOJU$jR-8Mjkg^+a5Crv_XGqlErDcXb` z7K~t7O(4_Y&W|{rf#7?%7l5CHv~>14LMTY$t*x!>l+vbch4%9&&2)WtvC!XM zfu;|3YjcCodh`wS0{w&3AM*M_$d>*6cV%biO7I9rUKn&u(xti}Wy=HKgHjz36r_Il z(8EL^Hlu(*%5!*m1E_DP(%A?moXHc&)2K545rB7HuXIX;DmQ@|)d-Kll_tRQcl5;g z_{bJF(?C?uEiE;Wo#*A}CtH4uI$U!sM~)uN`pEAL$|t3;OOL_c;sBy~s4|4eRIm~c zgfaX8zN^k<<>XX?9u6N=#@AFOj9!VQ*9;8}G1X+>H1L`Y5yTY3dvr`mA~OK4{6j;N zp&&Ctl0YhO+P%`j@89K(!l7Sy=Hy8Q1KEdK@z4@o1^h+))h&ffX$FlYmfNiBbU`Z7 zN=~grK|#TDei#TPw50tLe4=>`n}^(NR_2D>y}h|NU$KBZ-bccwtJ~)k*`MrlLdV(b zv~{RXk(s)4;MA0>$Yhb&z`($fb?WjD)$;0qD8_*TaBoKRezb~3c@V<&27+Bcu-iU} z9+~R-$k8XAf@2uvuWD<{uG|ty_a;s2^(?^IJpTl^ZYqC|MZ+x9xJDX6cK{hbJJkT7 ziHCTl=o9yzD?rVlZI=QZ4@CRf9#8(1;{CF5*U*jI~hC@K0@b;AERt`o=s+K3M zlCQep{gA46JF5gha4C8}SYi*#YZkD~#_NIxp|sgoAwwyGq@|#!c;@_hQ_o3nZ*LW- ziSyYMr%pj9MGJDQf82skQOfyqx>TpW1&-+DU%Pfq>`EwrkpYW)6MZk+ZRpNjv!Kil z3l28vc!z~x0?KC|Id7P1K=7Fn&@P! z(I)9?lld3#`#crm0Vzufcv7|l(FEA1q*-@P8_;sIadR?SHa6Ms-@l6`ZzMv_rw}G1 zD6$i6SIfkl+z>1K&z@ON%0`805Tbo5M$s9AU!8 zG9=`~+9FR2pvBLhKbPOlfKKJWOAH82LH;GPb93zbJ)tR>pfyp4H+=8PBH|*NFdVS8 zUr&^#w&W%}N zZ%@`#y>megXSE1z9qcE!KZ374cv&}x3p~l_m9fmMi`@dK0?b_X?niP*i4{(>E+uI9 zH$v7s1N#CN{#@U^+&-5AZj0V+ZVitlBe74vY?ao-=4l_3x;VYoxisBG_hQnUH*X$( zSI7Y17@!M>j;8XK4$@ewn?ZQE2=WBT?d12O0NFqihVGh=C2x#PZvm6|DA_OoSKJ(4 zm{kU|y9;NEt$P9+f3mkCOk-UYQGfUXNQc%?`UhgFBW}H#%T@>Z!t$K2Yf)uo<(rU@ zkh+%Th=>TWH@YhC-o5iIp{X(XW-MRL)F=#2htdNp-u=|N99t%Uq~+m@oKU!($es{o zx`3k?WI92129=KqznKKimfhknHt^Qe)hR=anFTsS(^l+bbj6J zwDROYd~#l00HDy92upcG88xTD$8`lN8Tf0&R^GrL0wjYd6APyEC4qXWLTh4nNgRM0 zv^i6NmQp+^vF2^u0xkBo*(znHf!;GJ&iW%x7crdXq^85`={Eq4xrzn7nr@ zQHFX~1Zipv)b;yGHU1!F)rtc_@(O6XOFdRT>4k8yNTHyYdix$$ApxFYSEiv4gwwF*5=IC0>JJo;3Y!)2D%H_^L=4Q(l6xpIwY#3XvG6|LZuRz)fN0}1(cz9 z`kWNuxXREFh4u@>@#Dus1?&|lxJ?_OvpqC9nFN8M3wWyud>%;3LpB^F{(+54*{BsHxodpxDOTb^4Qd{-3Bt0XGpC6qxHFb zQu89B3bLG~7Oy7c+fFe;UIMJH0UNXMry~l?Lk{0xkfAmOay?iS5d&d)A2`WWPy9rs zafhLwarnHw6IfqvSCFb(XeGhHd2rtPY_&e5tm_M(!3%uVna77(7GUd1&! zLyk@c20a1pG35|$Gw@Ee6*<}g3T=rwDhCDBKPV_3ga{@Gagf3lpg8xoAPB^PkYxZ_ zDb<++*(WsbO>X=<(4l;4L0)b_GAAS$)JFjN1|oJigr>^mgr}#c5+rh@YQrL(t8s>6 z2L%M>a@)2VT`)|AIn7~6&R>@UA@Qee=hX@i!P*ZJSTqn`@%M}XLeFV6I(?mI$i1Ujq(u}!rNN&CRE;VE~ZtOhbF?E6lJThL%O3gNCE z_!Z?yO9r10VotZ$K=T@QRLC#X)|QCM;#yCRDB@~lGke2^{Efb}kuuHztwAXrnwm-m zG42iym`Oljpn+$3Lv1bRVy4|wIp{sZe~`VNIvs$;u>mFgbY2Q`O^3>U*c-4U2~stG zYWw_je}qI00oE-M%XT0AWuK5617>%cfP5X*^91WNAs1>IHME2P-Bu!F~7_YG1`a4r%cWY0!+q>L>i zi%5h0jUCJN4LSzQ+lIY)Q0spF{4cSa|2J(7|6Moxe{uMCA2ayn&Y^;|lmiVXx~}4c zEX6=G?FQ%kFkMac92>!c7VR7ce{*wj%av-0sp`Mw!b8SY|mgiqCmiLFPEH4djT>hrL?E^Xhp&JA34b=S#3ky4Z zqI+Eld zv4VLt8)QwCkf6*ZC*fZxT-X_IH~@BIPQA)M5w-yLJ~_APTXqhPGe9&6E)>gPlPsJ)PocNH`%FPl}9^~Bv%C@2ozY0`EU@P$2(F} zQON)S2s-9@2K7{cpVYVg=W$iv7%tmOr@NfoNHm^nTbT#c5^0;=ZfTRE(yqNnZlBcK zt0Jf9rP9<5($$cw7Xd7&p>kl#XWmf*Ej|2-ab z8hJ%c`ihId>U@7m2%2SChvoriV?duz63AcjxmmY8d2~YvI=@J6LtO(@m0>O4__Ykp zeuwtvczbe4e}BLA=DNK)Gbw6$LC-Q8h!vz1idyD|YLIjQJzQyc#w~!BQo(>w zeLuajstW1Dfq)AEu16u<4*`%1k{TCmZO{`@j~%rEb)aQL9BUEB{j~goY^@3m8Eg*- zfIu_i%-0;0IIznV-Wkz@KH|7!8~YWT-@o4q{iC1Tu`MA05^@aKOerdK((XP<*9EGK#3FD`L^bBPg8LXHBSZmVqQzlx zQk|~U>36Knspmb6fK+)2^HW!U`2A)G5%3n5%dta;n$RQFbA)n(a%*d(_;D~GR~v)^ zQe?^Px%AUz3ypBdz544es|&^$1yF@Hp)-R8s7uak8HIof2*r|kZf90KGV~6F$HvAqGW1^e+K*7ac=6&)cMcw}dPukE!A_v> z`l<$Z93vB&0CaT>^c^wEH8}E_0tGW{xNQ8@b&Winup0dcx$ z;0KT!E0}g#Vr4-e(AICyiTrIn{qzPp{-_TRKA$vop-26&sz{ zV1Ckt^j)jw0wGLt_Ua9oHvp#wK(qh=sJb7Df4Wn^vj=qcimt9Mn4q0Sb2i}r0^*#- z#dd1m)mDJepH`P3Vf|EqFlgV^y=*_Z*`sO zEqk<2$oQ&n6c3FQb#_`bPGsMXOKS;RT?x3_~O+o%)(ul@I*R$}4;K?lpqZDqIvu&~Zo=fd0Lw4d?-QS~PJ6N@6o? z;45%7A>2r~1iGdO!iX;|$jIaqAO=CeGa^7$?gEt=c5wizw9~1n3HS82&D8Jj03bnb z7szsR$pznEQXn5M1pkO8-p`K)T7Ls}z!C=xGdq(&PXR`&T%Lhit{|+EdPIBbinRR( z*bL3ke*p3k4GNUgMDfZn1wwk@R9R_9ViE5PEBfk5w{M63cKpS^9z8D0Tvz`==Z67#U@Goc8;%TsdJR1*&qW<9Z#Ru z;2j6x>4LL=pCT7{oCfz4I}+wtZ?G}oBb)-MqzWujph`XtDt_k+ccr}yzK zBxtLS2!XBxqf9(5$QcC>)z1RgbMe+oBY1)u1-8l11y;Jak>Y+fXxrn?kPSJ00xU|+ z(7{eN46`p+bAcR4oa*j)ySD?JY%p2FE3Y7Qd(7`aSTPhUCFhmu0>d znZqTNH>jp`m$!1y3Zt{EN=zG4iqtgQFXQy$u``?@P8eHNjV=0ErT{&QxtXcJQv1GHWfel|iqB z4rABz=oP4I%pPSpi~V}rpGhH8W~@b>T`*@VgUJ-&tTZ6A00Q0iC#tmr5`wniv4e|6 z5eg2i$adU*qmGn#u>vh9MNoO$K!gKx_x88W#7G2mzV`A`1_uQYU+5J{z+RDnexpg# zhZiU^K7IOBJ&hbNKY#S=trxXkM(25fIz6ZxsUf-$dk5JEL0m#^LFnCTf=VI>9&@BX zMn%!qfp-UrCifbcf9i*qpu3Hi>|>rSslkP6k8em*QL(ojf1}XA#CGj_@M{0*v$P-c zbrdOv`kU#7HmK~RrLV87NEWx%#Gu)MxaRu}(|Iu)iH`ddUm89PT8K{Cus1JZ9ge~~ zxY}i=jw>H$E2a7)O}ur6+Ne&}M@x}{hQ>wi8TnLA%&lF!Ug6*3STA2*J3Ois@4EtP zfulu^Gq@An!dAN7$and`rOgWAOxmEyBlnIR!n&osNMqYAO7gxeIVVr)iiSsPjzeqM zW^0#Ee1@{Qk|8xU2U2 z`%)+7^4S}lh5Odlq)ti+%@0yt0agFmf#dB!&$0oO!$Zpb%q#t3$+n=V4NFf?pJU=O zn8;S8rS)|@Uw1@inx(=kmqBlYyHm&^wa$h%-l2E5eSwX|BOPpNa^(1130bD`kA_{@ zf%DBZN<0ouuZXAP_$bvq!k%Wzh_`=;{g%|?o6R~H#yW_dsMH{{lqH+Xw$WpWY#Xc8 zNKRIqU~DVl*6vBkE??TTkRG?veMM{~PfiZV-cadGw9B;*je2`1m}8D`Y$BFxIsd3u zsCSa6ETv{_Mn(n!3+}lqwJmcR0)0=C^|Rot6E~;Fv?iQ3=EUBj|>kdq@~FLe3^=>-~QNj*QX{Sq2M4!31l^VYlXTlh(jD5 z*2Se5E*f1#ZEbD6`H5fOa63k(bgvkcxIM=O-XlL8%ujV73kr0mkmv=oc^RFip@f}n zK*<{S#R-EnLunpD6u6M%Gc~tM{)G!qS$CL(#Rr;fnWBdYX>IdsoumnCYb5u$MEeqS`*}OgIYD?VS@)v9$X;-7b4#2pvXJustE&`a>2gJpYVR5KBfTSGx zctO!NSzn$-e%kdB@INyO3+v+0UPkx{HS%Gs!3Ipp%hl*K$Ji+G``j*=drDLM=Q_04pU15jhcb-9#!eZ*dX3e7*z&_q^+0m6(#NEUJv z04_Og?NAdF6TZbSB<}n>uVknr7j(!1UZSj|)M{i3eOdR{ubbfRDZD-s%%RV>N^LjQ z)wY%1W}*zt1Xg#w0?iA<>eYX4PZTgu9}I$d@V;pT$~Y+3v%lC3o@NXa6Y1e;xQOLUhqNd zAS*EY97)1O%l#htLxGw~nws6?T~B_?i$=5%15n^vfszuxzoIq)`vsr@l5%ML#33U* zv}OFu?i(vTsDHA3`0Is=AZK$Wm0JFe2f9SIV3_{MFZ~GJ7#>7-;Hf0AEAKBpCNp1ekC4Y!<`}^qd0f3|b&hQh0*itPW)24eiE{ zSHi7e(xbzS6AE%s>kZ-osV2<;8;s>oq+qXd!>~Mpj9{Zf zCys_$k^OAv&jU>cV+}3}#+AoMn<8=JrOO;Mh4?6-$$ivaY+&pK5A(ba(y@@^l@^WT z022eG^e`mMZ~n#aC^xeOq%|(Qwc@i0n0IyN9X=`}gS{?HuzQO>4_c5g5^Q39z}eI^ z=^w4FgJE+xd0o!MVK3Qt>BMOd%&d&JN8HFb#;ex7pWRga0t*Uh7z-*BfHnWt%0cwi^YR|(9O{fJhVucg6 zXm(UYw+oF81}(Ro73+FIj08Gxg?sLZ9!D`aR7;*?dZ z&Uj|VXk$I?ar{Kwe8=(Kzg3c_ZkbBeTT#UM2dgKBb?(e1ECx9cL2U*54Ds(%vU`X7pPv4G{6Bmu(7S73KpKNg zG)6{79wX|>D##`S-WFHW&J2Ato@ZJ`Ew(%3W4!Xu7cC`$!`IJ^C4;rL#o4T z+Xf;1^dn(<|G;sf<@c^0p+F{jU3&&*N5PTOk=YshKOSDg?_XXRI*aV``u$aM$gK)sETP5dq^e$)dDjTDADYgaXg2ZJ zga+h6K3y}H$Q|Kg7x`n@t4OfxH054#5<<>w#4=ph!2{9?^=jI+5KMjhM=Hw88Np5P z=+Pqp8h=cz-TbYv7=0^Vn{EL|YscVMaQk%(&H^BSCi5D#Fc>aK%As*UxbGEMUR<@q z6fYcnUM5*Z7T)cob^Sm75^rrwHp)Ew`+4u;{M|j-^{-g}^sjd_UH#Yln2!GI9ZdiC zdldd4gI*yGcuGqrFJBu;Q`PmkQBsMur2iLs!x1>biVKL013j}b_5%I zp^k-N?sgsgWPir`-X>Vr7OI(2M^g%>(Yuu(iyG!`zp~_$z5dkX{(4cs+ek`+jBC=9 z_b8dq5QdycsKCv_bnV*gyLPj>bv_T#DSP#cFxce#`t{sx(JF#B9}Z0tD>9|dYK40& zw$27QC16MRV8-12+PCa|`J{sT41e;&&+4%>SnWzd?aGe!f00kIM4+M?iWTx5n`<~| z18ESf-iKdK%yuqGfaG7Qqj_P%`WG`@Xnkb!0sEo5NCs};{WidmFl`733)J=V5^zfP*q=VZe44ho4dOH_uqf3)cGtt?jjlzy~W% ziGkOO1@O>jmDwj3<)kT7Gg@~K+Y*&l`bq-hlWxmTC0tTgRZXlnSH0a{lQBqXVnu0j zlT5j9v4wObdy&_~%R50-_UD~7DL!lm_PoudlaG9iJ+jipml4=BZmpNx-X0H8;Fug7 z9ITSu))jWRnrDKjt(uh>ThmO6eb|8=f+-+U>fCNZL`OThllK0UpFG_=8D3)6Ih_q? z@AUAYo+XQ`!hKKB-EOn$Ki5k~pBjXO0-_vyc3h|taPg2epR&AsguDA;xN=Dx)O{GZ z>)N=*_D?A7+9h_1({9+}Ynli=sFIB-i;(lKfa2+Xj`cvjI#Joa{mJX8Pw8t*hJ&%3 z@V+y#iYeQI%{hF@=mFv7C*WpoOVurr8Qo@tZu6IozO4KEpN82EPQI}4a5fC|2Ey6d z*>@92w+}d?-S`{!f8tSY>Sl}+Z?G4~IyKj=@Aq*k9U=*aKy|xC}fO9&} zRb2+xs>1uOZFYUZXfJbZIJjM2G6vA>H1e`f=42(gokcZ@YGMyj{tse+bTl)$8Eg z_B~ub@W=7_mX?-m7+JZ&w*3;i8;ysTx%t63)a-eV!m(q zc$5VmA~v-s#?$jCdRrEZ`IvIb>}Z=eZo$#PiAp(2w|&BcCV%vC>^Lpng}C(vxpwN~ zx%f8$OYDt1wf#(<-uhI!4j7&1v6iMLnlnb)`YM1->d{|~>s`C97Q*rZRdV&K08unC zHq1c+q-hH`{@uTh^6Bf*Ov6o(GqXW50xGb5@X~8iZ)YA}AG9st{~bg}FMsQvECidM zmpAYEV<0g=%MbI!e5Wx{dgSrjE$|BR@R5RP0Pv16fUE!b_Y%;GZ?GNub)Fk?=qq%u zN+ZD84KszPK?PJSv~5Q{eM$O*=aWqV0ksRkvGyL`$zuWrDfGHKP?A1TeA~X0#^-RW zB`b9n3*h4z2i+Q1`u$Dm_eS*cCwKz7CGf(WJ%sJOwd*C>kE>gV_k+_7y=nt!S(QPi zF(|tZVCn}Xhr6+p?%lpaB;|Hb!CQlFL=M0#4H~Ndk7FS_JD^$7$N?m5!BofYf1S&a zWZ@~gH1tX;Ge{Hg#vI><5kx7ISk&3Wzh0r;?Ogz zCq?hy%ZAshk(^_{U9w!p=I`r!5&A#K$_O3KH#I}3LqYi;S8m1~f(9yIQ90Z}ZzO@O zNrwT{oxeJsNPH!{E&@Xh2mf^*FSi#fxYH+2L{v~YN}(@6ZW*#IKpsiIs?(L++mH1i z;~ymR4PajDR+rp>le34h5@s{6 z?8|t2lP``2{r#uVotGBCoaYi@E?jA8vD)ctro-ZDR^xnj#iyn#a>|g zSUf>K+fxP5Tc~=)1aTZ*5YVK|VVG6G3Sanh@@D|KaU^NXM&xJ_DeXzOpw<6{Ko4V~9Nr4Dgu28VV#&zJ`+ zP+WjH0k?d#9g2hgx%SLBsqttZ*A)tk!s9Aq?X1yM4XdSwA@{!~2kU9=i*Qv+Te_FY z(;NaA9To&~ul8LiLf`)Uj}B$D2b+9LG2B6`Gq+w(CV_)I}O!_ljTOy2G+AKCS%!0R00o?d@yiZZ@k*{7(oKfRl%FXt&xgeIq z$tmrP`WB4UI!RrlXG6)kZ#r|EHLivel6AUs5-NHHySSG~w}?`%{U@9q8raCSvG`lO z652%Hq->d$S_8@;cIkaI;>NezvF;2kO>wF^%@H0P%Ga&)aGALb`rRs36TX)@rFikR za>gZ_UJk-s*3V6q16EDzNj7a>vN>yKKYCPMq*rdgR*0a%XLms)*t>B*?Ea$sj{7zy zeCh}FM7o`i`vDSMHz{j)Rn+nW@$8K?t8DvC%DLw+)5^%#T3zT}8}xkLl$MK6;N}yfaCM5! z>EY8oB<>T};XQ?m+QbU^HkdZ$hp*#pb?hQ>Lfsepcza1KYzw&h>zFC?uPaW>6pA~h z=4lwu6h*!nXPhctbi_qb^3*GTZ~QKC-BN9%!#QD!rzgtGt|z)@3~w?>k$MHhGWnT` z3TZif&$GkH2?@HfDKgqtR@Rn(S6Xdq!L9G=+xt^?yg_j$%16P6P@rd9K-V@y?P_q= z*<|@(mDU!GoqX4yWz>QS!WLUPLq3#jvPN%d$G+wr8qaYJm(uZZBK2^8dDO4M09*Kt zOk}<4-WaYb>P;{?-TAtfCX6DjA116(F0}G&^0ed99o$Lp!7;tnJ5{EE`~o*)Uy=xq zU>7u!HI_0R^{B7P;gs5AQ{jMLYO2ZWrt&RP-48@poujynVLbPSQT6fjes5~CR!8ak z9~f~C@gvjP#F63iayEF@gz2uScaDf479aXYb~K8_6>ki}JEZzQZ&+Gml%?vHS%N$RENFB!8EBE4T9VEAO~cV#wF}&sj82 z5UbCexQIFYsI~G8)pzPdFKl-Rk={Ay7GZJ9w`#qtv%NM<5n`P?mY6*%3 z)|K_+$@Tg4cnN{WH(>I)slD4APs6G+=U_AYz}3joTwBTiW?~}w`6J2kz8vfc@-sLk z*ed&77oPNcQ^`B^UYrVb*7vhP7nk<4Y1YWPkA}T_889k#E;$qUQ9nQ$~Ax!dkK5rWN+V{nI)MmomGR`zA*CL$qkJVl-0X z7N=+P?eR$oA7(ULalO&FYkj6KnOirG(F?pP?kYgT53t9X<+%@^ux|OAv z*jVe26LT1LduNhyvSa6BrX7VkL_Ibc?O@(9#zpe-t61#UjNGh^HQ~nih*Hi~VM*)9 zU1faSE+3A`hNd*77BkxmT6TZQo_FM_G&`bdq^$3^K?Xawp~3FTQghJATo%gqeb@il z)J)e;<{J$?I}&o1PX zhdsU9Q)UQ_gX>*+*Ud^+NLPvW}P!t3t zEL2+Jp+iMLKtM`B${9x;k&qH;MDn3TkPeG3DUk;0?yhrf{KfmOQ|p|w&Oc`z)^dDC z;EDU*``i2aEX+;J`ByA1Hwo_O4b3!I@f))J$kk+Co3mxgrRK5G8a?w^W^eY6!bv!g z)o&9CgDYjLLx&G51qsEJ7?b;O&BKHQzz^=lw2z6%!Fux@oL*pH-WGfa^?8z9HZO)1#$7FktW=U?zBds z?BL7p9!$|O;fevv<)N(4)NphA$Hi-fvX4tB__Z9^VQ(KRxir(@`PBRDdL8Qh_zz#o zzqmMi%0S(@Ph{h8gki{+6C-)O_Q9=}y=9|!)&+#NH#C~y^){S;xc=73!~Z$%*e zoVcI6IDhCiH@fRT7y(@#M0=D;(Bcw~f?>M821jiY3~ODJ=Z@j`|7t+HO{u~8fo9tH zze;8dzfe!C5xG&M^5pmp4x6carJA-15ouK%X0OB1cA?CR_~oDDhDVxby5HK&OxPri z4J(s36y}Mk0yAhVzRgANE{U`0 zoO(k?A5m1Kv_lU}Ob7}0Xb6eiea^yubS(qMm&5*O@Kn<)3dN;N494fs@yZ=M?A64J z510I8SFx8adPnu2ov+EsUDh|t1)PIdjg{jX(h_*>MK}f;bnFduj>|#Z zYt1q_+~pbL^zGS~^_> z$u{Yi^>e8^Y+7QQGHhoS?>s5>z8|dda%@KOsP}I71Im6aLCTL72F!A(-_IK^4lf4M zDk#3L=E;v~Yt*o^`hH8z*x35!^uCe&JNI5sWsS5)w*{WL-7J${{5x|}w~2=D>SCO_ zWfc#+DtSnrK&dG@>0@cx=>cYE70TQ}4mnx*BomGLnGPqDkTqSq3m5sOgVXCA+Yi#+ za{czlWlInXAa&dD=KHa+OcK1+{QAMkmUqfjX5g&b@ zNrTmN2d7nuB>7)t5TBS5WoI z!IT@p_lMgeKLj%Jc}b9(9UR4ljfg(U+=4Hyp^9?tsD25V6lYop@Y z7vDA6Ech}^cUt&6YP)Go^60H~JP8>05Et@1slL#4^mPBH?uq_yf0uAbGjfDB#%IN_ z`A!cd{bIioJn>cii6*~>cSFZNZuO(adB?6?_=|-YN6Dpe$4AO4>=9|o`biDWMLDPV zW$U%F*r*v-drH_P+wv$+qO`)ZVs1;+^tBt`XAJ-C$;DV>(dx9oUI{O(8m0Q&CkVw@ zBv@A#%Le0p6T&a>{i>xtv3@Y(ZdBN=sb?-OL@8n@$-qnzmnXF?HvHzwSo7Fv#%?Ju z5$mum@e7wewU^hx08`qsJv2KzsRIi6GhNjsigkQ_4`^ymDV;EKy*cH93&7X(rX!mA z%w0a8FOKil0x$029y_kRYMR_?THKEJ#~cw1^@l6I_4PHZ;%oP1!FKRD!k;J4Ec#6R zSna7i+YUt~`B%FwclLLP4k*+S|a>0Yh%2?4r z{utp{Kin2!HR&l#S2DU#jsmPIxlMUzWI?@^)HoXw-UuY=PM zlzKFU6hppz*|IXDGxbz<2NU-dhm~zxSREIs_y8_!f(ZeCa}VCT9%}Ucd(S`5jGK>< zI_3Q1ZG$KB6BA`gp#(#iRuy~=rv?90WM7(VnG5E6z7!m<-*8vL#YDfw%PzBg(-vyw zP0umSfVBV|@ezl}!5%tRo3n#g6&xILq@O;uSm_#A6l)iK_9C%D*eZidk;n6_ux7}; zS)Z3L*+SK*#s2~L>FQ( zeO7XRWCySH$k&hY_nBrgw@o*^=h?+vU+4msNwHY{@Ivdwi_?Q&J~Sz)MK0}RGIUDb zYqavpnOVl=DdYfmQNt4bohj-ur$mJ$J+}A9#ec88-}||QzrizNZ97v$$g5Xbwtb_$ z$I`A1Wtl$BIuiRNM8N67SO~X?W$-m`31;^LUmbW1e(7%LDT?e_T&eCd2>s&Hw>0qQ z3Lh75_^10cx6po|>ksK2DXTsiJvF>XeZIxb-KB0%?8cng)hhFpE8J+yg@=|iKR1F)Zz!MVK;%5SM+BnsQobGwF z=(Mmp-#yN8I-pC6KgvK8q?5jag+V_4cCs zeivK#DY7<()SH<#I?m!6PSd(;nTBQUl*!pU6zh>Ft%gcZ>7xtr$|Kp6Mv)LcuTkdm zLyY}|yHW|!`UNAZ-sA$UNYpBVUUfbmZ6M#N;bo)mF3MX^3?*$>`!oK%vP=RqAz%B1+Y;4PJXW7% zU5ZLGGBsWm`BiLxTcT5*X3+~3$j?>-^OCWXs?9^H zMGumcv+|Wmz71X(*3XzYiWJM;^P%_7Exavk`CC(Q3aQhrjO6wl6t;)hG}zJEb||# zKbyQ9v&ftt|Fo;jG@YpT$oDslZeJt{vafaTWovoeIxZYL{wZ^0@OAI4KQ)slT&8X7 zLf9I5EMh;Js$8Y`2CR1Ve}(WfdQwW&Pb>p>Olf>~b*Ch>CZ2e5QAR8~!63a^kAqWQ z>FkiwkH*yBWs#Okd~XhU6m_i$-Im4im$+UDg@}gc#H2s7vV?qX?#eMy%6hG+B7v%C z_BW2)Q=^e%56^A4eE6iq_j$}eukGFjaoo0Kk~2vt9lrO7Ht2amu!t|+-cntog_L&r z(Co^2hHuL1)Oz1~6YXQHESK;(?0hNeTFPy`xZ*a8saw7ZzDthRw5xcuaQuyJ%Uc|2 z(NSm`4WSv1?%9@{mR)%wPJH%S+`V@x#{wJc29rF`IcxR4prkI@3Ef{z%{pr&6d!$# z%$^2U*A~9z?Gb2R73s6izLnl=-C?zq-zWP`j`J{AYOA%=>Ao$ksoyu{=9mXt9FsA; zmw4*v6Rbz1QbVn`4MbMMSU;1rEE3e~7q6f~N z@z0H*Y(U-W^m=@fH!?S0nxtBSr?_h;CiXCvm*rYT<;~=Ku*K&{SAJW3ZnxH>(to{| z%Ua}(oUWg6((&};&r7FMZbE_;w=vv}<(uF33|FM02p@ywhqc89gl8ZdpyJl2UdtNN8 zjyS1*>M>`l%FFtY9RA%qVW&kPjus!uZcXf(4R-q~K+kWSGkh<*w6v_LRZ&kb5|3L( zXIsB_-D_BL9*q!*)@nE^@u;Av$1-*Kg1GUTh`GRlk-;m}wUux_olOZN0~wBi?k^He zEya@4oN%jzC|(VteM`5@Lp}Ti;O_}`hW)A-73nRW9$Ny0h*Iv@TltSO!V;w;8Y*=*858PdoqAqC>Gi>Wh zooWg>t@=9WZL^e;CC4Q?yW_1+^*LVNbQYKEVwZ2{XzH2BF$jzL4bNKmhHh68*KS@D zWkV+)j>)DFet)jP@phh4_X28K*vJ}>jk4XX^fQ*5 z>I7#kdmY{vH`#ESAB&BPs~vM*vnL1gh+H9w3PvFc$XNOL-S6f02+0Sv>L0Aep1HxO0)7p2hCs1tkGtEo;x; zUCufwO49{MlX*tTrPR)h#z4e8K?5Vxw^j{n%0~oc>egCkDLzby- zT-DTlIQAh*T%Ihx(bLK%(($O)h|E1BeT&~5ZaA5kBseWKw^PHy&N(mEhSou?VYn_7cf48Fc zg|x1o=^e?}f49YPKCj%`nm1dMWF&ee?9^v23exBQe4MxR;$vQhrEq8QjYobjsBblF zDAq%XSM8GzKO0&LYgN~Xn?Le|G9%tfE~MECgPJkZ+q$nDdPDk+Rlkf@aQlVJ1uN-! zL~L16wjO)MZTCcP<$KfNXD+nz3gOgIk;>H)eBKRrmCwJckVS8o%zjd-94iBI&X_JA zX+K6%n&OI}*g9X%I)kqJOu<(250it+{Rgv66E1VDh&`e-6dUuGc|H$Y@zZ(bwQ*+Y zANn2pqyA)0x;9<%6O+F%q%ORn-R;^cqqDf?ilZ7PUn`tw@l?6I@DyhBEv90K{KP1t&Z>%@!`Px@-h|)`@|e| zL*|?$c4tS0w=XFHHCIA)?1Nbb`ahGh*zJ~WYd-Zo3MN)Qv)bnGsM+;vkA^<@`x$?( zX;|SAppD#7J(1isR26(eBCV80YdSr@*f=@Hw&Qw_*6E6N6;-`RX|KU>2GbbZJ0CAS zQl=O#iw(^U&Z;LgIX9-S@T`~G1nY0+anX0m}6L5b>DRLrFkjyR6V1zsrq>Bmaf3Q zwa;r4rCaIw_r+ZujN}u`A9KyL39=5J?55SL%1$UrMv^hI*ft~Mj#W=$XhFZqI~F;A z=%&)}UOwZPSWjK?tN6NFrhi6o^y<~yRx+!62IWTMmov#tZsNv(0d8(j@7H{Z9;Eb5 z-9b{^nLo<#CNC@pq}|qv4hKs!hG%8WSN>@9E@Oa!oTNefzIMIx(D9Q&T)Yp@>C_){ zHxIV_HM-+Jhx6v64*h2+_riiFo4y-0@T&LtNSwLe0og+!gg-K9fn zz6Th<%_W)htV(4kt-8}Zal6*AV$b(IA#z9W%N!J$_s4BY$#ZNAIfA#_@vk|)(?_r? zBNNqQnc73+N)L*lIw&$b`n5P-#3P-JeZm}rjIUhaEDQRY~2YnWbm*Dzo;c&;Fb>&r{lH3e}69?GOy^Md?4by=B{cHoBcDG#y`o2TbDw4Alx3t+=6219@n^OM zj8_#1@!k1sXYWL=^fspTfzdCn#o>nqckdpA7#nXODGYMlKU%V%=`}hCu|=a=lI4Oi zSF^PQPwBG@+CNiBGx5ziXm{b0k7dbr-`Sz0aj)Gn_h-#YGp!zH9sCykhRQ*b=!d7c zy{qng4WlcgQC+3;! zOuZ=^EIefS&8F+VZ{)PHokgjj$Q(Z5hP(^w^A@K+Ay(M*)gipoOn;#6ODD%z>y^au zyY*HQJ}gYZ!s1$%J7fM3xw!dtAsg=EjLuvvf4h)QW--S2Fwp1#;eJ9e!0PMm6`QfQR^*c9n*m$_3b9@#zp*ekvl*pf%&cL{PNN- zMCDS6q2TxLzV_x(rT6DN5vPcsoUthh6h6q>dr(Q$+E;REdaB{nLY{ij9)|FLylRgp zvP&S8i7k7jX|m8cQffOQCNs-~Yw0sw(PX-MU?yZkMDt z$`xKpynj#<$A2kc5~G%mLYO%Ev4;-}?xI-{=sbS6@H5-ocjzIqJNpYCI>d2MIO0RgmqDX7ttB1mwp}Xd zZLB489&TAnK3jfN!%i*EzA>XCn#Nq9&gPT4o85q&Nv3t4?3`Tvz-sKOAZ~Ju&FtO+ zX2E#Hf&E?)A3Fy)7=)y&kI8YYR5ajF&BG_R=lI&|J9@?j!=pnLtZ#<9Y>8$+GVx`u{z>VdI5A ze$AEKhU1OlabX#=J=+rX>c!tAxY2DEcV;^rcUbGqwVyZAUHk34{PUx^a{=f2fBm_} zyQHO^*^}#cugnrnz2dwOkFDAIy_Ls81qC5~CT7{I?LzwZ=YHj2`j!;*=7ioQB~O-~ zrKKU;sTb5Nd%p`FOt}#+Lm3Zn<-1NF_E^x<=jaRf9dO$3U%GRfH;dp~USIls{rnz- z8fS*26NE~C-9gbl_h7e>mD2DaWl~PgPtMe|lW&aYjbJdZgCm{QqR&rN5&c%53VDY` zg>+s=LCiVnpOq!6tQ)#|k5uY<*Ou%%hZt7J9XnSxN-hRdY{tBX`Nd6}7n|)RRmMy9 z(1=<~Zq2efemnc`i={N%D9Qzrq*&guf5}%Ce{UGq|9$IhY-3Oot;6J{51Y9CI1UQM zj30R_#Hbk80l7iJw<)X=(F}a@zK-_YYt2SW|E$>e1O~pY`}XbQOZmVvSG^AS`@0Ba z=olE$Y37U0*GW7&c=mpy@L`)fDl4JR&*e-L?{NDW-D!#mf>Zx_YusR4tIS9_KCX$|wD*4a(~W+*zA! zYIT&13oQ5oMWj~u`&+D}{p4hWj4aCZL!^l;pDA@wY$fb@S5fN9=#tfVmTf`B%cGf- zJ@LPVRm{!$q+EF5;LJJS_w$pOPoK>vE6VFij>=ePoj)R>P}l1=i9^NBqbtp zx0klfu10DkCzb5@wLZ;$l;`M`>{;uTXZTa57b?~k?(3d@+q$u@=5UCOMm*b|2=cHyBbOL1_M>u>+G45<;Z8YKUVSIc=r9NF^ zGP$vvm&NZ%L*JaI41Zwv^mwjTamfiy-frF*hEFGG>$-EUpM-dmj`NdLvqo{LS;8UF`F%hX?9$+u z5!?ObdxH{p?W~)ka2PK(S_b&u&nq`)8JPOUP+h{e3>)8@=)_1Ow9N4IUO&yMzb z$8jXC+?-?a+l-p@4wI_N>i1pI!leT}M!ygKw(r`_?Hkq@_06(X9(Quh+CBLsKbagh zdE6zgy5X$@uZ5gZ=cp*&8h7+wc@L`grCntfZ)^V2@?huW$;2nkO)q}VKd59Mrnk_| zC>W4EVz&OXTPULnDTBKVFV?WJ1}(&vn>!4zW=#cv1Nu%!Y|I{)v8ixb>SX7{qMeR& za7B|wuR!ObKMKCqfvmLBTqc|^D5V5|A!FC%(qZFzOID+h#9 z_}`Q-TvhO8`dqnYJX;i4X-?nwqA~Hv~YUy0?;;7S}9M#8V zk-q!=4;Ezb2rGG|ik!V-e5y>eEx2lKj?JS?Ezm!*&Oyarhj~Eb#15gLz&`V{f;%o| za)0U)XxL02^v`ff$qd_9oMPt|YwrqD2nzbPf$i?_vQbaAMd|XQ%f=b5^2?=VRSGqk zz6T3p6f*7JtNlI z6%^3D9Lh3aRmdNFRYRv&z>eFvYTHJ$?o!{kUI$oB72h1A&6m0Q@GbKd?qgzQ+BaoK zCp}qI5-Vzg9*FJs`;V&E`!f0eCVl^xA1`SCu<26!9_IZibAspAO{a?3MXy?Rv22-H%h<{E#>i!d67ltKoLl(U51jclKN1?(f5G9?OnV>k z;~gA7tZvU9KH@w!^!&2!_k1|*R_PM0)<>4F3$DjyY$}r+*VeDWwbl85eV*Fw7YohS zxHI?WRUDNl&AnEhK9Jvhw{`uQRDS&0xYOf9CC@b;AJLS?T|1w-x@xgy3p>w=Yi9$}m0B3hN_jY?^8EKtmX&y#DMuY>Y<#<- zoNlvui_zCBUB35vx5up?GS{SAca86}_j_&kyL?dci_b}2+TJ0>YvoloD>i}c+^_fa z-eof#XKb1-9FnZ4SQ?q}+dDL+ce`ic7N2#`+U)w+{rl|oW%a-&MdEEEpKbg39c{@{ zmf^2yhsG%_Z4brMPiZuA zztP%>Ve{P1&Ls^hA6~tpnX6igNk_3OrXqV!(zw>VuIDV*d-&WwT zWClK?CVxnUsR4z!`Y}02eExBQLt+Vg0I0R}b z?mA}JG(QpGWt%bnI75?%gdFGW-mjN;?#`r0Oiom5d=2 z%6x~Pj&?lB3KJ_EHe44mT^~;+k01E0Z*cPP|6`A*a%+C|QHJq9t2VEu9LVkQ1Yf&1?*T5fusQv4Y z7gjg7X4|Mha1D4w=SRF`^^&g+4@(N&)SlhDm2hBI>Y#_4n{QH55>#rPH@_tb9{K9< zu&$?_vb3}W!66pHbJ~+ZILZrYap*TDp40#FLmM_MC*LWF-Tye-O_SS?s9&?Wdn^J)^P*iydniPz>pzW#U{|C_#?+xO28j!$J1djklCojw3y(u60UP7E}$L z(lYO%yMGy&AEsWt(aG!1?Ct3<-z&f`Ce|3P8|iA5DSKd!D>{Zj;ar&O=Zm~Sm2dlK zX}L6RS+mc?YqFPw^eCn0v6NU}54~c3hmNyUnf*dxtT%5>rJsmQhZYkueh&CEo#i)CNW zbccXSMU|Y}rcG9CXRkbM)MJ)oVHXva_7Wc5^o~>M+MUhLBgMsahP!43owKzX9zSNQ z_fM)A2$}iQ_^-ccJICvrQmyoQ`}_oD#dUPv{j#&BI!JS5>TakpJwy1pZL^sStE*Jz zYv-5VzO}A3Wy}ozogJh+pk^N(X zF4MA(>yMTeZ`UuJ?zw+rR2hY!(`?sb{hta2+7-VJGP?3v%4;Vp&kUQa?e*i7?eUR{ zhG%^}6=wxAJStwjEDiPvwvjEWGMQwHrXG@^?be}OQEcFBP@7#z|I6$p^+~#d`m8x? z^whE4KIoLzHze#hWldn~Gxsjljo|x$7MT+vf zFZx1$)|U);ciQ@RQngfcte z=ddZ_{Z;n49G{U+_1caAuhvdG`=v*cbR1HRB?^hh6lnu#)uk|JIB-RzjQx)b7Jpye zUli%EE2=}(N#WWKcAkr+lku)mVS`?Bo2zba2oZ4P*SeRT$v3AWb5ab7Y(z!vpl!!S zBAn_cyaw5ni;y2w03N8dP*Rp(ht2Juf7t40RiqAZ>iYHtl}_2G@G9F?#tP@3`R_lx zNH0j{-7BaSY##4Q39;m;8mlN(?GcQgTyBeZ?J>c>ip#1P;2At?>-QI}f2*eO=|BIB z&)fVINeQ^QO0o230%@6mKZYBnRN@#OzXGw0LRA`|x%F?A;rGl#RQ6se1!&4ycf60( z*#(gkpV|Q>oG(l|w>|+$tlV;PBK4*dQ7gBfGi7CAp|x{>N+}Lb`Dro}*Gj$~Ouk3T zc#VMwf|J%85n+QafFgv5-hm@UgzF$L3i+FFzOw(;R@zXeMJaHAcq2I>r5Gh$jWdZj zB=rh9Izu=iMNrF0RwUP7|5`qTcag^eMhu~;;Y4Y>uk3m-iSIrTE1+2aM;Ud)D*gYH zK>q)Y-);0#Jhk11F;kP961#8N;6Eoq->>~$Yf!6~9;jhiRqAktC<}6TsqT*x?o$eB z5A;ngwUq5y$W{CAKja*D_f0My7&-&ND(uMWMIS1Awx&Pab zeI%eov;9*>jp1_DU7_F?1%lAuWKAYIqaY`!?k?j{epibozRVXkvfy_`F6u>EZNP!bX z0)cZ95&;yvA@Y6P(lo>(QK%V}FPD1iRVa`tV3LeL zxO*LP%tKS&<~HE?Bb3z!fG4iTc~wxFVKZL9ZE@^qW^j@AE^NAv==yf_yk6h^QuB%XDX|n+_PqcUx55)COdRbdC zaTaOC8L=t9OZV-1kj~V{GE}&+qsq%a*f=Xxp*+8sh&13pFo}1mO0f$5T^X9(1} z=+UTgGo65YMC)D&FiOBblE;&Ar*H;0LCHBE0`|GU^^zmdbWraEX`=rzqbXaheIRI5 zkj0t-A_V%U7l~jIARStR0^oDuSo8y-d&4oH6AfV_5*!h9hy}GQEBK z=6YyT6aEp=hQ?x&3iehyaY#l&;$QAc-j>(=hTaQ*eq2fh%*jJBcAMN$?Cv-yaSj9+ zC$iT+`8m{SF_uW$X_#h;!$1HL>zTJaDFtWdHz)$A+CYz=j`H>EVVK#I&L6cP_7LK< zY@(vtLk&smv{6FazGpv>cfHSTDTq?^Q*4+A!HAPn+t4~7cL<)|SLm2oGuBd*J@h;m z@u3O8gB@Z+pbpd!a{%%R5xiCsbi}!IA|?&A<~3^9+L&5>e(uCKjgUSea%J!_2nIyb zm%|X^fnf7-*KTD~uC#%OxE|4JCg310htc+Y9Y_^%AJ|p?hU!doB*558Cc+SG5V0hW z!D-YS+?A9dJgZ)xpOTV-wP-d#>>_B6om~(Kk6hi*LS1M8SnxDd{fPoM1pNJpqy%(L z6nYM?r01T6HZY{jR0xR{GJVkdlVU2Pn!hh~G{y2G=w~9kh65VLkfh53WJrqXiRg8A zisO66z86GM0y0oUp*#+Dm#~SzC{Y*`msYOqNeCEH6&zKkTui3svSR<430JD|?cCse z)MY`>3N&Xz?jhh=Fp*%yRinRg$G3W9IEwku%blr+Xrj|oHj2uO%FVH^(*uW zaK!sI&}qEeFCrc0sr|KpfL)?w7+dc(n-KI95mXEbNhA{3@E_ivI-nYzdz%dhM?2ly&S;aNXvZp_VQYXF5~jxq~qCpx5=sZ zR6}nlsBt4~1TCl7BnT^*Xo;`0h+bdb0ov41U#Rm}WY=bkE1D;u2TxQ6joNZDp`JJm zl1mJh459oe$E&`IiD9E8YBnmx!y)x!gAKN1rVtfiB1s8m6&z|5VPG?wW_+k?pTt>s z3N{Tn$~uo045 zgP>DgLxv6tFNr7EgoQPs@m-Hsr31HRki`IUoxrYnj^<3s66JebcH*K5?*ia<0ws$Q z^-%-Q&>fg%Xa`?L&h7%RAf)37jA$M24Lmodqhvz2LrJC|8U7cr%OjyOLdp?D_7nJA z0!fCvWu{xQNi#noWf28D+_ESL-x0}Yq7_JZ#LcBtk-Pkad7Q6Xh}pN887W z{gG;vcNQ24s8*61NIEg3d5-ogJv`3UsPXVY^&RiHYMMiib1|JI7ZA90rWw$JV2~@r zG%RA3Nok!(Ui@Y(zLs~QVF2{4h`*#5a`2<;0(Hw1S17Rx1ynqPy^xk2AJ38pKvJ0$AI67*hvaX*7cCKeub=rif|)p?V{W>D(`T``^;z({en%I`77qwdVzh*x!pyYWDN=G%sO(4?YQj#}Vs*dqehQlqJB|{*QMsMnSzBM#X9U zdii>=03a<6S-FdyRs4Z62+Xj~6RhCAj3MMi)XSR%@aB{eG0^bnK<{Gjxp3NDUGpbqHb;;Yv=(5t_t9 z=UvBQz!Mbgp+C1CyoQ*T5Pkwn2j*6qP1B7LdV|p0fa{t-$En=!Ehl<%<=_z<-^{*e zLPAvntR)_WBq6Xse7WlEf`SWPN%7FhR>RFz4i$AIdZWPk)tUrBa0Zu@e!n6p1tfZb zundAA8N@>TzTT)|g1N~DEkrH*k$3Rz&&dTx+OL?Df1Pjwp*q|7bGvCe!TE?6@_jl% zf__Lp?qw{}m=lb1->mSVorRi4tG;0VVfhcxjtp&Jrx-GSAR!+6i*Y9OL zb{=9-)d;I#wm5ej6wdhUWR(o7PwE~7fEOk0A5J)FFkc+?_HU`qQf+p_$Ez%Z;fd+g z&NpL&0^z$iQ?49f5<)Ri6jVFeo~yZ*sG1y3aK7-Ka?o$)a~%7FbI}GxTsTe&xE&vh zfImEF(vl$$2GApq6?k_cNXa}+ju)N1-;`flQ!@<#dII+GqES{NfJvh-VSkeHG|)+J z#ufDRRZp&|Lna>@$J{@xjxDm(E zhiP?~svzWzywyeHbU`&fKfn0EAyvLnbu|)&Brt5vnGi7O5!hhM>9RndIbQ!BN46jDSMy1ms?^xXyoi0^`0Ej*-ci6t;W#C%G(3#20XBK$mLRV05Fnf<0qkgOz< zfM9m5Ag(wE+@ivV2l>c1MIg~Q2<S$L#1TLp5Trn=Z`k`NMBf(~%RU&cZD(B}lMia0w$El@?u z=67~e`kR0LxgQBBiM2UY6624B*nX^&n8#{~M`}y-@tg7-vqya-(}0OKdTxLqH*LBe5#47;n z^-Ia_1LAiE+JCo^9z@9n;7!KBIJBAJt^wBN+9_|S{RM~+g&dChie!{JK^X3Fdj9-;Rkrc0cN`%J*Kn3}_dc+!31c}-*&Z=1~qR2_$BQk|bbJ@!l3d9p*+g={r56=0*4pj}LXC>9}ZAuOv0 zD@mqDw_w>Ab%Dh`u{E`bf9O$Yfl<7T^eAdF;}6_fsAkvU>G|#rtL8#K95JV#wr%HT zTtEr3BM>_Dq-AiaogqO6;1heI$1~U@#J|G6 zQ+C_bW*d}ZabQCZonK?-KhVntl1O3R5-~DS)JE@(_@ioUfAB>5X5)&nlCd^w;W4d| z0g+s>_cFzgj=?XFlRF z62=nKgYF&bVQR1vtC1WOD#|yP2ptypxW%G&N#NhJ08VbD|FJdC+}sFTydK7x2>QZB z-0$&KsY}+qLWx(cu9M+{?p`cj0@1Jppl{+91RzBY;o{%}-O?heXjFtve!>T#VGN56 z(*h-bEAQB(!mV4j?9Ke$3|5yE5pMB)Lxq5f=*M?3ZUi!yM3b0YRZ{E#ghd{HoA~&G z!osW(KVMFj7g+nqyok4J%m7 zd1VHz(&w$FD%e220RigW#?MGDjH+I%_Uw_PM=#@pknU-!&6qaP-^Vj4Vxj7#Hi=?x_~=Jn*U+dWP%s4Kf%iSUX!q`o!q3JbiIYTP5wDhV z8s?T{t*G*t+n=h1(S~55A-GjdZ}py$ViN@Q5V}es)CBg0f?NuvjZS_)JgG5u+~PoV zDAIyYhn5jR6dp+Ovlq-#$CDSrI54W=qcHX3^>5=(b)TXr~P3Q+G0N0uSwkb7p-l71>R zml60f_&lQT2+YeO>#->$Q(Vhwu4jSX;cBTw7=&6UaepL7AYj(hr|U)hmjtX^8N!o``D;sJ#DTXbXlA}e&4*|#FU-%!IIS#-H}S(0 zA&w>acx&%1@wM5RncU$V4rF>HokJCY@8;)UU|r(iDOd{^kGSWC%#I=9BS9>w=#aYN z$89{cncYQbr1+A}lPmGHJRjcgZsXFG)Z5jB$F6`~JYZJ;Gddzja1a4SkQ}qW|2B!L zoU)GttN;n-6p|OEC&x2vjc@8h_2k)fD>l^-6#UqElQQp$_9f0=W}dfPdeE(9DHVG? zQ8C}ik+7ekI!CI6K%RH%-NC&8D8A%yQCC^A1-DuK|B%eouO~B{MeE5-*)W?R->18C zV|D(gyPUN^r#%Vnz$2h3P8*{_?~1Y}1I$X| z*y{Z2B6H*gZUh(f4FKI(Z3yuR9sw7kSQl64j5cChg@Q(Gkz|N=cR~I0kq6SYeZY7e zrv!;*<(AcK<&KUYL08};s!CnZ%{~R_g2@5kBBb*{-l^D!R0K}XW*=UVUp7eK#xNMY z{mtn~$#@Rlg45eS-Obc2gdZ|;WfsdTKgs>V%j>4_Wbu*9%F4>II%n^8oYO^t=Q4J9 z>GGU93I^5KVqFV;p=a)mwipHpS(m=#Hwici-@;pv{Rbak{rpnK%`SEd@Eun z+fTLwk$$caANL!uiH?lik2*accAPf_9kMONe-tBnL+cRqqPy^eP)17^flL2qgMVeNKD8>yD&igKh#A#83`sDW~wjV+2 z(T|A!Bti~dqy&1UecunDjL&Ie4^3bl-d--Xx1Vi0{@m)iPK(NO$n*>fx)To!o^7}1 z6<5HcZ|b6&)>2$iVZC&A*8zd+@hF3R>)W$uj~jq3^h*wgi|PJBlVFdU1Bdm<22@To`_sY2nIPuBlf14?~sklq=NHmp{EcV-{jQ{OzPJTC9ag zR^_lAm=5-JCpu@tS?up37Zb$1Tgy|SYty!-hWqryX4Oxo<2DO8E!%pAPEAg_Mu$3O z)lIdE8LdJwRrxin8Cjd9(~HRO_oE5I3wzUPk?D%Sgn^VnV{fY31!cdiUuuD;cSHLn zw=U`Ru8g@WGkQx@WQ)A&Y;C_HS6bYv?goz=3>!}2L(_I#wZ467K|Z`=ok;6`2oRme^QQX2PBcC%Fp1r_kQa=r;Bx1RGSR3HIcs z*>}WnVumQ3;>uFM;6Qab{9i@>MG$0;qb0Jo+$Ux#=G%s33Os?=fPoSRODfgYFhQCY zy077+NC6DBIi=({Ef>Zv*-+60l#h(z%83m|Kv17<)_zlkGk~e9g?-?q#l+Zs+)ZB; zo{=cgHE%8NzNH_^$sS!ZYN_vGIqJTd)y*7KyUe_mSq+jSM49eXQIL&n>?@z$XtSg# zA=%u9C#}U|MmLj(&Q2J zR9bt*n<*>JcVzW@g$jCQD@B>hzbN0{*13cp{6V-VaVK~QG}sd^pujyF@c}#9hf5A z8l>IzuP$ySHKRxuoxKGkmdF56)2WdYTOpJ`!b~Pk2KU0EQ9!>?OU^Ru8=OEKx*tUL zsh~2yy!Te`H;tBkDov{1=ew>^-62`y=lf ztibMESXzohh(;83lM#vZ3G1t7RuQdrl6P*|buj+r%a^=GC!4prOkJt?&^q&{mrvTR zmwMvNC(2rv%Um*hU{g+Cf4>2;y#u&jS!h~WBeB!Dr;(x?UUr!2ukLzVwChw+Cf2-h|Cd*U)Pn@_75b(N zZ`;H9EQ3y!d7E#TKN2h&h~v4KKsE;Ku%4LlWNaai?{@%c@5cr{i6+gb0jvA8aS+Qb z3_JhO6_xFq=|I%`P7KB+F(BGG*moL5I$bmf3q(Wx{S8}C(Je&X*%hx%pREOU)&#b} zesHJ?Os9}uGhlI@B4ASKP|;Rfw3^%yQPX8RnxmMaD~xod5b2sL!VpIATLHy=DL*Ix zHc25G6sE*$T$PmMZG(L&OKjt-ZG#OzNopBgNUsV}`*wxO7X#|moDQqVQ=&vO`2)T8 zM;eZKt(xkiEnGd1#+R_m#1h?`w!+$bl6Wp+{JXomRlTaPcH9ta&@L^*^tmC_-cRU) zXaO3))3;?H7x%5N!aZAmR?tS!zqPMCEj?TJ&+L=v$+Qcg^`s~0k4>DGej}s3 zujOQO+cCM2(^!y{TXfg)>dDw=ic3wKaU%+m*Qwol2pnf8ym}D5~Pv4ijo<* zfcvl(PLas63xycAx9Ziwu$qjHi_<3&D(;A`HH68n%s?LOMjY$siN!folwF}xT&|jX z|D9)OsM!G_tK#*S062vaf(6_yrU;A+VWMx9P_LX?9X4-ZO6hu!v4Ymb)BN7v{<=xo zCoAu)@o%>r$pyGq7mVLqK{W(F--WPB!#FGZs z>U1PNzIpUm%81EhfAi~P3G9&*zJW-xPJobOVcQtsSWY8cedeH8Q*J(r`0NDg$A-7` z_4h7pk;PZ1W|6eL-{WdCAK9qm5AjDg!6^134e+p+D*Q;t(c|KsR$L* z!T2qg=6U2qxl*EbP`ak#swBr*AZw0Yd{@r&-cxRhMC=n+~52GZ$LoI7>` zb#n$k%_lQ|Vf{G*OG9jK_t+TeLX&0`$vaPTDL~|RNX+h$* zP36)^W6G5^RMFoNGG36NB8sLU3t65$O6n5Pa-m<*bmWS?PH98uG@i5&QJyC~SfqI! z_ueTXdjfJgoT%U9!+I;-W$Gp{x)aez^T@=E=~8-Q5UE*yPi~Nw#f>_CkFLFdG%x1o zZBhBsLD!0)w=pgq0ZT_(`AzxG`KVnScXnRey);LPH&`jT5EmyO9q8$%G?O?4Q)D&> zf#pd)Wyu=&lUSH?c9ggv_aiSaPpZpk#FKg%>V2hkd2i9~L=RyQB^?mi$b>Z7BR&W_ z5yEhyV1su?!B5tKCGW9lW4PSdm3UUa=ud1oa?x26ukv{--o5*#d3}QqwQjsM#TKgN!4zz6lmQ46*h9Hn=X%sG&0j+j!_PEt zmE2S1B6|ICqhqB@W+X-T z!8UENC~DHK1|eL8S(mAGp$^7D z%GEn0gc~z#-JEV@hzAKXMoH^F7GcBoq*bZ=di#zz{z1ld$UhmYNVQ{pBBv2rPyom6{`8; zT^+X*EsTteG(@m~DJKl0VeNh$@BB1_S}N&>B7*clSEcZ5Yg8Zrzsqpccb1c*Z^CJaErY&YF~kKsrGXxYYGR#ry(b_AC|x`9$JxXc-^c)_9Y z2#SJXN(zJxF#L&Vn+6W*78C%>o6QDlOP)ZEfIJ5= zp$e9k_!h4kO#e|XUw(|HLOgc)U?HPf9X17NSdc8hv^6VA^hWHpSAQX$$2W{ImluOH zgV-u8sYtXW$PC*w-^cBr*fbZK5bNXZXd(=(#w*96!-xV`fQzo4EWp^LDFyEpOW2}^ z4jm!`Y=q2)?c~3By79zzj976B31y8ZBL^mCmy{gg`-s)Y1Y=p7+R9C255#zSr08k2LVyl!gjB zk}99Tz&O;tZzG@~Q+Xsn`yO2iO<+BHsjnlJUa5!+F+(Lm>dKg}D?3nB8br28Pnq9P zTC?dCTP0Q?63k!7WM~(iLP)RG4TnHneRu~;35|3lqojsI{KTwKKNjH^EI#7bkPy?_ zal=QW@k#wW-Tk^H0q=g3*yDMW{iK>?N!v|M9|Z|d$;h6zs0Ehj_!x;iIbRto0Y2RAr~hFVtkIaDr<^z}W#z~5C7G4TU7hFXdngu1w8 zWKx%-_zJ7*e*QAW_}tl5QAMQ)S>;_6`Tl&YZb&_wEVYxuYlDU%fhX;J|@5D1{5#P5v*X zy$M*4YuomnDN_`M%p{RSQk0?0BxOh0H{} z&Sm@dNg5g&pC1KX`WOuO@d7lwMe+K@X@Eygo;<+vPk#EeXTN^^)YR2ep-$V47%{@z zkzYCD@4p8lURrVSAdXP_QCH`A>{zcaU%%$z*FL4Ya}eMnK)$2I7H8+TU%wuLc{oq; zn3a_^ZP6kbRPeU?`ufDi9e;Hg<Wl$8uJVW_(}C%sSFd)%8>Bd5gkZ9Imc{R=?+%9QWib(}%Gjb8FRXA-E;2Uu zJbii~t70GjbFwwkXdJM&YWR`0Yjqw5E$kF|;r{u_LXVSkl9eM-e=C7F>_pR!|Aj`@O)a6*A#~i4J~#g;Oi}2dQ?rBHOa+=L0C!0T=0UMlUB@2+f6{mbBH z&avaijl5^-2TU7sHZU`!FfK1Qy`skZ@L}m74V#{wrKLw08yly(@kjdO#|E}hFZ+c| z**1d>KHVK!$uv%S=FFMi*RGAdpan>_zVFk^x}~WhX0w5g+wY?;E-nr}!@B>oHrF4z zr=giweX>w~u2H}g_xyexK^s|c@wSJa;U!U2Q#;~x3MJQ%hx_bqcThn9Nn^9G(c;C^ zsUYWahwQ#KLIPuQe~`2+A4hpMKtG$}CJPv->-YLypD|`bSjc5^7vkejagL=YukN+r zgxc;6xF?H3#;dDmLBVLe-cOAy9@3}K6Hui*B!uDff7cO+osWM8*F#k02owH$&j5miH zdTtytV#L1mjEpXsUw;4W73}s6daazYIP413rFQ6>26GT>7JzsjGMAdkR<~;n?AGwe zTeptFSI@n;_e0J7OxLS!zEks)<_?jO*|~G4-;N%^&x<*fcJue*seT(V)EwEayQmKY zu7dLf_Dj|+n|#H>;{AsX4evA7LawDrx#Fk%!G(uLYuCK6b|3ho!8O{c!tjaogr_o{ z+Hdaj{!-|Nh`AP&g>%V~k?H5cG3u;}N;QB2Q-YCHU?+}XEp4``s;yO|$Qd3L6}8z0 zn~GXPi=a_i75R}NB6AD~i+D4xB+#_rswiH~)*HvZfgP4yVp^;K>Gz-b0< z_F-F39Ur^OACF;HbF%8;2nxC*lu5piPK?`2rFYcq?iTMRet`>djU+cqz5Z|onW<*4B3#tqZdJoccZyvk*1m(Fdb0ZlKaM=HzfwKEL{ zi|-+G7Btqsx@EJM$6tyVC=dB-W=agPJ&nMSfENj7zHq^VOnZlIsn)7YoKT-{G+Cb&0?zbD_@`due30(4%=Zi42T zF@1WQPD7ms9S;Z?Hcr}g_UsN=PkoDuma}&cT%Eee)YJzffBF0OZkr8Y;WGdiwhbRk zOLuV)^=jhS$T4H)%$U)3z`%jSZ$HG^IK}11H0zUrfxVHZ_Cm#{Jb2Ir^=vxV!6gnG zJ*@${@AY)3?<{R}V=JUwk>y9 z^xPNbXmYB=dFa>RCC5wN9nts(dmh)!;&ptc*wyTs6WDqAjny5fK)qoghM=#<9)2jF z=}B(7Vt%i;pwV7c#B!MXA;RKJBO_V(B0v3n-mjFY7PzUijZZD`)1XUb*ebi z`^9%Kp?CQk)sZ8UOLqQIb-LSuRuXx6`Tb!-f7I8{MT4_8yc1-5`9EHO;d!x+Yy586 z5)(%%EALK7a66rO{P=OfUY^k1sY9gR$Bh}PtsS?l`}#4@wO5>VPSUTjuqbYP)32ze z!$i3}d%fTg9XB7YYc&Y2C~2pzdvl%1uiw85FRfJkYC7#^jwd)}^5p)BiHTZUKFUy~ zFZs)TlTCe~h9+l$%VIq0T{tiA*|V$0D&7#ws!2As^pnhWbR0)d++@E>Lu2D!5c{6G z`ZX(;C1&WKb|p2A_mo;E$~_>euG^vVr+wMI>@gGI{8C6VK0+U}Mxs8g(%-ZC+{qUMHWO53;X z7SEX@=`v*y9e$RpSGQfWW{uyU!0>AAnd2a`)BqyshVLAQ^O+zGc!-{_WxF7B+$Zkj z0&?Os$elw~Rl9B4v}yDG&`7=D5{*W)En76i-Gm(&I(6zmNJpw9?;rKLP4!lWDGMWQ z2$U{AO55<3M?yk;3E!#kF6H%Pw(cl@-m=5-X8ic^V;U}}AJy;mr|fJQz_ah!(y~v$ zGo>2_PoHin%jmY@&D~y~KYvD1?FU-RoVxSX+|d^C@>C$u-tB~8U32VBEm#hZu6@QN z=jO@~sJyOT-3ZtK_7IainSSimeV`BST8B{s>XkK>&z0QLaNCq*=E z?eq5Tys0Gd5Wkp4iaZhE`D2Go^hfC3h^Q|!g2)8Gv;ykEo z)#-=_59U9K+aD)BMcm+{yX$3_zI^$z=YfHnL!+a6(g~BxT5$S9JX&mF;R}4|d)K^;h(^5VgXX|jJguErT&|F`wktfK%=M1Bx;)?B1Ly}Vdf}nO-xoOiFL~w7+&>ug4PR-9Zig15q>1tEmwPf?4 z%PmG79F845YH4qO7@h@0p8Dp^K={aHHrtWo$2+pMU*C1^%3+EQTef)k`uY}};1I#h z=JM+^L;D_Bb}IPJxw_LQe#_Vd1M_Efi77M*xP5y9LTj4dO+^Eu#>eN^246TP@$|{# zf&#hj-McR-b2T)0+7tn6{^$`Xzbm&8KVU!J&kMXQ;P7%&({}{?SeGgVtnqnRv2xC3 zr=+yupl^r2|IVPLX;hkqB_CA&Tw^|f|FcreeMvy)z{9Q(`2aaa6~7`Ck-Oi%WSY=KV%+daBgcg#j_{l*WQ z|Aa?IW=Fo6pATY`>elVhqecI1pCcpZH?|zf3ICMTvH&T|8<4(+_mbE}hvlz^1}m1*FWlRH zr%xXu3qR>PIjmvh`t|$8$MIpdt4OrH6I92Jox6VhNJ%Mq32t0^W~PvTKEAm(k#-2l zcJ11^?AWp9*N?XaQG2B_E_n4yK9&mj$|mD;mg6`qr9;^EQ6`4hklEEYm(SZwkc+G3 zk^2ci#;$tUYu}N2?WG{;c@|0TSJi^a-9~?n(_Rt!exiYa&&P?X1{%!~&niZ#sATi( zvq71ihkAS|NjmeTIHB=??St&>p@8CY0**&cg)9{os*KTC1A$!0Xv5m>-o-^fpFDSb zHv{&AHMD}qk@`5vw6wJBqsm5Ed<@(7n*zO(l619q{2Wa+^5x5h=T5Ejf}B>A z#5wJwV%aTIop_PK8DjntU8G;SoS{KI*;Th+diIrd+;FhbA3pjjc9oEjV~_t<`h zoYQMnW#yqf!*aq;%ug7VBY!yj_0$^WmoX+in%C7&dVS=%{qAYgPyhzM`|x27;)kIq z=-8T~&a5=gUEJflv)t8g*L5UI3^CuvWj{dapfX z{DXq@UcY{wMOl%3V%(Z6R>G_$AU=N+x8{hH8nMfJ(B2Q7fl{?Hw}gd z^1zO0N&exLrn$T8yngd$t#7;dRmOwar+Az_yu4P^I0Y&4TOs)9(WAL{>{qR~wcV3h zCeS4w`EG-zZufvpnLb1&`N0Dpqy9IqU*F~F*#Yt<_u}GVwO?QLiHL|05h}_ouI>2o zH#Rsq*f9V>c`4TrzclGef-$T&CLyflR{P}Kg|I* z#U~{A9Xr;+&d$zIC3?Nhl39SOB^pU~PZs87yb)2D=reEO!nq7~nUztDmV^>9zp47; zOu4TwFYkB1xntm_tjdXpGxr7s^*wd^G*YBA@izVbeJf^N*FBkfWqE9!c!J7Wh$wf*N8Zv^Hcii+(aAh9^zr|`43 z?Mg)3_)<>X9)yAYT)hG@h*|>w)G%wGng4{W=8aiLhN_JppGFvbTVAf{-$ixwXsN=& z!kB80=Zh9E-d$b2`Qqiv58qUPLp#1xHIhs&A zKts=9f9LUl7Czn5`t4hHFyPxnoIKRGow0hK zuh#6mw@TYmrA8ajn2on}KCR-4)e$Ep;aQiyqX>CsXZ$UbrQJ)08k1g;OILMf&u|cKNxrcLWAgeq40t4*hsw|%@N`J(ekwH8@VxyM$_qd zbq!;UM>j{oUylT^9qP363~gOXOoyG&;i&_bmJC#C^gXTx=b zwHOkVU)*(8S#jO64dstCQdiV*B?@_{Sy6arkH)PA&8QK7KfkK`n)sG_V3buSQ%BP*9`{Xuy(p72U*Fq$I5sZM+ig=M^jb(rh$0r3 z)dR-3eFKrCKYM1py7B$f#5mh`Pb*lWVLHPc^J<$KoYb-72u|ikro+Ip*!Ab$Pkg-N z^t*Sf)oI7~UX}gSww+m%l1FiZ@3bL9lA3?^*LMCacg#g9qhdzjv4%e{vR!8sOIy;h zpa5-CzGcesj`svLf&(_tEXmzGN{i5I&88_w`(1sQie*We%nWMAxmk=}QY@b5y2$_| z&~V+RAA8f+=v*k#_y>18R;}zA{Zm_y5;+*)eFTth7^QVfqjUSV(fAhx7Zmr77a|Xe zWaMF^CpTSoZ^wB@Y*Oj$LDOOn-W$9G;w{P|VLo5g!{?BtGo~y`kxZ9OYRN__ z&=<$F(f<9uF#Y|c`Ws#%FF*tw*l@hgblO9zJnOnf9=PJDQ9iE|b{q%QK3^$okaXYX z-21I=8hO?C#vo8+i5G*u8E)8R85tVsZ#M**G*A+fAx`8gKzT^T2yMm5#I5rC|>W9&gkGmX63lNm9`kJLwwnmToAHi)>qkchIaqOVTV z4$9G?JnQgiwY@37PF>fSJYcbj$-abysRTw3DzkY_r^XB$){eE53T5g*>YL*BTaJp6 zl(Q>1IQaTU6NFStOUqsC%4aLALUJn7C=4hAVz<>O;nEZQJPaeLV7k73*C~UffvFJx z`)Ft>N*&D4EswG7MN^Dm>S4S?uV0s;ZpftuXlVw`(BRkm`i&crH35glhGwUxw&fU} z)w;Up-%peP$F!k$dM+%=peZi906MfnB-uaj)~{37bGc8$_PgglO}}rim-VzF%*xL0 z06$v>3hk-et;sByf|^#FgS&P~aAnzbFShb21gZv#4Mrf|7i`*`u_`!N{@^uF^nQvV z*|8S!$wa#za&qlK8$~Z)Ztl0$ZsgdpnNP#@{kV9BU$$v}f>FMR>=kMj#lDtAMT-X;It0f9&Os4B;A4<^FyZ6LRfD{MpYJ}{!C_}M3 z>c^n^AA(59-lBT;{T&U1=wEIvP1`oSj_qMz96x>5to9)4j+`zd-?#7LjqRd;sp`q9 zCbjugKS^L~N7$C+7ccsvj9ib2>9u1Mz*OQ)P9}NIa@{&FWb86r2;y7HS*iy4xH80> ziyIpl82IsJj0$GeMP_EB{XgujOb9=4peq;B0Zl|}(xg;M8Y=HT+J?cD9m>j*C zAOxyDfyKeodGXt7#zsXVU5YPUxq3D9+O-_z)0XC~TSGbq{y}(FoxhD$RlQGZ(GU3J z17Sl93=QW1?=9k8+Q6w_jEvO#>Vzjp?&lxrvVESOLv?fpL6Cca-3op_Ha22ahy9F$ zkWE8>2wT1xu8mdfiF$sPWtW?qd*l+6FnZt+NF$qgyy9|+SUr06>M)}d+=!NWMeKUp zqU%F7lWfd(?5*mh> zJ#^JXq_R|^lOsN7F;L};BS?!UF#$*S5mBH@P7K zk{t1RD0`D|J9phWCBkKoL4$nR1{|M~T2v&jq@+Yq>z{t|JhJdGzzKAx2N;webVS#L z{hl^N<}4z*+Jp&SEK5@H$O*m*wqzR#t;v(Ij?2m_Etm$+DSm@Whh!!cJX&e{^65*< z%RR{0i}DqtWJjGViMG9z?PM}I_NVq3LCWYh*UIAHA~5{8uW4gzyPA1YMYn8Z&CJX` z59}x*+6=?O!+~9Ggr}*KfmFtGl2OO&IC-tUH9)gk!fd$IeeMOO%?sD>W9Ud*^4rqV zAy?)CB0YI#WjG@4Lo0<|zN}I$q3Fve!@Ab}f3QJNnaTgKLAzPH)Q5X16%mds@zcmp z++>!Z5p?pT)1*5P9@c;TC3q2H6TEB&A+q$-CvPBMa&oc+*zBF$fxr?o4NwG7x094q zI!i8>-aQge8Rf-tqBj~+9zGe{jk_-MlZa94`j@`DqXFvXMk)UN2Q5jacW+4$>)Qz= zf%SHF&+q2=7YHJr%nzy?v*gVAs6M|mwY~1sigg%x=4W>)DryXos?$(~yNcimqiNG5 z=!a0PuD8{2I~exUKtNF{G}B;f5nMrOfs=i2>5S+)XU?3uOJ8fpX=uK9^$H2@q5ZB9 zB`S_vwEBH%!Gx-@K6l!$r%8A3_JavU-%RV?mAV>S>*)_;u3pW5+T-uHU?{QSmIN} zmK!$tN^-q=r9jP4wP#YLjbj2u`$UPn$jB(5@^WVhm!Dtyjh7a!s#qgoCAh-;I(+8=uK?AcaO zMd|6u&!6|l#qIX&&Jdz0)bN3%OAObzh&9R|+txz51Cv1=>KGCV# zp53mW@SVJNpU`sl(j_1GBSDU{1~W0!lQKI|7Q^s5nzo;}1|Y6Ofoz?+bm^HmaAU#69tRH{(so;yRaRBX>wpzMe*8FuydXVj zN-}BmY-Nul?;3Z3rO;$PXq_gKb>y86qkqOE-c1n z+|GG=deiAIxK2aj=v9dWCQX`zRL~hlR%>c$^n_#s**@zR{GESr=J?)Mwa5);o_+uP z*;b$vO3aVA|IK!e9W$mo(u6#AF|$>ht=F!#BEx|I`>c4jcrbC)>%<9psezN0ib?`{ zpIRfh1Qn#XxY(uYT?brCW8MY$`gW&Kv$D6BhE<3ZTB0BQly;9ys3Snn68pn8$Yc^) zs>-uvKN7jGDCXzo?MCIJq*LUN{+3FV$Yto z0;A=e(cKpi5RmmadiU-&6p?n}Su!1Y8m(jnfk3fo$<=i|M-pX(iBP$D_Ty2n_`F}< z-0MTviAzh9HnY~ofdGOuVr=pyVOBV9Qv)wx7nTrJXHU^b|7rM0RRb^(+tCxgNZbPC zk7=*~tm#yW7HIxQ+P(khnmtDVVIprS%PG}yJCsi9*u`WPnVvoO&_<$Xu!g(SZbm0U zZyO0J>)s8cN?DQ@qoU?O)aaa4BJfySThr{^U7!vC>+B`>C|Obq3wvi|Wb`a6c-={~88SpX%t+MpXm(k-GR|9?{4rny5Q%n52$hu|3tW~Q9qxqx)KSe^O zqI#}!CWeYYZQ<6{s}-h9nS%V3zuhMK_U#N3Q|b5bhZ%5Sh3mD>=luTQ^$p$P|GY+* zU8A+LWs1<@zI%@0I6FMptJ<03<)HkyJrDl+Oh3;q z9@Bz=PG^?1vKIm88q5P)O4;qP4sZ9U%~g>gp%0rhsULF8``We!BuC(PCu!+@Bvck} za#_`)6)QSpfjHQIqHlhmnQ%_2#5$Zl^Lt`T(NMDqRn9iScrK?k9q2Z8?f_%O5o=9;A>4Q|E62xUr3TRY|DOVh9% zi&%#?{7UMzYxZJ2l_cKD#W9NQipQNh6B)MgD6+eRssR;@U>+$}^6=I9ReXmM zEhBZG82?xI3yp@LQS>wk_Q5sHyl)j1+>MTgW7TW~d^A{3AwF?$RZN;vjqbP)A3kJd zXSb1%V$evj?4Y}M?+OHo!BUOUA8}7RZuwl$85;)>G{J0JgWO`mpPi2;jW$-4MVsF* z|7+u}su(`_=%*na+P1-;+W~`AP~)S_Rqepf9bu#$92|~(IOhEpnwWZBk z+VqOj6f|VW5DBW(tVfS#39p*;;O^psIxa9U5M&)~%erx^?Te<u3NlX>NWyz8~*tt%fI`!jM)fyy- zVd%ADMRIdRugVkI?f(C6RL5KGNSLp~DNR6p5_Jhua2nP9|9An$%dRwND!JqxSVEAQ0mUsaB`Irem_*_6e{1_+TZhPWa$uw+?%uADr6Wg; z+JiEP!&w;Q=>5~!P;|uT!G4lu%EO0UDK=7FKWPT|As);HXkZ*stg{OQdqVrreKug4 znb`n|PJ^RsYHA!AfCPQ)WZGtgo)IA&9b*rjPxBAalLm05zk z&~-mZU5#oe$%+)k8`M@_l=)Ma-d;Lx`RYQ)RVr;~{9)UyY5TJ|ot9d3$>o zXbCQWz=Q3ILRs3$sb;$!adZakWv8L!+DvLID{E^H9Juf{mak(SPbqom78GC*pd<+K zDd7$33Tv(Ut7&S^X5|4S_S1?W_6;Q~Gv69uiZIcCa6 z1I=x3U^YgYoMKyxaY^b4O)UlF7z0^TDvZaLuBut;K{+ZeM)Si4D#~=qUApjg&d@(y zk(}N!Trr)T`+n3M1({Ai@MovsBo$@}8*X4KCg|&;L02bj$*fjbL+Xjpz6_XUNh=43dcWHB$QCDv1d)vvZYH)v0$YmbgIEZ3qTK60gzFT&!qm`uwjEJR>$QqC~Bc- zlapsju%`uFpt)8JRaD}LUOqh5krOBOlkz(!g@{jc@ZdpGt~b9Vk_b+>j@(UON?AU$nRwpOJPO@&Jdi#TaWT``+IIg#4{E-4KZiQFSCf<+}-i$*Mq})F!(q`1y zu_Nf59D)nRLuLk9cHX>so%)VnCxtP#kM>VI#OZI|m|uCqx_VbxsnVo9etZC3`W{#= ze42LZ8yE~1+&tX#lDaqX+X5b)(LK|I{iB=$Q=#H>S=r1C-+}sg(Z>9&-`Udem*2SG ztU4hz%o@?hKv+8~7B5{oi{~?kRKEbKZ0MA4F!R>LSZm%2eQHzc7xkdgp(_m!-R?^Cl^hzZrVuwXh@TFnlez6^{+U3^g%O5nH45toT^Ux z(|q`*lIcI0JHOy)NQfcE8B@C*Aaax$!>eCibyjV-A_hqT zM85}_9l3w@Ph}MqC&NszHWDnt}BA32Wko<;;6=X{Zj* z5^U3gAax-z?!kFNRP$(rzVnE*)R{$r&9){bTy!1;me_UU#yI5b$9nl(p#z;2aQ(Lm zbym1uIvla^>m7yLZG=BX>EDMhxwq<*RR@Q@Qj%r5T_}BNKo*WOL06DMW*|(4MnrhA zj5WYoJe3b}m)YLypGOVEN#X$Qi4;A<#H0_*%S`SacCaVPJ2${TjC1*6`L9ulO|t&w zEhcr1x{j=dG&6{FbH+G;x{2u$2Vfzve(c80MbH3b?#B1P;7gU!KSp&%KK}Np2IoM$% z{4gqj=#fCrPJQyk@I=K_EiHMtZrnOeSIAOV_ivmgq)~4X%v!frf%GzoPK~&y>j7X9%3j^GTC1uQQfG2W$zVX;EQWC8!IH?y$yq|% z=01Juue=OwgdEf!Oi7hh28|?&GzybN72gAo9eay2;JM3>_E2A^NxK7~d%yOUq^iwpLWt>;HRO*3AuU8@pkx4#BA@6ErA>jxjBz4IY6u z5{L+*KoYbEQqD9M011=gVQAIYAL07Pg^`s`BQ$LxIZ;vY7{}x0rl!XF*B#(!r7Lkm6ZaaLkUC7br-0F*i=dw7MwHLew_jFMkrOV@ISx3Ie;8<4lw4N7}G-U zk!Wzj)!U5eb9?X%JF*a=<0Ro!yl6ra4i-PZ zHc+)cT&7SVL_Bc{2+J-gIO=o13atjMHKz9x`9}M1>+kjHlsA3hBlvYzZ4Dm>&;IppQAP{0D zPXXnPj!w9AsSDrR8y-HK$1BOBf++|ku&j1=-Om?kPUyfjQdp<4)TmoO7GCWy*kPE^ zQo0z083=wbJwupPh>55)Fs6IJeWBQ=*5{q;z;KO&>|s%(!7riZ`f05&KQ11+x}AR} z0`}*8$# z^YGIb)vz-Mu|s=lcl;l)Z-o&nwW_|p&x=5eWW-+443+g$7{g#1A71s2DDfB4`m+8< z?%Uf0>j=-DFqb?!J^8p3;Mmmbd82a3^SZ3LfP4gTbZ#b-i z?GgPz8~`KJa2jgYkAk_=&fcBcw|1wT((;oUtaHj`+cxj!osT_HZiEp)9WU=@cn!bX zTi}}Cefwrn`DeO$r}k}o4jgFkui;=e@1XR${_`^x(U%pC2yGag-k^Fp;`cAr%StO= z?NUryn~uCmrqu2lr#_QE6G(UdZmQ zcWPXwz%3WVJ-v1ItOSJ_pKf2)sA@`m@mo9t!Io{BsII=}_U+rRgQ?EbKkRmg+C`P@ z$Pg+&CxY!XFfanj2>&rNPDOyH-(lnvYB|}=;U4TSG0O4lOU+v5%Ep=_-XL%RR6pI( z`e(^l*RAxAILyq$&LV2jcOg;>q>PAgkoz>pcctn!oW0F>>C#*(Yl5#Roc8

      |t{j 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 Pm(rVUI4f#~<(~fwyvg#! literal 0 HcmV?d00001 diff --git a/vignettes/group_by_one.png b/vignettes/group_by_one.png new file mode 100644 index 0000000000000000000000000000000000000000..c64cc2969c15cf8b94313bc25835af6a7f8dec9a GIT binary patch literal 55768 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 z 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 literal 0 HcmV?d00001 diff --git a/vignettes/hybrids.png b/vignettes/hybrids.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab9d71eb045f51c0c617f61e87ceeeb260802f5 GIT binary patch literal 25196 zcmc$`2UJyCmnDoji&;Pv1BfJvf@Bp%Py|GBR5D1;86!LpB%??Y0m&dDISK-zAWBAZ z&N=6v$M;orbyZi7uj}vbpE2IxftP#F*?X_G=A3J;<0dJ7bKh=?-6SL=`$R>qOOcRl z*-JvQ>CVpW_)SvpU@*RIHNPe*y%S#!J2n5p&*T<2aOM>@*AeX?;th(`+nkY^PZ{c{sRu zE^(h0x^Yk1yiib-gyb}d==H18HX);Jw(>Id>*Z5iPxf|`=yxA*e>Y@#VF$~R19j)b z6?DzgDGwcGPoho>CtUnpD_2KAb*FeEE8*lk$=rB)*nrq>BIkB`4j3 z1Al%M?9cMopRYT&$gUG#U(VC){quL~euuXIc}c41uBU%q($s5`a@753T1jc#<(K>C zk1%L2oK`6?YSUZxnJkz z4rR)T?3B})>-k4AFw;KM(UnS6K>nwC0{`*Rn zI^I3I`sd{a|D_uldc1C6ZeYMj69`UhlYkiE}K4~xgGdHr}~t3 zkNRo$fs0+^vhIg2I*+c+Q2DadC99kuB_$XcgOJ^Y4Nj?**wJWCg!^b)012M=1Lt zm)aN!_J<9O^AjBsL2O#OZ8?|t?PlM~r?%=H3wK(kyZMr`YpzjE=SK*)K}W$!T3TAW z`BBl93`5V1ds0%1-7lD%a;=&1&t1Q6QfU=E+9c~%F_v-m+_@lrd(K>|vEr7N;J^Ob znU|lxv{1NFwLCXcQBe``urb+UytSEr-LNI&;Nin1Zii`Om9yFK$){OZCO1)CB35q6 zctAeyvevEa>4(EI4XfVQa{~pURI`Pz)m$YxMK>_-T0Sdzo`0gFkm}K`0QybY6~(ui z^Plopg!AV{8riig$tW)Ae|fg+@Xoz^d&e?6&a<*kT|Ig6&#fF5 zt^C ziio@wa@}8MmeyQ3J5(EYFJ?bUb91v;5ZiN3!{0w6Z<3O{;n2G#FHgp6HClx2oSn7M z{t+U&Fy1zVbs*Vyf|Htt<~dGu=g7zkiPt;gD6f)JUJj|uIO)2ZNiOmA$t`x4c?0vI zp_H~fQRKG^+rM}Q50OYG%kRG@so}o1kv~l}L@G*F=6OPARVB~Hl*e-T`b2v^oopf* zH#hfaYqsA&xO15Kzz_1iZ-Gp=g@v~dRENjt*T-jn=DAE(vH42hw}4Gq4oe?pR!9oh zml*^%R@nFp(72_38Z?p5`ivnwc?f3uG9P9WKb6nn}GU{E@_@OPyZlhe~nU z^tpw${-Uy;v#9Nskh3>$(>#h7GP)h+qUP}hx?zO@L3wSW<5w# z+2PtcX>Mlbp%o($uH9c5w7NP|&0*B~8aHzncm6RgZI8#4mC_PZro0)m3%kw_5*D-G zuY7&uqxD4Q^Vv}Kl687!RJ~R3!@Tu`p!l_#O(gMhNng`PxUwyl=pS-Y*CYo_P=#@< zM)-w=JI*V}CMlMBkh8yL)7tIb;wPCX&#LOQq=glp4gM`5Au&L;vADy@$;smc*N-eW zwLF_CcJr@Q)#MHlcHid|_4E&R>x=a#F%~EU7e#-UQ`qPc zU$!7!64F=}qUAr%tQvw~pC4-}Cly>Jc@!CW&T_c!LDic}vi#c?dVWR-5vSSP`@lJc zEZZ6Fi2OY_5JpTPp`i--c5@RoVZ>*B4ZW31d`}m#;s@q$pYFP*GBG}m4>RcN?gX65`V~!Q9l3j`27?df8Bm{F;(~1+0zSpH?d7$N=u*X z)xKvnYQ5au(=#hE@4VRSq6$A+ z+mWQq*L=2Y$i|TlOVfodoPTQ4I^*cYAmbx^`78So0({-7(^t#>T+dn3ucdV(3w+D{ z5wm|++plU*|3h(&`u|kg{Xz2;g+()}P z{RAzY>afzr#^cDQi&H(e8*2+xb>jz4o~%Np*|gaAN=>&h`6M=brR}$umsfdtxvO#E z+I-k>P?fgSy?dSu*5!eIekGMb>_a~zwj?R0pJik7?J4)#;vE|5>E%UgoIe*R6Re=1 zuyx0dnX(hc@=VC>JVXFf2?|J1qOj61GI|shT`4XpY5t_=mpWd0TupPRCR( zEywbitLxz-N3M4iI5y|mnisS%xaWF3w6o*EydWHphu5LG7MX^(;3g4d0bBAOv%N?#bYseC79E2oc*`` zy;SuZxJ^2_4o9O9G zt*p-D9Y;qEG!)d;&(6=!+h!c4qLRRZC}kL=(mN0SJR|IN>Q1s+2ExH4{Ccy&?b8}CG3 ziFq}D`EfOetHc}T+g&>LqOYJkdnIeUIgPgC%TVE6S=nRG8!H`DR%C@Q78h+Us^rW{ zW;mv781YpSYct+E`IbUJ@1jk9FnglSruT+F##AmaX6v@+asT@DOZNMrLx+GlwiY!u zE@VElmrzz#9&AWznP>L$S@Yov?65=ks@H_osR(5u?hat}4C*5D0 zsi>$(>=wpDV>}hp^^v3Y_mCMieRzzh9-zzAt35Av{xBUK9jc@&0MMpvu4-iMXpQoh zBsMlSy(?8?YZp}WF5}o}FV7As=UVNvwzdwusN!C#{@|NGov?asnvO)|kNO0;rNKzA zzh1sPfBH1Zquod8f4;l%V&!Gec#j=W&5F@TN8Oe#wN41Wy>&!X;JZTfqlJUJFuS`gHni3Tu~3;u59^Si*cdWXj3YI zrH~xX-+80?Dcf3mbbCK zB0M2^bt;V8+y!s~Z`GD-O?&a;MG3xbrN$#!?QzQ4X8u^{BFBQUFK&l99yV0cb1P>U z1l1Rw$rS8CQX}v`&TF~+ah!x?mE6IOLP2bC)l75cw{Pmhb#Y~d_pF`Xk6)4nrrI$S zLA}>!)8w`Be}58b z5xH}RSTcv1DlU&x{BOWxj_HY90V^~$HDy%JIshEFeJ>eF(O(D8O-@eU$9`PDd6Qkg z?m}gMo(ePa7+XQx!pzKf^PUe@V~R$tS)Xac9j;*=f-ak$1$T{&y?~IsfyC?f;zgw8 zNQ3R~@%n`0n>KBl9j<=?hGN?L)rU{Zh?WE|#wzvn^##PZYOKtUNykb)HtYM=H87xa z$s!)Rk~jbRAwC?zSnc2{b0_37&@NTaC4;69o4tl^QaN77AMM(?^L|63f(ON=Z}P7~ zLd52V>kS+3h>O1mJl&Q-D)~`Ul!8OI=;cXX5|LZC-ie3u0QztGU_GH4FOwkL{81}u zn18PB9`RA&rGMdkCpao#-6ry8_9Ig8;D?fiIe#S{a)Ia$7_9}7r2#DHv8HRW7-gy|7 zmY4g5gj7D+wg=EHd*ERnR;@Cai}VpLL0w&4wXcYDZOzux;`N$Ajau7Qo!lgeA(^M$ThFV?)PHYb@} zSl~M3g8L5^5^HU1<91%>TUnSWZ*C6SzK`Na+!_M<4VSSviU?xl^5x4WvxC3R)~Cxe zioIreteS7vH8xg-Om*32@-zS%ULcukWe8eW@gtOXrmii^^c?WR6{F(G9xp+~Ha;7B z``SWhX96|nSPT^-Z_nJ}o9-DMt;{m*dCjh~9~uU+{$PCa0d#5wd@}LU4?x!pTC)!N zRru>9ZiKQ5Ono`5oMTa;f7Zb36hBc!ad!JWx!Omb!^7?snrwDCz$(HBnK^;aUMylh7x6%A(yTf(ljOtcUH!CeN=obN>j+;Ts7043 zhm7z+*Kgcl)%teCZg%jqgy5QV)I5XUA$8WaQeKH~F)ihnUpvxA62LQ+n+VjW(8G_wJfbZiZ zBQ_I|C{QL=@=V7^fc+u^&Vk?~AYH4?d>=%sGjD8v6uf73QhmJEyH)xAg2G_hr^y`a z1gYrVTHga{z)pbz`gvIwG8&SUYI7_f7OXEnM4&FMuS}Slm~`T|!a=#=-RuTUEU0Ps z#hSnx41KzJ%=`C(f_Ec%lzl$4;B9APL(~b`6jej>ME>4(gKgWl<9r{{P>_~Bf{OQz z-Rrbqsr%9I?EYQidU|?USy^NgycUB+NY03_`1c11Yu3KM zQ&y0uob3w{>u08M2VYC9QszbEX<0A(wWN<9KYCC{Dx_%>uZRh=qwo0WNpY!rxIO`S zwtn#F<0`bBx!|fAzcCGn@)A#(8!OBjFkCks*^uBsGDOw zA&#o;+2_SSPew%HbZN=E&Kr3%POZ=>1li|TB#oaMd9GD=NGL7`=>*I6P?GR0@blf56GEL3Rzp~AB+U+O!rKF_3e*JnM%&;tT zAUQdi!?-=fd2K`ur@GvRLkH^u#H5bupsAxnlz@aYtkyXl5A%?`p*s7%eyy7>0CkF- zU0X6viUw+8;&7s3x;r?V)!6S+fOy;aW}Q7Ajq0hBVD#Q^-rNERjf1)u_AK%3qT$KL zj*_u<{}#X2iBAt3FZ%lV5p*6A{T?SwR_KjEYFgU4%a>nccd=KZqM{WuN;D`B&c{gk z9F;R^JVX*(^lUCCTRA|mKXU-6n!D-dzRv@D&VjX})2Ox}q zvfxsYFLA(8*oYp%v**uE=SLM1PI#T>m~ioC@87C4s&^qw{`lIQq4z8aIh; zPOyZ^?XcM8O37{Z?3JpWo739z1I}PHFm4rStPWHK-vor7VXS73Bhn%&L@#KtCSZ|2 z-8~mpjj{vBj+I$=IF{o_^c~D1rdrqxe{(!}`c$v^BMp_);u$no*zERzy_OU|-}AUN z`ydJ&(Dpv!Glka#9G54D6H?-|^z&;=!iWbH`qkl9h2H>LDJN>DWmgi_@1b1pu$6d>sSBBSaSvTyh=@-2$OaP$Sm&{*fk^UL~S7+I-2MbbIE# zvge1jnfVV#5B;l!g9btJbs|8sX#Y?UjTP{Mvcql&kU>aV06DTHb?d_rZia9e3nb1W z(=IV&zqaGAJ}_3y_u-U_zV%wWH+O!gW|!Noj7GPw;oqx*xq^5s=_NoeoacPNV`1^0oHRkFNHcK+Bs(G^ z!d9IO&9?J?aX%M`tef&G&I}5R%>c%#_dm#D(ULRR%uwEBnV!9)1juXPak>Hi_nfpD#Q4Lx!P?? z;wyokr>3SV%=7zV-u4897YmdJa~Z$C7b9M_BIONKNyk0ABjTJ_p)h#B57Ia-3JeWB0$m@}n&@*iZLalAavqzuyUicR; zzyQ&SB{WEssWSD{BWtJIBJM^CgQk7ADTG2*fPY`nA4xgS!0@7QV{L+z*Q0}xmp8bn zscEHPyHkSw8YQG?bKuAwlmY0$gnN}d)nAOt?wm9F@u7R$>kRHp>xd7%@4#4*^_7@z zi-@38dw@hut)t`6I6s0q0x6s{YV4!d_ZpDLF#BDsCw{vnPaPc$?Dm4=e8)( z!^z6o#gMNaw;C&CLWic_YrUWRTVzez?xFZZ?ee;$rQ*(2dTx8Iu6@E$SR-t(onmwq%*|CS< zQfOEnVF=t9f^Gm3+?!kQuVSEaTO1BAC`P-@26|RMqeT7AmRim9-%;1l@C;r9C*w43 zSMKy|#JZZ8nzH(CQ%Y7V{NX1dP=OP;=`ygCfPg?5iyvCJpwnfL;vmRhvLkyJ8A(tq zqIt=}@>9Pf!?;5njDFYt{RF;SGO`A&u^9UufbiYEpYkhYE|Qjk3DEgYNXu-)IyyQ~ z_z70x%}YJntP>uMSozaY6vvg3a~V_wRp?69Y<^S)^ex z-7CstJ-+t}xFRGs&86u+ zbksID+1Nr!Ng1n}&tqj}wQYRHkXAh8El?%6T@~brX10XtSuj3A7ld56mz?d(;6V{l z(FkM+gO&_WC^#&TlKH}WP#@omhw889nhr<`Jc6P|cstIP(i6F(_ix?siNtuv=QMZO z@`{RGg!C$36UJ|U;okeb&<||CB?HAl>YPMxGSy~E9Rjanlws8S_cgecf~EcwXf#wo z#C*ZA65GsPHW;IftGL_lKpzJ!S`RKzAjXuy!GXgM5WA^ zot>S0`MTDqR20a_TTbKSAyWU&F#HZKz->8v#5S9j?PN&$!05&}!lxXt@N zpu+*mxn1&p9p!?tKxs@Pj;K-pY7xSq@snQ%eKkGvEim2+EpD2#shKu^G4X zK~R?v7k^p5j9{8ZU!*^dmN-)5@IkbOY|L1j?0Y?JG2YR2`-MRDrlO9H4iPf6c?|aJ znOa*9KrJ1G?*(xOY$+Kvzh%o7Jv4(55@6Fp_A- zcNs6Z0uC3akoLanfndJ646C&bf5=miT3DOCRK;i+-{iV%Fbijb(>VOwf zUY|mhP6(!YQTn7pv)h%*={~9@hh7bJ_0RXYRUzDd69p?Tv4lSh9PNR1v!I!Q<~Oyp zoDhm}TAjKHt@34fc=%LRN~t>CbmmuxkFvXjKny*fJ%9#%Lww!n1i&j)#WQFWfuiE9 z&-mlEY3b;80T6%?(NtUS6JwiOE~!GugwY zFOD<+fY6Ix|8AsKFcjk4BC|hnb=^TM3eM=lCofPoq;zDbEk)38h{O>Ml( zKg)MGk?-2a@bs1ac;2>0+eBFehuVKnFDzhP+(JSq6S_pK_w3#cOOQL=z4wH1$7y*e z=4^U6gnUg+>T|*#rv(H~;mp+3*1nLoMg@$Dj-D#slg(>`CM>}8U`_NMpUFa5(?%o)L`p}P@|9rWu=yNb7wAfT?|HLz+4pTrjTv`iH9E%o}rV-|{x z3)pmBL}Vw?P(^?v3-p8?cHupI6pa}+cJ>+nAWlOHXx)HW&rzQJ0t00`m!SVe;T)qn zo}RjI2-z<0wVYBKowWVr(rsJ81T^SEn5La`^ijjD*=7J-jS2x#pLsDEwj-AISbyNU9td_p4b@o>5j z+!ftDRolL!{Xar)BW>^I16oT**(FCu&qFHu7P(Llgb9#a8dncEoYBAE_ ziG0guH7bwKd?@q&ZME2cF1SU~pz^^-bPMsS+pPxQ7$ieTh=r zv?`m~lP5wA?-9zQY4?|1 z@GNN8rOGpg@Y@GgR*Kl%O8eaUukja8z7(y2Y z_%Xw%&2EEteS-jA=RK35qJ+qIh|kcZYXD&oaqp)0$iv=r|xIFJFk|e zCVXj|E4A4r_@=g!Y%G=w0>?gBUtNNn;R3uyR`Sg7eZgAQQKKC7pNCA zsHaLv)@EiIA4KHU!DQUyziCjnB4cmNt9q$%hkNp>t~A0ouJpy!(oqlhc?i#&+pj2|W8edNs1q?zy+bp_%G92DM;w@ParD$VS04o}t-;4es;cSA?H-!z9Ds*y8IP*s{LqT0C zYlX$cg_KGhjdITuQ=mV-@cB(-jzc4h2Bar?^IyM;M8?FtwP8B82hf^e^C%Sp)p>88 z2(V|o9GQr~9ilqjO;OF~+ocJicBnCh3Wqofx?kCro$l&r`oT3rSWB>FXfM@I97@3f zPz!CNnejZkp)VyazTYeB_*l@8RY_7uF86?daQa&{i;SkQa)z_dv;H$NOsM`}#ITt9 z!>NF0Q6|UlrL;I$6f%(}x<>p~DKyp;XTGdp^Uin7@~qScR2nwRVQH8$;x>jmc7Ofx zLmS-`FzeVISI|Qyoh~}$5?6hMe^+e(_8tSlx*OMbo2)LHqK=k7-*X&7mrYX_9}DaP zI$^dhr7w=dxcvI8V7weY*(rDjC$;F`{zK(;X(8V~|J$1)@h_hJ|7(W2|I!4(|Ke&O z2!1dVkBq!%HqeHGM3_xT^{wGb(uOO9gfQIz zNWKJeT)SvU#bbf>+6lfs)R1%ny%t(t-V=`yodgTO2}w9kIHeaC7bhE(j1|&f1q9qc zk}%Gja!IW$FW=$p?7VsNW}>MG_yN9Ds=tOd{PY)2`*{Paf1PP&hN;ym8`1shL{&clFet(YKEyGw3k# zI<02O1o6T}bJxHi(KKwrYP^*jIB%o#FDGXN98HJAjOUa<;X@Pfc_=u?f6HDiXAoRc z5wgB@`*sOv(V|Dk$pjqd4c~wD;U$f_Nt1^?7BPaz*pwrI^*T#&YioHH~ zPWS_iMi-T{?)&S(p9eXyYy=Lu%+wz+Fu>Gs?lXyqnAn&0c7f^)lyi1S7?mJso5xLwYp)`g%_FJh9GJg&Bv2Vj4_`HxCr~boW19)@yHasJ;Zg#~ z7_-(JLE~q2c_anaNy3BxbhikSG7DR7*cD&@@dg~@~gE{ny(FnV2 zJ5BAqk~9r6*`)0Mng#8rvz)HFg(R)>*fHje z+Z)x793&^#yHu$O-#tOlVZlpBXTkh`RG&D$>1b(9jpt5Kly86y+h*AISCXSs#u6lk zwqYo)K%)(BO|;{P8$}cU921i#`l`QRQZZ`J)ALut8~~xcNKSH-?%SsYVS{k~pig54 z<^vsP*S>wxU@CbtKX_&NZ!8V{PG=x^D2gi7H*a*+eL#M1U2Ej8%Or zz*jHej}DYM;pQjZo^Eatc(KLc&&N=n<;U11@2_ry?u8R#Es<|wT(IGJMde z!~zf&T%sd&m{zEQgfSN=Gn|F{s($=9&&?eK z;S<(n>8NK92)8lT3XMsE&wd{6%ZY8=nHPQ86f*{ zIaCNOV$h7Zt>edUq9qw8mlEc~vKj8HU-~xfnH^4$L{#KKBLMaZX{ZkZTR8%Zf7yo1ln z2)(qh`+qHNA#iUL^!=ZAxS?Y}N7O(FM;ho+6VfvMU7{8VuFd*QO;1mMj8}sZn7A>} zOsw;{^L}(4yGs9qGWOz=F$y*~^&6}g;oQSSRxudY zj60T{@Fu_vPAG6*0?V;ehD-Tbj_3Aem!uJ<3`t4v)OJm_U!U~uL45j5c+{hBziLAF z=J8ZcR@QyEBcRYgQ(QW=@W=nSCk>}jqd-hqnG$*DQp3{XB3@)nS)F@063O=`J`Hbl z6>$b>@x0*rVq|Io)LWu)fCB^9=PNZQQCQBA8R$?aQ4R`3rrcp(VYaz%PG&UHv*jMo z)$d-PLjrk?H{HK_s8S*)GvgnG8fFVZmq)LkuEPu``yW;{w8_iRaQg-_qM*A1w(l_c zc?W^wp+&$y^J10b4J1M2wz56Uz2lvbwXyJT5h1dD2I&J}j&S7fL^=jffL+)7jF8I_ zy%ul#dt`q*(7xUP*_7c0x&BH^G4-|yg;Q1g!pKELVU}!#}b&OG- zWL3u@3r#zq!Vq5TmvGg7`Z<3BQ-Rp=MW7G@dWegQ6Dk)$gyF-1w&19i%FE5|gZiqo zgd?GlV?hTCSQMBJaMaen_0Q%E!xK2d(Rb&qQf@(R4dS)FNKQ^}@cYv)piHd#-6(Ta z$omO>goz6?iIApAI}2Q*gT&4weO|wH%boRAGz6igKqi$O4m8T(4m0ojb~Jb@5ZMIj zz~4)7{WaQq2Tz>}(^0p*I@Q9H{2YT48O!s9pvuBt!EkvHZno6aRAOKa9fj#1yc10Z z-!T%1GD0>%1;c2t77T&U!^71grU>I1vt8#dAx)C3>>^U;et~@zRokq>p9|cc$WH=s zmjvuNboekg#Qn#I?FrEk*l`Jv36{fN=qBZ0rDX1#ddZmu{zepn#-NfVOn@_Y0#f2Hubh^PITz?C8N4-h_Y$bV(in3-^J6V+q=c=kI?HcRclhDFLL)-YrUSRwbZeYUC0_B{T_hPdiSN=C5Ru~~GzXOni z_5CA+)G#NW%!lVAMwwD1~Fm$ zK^IFMekS;fK*xkb5x|pxNNJcrfZv30JU`vO?<{mCi4~+pq+oB*DajO7evrKq9HXWJ z$J{E~2N(q02CF_!;|%{zOp+f%zkCnIvFI?@g3i`CTG}0th?XEAKQSl`q7OjzX;_r# zOvC;UH}2Zv%F31-f&-bM0*(|fO0VG*LU{UUXYe6uWZzp@xCp0hP>|l26BHD;Fdx8c zJwslVvAVc5i@Cwsk2r%YGGan+iyc|z zM)+w1%AFF@Kh|1SPdJ%>gB}I)nOD?tfM{G2t}h_w_t)JHVXiC;;Z*}jid0NkAqnRn zAs2ewbo|}iOwcmm=@MwYVnDHf>sDmER*cx0_kf0F(@>RQZ~IEvVLP~D0edi(N=}%+ z{LbI$hWV?wy*&&*+(T%cCX~O%QU%};VZyiq(SxB0mavQFEo1Pn1~4kr==+Wsk`ABO z0YZW^8>jjy%o&iF(K{=a7lbS#u+)2aeW}{n4B8!3HFd?wot z?%eqo!{*KO!o7QM>^#s!z4dFU*jLt|rM0VC9M=X&T&O3VWDEnu!kog41^Jcg!^dOn zK@VaO0T0{rY!yFhx^ho-=ZITNuz8p zu5ce2%iAv}O25T-=&Bk&1MYc<$v>KQoAaUoUcaywmtb&x?&|t*yfu6Gu3dC;;X*EZ z@1i0RG^9TEt`M+^u3Mi52}$b@v4J#$J}3J6E|Uu!y~7V9QwA5KeK+>c=dV)K*Es!Z zUP_sk-Q1ap7C|J0g$w7;m(4W;&mBE*z@)Uo(lP_jRLGxeP+IQwlc3K%LP8QBY97?E zyHK{n@U}0-j#sPJvZ_N5&U`G$rQc*^c;m(m#WZct>6w|^tM}WJ%7!fH`T124cI*ya zn@C8qrdp4Y_3yptyi=EwF~1>q)QaSm8BZt$pUnqA-8f(g*~N&7VNJ-ncD+6~k6?8m zA<9^B<3>1JGpKjr@g7&|rJ@6=@n$5k>pStp5E7ET2g!(UWM^53Z!FjE6W{LtRYZI% zI`Eiy>7z57w-7%HZ6%&ALgMm&`VV8vV5HK_Y+=at(0{RnkGc@7w50@9A{_;;ufIP> z08aF`Ruk<>IH>*!Ue0L#4Yy{efrwa?jI5x;Jqtk!J!^rSF2~#!pt?8|r(v`PlSZX( z^}XbF8jNtQ0~&N(XtQo?y(#mi5Iw#8>2C~nuu1O3jlcb7`tUwRGM``w`Yjk%qmFrh z%)-De}B|^fyW;VoM_L?eeU8Cj|@R1Nv&5>^wyQ8s;Xhg z%+#(Wrd5v8(M!1&L%t~Q?@;ZP8wH46e471nPwf8Pd-iChH6Nj*RBn#W0(jKJHV3E( zr{8m63=+hWPsh#bkYSuA3fwbEIa>;4Lkblx-C{@zN4&%k_TX5!!V_>=b{JVumP^^Q zXHPnYd^}I_D*_GIgTj7-6xC=Y9&-;6X}C7V>y%CBrZKdk>T+OiNkmSS1yi&`H;Y;n z;aZPDg8F=W>wV;G*O3jcx*5V57X`st7mjGKgkUs>`g8R2;QG4rn&m1`g_M|>hpPS9 zrAD(Ps1TNeKd)lUwFX+6b?KKcy0CTf*iJ`*e#F3^s*BbEMr9@4=3(gwq|V1g*6`1W zrx4c?K~k=Q3e_SzDBms&5sv|jd4~;*$3$fEh9#o(i_@!1u6^V&dFBS0EpvEQ2Jvph z2|x{rfuY>r&Lidh+qYNt9AktH`00_uha=I3Wnf}Ts?%6%Sz4J}tq$S7hbyju8l=(_ zXuVE7gdSic@HKHPJjvOGQTQ0mooOlzI7eUx^m5rt{tk_XA#|M0*OK@;a#1~o;p~!u z8vhBdnUmaR*PWMZ!{I>STAK;quvl}ZXJ(dwOe=%hTc2xfT=kkY^2^7o*h;m8*`m`b z0$uiC({(U$sbrb_St#fdmh~BMm)Aj>3wZrH7O7Ytdki5x24+H2K;t9DWS^PE7}M5NG~9u3gE=!xcup1!FOI~*oJ;0)naZZ4*Zkh+&Ljo!{~8i z*4(ya>vr3l_zBjyx)a8EXAU*U6h2;u*(Qp*LOV?lx_Pq3Wt0v$ z9+ffFgUGDKPH^b_pe*4=z-Dq~ZimW9ElM+f?8ruDOpK0O27qim97K_z=eK<^mokzt z4-jl7T7&bFK*Yk>Zy7A9BKk)#{9_-Yss&cWFjMpq4J10zWsDHfh{7xwNbO0=Qh|tNK>m;*~5g>6*mpYDy7Gl*!ec=+vyhbuH z%LPWsXzA=c20yFSn8ekqk8v#SMNG883~G#(6ZIvAeDRbD`{ao(IHxV4R663}Fl@n9 z!?5UKgt8Yc53--wpVsBQLNMSWKD5#mRl)&BM0|m!?|nQl(rf=2N5+Fp$hWYvV zeLX#dZ7pE%`(MAB2-TyzyPH_IB$Zs*^M0a`Yt5@xQUW+#wLI^&a|?hDjTG`)4pR@k zdZf_6x}M%m!;hC?I3N=z=^tQC`PX`5d5y@_>V_2&2@9>}UIYRm6AD zmX|5UCsKfPK#7$g6eZ{GIl9&k{%{-4{M|cudP`4}9W8uRWR&?QpBTPycmEc0f`r7x z-fZNg3uwBCFVYCTD39H2ECQbn)E{s5N>@oz^0aG71f0~ja~x>omT5$e6w<`O-s>BM zlwC1ok@K6&ph*%bwGO9MD^>mze3o<2j=qqU(msZv#5b9*i+*AqBe^2E))NhgqB$5r z^w8_qGJ2Sk^9x8S6FQPw0#_3gw}u zVq`wI+fxX%=hqfezPBj36(uD?xc>m^HsB23C`fX2tgKiSPhV=N`Vy$%HHeMgzP@M_ z?p$$kJgQ>gXOXG1W& zUY;LIn4O)K@=BfkZrzPOpfqH+?WCs|MeQJ8U()?~I#keE6_+6mj|085z1}xoXT0-p zV@kNH^O|MoWz%cEnyK=)+B!ZeS1*ibq8E7y=A7m+D*|{BNr(6Z;_tJViIZgV@IHE( z4KNzkzq_%gZ(smjLS1yO-|*Q^A2q~WZ7dKBadvRD14q^t3Fv~eFs4}D2H_7qJLh}X zuRnt_a+I7r4(fb7_`SQE+g;R26pAyhC0%xDcT-_69D!^t3x7A|e%JNY0YN!kXV5JU zXrefHHzAhrz}r5KX;rf|;p@;SW{dYQU$}5V1oB@k2yaRb9I+WU5{AD$L1GM1!F_?@(_85$QrCNh&4r$n9 zz)$EEqqT}O<3f2{}h*%esJv7?9+Py|**X$OZq zEV){=Dmg%U{IS|4#^9-y+s-8f525aKImUvGihloIAB-*ss<)AD$71Oxz1mMkZ9IlJ z3#e(eSd%%p*DK1)Z=%^+b!Q)Q{lS?XBqT=L2H29OCu5uVpVFHL-updqv2*!oVg3M~ z5GISfmyXA6h)MzGTyAFC(NBu}noPg8zXT2@|KQ*RXddyvMO>eZSG!S9i30~+I1$;s zK1EFp>f5cJ_uaF60Zzkhh?8iv>YZ&9K6R#F;>3OCSo zMQMV`Um6MhlKPjOV67iN-cBIemFJNwPx0Gj39JAb$3X9i1=>D3J^>%hEfEn(5s|+T zn6Y2JT*t26_MJsZzd%oa3l+8S!JJx^CmAglmt1>$d*f{GX<$KjFRw;m`(#@OT>o(5 zw{6=+DR`|C(XUM@F1`j6pdLzrVu3?8z#BvEC;Dprbb2PHJ9xxP&a&xcN+Jw!s^6g` z0sK^yMB24`FQd6w2TTDhCTm596{r^v5ZE$1Jxv?~&9r6BikI`n-E*wdUpuMg<@hE2;I6yojb zssj;+$Qv@ihw#lMK<;LsroIkG>CXwL1zyn_0Kz$7tnd2i@o=_La2bU-I65+z>+c1c zx`{=^jIal=Rm!40-T_wr77DT`C6c*ds4tbo-_CkaD^<|{+|$rfHJy}u&~5L`o$gW8?nR=nsh!w zHKYN$#=Kl+aXFT|Q&x&*O9@IAER(X?bgf-4;!hZuQhb^dZp#`3e427a_FcB)^?Bo;b66_iicpIAHF6 zi#MTTV8G(5_)?$bvymh=4~;z31VY*w!Gj6v@o~n>dH$|#Msm>mh{Zx(>2xoI-lIe$ zH!vh{-%sWP;;79;?oZ|fupfpbOVB|~LEQ4i4QgHPhol4oEX_dia-dxq7(xMyu0UbEAVY z0Q^vp-{V;kp!Z_T1&i-6nxUv3bO+|qI`|)+KYKQaED2}XYgj)RFp%A5T7J?FEunNs z?V?heno$p1fP{5Biyjl(N{wf13F)KdMoq`UA_;;c2~`S*X)K4Q5PyJ_Ac0A*e_-JG z@iu$*n8<60F&yQ-p`kdavxllrqT56VGK5)6)F&xaL|B_6&>kM4UYsKye6IfG`SRx&n>HR{i=m;>Y#iXq+@3P>V)by)%lYJ~+OTUn6#5R0;R@A|x?5=@4aqX6;Zqhb;Q-y5X-tSAMy zSrj3DK<*kwzo!laA{p*IfOK7K4SM{32^-$t-odFWjnRN$09WC41&;QOI*2WF5U?g@ zj>I#N@Whl6iV?JBcM$NBPN@mNd`cVfFPHSlzqrB#mf2% z(kVOpJ)970M?7jJ8aY=XsllvJv?8`0{||tZfCf(AFbZv_m1Oi5p;XlTL$uk2+NtvX z0Rho@d3=qc!zmqy>fp|3HsAz#PCx_@TLtk1+4U+74NbOc&1KZg;9^dO5rM}-)2)6p)=u}`+OzJr?S$r25t=)OU5w|}APEM$pfPoC6)02~u z=nmpc5Dy2vRntdv2SS1jss&z28&ewxHJKjSL_19Zncusl%bR*`yiEz=QvGDjxQ*H&#`Ja^OCqUb zQ@&MI<&XCfAyKaqkXP~n!ki-*IMmyCrOf0qFRB!jLzVQT3e6hii*(J3L;QGP4Mr&% zkq`(`PA(WTE= z1I4TG!#DF$p7GYLTW0*{y#4$l0YL_F@CogED)ZYR3W|7Gmky;I^#o9dE9euNUAFf2 z37A}LoXsKRg%ODQvRDBSOVEY4up?i^*di`Z4x4*hIhrd->{~^}FB~)|`7)ShX$ z(59Zd_#4LwLn;A6x2}5L_QTh=_NdXWp zB7O0{taxW`+Yad~w{1LmoB)%pTaEVYMczaTdq$||ZzmDm`Mum@LVwn{PJuR1er2FdaLf2SD|`)y6K7|(P-NjZ%}0U(Gm zAbreG5;b0_?6$bLEaZXK8ZNxAWE+8)VcV;RBOo156F~9018rMcT>QsAsu*M_kn7fc z6ObcFvSg$yiX^oPYu|#PPI&WOhqt&sM1Y-aRslGTn zq=_AN5Q#*k+w7+f4GV^3LLKJ3I*=&RnejeI*~B@zLC^xCzxHXl;bVNg0+Z1KN%kf7 ztkudeKpQ}55Y_FlShCHLd<=GdN=)f_yhjq^DQtqM?=_hOe-q>$Bw3It-podgW9rfw%?tL-lFfN}dzbeYNUr5{7VT10#nfNiMKk(eSmcIk9MRA=04 zGZGaf5&wRj9z7-1qP0-ZgX1AG;M46q+iO`|S$T@P<#0G$Q@af#%1Py$E{`V~xrQDpJD?PL zXJdtXO(Yr$Lf()_Bq$*SAQKxo6SjF^9w3Fc7^fHjx6u-kSSW(K@#;IzCNwwg!=Y;B zUBRh>QClw#)8O(DXedBbax?~OXCwGnwwQ2C} z&sa5@;|(!PP8a=0z~9sk@1=8nb5*pvrS;}X=iqo%kyM-AdbBZNZdUF6^ZqBu+mYXK zMq{||cou0@$AdAS&!^`B4};c9W9tN%t}C+}3#;y_S#4Xs?AKkT>vA=BTX*{Z1@ z)?K2xvl&WekXGn96 zDPbXV62;`nTltkzXd>WE=HA~!%NE-}pkwja(#og(FXyZa8AE}Vg@&qrc>ei3&A@q5 x=OTgV7QgW2#>Gb)NcE5pUkP&b+kdXe{PeuP&XZKHlRvUa#kR9e3npB-gImv5Jn4ZY}l9UkY?| z%U00QEoxn{4F9G?Wbh0AZ;8z*s?rMla#?ZdHvYWb_OzOc!L+f7IPOHAoX(2rJ!D@yuJ#lPFmvgucEX4|uZl1xPiP>MOmoTWEj^R1&xp4`-=idDXlus_XK}X#kJ{B;x z-tW=lbsUc;+!DDOe2;Z;j2%0CEa2GKiOP#-GHC{zai#zKvfBSHcHP1s=#)e@Em`=( z(cS-leXXd@we8-r0PWxoJ!@K(QS|M{3qPY^?Mn^wvJVxC5-RuORWu)Ul%2R%@I#Ll z=yj)k;d|&Zc868%7G(5(&r|eZ<9@|!1qLal5jU1Cn*WBAbvBm|l^SqGZCr9B@SMcr zeajdAW@g>?wYLVPH!S?wqxb5Pg}+6&?)LxI*J8)0Qc~5Km%pdl_cz6^i_kit^Ga>K z==6(a>vzSs<~XR@9i9KN9@Z)xE3bX}q&Cu1BYA!KdcQi8gu6V_J^=wSD>t)scZIm~ z*t9CgsThy`Xq-sz=;+{JWj(!p`}Ph7J>SL@!v`Xh-TUkYK5JKs&b@l`=1r^+W#Pt; z9affLKXmBOs+B9NO1;_beti*3Gi!Xwm(8srCFOaa`FP~}_wV@{gzb8LHf`E8Xg)MH z*1#U(qM-9tIcA^a{gU$sjov>#WbNRP)N3{WnV}jvF07|j;*__#hqyFX2FpGSN%C*0 zNMxwCjJUh|Q=V&%(@1ZGAGana8(Sn__5pbl6BFOs8R3!-AN)!$?LD^es2L9IJ1iZN z*cKz(;2v?<@cWPEF_uYc-}C&cC+Bok)!J^|;4)6H-kPqFuT*hB)J)jo4nO&x&txY#r z$gUc9)X}5<>zLzYPgGr+sp`#}H+!zH7x{?Sic99)zGhkf=Uhz|*WpJp!9o!lX(q;> zUR=oje*ZXynv_4AZU3`{Be1`>d@nzLtw^xK%9lZlsZIIr`6AQ5#DkAsK9!f3 z*IO0#x5V9TdkhT?8_kX+Xk{scxX)(cjc?hpBlh?A;yAJE%a-Z}&A%GCqQSxVN!uA2 zZK<<i!NnOL!?fy}I>3aez*w&{= z2MForyXAfeJ|0ySCRyIxtQq1mc&91dJno5rX;ZmbOQyW&?0A@-o?dOPvjbVPZ7xIi zus zyM)JDY@FI3N!I4MIy*W!nKY#uOG!&BUb&LFckkZe8d*`}#+UlNZTb1+4Mm<~A}<7w zv^p*+FE(c&PxJNb*R*g}X}@Um=5&+Kud*mT!#y=SMBQHD`$xLN9&jEwaJH`@N!8Xi z^=ICcMZnoe1r}8ejVEkpABU3n@a^p#leWCv`#X<4k31JxR$d-g;MkUVIgCc5rCump zX7{s29as3Ew=OOU%hCv!=Xv|~$B)m%^^XJ!nART7@C=rX5D{@Zubv>o-URjxcZGCCC|xL5daPRS%g-ZHVXXYUHx z^-`$hCG^%O#65nzEzPKEuWr_lA7&Ln#}sF0XKCRe`$D5ozaje0+TT_^Eb3KFPaJ zlQv-`v!}4-E3Q`uKP?Hb{i|Ha9oKRiyR#tg|7SxeN$LC#JaP$HYTjuGGAL1g(Kj8 zoZHOgs&(t??`}UlJkb@x_~hYu0v_=v%UbE`JDb^ke0;(?D+0NW9I2n(j2BfCCCk_- zqu$$kHiR|!Iw~Bgl#d=gy7?~4VL->x*_rF$!H=ISZ?0xk%CKnFd$4|fX?ku}E0lE0 zdph`gbpL47XLA8*i})3yv%_A($97X0zi+nt>2k{PhHm&OX0aEpQ})#A)x59d&bNIn z{JUTA_md-pIC!ax7A>NMqnl0%{#tD_`a``U__!*mI;0Gt zH)8cLB}*Qt)7u~ zJ@qpuspRV(9-fJ)>p~7cgD5>kjJgM2=D+cY&~Y4boS8N4+I{4R3T^P-{t0v4($dn= zN2?l4@ivlO=i$Ujd5buP(7*RNtEf#)tq-nE6#ko)y0&*22djYgN`LRPp7Md(B!}g7 zF${8hW>k!>?Pg<>(9X84`tthvkh%NJNJEv%i*;(x4b6lh%OOZ5;4DT0ZO+_R5bLoq_5I>7sY?TP!Ut@9h%SAV5SV zNhiT^sI%0F-{fPcSVXKlH+67!YM?nvEw;o-P;)E;rIwYta^=dK=?oh-?AF!QO;Ahz z7CAY8OCDvkCw>=X*YU?Q#$(BHvL9FNd+xyT)%s=n+v!kw@kzgrW%puUaNOe2$_%|& ze4pdQ39X7i!OF3k7)AE}Ps!p(0ux%M%v-b5;#K1ErU%Pin#01vI)464eE4t!^(C*G z^UM|r$p^dYu(sBR-{fXTe7f9`RIpv3_}LBRyw z{Jf7d1VG@`|EM`Ne~$$TA8HEY{VI0EsvBufJz1QX_+iJV46ok0m>3!JLMe;(Wy+sc zTtg*9e>fFo-%}go4U`Zr{`WfHsr}bf5;S5Q20lMIW)rz-^X9rxvBj=K6@rt~LzN>x zQYy=8Y7}WoNjkz=nVCitgB{qpgTup0Cr^5;S$3UZy0ts_&s@HI8TaFR_uaIk4;~9% zz$q@3c)0|PG*qiTdd0po)rzvh5x|K?gYBg|_>CS`S62^z{hNhz|Nb*TBpfxDxpnij zavTO!E?o-0cI_J0xf_s&)cO;@PR2C<8XTA zL|>~}>zk$>hYju;R6b1*{Cq`R*m+b5;ITelJq$lJT06&{G_B89zOP-&ETojt=9Z(N zs5mmxpldqZT{TfJIKR<7G*36It5{`bV`o?2ntNQyD4*fUZllJR5hqTZSoOoSAu;$Y zn>T;~=cOml7zkWSc$k0+yyt?B z$^*Ft5yUgoZ|SZ$)L9{*U$&*d{52v z#L&oSvt_y2kvQzG9mnnCU6+U(YfB$Ip#JhNtfo~fR(u@){T+BQpD)d3Aa{&&_wJMB ze%v+b=FRO`r=(hb{rZ(bVZfkowmwwsx>A_LTJpG24gHJss)8Lp8?$U5L=!jdDD!Q4 z<(T4kKz*-Q(Q|+~6p5Jkf2xC>0XUaRucI5b0{!#}F1}s!kBv@F=G$h))$eIG=WZs5 zE&NM53vCL>=zo4$o&2Btb>vHxGt$y=w-?9`-APtXn`;Gyg<*TYE!+WJ#{uEvX(g^_ z4=r#@kHvfc-0c7KuRRn3gzRDuY?aP4Uv^zA#h@bgIne_C`6YOL$s!6>GsD97_4$vW zCb2?3oXPh68UW_cwfYP%T|$ADK$rPiachB;cHAd_Wi=y@Pw6G=Pl1h!k!Q1FmWW*# z2@VeK=-V4@lrOuwH*CG z!7Y7(XW4*(#|=)+!x4{Fg)8W>0rktu%Bp=h6x+Xl4=eIw^w(@&zHXzrI1R%_Z#D zFDu6@SN0z~CZ}8BzKH8&324EtUAwXY6VuF_k4(*?;>N0{7`$vW%SNNs zKe+AE!EI8^?$nXhno-ZfA15Z|I1U-)qCv!>NWV8o0SX=lf-5mdX)Nz(Z#OFQ;Q+yX z)M%z6C-)G=Le(g6{_$I_T}j^!J|*|pUpLUq?Alz%jH{lXp0GICb{9LoXRxE(sVBle z)u3X>S{4zln#glCKN?epe9J$4P-#fiW&k}xZ3muqShaSoGC-(Z_s3^0`l#s%d&F;b zCl~Lkxw?3Hszs|1;fWhJZY(P;P4;glBzW`(2la`tbNXl3F>S!sIN1;p&-?fNC?maf z(s8OueiUxC7bhj}@2q;XPx7Ceb&umeq-_a$C*(L7t`e{I3HA>#+Q3Ny)y%oS)TrnYLZQ4o&6ff`yc^ZWT_Qy5<^)g_=J*!Ye#dtEk_b zV%e6*x8okzi+6b3z7>Sp8$NZEn49hr?e72>zLcys3|8G+={}nxe7`}*`5f+zbedc< z(1o9`hGa;ihuYy!Ni(jI03$x`@YAR2iU1>C-j5`o`y6=W^f`RBu{1kZg>!KhIJL&iQ*k>7o}q zqtkAA=vu*RZmmo?^!n_9yeSG5MS9hmHMP%AdvV5BvYmUf|HzT_g3;NTsV--;BZ10M zGR(oE?jmjWVO7yNKeM^o(m#HbqrUV2@m;&~Z>BZN&OJUT#x4`|@%8oP zQ-jB}GT?Cp^Wjw^knOSY-UmV)cZ2dVN!L+Vg>>mlSk# zbn?taL_`R;ll$3ph^orC&MzF>bE{Dbst7IIn_bq=bec8m(PJqa8G{c&G1zQI;L(KM zcD@e?yLkoJUr;8DnVc@BO)S<(X9mQW*c+ae zu49KUlf~-){HT*7lGh5v0HvvY^$9gtY784U%75u18w>Yl(W}`F5`-$2E<3l63bfTk z^n{(Kl1=L4V-mG7uSO104bhpy+)-pR**GdOs!{AVb7oQ+x04OLk5I)Gr4x8DoPg0PL-t7 z*PD#BNxGs0mXSSO3w)|?VDS0ucm$tK=h>0&D)E`Av4-xdFjTv6vXTM?E$gE~+)P69 ziuIEB^YbhH2XH*1jDR85{$^BeD=O-^b&=BxRVv!9uim8U`Ay)g;r@&^6I6VszJv^m z_SAWdYqf#0VrT7}o2%`BaAL8kZvMd?bqdv>Apcd8k)I_DB4plrp zBo4YCU?c zEJ-NvvLI+e*6n8kzVXJpU08YTg#vU?@78ZTYZ9q z!zvC<4S$z4^bHP-vyBI5x!TKf3)7AS>WD>dN?gxHa#hlnhnXKqdYD)1z^7 zX5-l{P3-^mP2KGQtCyw+3x|ZhkN;t99P+Q4o)J1c9Dgdq@Y2ISKbubQkJ|2``3B-4 zfdR>Cu|iu4_Wb!SIpe&kpT`L;f`aA~6%_?)6hXQos0%~2E)a^2`;1+GV@gy@^K56J zC2)l2w0f4ce%9DZA9h9M1&CE}$n5j0f8@EBFJHFz^u!btoMb+6MGhY`*{3_FvBwoV zUj@KR{`~pSCQ#2rbLT5pq9N+g!cn8TzZH26j*Y2ezf!1>S38Io{R zPoL)C;*t)NxTm0}_gv=bi5M?N-rnyIMEzc$-=F#vmky366Lj=Kn*m<{F4Gn|1+^Nz zhKRtBGs_wpRM9mXprfZ+cSs4(j(?|xLk228f3W+3`*c`t@b<$7`$1>XQO^Y)sf$-n zxs=jKp`tH(qk+RRNF>b|-C}YmWG;v|9ny^v^a$Kc$kQv|R#K}0Y7E=b(QKhHw_@v! z3bnb<<>IOUuoAVho}+R={@)K70!7#_Ffb5`dyHk?#5)~!0Rd%M;SnE@$@Y$p2p;Wh zBmCIW8KBN8d}`DV0h5x#LUB<223(d!x8t>od;Wbmt|N7-LavjkEv>Br7vHT3IIGGo zn5=d{aHL`uHDm40qjE&=Lt)>tYgZz8bg9`9u04Ci02pcE7OmOF@FRdSy(vAYW%VhQ zB3##Bhmr?VT1tiLREs)2m?mmmO(B>D9BXiBh)dDz`@4JI6u=%X4h|~qN6k7cq5W+u zuIIT|pepfKYNbktiI7({{;V@dO)?vbYr z%uR#Tlx^Q1i`Vy$^ep0%IiooXgUT{@#E(L}9)MbTKq)}UnA2Wcji<+dkB-U)9esAp zrqgKr*H_pwyozS$p76_8J{2ZNIsuDzpTu2aXHckEdS$BV=#Uz@PHELOHFcSnFA|Vi zRaFHnTL7nudkaAGXtN zcEXTo$+RsH1khlJWr0h!&QoJQ`*=6j0J>8g)(2@DmitwX?vhwA^`fl+xxH;im?p5j z`2s8SW8KZoJyKKoonL-^vR-8TB$3WjjcbNy#@bAwgK3~s-CD=2VWvqN{$0${-(uPynsZk0Lz! z=^|_=Us99Et0DFrw)`^(u#iYS$&uoJALq~e$A3Qb_xHz28mX4%Ej3A#%67UqjgEi1 zerR;mk3x(9S~%RK_T~_8@38mp&$hbH%{1jWBoXh6`trfv%=CIOl$u-_^yV!)cOIZx zU%p%gNdj8O?$Z(yvDiu-mox2oczB!uIZ)jbpv6jY9?gA7ah>S!$Lj+UtwY_TXrEh^ zYE*TKW(!RfH}YYZDcOx%x3W=*?%14ep5`=SGPOm50NsY~CrAFeHoq!P-n4OWXb7~- z1M`730Uv|>Ey#x8RSTgc=~!BwZhQuh8kS3yXm zXy5=8s^zQSw+Pt~o#~MUH*or0#K=ko60Ct9Dsbi3`I|RxY*7o(JaLyvPzI#?_wV1m z)e&A#_>C1p-=}R{hMlXZr4>Xx1z_M$jJrORl*s+Pj+tyf@-P5$h($(;fh~CpuAifZK0Y#XDk+7b#--e?E;s-{Y9;Yy=WLRFb59^WWV69{qrzZ#>CJxNtjBw^@@lUw>m=_g^+Fc?v%!O zo30O~#l^*WmL(7O5KES5=THTeF8E|JoIJ??VrlGYi}NPa1-=Ht+F;vNIDg z)l>by3sz=13vl|U6SrD;uw-8Z=W(C@#JQYv`;X!rbM`Eqb@a4=P`XjSfTwKOh50r;Ud zUi~n!1=`%E5-2^$0T6KrTS`k?dv)q>6nZZ7d3kwxNE^Ly`u6VIm!?BCI z)r+9uV2176W4;$ZkfuSyk65&LSu~6izJRktBgO_*y}W$=^fIq4^UK3(8?P;A$yU5^Qjv9b#F! zbSaev`4>;N+~sV+y*~nI!G-bh@sheaWn#?bF^$o-Y~CF9>C-2AyEV(i^NIn5YY`V1 zGCvNr0<~mSe~r-rm%aYLv}>7;oQ3{jp}ua>e!)NDYQcr0$Br5Q`tnc9S5Q#6l%`>a zqyyeFxSkAA0|BCZ&}Fc>d*B)YLMfuN;5OLf>S95f%ZiFl6QGF=`&8JOs9(b4U#{zW zc0d`ZMS&cyQ`IdsNZ|n3S`PCpbl>t-|K7~A_fG_*CBo#vN`3S5^9d)6k3W!=ooxce zauN`%y}v(!5N{Atfb531cQym8m=XZS=1mQ89Ssnf9lr?M*SI!XUgOo3WWY_O$fKl) zT75l5fHIbY0xpkX^JYac$+cT9ku(#R`2}1%ooJ=!-Q~WNJ$s(Tif3LxIaB%_6~Wxl z_(}if&p1^>pO%)y5A0noot{Atbb?uUlKe7WK3UG7(RJmUL9ooM1g*A(?~K^43QNi~ z(_q7DU50E|h4afDw`+59-#4x1J;u@J={>zeU)8D2x3oWwe>-i+t@XSQ-%q_=1)f%4 z+jlx@{(P9@;Ds=dg72u)sPm9=@1hwWN11)xGg8VT-#r5F8pLTasScQy39!H1l*a$t z>Q2X-+`c$3=YFZ%D>5DHMx0c3if5mTeB7c}{;BsU$JppgSN8IbGeKwbwH^iCm0EA9 zb?I2mqPR6(gPtwCR7dl3FPH7`d&fT3bm2@x-V0^GLP#S8h2rI?LbR=({4!~yTlLX30@K% z%=>5UjLdx5#ZSgquH8~L-M@!}JM7Ck2SI(?#8;IvH>vOM)MT$7Vx`^_){Kj56F%*i zrglJT`uAO}v02Ne4XWPN17?qt-e29~U9WXu{8)ULW#XiUr<H8}yvrbLsGk^ti_Bgn|Kd2wU7?d6LJgqnRuf(5eQameKo_|(nB|GyT_TEA)S*33I>%BE1ty~5j7Vd;{H^;|nTc{-$&%Nl;ml18$Gc2i$6iQDZwS}4;Xi!A^4XL`gOM`p%4>I}*;qsDV@6lf zH?;Ox3xy2zE%Uy*L~Lo+c+Jj$AlIEdVshH9zSbvoDekI~ORjpmCl*px$mp{(IBMrV zO)9;&WRVqD`HNCV=ih?eHqFwUrq{kiNn1~K-fjP;WOl8f$LMKL9&etzsdm_wZl%cC zIInnbo|lnK(gC|mYTn;qS#8GB7ouvhlHT;G?eFCdS(<~1Y%6BRCid}`#A$6_;@Gn+ z!nKd*y6F>PvGZPsOVU$rJebW;j|e=wA@k>Po~X>X*ACVFN*r7wrXX`oMJIEz@nFl~ zndFu9R6ZT43{lA=vJLbruN890JaH_`J(-(q$LD!&LlAXV<#?s`y|6@wC{Ec8W@lyU zdc%G6%EzAsaq@~ibUwZOgO;!;58J>h=?$4~4%A4So0OD9@6Das37eNFM<_pFRc5C5 zIHfejaSQ#N^dNKigzxRVfsPB;i+*AuQHC(d2gu2BS8iBnkI}YuB4RHt7Ow*~Gy+uA zPs~99b6H6*Dk=)7m0a?5+kD5Mo7N$pU7w_z1m<6S(uo6p^k-oCYXY5u^?B z!0@Mw4`RUlo3d=8{CKoEQAQww#=x*7c^=)_K}J_(w`iAmy#oR`@E@TcOA~WF-J&%X z%(<+!RU0(O^T7kvB%NF|_0aBaBjjJoP|t~H>H0YX1-yHxQdCt&=KfuYuwBkS4#C9F z`s9`f*Yf`8&sHvcDteCTn;R?n0%B(r=Y>tW%$0SMJcGCc{WJ}RO`Dz*K^gZ=KyV%( zLVr#jzN(k_0*K)|0}+6z-z0TKgjmFtYJgl=J9Iw@g2^2=cuxdQ=q*0Jz7gT!l&M(& z#_oiS&kA79b`yj8&@*E2G@ppLX5$*S@@PfFlN&ZLh^VOY*4!`G#2akT==+<}(%fd8h#mx*4NRRnUN`N-l^fgK$5ErLtG7b-DgT}0sNEJ1ZZw;XUCl$0xBE}1Vy7D20%=T z{OLjIJT+u!LI!@Lzr~srO%5tN8BclXsdKizp<%4y$O+!YjGXN3vb5Xj6^!oMk4usM zs{U{xTOg{$72xb;rpoN|tj4a01FEHZmlKBbxV-CnUWQM1&5g}w*u(*Jz~{Fu8Pa5a z&?sE09cil=^MJdNl9e5BDLGTw>QcrsmW!{K?p*yHsX=aCmgu~l{UatR9h~Bfp4{I% zJJ~F~bQ^crPmO4(wH&Lk&yClLU~Klu$jAsf;G2@!oxs+7uB?K)wXgbE(y!C{6$Un0 zxrsJ&87hNyl^gSUq<(aCuqIhgHe)T!T=Z0-XtgM-7(502$`vxLy%8yKkBd$GJ?#FzW9 z>dKWd3_BYW_HeMqw4b6Oni1R4x42HxF83)zu~lO%%_7&(z<@LBZdcLa!-@?GONxRO z8{&iL2Nd17AWS)~G}iCU&n|gC>?6<|edES+(al=kT5qRtp?9sFwY&70D0OnkVw_#6 zo^9WJ7>O(Oj`0ldz-~&Ztg*2%A4O|sT2J~itzFA3x4r$+_D%7E2-55s2#$yg8%R?6 zJ+kM}Ohdbifq_ACWn7V-yn+HPv6bTmeAwZ@LEJO#)vDUu$tN6>mOR2U4dFWKpShHM z;^X5tl`C~lJ!-#O?pvK?X<>0kun^S6$6GGjSv+4-IXH;k$}}cDu3th@G7kPB;f1K2 zu@Tb#CX>TGO$bTCbjuBTeLnN62-21UF5^}eA)>lKtF@@7{!AugqH_}u2$dm0kfhwv zCv37$wf4*`ly9qZX=gX6C8&TxQBip&(glsH-{#eyG#;Ov>;*@k*tDtv%4AP_X@_}R^$*<~`-B+>sA)58b2GYmGa+u1G2wA- zo$lZ739jl7L;FCMR5i~W#kFEA6TkPiWTj9zV6eN-O|=d6uV24DV@}7XMiE z98r}{f1L_)(_a6k^J{F&m$)Ix&WWwLCnGbYUtBwpm~MDP`Lo_>nPp)bnM=21R~D&N zzfWN(Y&7!?)Yb7F)(#k?54v=CTIgCy=UX2ghN7DM>p|M4Dt6oUv)gIW*Old7jwuhM zx9Moto=M_pxN(6n&YG@k z`FuX+zrR2Axu}#^c9~62XRQNGjJsu3UVc*lH=Q#*OcxKH>D-aUm!;!s>DWK?cZJq; z6P><3|IEN#Y_VO~mkQc7siTai-PdrYX}McAt_q+Rtc>cN3&}c~74vMWuG0EyqMcOY zdHZxx$@)`I_lYtFYFuFm3du{?eBHP_v8!jN(cIad0gYd)@A)R&PoZ+RXnApOHi~`K zEFmMII^nD%Ec%n@Dnq@jjz^r*v?6PuX`1B18O~KZjzFb{CXinBAQKkuIX2P80zWJ~VM80hQAIFJ1#Q9EEp1_p+RFJI2rMazpXUbf~TaN@|J z>0gEG=jr=Di87!Y8aO!eB2kFFFrL})1NJ5HS&<#*h8!Yb(V~Wr=T7Yxo&EiQ+$)H3 zntu6KOi(Cn^*W7mb>QVXH}`*qk)yEct4L;zg@u=eg@qWUv|)GzB(e*`^LE}uCzI>+ z@8X+on?-@Tkc%NQIFfALJ3b%X#xt2OiwNUr)j)L>o02s$2TB5Huf| zbE0o$_op{2A+@sV!Diq863GxoHk)g0Y*asX?ASkUT{IM&n|?W;k&d^+@CRfT4n!k~ z{E(BALt>f0#PGoI51E#r*$%c-NrnoDa#Wt41VW)`@Ed;ENdo(b5X40nra>N^*tLB5 z@-8N^gN}ojw%?P0W!IF!t&w_W&z?PGEI{JkjtE4g|4-MZSgRy*_3G7ZtFPB)E+gys zr~`q`Q0TIs+@Zs40fq-G!tQ{05`$?68U?F}S=dPl=(G;SzrWwMul}57x>?n77MD<@ z*`aw$>kHj~9=VCL3_E);!NzKG*cf-%$O0!q43Qt=>bM3rn$?>o^-oSta-!*YZRM`s zEPLWvX6Di06OIb_X77Kf00e0K()Vn@gbTvE%0Q7ZTaV^hcX)Op*8wU6{zJT0L~=%F zu(X^Iu1bSo3yOD|mWp0U$Pq{r36dgURJLW`|8k*(prLh=%ma)wZfk8i@6vE=MI(ro zM5qEM5P%W6sd)fQ;?|n&&ylJrdiO3CAP@vW2}>Lqj9Ql(Cf|434y_UJA4s73$q{pn zI~~|Eaj;2Z@baDldHHq1bVf@dJL!u>n z%}UkkRXne?m*6I$G|^Un^HZ(W%-8G)R)%S;rRTx<*h>qLaa>QnK5>Kf+;ayu6-*$<=;Y z$(6HNpPzUyGg2Vt}iLS z9@I?zyt9!}GD)X0wRdyrVnm{>bIyA(*N#{qZT8$ha*nEwxaS&js*B zR8I~xrNyCGsT$9`PX43Fdd&5FN)AJ$Nw@BT(ruK6KDai@%*!nH98g#@U-JK_hdLL! zs>fnJWxItx#AXcn=PO(2pv5x%Xrr>R+g$BOj@kogF98~{Pu4kESy{4SF)^l@+(8DB z-foudCV?p%mXrGby5Of=NBa+IQ>S1MFguT}oN(gjeBp|MPo|h6iWj$-{M%Ia19L|A zZt&2gH(jtgto8%-YGheQ%#3B(bj89OhG4FYh~u|!-+t&rPfj9Z4tmK(Xr+9C?!hm+ z!S#Dvb26allSm`f42GtV3WFLl3l$o=n{-%2ALBkPULtkpU%TN5);aOa;RYk*KpZ_v z51Me&Q}hYH>lZO6R@&4D`k5w zO03*h)=OU)x?N1HQESD8Qi;)A@1Jcfhqw=|r0!lF-j>w&?YTl%?J);s2UQ_E)!>?> z5DaOB0ja1OyF(gz0`~+Dm5g)&g%lMR3pUO!68Q6;3t|9Rj{0e9YeS-8rN+d>zsvNMSA$BswvIXHzcHOTMm8gYVSW@ zgNek&kumw@OPBWi&EjS?t)--dSU)|L_!gL0QH+^|Y*Y(%jI$r6wgh4)_3fqJOb1QA zl>PqmZj~+~n@_~{;Z}#XnE3d!T&jt-K15?jWKsh}1OyH5bqgFG^dV*AF8I?Q5tj9R z{CI!NiAU%%J#5YEL)rcyh0q;>t+w7+f5c%`Kd==e4bfmMGzudlBQat~evtS{=1u(O z=uC*?#Z-U5z#S4^ONf5+`Sa%;hxC@Lq}O6t)1y8ynyr%FXtru_%;f!*kAHC*Xy$JX zsOU5ma-)kbm{@aC`t|&89}3Kl2ukN`u0JcUQCXgx+OsTi<1NlM5qg>v)?8uypK`uVok{EDYOqjd6wJS6In8OCd9wHCo~*R@ z8E3szjd<(whbpCLlg_tFn!D@YZ(MXzS-4P$O^HPl`H`eiKoHEg@z?nhJS4 zd)b&hjmE{6ij;~b@UHq`db(MY=~aJR)$5DvwyK%7Y`Y@bS=l6j5xC#+sQLCBaE2R-1QzXH9z;$r^7g7^s zAQ?%dTwsp1)gfM9ql=m_-}#?&0lYx>^p6OBE@3?9x+ZBWc_H}UGx;Vqv5$15UX$tQ z2PXz^YiViOcD~=9m93KJdLEETc@rH2^v_77n$$3^DjP8Z5LAO<8{LRmIIvron79Hf zBB5jV!bBwniD{&8K1HXMI5HRfeE1s6lUHpKh57zjcK#B^IpN`d!N3L2G7Ih%{Z+7d z)#}xzK5Cq=5UwCtlu~+$uP3YPsds+9d)R2B&y#Q4gqYYkEa(u`^7QnyZmDZ~CcYe1 zv(|A+(<19MnOmY#?_AWDmwz;i{1pl42v`{M?;w;31ApC+PE=DDrXhMQ#(uV9%*H0T zZ~b<@zkn|9ZIwmh8aY-i<5mKxw%_CK+GKT+MclB~`ZIF{@ta9v74XMiy%{x?5K5Af zyV#0&Z7lL(WfcjXE3I)CBbcd*MWxiv=9gicC+|k3>vkRuMd#m-Wd-P74>q$?A9lA! zhD9(Dc@U~bfpvY^+)u_VNhBN07Wk8jdh0{M5;C5ho*=js5Da2dmk}2(2##&yMMQFR zRd6>LybHzTJ{LQ?B<)g0GeY^Y=4Av60-MG$+d_yRfkKKcODr;j+p~!aot{u}^i55pn05N*xc0Yk$O!A1dK4o1VvAZ201+fIs@u6XVU8;9+6u{+twVarTdxr zeI2GH#K@RBd~Vxj^9&B8?iK8RKKpxDEdTP?TuHC?BIZr)U@5?i#Xk-OcSg%zDzan` zY#|HxVe(3OQWF#yfiY$>OM;2)$`eC(AsL$9g>v??x)M9JVcP1i2B&HN@|kNnE%6aD zIddna-*#=!--?OFlt2fYzZcaqbsbJ!!V{%^=}4gF4@!~5#cWD*W%)aai54e+$MRM` z$8#Z@dpGBJNk`JtyXadK&Gx+b&NalF50mdZ(cOU5Bh*W8Zb6& zH`SjZO~b9FVj7)LN94${gsZWZ`1Rhd;Km3UW*urlSXg~4#jLtN?jcKogsfC`T_f;> zjbZ4(tB$Q6kmk(|hpAMGj1LM!%}f1q68gkQq7L>FnIncNPqGyNLniGdk7(f#0ttpv zMeuLr{ozV70V8$h%t!nz5{^OuDYj`QNYL^rmU0p(Y&RKgN8|#OlM+)e!fTJmi#*eQ zxFBGBSe?qfH~#*c$Q01zgAs39gtSG^fcsny$!s9drB3!C;yqbWH)bV<6FeJb{=Zgt$1*-a;nxCQ{tB(#%tPvp zSALtX+>0P_FHjQ-2OFCNmNG(b_XFKo+{Q1E!E%sJk}$(=Bl$FwW|BT2x!QxMueEPSK?c)^ zMm5qlH>--_PvdU6c~Y!JL6rl88AwC!h=fT&w38H~BB^e?GD~VzGK3i0MnZsaG4xM0 zfyAcc^7}L^J3Db=$P_*ZvrfM~Dk9FA@GjDeIr4NBcoC*?;`j#&AiwM^7Z};j%*>tB z%9GQYNOU!5NN@-0K+;Tpm_j=ule|YPKgWZ}cVpt#G-8mPL_tDMkj4_R@T6&&(nvLH zc!P*^xV0g?S!)zeBjPKf4-ND zv0i+4_mPrF8yS-$$e$`?(|K1WM5O~=Q>fa~ zvo824J?YIBamlaJN9V!5QWDA%^d3KK7IN+h`dKXUPIgW9D5-?=T)TdK1eB=PPtzhs zwT%>FBsGB_nGct6jsfvSKJd2+74l-6o6jXI9rPf&pn|?AD3fG+OnNyD^>lh(ZPevAeyI)JI@k zz30wKejafr6}LL$NYnF}wQJY4duOiYoLILqjKcPM@keVb5%Ii)UbXOqdmj!R+oiGf zgJD71vjR3{ExLne1}~kx%6T;8ScvDq#Sg>G@mXvfI&*CtWjwKtYERzrB@Ac|+F3TY z&(yO4uaJ>M%vJTJX(Mur3Nidoe?n~j zh0=L!{u3+vAO5wq@y~^ePBm*YV3tcxcu_jFcFaqGD@@XN1eyFN7!^hPZaD9XK}S{6 zRxlSD%gutkp~3sd&k*4hR15J}P*EYV-aZI73g^$C_Z?*5QX%7$PM`@);i4ehs8<+g z7d+!!mo>hvKK1V8A2A|So_og0^TXEZkL@!SyC!o_3Fq)jHKYF{o6rrZwQ7|~ z>J@Z=v@5^AN%hT+7mJn|nH}@@;1#(gz#ZnM@gZm7CHM9eTwT25;CT-K&e|*+LkPe{ z@<45&kVax4!;;~9D4^`9rGOSDz!M}y0|A#{BPtE+9D;HZQjRxo-6Gk+`{{_Bj{M9S z5c1P?o6skR3jv7}(gBP{q1xwYlcALZTfN9WM|nNobQ{M!U3?%M2~IXKIZ1NpBnJcx z#}7vu4~E1cNm&gayx({RT zqr1wKV|Qb+S_ugQl|-!=Yy_dQ|3aK(6cx)M4WTCt{%K149jF>`8#@mCC$(O9_#vf- zM9tT)SH)ld>^|p8cq~9_-RKl%42)4$Nj)d;3Jr%^4Maf_y}%~DIM<*KbERbb;dr_x z=10g6M>qn+!30nfgC`AGtE7hE2`NuqDnxjQoWn#$N715)!ygu({=eW%lEel4jICXX z`EYa`+plkylJkHtaY-xd63(3H4D?0g!3Zn)3AAwZQxh^BD=XW8;7(+8bhLDyfzi=F zg40nlnHr0sYD@ z2G_=O_k(r6%dveU5vgco_Lz7-$nYRfOG z(u9_7^7~s6+PpH3r{IS#Ch2JIssb~#1|bGn;AlWOS#&^oKq+4*U}06HfGJeuvxt~Z zi2-K8!8Cz5|3sSTf`G^O$@nwjZbX1E4>a2OUpL*~oPi^ERDhYtaZnUxsSOx=T~HWJ z&A7k|;Q-2vAoUX=^8XiFlb;&x=WT5J{|?v+BeE8Dy+`N6M~|KXnvFH(I%inqO&GvT zE(d~C2!6sgk$ZHboMvmUmP>;>635u9lo+@?B;`vIAbtM@zI^@~7l26%3e5p{_D>7e z&a`?h?-nBhkbN;LHB|{+l$_Or$E;+oOK1m#oYwiB??dm9Zy z>QL}NS@(czl5-Iz-RB18jG@Sr>6A1~@<_RcUHjd8pSIYWigGcTkvi*F7-W+M?L8)9#kf$a;?{0wJE>QTf; z(EqXi%5a_!q@lRC7cn$uQoEnPF$53p+_^($@xxxFi*RLTW_APP)ZkbNpO6r8mJvaX zzP;g*k+C2;s4<*m70&)%FWCso+}Gcq9UvSuA@;=!IU0!t0^E>8Xkf+NA2D+IcbP?? zsF1O9$R0H)(#lv!--CbW9|5Dmxq4)gL42^yo!SMBA90gdOv~e;{=rBjsYp(uL6V&? zDJjN26sl<00AwqW=@fEU47FpW7ctc$11+lI{KgJvV5*4JNvJl&JHSDCU-ri(RCg4`bqF|gVv*I_MSxLoNDY!s3mP-(d*JaK6LHa2zo|p>Di;b;?h2T0jl4B zslHzTEa<>}BPuq3Th(Q?{2tlv&$9N;o?8pJ!0Ob$z~-D0lt2HpR`{z`1&<0E{}t}( zWd4lF(*4i=y5!$I|M4Yr$*juF^lxkff@OkQyWXkXt9Qe>dgMeQ*bCbBOjxdD;Dg_3 zxO>^%HPK9eCTVum`4mbIi+^o|wmE@~4-^`Mr-q0C~)zn*YQC@thDDmOPb5}XL7(Kb;DoF@(|^g6r#CS??h zg!BrqG;(?ZAPsT1N%BKd9drpg-9HXAjsk)|8}h?GXP+O09o2s(6S2sla;cCwD*7A_ zm|&VPDhT-FjDE2t$Hbut^pV&GIR`3AbcRY06igdzUeO*LH{eYnX*hfY$PT(`plyS; zLl34Ql$(${Ak$>NPoBiWhc-b<`2I@_&0^qLl0X44npB%Ea^glM<9uS>~s6d>Hh znH%{izFy$NBDz1`hR0@d*hc8OeIWja@#CExB>0SZP2z{)Gmr~-*_4SH$!Aa(kgouX zNqpyYQvCe7c|uAj!;Vpy0SLe4XfBmRTa}~^(NnAO@%}MofH3Ji^-S-I~P}1)O;?a4PI2=oYIAq z^bwktGs&iaou>f#baZv8#>kw09(u$sVLAVj&*lrLb}b4!Ia3RV#gtW4_`)m2TO8wuu_tz*?Q4cM-=GyjOKXKRYsekk9^V~E_qjoD3Uwk>uGNsJuU`b&?F(X}~ zK+!0lZPxZz}$77F|%SI2b4(q|p6QA2CRL&lzh;N#bN2GW1 zhHo{|l({4Fqqq6MjBcL+vt`73-p3T`1BX--u^gJg{pbsg3Y(R(S<{>Nu1~OK&ALfm z9~rTzKU8rnMO)W4Ft$%)LO?A?l~dqCUd!Tr9X74C%S?v`jO~Sej2a&4NGxsm-em3e z=DP{=gzfdBtL0hr8LPAB*0C>C}MzbvRJbifV1+!Avsw0B)z4CUlHb_ILA&K=NH~fTR4-+ zW9yAagF7B0lLU5R2PfI2+||W}j44B3RndHk1`0@paNn_}obl)RtriVP>ctZEq}raa z2q zA3ma}s4mexN*>k8>e$zu6YPnJdRk3RFd@e-fW6k;Sh<;;Cn^~XVbmC>Mopri+M$w@ zAx3iS6Bq*7^)i*$52ryUys)pXq4 ztSuwIcRl^eLk7IFI(5bAIyAl+HVU_D6V~FK@yazvAwfZ-PNNua#en5LbD}W!ZxAJ+Pg)TxOTc~qercxFvC|Vet5LP*FB7Bj;T3TAgWclhDIpY;;ODn=$ z@8ZP~JSJ0|WJqRx-G&0&N-%lQG>R-jY`nB=QcvI4x=OPn4P3MD=>hT)MgKfyQBv;R z)760tgs*{qX;JNoVw|LOhNh&U;dCzl7F}80n2UV^@fH5D0yID8X~zJkY4lyv*XPK6 z8@BTKq8&2Q!Xb4xrDg7OiX=nd<+O7N_Xz z*QwQi90&y7rYcBC+;Y)u+!5c(rTl+X_vT?a=V9M)gD}=HqY%kbqzzFd5m~09ebYK< zFD=@4%P51$RaZ^gRoYZaX)hz8nij3vg-Ru69!ciy7JLn+O#C`;^(Jzon5_c3oGu^UH7Zq$Rz+J9$ZTULr z9lhB^zwX>{)=h^hpHfByK+!z3(Y5|uV&|V)KR;?>5=W6u(7^)TP>Wj&*QmO#(@_ZY zA|fKZIlcumhC`QBx#XUFSP~e_9-=*!9-%j&K9~YEDF3x=Pn$8EptZ}SX`2#_4kmBg z6AHqoA88x@#_@U<>)^W11AWLWStY2c z()H?Fl~!Kr6Uwwq&eIeF*}TCc`Pq#HC*Ns?{uGz*`?|wlT5ocHhm@JGt&LmTldNuG z!(iVf^H0rn)i-D3y=*q*y6h&KUgasX&|Ghep8hpe0y|lZ_X^r6Rd8Lei1WT4mU|+! zjI%_w%S!Q%lI&ukQ(LPFH|Z%SY`M13c(vd#cE+5yoi^#4sN)*-M zP3M17SVK2Le(|1diBXereM0L+?amiCZ>c}`Q&B@|43COlXOEzi)y(`}zO3DPZS2uz zzx66OtxgJc`8hFbtAXwC?P7^9jNu-e1L9hnIQjiN)j3yuVU(PA_bZOEnG!u5`Qjn- zz2u=WvD^ZqtGV7Ml$L}W$dvx=`%+`-H{8p?HR+QJf_KgQuqfQ1-F1F=^y{xb8A)DZ zu{sbS^OLqjx9fjA0Wqaxx4vlsSOlvs2JhlaI~A1M#v5ioxFcKCso-(?rEiVvg<~Qe zIc4J!ybp^frVf~1%yyi&n|{OH@h+NmF#ALD`myiIEag8S!fl%#+0)|q)|(`jsN4bA z^H5k85gPDw3E_sKkQV%k^M{n@h{qrSHD$Q~ybj<-weuck2~~7vz{5nGKN~lg3z|Q1 zNz?dVee4ZEr)CVCfw+~hurM5&9lS1`fksp<;WA1<+c!&lQjjJ&t#M#O0S&gezF;~U zFi#Iabs3}}l7WO{>+h^dqPfanm)G8qYdO=5gho)ya5r=;a9I-?QG-;Z~aG@w+~X^n+CH5sM_-i^w6q3 zL1l)|&nKuQB9t!~jXw|no!kbnRV ztviHzm_X(L^e2E6aFo^y)RXYu!Uaor?+D%S^&wr*gd$T46ga2=;hQ&Z_<^H_jw2S} zu?)i^vwc2rj97pKVp6OLDfyQLYVbX3VXNeXH6te+6}nfnfW%gfNbzpbsWX8BPu zfEA;P4zbsBD)vXx&<9|ZC@DfqpHlD?5sxw1 zU;AvKoMir%{B3(H_`fM_)GxxKFM3MvEBMd(d1ZAd*mxF-pAV{ErS56?d;`?5zZJ zftU?o3OOUl{D2P!g@oj=mJ?I+Gc!q%K%&v@(j+|vr%BtAEE9nFh8rvXJE?#W0t~G< zMgTrz!z*O#kcuC+0jh5ib6g8`PyD$FAk1~3OAH=1kXjvk`~~8J@jXQ>Y_9bA2n)bk$hL-Z}dms;OOl~yGy(sd*(m%kdfnD3P*IlGo-A5U-Me|nq&>9e*gw7XC zc5D~s==Er*wa74o^8}8~nz_sOho`0rlRFLtu_B5rVy96x*Cmu;VVmJqkGJ%@$DrNq zhVqAOCpfARg%#goh{~JZ5%?2eeA~N`>561&ndp7n^S|81%boS6AS!}_Yp@OcLPL`( z4osW?_&wY@lbgFAV7NR^M#}D@5DJ{H;w4?kxddTAnY79%fGByAf*FZN0QV9NcXBuB z3Wz=@Am}T^0^t9d>BN47c9FFi8m%dqg|MKY+WIZsZk2!r*=xXLyCH~uRyGUGzl>7I z=!{Z-R_EdGS7mivW^WsW9pKI5Y#rRe|Df>M3`-yURnj!;gVL(;HRWZ|Fc2L3$%s#T z56uWUqY=IaSfPjWI*0~9e;dJ`(_3MDMxPK1VI9CAU_($3>S3S)j)-K}uI+!Bi<$uu zhNqZZKF*^b6R~^6OEOUSk$IBBR6c$3;ie49e^`Z>*RNlf_PBt226;|nP-brrK zofJr^+aP4Vk?RD&)lbv<)c)7{{C|3tKG*5T_C=PS55n${v*b~%L3yJT{_P7H+}rNU zxWS342bhk3h#o-8j9`{z;{r3A0e6{>=iP6%E<`9EcjQZ6JfP> zdo~1N_&C7s!B#2_eF$+Hy|qSHuHPC+p2+(m^5e2)_J9AP&<^`7`Ii8lk=Vwh^&&Q( zN|PRWSHBh}ulXK+r!@4xQX16E zl!r?2OA~~MaX1m^!JO0ky1Hnpjxm(8M1Z5Lv_pPd>3`U{A@NbQwoZwh8OMOFN_+zF z-Qy?WAFi--hdljH(jC%0_BOHS`L6s&sQYE4+ zS4E!+5(?Tys$J9Vz@|;hgNDaur*{Z|WZjRK=%e}V*NT#i`t;N?LuH==^*%Q1TC)$u zCpdf?%=7Od+;mZJ1xwn>uRpzB;x3WzsvLOUHm01p5{--Hm8I%*ST)Q2OMN1#qMi)V zGL7)SIcw!R3Toyq_;-%&m3yvSi($b@P@6r>EU-*spT$fq-&H+L`TBUQge|We-Q%!O z{cnrpA-6j39*~t89}8xt`5*wBb_Q&8wc@ZNBSdSwK4_~5L)1yQ@MRgM$ zB+aE^5zOz)Ng`<)j&EZW^c2WP)m-7yJ!!G;B+q?6{~n8+A?*RYGd5m|2_#S}<2+0j z4BD^wo|;&O#L-1W2D3^n5sNb$yDhzbY+j|3)q%O+f4aQOI0+!{?l9SjJz}0^5c|(O3k||cdlA>o&C+d=_jEe2azvg|KZiKYdwQ+_M)wWB>X;Vx?P0=j+n2+LDge-F@o`7|Q)}qv5%LE)x->EOC|V#yDKWh9li&~E zn-@7A}ciIZ(Z#``lZ~Ts8QgKQ z8Jq07?VWDfO^+_#uJfydqG8~nuDm|eUgh{d*Dgxy+3aB_usfESpfh*#P;EqYbd$WS zUF~1L!AjSGN*J4EHdpY zHQZ&~bsW9GYoDKodvp}GdCqa@E}i4cZ4#bx;;7h`H7D(lj#Q{m+$^#aUznch^D%zL zU2(lb#nr><=N!823l6-G^Bb~YM7@aJ&pOY)uJQSv1rkix)|2Z)MW+lks$JLLx|iKu zw!P$__~m`8Olp?eiCc!9G>x`g9#GK9)<5vOlWI(O|*F#U^IN)}}mVQSR#@ z+4nqKNX<=YdYZ#g=eAr_HlIXW)N7k9fgk2K@UW(Dt4%DJ>d3wG#W&|Bm!LG*I* z2Rl^PFDTVZXuUmlv+alUVP-D{^7-!SBhzjM1<7(cylq`u&kDc$c&6a) z2;Zbtm5v^Fn*U#h3Ms`&hYD?KL|!y*IJd|1*3I;~uC@S=^;<{Flq-Bnx;{h}Ta16v z80)n&D$ov07_-nBXnEuvePqw@Scgb6mMd26;Lvu}nIF7|)@1pGY~7#Ub!2SJL8)y& zt6#%#-=2<%stk|(Ib}?}fT@`MX~S1zO3WEc7zv6TFC!%jx|OD~A~v+e=7o*(?x_b; zl+)B>kus6MKVU1Ae>?`X%1inoK$7PPs((DEwxo3RMnvs;$Ezvpbhm(fH0FI-tc?L8bU za^G%Xko}^i@ZQFZ-7TY^xa4HS4=(fLzVe9wW!YsLv->Us{S(>lVR6N+@_DL0mhou? zSz=rI+FT6U+N+gyINRo0!GSDf%v@h^)E@@Ju~ zcZ=S-a5ffB&qD_wUlp>UK6@RUJcI_B%CE?BGKiq3G=VGy{TPYb$v&}S^DzpJg+eUv z$>!^3m`IYgu&8Lhfq{QPNNLh*aof1EaE9>ZC5+U?9!`(%rJdLppwsHEo6;WOew|z0 zY^=iR%6zm6&rkdL`5O5gk0@5$vn$foCGrp-uTS&#q3aG(ynLcBYBk+|h{>#seRDXn zq{O`;`P$j;hQ@oBCjBSE6*WVzYpz-oExhevY>&I9EO$cszr`DF2O-ET-k3rpN zd9c*HU@~bDpP&cVsijJP3#z``T2c>#FM5soLqN4lfsITlUM(vO`A|BeGoetkw!IQI0;{6Cbrha!aJ`*x;aC zoAqC6#)IY#a>+v+F47m4M1DSV=IjIZd5(2q)xCSI$$Ta7Fz0jd##aVP)|^9{HpScc+MW$2WVUMjw#Vtw(&Hjs zbp~CJ`uMfym6tA6v9P!>C#XBXFtk3EtucB;&bPuk32yoHTDc>GefYx%Bq9R+3_+tg*06#r;HwOveCBx^EPlKF1I3w^$_m~!PWf*pA} z4Q5wcCLDjuP%lV+*Tq`m&lzjwQax?K$LHUbp?F&G`ShDJ%6Sz=@xB3TV{@BX!aD5s z$xp3oo!B2P)YX!B=v3&Bd#^~PjP^&yyBDZ9EM+-Y3b9=x+JEw1qI{ypkxWOhDP@(k zpFMNNwp1|V1#E_h6VHP%#rEBc6+~x48%CMW6bc7LE&={%e5zH|b$BwG5~&&!5lL5k zqf3kitZU#bjFCXaA$C40CJewj1|)Gyqf%5r7B=Z(%`pFy5e07*DFunFM8?$OV6fm6 zw_d(~=mcDTaf)Y-^j7sOnuoyekk0au1n}BxJR<s?5EsR4L5 zD<>lKNw^gUQFnU1ZZ(Zk5DtXgXlsl6L?04EO1rhBzZTl@nD>zQM8i4l#v!7M&xZ01Np2LN>l}yvrZX#P(M%T*I}kY60||} z)ouF1B)tMQb~M`hAg1RG!;R9o7mWgGpG?4&I8#y)E(BBX%frsWU%7tCw|^kFo-#1j zOZ0T3N7z}x`MLGV1z|SJbwa-&NC*%!X$z4a58}xOL^eK5GtLZA)gr|$fS4$#1U&1< zZvWf2H)hnIWuQeNIdaz!v|EH(0%~;12CYn-_c$OK6%CEp1?wHd52f54Hf6HTu>?Xz zl0ovq@J$?t#}7h!pc=n2rzq_odIr9I`xn46=lWJ|Y$N(UIk02O88@kNGU?k9x z!dI*-SlM6(QmtOt!PL+?*+L-0_uyK9L8!~etl8&}Cf@nubQ@;z3FUoOa)ZsL_E`WB zA0#qLKtCI*_OcfvK*j?o#Rz)#VqE`}^9>ywh|Bl;h6AGD_x*Ch2A4c@y_o4azGoh9 z0tRPr?yUT!`aw6lBb(vnOLHWKb~>fIkS6|=K=iFM2Ks&u%a<)vR8hHF@fp1#f3le` zcjO)SlTj@xB`u%`RCliHU*urcW*DzD5W-{&NZHZm^6G-x!)1ecZJ*6!|0eRQql_BtpTU3?wtoxl)`mR+lcU_ORxV7E$%9Y|XKPI?5 z_KvFT%@yM1jn!>B-2FDFBdqX=TYcW>_+r4B59;F=C%zqYE(j3EFcJ3amO`*y__!x< z2IY>J^}E`~=hiFg+*|vG?F^}TCY7uA8a~V_9(len`B78H9E4pT~lX}M&E?=HJ$oZIU$WT1_oH)jUE55n<*>sOEC?D(A ziAKu_`9JH05KHFTDz4WSd`48(AhLeXsv0kc94m@W71VMl2$A~p#JyvI4n<>r+b~jF zU3DkZ?jbXyuKR1KpA{%@#!GR<=2lPSQ5{ThQWUz!N{cY@~X>f4^E(Ba&{)kiuqCxV`QlXst zN**!QaS-7EzdQ-dH2%CMxQjs!MmTQK_+hO>6 z45@8NCc?fDC@O&Y*-$4i6f}z+m$d4+l)HQYY-pl$RMlcu*i`BuMC;$iQd6hLC%8}r z;BfCcDcQ3r8hk}zVO)H1pD$owV$16oUURXF44JSk)_a3fHD!~R7_7R(Q#37_?0PCO zIx(xG!|PW*iN8{tWc_@V1-6y!l7M|PA^n3)Y`=7kKz@rX(TrhM3qPzKH`mLIL;d%+u#z(QPurMR~u@wWD+Xuh+&B zJtFScJ?Yu1FxP9djFQiiLLYrbb+?L|T9T1FLq$PhLqd9|__FghmwA}e4>O7E(b(z4Nm8; zGYlvhsd%$b$kOCuxUD;RyERMQfAqKKFZ(09DZ4#g&!y|3az|c4jX^dK&kDw2_qBVD zN1RUI!>%QIv#HO&_Ks@rC-03FW?I8K86ramgqY{vww7w&c9^!#Im;8+>lXY%P^e9= z#WR9ssxI@qMUv4PxRF+_tJ3gx3$W0`Dm$Nb_+5y6bcs{-#4BI;ngivg{y5&ReFg?Z zr8f)}XOTn!y_Ia~zADZU6{hJWJ5De?;}TN)kHyOi#TKM$^D{daI=r+r_%YHpWUVLO z?ZcN{$^)+yx$?V=I#!vLWOsBh!*)4Y`lgqaif6onWOiPtWq3f{Y2w|Z&FptGGxM-wo{r%N$SX+3WbrF%P8K?~)-kS};vpSfRVU*zGhM?f zN-LEAROZw2hoJgYV!qge_@Os<&P#>Xi!p2VW<8#0F8gQ|YhLg-6cSCw!7+t4Hl?FH z{Zr-LH~dEpE+WD{aP2GJ2Q4eM#eI&CFY^~P6LD&F38_y@_A9FMdp@PqA$I>!fBl4` zUj0yDk6)j7YiUr3TTj=g;e-7aV;q|+-gPkh9aN{>i%XKnIV81SYVRpndhLcnOy#lo z@_H!^$=dA-s8ebn3JaLV7EHf|p7SE$l6S}y{e_eX%ELHX6sQ#NQh3?*OEihMyonu+SRZq6|vXVPHl+gN4{#1MfR*_hcZvQ&p6Y-@oYFsb|Z`l zfrE~XJU&qXNVlO%qrm}?@+cWx=4@T+szRd!$w5W7E8;uh6lAuZHGDXxR z#XmXC%l%#t-D$(nq8JL2$tq-VO&dRU%?u;=xX5)!qyTejIf6iPbE}S@36YDz_qhwQ z7)7%x#|T4Kh>{~+2hXD+yJfLu&dq*CB7CFDQF!evu8N zs6Nb)@=+Oo@n&Yaf2IdA+hiM$uhrSPCP-)b^XC5;dtG#D-l0I0+=>((19fT*JY!+* zkiJ$?>^4Lh$Wq~j7#1|%{Xymt8iq_T1@aiubKP-2sN^oG<1Htt)(v zj4K{le^Rf*ou~jS7OsG|yS%AO!3(Bv9PsqylB7Ri_wk!5L{e2#=i+NDpx6`uHsf2j zZtVr%JK(B|IFzm#%8`KX-X^_zXuT-(w4k2`y7j8fNI7^9-%h3J;HFJ?OVrt%b}f;D zuiezj!(+uSy-Lo>Rr7-mALf|OPrv$8M)p%bQ2}PCO6y}4W1on2BR{!I(M-P&BHk$H85`Ny=kex-$liXr)NC?gC->96cDw)D zSa@1V+a=)cX6;2w`ESLT>tt&ivd+tl?g{#2Ts!|BJ3l|~uYU<`6N^6|d8lu5v&;#r z7u{$nRF8E{3r(a{vJZV|9SlDlM zugd8pY3sh0YY%JklQwNC8Ets+zHx0E|60+FaZdSOj~@>X*C)BPjI^Y-zkL(3Xt7N| z^31%LD(|Y9$h%Ke6@L4&#B7=WvKfDMrJs8q1gfgwomLoYq;MR z?wS|R+ZN>`8JAZ-&EA?ca8tryNXFZam%CEIB1M|D&8viYmQk#do!k0Gpre;t;J$UM z_np<yI98!A&xGw7p%f{)*>21E1 z=gS!?WofK1mMzo$UO_RU=0K`-{&ROu+5Jrpj#t%N_Z2l)ZfuO6JhQF2H&{S8-c|hb zf%!F}$s@X1JOUqT0&*NubxvQrC>$6Ser%FQ{|^UV-m2)kn|yCrNe!$ha|l&mCGkse zYA4fuv{;c@aQPi?fKi*NURjo1L)JN!8~tBe%6ZkSZ^xBqVVJ=!haSgr%To4kwck%W zo^xTI#k<`m@+@Lb&M8CRh>-|S=NhXd6?-`Yi8WCVtO6Lya#PJuCz=KK9!b@Z>EhyO zbnL(V=!hRzh4U8w=gsLZe;kesDG^vy`RRz)6ZwetkDrft$*hZR;1|9>-ky7F!HN~N zT^DMSic+5ju~j|o3w-umHpM!+7iPXYx2ATclskuQR*TWPb%wbz$kl%j-fTsCUd7xV z7mJrl%&tIB%jAuJwe~(5bYHh#dsu{p#rXOOHLXJ-yW*Sr)Lc)L^$#3>+W@C2X@X%> z5{dOV3CVk$XT3Q_S0~)$Vkz+f&&u|07t1-;u_e=w&!p^jSjckcRq+Scz%tbg(aO%I z4PVb678d5fyo+I`We!KIjxV_I=n|Bvi5tRxFy?<@^l1TeUqv3c)Mc6$-4^Bj^RiFu>xdLqo10$4Kkc73v~KDmD_P zAO*@8Y8Z;x$VbG&{F52m$oq?vo(%Fq;wysdUJ+GrSqrnW2yEoh2{qi&)6-2^-#j! zhYDoO)&|(h_onYh*hDQ< z-}jLT6AK}%GoXpt{6b8}%|RFof012-K>%g^Ab3g*xio2TR`bQ=VHyLVHqvjP^Y3ZO zNJfJ}>Xg2{#uDG3{3r44xt}f_nEI@Y&-(;odP$!mKZ6pAq^=ZL2pD4+xyijyk;4-= z6@@qX{^fBlW`p)jX@cizW8gOw96+XSX-a&?E3!juFG!2>G9@U!70~XLFv}#Q!uE$D<-pLCNQ)?MQX(%@U zgPEp>lRZe7JFM%TCh&b7dVffD0vLAElC)TNGXjB8iWbC8vdc#jEUBvUdy@a z0FJ1mv~dbOfXR{gEN@fFE@pt21_kLm8)LuYQS6QjSXq6-f}g8&`M*#dqmKMFsSF+Ly4F1AHT z4Q1Iq*MUgsbFUUR-`$yo}9 z@Irf$+5}r)9pxWGK;$@1VG+;}QAR4M(hGOkA|Y@JH5(%em?vfN;CBq)F@kg+R+cn4 zom=di&W$4^g7V!!QE8Ia27%{5wrCVMA~Bp#iepEjvS$>w$EFYHQ&<)C@Aw^5UsAh_ zprZr5zafy6L~ByZCAj|^X2w>_e=KePKaW2oAt_siuto}}i;9Zk>-P*h=#dZA0P;G{ za2|BmhTcdS88-8ma!>>V9}iFTAyjMTe{MPPXE;^cjL*$B6`09Niq~u2-nGyI_2{^+ zM&1uV3Q|ZR6)UQ)y+W*O9myWx2*`eWQ=H}-LY_IX!Rq*f0oH0&MOgzg=MC&egWf@#Q$c$aO~Q*W%Nnv`$J**fA8xp35kzmdmme5 zXbtS_lQ-J`^-Zya-wyt}JfJ~)_~D%Whc2iY!3AB$IfrHUqQN!)T=p!JOIg49cv&WY z`agZ`{VlkbrSjOzUw3}{7M~7X{Prcw!6W~JuUEcm{(;4g=KatfU*;u6ry!7ckQ;Zz z1z65$pFSNySQaIy2``aCCrBU}?$&o!dx`u-FpkUYVyCD~1o;DRgO?2}ndGxQFC)FU zO<=bq_6E2%t}QaBQ?x^ESGK3za+X}umd-|cT=DXfWzf_BlGZWeD|ql)FyWvQ-scTa z$3jWm4UC=@NRM7Phv#i<(+Qhw)h>9;o*<}6gIeK{pRV9^al`IxCe*3#p+{aSxFnK=U%u5 z!MN!M#6l~L-Z@{4PwNIwhQD?-pUY@5)HgKb@O){TwT#8o2GTktc3kyS}pf2g#$N zL5U@~s>(vh#JB}nK94l{>!~Nl8y7W6ntS1nE0m+8Z$j>Slz&Js>R%JbqMtOc02x9} z;&R|QqF8W>oIS!ac^fnZMd-sYFT=p&&Yzif0lXlILwZ)L4(B&bvw(i_z%3sw0d^FP z_y_4X&e>kS|Ndgf60n0RLA@ON@_c-Js{`Za>hBxM4 zpoNU3Md`9Nm~AAjgt%>8WE6Z|x>LoX;+>6MH+la>+Z-W~O{(*`80}Tut_(lYm((_cX_c|7cN-RuV zgypsE`J5KYA;VN)afIdD9hfR{{{mf_*{cVq$5Fc=HxTKtokLPPa2w;Kr+g;JC}MJ2 zECSGT7#ka>XC+0@O3U4@7GnKujm(J?H8cjbTjORhElUp4Bh+0LC)wjAi*UH=r~c(c%0%cPbM7DSr?-02xh!acNgSA-W|F zVbi4Iz>KxeV_jjg43KGCvA^R`yrLiqKoa?zvA;4=idKl9ODMHl8nT{61pzJ{V>6hQ zt_Dv(cq$Du3ko0QWUJtQ(lOoLNU^vl=D#uL4nhapn&m?9j3LiUi^E~MnG*} z8+m*=tR8YSa^8J3r)_q-plu^Qdsi#+IwJx7Qa;eW-un+};8pF|gjG%pJrRiik!%!= zl)4^N{h`xj(m~r~3qqDW2b6OQlyewOq@$-8B5YBnzIEF46qa^jk6)}GZ~Y3V0nMZs$9|_7 zTQtR-Mw`2NW>K)o`7AO_$Oo~~6i;ZW3F)PZoQy0&`CrbE6LeQA97^dhJNLB}=%Mjf zMgtF!8dG!+!!j~ErUtrUJD9Cpo;gtn6r>0=P=~^q2wp`F?0a+yezW0=xF$n!WkpX; zx}Iy!RKzgu6r;)Pr$`JRE7gM>oSjqb{1Mc>x5)NI5xOMmAlC|&sq`Yj3vm-4P4EK+ zu7RnbNTuwNMl*gkuJ|Do$i$e_4eJNs0-rok14U}EmOOMFI}f>oGNj`k)Gtx{xTn=I zGG+!#%obXb9&ly#IC}4b=7wnH1chEt!#mq^jX$Xpg$F94VN|S6&zb;MXbT09`wCbE zFEkujMTyGIv~wEQ&+h$muV~IAHL36s)Sbq|PQ*pZhv+K84^Wcvrz`%JqVf6fT@|sk z5^(5K;xR>x6Ag%EM}f06xdQ8)5-j$=g(`+RF`)2YbJrktp>e)wc;z!N8{F}k6MV&= z5q@ogT6A{64!$cqyzg-=`*TAjBNifu!i*HvX!`0X-aW3|TDl7Py_lA~S(@g#AgKp{ zMdXVYzshGIA@Jy|H<<6f+DT{zycddCjNE_O1*}9*s z%qY%AmQa^cMOSPE?gIz6vI_leKYfsWo5MNDj+#y zwp@Fy!Vx+CdTbp6OlKQqoE@0a;Ue@Tz>YuX`ZSzm=o5R|3Ov%QDG@{jtp^aLlSIE% zO!jaDa3kNScI$j;l7UBC7^F~>1_Mc$6{0#n*?zMG_5cCS8t`lRWFI}Nh0oR*JH!#6Xot$HAJ_%Pp6jM`D?bH$V5R=x9R z)b=u>8X?%}p*Ru93CfWYQBlom=bf-IB}-c<52qm7@R3OrLpa5f8m)7mGiAa)d|Kbu zZbidSM4qWoKq>mT8eFP)LbPw7nwJGUb2M=%xzvG<_s1SzPnhz3y#n~K%52(mQ$jG# zk2E;ZqvIZkTq3>G<(MX@sPG(Aos&IOtNU;Y&G&KYlT5mVkPd`0216j|)Qp5LPHX`qF_gT>(%pzYz zP#6N)t2iBC0_7| z$!lpd=sc$Q61o7Wjmm1VAX5aay7ViioE|V8WCKH`ndAs<#_%f2n9c@z+B>O}3tJ~~ zg1~{6qtoK&<12~rfN%y=R=0qkLu&rjt+UevRQ{Otr#EI2?t|2Hl|zRv3KdMA#~|EO z<&992(!#!IYEM`MD8Xs;XT16Dg z(Or97q#OMr1#BU<5Akv|j0$nVD1lSBP5uLpQGqv4DCa}!e8H`Fx)&Z*0MV%F3%DWE z*1*A4oj>veZH{1eLi~_eu!=%=)NxOD*yq>*)0-N&Kuk4{mPNj~*qCtOiP~jGsf~+njGufJ_vF%? z22Ok3J>Q^o$;H@fZ0lCu|772X(pjU=3g7Ej1|Y>7&bPj0o3PxufMR2y`v>Xxd|Rt) wzkL67LG`?~+rIx-BG>;3|M=IhSI#W>ML|S3^vO|L6fDw5<&GpB{_WEL0s~}hIRF3v literal 0 HcmV?d00001 diff --git a/vignettes/rates_one.png b/vignettes/rates_one.png new file mode 100644 index 0000000000000000000000000000000000000000..72a44e62eec09665e3f0a7ed66de82da12072f2a GIT binary patch literal 34901 zcmbrmWmFx}(l$th2o_vJaCdhP? zO4ig^8w`v%!Y!gjf2xL&6AZ8`7v zvVL*@Y1mCwZFW3ctT7EBMuZ6H*;rg$>F zUsD>op7o%#y*!;-%$NW2zdl;Hm}`5sn<s|S z!kQn?hq_iQ0UOkfp`LvQ2G+iU2OsdA*^(O@_HpdxQBqcRs&38wq2n_aC~M;O_IBs} z)zuYLmo1CQ`PKkw%)!<`)M?AjD%SH~zmpjVpU$+WBSVX}r|SaQyj91|kkBU1+dtl9 zilxPxZO^-0FLz@e&lfMxr!UVp9xo0)yb}*-Nr{R6#3UpI$D8+8ha(1ba5FPA>ti** zkh(}H{|zaty4rTR-fGSDVg%3{m3m{fc9(BvW+tGn=M#rEQzN5#`{TuCrwiT;SU7&% zh|tfR*YmnmEtivSH!Do~gVCW&OMy?DT+f?9RIRsw*!YBm_T<=61J75QFIQ2Loa;`l zm6hj`9`{q1`%_J6R{N7VuR@fl)*T!ixZgCbQK;4y>kArx!&F3p&|i?_ImiE;RCmNJz(jC{(JGO zZe9=WVQdocw=>Upp8xMR%%UQ(vq&V^M#bTs8y$PDP$Z0QVJt2y)C} zWo|zZ9+XK^HTi>f>v@rdJ#H$8gJ1YuIf%B>f#pL4B{<7kMdxx~Y~Ea`Y9vw=l!-r3>@)RZ8yK=#*YX81=QHto}wAz zaEL1%XQG=`OH3ymeqDJp8hYKD2^T_!W}7URqA`wp0_0GA=rt(l<{(E zmVqkQ?5E~Fv)MS>vV!uy2SaF{5^z4=S~%mEIf8Bb7tKWE9tV)uhUj;ESci zoj&hd&o_H~#*me7l8XK84`qEhn_-Rzd|Xqz_-8}VN{1xo>=~wHaR0dSq%};9tQ0Y@ zrYOzOc2|k&mGG; zLGPodr@NCdujO{1`4X`o1{s%l199a?G1Y_NCE1$G|7pS(Sgtx17x49iNO{YL)ELC&`_Hh0!_d-b{F4 zG}?xtyu?F`QDsPUg|!e5UB)v0Gk3e6EW0i9EB1S`7iq&G_tSNf618m~O0V*=0~4Zl z(KjS$jXqgd2`uEi&Ru&7y4#e4h4)0R>Ae5g9OEv-R)zVnkgO2sD{ch4-QAQA1)Y%O z_GqLYvb;@?q|nDqC{s^=e>Tn;}x&=2vtzr3ZV3wIqiA|OoJ=>hLfqGdA0bBs+d^%X1 ze^q1W6J(4Dl4yoj{+$TkNhfCLxY*{&TqR&{-H2SW;^*m*Sk`W_QRtkT$y+PRvDmxYC zYN@0s0g?Cx-}F&Zw)345i)zOe4@XldU?~<4j@jLAYHvyx6LH}6kFHoXN5ztG;0c6f z>XMXJv+4r*YU9CD6{CTlj~MZC z9(|5Y1oHb?79IyIRPpc>%ocU2>|$e&XbO~c6i+WM*flq)sAx%ig6&0(8+LiiBX->$ zY-uBNc8_f8)rdsxxv~s=DvNQs#x7iSomSubDr*gU`n_T+?(bo+yDqG=_+`*;NqIV9)(y77_}j zV*Rxq37WuNGnwmB)x%ARo{@ya5Oz#oCVb>MzoMoC;ZMz>$a=0#7oH`PSankiEPLq1 zs%#3ygSE0lODw0VCSb!Q?GQO{{9h2N(xgN}6sO>kzm6E3; zR57Sy6CL}bMp=QxUwWs$%k?zxZCR^j$d?T-D5}ZGM5i&t;S{XS>TceeIit})1~;ua zG$h*(ZJNxef!BmYuX1|+VNrY*@jYQ!l!#MQgSnYKZYm<7SrHvxE`D?n5lta@NSzz} z9qjBfG;V$uBqC5KQ#P);O4Vk0$9w0V6{#KFM!E}#Nwt+nH>_4;FQ58!3Eoz={G1#J zM=B=R#XfeyP}&R*Wp@ymtz>$0V_Egd+W6Ux)mPf0ZG2hX{HAKw#p2b^ct#jU6Xq;F z(mmU^22Rd}kjBRM#GdbfaE}Hxi-s08R`>I3UH60e34SKEVoq51-#f&l+??_%3WEL^DV_%Qkj9!mCgfNmqZkA|K9b3Q>*^H`7GOq_|~Bd z_O-pi1isvwC4K?mM zY+{Nqi$4s74Sq`4t1eDqKxsgJDg%Go9XwXGg%HSHTRS&(t!EC(SsLXyNyqh|;j_6I zd`PxHqof&Rtvhh%Ad`zv+-x(Ls>*iEt$uP9457s#Ni$vBaMlpkX`$%9U_V{U(vPo2 z%fO7B)HqQO5vL*~Nbu zc(8&rh>fzTHa{B~@m?H3D2YO`#1yg8U4Y9?%K@$Rqo!zNVCh}Ch+l7p2& znpF+usgY`yf)X;_us4O7%yVYs@5-IknMu$$+7b$T9Ih0c3iGw?*%Y2639&(xA*a-v z)42*>pNR?go58w#e`(cb_O&Ym=&eas!km_u;;Ti~S7)I05j|zffyMBI-HDC=;N0+7 zt+B_QT5{&G5k(;7!XV(-Nqz~A*2gR0Bj3u}Ao>}r!Ix@|7>ft zp@wVKKrS;DncB|ii|EFOra)fvJfh6;gT=A_d^?j^n-uaF7=+JgU-=MsIzbsx5-54& zxnzr(+2AT6^jnqKKX%kmf)KG|lhgFbeWOF5 zPvR_D^iU3n1bt+9c1$J~SB)A3%2tZ9@Zi#1vyYd{fQ{lpJeng>(5r1B4NS-gmnB9$ zSjA)x%S+Z}IF3p{t1%aLK{=%Gq`Y4{4lpXU(zFWD=U2@lMWpkG1m`nD$n(K`2v+0t zsn>eYFep`+x`v>v5Tnf1A{Oe7Nwf7)s-bLYsmq_N3H0yVKEd&Sr>64x=~fxT@!#s3 zM?)$*I`Wm?KC0WxhJuqWaXFmY2}JTK%`6W6M(fL2qf)Dknb-1c5*h>x*B8;4*ZBC0 ztlLdH{QFU}a{i?vLe3uK_3p=1%3(RA@|(gMGFn?@flY6YX0AD`zfn?zr}cuw5uyP_ z*ES%Bd)oPQE)c#U!N`?hv+7J{Ns1`-FEBwI4{VTPF`Do!CENBpt_UxGA>t^}B?qBw za(>s2+B|49`O&1i#+~!+LDVWl?Z=2B;hLQvUfhzxaB57d{E9I``~d zt5ed5COz)=^Ow}5A+RhrV4UnWwknmD0M49+V*tcu5eV^o7wHGBw zsodDPZz>a*il`5B>BF~kzo}H3bbqhyXT$Frs#u4N%r-=I&-Y#WH*;wX&OIwQ*}f&j z`f(!F{9O3@Bk#$3}<~!T6qPCS(f96x3ApNo~x8B{dZDL-;^*s#}$wZ%&P9p8y zPm(&UtzYY|sNirsJn;(DRx3XAZ_(m_7d=gL9Q;yKNpgQIhHkEVT}j+W!K2yHTZ6VK zwcB+vC0me920=aN(VT5&t~;4Cy)|SNBo(ivmu=9?7?GS8-BNM10%~(!6|X z8-d*_5miOqgoK(?ZhMp6l%rvo2Jt-A5xZ4fMal`2CHEoCf-#j6B~B_f7ndC$Oq0Zv zT)jZ{yrG7g#aNqwnjHrbF%T&ErCk3>wIpWPAb(i)2ezHX(EM$3Ui0~-tNh^t$7eJ1 zP@`SzyHSbl@1Ku;^@VUyrcX&ewK}x?Nv6`%JK3lnQ~l{2qb7!ErL0iw0JTHn%xc>9 zVNVZxh10e_K0cHFF>{HxNa14AaWs}W{C1!;Q- ztna+v9AM80_b0Z@?njf^d2~)Q))qwzWiH)a)8D2=vw~BosP_|Ypg>J9iIJ`ujIYC! zy3Fn^$7^%+<|w-G3}xr%g)4iZm0o%u4A;iReFT4(QtC6w=B(NT))#v;wqsKMg6PP@pZuQFl`M_H4F(rHMVkaA zt#_~)Vl5(bYU2(STWZ{&I&dHOvy2Jdh&Wc8o^S5`i*D276c&CisaQCc_#M)IxM556 zQu;b1Wrsb_**SdY=8o&+@xh28+=fV-$0U6W9-wrUF=|jN^3Mx^R_fR_&T5M zZy+Ip!`kjWZpxA@oLl7&fL1+~&{M{u?K=+6HO6W5?;0$s$s6EGp`*fMstMF_@~+bJ zhIrI2%Kq@?FsgSn1RbF)IXKtm6nFj5eNu@P!0#dO8>`tU=Eh zv+7=HRqD6$Yl@vApRlD^q)I;JuCG-jKIbjYeLRn;W9No%zZ8^CNmatV_F}8SN2jUC4e^xU%KlDYlJ5S?ZIKU#hH zmlx{~zbT?=qgY!ZR8=pm_8dFJP%r(>HvnySc_GTn;c zJrq@#sVcBtkiSgyR?jhXU`_d)(rAZHFeLI@?XKeyS0PL8usZ47_VZklB1Zj)Kuq)n zCe`wNVU!!^6mPc>%PCLQdLWl!iUdi{IDej9Q;>3G*&%1Xa~X|c3WH7D1U5}lEOEUJ zfsg9XXK-m+9XlDC#zB)xcLN;`>2-sR(}5qD8O)kRWi zuLMPbmtWZYp@~evKov{Wrlfy5hin`1vLVP!u(=w$uXZgT+xmxt4W!s&YGXuATBmYre2))v0n5 zC?yjh)Kave*&g@Hmt2;p!(}tzQs}_He7yVa=`(B@pZb| zWCjzTXdK^&kr{M{=-M(FE84Ys-W)A7c-o(VA~(b4bH}smKbxg0DMUH^^ih4qrR_-< zb|a}V1C)DoQj7%$d`f$sa@c|w8)$uT1PZ0f2C7`xqQAtRE~U%nlm~}v8y4DPT*rK7 zo2Ft|lw1-cize@)rp-BVdhqF8N>=YLClNVbWPeB~&HL7Pvt2S%Xiy1Uluf&>(_%Hm zIk#<&f>c~?Mq`3PtmNyjjRa|zdt5R%sg%l8XVx$jJEJ+@cg#^bJJBjND4iviPtC%1 zqw72JtVEc1orN}P(AAT|m z;eW?PI_CbDw0z|{UyuJ1lv=iDNaS!|Sz(2@3ci(4u_GNEa*tlb&Zu*I$Kid!`Nvp# zP6(a_KXvN2y;QDwENEIS8;DqKmog%199^M~D%UR@@XD}u{)gT4l=hDxlhLb0Od#ja zRZ3?#9$*TevLfdOf!_5EC7}C&qOl{1>3tPfaBvGL7>E0-HLQ|Qgk>}>5v22rEnD8$ zj{!ppkIHnrk1-cV>TPNyC;=c`Cm@?BSzU}*-$4EK9}e~ef_DQK1j_h8*kzg#{GnBg zd2glc%8VvH%nE;YNkU~>r)Jx>T&F3q6cJ4k>EqmdbBE<^usRm$G?zLeb|w`>aMGZ> z3wwtp^WLbUlXXbjb?3(5Yt6((wVw#2DMeZpD}2bIW0D`A3Lpqu~Pd!WyP6M_F(WK?qK#(&vAg zr`BrKH05_u<+AJ^o=6CU5Wj&3F!x+*&rgmWXpq0Zm!eR?ZsU)Wl0SpV1@CPh2s0)f ze2g*%&g-Y@h0J9StM^r&(7o+p=q?rMa<%`X3IVJh71f5k%uZQptKrO;%0=P&4dIn7~J9tPaqw4jRrT7l!l6{Z?$`xZ{4&zGN%0l>Zdzw@?E|{?l1-6aYHqwRb zT3Sj}Kac*0pw0?cDs5KGs8`HTO0IHIO+56u^4SgWC*H72xi0!aw{JiT0?nkJr)mro z#ixkuvLl&&$XCN2f6UDKf&yVRELQWJ(7bXQx0IH-!6XtM14Hs3hMc;QWcIk0ynvcZ z{Z9z&*KG)vI|(+o@6zq+f4x?yvOL$u;NZIaiT`k*e3`KhoDsk@q_eR4#GDykXOyMT z(AX}D=!hqqF-mz47=YaIRWkID?AFiVvQtXG|IrAW&ly9|tSRHqGfRBBpF?x0ba@gH z!zwXjB^1@>(-Rm8i6iET1w$&rwdDGXghX+X`W$+~Pt2+;{P;3@TYi_dA6P_i7g&qT z#Hl@Ec=6!_cF?}lR+%Nid;_Ea)?-EJ+wubg>m?5Uf64F*095#=+{Q-MSsWm1%$bCP z|JqK?x9dj(nS#|zZtIR}3zRzE|H7V?ZvWyH@&BW!KsOls`;A$t$Zc)qM1{ImCa0mX z0%}%Wuw(s-va+&@igSiE)u_R+|BPJ=1o_DuDCuaY_2h~tU4MJ|`|b6YH&=6-9@h(o zZpeH=9bbO!H~q6sqkavZl_De$*A21K%6sgUSYx5Jnl^dCy`lT)olq3SO)fBR!Q zJJs2kh}D`_ADe%n54txM{T%g8X?o7G9Kx%4xk|br^&_VIHx5)DUs95kE1Mxv-@C}v z!f&y0^3NlaKJd6A%|vbqTfq;!T?>+&apbDjlDKff$ffZ%4M$UpI1o_(E*A*RNNi0a z7HM87#hBr-s?64}1L49rk#%(d#Kd>up^Qj9tMbZ7A$Cy3t1jD(5KB>(n~@Y{Q5-H5 zzALWTUFvRZe|_G|j{nFwsdg4nriN&@P_MXm-SN`$6wS|Ou5lqybUe#W|x8OtN}bStWJg5*F#z#q;cWY%bIDd z7U?7ORAkKb!-YT~=$M(BDP%EIN;L(A*|T||ptt_5o~=NRl^6FNs=?kPwL!*3S3E;< z%8N-&`GJ6|JTa%Gx)M@wS;I`E!pusxDGzR@Rej+Dy8YP|gL$ArGHG8qmvs@EmDry5Y#lGr#m@iC!3lWAS~XUC_^h3~!E* zUl$Xc+XGr!#`&)0jDO1Z0Ioz zTb6e)5E^3_cH)tU(MV(IYS~u+ci^!GLqW^;HHNmUZyBho$y2wI5*IhaX`&%2eBQ*! zQkNYkiR>+i+>>Ku<%dro44~aqks0Ss=d{cqL6-i|Zi$+iZQG0YB6BM=7b1y#VzH9a zs_o*un}V>*W$+x<=SztGYLciDS0P@2q%lmtBBb%VTZviZl{8em9%xSZF0B%2fPwuOX6xg1( zmTgOf)9>ax*i)_F|MgZ?AHPmgQMszx@hPDNw;{vd7rCHL?uB~^06YTDtolHwOP!g)|2YOV=^q81^#zd87o1ehve5M`8t;#@br78okt zziXh1xUv5NwdCu(Eh_i3AT~}>-QR^?ojW-^MP9G=mt?2z#~jrwnB>QuCxR=BKVckc zr1SpAXK>GT-?y-%H5~*hV4Y6&PyqMINMufBZ9`O?rjH2`OZlEMD3B+FJ4Gm%0Lo4W zgLV1mcm)!22@9VYpH=*%$NyP3NxqTV#i2h?LG>Q|E29R6TJRrvjGmOyqlJGa0|0VIzlOmS|OswCDHOv37*3Zbi9=FA?9~nR=l#4 zx4GG86Mc%y$-t;30MoPFJvcmEF~5n^bYH05KA0&2UCt#`eR zFSzIG;>|r@BZ>G8$BgPN1iC)h)aMkcvWlxaFP41XvAl6>c7DI+CsM~+VwV85OIg!=mTujKp(~%&eosmNwE_IJ2=%?6W-c-L5OD;HPq3IVL&Ry( zgw1p~;UXoI03znm*+EM*R%LNYVpM2lRRd_o{b1~}1&!nMAK(J91M`SGy&z8Z`1)0%xI#%6zG;y_|7G~uV09y!DrTN=+^S($ z9p7713wK6heW8@=474^7CV^#45Up*jA2uDKP-fwwIUf49_W;4kU z``e8xCj~!h>Kh`*DMGKqz2m}eQbu%5uGGns!kUO^ZZK-W1n~^gk6I%v!vLXD88RPG zw@|hiGeBL#lQNjZ`U{c9&Bgi=Z?PTAmdsRwK*9C_lMd}jnE)i|H!NSp>>cKS;(JHc z_uI5d5ZU@l$~$u@z??6>P<=94z0$g1t&*lHTsuCT2vzQ5fJ)!5fnEE%QL95c7~D*u z_)c2Q-+FF(;nq$f^G*cQ0A_p(N}e=%I|{Ez;1x6pDcRvYs}Q%gR!l8n@oy&PN(Rt# z!2ru7Mm*HN7g_~^G(zYH&@t6f2n}Y`Mdh-btfnq*?~*1+M5QX=P;Ovc(&gMPIO)0) z>599-n|unb`o{_Zj)r4f$&EdY1hMADrQ1wdvE9sJL9wzM2?KG~y=O{=4~xhII!{0P z!ZpLHis~VogUn}7&ivqFWiUroG`Px%>aEkuqKDX6EWh9j7+R#;5z=tVWu$d}h@0mVO@ zS15yTHWIOFDrN3mBu%P9Tch;~QdXgjRENPtzk|lmC?qr|{32ekp}!MekQc%Rgb3xc zHMl?ycL%e$@;xsA_GJH^7ia&Ez;Gk;=hx>SLLwpu7It(sDisx5kTO(%mDendQz?FW43HNMY3MSZ zI2f)N;98;#Li?~_*w}qT5+Uv%8Lr~Y!^g=}=RKUG$UA1766mcrXpqH`Ev4Nl8KiWq zmAVKONRkOpNi}m9byz|_!6s4H>Q6AF&UT5mZn!3?TCZohL9!dzR2dO9I7Z+(bg#0@ zA~DR##SZ9qdWu_3wWcJ0Y}IBHk)g>U z-i?Lj_Tdy3`PuTPK1Yh=;Nkx_ZFupYLCu(*Td!?KyfIMEGi-<7a4NuOjR~pFNiRk< z{RIQY$_3T9wWZfV{S52=e79>}*VLzev*MuXe9x`X&xgpYHI6x8+ggA%FZE|7yO#NZ z!2TxmM_kVOa#9V8umbtl*WlT800h%K$+Q#6fzxMf{WMYU-oCRb!n&=r5m9f6*N9G? z3pC()++Xe!NhH_1KRGY;c6WE{55R^Gdu3W!FtC&NZ>FckYzggE)+W5CZ#*u%VRQitApgZ?O40Z3lJCG!Km67I z2I$Vaj0X3%ma_C(VR-}qT6G&H2LLwmD)JIG1CQ(#l+9(V=73}shZh$^6+dkNGM)~v zx8?dtRu^Qs!@I#G{}q#oknpbz<9XJ!CGd>@xK4n)`{#jpe1S)BY@o+Q zW)T0rMlZY^jlC5hlvfaB=LuBAHr{ACPafESNlnV&Cbp-;P@%$sw$YS-kNAL4|HETELGG!9nln^VQ|X3}|FYBPt^x+2HU-GufXKM!1mS%@ z-Sd`VW-j5cpVs(vEe3`7BGJ`a9bQU)0I`sT^frBaafMosJccszQm80>RPrk-xs6CD zD2MTYJeU81l-nOC)~kd)$GcmjC~j7gN&!_o(a>I2VldBlMP+3cMn-_w2(-f<|N8HK zBUedQr>sO8CCCsTAJ;~jYFyV#Zf}+PK7v^as!`5e9nN97T}}Y~q$&TjoqERZ_6UCQ zQ28|?-xEo2&d5|IS3n075v(2a{(Ok4?f!ra*SbLsJ%n&}oty2SY~EVp0Ev(-8uRu2 z1`0{nx0ig%cWn${?fLTR>TW>7zvIDWvm^E&^t}|G4y_>t7#Wy)$~CRaQ6z8~06^OM z>+ho4_yi!pvXtE1o+h#c+03mP)PSC12RY^Tvm@&+3{D6nef)q)#-@f@%+)xCM8#%@ zANt)D8mZbPgc|@pZRO)ozieVW`6+!3->{cA3kwJ56S_?~hvMv~@BXjT)yScW@+2fu z_+>Y2!`GkN4y#UETnNV^*bW%b+CTsTk%@^3tGTg}5wq0>2p9%;5yTrvg_tAp_m3dm zmy+nn^F}rdk~E9u(BVzzKhF+-%&Jj-8v6Som>&5DmqoX-8VqwHmZ90vboe{g5S%Fzhl^06clMJvfsqp9p zw)3hT+k7#Da@OEsIPZm(+5l+_dXZQ}X2zqb02kwIo`3N>pOM`0G%MRi5kA1^r1)Om zLvbj0Qx~u%?lwIQM;zFO5w&I0kV`+<2+#by(`wR8XPOb@mC~J}3(jyNG2<84iT&ak zm7QAmVA!Tf9hU5o=bBbq?@T+>bjz%TwqE&034!FkX8fr~EuT9p{SKbbbs}Tob@j~I zYXw)wlS&KkccmHlk{`fBtnz9f`EhX*v#WkiD}BQ_V!K@Kh%&aA|4(}C}*}?(L`Ds1+VNp+c0A3@bUc%{WJ?-nOPbi_`%Di;aa4H zS$P7A(~FSkCU%J9Lx3L_$WaIF(6;?d;i(xp`Lch7Vs`D{QA@qGaB_AxjHVB8%Y4a$ zb8fyAO{A)AJwMqjhSvj+alOs7>)=b|_Elp2{bNL*VnY&qpt^pucckMAO*3N7{om1J zw)cP0BhFj(LhA@(4id%<|M`5988wANFy}@OvbAlZ?<0ok_+8(OG+; zYuwP%K3bDa1ntdtVT5Y9nuk)hD=QgV7u36VyqgA^*TOCe5EBK<)4NSbqIJjojb!-dY9)>9}tWPc7jeBcX)r*N+*MBVq~;;Zoayd zm?5Qh4c^!iu25lKM2=H_l zP7j{*UGMOwwlt`Q`LWKR8ly4Emof~ljWMK&(UqR`Dd`iV!jnbQ;zBU5THUj3;2zhI zOrsAB=m`4z6WbPI-^~38_2=b0?HNBdy?iM1-y-2-6B9vwtyH0U*E{nBxODFBqTwcz zSPZKv&;cw&vG;p0RC)jy0DB9*vH#_M`BqR`8Y`0HhL~6|6Bt6E8Sc!pd(7)&?AMW7 z8y@Pf*E>g^8gjq=8DFkzAhjHsQwY?ZjbV#XGwU?_h=_~3{i&!Yu0&G?U*wCQege4Z zA_A8|gu+Fn@&jnRaV{{}_C)(5jjR*jZqBJos zgyl;9yd~=EFOy5pSy&Q*ukDElrUj-KhN2{aE@qMc^U&F;*T%A5bA-ADZMs>{bU=s- zdE315fi+Hha-%-?i65;+VkEC2}1JUQ~9ZXy6ip7|E1>)H6TXcPYWeRPRWZT_*A*~| z%JnumAcQ-7NX?T?3kZ!13uF9BDDDra_U@Vf4I2@^MF6eoCU?3M_1*5G8D3l!W}?Tx zVF&OCI+%bY+%IpEp!PVXaz1d+aJC<@tD6Fd$FsnSq>3VF}NF{8n}>p_C|g@~`g#6xe}l3cWXkn4!qs*? zn*4H`=dz({AL!AX@wac}Wzq7wj;fhMnu#cN@Bn?MjKX#Qw1*EKfXeOayVY?l_jzBT z;W|F%8edH&F3?eP1Gq11a=cjCzUPUBqx{mM8-$-)clpa`f#^9k@ad}MDUC|)rV0%N zZD$9KK!}Y8%-Y`4NMk*d2;oy2S0Dzi*F&3To3=PC8ej^+8hmszDwt3b$uuQSM)VrA zPC9?B8Kgzxcss%ZITNqLUfdFL`!c2~)`#lxp?m$DWmy zuS*X9-M8ibfR9@7Z*>!1)|WoRy_GfD`cy*d%Xz+PYP;_f^?(IAG{8;Xt(SIOIF5s{ zqIIHRGF-Mkl=Z==%Ud|6v)m+88*Xz25Shm2isUcWke$Y?iLE4E)CGX#UduG;K$#{3 z!T~#5X8+579|h0qVW#wVRZw`h6d!(~_>@79vIs8d_Vrn95#x93lu^ma-w$E6^w1Lb zncOG)i;hBMkbwX7Zh3We*qI2 zEMeFxvHVoJwH(uJ^;MipRpufnhN%Y^is5x3X&DKK$O47B`pqo5un}eK(x=P$T?FK3 z4-yb`$B=vC^#@_VYW|AxACo@?$DRWQ;k3_G!{xC*aHmtqp?XcQa#1(siw~43JSPa% zsF*J!Zh-*fZ4oVMFcRz4_i@^ z_vD0eL%>$LG#Ea1OE$g>vDaNL=QQk<1vtXXB?DmXlZ z1e6FkfeJr+nI5^v0tfBx(mzkYgO0xc6t%$=CRPaDH$W(us*HKxbhoaJCJpGm6&z+O z-c;P@5K->1->DM+iXrYWduW@|!8~?elkyVOh}B_$B!8sAV)V}O8_K+d-#vLR=BS1T zcd4jiwYiqu*zTc3;&7gTjtc8<(M~|Jc29u%Z#@*duchSV41GEC`WuF_9N489_73dc zdL4q_IZ@o2ggb`mo-g{lw5AE?l2Z_? zW9Mz*DISRk1i!lgl+UH<;BI>TLlN9miE6pUfT8##r@*DHBAysa-AzD}_#dpE9F zhdl}6*evO{$dqsOG-mDc=a9-)Rehzm#M-~5_X{Q)$NHFuwj;a{5&x`_soua_SfFM- z;s7xnI?rp^`INd%-K--JP9_wlI+zXR3S-i8H165Xno!sT`1{YO*2bVJkp2`2x#lU^ z!AW`M;a81ByRUBl+dSqto-6rPS(Pae7pcSLxK^_QvD|>Xa(;F`WCeK?U*~@q*+P3& zLsYY+D+rthO(BM3n!Vbs?UHKq6vL&P=;4RL-a%yMutKzrWh$d!wwmoWnOa3WgGR&V zVfd1R1$f00X{wW2s@%8YQ1^Tc={gX^@)>r}#ULxX{5z-&QXjX$3u)xUXt>$(#R zK<`2viS13Hg|2Z^K^-67qYH5VljD|U%eVX-mTrPL#+`Q6PN4h3YXBiDVaP-#_xdk4 zJQ&#J28r9)($HW&7S$R-L-NVqc9R-0h@4C|_b_JPdDEux$Z27gHY$MFk+N8&1M!r2 zlya~!E1**Bg4l4cL~T>J##n0uv_3EcwabzqEe&oxX}@S4@YL5WOspp+E15j$hoOfH$5tu0oDNELP=be}Cq& z)#Vakp?9la-a9LI7R>HKk|5$82gtm2lt8uRzR?}u(gG3_KSmLPux4gmJ)OIiHBwAMse{9bg%cY3OvH@cCL*M?T~{_VwENY!j6B9=^TU&A zFktT8TGMrc2f6f4*^ZOzMa-=V-=-L(Z&;G(X*Y}Pi(9VYjsO(6y6KjeV$ z|2T2Z(m=I;QEoyj66%Wg0s0(fvF)D=wVIzCW&Zev`%j+iDo~aJ#8-6SJKvA3ciQ8x zwPIiWf}+aGO38Z~4@Jtjm+G|(hYz2j8u1cFnXW#hGGJI0r%C5?%1%xVg?t)2TR!r1 zy4mF5M>#{@gL;lryZd&1wzdEFA6TVc|6lkWa+67_qJ~|UkT)*r)BnOrN=!KHYxso5 zhq$z;Gv=C=Z|AHzO`>9lXzPdF(e64i%r#_>bDq=wUm$9e!}B52=Bk}UvkC=%rqhij z*Tgi+>AZc+10!oqM139qW+4kk>=G$vD_?M%ouuEcjbUe2HjT#&GaoEFjfL?T;0?1aNu2-Dp`LE1?%G;4xzkwheM~dKYWG~Wnki&ogdWE=P zMsJ-?TKUP>w1O}6892CF@JY6bjqv8m;{VeNfVHZM^~&Ob34DJ`roB%M)RUh;ll&g< z;YRK?_;xDMX@Hy)49xkBdDIGbYDK^4=tHRYt?&N$ypABW9t+I8MM z$IWt7bTs{RM=*p@#V_6C}y9M z+IAF{vD!2gkPt&fjqd$=YK(7mp@H5lPqu%VzLsO^sJbw-1Bvuq9dEM^3Lpm??(={DaTb~KnheQL!#l3_#azF3Mx9~L%sDT+P{VUh1v1MfjZcU!QAye48?4&i^IW0 zOyO^ACU_O{YntF%hQ_Fl)w+klmBL~4!`5a z1x2AGg&E~2kob+WURinJhBe2ig0W3>uc^U*Z{5$LUoU_UQ|vTb#@Np8=yZ|Tqyp|e z1ta#a_Ko@qgZm-w_mg&**f% zMX5?Ck?aV(Pk<7mN9W9vpMKKLqT)wJ&!SioV+mIeJi^(hMCAXNl8%nf4f5ex5*BdR zR<^fhKy5IAPE#)9?q*L!t=re!;MMB^-Cb`rn0K>tUNF>dz}&wc|1Vx0@aLu0;q**e z@uu~K%Vq>W0iUj61cV?2#S34k_ED0rIF{HhNZ-OIt3=DizQ?@C)6Bgu;ip;}h_s^iD1wbR%Kk4Ik*xo+=+UAp@gKN9BEmu3+3Wzu!6$J$1h1ynY7jf&KStgFu{rZI6h2 z#DF^j-rC|T1y~3em=sjTTf6c9^9_QDqZ^0YqsS8l+WJ8l+2B#%Nv@J!kjq?*E(}=NxtB&i&qa?vtPAxd$@&{?yDqD{xdy z{TSa#1>jeBc+aZm#Vo$V2Gu;|ctp$a2C?>4WHb;UJn=en*cnz7Pd3iwhoP5D<3U|55f_yZoD`++G_wYve)RjF zciH#{O0gAYhDDa7#9luaH1b!F`a|6p8xl<40=ubJy?_0S@12RR7&5IwzO#W}C}DxI zzZ2zxYE7tepQe%3A~%eWXjSH1EPBQ2WZT*Gn1iCgz{l_vmUveK>*D47^KGv;i{Vbe z+1lIQCY>MKMBS1Nk8lHTK4PB|lZGT;fosJWm?#Ent*JL)O{NW#lViDC--c>z#cse7 zVE2d@xp|=!1(<5*<_73Ct1r6>=iKYR%^jybh8WdG1BpM5Wg*KBXw&hoO2TkLR=$31b~=&_K>o@OLq__Yh60 zIvMPUg?FJvhIKuW0|Rw2tZrW83-m5gSj+jo)2I`Kt6%2POkEKpLwxMpeQs-yz0T~} zKW+n_?KdA2LwCX)SN^Pt>O-MP$;l$}Ki|^1GhJ$@Orm8ELWIRhB0HAJi2R~iFZG*T zm0LYbGQPnFy+mB7O~KN6I$zn<{0qg}42Q7`(jdNTb3tBZPg|4{dNP;m*UgRmRysL* z5aehe+LxwdB;zod1lffwlvmZTaC#Io6c!adJZiPEv7y*omy&aLcaKuP9Lz2tYE1sm zle<}2SQOSs?n1xTWvL5#XwK6=@TsmrM8?KyXdKEWNw;c1b&$lpcf-0GVWF7CJ0i|O z{&l8EOe=reI7Gy(TP0hmwZY>Y?Oi$e@E&og&zZfPi+5w=_xD-l4qCoS5)*kMe2Ioa zku?|K;}^TRUulHVL)Q9-g?nFYZJ}jI%($zqh{P{~_GpmiTQ8@{!{yU9mF z(oZ&3y7%!~`&^sGD88OcV+p25sZN3|!gFi-j) z#zU+8ht=~_Ry$Ii6waO|{$OpT|D>UwnD!srk7s6P=BhJg=D)m0B@#unlv_Men%)0R zP2XL7rjH^jG=jlRX=$43-z~xYY_aS~l<_xWeKmm(Z)A5D7~3Ea8y>CNVJ;@Ri*sY# z_H8uEeVs?t!9yi2CgZ*Mc$-^Q_h2bvxrvv> z=RGvF(!PU$*%tlIYcHstMpVCXp{;#2uhVBGCcgRJ{j$SJ)`$@Y zQ<>UD4@L`=98vgrBl>R*IRF0EM@{^`)1Il9WD=zF;X*3f-9*qbSD;3$#~U~6UCnx) zh5s|Kp1Yj`0vnZI%G-;8@rRS#Z&IJ&{_+1&9Q~K&nQkTlr5QDmUymul7qRK->D=60 z@*p}!Mwzv=G~JB0L`5@WS^odRkgqKx4=VYiny`gsQ6t{fHY}Tz-{JUH5eGGs&ZHiJk87tG$ry&PfPnX zZzlnh5_rJE^VzX7uHPJBElYI^17pZD!Pq1vC6{iC?jf3NXB&rxh9V*&hKAHL^RM6; zed;?~l@?X4{Yua`Jze;F=fEALDJ-l;j0ecpGInGk-f;ey)I@lM(b~%KVQwnP!SoIkI#7QG+>JT zP9$~Zi$~4gy<T zMj$F7At53n&HQ6CWk9m4w>;&|n>U%FW!ISQN>*n%NiZ=noruOJ7B)6ER#v(^-w5z- zsT})GtWG#>?Ck99E2aE4add;Gwha^tb3Al~ls+FY7EdfO>rDo8Vb7;OadvUp9xpfZ zCj}kV8|=glU%_j>D#bvP+%j)&VL^40=yiG+qQJf==H=Be4Wm6tOckZ=NC1`1-jLp7 z;ZYVBZyA4^;R{wY7&Q9T=ym$__g}~Y>i8?dsMNGKSs1s+Z+(>o>cfNAjy*;2%T7Yx zeeOb{*q;yDK4syt#t&kAa;(L_=_lQq$*?7F+bC zv+XDKd_&hI6Jr={Il;ba_d;S_UDU}<=`vO>sBF8_*g8^9rpKoaVJM8qNScPwv28x z$}2X?%ke1oH4fwhqAib{_ut2b&*H*)R<(@=qA^b7n&8}@)cHQ4yryBuJ)V*% zgnu9*+VflYk0`(NE;%R%=iOvDeqTajaQRl~oP)?gl#r;NtH1y2KK4JsCpWMfk;A$e zR)5{6V>3Lf-&d9xy|!L$*~5`1vrW{&O9Uvu|G3{=EoluDh0mU&VH?3R~7;*p2IrYu7OO zD3;B1KnBar+?g#8I#=l28?T@|`NP=xo)x6bI+Gl?LoVvDc-(8r6r*Epp zv6o#zDszuQajRyzJ2fgJ3Q^=XIm@YjRz)&=324H1Wu@P>2UCfACgXnB$si#QFxOOR zZ7YZ*xuDyss;Um5O3hccO&Gkt0WRREzcYrrYgL&u&^L2E9)dM&A&6e=0rzF zCvQM$?oUoYM}Lf6i+Qkf?5?jJYz8W(B-nN_*a5Ks(-~SUfrlYUBa_6R1ws^F!AL27|qzv=&62fYs#l!JO6C3uWF4 z(zUm@2PFcL)}?y34F_G!#p-z_uSiHpqE5{CUVD0;feM0?laqo1h~HNL8?KsiklX*E zz3=~HtTU3nuC^BcVU_lC+^3*&pz0S%mh}EOIDEs755h8nMc9^V!*og>*^dy;?u$Xa z(znNUtHVTy=%{?POc|jZFPPGhNwlO=Vq%|UGgWJENf2xBQETG(Vb=aFW`kl-+zwQc z+uq&=9P{hx*WvN;@!?^>@gcF(1I8`uo10DoNko1v=3Mtf+Rd#>_xGLJuvA1GC2gu| zYE-HZV_N3z>ZX5;{pJUv1jqh|EuAy^6=x}KJgY|;oSl;8*^O!0IU`47KZod>2L?R5 zHG9lH0~8QqS@yfB`^JB_gD+H*`)MdExLyR0?eLGJTXe1HDeVC@_qSMstmdoDf}*T~ zVvP9n3BZJ7l`&Ecbvy`6e$be+zWWrjEIjDgq*9fnS__Ps_S-mXFIGN#qjvG|&@aZ1 zWTB!X6rM6}bX20+KCJ%~4=+j#*m-k%H7>xJV#Y(6Cvx$awEGt={s@}IY+TPjJ9c9#?yWvxIpny8 zXLJK+XRq~7N{c&_zM%k!_u&`__=tcbzt`~B#HH#v@rojrkSK8?TlXbIaLyooL zw{g$;uy-*MvWmRyeW}s)=#R_=>x!;j1Wnv9H*rsq%lL7>HjVcni6HGLkfI*NWs_%6drf2*^}jczwYG-$TiNe9@}AAn8$ zf#Z{wHZ)($r578KqrOXqwZR-aPOOmQIx#9B2KtwBsOF&8sn&$n46VGYD+R3LgkCt&7EzIb7V0${X`TictF1- zppQohs|VZIW40~qVe!wUr+|U4Q9M|5Jy#HWgIg7&9~X}jz~mkmNjGi8bE=Wucnb63 zHEAJOuT;Y=ZF5dv=m6@3sOk7mvFk&EfShs)k?NDf{DUjoPP}Jp#|JyqyFp4M#SN!* z`LM2-D{P(~Hea+!4j_;dtEPj&>np8csup0pSKa`~(uQ0;XR*vl3l9{%-Ysu8+s3S&8DBljTR+Ul6x+ne zO{?Q#Xv=TFUHXyEO0IVOn7@1Y%sjlC|+^n6`?j+O?}e>HO>?eYYwT2mQjv z`X1f02;h>Xe4hBN@3_!}20cR~E8oY>4fk#o*=`cm#L+M-yq}8E#!(>B@p*WvN(evq z`1ruHh-ueiDO*KyVq)}17TbsMj-yQJPBk7&zw1Pybv@hr4+vm2Xgx!gN2!ACEmU5Rn@R}oDw}QN9$2A#<0L# zy=Cxry&fL;XF#(CvzsE4a=fsgNHcpz$?3{I)cZjJ~B9wEU-v zW43<_yIX#zEVkHVL7?21IMZs!Uj$(Q9xM58Xym=lKmAesf~F-^Lk3oBc77ioJaD1D8L)b5Tl={A zQ>Q!s*eU#xx3^TjKj?zAh1^682uhq<&E0!Ri;ynt) zv9P#Rr`jSxn5~bwTVGU~u*=l`rc}#yGQ#-FcxhL0lZm_g8@>s+LN7KheeZg(?KvIb zah85+YiYm{4aCb`!F_i$6gz;i#om|YSWgIxPnj{wIeWd9fQMHa3K;fF>s_TDSCNwv zWNkcCN^kX6VU%H00c-~+#a?bga9ue5+TGpui1{f)2dGTLW;a(q&~-hd-He-+$R zjiZ{3@=*PL4TA(j50wUJE9si{1*7ZaaD!mSNrji2x9Fcbd0Xjpl+}sf+&#JC*Q0cv zjVZr!(Fe;#A4#?&+z48sP3CId>FLNbS)BnZJ#`={aZe$`wRklD^liua?B>}-(qrGp zMJsA3wca%%YMj7-DUX}$2ZNcKa;T{Ga&NDiYpt4r`|y#WZH|xuPWZ^%;kvNXWuU7$ z|9LtUMDgXoy(L*m9t@)>RRuRtQYx^Xc!VqQt__YovOe2S6{OAfYz<^Q7kd}bIN~re z#;wK&#~YamlUh?d804fxen9b&Evh$Vkf(|P*W&U;3zTxM5HG^9$bjm1qu8QdW`Peo z2=a%&RL0RD>8*>$&_yM$xE~2ZtEM5A&c9B{vdnnQLnmm~)zsAVj~Mr_wcHUE@;-YHJV#NC zYEeZdp6@|9>%&i;yrNDU4S zw$RUo+woD?xonYy8@>1q{$~z@VNPeUtPqiu;`H<<6C#(S=cOaTe1V-F@LEYJtYa~r z%OYZcOtS7bS^~1*Qs*Ty8?9xK>m=D<1QsMU^;Pj`ijbS?KduO?`5mo`-bJ#CU%c!lizp=Slkdw38G(I(@ucw!9B;4OSZ?`#Ko{cs2 z!o3S((mZUuvddTtPxn)N*pbh@f+PZU#;NisjE|; z7B)*+aj9cwX6|Sd!fUR6$k#idrQ7+Xu>n52wsOIl3zJ13l~GqZ|Z$HaC15 z=>x~g&F;i5Cii~d34j1UM>RFt6W>eeUa8e6Yf+?-ui~gPQp=UR_pr6iLXn?jW;#>Y zVSlq6(AI3(B|JocvVdwuMFkKtX0)P$xsbH1taeycidQ1JV9IozYf8Dv(N#|oBs!_i&_3bL=1tp1ySdkMV{4OJ4%K_r_vpi%O;qxk8KPNl zCiE&2&BDvKank1Ej)0B3DglYepx^GqYC-Zm!8ST7n>o_!y@|url<&n&ay%=PJ$izt z)&`wwuGMx9Iz@7FWw95&NFbzEBGTooYf{ZCK2~?#k83O**gLeU*X>;8R;5H z$QQ|o!DmQe9~b%>KmOjwD3itoxo)Wz^s+&*t6m$A;rg6RwD0)xNPLxU;Rrh;Qy%ch zVQLn7TdKy0b-27#EG^gL?vV{s6Lko7%uo#(+Xs9V-wNsQwK@F0s68iPRbpei+~HAi zV7z`Vmyo3xp9S~yebdf0ondh?zvvt&m5hv;XD8*zTD_y$si}TC%vQ_QDNj&fc#CE| zR8h{u>}-Q$@BM!1&#J^A0miP*Pc8!j*~1idi6PeSV3 zfD=eoPENWmc@>mqadZh+naIiFKOcWr@FJW!h&MaP~-GdaMB-?}ONl%$7L7Ci~5)WlVqf_R@z3 zzE)HWH7KU-q@M$K4zTCYpDZJhVJ|qp%|8Kiellqty7Z@?)l@%@!$cN1J^vzii_4T$ zRQma~Djz&mNb=m+*DGXfNZ*})+?$R0`jSr>DeB%g>(uPC{~c>y*i?%3^pzErgbOS1 z)+on5ppxwwHdTnr&%@D;Q#w^hyVVNW>Egnfno?7AZW1d{pMhvq(lTX&|veppEnpj0h_?tK56!$6ZKzS zntfW~IZ^lKQK!DyDdO$*CSC(F*9z9`m$8$g-vwmeQZ=zxWM!GoB^UWlxo_Oa8uV*f zS0gIilJHR-PBd4$=9|5vl`n3Q8yY zTqA(pZSK5+Nk5l4_|`N|v%S{Dt6~x-VAQ_DHN9kQvyzD&U>}^Cs`o%|zp`@5&dLIi zA^oN0uGDWU@AP(p4Nq?>=$1mMf&H@4PDOD>+0gU zxoInlJ8g@&NvGcPy(`Oxzk~4Caq@00VBa{Kx2tCCbMN!ne>wXl*Y66;%-^-rj&~Zy zA7Oi3UOUQ`sjR$eq?1<9PS3-G-QBq=8s5&Gze!?^i|-cw9E} zi8Mpoqt63DKkGOzqKeZ#VlF+%P8gQ)8uS|H(vXl?-rYBd zzF#9W>@7C!*8b_sJfGJi&L`#-`*(7_$}`GpJUIW~^vawk;PZ&u`UbTiZpAhlcq-WK zgdSy6Tn)5N&>gG#tePq^nxS}q;U>M1hHF)2g>8HB)@QIh(}SFUKY#mq_s6@dg)uK@ z%`N%(v-GUL=d7Q_QQpX;{H*NG{@zvUB7i9AhD3ik_d91fAI*CBmzVpR^<(~qN6J|f zQ-TS3Df-{LS%#LM<&#QRWPsR4Jf~UcdU5qVz={;G8HRA^ThZJ@_v^`bW&Q8ya$M1g zFH=p10OX-4fPO1&>kXe*IzmC)z~Hh-UoZ7;sJ$GLvE;#2A0@%%qPdT z*7j-c_Tly^yebQOHUF8-97ofaTK)8svM)tIVDoZuQHHeVOdIh>CEk-&6hLR?hG)1h zWEAb@6z#6A`B9Qy8Ts>lc%W*an2y@EdS4bWE{L4CBn&WUDo#_vCNCm9`A5Nk2pc&h zE+(w-0WnLnw|^&7O7rAg=)J?-O)YbdTS^^6Q-BEvtOwnMf~*{%r$Ew1H-L9{WR?2- zfdNB-iv*9tR?==hzgv4&E`;PC2CON!^lRulH>c<04MIWc(7?bz44;59@Sfv}ROPbG zbHw8%(e{50S0xlnKNg?V5N(W#u5Jw+%hMO#&0-m7{E51XYRd ziPi~O(srWK%7ObVxM9Wd*?>Qoy+r33^5*z)>T}?3{h!Yv`@pfF7}Ocl4miMduLdvcxZH46mS*zw8xu~8kKFaSqk|7hh(widcQvBxmwaW>lHrc!i6-mm1y;EEo znYS_%F30>CWIosBkjN(s4-+}bDJp`kW*h!6SK$ig?0Ajr&;~~P|IB*G%9CcPHiKJ- zFji_bse^SN@+6b;d)9k%w#W)o7atbNa<0k%=f55ZD^z}AZbc4GC?&Ed2$&D5R|rJK z+%I{DIaDsBe=HIeagXD^WT6N$QnK^uOx)HPrSNA}!e2N<$z1)PgbcR?Dv_rMDh-1*}+6n974240ZE_Jx1M4{?9c3U~qoS--{Z>*b= z)7|S4z2LXV>86OCIR!Nvm!8hb?ZuAe*IrAXrb}eW6gj>|M1EqFna{|WiOW+B_Db%n37}9&>OWj7Neap{$$tqTs60!i9|~7eOw6 zs9AA4I2WNTtyj{(IkZLOS|=`?G!JvlnN%aY6|)Y%T4A~Jc3#^$K68bU zhnFZ)0Di2^={xf012?C6Ct+qnw8u3(yLg;exS1{&7#W5z-d_cZJo%B=Qz#;+=*|8l z@|QC&SrF7rd@7p3-mXcNji~U&hSM`JrW$sZQ{<6xI@ER7QSa;FfAx?FDL* z2lR=+UTiR!oi(3-FD}h6W>f|BfbKZd2_dw$&mD!hJrw~Rc*eV{$?SaIKM}yi4>~GtXg*_mm*Drtcy?)2N zVdlc5)hE75|1?KUwTyzrfu1hF|MM@L*gg+dP;>6-aO&weNqO<^#r}>ssm>a2Vq!)s z^OX+-QaJEhY(`1RiwGV+?q7ovPc+eJQ`n&h3{jz{HfsfANQ~p}EaCPzUiZxe zOelDu`_c!wpD`~ed@K6@ao;&%c7M~XKcv<3~pIMMz58)^VyEilWFK-XMT3} ztvff0=zWU-gM&!-q6u~TGY(dU8>xO>i7}DYf^%>^OFx-fj0AB!5bHZV+yVr!wZ6XR z-T=}uLChWmAwhhP;>@yQVlGorb zs|hf}cy<;zC*32dT=l%)AF@}UrR-4q@Yz9DgP#sxS}Z!>;H;>+20i>Peug|}v1bBa zwx8KrWSVdi52uQqZSFXy;}ynfkB*Y7gV9 zd^)2}!b2$BJ=X+yec~ED*yB1r{R;+qdxIvm2vhTu-WM^GItreNP&U&>oU|S!t4&-9 zr#)awQi=YS6Uv*n5VC$XovCrPmQ6lIL|7pyB9%QeUxDg=xywCGQ&neIE4{6APH$i| zt|updr2nkJq~V^x%h_O?X(;!C6Z#|AaxMbkMlX~rT7|n8zFQ}6{Xk_tu1D#WV3Mc# zRtZGZ_I~aVJ&;yC-S}6>w~!a!<|Kfj%O^R_zK-s_ttjYNm?dWzF9SG7Y04_C^6-RG zPQBSCnp6{~#D2U)k%iAWAd$YL+D_^Euf}p@{-2pHa^!(x8aX+XPA~2fxqPm}Zy$n% z^w!&zsZCN*eHA9NzVq9y%9e~cI_J-N#%pqU^j#HZH=9puC3d@0G(Nf(h<> z8C|rLPNAZrY(|}{P%(>wnB%R@O`(RD>{8A1b{Sb&OwcbNGH3SY5FE$mxRcHDUW7=F zhJ~s|XYTsa$Lq-26(aqwqg0#JcKjP_-0>%{NWy%{!^@suj+EJ_@qPbu1mX?&;~l z71ffH>;80&fP<40IK39NQ`XLai_Yc(Afu+iV z91d=Iz?k_l!CiFt5$zWoknJj8@eaQ*CdfY**ub-mUI3^<+^}Zb`9QzG?W5H{rFmhHFacXH|yI zvAXtRx+mZynCkr6ZD}29I$LIQsheKh^*mY2{`hj|-a%*DR#rB(IRNldS((JU{xnJ1WmTXXQ5CM$HMZD_pf-{^#31XNU+xq&o?D(b3+l~y zc%P>bIR&gf=bc9XogRG_*O%V!NRla}D={)E*=ju`_v6qX){so-a~sU_I{FQii=3m! z-UkJ>>#ak-No3=%ytTBkDV&B;gp2zT9Uz&bWrqQ;1{c&NB<$-uN4wRZ15KBj zNcz!Tb8~abF=GV!#PO9AnR?Vm=wp zz-OD7CUXXY$g2O-pYt5d8|m`OA*^^FK%EaCW;YCK8--F2zz2gB>!7U+5F94g zX9VQyf|64zj7PsDmFSu&(=WiH#O18DsBF2DAM*%{y@#U2c8NFmwlHe+ml33w{HAyK zsO%=rvp2y9pA@qn&v9Lqp!rry)Ojc1NU|2OE0Oh#QI=%f+dfl~YYj4Z?$AZ2rbK(X z9-eX4*?7sUc+{$DvaYU<%+2h9VbFvTVemrCi^h2+V&d>}UN@qERd=5P0Nj1A6!o0r zrvt@>RsI}+c1O%zz0+4ij2mPNAP`;RLjU<-QlJMah0(m9ztgn#H`}dkku*$e>mcX+ zQcrwcW%8|O*VVQ3dt#*_kZIw@7+1Ytm!_M2AN%w%H(0UdtLHtD4qZYbnfDMeF)=)c zP51h(oy06^+cur}e2x44uO_)H2T(*nvo-b#uVkg$#laVnZ=B`3ruB_;I} z?lI>YF!sk!uTaYUKZS3txChFt0Q&5XlZ8ZV!<^uqS(UqN1EoIQj%+?g=%Bdb^NGCc zFh2BaizxXdV-kx0pr_-=ZYRyo+kq=b=RhoFb9MrhM$A?`|3%T*yk1Al1K;XP6~|q* zc^7#P=#=;FF$@@Qss+B1VvY(WX`3Z|k~Tk0rF`{Y3^*wVMd5hsTQvi7d0Hmh=D1-V&lD zKX`g5+O!Z`+*1P^2F0QR4D~B^PaUIJi6|AeSq)b{4R7o)_wCazDB&6Zs_6Eqv9Iy> zzp6Lmxj@zNi=RYj;ShRIL7!5)c%@pBifXy!QN~5A+*pv0Zrc^6235_84{on_F4s9I#wl*W@)@{|O zJWqNO>3h%aAyV+<%@I)B?G%@eE8zykojQM;wqxRXduqgXX0Uq`W+QN)ro*bM8(RwTteQIpn zo@`q4P->i+BPF)i^zm$U&>+GRzSymHEym9Dx=i>&ActY1uueqpC<^Rqx|z>(c;Y9E zhIsYONuQJ7C$ic8{ySqGr-BYeU8*H~c%tB^t2r&H;c(c zr&m4mm~Xx5Tyi=^T8UWKdZQM1DM z+0B=K_$rq@!X|gT+=dfpDjKJ*V}4+G1w)Sx-21hQ^lH}|H{$CF<{WU281TB+vX84I z{{Jae;I5$cgC-Ku(|`tKgAcN+AcJmF=&g3YNtH*BhD?>M3v`Cw*+!SraNm6RH*EyjyQ#o%`hEhU{$!q!J3}8P$I&e?(z>CZR;?Da@+1E5V#*@?rwTH zt7%MXpYs3=g${7~7@h5&d8x(Q%nw|1Hfa*XmYAiq^NtjHAuo*Q?ShP@Vx3*YuxpNGu;G| zGFS;s>mxb-fG9qOYf~aCfdr&|LpEkN%D&R$VEKy!0v3ON#|P^ zvj+5PmvxQ^dX1JlE^El}+6s+eOWH#+ceR97hk3oK>=%F4N88r82t}D-1~?~^<7h-T zIy_Fz5^F12x?iw)oCn`5OKw{)Woz2Q6E!Q1RF(K$Pk&>81u?UTnQ%7bBJ<8K7#SaQe7_MG|Mk}nwt}8|2E!7$ zrZ@Q{Y^tRB#Rm5D=@e>|tmf+%wjYNgCHCUErGIzx?2e|%G#3{Nh389}91iZa{EAJQ zx8u`CJC&B&Icx0HAXwxS#=EOrlXV8NH%zGt34HcON0Q6Cw{p*3rCK1?xBQZX5fibE z;bw8=MI*E>Fda*7GEof7N{MgtY(Fzojj&BL_qJcl{NAuzd;Nl~?NLVC+U89`*XO5Ju#8E11){7{=6V zP`ep~&mP0t#Od9^tmol3YuVL>QK>%jlOs^TZ;5K#Fc_~rtSoR8{gUc5o}?3PYaJ$3 zvKwL(twzok@0dKRRbqV{t6OCg8vMJqYnFj`w&uss`xSmeZRp`Il3s!;GZTI8Q|4|> zky87~S(}EpUz7I~ig{v0>RsmVMgCN;KFcjDlMcLnX>>%Z%8k5Gr>@!ZF1y#8;|W{x z?P=9Y-bZPqHz{SYHf;sgMP0En;8OES8Hrcwk)3lByIq9TjRexN za_>B!gpt|{3LC#Liz9@5o%*7r#n0^1=Xw*i8(85=mhc0Aj>ukGzQpfYmV%cvvGQF{(g*eXj8OY(Qe z-SR}Vg!Q-iN5%y9*DEHTTfq!<@O`fe342xTW$i06zzXsY)QefxeP(Jzi%?uV4@u+8 zji-f^vyrA`(X4vMKD^Pie8LZSnFYJK=5&NF5#t`8|6+7vR@trQnU>mOGh=OGNMS@| z?C@x%n-=o6jsU<2`UCjhVt^SEEQF9pN+M0lJzDS<#l|;m=at2>8C69XIL5Fbilz=L z6%s19#yG9Up-96Bt=1pr$0Xwhhn3wGj#h4mWy{D1YGl67h+moc4`)jN%=r)&hhD24 zW;<+`-@SvbMbuNx#x5+hz1ZmFL~c|zs=LpeO<{9T)H^=kH3xRbnDMwGYKo%nt@Z7!#t*&e+8+M%h+SO1| z;f2+}Wc=7g!(FP|zG=nLJ3D*9Ti@sLilP>dDMtDcx(;Rr%X*XO#?r;enr?C>s=d+s zars+ zRA5m|d+lKNW$uTtsHwD{o!anN*NW8L!G>%t4a@RzR_TK7y4u%7JB3?5Okq9bI;#wG z_BBFZrxx1oh&0Y)y~++I%eJDokT&8Q@oWnBA8bH%)K0E{k(4NND9c#h?}OPu(}B9d zc_D|*nI`uu-*ozRn<;d5Z=4n%O?FebSHj%8={RFqPQ|9P=y|s*YV@zW6hJGC7qg8? z*v)SzXVnVCb~vsSjOw_ub>>ghn|9NqwsjmvGE{wkJ_6S|>Tkb>aYlJNT8vCujczmP zy7Z2dD&N*jcRalVI$f*GyTYRdU}j-^Jz+)T%7)cPDFkiGwP(rod&m(O#;@CCvhLWA zSqo-yFWq9EHzt18-F=!B?q6-mQ{+)$Kf_CrLguPK&{WZSb~tEdXuI$Ke%-Y|M_v15 zNvGu(zIgrEI??1w9*x0F5|~Wah=>jh+6C*leaNpN08nZ=*$Ls`a&Ky-bekQ{K zV{sG$!znfp37-)LdAIn*-2l4_F z>HS}s8iLrFXC`t4W}>Ph1L_G4PJ<6N0x^wcFP?~q>>Or8gSx$&YL#103KdLT`BMy{ zC}?SEeR|4hMk-81b>3q#1AufL*RA|+Z)30NsXDUNWXFn`9&t7lLhZ8^v3TTFZwHK< zIvT9G>tKG1iNAD5pqu~)eRh$wgpc=f$T7A!(YXmpQNhMye5?%=M*iDX+E?)&wO?yp z%$q!Hi8dJ_i>?X>*$2%g?Lc*I{)VZ{VlX?Ls2xx!E)v;DPy)m)*Y+Q!`l6c6f2HgL i4n7NB|Mj{N7#}sd9aC6C0Pz0e;mJsX3!cS{KK(bPdeapE literal 0 HcmV?d00001 diff --git a/vignettes/rename.png b/vignettes/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..187924a7208c696d44fb8f48198bfd8f72e3fbec GIT binary patch literal 10424 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 literal 0 HcmV?d00001 diff --git a/vignettes/renamed.png b/vignettes/renamed.png new file mode 100644 index 0000000000000000000000000000000000000000..227a60a3d36c56ae0cac4f2ab28f6709058a1a41 GIT binary patch literal 50128 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 zÜ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 literal 0 HcmV?d00001 diff --git a/vignettes/summarize_one.png b/vignettes/summarize_one.png new file mode 100644 index 0000000000000000000000000000000000000000..985f9a6f5a7d6773c3e9a7940e857de88b1b67e2 GIT binary patch literal 55301 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 Date: Sun, 17 Jul 2022 22:39:52 +0200 Subject: [PATCH 160/199] Fixed score filtering in deepbgc_barplot --- R/mod_deepbgc_plots.R | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 4bc07e3..7d1a125 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -91,13 +91,12 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { deep_inter_1 <- vals$deep_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type == "Activity") { - score <- "score_a" + deep_inter_1$score <- deep_inter_1$score_a } else if (input$score_type == "DeepBGC") { - score <- "score_d" + deep_inter_1$score <- deep_inter_1$score_d } else if (input$score_type == "Cluster_Type") { - score <- "score_c" + deep_inter_1$score <- deep_inter_1$score_c } - deep_inter_1$score <- deep_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start, 99, input$plot_step)) { deep_inter <- deep_inter_1 %>% @@ -124,7 +123,6 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { } - # Get the interception of two matrices if (length(deep_inter$Start) > 0) { query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) @@ -136,7 +134,9 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { inter_bgc <- 0 len_new <- 0 } - + print(deep_inter) + print(inter_bgc) + print(len_new) if (input$ref_comparison == "Antismash") { used_antismash <- length(shiny::isolate(vals$anti_data$Cluster)) - inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") @@ -160,6 +160,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { # Combine previously created empty dataframe with this one to store results fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) } + print(data.frame(fullnes_of_annotation)) # Store dataframe in reactive value for later use. vals$fullness_deep <- data.frame(fullnes_of_annotation) From 3a7bcfc3f6e7cc67cebc66459b7925694a0455de Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 17 Jul 2022 23:03:59 +0200 Subject: [PATCH 161/199] Fixed score calculation in gecco_barplots --- R/mod_gecco_plots.R | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 883cd18..2a8e89d 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -88,11 +88,10 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ gecco_inter_1 <- vals$gecco_data_filtered # Decide which score to use for basic thresholds on x axis if (input$score_type_gecco == "avg_p") { - score <- "score_a" + gecco_inter_1$score <- gecco_inter_1$score_a } else if (input$score_type_gecco == "Cluster_Type") { - score <- "score_c" + gecco_inter_1$score <- gecco_inter_1$score_c } - gecco_inter_1$score <- gecco_inter_1[[score]] # Loop over thresholds with given step. Get the interception of antismash data with DeepBGC one at given x axis thresholds with additionsl ones for (dataframe_1 in seq(input$plot_start_gecco, 99, input$plot_step_gecco)) { @@ -129,14 +128,13 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ query <- GenomicRanges::makeGRangesFromDataFrame(gecco_inter) subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) interseption <- GenomicRanges::findOverlaps(query, subject) - inter_bgc <- length(interseption@from) + inter_bgc <- length(unique(interseption@from)) len_new <- length(gecco_inter$seqnames) - inter_bgc } else { inter_bgc <- 0 len_new <- 0 } - - + if (input$ref_comparison_gecco == "Antismash") { used_antismash <- length(vals$anti_data$Cluster) - inter_bgc cols <- c("Only Antismash", "GECCO+Antismash", "Only GECCO") @@ -163,11 +161,9 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Store dataframe in reactive value for later use. vals$fullness_gecco <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = FALSE) - # Make text to show on a barplot to point on additional scores' thresholds - annotateText <- paste("Applied additional thresholds", paste("Average p-value:", as.character(score_average_gecco)), - paste("Cluster type score:", as.character(score_cluster_gecco)), + annotateText <- paste("Applied additional thresholds", paste("Average p-value:", shiny::isolate(as.character(input$score_average_gecco))), + paste("Cluster type score:", shiny::isolate(as.character(input$score_cluster_gecco))), sep = "\n" ) From 762c50e828f8b9ab81b161b16ac1f0842947d0cc Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 17 Jul 2022 23:05:26 +0200 Subject: [PATCH 162/199] Fixed annotatetext in gecco_barplot --- R/mod_gecco_plots.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 2a8e89d..4b37551 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -162,8 +162,8 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Store dataframe in reactive value for later use. vals$fullness_gecco <- data.frame(fullnes_of_annotation) # Make text to show on a barplot to point on additional scores' thresholds - annotateText <- paste("Applied additional thresholds", paste("Average p-value:", shiny::isolate(as.character(input$score_average_gecco))), - paste("Cluster type score:", shiny::isolate(as.character(input$score_cluster_gecco))), + annotateText <- paste("Applied additional thresholds", paste("Average p-value:", shiny::isolate(as.character(vals$score_average_gecco))), + paste("Cluster type score:", shiny::isolate(as.character(vals$score_cluster_gecco))), sep = "\n" ) From b036dabb5c8c0910d3e07c4b36118afcfd2ca801 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 17 Jul 2022 23:05:42 +0200 Subject: [PATCH 163/199] Fixed annotatetext in deep_barplot --- R/mod_deepbgc_plots.R | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 7d1a125..63e2100 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -128,15 +128,12 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { query <- GenomicRanges::makeGRangesFromDataFrame(deep_inter) subject <- GenomicRanges::makeGRangesFromDataFrame(anti_inter) interseption <- GenomicRanges::findOverlaps(query, subject) - inter_bgc <- length(interseption@from) + inter_bgc <- length(unique(interseption@from)) len_new <- length(deep_inter$seqnames) - inter_bgc } else { inter_bgc <- 0 len_new <- 0 } - print(deep_inter) - print(inter_bgc) - print(len_new) if (input$ref_comparison == "Antismash") { used_antismash <- length(shiny::isolate(vals$anti_data$Cluster)) - inter_bgc cols <- c("Only Antismash", "DeepBGC+Antismash", "Only DeepBGC") @@ -160,16 +157,14 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { # Combine previously created empty dataframe with this one to store results fullnes_of_annotation <- rbind(fullnes_of_annotation, fullnes_of_annotation_1) } - print(data.frame(fullnes_of_annotation)) # Store dataframe in reactive value for later use. vals$fullness_deep <- data.frame(fullnes_of_annotation) - # write.csv(fullnes_of_annotation, "fullness.csv", row.names = FALSE) # Make text to show on a barplot to point on additional scores' thresholds - annotateText <- paste("Applied additional thresholds", paste("Activity score:", as.character(score_a)), - paste("DeepBGC score:", as.character(score_d)), - paste("Cluster type score:", as.character(score_c)), + annotateText <- paste("Applied additional thresholds", paste("Activity score:", shiny::isolate(as.character(vals$score_a))), + paste("DeepBGC score:", shiny::isolate(as.character(vals$score_d))), + paste("Cluster type score:", shiny::isolate(as.character(vals$score_c))), sep = "\n" ) From 398d20fa73455d4d82e16526eaef4af783786ae4 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 17 Jul 2022 23:25:26 +0200 Subject: [PATCH 164/199] Fixed no parent folders in download archive --- R/mod_download.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/mod_download.R b/R/mod_download.R index 8f3cf1c..6fc752e 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -49,7 +49,7 @@ mod_download_server <- function(id) { # create the zip file from flst vector group_by_script <- system.file("scripts", "group.py", package = "BGCViz") flst <- c(flst, group_by_script) - utils::zip(file, flst) + utils::zip(file, flst, flags = '-r9Xj') }, contentType = "application/zip" ) From 97710c0ba842d493156417e91b9f8ee4986221b9 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 17 Jul 2022 23:42:47 +0200 Subject: [PATCH 165/199] Fixed Prism-supp label in group.py --- inst/scripts/group.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index f702aa7..bad5f07 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -79,7 +79,7 @@ def main(): if os.path.exists("prism_supp_biocircos.csv"): print("Found!") data = pd.read_csv("prism_supp_biocircos.csv") - label = "PRISM-supp" + label = "PRISM-Supp" write_gbs(group_by, data, label, seq_file) print("Searching for GECCO files...") @@ -92,4 +92,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() From 32467dcd013aa4a5cc0896c84d0a0bf3ceb559ab Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 00:20:09 +0200 Subject: [PATCH 166/199] Now script skip last group --- inst/scripts/group.py | 156 ++++++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 75 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index bad5f07..cd94fc0 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -5,91 +5,97 @@ def write_gbs(group_by, data, label, seq_file): - for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): - start = [] - stop = [] - list_l = row[label].split(",") - for i in range(len(list_l)): - list_l[i] = int(list_l[i]) - start.append(data[list_l[i] == data['Cluster']].Start.item()) - stop.append(data[list_l[i] == data['Cluster']].Stop.item()) - group = group_by.Group[index] - if os.path.isdir(group): - pass - else: - os.mkdir(group) - file = SeqIO.parse(open(seq_file), "genbank") - print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) - for record in file: - loci = [feat for feat in record.features if feat.type == "CDS"] - start_new = int(start[i]) - end_new = int(stop[i]) - subrecord = record[start_new:end_new] - annotation={"molecule_type":"DNA"} - subrecord.annotations = annotation - SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") - + counter = 0 + for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): + counter += 1 + if (counter >= len(pd.DataFrame(group_by[label].dropna()).index)): + break + else: + start = [] + stop = [] + list_l = row[label].split(",") + for i in range(len(list_l)): + list_l[i] = int(list_l[i]) + start.append(data[list_l[i] == data['Cluster']].Start.item()) + stop.append(data[list_l[i] == data['Cluster']].Stop.item()) + group = group_by.Group[index] + if os.path.isdir(group): + pass + else: + os.mkdir(group) + file = SeqIO.parse(open(seq_file), "genbank") + print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) + for record in file: + loci = [feat for feat in record.features if feat.type == "CDS"] + start_new = int(start[i]) + end_new = int(stop[i]) + subrecord = record[start_new:end_new] + annotation={"molecule_type":"DNA"} + subrecord.annotations = annotation + SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") + def main(): - group_by = pd.read_csv("group_by.csv", dtype = str) - seq_file = sys.argv[1] + group_by = pd.read_csv("group_by.csv", dtype = str) + seq_file = sys.argv[1] - print("Searching for antismash files...") - if os.path.exists("antismash_biocircos.csv"): - print("Found!") - data = pd.read_csv("antismash_biocircos.csv") - label = "Antismash" - write_gbs(group_by, data, label, seq_file) + print("Searching for antismash files...") + if os.path.exists("antismash_biocircos.csv"): + print("Found!") + data = pd.read_csv("antismash_biocircos.csv") + label = "Antismash" + write_gbs(group_by, data, label, seq_file) - print("Searching for deepbcg files...") - if os.path.exists("deepbgc_biocircos.csv"): - print("Found!") - data = pd.read_csv("deepbgc_biocircos.csv") - label = "DeepBGC" - write_gbs(group_by, data, label, seq_file) + print("Searching for deepbcg files...") + if os.path.exists("deepbgc_biocircos.csv"): + print("Found!") + data = pd.read_csv("deepbgc_biocircos.csv") + label = "DeepBGC" + write_gbs(group_by, data, label, seq_file) - print("Searching for prism files...") - if os.path.exists("prism_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_biocircos.csv") - label = "PRISM" - write_gbs(group_by, data, label, seq_file) + print("Searching for prism files...") + if os.path.exists("prism_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_biocircos.csv") + label = "PRISM" + write_gbs(group_by, data, label, seq_file) - print("Searching for rre-finder files...") - if os.path.exists("rre_biocircos.csv"): - print("Found!") - data = pd.read_csv("rre_biocircos.csv") - label = "RRE-Finder" - write_gbs(group_by, data, label, seq_file) + print("Searching for rre-finder files...") + if os.path.exists("rre_biocircos.csv"): + print("Found!") + data = pd.read_csv("rre_biocircos.csv") + label = "RRE-Finder" + write_gbs(group_by, data, label, seq_file) - print("Searching for sempi files...") - if os.path.exists("sempi_biocircos.csv"): - print("Found!") - data = pd.read_csv("sempi_biocircos.csv") - label = "SEMPI" - write_gbs(group_by, data, label, seq_file) + print("Searching for sempi files...") + if os.path.exists("sempi_biocircos.csv"): + print("Found!") + data = pd.read_csv("sempi_biocircos.csv") + label = "SEMPI" + write_gbs(group_by, data, label, seq_file) - print("Searching for ARTS files...") - if os.path.exists("arts_biocircos.csv"): - print("Found!") - data = pd.read_csv("arts_biocircos.csv") - label = "ARTS" - write_gbs(group_by, data, label, seq_file) + print("Searching for ARTS files...") + if os.path.exists("arts_biocircos.csv"): + print("Found!") + data = pd.read_csv("arts_biocircos.csv") + label = "ARTS" + write_gbs(group_by, data, label, seq_file) - print("Searching for PRISM supplement files...") - if os.path.exists("prism_supp_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_supp_biocircos.csv") - label = "PRISM-Supp" - write_gbs(group_by, data, label, seq_file) + print("Searching for PRISM supplement files...") + if os.path.exists("prism_supp_biocircos.csv"): + print("Found!") + data = pd.read_csv("prism_supp_biocircos.csv") + label = "PRISM-Supp" + write_gbs(group_by, data, label, seq_file) - print("Searching for GECCO files...") - if os.path.exists("gecco_biocircos.csv"): - print("Found!") - data = pd.read_csv("gecco_biocircos.csv") - label = "GECCO" - write_gbs(group_by, data, label, seq_file) + print("Searching for GECCO files...") + if os.path.exists("gecco_biocircos.csv"): + print("Found!") + data = pd.read_csv("gecco_biocircos.csv") + label = "GECCO" + write_gbs(group_by, data, label, seq_file) if __name__ == "__main__": - main() + main() + From 18065b12f6748a15d500c2aff895b30af063687c Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 00:22:36 +0200 Subject: [PATCH 167/199] Fixed antismash and deepbgc dataframe name reading --- inst/scripts/group.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index cd94fc0..2fb12c6 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -39,16 +39,16 @@ def main(): seq_file = sys.argv[1] print("Searching for antismash files...") - if os.path.exists("antismash_biocircos.csv"): + if os.path.exists("anti_biocircos.csv"): print("Found!") - data = pd.read_csv("antismash_biocircos.csv") + data = pd.read_csv("anti_biocircos.csv") label = "Antismash" write_gbs(group_by, data, label, seq_file) print("Searching for deepbcg files...") - if os.path.exists("deepbgc_biocircos.csv"): + if os.path.exists("deep_biocircos.csv"): print("Found!") - data = pd.read_csv("deepbgc_biocircos.csv") + data = pd.read_csv("deep_biocircos.csv") label = "DeepBGC" write_gbs(group_by, data, label, seq_file) From cae4d1caa25ba428e4cd4e837375e07cc307fd51 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 10:15:50 +0200 Subject: [PATCH 168/199] Added gbff file support and improved performance of group.py --- inst/scripts/group.py | 63 ++++++++++++++++++++++++++++--------------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 2fb12c6..3735846 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -4,28 +4,48 @@ import pandas as pd -def write_gbs(group_by, data, label, seq_file): - counter = 0 - for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): - counter += 1 - if (counter >= len(pd.DataFrame(group_by[label].dropna()).index)): - break +def convert_gbff(seq_file): + if seq_file.split('.')[-1] == 'gbff': + if os.path.exists(os.path.splitext(os.path.basename(seq_file))[0]+'.gbk'): + converted = os.path.splitext(os.path.basename(seq_file))[0]+'.gbk' else: - start = [] - stop = [] - list_l = row[label].split(",") - for i in range(len(list_l)): - list_l[i] = int(list_l[i]) - start.append(data[list_l[i] == data['Cluster']].Start.item()) - stop.append(data[list_l[i] == data['Cluster']].Stop.item()) - group = group_by.Group[index] - if os.path.isdir(group): - pass - else: - os.mkdir(group) - file = SeqIO.parse(open(seq_file), "genbank") - print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) - for record in file: + file_name = os.path.basename(seq_file) + with open(seq_file, "r") as f: + for index, record in enumerate(SeqIO.parse(f, "genbank")): + print(index) + if index > 0: + break + else: + SeqIO.write(record, os.path.splitext(os.path.basename(seq_file))[0]+'.gbk', "genbank") + converted = os.path.splitext(os.path.basename(seq_file))[0]+'.gbk' + else: + converted = seq_file + return converted + +def write_gbs(group_by, data, label, seq_file): + counter = 0 + fl = convert_gbff(seq_file) + with open(fl, "r") as handle: + record = SeqIO.read(handle, "genbank") + for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): + counter += 1 + if (counter >= len(pd.DataFrame(group_by[label].dropna()).index)): + break + else: + start = [] + stop = [] + list_l = row[label].split(",") + for i in range(len(list_l)): + list_l[i] = int(list_l[i]) + start.append(data[list_l[i] == data['Cluster']].Start.item()) + stop.append(data[list_l[i] == data['Cluster']].Stop.item()) + group = group_by.Group[index] + if os.path.isdir(group): + pass + else: + os.mkdir(group) + print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) + loci = [feat for feat in record.features if feat.type == "CDS"] start_new = int(start[i]) end_new = int(stop[i]) @@ -99,3 +119,4 @@ def main(): if __name__ == "__main__": main() + From 73712eab13d7348a245c8a08ca95b3608cb2efbd Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 11:13:41 +0200 Subject: [PATCH 169/199] Added clinker support. Refractored code --- inst/scripts/group.py | 113 ++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 3735846..2d4d788 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -2,6 +2,8 @@ import sys import os import pandas as pd +import argparse + def convert_gbff(seq_file): @@ -22,7 +24,7 @@ def convert_gbff(seq_file): converted = seq_file return converted -def write_gbs(group_by, data, label, seq_file): +def write_gbs(group_by, data, label, seq_file, args): counter = 0 fl = convert_gbff(seq_file) with open(fl, "r") as handle: @@ -45,7 +47,9 @@ def write_gbs(group_by, data, label, seq_file): else: os.mkdir(group) print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) - + if os.path.exists(group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb") and not args.force: + print("Files exist! Please use --force option to override them") + continue loci = [feat for feat in record.features if feat.type == "CDS"] start_new = int(start[i]) end_new = int(stop[i]) @@ -54,66 +58,57 @@ def write_gbs(group_by, data, label, seq_file): subrecord.annotations = annotation SeqIO.write(subrecord, group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb", "genbank") + +def group_gb_files(group_by, seq_file, args): + data_to_search = { + "antiSMASH" : ("anti_biocircos.csv", "Antismash"), + "DeepBGC" : ("deep_biocircos.csv","DeepBGC" ), + "PRISM" : ("prism_biocircos.csv", "PRISM"), + "RREfinder" : ("rre_biocircos.csv", "RRE-Finder"), + "SEMPI" : ("sempi_biocircos.csv", "SEMPI"), + "ARTS" : ("arts_biocircos.csv", "ARTS"), + "PRISM supplement" : ("prism_supp_biocircos.csv", "PRISM-Supp"), + "GECCO" : ("gecco_biocircos.csv", "GECCO") + } + for k,v in data_to_search.items(): + print("Searching for "+str(k)+" files...") + if os.path.exists(v[0]): + print("Found!") + data = pd.read_csv(v[0]) + label = v[1] + write_gbs(group_by, data, label, seq_file, args) + + +def run_clinker(group_by): + for index, row in pd.DataFrame(group_by["Group"]).iterrows(): + group = group_by.Group[index] + if os.path.isdir("clinker_plots"): + pass + else: + os.mkdir("clinker_plots") + os.system(f"clinker {group} --plot clinker_plots/{group}.html ") + def main(): + # Reading data group_by = pd.read_csv("group_by.csv", dtype = str) - seq_file = sys.argv[1] - - print("Searching for antismash files...") - if os.path.exists("anti_biocircos.csv"): - print("Found!") - data = pd.read_csv("anti_biocircos.csv") - label = "Antismash" - write_gbs(group_by, data, label, seq_file) - - print("Searching for deepbcg files...") - if os.path.exists("deep_biocircos.csv"): - print("Found!") - data = pd.read_csv("deep_biocircos.csv") - label = "DeepBGC" - write_gbs(group_by, data, label, seq_file) - - print("Searching for prism files...") - if os.path.exists("prism_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_biocircos.csv") - label = "PRISM" - write_gbs(group_by, data, label, seq_file) - - print("Searching for rre-finder files...") - if os.path.exists("rre_biocircos.csv"): - print("Found!") - data = pd.read_csv("rre_biocircos.csv") - label = "RRE-Finder" - write_gbs(group_by, data, label, seq_file) - - print("Searching for sempi files...") - if os.path.exists("sempi_biocircos.csv"): - print("Found!") - data = pd.read_csv("sempi_biocircos.csv") - label = "SEMPI" - write_gbs(group_by, data, label, seq_file) - - print("Searching for ARTS files...") - if os.path.exists("arts_biocircos.csv"): - print("Found!") - data = pd.read_csv("arts_biocircos.csv") - label = "ARTS" - write_gbs(group_by, data, label, seq_file) - - print("Searching for PRISM supplement files...") - if os.path.exists("prism_supp_biocircos.csv"): - print("Found!") - data = pd.read_csv("prism_supp_biocircos.csv") - label = "PRISM-Supp" - write_gbs(group_by, data, label, seq_file) - - print("Searching for GECCO files...") - if os.path.exists("gecco_biocircos.csv"): - print("Found!") - data = pd.read_csv("gecco_biocircos.csv") - label = "GECCO" - write_gbs(group_by, data, label, seq_file) + # Parsing arguments + parser = argparse.ArgumentParser(description='Small helper script for BGCViz') + parser.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome)") + parser.add_argument("--force", help="Force overwrite calculated results",action=argparse.BooleanOptionalAction) + parser.add_argument("-cl", "--run_clinker", help="Automatically runs clinker on groups. Results are stored in 'clinker_plots' folder", + action=argparse.BooleanOptionalAction) + args = parser.parse_args() + + # Run grouping for gb files + group_gb_files(group_by, args.input, args) + + #Run clinker + if args.run_clinker: + run_clinker(group_by) + + # Bye message + print("Analysis finished successfuly!") if __name__ == "__main__": From 9f0009453af4eac131b254752631b4ed78df344c Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 12:12:18 +0200 Subject: [PATCH 170/199] Fixed incomplete CDS, updated documentation --- docs/Additional_analysis.md | 17 ++++++++++++++--- inst/scripts/group.py | 15 +++++++++++---- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index 255e7f0..9a4c6bb 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -44,6 +44,7 @@ pip install biopython pandas clinker Pip should be already installed if you have [Python](https://www.python.org) installed in your system # Step 1. Group the GenBank records + ## Inputs There is one input -> genome sequence, which was used for BCG annotations in GenBank format. @@ -52,11 +53,19 @@ There is one input -> genome sequence, which was used for BCG annotations in Gen The usage is pretty straightforward - you need to specify only one input - master GenBank file : ```bash -python group.py +python group.py -i +``` +Or if you would like to run clinker as well: + +```bash +python group.py -i -cl ``` +The last will run clinker automatically. + +**Note** It can take a while for clinker to run. Also all results will be saved into `clinker_plots` folder as `.html` files. But everytime when the file is created clinker would also open browser window with plot. This behaviour cannot be changed... ## Results -The script is working rather slow. The grouping can take up to 20-30 min. The result of the grouping is several folders, which are named as "group_1", "group_2", etc. These folders hold extracted records in GenBank format. +The result of the grouping is several folders, which are named as "group_1", "group_2", etc. These folders hold extracted records in GenBank format. # Step 2. Run clinker @@ -82,4 +91,6 @@ This is a result of running clinker with the following command: ```bash clinker group_3/*.gb --plot -``` \ No newline at end of file +``` + +**You can also generate clinker plots automatically in group.py script for all groups. See Step 1** \ No newline at end of file diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 2d4d788..9986ed0 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -24,11 +24,20 @@ def convert_gbff(seq_file): converted = seq_file return converted +def solve_incomplete_CDS(start_new, end_new, loci): + for feat in loci: + if feat.location.start.position <= start_new and feat.location.end.position > start_new: + start_new = feat.location._start.position + if feat.location.start.position <= end_new and feat.location.end.position > end_new: + end_new = feat.location.end.position + return start_new, end_new + def write_gbs(group_by, data, label, seq_file, args): counter = 0 fl = convert_gbff(seq_file) with open(fl, "r") as handle: record = SeqIO.read(handle, "genbank") + loci = [feat for feat in record.features if feat.type == "CDS"] for index, row in pd.DataFrame(group_by[label].dropna()).iterrows(): counter += 1 if (counter >= len(pd.DataFrame(group_by[label].dropna()).index)): @@ -50,9 +59,7 @@ def write_gbs(group_by, data, label, seq_file, args): if os.path.exists(group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb") and not args.force: print("Files exist! Please use --force option to override them") continue - loci = [feat for feat in record.features if feat.type == "CDS"] - start_new = int(start[i]) - end_new = int(stop[i]) + start_new, end_new = solve_incomplete_CDS(int(start[i]), int(stop[i]), loci) subrecord = record[start_new:end_new] annotation={"molecule_type":"DNA"} subrecord.annotations = annotation @@ -86,7 +93,7 @@ def run_clinker(group_by): pass else: os.mkdir("clinker_plots") - os.system(f"clinker {group} --plot clinker_plots/{group}.html ") + os.system(f"clinker {group} --plot clinker_plots/{group}.html -i 0.9") def main(): # Reading data From 8f13246bb6521663948f984a96adca91afee80c9 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 12:24:10 +0200 Subject: [PATCH 171/199] Added quiet option to the group.py --- inst/scripts/group.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 9986ed0..d170f52 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -55,9 +55,11 @@ def write_gbs(group_by, data, label, seq_file, args): pass else: os.mkdir(group) - print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) + if not args.quiet: + print("Working on: "+ label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)) if os.path.exists(group+"/"+label+"_"+"cluster_"+str(list_l[i])+"_"+str(group)+".gb") and not args.force: - print("Files exist! Please use --force option to override them") + if counter <=1: + print("Files exist! Please use --force option to override them") continue start_new, end_new = solve_incomplete_CDS(int(start[i]), int(stop[i]), loci) subrecord = record[start_new:end_new] @@ -78,9 +80,11 @@ def group_gb_files(group_by, seq_file, args): "GECCO" : ("gecco_biocircos.csv", "GECCO") } for k,v in data_to_search.items(): - print("Searching for "+str(k)+" files...") + if not args.quiet: + print("Searching for "+str(k)+" files...") if os.path.exists(v[0]): - print("Found!") + if not args.quiet: + print("Found!") data = pd.read_csv(v[0]) label = v[1] write_gbs(group_by, data, label, seq_file, args) @@ -103,6 +107,7 @@ def main(): parser = argparse.ArgumentParser(description='Small helper script for BGCViz') parser.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome)") parser.add_argument("--force", help="Force overwrite calculated results",action=argparse.BooleanOptionalAction) + parser.add_argument("--quiet", help="Run silently. Clinker will run as usual",action=argparse.BooleanOptionalAction) parser.add_argument("-cl", "--run_clinker", help="Automatically runs clinker on groups. Results are stored in 'clinker_plots' folder", action=argparse.BooleanOptionalAction) args = parser.parse_args() From 0a588f0bd576fc0b4240c6be0b70998cc3c58d85 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 14:11:11 +0200 Subject: [PATCH 172/199] removed reduntant print statements --- inst/scripts/group.py | 1 - 1 file changed, 1 deletion(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index d170f52..1ed253e 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -14,7 +14,6 @@ def convert_gbff(seq_file): file_name = os.path.basename(seq_file) with open(seq_file, "r") as f: for index, record in enumerate(SeqIO.parse(f, "genbank")): - print(index) if index > 0: break else: From 9e90a34175a966ac005c26c0b3b200c6dbe0fe46 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 14:30:49 +0200 Subject: [PATCH 173/199] Added --jobs option to pass clinker --- inst/scripts/group.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 1ed253e..92b9ae1 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -89,14 +89,14 @@ def group_gb_files(group_by, seq_file, args): write_gbs(group_by, data, label, seq_file, args) -def run_clinker(group_by): +def run_clinker(group_by, args): for index, row in pd.DataFrame(group_by["Group"]).iterrows(): group = group_by.Group[index] if os.path.isdir("clinker_plots"): pass else: os.mkdir("clinker_plots") - os.system(f"clinker {group} --plot clinker_plots/{group}.html -i 0.9") + os.system(f"clinker {group} --plot clinker_plots/{group}.html -i 0.9 -j {args.jobs}") def main(): # Reading data @@ -104,11 +104,12 @@ def main(): # Parsing arguments parser = argparse.ArgumentParser(description='Small helper script for BGCViz') - parser.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome)") - parser.add_argument("--force", help="Force overwrite calculated results",action=argparse.BooleanOptionalAction) - parser.add_argument("--quiet", help="Run silently. Clinker will run as usual",action=argparse.BooleanOptionalAction) - parser.add_argument("-cl", "--run_clinker", help="Automatically runs clinker on groups. Results are stored in 'clinker_plots' folder", + parser.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome). Required") + parser.add_argument("--force", help="Force overwrite calculated results. [default = False]",action=argparse.BooleanOptionalAction) + parser.add_argument("--quiet", help="Run silently. Clinker will run as usual. [default = False]",action=argparse.BooleanOptionalAction) + parser.add_argument("-cl", "--run_clinker", help="Automatically runs clinker on groups. Results are stored in 'clinker_plots' folder. [default = False]", action=argparse.BooleanOptionalAction) + parser.add_argument("-j", "--jobs", help="Number of threads for clinker analysis (0=all). [default = 0] ", default=0) args = parser.parse_args() # Run grouping for gb files @@ -116,7 +117,7 @@ def main(): #Run clinker if args.run_clinker: - run_clinker(group_by) + run_clinker(group_by, args) # Bye message print("Analysis finished successfuly!") From 4533bf43de880a2b7dfc257603dc8c5170e450c0 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Mon, 18 Jul 2022 14:40:47 +0200 Subject: [PATCH 174/199] Updated documentation. Added required argument for group.py --- docs/Additional_analysis.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index 9a4c6bb..c5c8ddc 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -62,7 +62,7 @@ python group.py -i -cl ``` The last will run clinker automatically. -**Note** It can take a while for clinker to run. Also all results will be saved into `clinker_plots` folder as `.html` files. But everytime when the file is created clinker would also open browser window with plot. This behaviour cannot be changed... +**Note** It can take a while for clinker to run. Also all results will be saved into `clinker_plots` folder as `.html` files. ## Results The result of the grouping is several folders, which are named as "group_1", "group_2", etc. These folders hold extracted records in GenBank format. @@ -93,4 +93,26 @@ This is a result of running clinker with the following command: clinker group_3/*.gb --plot ``` -**You can also generate clinker plots automatically in group.py script for all groups. See Step 1** \ No newline at end of file +**You can also generate clinker plots automatically in group.py script for all groups. See Step 1** + +Script options: +```bash + $ python group.py -h +usage: group.py [-h] -i INPUT [--force | --no-force] [--quiet | --no-quiet] + [-cl | --run_clinker | --no-run_clinker] [-j JOBS] + +Small helper script for BGCViz + +options: + -h, --help show this help message and exit + --force, --no-force Force overwrite calculated results. [default = False] + --quiet, --no-quiet Run silently. Clinker will run as usual. [default = False] + -cl, --run_clinker, --no-run_clinker + Automatically runs clinker on groups. Results are stored in 'clinker_plots' + folder. [default = False] + -j JOBS, --jobs JOBS Number of threads for clinker analysis (0=all). [default = 0] + +Required arguments: + -i INPUT, --input INPUT + Input .gb/.gbk/.gbff file. One record per file will be used (as one genome) +``` From 3238264b0178c7747c3793387e2eb3593cb082cd Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Fri, 29 Jul 2022 12:12:24 +0200 Subject: [PATCH 175/199] Added dissect.py script and documentation --- NAMESPACE | 1 + R/fct_helpers.R | 20 +++++++ R/mod_download.R | 3 +- dev/run_dev.R | 3 + docs/Additional_analysis.md | 42 ++++++++++++++ inst/extdata/dissect.csv | 3 + inst/scripts/dissect.py | 109 ++++++++++++++++++++++++++++++++++++ inst/scripts/group.py | 3 +- man/get_dissect_example.Rd | 24 ++++++++ 9 files changed, 206 insertions(+), 2 deletions(-) create mode 100644 inst/extdata/dissect.csv create mode 100644 inst/scripts/dissect.py create mode 100644 man/get_dissect_example.Rd diff --git a/NAMESPACE b/NAMESPACE index 51c9b83..9f5db87 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -3,6 +3,7 @@ export(antismash_to_csv) export(arts_to_csv) export(get_defaults) +export(get_dissect_example) export(prism_to_csv) export(run_app) export(sempi_to_csv) diff --git a/R/fct_helpers.R b/R/fct_helpers.R index bd88437..86debe2 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -114,3 +114,23 @@ set_defaults <- function(csv_file) { option_data <- utils::read.csv(csv_file) utils::write.csv(option_data, rename_file, row.names = FALSE) } +#' get_dissect_example +#' +#' @description Function, which downloads a csv file for dissect.py into specified path. +#' Use to separate regions into separate clusters +#' +#' @param write_to - path to write csv file to. +#' +#' @return csv file, written to package settings +#' +#' @examples +#' \dontrun{ +#' get_dissect_example(write_to) +#' } +#' +#' @export +get_dissect_example <- function(write_to = getwd()) { + rename_file <- system.file("extdata", "dissect.csv", package = "BGCViz") + option_data <- utils::read.csv(rename_file) + utils::write.csv(option_data, paste0(write_to, "/dissect.csv"), row.names = FALSE) +} diff --git a/R/mod_download.R b/R/mod_download.R index 6fc752e..49877ab 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -48,7 +48,8 @@ mod_download_server <- function(id) { } # create the zip file from flst vector group_by_script <- system.file("scripts", "group.py", package = "BGCViz") - flst <- c(flst, group_by_script) + dissect_script <- system.file("scripts", "dissect.py", package = "BGCViz") + flst <- c(flst, group_by_script, dissect_script) utils::zip(file, flst, flags = '-r9Xj') }, contentType = "application/zip" diff --git a/dev/run_dev.R b/dev/run_dev.R index 6729c32..4cafd2d 100644 --- a/dev/run_dev.R +++ b/dev/run_dev.R @@ -10,3 +10,6 @@ golem::document_and_reload() # Run the application run_app() + + + diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index c5c8ddc..e1081c3 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -95,6 +95,7 @@ clinker group_3/*.gb --plot **You can also generate clinker plots automatically in group.py script for all groups. See Step 1** +# Group_by.py options Script options: ```bash $ python group.py -h @@ -116,3 +117,44 @@ Required arguments: -i INPUT, --input INPUT Input .gb/.gbk/.gbff file. One record per file will be used (as one genome) ``` + + +# Step 3. Separate Antismash regions into separate clusters + +Often, antiSMASH annotates closely related clusters as one region. Therefore, if you would like to re-analyse those regions as separate clusters, you can separate them using our `dissect.py` scriptinto separate GenBank files. + +## Input +Script takes as input a csv file with the following format: + +group|separate_before|by_software +| ----------- | ----------- | ----------- | +1|locus_tag_1 (will separate cluster into 2, locus_tag_1 will go into second half)|antismash, gecco, deepbgc, prism, sempi (select one of the following) +3|locus_tag_1, locus_tag_2 (will separate cluster into 3, specified genes goes to next cluster (2nd and 3rd in this example))|antismash + +This exact example can be downloaded as a csv file, using `BGCViz::get_dissect_example()` command, which takes one argument - where to write csv file. + +## Usage + +The script should be run after `group_by.py` (See [Step # 1](#step-1-group-the-genbank-records)) in the folder it was downloaded to. + +``` +python dissect.py -i dissect.csv +``` +## Output + +Script output are GenBank files in `dessected` folder. + +## Dissect.py options + +```bash +usage: dissect.py [-h] -i INPUT + +Small helper script for BGCViz + +options: + -h, --help show this help message and exit + +Required arguments: + -i INPUT, --input INPUT + .csv file with clusters to separate +``` diff --git a/inst/extdata/dissect.csv b/inst/extdata/dissect.csv new file mode 100644 index 0000000..f8185cf --- /dev/null +++ b/inst/extdata/dissect.csv @@ -0,0 +1,3 @@ +group,separate_before,by_software +1,"locus_tag_1 (will separate cluster into 2, locus_tag_1 will go into second half)","antismash, gecco, deepbgc, prism, sempi (select one of the following)" +3,"locus_tag_1, locus_tag_2 (will separate cluster into 3, specified genes goes to next cluster (2nd and 3rd in this example))",antismash diff --git a/inst/scripts/dissect.py b/inst/scripts/dissect.py new file mode 100644 index 0000000..e442a89 --- /dev/null +++ b/inst/scripts/dissect.py @@ -0,0 +1,109 @@ +from Bio import SeqIO +import sys +import os +import re +import pandas as pd +import argparse + + + +def convert_gbff(seq_file): + if seq_file.split('.')[-1] == 'gbff': + if os.path.exists(os.path.splitext(os.path.basename(seq_file))[0]+'.gbk'): + converted = os.path.splitext(os.path.basename(seq_file))[0]+'.gbk' + else: + file_name = os.path.basename(seq_file) + with open(seq_file, "r") as f: + for index, record in enumerate(SeqIO.parse(f, "genbank")): + if index > 0: + break + else: + SeqIO.write(record, os.path.splitext(os.path.basename(seq_file))[0]+'.gbk', "genbank") + converted = os.path.splitext(os.path.basename(seq_file))[0]+'.gbk' + else: + converted = seq_file + return converted + +def solve_incomplete_CDS(start_new, end_new, loci): + for feat in loci: + if feat.location.start.position <= start_new and feat.location.end.position > start_new: + start_new = feat.location._start.position + if feat.location.start.position <= end_new and feat.location.end.position > end_new: + end_new = feat.location.end.position + return start_new, end_new + +def write_gbs(data,seq_file, fl_name): + counter = 0 + fl = convert_gbff(seq_file) + with open(fl, "r") as handle: + record = SeqIO.read(handle, "genbank") + loci = [feat for feat in record.features if feat.type == "CDS"] + locus_to_separate=data['separate_before'].split(',') + loci_len = len(locus_to_separate) + for to_split in range(loci_len): + for loc in range(len(loci)): + if loci[loc].qualifiers['locus_tag'][0] == locus_to_separate[to_split]: + if to_split == 0: + start = 0 + stop = loci[loc-1].location._end.position + subrecord = record[start:stop] + SeqIO.write(subrecord, "dissected/"+os.path.splitext(fl_name)[0]+"_subcluster_"+str(counter+1)+".gb", "genbank") + counter +=1 + if to_split == (loci_len-1): + start = loci[loc].location._start.position + stop = loci[len(loci)-1].location._end.position + else: + start = loci[loc].location._start.position + stop = [loci[loc-1].location._end.position for loc in range(len(loci)) if loci[loc].qualifiers['locus_tag'][0] == locus_to_separate[to_split+1]] + subrecord = record[start:stop] + SeqIO.write(subrecord, "dissected/"+os.path.splitext(fl_name)[0]+"_subcluster_"+str(counter+1)+".gb", "genbank") + counter +=1 + + + +def split_gb_files(csv_file): + data_to_search = { + "antismash" : "Antismash", + "deepbgc" : "DeepBGC" , + "prism" : "PRISM", + "sempi" : "SEMPI", + "gecco" : "GECCO" + } + data = pd.read_csv(csv_file) + for index, row in data.iterrows(): + if pd.isna(row['group']) : continue + group_name = str('group_' + str(int(row['group']))) + if os.path.isdir(group_name): + pass + else: + print("Didn't found group: "+ group_name) + try: + file_to_open = data_to_search[row['by_software']] + except KeyError(): + print("Could not find software for "+str(group_name)+" : "+str(row['by_software'])) + r = re.compile(file_to_open+".*") + hit = list(filter(r.match, os.listdir(group_name)))[0] + file_to_open=group_name+"/"+hit + write_gbs(row, file_to_open, hit) + + +def main(): + if not os.path.isdir('dissected'): + os.mkdir('dissected') + # Parsing arguments + parser = argparse.ArgumentParser(description='Small helper script for BGCViz') + required = parser.add_argument_group('Required arguments') + required.add_argument("-i", "--input", help=".csv file with clusters to separate", required = True) + args = parser.parse_args() + + # Run grouping for gb files + split_gb_files(args.input) + # Bye message + print("Separation of clusters finished successfuly!") + print("Please find genbank files in 'dissected' folder") + + +if __name__ == "__main__": + main() + + diff --git a/inst/scripts/group.py b/inst/scripts/group.py index 92b9ae1..bf03e7e 100644 --- a/inst/scripts/group.py +++ b/inst/scripts/group.py @@ -104,7 +104,8 @@ def main(): # Parsing arguments parser = argparse.ArgumentParser(description='Small helper script for BGCViz') - parser.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome). Required") + required = parser.add_argument_group('Required arguments') + required.add_argument("-i", "--input", help="Input .gb/.gbk/.gbff file. One record per file will be used (as one genome)", required = True) parser.add_argument("--force", help="Force overwrite calculated results. [default = False]",action=argparse.BooleanOptionalAction) parser.add_argument("--quiet", help="Run silently. Clinker will run as usual. [default = False]",action=argparse.BooleanOptionalAction) parser.add_argument("-cl", "--run_clinker", help="Automatically runs clinker on groups. Results are stored in 'clinker_plots' folder. [default = False]", diff --git a/man/get_dissect_example.Rd b/man/get_dissect_example.Rd new file mode 100644 index 0000000..57c1b9b --- /dev/null +++ b/man/get_dissect_example.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_helpers.R +\name{get_dissect_example} +\alias{get_dissect_example} +\title{get_dissect_example} +\usage{ +get_dissect_example(write_to = getwd()) +} +\arguments{ +\item{write_to}{- path to write csv file to.} +} +\value{ +csv file, written to package settings +} +\description{ +Function, which downloads a csv file for dissect.py into specified path. +Use to separate regions into separate clusters +} +\examples{ +\dontrun{ +get_dissect_example(write_to) +} + +} From a4041ecbafa9e172a1ac10a8184e7ac7e6cb26d2 Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Wed, 19 Oct 2022 20:19:27 +0300 Subject: [PATCH 176/199] removed column other&other_probability in gecco data processing stage --- DESCRIPTION | 2 +- R/fct_filtering.R | 8 ++++---- R/fct_reading_functions.R | 4 ++-- R/fct_validation.R | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 69e408b..902bae0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,7 +35,7 @@ Imports: stringr, tidyr Encoding: UTF-8 -RoxygenNote: 7.2.0 +RoxygenNote: 7.2.1 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues Suggests: diff --git a/R/fct_filtering.R b/R/fct_filtering.R index 7ad8e37..cbcd0cc 100644 --- a/R/fct_filtering.R +++ b/R/fct_filtering.R @@ -67,17 +67,17 @@ filter_deepbgc <- function(deep_data, cluster_type, score_a_input, score_c_input #' @noRd filter_gecco <- function(gecco_data, score_cluster_gecco, score_average_gecco, domains_filter_gecco, prot_filter_gecco) { # Silence R CMD note - alkaloid <- nrps <- other <- + alkaloid <- nrps <- pks <- ripp <- saccharide <- terpene <- score <- Type2 <- Cluster_type <- score_a <- score_c <- num_domains <- num_prot <- NULL score_a_gecco <- apply(gecco_data %>% dplyr::select(c("average_p")), 1, function(x) max(x)) - score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps", "other", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) + score_c_gecco <- apply(gecco_data %>% dplyr::select(c("alkaloid", "nrps", "pks", "ripp", "saccharide", "terpene")), 1, function(x) max(x)) if (is.null(score_cluster_gecco)) { gecco_data <- gecco_data %>% dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::select(alkaloid, nrps, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% dplyr::mutate(Cluster_type = ifelse(score > 50 / 100, Type2, "under_threshold")) %>% dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% dplyr::filter( @@ -87,7 +87,7 @@ filter_gecco <- function(gecco_data, score_cluster_gecco, score_average_gecco, d } else { gecco_data <- gecco_data %>% dplyr::mutate(score = apply(gecco_data %>% - dplyr::select(alkaloid, nrps, other, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% + dplyr::select(alkaloid, nrps, pks, ripp, saccharide, terpene), 1, function(x) max(x))) %>% dplyr::mutate(Cluster_type = ifelse(score > as.numeric(score_cluster_gecco) / 100, Type2, "under_threshold")) %>% dplyr::mutate(Type2 = Cluster_type, score_a = score_a_gecco, score_c = score_c_gecco) %>% dplyr::filter( diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 8c5a75f..445fa57 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -48,12 +48,12 @@ read_gecco <- function(data) { gecco_data["Type2"] <- stringr::str_trim(tolower(gecco_data$Type)) drop_cols <- c( "alkaloid_probability", "polyketide_probability", "ripp_probability", "saccharide_probability", - "terpene_probability", "nrp_probability", "other_probability" + "terpene_probability", "nrp_probability" ) # Read data gecco_data <- gecco_data %>% dplyr::mutate( - pks = polyketide_probability, other = other_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, + pks = polyketide_probability, nrps = nrp_probability, alkaloid = alkaloid_probability, terpene = terpene_probability, saccharide = saccharide_probability, ripp = ripp_probability ) %>% dplyr::select(-dplyr::one_of(drop_cols)) diff --git a/R/fct_validation.R b/R/fct_validation.R index 0dfa485..1570774 100644 --- a/R/fct_validation.R +++ b/R/fct_validation.R @@ -163,12 +163,12 @@ validate_gecco_input <- function(data) { data_names <- names(data) col_names <- c( "start", "end", "average_p", "max_p", "type", "alkaloid_probability", "polyketide_probability", - "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability", + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "proteins", "domains" ) num_columns <- c( "start", "end", "average_p", "max_p", "alkaloid_probability", "polyketide_probability", - "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability", "other_probability" + "ripp_probability", "saccharide_probability", "terpene_probability", "nrp_probability" ) if (!("cluster" %in% stringr::str_to_lower(data_names))) { data$Cluster <- seq(1:dim(data)[1]) From afcaf830f585d9e2c1f695cc1bdb54fed77f07d5 Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Tue, 14 Feb 2023 15:20:25 +0200 Subject: [PATCH 177/199] adding rawdata as ripp_data-requires changing path to file; file with RiPPMiner data itself.R; Action button for user data and example data; Read_ripp in fct_reading_functions.R; Processing of ripp_data in app_server.R; --- DESCRIPTION | 3 +- R/app_server.R | 81 +++++++++++++++++++++++++++++++------- R/app_ui.R | 17 +++++++- R/fct_reading_functions.R | 35 +++++++++++++++- RiPP_masterfile.txt | 5 +++ data-raw/anti_data.R | 2 +- data-raw/ripp_data.R | 15 +++++++ data/ripp_data.rda | Bin 0 -> 354 bytes man/read_ripp.Rd | 19 +++++++++ 9 files changed, 159 insertions(+), 18 deletions(-) create mode 100644 RiPP_masterfile.txt create mode 100644 data-raw/ripp_data.R create mode 100644 data/ripp_data.rda create mode 100644 man/read_ripp.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 902bae0..40dccc1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -35,7 +35,7 @@ Imports: stringr, tidyr Encoding: UTF-8 -RoxygenNote: 7.2.1 +RoxygenNote: 7.2.3 URL: https://github.com/ostash-group/BGCViz BugReports: https://github.com/ostash-group/BGCViz/issues Suggests: @@ -50,3 +50,4 @@ Language: en-US VignetteBuilder: knitr Depends: R (>= 4.2.0) +LazyData: true diff --git a/R/app_server.R b/R/app_server.R index f705a43..5705725 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -14,7 +14,8 @@ app_server <- function(input, output, session) { check_to_rename <- shiny::reactive({ list( input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco, input$anti_sco, input$prism_sco + input$sempi_sco, input$anti_sco, input$prism_sco, + input$ripp_sco, input$ripp_data ) }) biocircos_listen <- shiny::reactive({ @@ -22,13 +23,15 @@ app_server <- function(input, output, session) { input$biocircos_color, vals$need_filter, input$label_color, input$label_color_class, input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, - vals$coloring_datatable + vals$coloring_datatable, + vals$ripp_data ) }) inputData <- shiny::reactive({ list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, - vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input + vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input, + vals$ripp_data_input ) }) dynamicInput <- shiny::reactive({ @@ -37,7 +40,8 @@ app_server <- function(input, output, session) { deep_reference <- shiny::reactive({ list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, - input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data + input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data, + vals$ripp_data ) }) @@ -65,11 +69,12 @@ app_server <- function(input, output, session) { gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = FALSE, computed = NULL, need_filter = FALSE, filter_data = FALSE, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = FALSE, can_plot_deep_ref = FALSE, - can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE + can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE, + ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL ) vals$computed <- list( - anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE + anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE, ripp = FALSE ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") @@ -82,24 +87,26 @@ app_server <- function(input, output, session) { # Variables, that holds data uploads boolean (so if data is present or not) data_uploads <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", - "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", + "ripp_data_input" ) data_uploads_inter <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", - "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input" + "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", + "ripp_data_input" ) # Universal beginings for variables, used in the app for different data - soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre") + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp") # The Namings, meaning how to label the data on the plots - soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder") + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder","RiPPMiner-Genome") # Dataframes undes vals$list, that stored the data - data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data") + data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data","ripp_data") # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE") + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "RiPP") # Used for deep reference 2 plot soft_datafr <- c( "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r" + "seg_df_ref_g", "seg_df_ref_r", "seg_df_ref_ri" ) vals$score_a <- 50 @@ -154,7 +161,42 @@ app_server <- function(input, output, session) { # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - + process_rippminer <- function(data, example_data = FALSE) { + if (example_data == TRUE) { + ripp_data <- data + } else { + ripp_data <- read_ripp(data) + } + vals$ripp_type <- ripp_data$Type2 + vals$ripp_data <- ripp_data + vals$ripp_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "RippMiner" = "RippMiner") + vals$choices$group_by <- c(vals$choices$group_by, "RippMiner" = "RippMiner") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "RippMiner" = "RippMiner") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "RippMiner" = "RippMiner") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "RippMiner" = "RippMiner") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "RippMiner" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "RippMiner" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "RippMiner" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "RippMiner" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "RippMiner" + ) + } + } + process_antismash <- function(data, example_data = FALSE) { if (example_data == TRUE) { anti_data <- data @@ -431,6 +473,10 @@ app_server <- function(input, output, session) { #---------------------------------------------------------------- ## Loading and processing of example data - ## ---------------------------------------------------------------- + shiny::observeEvent(input$ripp_sco, { + process_rippminer(BGCViz:::ripp_data, example_data = TRUE) + }) + shiny::observeEvent(input$anti_sco, { process_antismash(BGCViz:::anti_data, example_data = TRUE) }) @@ -1097,6 +1143,13 @@ app_server <- function(input, output, session) { # dplyr::filter while ploting then. shiny::observeEvent(inputData(), ignoreInit = TRUE, priority = 5, { # GENERATE DATA + if (vals$ripp_data_input == TRUE) { + ripp_data <- vals$ripp_data + anti_inter <- vals$ripp_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <- "chr" + } + if (vals$anti_data_input == TRUE) { anti_data <- vals$anti_data anti_inter <- vals$anti_data %>% diff --git a/R/app_ui.R b/R/app_ui.R index 2355f26..5e2ca33 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -148,9 +148,22 @@ app_ui <- function(request) { accept = ".tsv" ) ) + ), + div( + id = "id5", + shinydashboardPlus::box( + title = "Upload RippMiner-Genome data", + id = "upload_ripp_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("gene_data", + "Upload RippMiner-Genome data data", + accept = ".txt" + ) ) ) - ), + ) + ), shiny::fluidRow( tags$div( id = "upload_data2", @@ -193,6 +206,7 @@ app_ui <- function(request) { ) ) ), + div( id = "id4", shinydashboardPlus::box( @@ -207,6 +221,7 @@ app_ui <- function(request) { shiny::actionButton("gecco_sco", "Use Gecco example data from S.coelicolor"), shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), + shiny::actionButton("ripp_sco","Use RippMiner-Genome data example data from S.coelicolor"), shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) ) ) diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 445fa57..4d77675 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -1,6 +1,39 @@ + +#' #' @description A function, that reads RiPPMiner-Genome file txt +#' #' +#' #' @return csv file +#' #' +#' #' @noRd + +read_ripp <- function(data) { + ripp_data <- data + # CHANGING COLNAMES -- temporary + colnames(ripp_data) <-c("Cluster", "Type", "Start", "Stop") + #Validation of input + res_validation <- validate_basic_input(ripp_data) + if (!(res_validation[[1]])) { + ripp_data <- NULL + return(NULL) + } else { + ripp_data <- res_validation[[2]] + } + #ADDING CHROMOSOME COLUMN + ripp_data$Chromosome <- rep("GF", length(ripp_data$Cluster)) + #Type magic + ripp_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) + ripp_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) + #Mutate NAs + ripp_data <- mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) + + return(ripp_data) + +} + + + #' read_anti #' -#' @description A function, that reads antismash file +#' @description A function, that reads RRE-finder file #' #' @return csv file #' diff --git a/RiPP_masterfile.txt b/RiPP_masterfile.txt new file mode 100644 index 0000000..d55a2a1 --- /dev/null +++ b/RiPP_masterfile.txt @@ -0,0 +1,5 @@ +#ClusterNo. ClusterType From To +contig_1_Cluster1 LanthipeptideA 246868 272469 +contig_1_Cluster2 Linaridin 4886990 4940861 +contig_1_Cluster3 LanthipeptideC_D 7407798 7459926 +contig_1_Cluster4 LanthipeptideA 7681180 7705273 diff --git a/data-raw/anti_data.R b/data-raw/anti_data.R index fc5246c..a15ef83 100644 --- a/data-raw/anti_data.R +++ b/data-raw/anti_data.R @@ -5,4 +5,4 @@ anti_data$chromosome <- rep("A", length(anti_data$Cluster)) # Type magic anti_data$Type <- stringr::str_trim(tolower(anti_data$Type)) anti_data["Type2"] <- stringr::str_trim(tolower(anti_data$Type)) -usethis::use_data(anti_data, overwrite = TRUE) +usethis::use_data(ripp_data, overwrite = TRUE) diff --git a/data-raw/ripp_data.R b/data-raw/ripp_data.R new file mode 100644 index 0000000..ef2928f --- /dev/null +++ b/data-raw/ripp_data.R @@ -0,0 +1,15 @@ +library("dplyr") +## code to prepare RippMining-Genome goes here +ripp_data <- utills::read.table("/home/lev/Uni/genome-finder/RiPP_masterfile.txt", header = FALSE) + +colnames(ripp_data) <-c("Cluster", "Type", "Start", "Stop") + + +#ADDING CHROMOSOME COLUMN +ripp_data$Chromosome <- rep("GF", length(ripp_data$Cluster)) +#Type magic +ripp_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) +ripp_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) +#Mutate NAs +ripp_data <- mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) +usethis::use_data(ripp_data, overwrite = TRUE) \ No newline at end of file diff --git a/data/ripp_data.rda b/data/ripp_data.rda new file mode 100644 index 0000000000000000000000000000000000000000..13c355dd40af0f68b5748562ff3c852c5f6c18a2 GIT binary patch literal 354 zcmV-o0iFIrT4*^jL0KkKS=-T3U;qKj|L*?tNB{sqKjJN!A3(2X{-8hrFa!Z01OWs9 z00poCHUkip$kCc0(-6b}FbKd+06k3xQjgMuO#lGM02&%-&@li2ib*5UFig~FXlMWd zriPgsWN5@l;4+Lb05cY;N{~TRWFQyRIIYge2~P+^I02@*bFKY3t%w^CfvbO1)S&?= zg&PooU_wJK3HWbuaq@EI%RzX#X=HRp6|}h*YJi#mAOs*$!Re>FMjdn~NUH#~Apw5i zK`}+xQ97r-g}nZEBBUANHt`|je;>FFupN@h9k?Z?C5Kg9c~=h5^uQ6*&Syl0npdSpcH#k2;v$bf=^0tXd>UXV5zy$xhmbM{amffoKQ A3jhEB literal 0 HcmV?d00001 diff --git a/man/read_ripp.Rd b/man/read_ripp.Rd new file mode 100644 index 0000000..ce237af --- /dev/null +++ b/man/read_ripp.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_reading_functions.R +\name{read_ripp} +\alias{read_ripp} +\title{#' @description A function, that reads RiPPMiner-Genome file txt +#' +#' @return csv file +#' +#' @noRd} +\usage{ +read_ripp(data) +} +\description{ +#' @description A function, that reads RiPPMiner-Genome file txt +#' +#' @return csv file +#' +#' @noRd +} From f13df158a1298c433cfedd03081297d5d0121977 Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Sun, 19 Feb 2023 10:15:02 +0200 Subject: [PATCH 178/199] changed URLs in data-raw,fixed 'misleading code' in data-raw --- R/app_server.R | 4 ++-- R/fct_reading_functions.R | 4 ++-- R/sysdata.rda | Bin 36080 -> 45714 bytes RiPP_masterfile.txt | 5 ----- data-raw/anti_data.R | 5 +++-- data-raw/arts_data.R | 6 ++++-- data-raw/deep_data.R | 5 +++-- data-raw/gecco_data.R | 5 +++-- data-raw/prism_data.R | 4 ++-- data-raw/prism_supp_data.R | 4 +++- data-raw/ripp_data.R | 17 +++++++++++------ data-raw/rre_data.R | 6 ++++-- data-raw/sempi_data.R | 6 ++++-- data-raw/use_data_internally.R | 2 +- data/ripp_data.rda | Bin 354 -> 0 bytes dev/02_dev.R | 2 +- 16 files changed, 43 insertions(+), 32 deletions(-) delete mode 100644 RiPP_masterfile.txt delete mode 100644 data/ripp_data.rda diff --git a/R/app_server.R b/R/app_server.R index 5705725..54cdb23 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -1145,9 +1145,9 @@ app_server <- function(input, output, session) { # GENERATE DATA if (vals$ripp_data_input == TRUE) { ripp_data <- vals$ripp_data - anti_inter <- vals$ripp_data %>% + ripp_inter <- vals$ripp_data %>% dplyr::select(Start, Stop) - anti_inter$seqnames <- "chr" + ripp_inter$seqnames <- "chr" } if (vals$anti_data_input == TRUE) { diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 4d77675..2d71fab 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -18,12 +18,12 @@ read_ripp <- function(data) { ripp_data <- res_validation[[2]] } #ADDING CHROMOSOME COLUMN - ripp_data$Chromosome <- rep("GF", length(ripp_data$Cluster)) + ripp_data$chromosome <- rep("GF", length(ripp_data$Cluster)) #Type magic ripp_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) ripp_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) #Mutate NAs - ripp_data <- mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) + ripp_data <- dplyr::mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) return(ripp_data) diff --git a/R/sysdata.rda b/R/sysdata.rda index 319f0eecb03b35ba6c7dd897b659735b10bb00f5..2f541fd45c8c29313614565b243aeb2510d80e58 100644 GIT binary patch literal 45714 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 literal 36080 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 XMF%JpLQXhT|M% dplyr::mutate(pks = polyketide, nrps = nrp) %>% dplyr::select(-dplyr::one_of(drop_cols)) -usethis::use_data(deep_data, overwrite = TRUE) +# usethis::use_data(deep_data, overwrite = TRUE) +## Look at use_data_internally.R file! \ No newline at end of file diff --git a/data-raw/gecco_data.R b/data-raw/gecco_data.R index 0be897a..143ad36 100644 --- a/data-raw/gecco_data.R +++ b/data-raw/gecco_data.R @@ -1,5 +1,5 @@ ## code to prepare `gecco_data` dataset goes here -gecco_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_gecco.tsv") +gecco_data <- utils::read.delim("https://raw.githubusercontent.com/ostash-group/BGCViz-datasets/main/example_data/sco_gecco.tsv") # Silence R CMD note polyketide_probability <- other_probability <- nrp_probability <- alkaloid_probability <- @@ -29,4 +29,5 @@ gecco_data$num_prot <- sapply(stringr::str_split(as.character(gecco_data$protein gecco_data$num_domains <- sapply(stringr::str_split(as.character(gecco_data$domains), ";"), length) names(gecco_data)[names(gecco_data) == "start"] <- "Start" names(gecco_data)[names(gecco_data) == "end"] <- "Stop" -usethis::use_data(gecco_data, overwrite = TRUE) +# usethis::use_data(gecco_data, overwrite = TRUE) +## Look at use_data_internally.R file! \ No newline at end of file diff --git a/data-raw/prism_data.R b/data-raw/prism_data.R index a20e8b0..63b3c25 100644 --- a/data-raw/prism_data.R +++ b/data-raw/prism_data.R @@ -2,5 +2,5 @@ # Function ro parse prism_json library(magrittr) source("R/fct_reading_processing.R") -prism_data <- process_prism_json_suppl(rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[1]] -usethis::use_data(prism_data, overwrite = TRUE, internal = TRUE) +prism_data <- process_prism_json_suppl(rjson::fromJSON(file = "https://raw.githubusercontent.com/ostash-group/BGCViz-datasets/main/example_data/sco_prism.json"))[[1]] +# usethis::use_data(prism_data, overwrite = TRUE, internal = TRUE) diff --git a/data-raw/prism_supp_data.R b/data-raw/prism_supp_data.R index c216686..e691141 100644 --- a/data-raw/prism_supp_data.R +++ b/data-raw/prism_supp_data.R @@ -2,4 +2,6 @@ library(magrittr) source("R/fct_reading_processing.R") prism_supp_data <- process_prism_json_suppl(rjson::fromJSON(file = "https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_prism.json"))[[2]] -usethis::use_data(prism_supp_data, overwrite = TRUE) +# usethis::use_data(prism_supp_data, overwrite = TRUE) +## Look at use_data_internally.R file! + diff --git a/data-raw/ripp_data.R b/data-raw/ripp_data.R index ef2928f..0cde35b 100644 --- a/data-raw/ripp_data.R +++ b/data-raw/ripp_data.R @@ -1,15 +1,20 @@ -library("dplyr") -## code to prepare RippMining-Genome goes here -ripp_data <- utills::read.table("/home/lev/Uni/genome-finder/RiPP_masterfile.txt", header = FALSE) +## code to prepare `ripp_data` dataset goes here +ripp_data <- utils::read.table("https://raw.githubusercontent.com/2061Tsarin/BGCViz-datasets/main/example_data/sco_ripp.txt", header = FALSE) colnames(ripp_data) <-c("Cluster", "Type", "Start", "Stop") #ADDING CHROMOSOME COLUMN -ripp_data$Chromosome <- rep("GF", length(ripp_data$Cluster)) +ripp_data$chromosome <- rep("GF", length(ripp_data$Cluster)) #Type magic ripp_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) ripp_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) #Mutate NAs -ripp_data <- mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) -usethis::use_data(ripp_data, overwrite = TRUE) \ No newline at end of file +ripp_data <- dplyr::mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) + + +# usethis::use_data(ripp_data, overwrite = TRUE) +## Look at use_data_internally.R file! + + + diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R index 78b87cc..25aaf49 100644 --- a/data-raw/rre_data.R +++ b/data-raw/rre_data.R @@ -1,7 +1,7 @@ ## code to prepare `rre_data` dataset goes here library(magrittr) Gene.name <- Coordinates <- NULL # Silence R CMD error -rre_data <- utils::read.delim("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_rre.txt") +rre_data <- utils::read.delim("https://github.com/ostash-group/BGCViz-datasets/blob/main/example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- rre_data %>% tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% @@ -18,4 +18,6 @@ rre_data$Start <- as.numeric(rre_data$Start) rre_data$Stop <- as.numeric(rre_data$Stop) # Store rre data into local variable rre_data <- data.frame(rre_data) -usethis::use_data(rre_data, overwrite = TRUE) +# usethis::use_data(rre_data, overwrite = TRUE) +## Look at use_data_internally.R file! + diff --git a/data-raw/sempi_data.R b/data-raw/sempi_data.R index 17a0afc..e4e469f 100644 --- a/data-raw/sempi_data.R +++ b/data-raw/sempi_data.R @@ -1,4 +1,6 @@ ## code to prepare `sempi_data` dataset goes here -sempi_data <- utils::read.csv("https://raw.githubusercontent.com/pavlohrab/BGCViz-datasets/main/example_data/sco_sempi.csv") +sempi_data <- utils::read.csv("https://raw.githubusercontent.com/ostash-group/BGCViz-datasets/main/example_data/sco_sempi.csv") sempi_data["Type2"] <- stringr::str_trim(tolower(sempi_data$Type)) -usethis::use_data(sempi_data, overwrite = TRUE) +# usethis::use_data(sempi_data, overwrite = TRUE) +## Look at use_data_internally.R file! + diff --git a/data-raw/use_data_internally.R b/data-raw/use_data_internally.R index dcb36fc..ac61d38 100644 --- a/data-raw/use_data_internally.R +++ b/data-raw/use_data_internally.R @@ -1 +1 @@ -usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, overwrite = TRUE, internal = TRUE) +usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data internal = TRUE) diff --git a/data/ripp_data.rda b/data/ripp_data.rda deleted file mode 100644 index 13c355dd40af0f68b5748562ff3c852c5f6c18a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmV-o0iFIrT4*^jL0KkKS=-T3U;qKj|L*?tNB{sqKjJN!A3(2X{-8hrFa!Z01OWs9 z00poCHUkip$kCc0(-6b}FbKd+06k3xQjgMuO#lGM02&%-&@li2ib*5UFig~FXlMWd zriPgsWN5@l;4+Lb05cY;N{~TRWFQyRIIYge2~P+^I02@*bFKY3t%w^CfvbO1)S&?= zg&PooU_wJK3HWbuaq@EI%RzX#X=HRp6|}h*YJi#mAOs*$!Re>FMjdn~NUH#~Apw5i zK`}+xQ97r-g}nZEBBUANHt`|je;>FFupN@h9k?Z?C5Kg9c~=h5^uQ6*&Syl0npdSpcH#k2;v$bf=^0tXd>UXV5zy$xhmbM{amffoKQ A3jhEB diff --git a/dev/02_dev.R b/dev/02_dev.R index 5d69697..e70b0de 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -80,7 +80,7 @@ usethis::use_data_raw( name = "sempi_data", open = FALSE ) usethis::use_data_raw( name = "arts_data", open = FALSE ) usethis::use_data_raw( name = "deep_data", open = FALSE ) usethis::use_data_raw( name = "rre_data", open = FALSE ) - +usethis::use_data_raw( name = "ripp_data", open = FALSE) ## Tests ---- ## Add one line by test you want to create usethis::use_test("utils_helpers") From 0f6b46356f704c6ecf6afda2e582b5eb2a6b113f Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Thu, 23 Feb 2023 12:35:29 +0200 Subject: [PATCH 179/199] Annotation ref plot of ripp, doesnt work in combination with another data --- R/app_server.R | 14 +++++++++++--- R/mod_deep_reference_2.R | 7 +++++++ R/mod_deepbgc_plots.R | 32 ++++++++++++++++++++++++++------ R/utils_deep_reference.R | 17 +++++++++++++++++ data-raw/arts_data.R | 2 +- data-raw/rre_data.R | 2 +- data-raw/use_data_internally.R | 2 +- 7 files changed, 64 insertions(+), 12 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 54cdb23..bcffa45 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -70,7 +70,7 @@ app_server <- function(input, output, session) { need_filter = FALSE, filter_data = FALSE, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = FALSE, can_plot_deep_ref = FALSE, can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE, - ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL + ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL, seg_df_ref_ri = NULL ) vals$computed <- list( @@ -98,7 +98,7 @@ app_server <- function(input, output, session) { # Universal beginings for variables, used in the app for different data soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp") # The Namings, meaning how to label the data on the plots - soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder","RiPPMiner-Genome") + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder","RippMiner") # Dataframes undes vals$list, that stored the data data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data","ripp_data") # Used in barplot on summarise tab + Annotation on chromosome plots @@ -664,6 +664,15 @@ app_server <- function(input, output, session) { shinyjs::hideElement(selector = "#anti_hybrid") } }) + + # Show ripp_hybrid options + shiny::observeEvent(vals$ripp_data_input, { + if (vals$ripp_data_input == TRUE){ + shinyjs::showElement(selector = "#ripp_hybrid") + } else { + shinyjs::hideElement(selector = "#ripp_hybrid") + } + }) # Show prism options if data is available # If hide anti is FALSE (checkbox), then show them # Only if prism_json file, then show Prism-Supp @@ -1160,7 +1169,6 @@ app_server <- function(input, output, session) { deep_data <- vals$deep_data deep_inter <- vals$deep_data %>% dplyr::select(Start, Stop) - deep_inter$seqnames <- "chr" } if (vals$rre_data_input == TRUE) { diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 2128ce6..2bd56c2 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -71,6 +71,13 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { ) plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) + if (vals$ripp_data_input == TRUE){ + plot <- plot + + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_ri, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } if (vals$anti_data_input == TRUE) { plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_a, ggplot2::aes(x, y, diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 63e2100..0e8a779 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -80,7 +80,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) + shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE) | (vals$ripp_data_input == TRUE))) # Create empty dataframe to populate later @@ -120,7 +120,12 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { anti_inter <- shiny::isolate(vals$sempi_data) %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } + } else if (input$ref_comparison == "RIPP"){ + ripp_inter <- shiny::isolate(vals$sempi_data) %>% + dplyr::select(Start, Stop) + ripp_inter$seqnames <- "chr" + } + # Get the interception of two matrices @@ -146,6 +151,10 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") + } else if (input$ref_comparsion == "RIPP"){ + used_antismash <- length(shiny::isolate(vals$ripp_data$Cluster)) - inter_bgc + cols <-c("Only RIPP", "DeepBGC+RIPP", "Only DeepBGC") + title <- ggplot2::ggtitle("Comparsion of RIPP and DeepBGC annotations at given score threshold") } # Combine all vectors into one dataframe @@ -207,9 +216,9 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { test <- test %>% dplyr::mutate( Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+PRISM` + test$`Only PRISM`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + # Annotation rate = clusters, annotated by PRISM+deepBGC/ clusters annotated only by prism (We assume that prism annotation is full and reference) Annotation_rate = test$`DeepBGC+PRISM` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + # Skip rate = clusters, annotated only by PRISM/ all prism clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only PRISM` / length(data$Cluster) ) } else if (input$ref_comparison == "SEMPI") { @@ -218,11 +227,22 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { test <- test %>% dplyr::mutate( Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+SEMPI` + test$`Only SEMPI`), - # Annotation rate = clusters, annotated by antismash+deepBGC/ clusters annotated only by antismash (We assume that antismash annotation is full and reference) + # Annotation rate = clusters, annotated by SEMPI+deepBGC/ clusters annotated only by sempi (We assume that sempi annotation is full and reference) Annotation_rate = test$`DeepBGC+SEMPI` / length(data$Cluster), - # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed + # Skip rate = clusters, annotated only by SEMPI/ all sempi clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only SEMPI` / length(data$Cluster) ) + } else if (input$ref_comparsion == "RIPP"){ + data <- vals$ripp_data + title <- ggplot2::ggtitle("Rates of DeepBGC/RIPP data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+RIPP` + test$`Only SEMPI`), + + Annotation_rate = test$`DeepBGC+RIPP` / length(data$Cluster), + + Skip_rate = test$`Only RIPP`/ length(data$CLuster) + ) } # Calculate rates and plot interactive plot with plotly diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index d40a2a1..bbbde6f 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -15,6 +15,23 @@ geom_anti <- function(data, rre_more) { ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } +#' geom_anti +#' +#' @description A function, that returns rippminer-genome geom with the legend, +#' specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_ripp <- function(data, rre_more) { + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) +} #' geom_prism #' #' @description A function, that returns prism geom with the legend, specific to this software (to show on mouse hover). diff --git a/data-raw/arts_data.R b/data-raw/arts_data.R index c06a05f..f3fe78c 100644 --- a/data-raw/arts_data.R +++ b/data-raw/arts_data.R @@ -1,5 +1,5 @@ ## code to prepare `arts_data` dataset goes here -arts_data <- utils::read.csv("https://github.com/ostash-group/BGCViz-datasets/blob/main/example_data/sco_arts.csv") +arts_data <- utils::read.csv("https://raw.githubusercontent.com/ostash-group/BGCViz-datasets/main/example_data/sco_arts.csv") # usethis::use_data(arts_data, overwrite = TRUE) ## Look at use_data_internally.R file! diff --git a/data-raw/rre_data.R b/data-raw/rre_data.R index 25aaf49..64e1025 100644 --- a/data-raw/rre_data.R +++ b/data-raw/rre_data.R @@ -1,7 +1,7 @@ ## code to prepare `rre_data` dataset goes here library(magrittr) Gene.name <- Coordinates <- NULL # Silence R CMD error -rre_data <- utils::read.delim("https://github.com/ostash-group/BGCViz-datasets/blob/main/example_data/sco_rre.txt") +rre_data <- utils::read.delim("https://raw.githubusercontent.com/ostash-group/BGCViz-datasets/main/example_data/sco_rre.txt") # Clean RRE data. Extract coordinates and Locus tag with double underscore delimiter (__) rre_data <- rre_data %>% tidyr::separate(Gene.name, c("Sequence", "Coordinates", "Locus_tag"), sep = "__") %>% diff --git a/data-raw/use_data_internally.R b/data-raw/use_data_internally.R index ac61d38..6a3f0b8 100644 --- a/data-raw/use_data_internally.R +++ b/data-raw/use_data_internally.R @@ -1 +1 @@ -usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data internal = TRUE) +usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data overwrite = TRUE, internal = TRUE) From e7e0737c5d7a1eb1dede02e512d1e750e5a84811 Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Thu, 23 Feb 2023 13:55:26 +0200 Subject: [PATCH 180/199] mend --- R/mod_gecco_plots.R | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 4b37551..c865251 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -78,7 +78,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ Skip_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) + shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) |(vals$ripp_data_input == TRUE)| (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -118,6 +118,10 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ anti_inter <- vals$sempi_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" + } else if(input$ref_comparison_ripp == "RippMiner") { + anti_inter <- vals$ripp_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <-"chr" } @@ -147,6 +151,10 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ used_antismash <- length(vals$sempi_data$Cluster) - inter_bgc cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "RippMiner") { + used_antismash <- lenghth(vals$anti_data$Cluster) - inter_bgc + cols <- c("Only RippMiner", "GECCO+RippMiner", "Only RippMiner") + title <- ggplot2::ggtitle("Comparsion of RippMiner-genome and GECCO annotations at given score threshold") } # Combine all vectors into one dataframe @@ -222,6 +230,17 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only SEMPI` / length(data$Cluster) ) + } else if (input$ref_comparison_ripp == "RippMiner"){ + data <- vals$ripp_data + title <- ggplot2::ggtitle("Rates of GECCO/RippMinner data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only GECCO`/ (test$`GECCO+RippMinner` + test$`Only RippMiner`), + # + Annotation_rate = test$`GECCO+RippMiner`/ length(data$Cluster), + # + Skip_rate = test$`Only RippMiner`/length(data$Cluster) + ) } # Calculate rates and plot interactive plot with plotly From 76532f5d5787facee31d8113c79f6a67dccf683a Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Thu, 23 Feb 2023 14:14:43 +0200 Subject: [PATCH 181/199] mend --- R/mod_deepbgc_plots.R | 16 ++++++++-------- R/utils_deep_reference.R | 2 ++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 0e8a779..3b20597 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -120,7 +120,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { anti_inter <- shiny::isolate(vals$sempi_data) %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if (input$ref_comparison == "RIPP"){ + } else if (input$ref_comparison == "RippMiner"){ ripp_inter <- shiny::isolate(vals$sempi_data) %>% dplyr::select(Start, Stop) ripp_inter$seqnames <- "chr" @@ -151,9 +151,9 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } else if (input$ref_comparsion == "RIPP"){ + } else if (input$ref_comparsion == "RipMiner"){ used_antismash <- length(shiny::isolate(vals$ripp_data$Cluster)) - inter_bgc - cols <-c("Only RIPP", "DeepBGC+RIPP", "Only DeepBGC") + cols <-c("Only RippMiner", "DeepBGC+RippMiner", "Only DeepBGC") title <- ggplot2::ggtitle("Comparsion of RIPP and DeepBGC annotations at given score threshold") } @@ -232,16 +232,16 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { # Skip rate = clusters, annotated only by SEMPI/ all sempi clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only SEMPI` / length(data$Cluster) ) - } else if (input$ref_comparsion == "RIPP"){ + } else if (input$ref_comparsion == "RippMiner"){ data <- vals$ripp_data - title <- ggplot2::ggtitle("Rates of DeepBGC/RIPP data annotation") + title <- ggplot2::ggtitle("Rates of DeepBGC/RippMiner data annotation") test <- test %>% dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+RIPP` + test$`Only SEMPI`), + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+RippMiner` + test$`Only SEMPI`), - Annotation_rate = test$`DeepBGC+RIPP` / length(data$Cluster), + Annotation_rate = test$`DeepBGC+RippMiner` / length(data$Cluster), - Skip_rate = test$`Only RIPP`/ length(data$CLuster) + Skip_rate = test$`Only RippMiner`/ length(data$CLuster) ) } diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index bbbde6f..a5fdbcf 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -195,6 +195,8 @@ add_more_annot <- function(seg_df, plot, soft_names, index, rre_more) { plot <- plot + geom_rre(seg_df, rre_more) } else if (soft_names[index] == "gecco") { plot <- plot + geom_gecco(seg_df) + } else if (soft_names[index] == "ripp"){ + plot <- plot + geom_gecco(seg_df) } return(plot) } else { From e7a4e8cec2fd915a039aa1b8b7c8e31429441485 Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Fri, 24 Feb 2023 22:13:07 +0200 Subject: [PATCH 182/199] RippMiner: processing user data --- R/app_server.R | 40 ++++++++++++++++++++++++++++++++++++++-- R/app_ui.R | 4 ++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index bcffa45..578ff59 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -102,7 +102,7 @@ app_server <- function(input, output, session) { # Dataframes undes vals$list, that stored the data data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data","ripp_data") # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "RiPP") + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "Ripp") # Used for deep reference 2 plot soft_datafr <- c( "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", @@ -508,6 +508,14 @@ app_server <- function(input, output, session) { ## ---------------------------------------------------------------- ## Loading and processing user data - ## ---------------------------------------------------------------- + + shiny::observeEvent(input$ripp_data, { + + # Read data + ripp_data <- utils::read.delim(input$ripp_data$datapath) + process_rippminer(ripp_data) + }) + shiny::observeEvent(input$anti_data, { disable_event_logic() # Read data @@ -973,7 +981,7 @@ app_server <- function(input, output, session) { "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", - "ranking_barplot_box", "group_table_box", "upload_anti_box", "upload_prism_box", + "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_prism_box", "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", "download_data_box", "gecco_filtering_box", "deep_filtering_box" @@ -996,6 +1004,13 @@ app_server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code + shiny::observeEvent(input$ripp_hybrid, ignoreInit = TRUE, { + if (input$ripp_hybrid == TRUE) { + vals$ripp_data$Type2 <- hybrid_col(vals$ripp_data) + } else { + vals$ripp_data$Type2 <- vals$ripp_type + } + }) shiny::observeEvent(input$anti_hybrid, ignoreInit = TRUE, { if (input$anti_hybrid == TRUE) { vals$anti_data$Type2 <- hybrid_col(vals$anti_data) @@ -1046,6 +1061,14 @@ app_server <- function(input, output, session) { prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } + if (vals$ripp_data_input == TRUE) { + ripp_data <- vals$ripp_data + res <- rename_vector(ripp_data, rename_data, vals$renaming_notification) + vals$ripp_type <- res[[1]] + vals$renaming_notification <-res[[2]] + ripp_data["Type2"] <- vals$ripp_data + vals$ripp_data <- ripp_data + } shinyjs::showElement(selector = "#reset_name") shinyjs::hideElement(selector = "#rename") vals$renamed <- TRUE @@ -1083,12 +1106,25 @@ app_server <- function(input, output, session) { prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } + if (vals$ripp_data_input == TRUE) { + ripp_data <- vals$ripp_data + res <- rename_vector(ripp_data, rename_data, vals$renaming_notification) + vals$ripp_type <- res[[1]] + vals$renaming_notification <-res[[2]] + ripp_data["Type2"] <- vals$ripp_data + vals$ripp_data <- ripp_data + } }) # Reset the renaming. Uncheck the hybrid checkboxes shiny::observeEvent(input$reset_name, { vals$anti_data["Type2"] <- vals$anti_data["Type"] vals$sempi_data["Type2"] <- vals$sempi_data["Type"] vals$ prism_data["Type2"] <- vals$ prism_data["Type"] + vals$ripp_data["Type2"] <- vals$ripp_data["Type"] + if (input$ripp_hybrid == TRUE) { + shiny::showNotification(paste("RippMiner cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) + shiny::showNotification(inputId ="ripp_hybrid", value = FALSE) + } if (input$anti_hybrid == TRUE) { shiny::showNotification(paste("Antismash cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10) shiny::updateCheckboxInput(inputId = "anti_hybrid", value = FALSE) diff --git a/R/app_ui.R b/R/app_ui.R index 5e2ca33..53d3d0d 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -156,8 +156,8 @@ app_ui <- function(request) { id = "upload_ripp_box", collapsible = TRUE, closable = TRUE, - shiny::fileInput("gene_data", - "Upload RippMiner-Genome data data", + shiny::fileInput("ripp_data", + "Upload RippMiner-Genome data", accept = ".txt" ) ) From e5ae49d392bb7ea5981215cd0d1c8765f724f2fb Mon Sep 17 00:00:00 2001 From: Lev Tsarin Date: Sun, 12 Mar 2023 15:00:50 +0200 Subject: [PATCH 183/199] fully functional RippMiner-genome analysis --- R/app_server.R | 6 +++--- R/mod_group_table.R | 3 ++- inst/extdata/rename.csv | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 578ff59..fd25030 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -98,7 +98,7 @@ app_server <- function(input, output, session) { # Universal beginings for variables, used in the app for different data soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp") # The Namings, meaning how to label the data on the plots - soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder","RippMiner") + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder", "RippMiner") # Dataframes undes vals$list, that stored the data data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data","ripp_data") # Used in barplot on summarise tab + Annotation on chromosome plots @@ -1558,8 +1558,8 @@ app_server <- function(input, output, session) { index <- index + 1 } - - lett <- rev(LETTERS)[1:9] + lett <- rev(LETTERS)[1:(length(data_uploads)+1)] + tooltip <- c( "Software", "ID", "Start", "Stop", "Type", "num_domains", "deepbgc_score", "activity", "Score", "E_value", diff --git a/R/mod_group_table.R b/R/mod_group_table.R index af992c1..345c068 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -86,7 +86,8 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami d = paste(eval(as.name(excluded_names[4])), collapse = ","), e = paste(eval(as.name(excluded_names[5])), collapse = ","), f = paste(eval(as.name(excluded_names[6])), collapse = ","), - g = paste(eval(as.name(excluded_names[7])), collapse = ",") + g = paste(eval(as.name(excluded_names[7])), collapse = ","), + h = paste(eval(as.name(excluded_names[8])), collapse = ",") ) colnames(data) <- c(abbr[i], excluded_names) for (p in abbr) { diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv index 50148ff..8b4d5d6 100644 --- a/inst/extdata/rename.csv +++ b/inst/extdata/rename.csv @@ -7,7 +7,7 @@ pentangular_polyphenol,other,melanin,#fb9a99,,GECCO nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp angucycline,pks,alkaloid,#ff7f00,,ARTS -butyrolactone,ripp,hybrid,#cab2d6,, +butyrolactone,ripp,hybrid,#cab2d6,,RippMiner class_i_lantipeptide,ripp,core,#6a3d9a,, lasso_peptide,ripp,regulatory,#ffff99,, nis_synthase,other,resistance,#b15928,, From 02d770adcb2b510602a31bdc58de6b0b645fca39 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Wed, 20 Sep 2023 17:15:49 +0300 Subject: [PATCH 184/199] ARTS tree sidemenu created --- R/app_server.R | 7 +++++++ R/app_ui.R | 9 ++++++++- R/mod_arts_tree.R | 35 +++++++++++++++++++++++++++++++++++ README.Rmd | 4 ++++ 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 R/mod_arts_tree.R diff --git a/R/app_server.R b/R/app_server.R index fd25030..ab925fb 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -786,6 +786,13 @@ app_server <- function(input, output, session) { shinydashboard::menuItem("Summarize interception", tabName = "summarize_sidemenu", icon = icon("fas fa-chart-bar")) } }) + output$arts_tree_sidemenu_out <- shinydashboard::renderMenu( + { + if (vals$arts_data_input == TRUE){ + shinydashboard::menuItem('ARTS tree', tabName = "arts_tree_sidemenu", icon = icon("tree")) + } + } + ) output$deep_filter_box <- shiny::renderUI({ if (vals$deep_data_input == TRUE) { diff --git a/R/app_ui.R b/R/app_ui.R index 53d3d0d..1ac4055 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -23,6 +23,7 @@ app_ui <- function(request) { shinydashboard::menuItemOutput("anno_sidemenu_out"), shinydashboard::menuItemOutput("biocircos_sidemenu_out"), shinydashboard::menuItemOutput("summarize_sidemenu_out"), + shinydashboard::menuItemOutput("arts_tree_sidemenu_out"), shinydashboard::menuItem( tabName = "restore_boxes", actionButton("restore_box", "Restore all boxes", class = "bg-success") @@ -52,7 +53,6 @@ app_ui <- function(request) { tabName = "deep_sidemenu", mod_deepbgc_plots_ui("deep_barplot_ui_1"), sortable::sortable_js("deep_data1", options = sortable::sortable_options(swap = TRUE, group = "deep_data")), - sortable::sortable_js("deep_data2", options = sortable::sortable_options(swap = TRUE, group = "deep_data")) ), shinydashboard::tabItem( tabName = "gecco_sidemenu", @@ -81,6 +81,13 @@ app_ui <- function(request) { sortable::sortable_js("biocircos_data1", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")), sortable::sortable_js("biocircos_data2", options = sortable::sortable_options(swap = TRUE, group = "biocircos_data")) ), + shinydashboard::tabItem( + tabName = "arts_tree_sidemenu", + mod_arts_tree_ui("arts_tree_1"), + sortable::sortable_js("arts_tree_data1", options = sortable::sortable_options(swap = TRUE, group = "arts_tree_data")), + sortable::sortable_js("arts_tree_data2", options = sortable::sortable_options(swap = TRUE, group = "arts_tree_data")), + + ), shinydashboard::tabItem( tabName = "summarize_sidemenu", shiny::fluidRow( diff --git a/R/mod_arts_tree.R b/R/mod_arts_tree.R new file mode 100644 index 0000000..f3376cc --- /dev/null +++ b/R/mod_arts_tree.R @@ -0,0 +1,35 @@ +#' ARTS tree UI functions +#' +#' @description A shiny Module. +#' +#' @param id,input,output,session Internal parameters for {shiny}. +#' +#' @noRd +#' +#' @importFrom shiny NS tagList + + +mod_arts_tree_ui <- function(id) +{ + ns <- NS(id) + tagList( + shiny::fluidRow( + tags$div( + id = "arts_tree_data1", + div( + id = "id1", + shinydashboardPlus::box( + title = "ARTS tree", + id = "arts_tree_box", + collapsible = TRUE, + closable = TRUE, + width = 12 + ) + + ) + ) + + ) + + ) +} \ No newline at end of file diff --git a/README.Rmd b/README.Rmd index fa139a8..872e611 100644 --- a/README.Rmd +++ b/README.Rmd @@ -60,6 +60,10 @@ Currently, the app supports annotations from such sources: 6. ARTS (raw tsv files) +7. Gecco () + +7. RiPPMiner-genome (cured txt file) + # Contributing From faf442a4cad6d4571a9b33fb8154cb6030e3d573 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Tue, 26 Sep 2023 17:59:05 +0300 Subject: [PATCH 185/199] WIP --- .DS_Store | Bin 0 -> 8196 bytes R/app_server.R | 2 +- R/app_ui.R | 10 +++++++++- R/fct_format_transformation.R | 8 ++++++++ R/mod_arts_tree.R | 16 +++++++++++++--- data-raw/ripp_data.R | 3 +-- data-raw/use_data_internally.R | 2 +- inst/.DS_Store | Bin 0 -> 6148 bytes rsconnect/shinyapps.io/.DS_Store | Bin 0 -> 6148 bytes 9 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 .DS_Store create mode 100644 inst/.DS_Store create mode 100644 rsconnect/shinyapps.io/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b826a9c123722fff3b50039ffd26197ffb3004d7 GIT binary patch literal 8196 zcmeHMv2GJV5S@+BmLnuc=LjXr)hK|{LUTl>NP|%F0U@z1gYfwxY!b>-3TSEQ^Behq zbbJ971%e_-6m%4bH@lm=ncUf>g_K=scTPJq``*3X^J&gRWVYY-w}@7WsEy8cR{DDb~1fOj^x_Kf$w^M)}f5EQtP z3h?hkjLtUkHh0$kbYQS00BnS5+i<D^xe1&2xI@XVEIGM!RFa`yJ0#yaLc8}-*4e1q4W&LhW_Mb^#nsvK}qwElK z?O*4oe|9!5o@jr6uK(y|`E9_w`-)UN@qId=Df)eSgYiV-6LsF##Yi3(KTj_`kIGtU zR`Qt_CwUQ_F|P)A4d__2+1M#PlEdJ4!NKQAQWJ!iZKcp3F*q7d&rJdi$#x!?J| zUg+<0C2E~t;cmu^+rplw(0z!z)!41{@pZq%|8Td!S8GTPvtksFmi<%|fybC8`uq_+ zdJPVRPvTE^3w+@(_q)!oa4E;q*k```u~MBn_$qegk(l59ihZ_u@@}hMjrWo94DBkc zXno{nCC=J;frEI7p*?E-X3Xm^<0+cp9A!{*j6LmLS9GaaA0_d>3<_;)){}hZM=E~q zW!}WIj+2H_pEhdnlP% + shinycssloaders::withSpinner() ) ) @@ -32,4 +35,11 @@ mod_arts_tree_ui <- function(id) ) ) -} \ No newline at end of file +} + +#'arts_tree server function +#' +#' @noRd +mod_arts_tree_server <- function(id,path){ + +} diff --git a/data-raw/ripp_data.R b/data-raw/ripp_data.R index 0cde35b..96ef933 100644 --- a/data-raw/ripp_data.R +++ b/data-raw/ripp_data.R @@ -1,9 +1,8 @@ ## code to prepare `ripp_data` dataset goes here -ripp_data <- utils::read.table("https://raw.githubusercontent.com/2061Tsarin/BGCViz-datasets/main/example_data/sco_ripp.txt", header = FALSE) +ripp_data <- utils::read.table("https://raw.githubusercontent.com/2061Tsarin/BGCViz-datasets/main/example_data/sco_ripp.txt") colnames(ripp_data) <-c("Cluster", "Type", "Start", "Stop") - #ADDING CHROMOSOME COLUMN ripp_data$chromosome <- rep("GF", length(ripp_data$Cluster)) #Type magic diff --git a/data-raw/use_data_internally.R b/data-raw/use_data_internally.R index 6a3f0b8..36fd292 100644 --- a/data-raw/use_data_internally.R +++ b/data-raw/use_data_internally.R @@ -1 +1 @@ -usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data overwrite = TRUE, internal = TRUE) +usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data, overwrite = TRUE, internal = TRUE) diff --git a/inst/.DS_Store b/inst/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..565b9eb8436e408bf7f112aebffb6556ab0e43ed GIT binary patch literal 6148 zcmeHKy-veG4ED8^T7HB&vLKE(pgTjT!caC;vC|&}NR1NFATdTf7#k15!onLc@%em8 zat&bvA!JLw@8Yx1&X*|85s?``EJs8`A{sy$J6jmO5MF0(NXJ`tfrj@OO&4jBHT=}@ zcNySk*QFU{l&x;+&u{O!T1nD4p0Cn5EQ9mO+ri}U<+Q%K{AM+~t?$b38TIL!9x10K z^5!%P^KKtCJ?i;SKAzrv{*8T-w5p@sE3C&#J!@LfJ>7wYoYrAI_SMxBc+~5;xGeeT z(}q`7PrFxG&oS4dq6{bl%D_)EfS%1V*b&rG8Bhk4fsz6KK3FJY;!Z7j|a4D07f1QL0BM0LV*%${1L-QIPBK@MIH-52`A$+V;`T{_!Ek8*)Jvto{5S2I-YDpbY#g223xW#$())@2!oS<6di_S5OxAD+J3BOk695 eFSp`-s1w*NPk@ofLJ$^+{s=f4bWjF* z3j$wLQw zd0*+6YSjEp1?tbcwbIAe`R)4N9@_dkYn0WdrhPFx>X2GooB?OR8Td;Kpl6GWP7U2U z1I~am&@v$3hX55!A~uHl>44EA0B{Jm3dZ_x1`Of=CJ`G$cpz-4KuhI##9&K@Kg75s zVq<9O#Cm6}6YtFNgu;4v_=AQMCx&jF0cW7gz>!^!rT<^=KmT`={K^?{2L2TTJWS{5 z4389hYwzKt*9Pb Date: Wed, 11 Oct 2023 00:53:10 +0300 Subject: [PATCH 186/199] Phylogenetic tree of the first file in alltrees.zip --- R/app_server.R | 20 ++++++++++-- R/fct_reading_functions.R | 21 +++++++++++-- R/mod_arts_tree.R | 62 ++++++++++++++++++++++++------------- man/mod_arts_tree_server.Rd | 11 +++++++ man/mod_arts_tree_ui.Rd | 11 +++++++ 5 files changed, 100 insertions(+), 25 deletions(-) create mode 100644 man/mod_arts_tree_server.Rd create mode 100644 man/mod_arts_tree_ui.Rd diff --git a/R/app_server.R b/R/app_server.R index 1e7df17..b4d61a0 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -35,7 +35,7 @@ app_server <- function(input, output, session) { ) }) dynamicInput <- shiny::reactive({ - list(input$dup_choice, vals$need_filter, input$prism_supp) + list(input$dup_choice, vals$need_filter, input$prism_supp, input$phylo_file) }) deep_reference <- shiny::reactive({ list( @@ -389,6 +389,13 @@ app_server <- function(input, output, session) { choices = c("All", paste0("ID:", dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) + shiny::updateSelectInput( + session, + 'phylo_file', + choices = paste0(vals$arts_data$TreesFiles), + selected = vals$arts_data$TreesFiles[1] + ) + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", selected = "ARTS" @@ -717,9 +724,11 @@ app_server <- function(input, output, session) { if (vals$arts_data_input == TRUE) { shinyjs::showElement(selector = "#dup_choice") shinyjs::showElement(selector = "#arts_width") + shinyjs::showElement(selector = "#phylo_file") } else { shinyjs::hideElement(selector = "#dup_choice") shinyjs::hideElement(selector = "#arts_width") + shinyjs::hideElement(selector = "#phylo_file") } }) @@ -991,7 +1000,7 @@ app_server <- function(input, output, session) { "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_prism_box", "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", - "download_data_box", "gecco_filtering_box", "deep_filtering_box" + "download_data_box", "gecco_filtering_box", "deep_filtering_box", "arts_tree_box" ) for (id in box_ids) { shinydashboardPlus::updateBox(id, action = "restore") @@ -1651,6 +1660,13 @@ app_server <- function(input, output, session) { ############################################################################ ############################################################################ + ## ---------------------------------------------------------------- + ## ARTS phylogenetic tree - + ## ---------------------------------------------------------------- + # Plot tree + + mod_arts_tree_server("arts_tree_1",vals = vals) + ## ---------------------------------------------------------------- ## DeepBGC Comparison tab - ## ---------------------------------------------------------------- diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 2d71fab..db637a3 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -159,10 +159,11 @@ read_arts_archive <- function(archive, zip = TRUE) { # Silence R CMD note Start <- Core <- NULL if (zip == TRUE) { - utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv"), exdir = "./ARTS_tables", junkpaths = TRUE) + utils::unzip(archive, files = c("tables/duptable.tsv", "tables/knownhits.tsv", "alltrees.zip"), exdir = "./ARTS_tables", junkpaths = TRUE) known_hits <- utils::read.delim("./ARTS_tables/knownhits.tsv") dupl_table <- utils::read.delim("./ARTS_tables/duptable.tsv") - unlink("./ARTS_tables", recursive = TRUE) + utils::unzip("./ARTS_tables/alltrees.zip",exdir = "./ARTS_tables/trees", junkpaths = TRUE) + trees_id_list <- list.files("./ARTS_tables/trees/") locations <- sapply(known_hits$Sequence.description, function(x) { utils::tail(stringr::str_split(x, "\\|")[[1]], 1) }) @@ -233,6 +234,22 @@ read_arts_archive <- function(archive, zip = TRUE) { dplyr::arrange(Start) arts_data$ID <- seq(1:dim(arts_data)[1]) arts_data$Cluster <- arts_data$ID + num_rows <- nrow(arts_data) + extended_trees_list <- lapply(seq_len(num_rows), function(i) { + trees_id_list[i %% length(trees_id_list) + 1] + }) + arts_data$TreesFiles <- extended_trees_list + # unsure about the efficacy of this, since unlinking was crucial here... + actual_trees_list = list() + for (tree in arts_data$TreesFiles){ + tree <- ggtree::read.tree(file = paste0("./ARTS_tables/trees/", tree)) + actual_trees_list <- append(actual_trees_list,list(tree)) + } + unlink("./ARTS_tables", recursive = TRUE) + + arts_data$Trees <- actual_trees_list + + } else { arts_data <- archive } diff --git a/R/mod_arts_tree.R b/R/mod_arts_tree.R index 39d3e89..b3a97c8 100644 --- a/R/mod_arts_tree.R +++ b/R/mod_arts_tree.R @@ -1,16 +1,7 @@ #' ARTS tree UI functions #' -#' @description A shiny Module. -#' -#' @param id,input,output,session Internal parameters for {shiny}. -#' -#' @noRd -#' -#' @importFrom shiny NS tagList - -mod_arts_tree_ui <- function(id) -{ +mod_arts_tree_ui <- function(id) { ns <- NS(id) tagList( shiny::fluidRow( @@ -19,27 +10,56 @@ mod_arts_tree_ui <- function(id) div( id = "id1", shinydashboardPlus::box( - title = "Select a tree of interest", + title = "Phylogenetic tree", id = "arts_tree_box", collapsible = TRUE, closable = TRUE, width = 12, - shiny::selectInput(ns("group_by"), "Group data by", choices = c(), selected = ""), - shiny::plotOutput(ns("arts_tree"),height = "1000px") %>% - shinycssloaders::withSpinner() + shiny::selectInput("phylo_file", "Choose a file to build a tree", choices = c(), selected = ""), + div( + style = "height: 600px; overflow-y: scroll", # Adjust height as needed, may be needed indeed + shiny::plotOutput(ns("arts_tree"), height = "2000px") %>% + shinycssloaders::withSpinner() + ) ) - ) ) - - ) - ) + ) } #'arts_tree server function #' -#' @noRd -mod_arts_tree_server <- function(id,path){ - + +mod_arts_tree_server <- function(id, vals) { + moduleServer(id, function(input, output, session) { + ns <- session$ns + + # Define a reactive expression for the tree + tree_data <- reactive({ + tree <- vals$arts_data$Trees[[1]] + + ### IF YOU WANT TO SHORTER STRAINS ID UNCOMENT CODE BELOW ### + + # tree$tip.label <- sapply(tree$tip.label, function(x) { + # split_string <- unlist(strsplit(x, "_")) + # return(paste(split_string[2], split_string[3], sep = " ")) + # }) + + return(tree) + }) + + # Render the plot directly within renderPlot + output$arts_tree <- renderPlot(res = 90,{ + req(vals$arts_data_input == TRUE) + + # Create and render the plot + tree_plot <- ggtree::ggtree(tree_data()) + + ggtree::geom_tree() + + ggtree::theme_tree() + + ggtree::geom_tiplab(size = 2.2, color = 'firebrick') + + return(tree_plot) + }) + }) } diff --git a/man/mod_arts_tree_server.Rd b/man/mod_arts_tree_server.Rd new file mode 100644 index 0000000..8c54961 --- /dev/null +++ b/man/mod_arts_tree_server.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/mod_arts_tree.R +\name{mod_arts_tree_server} +\alias{mod_arts_tree_server} +\title{arts_tree server function} +\usage{ +mod_arts_tree_server(id, vals) +} +\description{ +arts_tree server function +} diff --git a/man/mod_arts_tree_ui.Rd b/man/mod_arts_tree_ui.Rd new file mode 100644 index 0000000..5bb2c2c --- /dev/null +++ b/man/mod_arts_tree_ui.Rd @@ -0,0 +1,11 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/mod_arts_tree.R +\name{mod_arts_tree_ui} +\alias{mod_arts_tree_ui} +\title{ARTS tree UI functions} +\usage{ +mod_arts_tree_ui(id) +} +\description{ +ARTS tree UI functions +} From 1f757086253d59ea3b42d141d6e1f229dba43407 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Wed, 11 Oct 2023 02:26:33 +0300 Subject: [PATCH 187/199] realization of switching tree files, plot different trees is available --- R/app_server.R | 8 ++------ R/mod_arts_tree.R | 30 +++++++++++++++++------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index b4d61a0..a11a47d 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -389,12 +389,8 @@ app_server <- function(input, output, session) { choices = c("All", paste0("ID:", dup_table_id$ID, " ,Core:", dup_table_id$Core)), selected = "All" ) - shiny::updateSelectInput( - session, - 'phylo_file', - choices = paste0(vals$arts_data$TreesFiles), - selected = vals$arts_data$TreesFiles[1] - ) + + if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", diff --git a/R/mod_arts_tree.R b/R/mod_arts_tree.R index b3a97c8..d7239f4 100644 --- a/R/mod_arts_tree.R +++ b/R/mod_arts_tree.R @@ -15,10 +15,10 @@ mod_arts_tree_ui <- function(id) { collapsible = TRUE, closable = TRUE, width = 12, - shiny::selectInput("phylo_file", "Choose a file to build a tree", choices = c(), selected = ""), + shiny::selectInput(ns("phylo_file"), "Choose a file to build a tree", choices = c(), selected = ""), div( - style = "height: 600px; overflow-y: scroll", # Adjust height as needed, may be needed indeed - shiny::plotOutput(ns("arts_tree"), height = "2000px") %>% + style = "height: 600px; overflow-y: scroll; overflow-x: scroll", # Adjust height as needed, may be needed indeed + shiny::plotOutput(ns("arts_tree"), height = "2000px",width = "1500px") %>% shinycssloaders::withSpinner() ) ) @@ -35,17 +35,21 @@ mod_arts_tree_server <- function(id, vals) { moduleServer(id, function(input, output, session) { ns <- session$ns + # observing changes of input for tree plot + observe({ + shiny::updateSelectInput( + session, + 'phylo_file', + choices = paste0(vals$arts_data$TreesFiles), + selected = vals$arts_data$TreesFiles[1] + ) + }) + # Define a reactive expression for the tree tree_data <- reactive({ - tree <- vals$arts_data$Trees[[1]] - - ### IF YOU WANT TO SHORTER STRAINS ID UNCOMENT CODE BELOW ### - - # tree$tip.label <- sapply(tree$tip.label, function(x) { - # split_string <- unlist(strsplit(x, "_")) - # return(paste(split_string[2], split_string[3], sep = " ")) - # }) - + # Create the tree object + tree$core <- vals$arts_data$Trees[vals$arts_data$TreesFiles == input$phylo_file][[1]] + tree$type <- "rectangular" return(tree) }) @@ -54,7 +58,7 @@ mod_arts_tree_server <- function(id, vals) { req(vals$arts_data_input == TRUE) # Create and render the plot - tree_plot <- ggtree::ggtree(tree_data()) + + tree_plot <- ggtree::ggtree(tree_data()$core, layout = tree_data()$type) + ggtree::geom_tree() + ggtree::theme_tree() + ggtree::geom_tiplab(size = 2.2, color = 'firebrick') From 52cf4fa454b49b6ae7071089b7f8a4552a04257a Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Wed, 11 Oct 2023 03:12:40 +0300 Subject: [PATCH 188/199] fixed error while uploading data from several programs --- R/app_server.R | 7 ++- R/fct_reading_functions.R | 2 +- R/mod_arts_tree.R | 6 +- anti_biocircos.csv | 28 ++++++++++ arts_biocircos.csv | 113 ++++++++++++++++++++++++++++++++++++++ group_by.csv | 8 +++ 6 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 anti_biocircos.csv create mode 100644 arts_biocircos.csv create mode 100644 group_by.csv diff --git a/R/app_server.R b/R/app_server.R index a11a47d..5893518 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -41,7 +41,7 @@ app_server <- function(input, output, session) { list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data, - vals$ripp_data + vals$ripp_data, vals$arts_tree_data ) }) @@ -64,7 +64,7 @@ app_server <- function(input, output, session) { rre_interact = NULL, anti_interact = NULL, prism_interact = NULL, deep_interact = NULL, sempi_interact = NULL, df_a = NULL, df_d = NULL, df_p = NULL, df_r = NULL, prism_supp = NULL, prism_json = FALSE, df_s = NULL, prism_supp_interact = NULL, known_data = NULL, dup_data = NULL, - known_data_input = FALSE, dup_data_input = FALSE, arts_data = NULL, arts_data_input = FALSE, seg_df_ref_ar = NULL, + known_data_input = FALSE, dup_data_input = FALSE, arts_data = NULL, arts_tree_data = NULL, arts_data_input = FALSE, seg_df_ref_ar = NULL, df_ps = NULL, arts_interact = NULL, rre_more = FALSE, gecco_data = NULL, gecco_data_input = FALSE, gecco_data_filtered = NULL, seg_df_ref_g = NULL, prism_supp_data_input = FALSE, computed = NULL, need_filter = FALSE, filter_data = FALSE, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), @@ -376,7 +376,8 @@ app_server <- function(input, output, session) { arts_data <- utils::read.csv(archive) } } - vals$arts_data <- arts_data + vals$arts_tree_data <- arts_data + vals$arts_data <- arts_data[,!(names(arts_data) %in% c("Trees", "TreesFiles"))] vals$choices$ref <- c(vals$choices$ref, "ARTS" = "ARTS") vals$choices$group_by <- c(vals$choices$group_by, "ARTS" = "ARTS") vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "ARTS" = "ARTS") diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index db637a3..40b6f04 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -238,7 +238,7 @@ read_arts_archive <- function(archive, zip = TRUE) { extended_trees_list <- lapply(seq_len(num_rows), function(i) { trees_id_list[i %% length(trees_id_list) + 1] }) - arts_data$TreesFiles <- extended_trees_list + arts_data$TreesFiles <- unlist(extended_trees_list) # unsure about the efficacy of this, since unlinking was crucial here... actual_trees_list = list() for (tree in arts_data$TreesFiles){ diff --git a/R/mod_arts_tree.R b/R/mod_arts_tree.R index d7239f4..a825cd0 100644 --- a/R/mod_arts_tree.R +++ b/R/mod_arts_tree.R @@ -40,15 +40,15 @@ mod_arts_tree_server <- function(id, vals) { shiny::updateSelectInput( session, 'phylo_file', - choices = paste0(vals$arts_data$TreesFiles), - selected = vals$arts_data$TreesFiles[1] + choices = paste0(vals$arts_tree_data$TreesFiles), + selected = vals$arts_tree_data$TreesFiles[1] ) }) # Define a reactive expression for the tree tree_data <- reactive({ # Create the tree object - tree$core <- vals$arts_data$Trees[vals$arts_data$TreesFiles == input$phylo_file][[1]] + tree$core <- vals$arts_tree_data$Trees[vals$arts_tree_data$TreesFiles == input$phylo_file][[1]] tree$type <- "rectangular" return(tree) }) diff --git a/anti_biocircos.csv b/anti_biocircos.csv new file mode 100644 index 0000000..0410951 --- /dev/null +++ b/anti_biocircos.csv @@ -0,0 +1,28 @@ +"Cluster","Start","Stop","Type","chromosome","Type2" +1,86693,139654,"hgle-ks__t1pks","A","hgle-ks__t1pks" +2,166700,191657,"terpene","A","terpene" +3,246867,270397,"lanthipeptide-class-i","A","lanthipeptide-class-i" +4,494259,544087,"nrps","A","nrps" +5,791700,799942,"ripp-like","A","ripp-like" +6,1258217,1297040,"t3pks","A","t3pks" +7,1995499,2005898,"ectoine","A","ectoine" +8,2939305,2949875,"melanin","A","melanin" +9,3034430,3045603,"siderophore","A","siderophore" +10,3524827,3603907,"nrps","A","nrps" +11,5496473,5567376,"t2pks","A","t2pks" +12,5671274,5691836,"terpene","A","terpene" +13,5751944,5824487,"t2pks","A","t2pks" +14,6336090,6346443,"siderophore","A","siderophore" +15,6429574,6475291,"nrps-like__t1pks__prodigiosin","A","nrps-like__t1pks__prodigiosin" +16,6632342,6643659,"ripp-like","A","ripp-like" +17,6656903,6676224,"terpene","A","terpene" +18,6842314,6855522,"siderophore","A","siderophore" +19,6881334,6951537,"t1pks__butyrolactone","A","t1pks__butyrolactone" +20,7088263,7142447,"thioamide-nrp__nrps","A","thioamide-nrp__nrps" +21,7409741,7432456,"lanthipeptide-class-iii","A","lanthipeptide-class-iii" +22,7506307,7532117,"terpene","A","terpene" +23,7570411,7618555,"pks-like__t1pks","A","pks-like__t1pks" +24,7682906,7709360,"lanthipeptide-class-i","A","lanthipeptide-class-i" +25,7973469,8047403,"other__t3pks","A","other__t3pks" +26,8269636,8290764,"indole","A","indole" +27,8475101,8548352,"t3pks__nrps__terpene","A","t3pks__nrps__terpene" diff --git a/arts_biocircos.csv b/arts_biocircos.csv new file mode 100644 index 0000000..e58e1fc --- /dev/null +++ b/arts_biocircos.csv @@ -0,0 +1,113 @@ +"Hit","Start","Stop","Core","Description","Count","ID","Cluster","Type","Type2","Evalue","Bitscore","Model" +"hit_1",189420,190434,"TIGR02027","rpoA: DNA-directed RNA polymerase, alpha subunit",2,1,1,"core","core",NA,NA,"Core" +"hit_1",218352,219531,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,2,2,"core","core",NA,NA,"Core" +"hit_1",342334,342592,"TIGR01808","CM_M_hiGC-arch: chorismate mutase",2,3,3,"core","core",NA,NA,"Core" +"hit_1",378025,379105,"TIGR00020","prfB: peptide chain release factor 2",2,4,4,"core","core",NA,NA,"Core" +"hit_2",441250,441925,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,5,5,"core","core",NA,NA,"Core" +"hit_1",604511,605669,"TIGR00635","ruvB: Holliday junction DNA helicase RuvB",2,6,6,"core","core",NA,NA,"Core" +"hit_1",610010,611042,"TIGR02012","tigrfam_recA: protein RecA",2,7,7,"core","core",NA,NA,"Core" +NA,684440,686288,"Not_core","ABC_efflux",1,8,8,"resistance","resistance",4.4e-92,307.9,"RF0007" +"hit_1",832714,834106,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,9,9,"core","core",NA,NA,"Core" +"hit_1",894045,895044,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",2,10,10,"core","core",NA,NA,"Core" +NA,894045,895044,"Not_core","Gp_dh_N",1,11,11,"resistance","resistance",3.1e-52,175.3,"PF00044.19" +"hit_1",913851,915291,"TIGR03356","BGL: beta-galactosidase",4,12,12,"core","core",NA,NA,"Core" +NA,964792,968566,"Not_core","Biotin_lipoyl",1,13,13,"resistance","resistance",5.5e-15,53.6,"PF00364.17" +"hit_1",1006626,1008339,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,14,14,"core","core",NA,NA,"Core" +"hit_1",1118001,1118622,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,15,15,"core","core",NA,NA,"Core" +"hit_1",1210337,1211417,"TIGR01430","aden_deam: adenosine deaminase",5,16,16,"core","core",NA,NA,"Core" +NA,1305890,1307336,"Not_core","Gp_dh_N",1,17,17,"resistance","resistance",2.9e-39,133.2,"PF00044.19" +NA,1486848,1488651,"Not_core","ABC_efflux",1,18,18,"resistance","resistance",2e-78,262.8,"RF0007" +"hit_1",1493927,1494182,"TIGR00105","L31: ribosomal protein bL31",2,19,19,"core","core",NA,NA,"Core" +"hit_1",1607820,1609002,"TIGR00485","EF-Tu: translation elongation factor Tu",2,20,20,"core","core",NA,NA,"Core" +NA,1782418,1783468,"Not_core","OTCace",1,21,21,"resistance","resistance",8.3e-37,125.3,"PF00185.19" +"hit_2",1815118,1816189,"TIGR00635","ruvB: Holliday junction DNA helicase RuvB",2,22,22,"core","core",NA,NA,"Core" +"hit_1",1854506,1858388,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,23,23,"core","core",NA,NA,"Core" +NA,1948555,1949320,"Not_core","Proteasome",1,24,24,"resistance","resistance",7.8e-26,89.3,"PF00227.21" +NA,1949394,1950171,"Not_core","Proteasome",1,25,25,"resistance","resistance",6.9e-38,128.6,"PF00227.21" +"hit_1",1969763,1971302,"TIGR01311","glycerol_kin: glycerol kinase",2,26,26,"core","core",NA,NA,"Core" +"hit_2",2054147,2055836,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,27,27,"core","core",NA,NA,"Core" +"hit_1",2247241,2248207,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,28,28,"core","core",NA,NA,"Core" +NA,2258773,2259589,"Not_core","AAC3",1,29,29,"resistance","resistance",1.2e-57,193.6,"RF0002" +"hit_1",2269202,2270726,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,30,30,"core","core",NA,NA,"Core" +"hit_1",2270722,2271796,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,31,31,"core","core",NA,NA,"Core" +"hit_2",2289079,2290087,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",2,32,32,"core","core",NA,NA,"Core" +NA,2289079,2290087,"Not_core","Gp_dh_N",1,33,33,"resistance","resistance",2.4e-61,204.9,"PF00044.19" +"hit_1",2366563,2368000,"TIGR01064","pyruv_kin: pyruvate kinase",2,34,34,"core","core",NA,NA,"Core" +"hit_1",2371194,2373699,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,35,35,"core","core",NA,NA,"Core" +"hit_3",2525428,2527162,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,36,36,"core","core",NA,NA,"Core" +"hit_2",2546594,2547746,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,37,37,"core","core",NA,NA,"Core" +NA,2553861,2555709,"Not_core","Biotin_lipoyl",1,38,38,"resistance","resistance",7.6e-48,158.8,"PF00364.17" +"hit_1",2556860,2559563,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",2,39,39,"core","core",NA,NA,"Core" +"hit_3",2637331,2638057,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,40,40,"core","core",NA,NA,"Core" +"hit_2",2777725,2780473,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",2,41,41,"core","core",NA,NA,"Core" +NA,2878467,2879883,"Not_core","Carboxyl_trans",1,42,42,"resistance","resistance",2e-28,97.8,"PF01039.17" +NA,2889202,2891131,"Not_core","ABC_efflux",1,43,43,"resistance","resistance",6.5e-94,313.9,"RF0007" +"hit_2",2947597,2948908,"TIGR03356","BGL: beta-galactosidase",4,44,44,"core","core",NA,NA,"Core" +"hit_2",2958166,2959171,"TIGR01430","aden_deam: adenosine deaminase",5,45,45,"core","core",NA,NA,"Core" +"hit_1",2966703,2967840,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,46,46,"core","core",NA,NA,"Core" +"hit_2",3075412,3077989,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,47,47,"core","core",NA,NA,"Core" +"hit_3",3092085,3094659,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,48,48,"core","core",NA,NA,"Core" +NA,3215472,3219222,"Not_core","ABC_efflux",1,49,49,"resistance","resistance",3.4e-167,555.7,"RF0007" +NA,3231960,3233577,"Not_core","Carboxyl_trans",1,50,50,"resistance","resistance",1.8e-163,543.2,"PF01039.17" +NA,3233591,3235544,"Not_core","Biotin_lipoyl",1,51,51,"resistance","resistance",1.8e-19,67.9,"PF00364.17" +"hit_1",3246397,3248215,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,52,52,"core","core",NA,NA,"Core" +"hit_3",3256845,3258285,"TIGR03356","BGL: beta-galactosidase",4,53,53,"core","core",NA,NA,"Core" +"hit_1",3358809,3359166,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,54,54,"core","core",NA,NA,"Core" +"hit_2",3372316,3373663,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,55,55,"core","core",NA,NA,"Core" +"hit_2",3451493,3452552,"TIGR00020","prfB: peptide chain release factor 2",2,56,56,"core","core",NA,NA,"Core" +NA,3859699,3861550,"Not_core","Biotin_lipoyl",1,57,57,"resistance","resistance",1.9e-15,55,"PF00364.17" +NA,3861555,3863154,"Not_core","Carboxyl_trans",1,58,58,"resistance","resistance",6.3e-135,449.1,"PF01039.17" +NA,3965434,3966136,"Not_core","Pentapeptide_4",1,59,59,"resistance","resistance",9.9e-18,62.5,"PF13599.1" +"hit_1",4271838,4274142,"TIGR01695","murJ_mviN: murein biosynthesis integral membrane protein MurJ",2,60,60,"core","core",NA,NA,"Core" +NA,4289532,4290663,"Not_core","TIGR00663",1,61,61,"resistance","resistance",3.4e-90,301.1,"TIGR00663" +NA,4293898,4295962,"Not_core","DNA_gyraseB",1,62,62,"resistance","resistance",3.3e-61,204.2,"PF00204.20" +NA,4296004,4298599,"Not_core","DNA_topoisoIV",1,63,63,"resistance","resistance",1.9e-147,490.3,"PF00521.15" +NA,4340245,4341697,"Not_core","Biotin_lipoyl",1,64,64,"resistance","resistance",1.9e-17,61.5,"PF00364.17" +NA,4357579,4359010,"Not_core","Biotin_lipoyl",1,65,65,"resistance","resistance",8.9e-23,78.5,"PF00364.17" +NA,4400540,4401503,"Not_core","ClassA",1,66,66,"resistance","resistance",2e-93,311.1,"RF0053" +"hit_1",4486449,4488294,"TIGR02350","prok_dnaK: chaperone protein DnaK",2,67,67,"core","core",NA,NA,"Core" +"hit_2",4489010,4490186,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,68,68,"core","core",NA,NA,"Core" +"hit_1",4738603,4739638,"TIGR00233","trpS: tryptophan--tRNA ligase",2,69,69,"core","core",NA,NA,"Core" +"hit_2",4777754,4779272,"TIGR01311","glycerol_kin: glycerol kinase",2,70,70,"core","core",NA,NA,"Core" +"hit_4",4888416,4890117,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,71,71,"core","core",NA,NA,"Core" +"hit_3",4926907,4927948,"TIGR01430","aden_deam: adenosine deaminase",5,72,72,"core","core",NA,NA,"Core" +NA,4935412,4938898,"Not_core","TIGR02013",1,73,73,"resistance","resistance",0,1811.5,"TIGR02013" +"hit_2",4947037,4948231,"TIGR00485","EF-Tu: translation elongation factor Tu",2,74,74,"core","core",NA,NA,"Core" +"hit_2",4972763,4973786,"TIGR02027","rpoA: DNA-directed RNA polymerase, alpha subunit",2,75,75,"core","core",NA,NA,"Core" +"hit_2",4992045,4993893,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,76,76,"core","core",NA,NA,"Core" +"hit_2",5013006,5013315,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,77,77,"core","core",NA,NA,"Core" +"hit_2",5059646,5059940,"TIGR01808","CM_M_hiGC-arch: chorismate mutase",2,78,78,"core","core",NA,NA,"Core" +"hit_1",5122802,5124251,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,79,79,"core","core",NA,NA,"Core" +"hit_2",5126892,5127906,"TIGR00233","trpS: tryptophan--tRNA ligase",2,80,80,"core","core",NA,NA,"Core" +"hit_4",5184666,5185824,"TIGR01430","aden_deam: adenosine deaminase",5,81,81,"core","core",NA,NA,"Core" +NA,5203143,5204919,"Not_core","Biotin_lipoyl",1,82,82,"resistance","resistance",2e-17,61.4,"PF00364.17" +NA,5206839,5208429,"Not_core","Carboxyl_trans",1,83,83,"resistance","resistance",2.7e-196,651.5,"PF01039.17" +"hit_1",5480964,5481975,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,84,84,"core","core",NA,NA,"Core" +"hit_5",5519276,5521001,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,85,85,"core","core",NA,NA,"Core" +"hit_2",5582919,5583141,"TIGR00105","L31: ribosomal protein bL31",2,86,86,"core","core",NA,NA,"Core" +"hit_2",5585252,5585900,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,87,87,"core","core",NA,NA,"Core" +"hit_2",5586692,5587931,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,88,88,"core","core",NA,NA,"Core" +"hit_2",5640700,5642128,"TIGR01064","pyruv_kin: pyruvate kinase",2,89,89,"core","core",NA,NA,"Core" +"hit_3",5696187,5697447,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,90,90,"core","core",NA,NA,"Core" +NA,5765225,5766830,"Not_core","Carboxyl_trans",1,91,91,"resistance","resistance",1.1e-201,669.2,"PF01039.17" +"hit_1",5829196,5829937,"TIGR02227","sigpep_I_bact: signal peptidase I",3,92,92,"core","core",NA,NA,"Core" +"hit_2",5830908,5831889,"TIGR02227","sigpep_I_bact: signal peptidase I",3,93,93,"core","core",NA,NA,"Core" +"hit_3",5831956,5832718,"TIGR02227","sigpep_I_bact: signal peptidase I",3,94,94,"core","core",NA,NA,"Core" +"hit_5",5860467,5861535,"TIGR01430","aden_deam: adenosine deaminase",5,95,95,"core","core",NA,NA,"Core" +"hit_1",5905150,5906287,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,96,96,"core","core",NA,NA,"Core" +"hit_2",5954884,5955787,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,97,97,"core","core",NA,NA,"Core" +"hit_2",5993317,5994439,"TIGR02012","tigrfam_recA: protein RecA",2,98,98,"core","core",NA,NA,"Core" +NA,6054229,6056353,"Not_core","DNA_gyraseB",1,99,99,"resistance","resistance",1.4e-50,169.7,"PF00204.20" +NA,6065958,6068412,"Not_core","DNA_topoisoIV",1,100,100,"resistance","resistance",1.6e-146,487.3,"PF00521.15" +NA,6191447,6192455,"Not_core","OTCace",1,101,101,"resistance","resistance",2.9e-48,162.5,"PF00185.19" +"hit_1",6284123,6286091,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,102,102,"core","core",NA,NA,"Core" +"hit_2",6448713,6449832,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,103,103,"core","core",NA,NA,"Core" +"hit_2",6629728,6631411,"TIGR01695","murJ_mviN: murein biosynthesis integral membrane protein MurJ",2,104,104,"core","core",NA,NA,"Core" +"hit_2",6824083,6825955,"TIGR02350","prok_dnaK: chaperone protein DnaK",2,105,105,"core","core",NA,NA,"Core" +"hit_4",6899648,6901040,"TIGR03356","BGL: beta-galactosidase",4,106,106,"core","core",NA,NA,"Core" +"hit_2",6980369,6981305,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,107,107,"core","core",NA,NA,"Core" +"hit_2",6981301,6982924,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,108,108,"core","core",NA,NA,"Core" +"hit_2",7074278,7075436,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,109,109,"core","core",NA,NA,"Core" +"hit_2",7075480,7077394,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,110,110,"core","core",NA,NA,"Core" +NA,7164494,7166429,"Not_core","ABC_efflux",1,111,111,"resistance","resistance",2.7e-77,259.1,"RF0007" +NA,7196834,7198016,"Not_core","Chlor_Efflux_Pump",1,112,112,"resistance","resistance",8.8e-117,389.1,"RF0051" diff --git a/group_by.csv b/group_by.csv new file mode 100644 index 0000000..55fc526 --- /dev/null +++ b/group_by.csv @@ -0,0 +1,8 @@ +"ARTS","Antismash","Group" +"1","2","group_1" +"44","8","group_2" +"85","11","group_3" +"91","13","group_4" +"103","15","group_5" +"106","19","group_6" +"NA","NA","group_7" From 4a3d5abff3c481525d6c9ab2531d29241962d4ad Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Wed, 11 Oct 2023 03:46:34 +0300 Subject: [PATCH 189/199] slightly updated README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index bd8bdec..18ec486 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,8 @@ Currently, the app supports annotations from such sources: 6. ARTS (raw tsv files) +7. RiPPMiner-genome (cured txt file) + # Contributing There are no contributing guidelines yet. But feel free to resolve any From 2d342d5b8961a6cfce407a0266ab1f015e15d650 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Wed, 11 Oct 2023 23:31:16 +0300 Subject: [PATCH 190/199] fixing rippminer format reading issue --- DESCRIPTION | 5 +- R/app_server.R | 4 +- R/fct_reading_functions.R | 11 ++- anti_biocircos.csv | 28 ------ arts_biocircos.csv | 113 ----------------------- dev/02_dev.R | 1 - group_by.csv | 8 -- rsconnect/shinyapps.io/tsrnlv/bgcviz.dcf | 10 ++ 8 files changed, 23 insertions(+), 157 deletions(-) delete mode 100644 anti_biocircos.csv delete mode 100644 arts_biocircos.csv delete mode 100644 group_by.csv create mode 100644 rsconnect/shinyapps.io/tsrnlv/bgcviz.dcf diff --git a/DESCRIPTION b/DESCRIPTION index 40dccc1..a695e05 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: BGCViz Title: BGCViz Version: 0.99.0 -Authors@R: person('Pavlo', 'Hrab', email = 'pavlo.hrab@gmail.com', role = c('cre', 'aut')) +Authors@R: person('Lev', 'Tsarin', email = 'Tsarinlev@gmail.com', role = c('cre', 'aut')) Description: BGCViz is a shiny package, that aims to integrate BGC result from different softwares for same genome sequence. On top of additional filtering of GECCO and DeepBGC data and choosing optimal thresholds for them, @@ -33,7 +33,8 @@ Imports: sortable, stringi, stringr, - tidyr + tidyr, + ggtree Encoding: UTF-8 RoxygenNote: 7.2.3 URL: https://github.com/ostash-group/BGCViz diff --git a/R/app_server.R b/R/app_server.R index 5893518..c3e5d8d 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -516,8 +516,8 @@ app_server <- function(input, output, session) { shiny::observeEvent(input$ripp_data, { # Read data - ripp_data <- utils::read.delim(input$ripp_data$datapath) - process_rippminer(ripp_data) + + process_rippminer(input$ripp_data$datapath) }) shiny::observeEvent(input$anti_data, { diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 40b6f04..9e3683e 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -6,9 +6,14 @@ #' #' @noRd read_ripp <- function(data) { - ripp_data <- data - # CHANGING COLNAMES -- temporary - colnames(ripp_data) <-c("Cluster", "Type", "Start", "Stop") + all <- readLines(data) + filtered_lines <- all[!grepl("^#|^$", all)] + print(filtered_lines) + data <- paste(filtered_lines, collapse = "\n") + data_connection <- textConnection(data) + ripp_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("Cluster", "Type", "Start", "Stop")) + close(data_connection) + print(ripp_data) #Validation of input res_validation <- validate_basic_input(ripp_data) if (!(res_validation[[1]])) { diff --git a/anti_biocircos.csv b/anti_biocircos.csv deleted file mode 100644 index 0410951..0000000 --- a/anti_biocircos.csv +++ /dev/null @@ -1,28 +0,0 @@ -"Cluster","Start","Stop","Type","chromosome","Type2" -1,86693,139654,"hgle-ks__t1pks","A","hgle-ks__t1pks" -2,166700,191657,"terpene","A","terpene" -3,246867,270397,"lanthipeptide-class-i","A","lanthipeptide-class-i" -4,494259,544087,"nrps","A","nrps" -5,791700,799942,"ripp-like","A","ripp-like" -6,1258217,1297040,"t3pks","A","t3pks" -7,1995499,2005898,"ectoine","A","ectoine" -8,2939305,2949875,"melanin","A","melanin" -9,3034430,3045603,"siderophore","A","siderophore" -10,3524827,3603907,"nrps","A","nrps" -11,5496473,5567376,"t2pks","A","t2pks" -12,5671274,5691836,"terpene","A","terpene" -13,5751944,5824487,"t2pks","A","t2pks" -14,6336090,6346443,"siderophore","A","siderophore" -15,6429574,6475291,"nrps-like__t1pks__prodigiosin","A","nrps-like__t1pks__prodigiosin" -16,6632342,6643659,"ripp-like","A","ripp-like" -17,6656903,6676224,"terpene","A","terpene" -18,6842314,6855522,"siderophore","A","siderophore" -19,6881334,6951537,"t1pks__butyrolactone","A","t1pks__butyrolactone" -20,7088263,7142447,"thioamide-nrp__nrps","A","thioamide-nrp__nrps" -21,7409741,7432456,"lanthipeptide-class-iii","A","lanthipeptide-class-iii" -22,7506307,7532117,"terpene","A","terpene" -23,7570411,7618555,"pks-like__t1pks","A","pks-like__t1pks" -24,7682906,7709360,"lanthipeptide-class-i","A","lanthipeptide-class-i" -25,7973469,8047403,"other__t3pks","A","other__t3pks" -26,8269636,8290764,"indole","A","indole" -27,8475101,8548352,"t3pks__nrps__terpene","A","t3pks__nrps__terpene" diff --git a/arts_biocircos.csv b/arts_biocircos.csv deleted file mode 100644 index e58e1fc..0000000 --- a/arts_biocircos.csv +++ /dev/null @@ -1,113 +0,0 @@ -"Hit","Start","Stop","Core","Description","Count","ID","Cluster","Type","Type2","Evalue","Bitscore","Model" -"hit_1",189420,190434,"TIGR02027","rpoA: DNA-directed RNA polymerase, alpha subunit",2,1,1,"core","core",NA,NA,"Core" -"hit_1",218352,219531,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,2,2,"core","core",NA,NA,"Core" -"hit_1",342334,342592,"TIGR01808","CM_M_hiGC-arch: chorismate mutase",2,3,3,"core","core",NA,NA,"Core" -"hit_1",378025,379105,"TIGR00020","prfB: peptide chain release factor 2",2,4,4,"core","core",NA,NA,"Core" -"hit_2",441250,441925,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,5,5,"core","core",NA,NA,"Core" -"hit_1",604511,605669,"TIGR00635","ruvB: Holliday junction DNA helicase RuvB",2,6,6,"core","core",NA,NA,"Core" -"hit_1",610010,611042,"TIGR02012","tigrfam_recA: protein RecA",2,7,7,"core","core",NA,NA,"Core" -NA,684440,686288,"Not_core","ABC_efflux",1,8,8,"resistance","resistance",4.4e-92,307.9,"RF0007" -"hit_1",832714,834106,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,9,9,"core","core",NA,NA,"Core" -"hit_1",894045,895044,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",2,10,10,"core","core",NA,NA,"Core" -NA,894045,895044,"Not_core","Gp_dh_N",1,11,11,"resistance","resistance",3.1e-52,175.3,"PF00044.19" -"hit_1",913851,915291,"TIGR03356","BGL: beta-galactosidase",4,12,12,"core","core",NA,NA,"Core" -NA,964792,968566,"Not_core","Biotin_lipoyl",1,13,13,"resistance","resistance",5.5e-15,53.6,"PF00364.17" -"hit_1",1006626,1008339,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,14,14,"core","core",NA,NA,"Core" -"hit_1",1118001,1118622,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,15,15,"core","core",NA,NA,"Core" -"hit_1",1210337,1211417,"TIGR01430","aden_deam: adenosine deaminase",5,16,16,"core","core",NA,NA,"Core" -NA,1305890,1307336,"Not_core","Gp_dh_N",1,17,17,"resistance","resistance",2.9e-39,133.2,"PF00044.19" -NA,1486848,1488651,"Not_core","ABC_efflux",1,18,18,"resistance","resistance",2e-78,262.8,"RF0007" -"hit_1",1493927,1494182,"TIGR00105","L31: ribosomal protein bL31",2,19,19,"core","core",NA,NA,"Core" -"hit_1",1607820,1609002,"TIGR00485","EF-Tu: translation elongation factor Tu",2,20,20,"core","core",NA,NA,"Core" -NA,1782418,1783468,"Not_core","OTCace",1,21,21,"resistance","resistance",8.3e-37,125.3,"PF00185.19" -"hit_2",1815118,1816189,"TIGR00635","ruvB: Holliday junction DNA helicase RuvB",2,22,22,"core","core",NA,NA,"Core" -"hit_1",1854506,1858388,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,23,23,"core","core",NA,NA,"Core" -NA,1948555,1949320,"Not_core","Proteasome",1,24,24,"resistance","resistance",7.8e-26,89.3,"PF00227.21" -NA,1949394,1950171,"Not_core","Proteasome",1,25,25,"resistance","resistance",6.9e-38,128.6,"PF00227.21" -"hit_1",1969763,1971302,"TIGR01311","glycerol_kin: glycerol kinase",2,26,26,"core","core",NA,NA,"Core" -"hit_2",2054147,2055836,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,27,27,"core","core",NA,NA,"Core" -"hit_1",2247241,2248207,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,28,28,"core","core",NA,NA,"Core" -NA,2258773,2259589,"Not_core","AAC3",1,29,29,"resistance","resistance",1.2e-57,193.6,"RF0002" -"hit_1",2269202,2270726,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,30,30,"core","core",NA,NA,"Core" -"hit_1",2270722,2271796,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,31,31,"core","core",NA,NA,"Core" -"hit_2",2289079,2290087,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",2,32,32,"core","core",NA,NA,"Core" -NA,2289079,2290087,"Not_core","Gp_dh_N",1,33,33,"resistance","resistance",2.4e-61,204.9,"PF00044.19" -"hit_1",2366563,2368000,"TIGR01064","pyruv_kin: pyruvate kinase",2,34,34,"core","core",NA,NA,"Core" -"hit_1",2371194,2373699,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,35,35,"core","core",NA,NA,"Core" -"hit_3",2525428,2527162,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,36,36,"core","core",NA,NA,"Core" -"hit_2",2546594,2547746,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,37,37,"core","core",NA,NA,"Core" -NA,2553861,2555709,"Not_core","Biotin_lipoyl",1,38,38,"resistance","resistance",7.6e-48,158.8,"PF00364.17" -"hit_1",2556860,2559563,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",2,39,39,"core","core",NA,NA,"Core" -"hit_3",2637331,2638057,"TIGR01915","npdG: NADPH-dependent F420 reductase",3,40,40,"core","core",NA,NA,"Core" -"hit_2",2777725,2780473,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",2,41,41,"core","core",NA,NA,"Core" -NA,2878467,2879883,"Not_core","Carboxyl_trans",1,42,42,"resistance","resistance",2e-28,97.8,"PF01039.17" -NA,2889202,2891131,"Not_core","ABC_efflux",1,43,43,"resistance","resistance",6.5e-94,313.9,"RF0007" -"hit_2",2947597,2948908,"TIGR03356","BGL: beta-galactosidase",4,44,44,"core","core",NA,NA,"Core" -"hit_2",2958166,2959171,"TIGR01430","aden_deam: adenosine deaminase",5,45,45,"core","core",NA,NA,"Core" -"hit_1",2966703,2967840,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,46,46,"core","core",NA,NA,"Core" -"hit_2",3075412,3077989,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,47,47,"core","core",NA,NA,"Core" -"hit_3",3092085,3094659,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,48,48,"core","core",NA,NA,"Core" -NA,3215472,3219222,"Not_core","ABC_efflux",1,49,49,"resistance","resistance",3.4e-167,555.7,"RF0007" -NA,3231960,3233577,"Not_core","Carboxyl_trans",1,50,50,"resistance","resistance",1.8e-163,543.2,"PF01039.17" -NA,3233591,3235544,"Not_core","Biotin_lipoyl",1,51,51,"resistance","resistance",1.8e-19,67.9,"PF00364.17" -"hit_1",3246397,3248215,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,52,52,"core","core",NA,NA,"Core" -"hit_3",3256845,3258285,"TIGR03356","BGL: beta-galactosidase",4,53,53,"core","core",NA,NA,"Core" -"hit_1",3358809,3359166,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,54,54,"core","core",NA,NA,"Core" -"hit_2",3372316,3373663,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,55,55,"core","core",NA,NA,"Core" -"hit_2",3451493,3452552,"TIGR00020","prfB: peptide chain release factor 2",2,56,56,"core","core",NA,NA,"Core" -NA,3859699,3861550,"Not_core","Biotin_lipoyl",1,57,57,"resistance","resistance",1.9e-15,55,"PF00364.17" -NA,3861555,3863154,"Not_core","Carboxyl_trans",1,58,58,"resistance","resistance",6.3e-135,449.1,"PF01039.17" -NA,3965434,3966136,"Not_core","Pentapeptide_4",1,59,59,"resistance","resistance",9.9e-18,62.5,"PF13599.1" -"hit_1",4271838,4274142,"TIGR01695","murJ_mviN: murein biosynthesis integral membrane protein MurJ",2,60,60,"core","core",NA,NA,"Core" -NA,4289532,4290663,"Not_core","TIGR00663",1,61,61,"resistance","resistance",3.4e-90,301.1,"TIGR00663" -NA,4293898,4295962,"Not_core","DNA_gyraseB",1,62,62,"resistance","resistance",3.3e-61,204.2,"PF00204.20" -NA,4296004,4298599,"Not_core","DNA_topoisoIV",1,63,63,"resistance","resistance",1.9e-147,490.3,"PF00521.15" -NA,4340245,4341697,"Not_core","Biotin_lipoyl",1,64,64,"resistance","resistance",1.9e-17,61.5,"PF00364.17" -NA,4357579,4359010,"Not_core","Biotin_lipoyl",1,65,65,"resistance","resistance",8.9e-23,78.5,"PF00364.17" -NA,4400540,4401503,"Not_core","ClassA",1,66,66,"resistance","resistance",2e-93,311.1,"RF0053" -"hit_1",4486449,4488294,"TIGR02350","prok_dnaK: chaperone protein DnaK",2,67,67,"core","core",NA,NA,"Core" -"hit_2",4489010,4490186,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,68,68,"core","core",NA,NA,"Core" -"hit_1",4738603,4739638,"TIGR00233","trpS: tryptophan--tRNA ligase",2,69,69,"core","core",NA,NA,"Core" -"hit_2",4777754,4779272,"TIGR01311","glycerol_kin: glycerol kinase",2,70,70,"core","core",NA,NA,"Core" -"hit_4",4888416,4890117,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,71,71,"core","core",NA,NA,"Core" -"hit_3",4926907,4927948,"TIGR01430","aden_deam: adenosine deaminase",5,72,72,"core","core",NA,NA,"Core" -NA,4935412,4938898,"Not_core","TIGR02013",1,73,73,"resistance","resistance",0,1811.5,"TIGR02013" -"hit_2",4947037,4948231,"TIGR00485","EF-Tu: translation elongation factor Tu",2,74,74,"core","core",NA,NA,"Core" -"hit_2",4972763,4973786,"TIGR02027","rpoA: DNA-directed RNA polymerase, alpha subunit",2,75,75,"core","core",NA,NA,"Core" -"hit_2",4992045,4993893,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,76,76,"core","core",NA,NA,"Core" -"hit_2",5013006,5013315,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,77,77,"core","core",NA,NA,"Core" -"hit_2",5059646,5059940,"TIGR01808","CM_M_hiGC-arch: chorismate mutase",2,78,78,"core","core",NA,NA,"Core" -"hit_1",5122802,5124251,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,79,79,"core","core",NA,NA,"Core" -"hit_2",5126892,5127906,"TIGR00233","trpS: tryptophan--tRNA ligase",2,80,80,"core","core",NA,NA,"Core" -"hit_4",5184666,5185824,"TIGR01430","aden_deam: adenosine deaminase",5,81,81,"core","core",NA,NA,"Core" -NA,5203143,5204919,"Not_core","Biotin_lipoyl",1,82,82,"resistance","resistance",2e-17,61.4,"PF00364.17" -NA,5206839,5208429,"Not_core","Carboxyl_trans",1,83,83,"resistance","resistance",2.7e-196,651.5,"PF01039.17" -"hit_1",5480964,5481975,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,84,84,"core","core",NA,NA,"Core" -"hit_5",5519276,5521001,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",5,85,85,"core","core",NA,NA,"Core" -"hit_2",5582919,5583141,"TIGR00105","L31: ribosomal protein bL31",2,86,86,"core","core",NA,NA,"Core" -"hit_2",5585252,5585900,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,87,87,"core","core",NA,NA,"Core" -"hit_2",5586692,5587931,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,88,88,"core","core",NA,NA,"Core" -"hit_2",5640700,5642128,"TIGR01064","pyruv_kin: pyruvate kinase",2,89,89,"core","core",NA,NA,"Core" -"hit_3",5696187,5697447,"SHMT","PF00464.15: Serine hydroxymethyltransferase",3,90,90,"core","core",NA,NA,"Core" -NA,5765225,5766830,"Not_core","Carboxyl_trans",1,91,91,"resistance","resistance",1.1e-201,669.2,"PF01039.17" -"hit_1",5829196,5829937,"TIGR02227","sigpep_I_bact: signal peptidase I",3,92,92,"core","core",NA,NA,"Core" -"hit_2",5830908,5831889,"TIGR02227","sigpep_I_bact: signal peptidase I",3,93,93,"core","core",NA,NA,"Core" -"hit_3",5831956,5832718,"TIGR02227","sigpep_I_bact: signal peptidase I",3,94,94,"core","core",NA,NA,"Core" -"hit_5",5860467,5861535,"TIGR01430","aden_deam: adenosine deaminase",5,95,95,"core","core",NA,NA,"Core" -"hit_1",5905150,5906287,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,96,96,"core","core",NA,NA,"Core" -"hit_2",5954884,5955787,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,97,97,"core","core",NA,NA,"Core" -"hit_2",5993317,5994439,"TIGR02012","tigrfam_recA: protein RecA",2,98,98,"core","core",NA,NA,"Core" -NA,6054229,6056353,"Not_core","DNA_gyraseB",1,99,99,"resistance","resistance",1.4e-50,169.7,"PF00204.20" -NA,6065958,6068412,"Not_core","DNA_topoisoIV",1,100,100,"resistance","resistance",1.6e-146,487.3,"PF00521.15" -NA,6191447,6192455,"Not_core","OTCace",1,101,101,"resistance","resistance",2.9e-48,162.5,"PF00185.19" -"hit_1",6284123,6286091,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,102,102,"core","core",NA,NA,"Core" -"hit_2",6448713,6449832,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,103,103,"core","core",NA,NA,"Core" -"hit_2",6629728,6631411,"TIGR01695","murJ_mviN: murein biosynthesis integral membrane protein MurJ",2,104,104,"core","core",NA,NA,"Core" -"hit_2",6824083,6825955,"TIGR02350","prok_dnaK: chaperone protein DnaK",2,105,105,"core","core",NA,NA,"Core" -"hit_4",6899648,6901040,"TIGR03356","BGL: beta-galactosidase",4,106,106,"core","core",NA,NA,"Core" -"hit_2",6980369,6981305,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,107,107,"core","core",NA,NA,"Core" -"hit_2",6981301,6982924,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,108,108,"core","core",NA,NA,"Core" -"hit_2",7074278,7075436,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,109,109,"core","core",NA,NA,"Core" -"hit_2",7075480,7077394,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,110,110,"core","core",NA,NA,"Core" -NA,7164494,7166429,"Not_core","ABC_efflux",1,111,111,"resistance","resistance",2.7e-77,259.1,"RF0007" -NA,7196834,7198016,"Not_core","Chlor_Efflux_Pump",1,112,112,"resistance","resistance",8.8e-117,389.1,"RF0051" diff --git a/dev/02_dev.R b/dev/02_dev.R index e70b0de..a9fe8a4 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -98,7 +98,6 @@ devtools::build_vignettes() usethis::use_coverage() # Create a summary readme for the testthat subdirectory -covrpage::covrpage() ## CI ---- ## Use this part of the script if you need to set up a CI diff --git a/group_by.csv b/group_by.csv deleted file mode 100644 index 55fc526..0000000 --- a/group_by.csv +++ /dev/null @@ -1,8 +0,0 @@ -"ARTS","Antismash","Group" -"1","2","group_1" -"44","8","group_2" -"85","11","group_3" -"91","13","group_4" -"103","15","group_5" -"106","19","group_6" -"NA","NA","group_7" diff --git a/rsconnect/shinyapps.io/tsrnlv/bgcviz.dcf b/rsconnect/shinyapps.io/tsrnlv/bgcviz.dcf new file mode 100644 index 0000000..fb731dd --- /dev/null +++ b/rsconnect/shinyapps.io/tsrnlv/bgcviz.dcf @@ -0,0 +1,10 @@ +name: bgcviz +title: +username: tsrnlv +account: tsrnlv +server: shinyapps.io +hostUrl: https://api.shinyapps.io/v1 +appId: 10154357 +bundleId: 7787758 +url: https://tsrnlv.shinyapps.io/bgcviz/ +version: 1 From 4ad108a3f94360e3f37b95230f277bb2c0d06ce0 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Fri, 13 Oct 2023 15:14:54 +0300 Subject: [PATCH 191/199] fixing tree object --- R/app_ui.R | 16 +++++++++++++++- R/emerald_try.R | 24 ++++++++++++++++++++++++ R/fct_helpers.R | 2 +- R/fct_reading_functions.R | 4 +++- R/mod_arts_tree.R | 1 + 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 R/emerald_try.R diff --git a/R/app_ui.R b/R/app_ui.R index bb0c39f..fa57eaa 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -221,7 +221,19 @@ app_ui <- function(request) { ) ) ), - + div( + id = "id5", + shinydashboardPlus::box( + title = "Upload EmeraldBGC data", + id = "emerald_arts_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("emerald_data", + "Upload EmeraldBGC data", + accept = list(".gff", ".gff3") + ) + ) + ), div( id = "id4", shinydashboardPlus::box( @@ -237,6 +249,8 @@ app_ui <- function(request) { shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), shiny::actionButton("ripp_sco","Use RippMiner-Genome data example data from S.coelicolor"), + shiny::actionButton("emerald_sco","Use EmeraldBGC data example data from S.coelicolor"), + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) ) ) diff --git a/R/emerald_try.R b/R/emerald_try.R new file mode 100644 index 0000000..5e74498 --- /dev/null +++ b/R/emerald_try.R @@ -0,0 +1,24 @@ +read_emerald <- function(data) { + # get rid off unneeded rows + all <- readLines(data) + filtered_lines <- all[!grepl("^#|^$", all)] + data <- paste(filtered_lines, collapse = "\n") + data_connection <- textConnection(data) + # create dataframe + emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) + attributes_split <- strsplit(emerald_data$attributes, ";") + attribute_list <- vector("list", length(attributes_split)) + key_value_pairs <- strsplit(attributes_split[[1]], "=") + key <- lapply(key_value_pairs, function(x) x[1]) + for (i in 1:length(attributes_split)) { + value <- lapply(key_value_pairs, function(x) x[2]) + attribute_list[[i]] <- setNames(as.list(value), unlist(key)) + } + + attributes_df <- do.call(rbind, attribute_list) + emerald_data <- cbind(emerald_data, attributes_df) + return (emerald_data) +} + +data <- read_emerald("/Users/levchik/Downloads/streptomyces_coelicolor.gff") +data diff --git a/R/fct_helpers.R b/R/fct_helpers.R index 86debe2..8548c9b 100644 --- a/R/fct_helpers.R +++ b/R/fct_helpers.R @@ -1,4 +1,4 @@ -#' rename_vector + #' rename_vector #' #' @description Function, that given the dataframe, and renaming dataframe, returns renamed vector. #' diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 9e3683e..04db102 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -5,10 +5,12 @@ #' #' #' #' @noRd + + + read_ripp <- function(data) { all <- readLines(data) filtered_lines <- all[!grepl("^#|^$", all)] - print(filtered_lines) data <- paste(filtered_lines, collapse = "\n") data_connection <- textConnection(data) ripp_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("Cluster", "Type", "Start", "Stop")) diff --git a/R/mod_arts_tree.R b/R/mod_arts_tree.R index a825cd0..46d9c2e 100644 --- a/R/mod_arts_tree.R +++ b/R/mod_arts_tree.R @@ -47,6 +47,7 @@ mod_arts_tree_server <- function(id, vals) { # Define a reactive expression for the tree tree_data <- reactive({ + tree <- list() # Create the tree object tree$core <- vals$arts_tree_data$Trees[vals$arts_tree_data$TreesFiles == input$phylo_file][[1]] tree$type <- "rectangular" From d6d82474edc21f653d286fdc20de861250fa4ba8 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Sat, 14 Oct 2023 05:00:57 +0300 Subject: [PATCH 192/199] implementing processing of reference data,emerald/sanntis --- R/app_server.R | 178 +++++++++++++++++++++--- R/app_ui.R | 21 ++- R/emerald_try.R | 2 - R/fct_reading_functions.R | 21 +++ man/{read_ripp.Rd => read_reference.Rd} | 6 +- 5 files changed, 200 insertions(+), 28 deletions(-) rename man/{read_ripp.Rd => read_reference.Rd} (83%) diff --git a/R/app_server.R b/R/app_server.R index c3e5d8d..948b490 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -15,7 +15,7 @@ app_server <- function(input, output, session) { list( input$sempi_data, input$anti_data, input$prism_data, input$sempi_sco, input$anti_sco, input$prism_sco, - input$ripp_sco, input$ripp_data + input$ripp_sco, input$ripp_data, emerald_data, input$reference_data ) }) biocircos_listen <- shiny::reactive({ @@ -24,14 +24,14 @@ app_server <- function(input, output, session) { input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, vals$coloring_datatable, - vals$ripp_data + vals$ripp_data, vals$emerald_data, vals$reference_data ) }) inputData <- shiny::reactive({ list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input, - vals$ripp_data_input + vals$ripp_data_input, vals$emerald_data_input, vals$reference_data_input ) }) dynamicInput <- shiny::reactive({ @@ -41,7 +41,7 @@ app_server <- function(input, output, session) { list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data, - vals$ripp_data, vals$arts_tree_data + vals$ripp_data, vals$arts_tree_data, vals$emerald_data, vals$reference_data ) }) @@ -70,11 +70,15 @@ app_server <- function(input, output, session) { need_filter = FALSE, filter_data = FALSE, choices = list(ref = NULL, group_by = NULL, ref_col_biocircos = NULL, ref_comparison_gecco = NULL, ref_comparison = NULL), renamed = NULL, renaming_notification = list(), rename_y_axis = list(), can_plot_deep_ref_2 = FALSE, can_plot_deep_ref = FALSE, can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE, - ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL, seg_df_ref_ri = NULL + ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL, seg_df_ref_ri = NULL, + emerald_data = NULL, emerald_data_input = FALSE, emerald_type = NULL, emerald_interact = NULL, seg_df_ref_emer = NULL, + reference_data = NULL, reference_data_input = FALSE, reference_type = NULL, reference_interact = NULL, seg_df_ref_refer = NULL ) vals$computed <- list( - anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE, ripp = FALSE + anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, + prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE, + ripp = FALSE, emerald = FALSE, reference = FALSE ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") @@ -88,25 +92,29 @@ app_server <- function(input, output, session) { data_uploads <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", - "ripp_data_input" + "ripp_data_input","emerald_data_input","reference_data_input" ) data_uploads_inter <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", - "ripp_data_input" + "ripp_data_input","emerald_data_input","reference_data_input" ) # Universal beginings for variables, used in the app for different data - soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp") + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp","emerald/sanntis","REF") # The Namings, meaning how to label the data on the plots - soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder", "RippMiner") + soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", + "ARTS", "DeepBGC", "GECCO", "RRE-Finder", + "RippMiner","Emerald/SanntiS","REF") # Dataframes undes vals$list, that stored the data - data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", "rre_data","ripp_data") + data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", + "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", + "rre_data","ripp_data","emerald_data","reference_data") # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "Ripp") + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "Ripp",'Emer',"REF") # Used for deep reference 2 plot soft_datafr <- c( "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r", "seg_df_ref_ri" + "seg_df_ref_g", "seg_df_ref_r", "seg_df_ref_ri","seg_df_ref_emer","seg_df_ref_refer" ) vals$score_a <- 50 @@ -150,7 +158,6 @@ app_server <- function(input, output, session) { vals$can_plot_barplot_rank <- TRUE vals$can_plot_group_table <- TRUE } - ########################################################################### ########################################################################### ### ### @@ -161,6 +168,78 @@ app_server <- function(input, output, session) { # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: + process_reference <- function(data, example_data = FALSE) { + if (example_data == TRUE) { + reference_data <- data + } else { + reference_data <- read_emerald(data) + } + vals$reference_type <- reference_data$Type2 + vals$reference_data <- reference_data + vals$reference_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "Reference" = "Reference") + vals$choices$group_by <- c(vals$choices$group_by, "Reference" = "Reference") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Reference" = "Reference") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Reference" = "Reference") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Reference" = "Reference") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "Reference" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "Reference" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "Reference" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "Reference" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "Reference" + ) + } + } + + process_emerald <- function(data, example_data = FALSE) { + if (example_data == TRUE) { + emerald_data <- data + } else { + emerald_data <- read_emerald(data) + } + vals$emerald_type <- emerald_data$Type2 + vals$emerald_dat <- emerald_data + vals$emerald_data_input <- TRUE + vals$data_upload_count <- vals$data_upload_count + 1 + vals$choices$ref <- c(vals$choices$ref, "Emerald/SanntiS" = "Emerald/SanntiS") + vals$choices$group_by <- c(vals$choices$group_by, "Emerald/SanntiS" = "Emerald/SanntiS") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Emerald/SanntiS" = "Emerald/SanntiS") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Emerald/SanntiS" = "Emerald/SanntiS") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Emerald/SanntiS" = "Emerald/SanntiS") + update_ui_with_data() + disable_event_logic() + if (vals$data_upload_count == 1) { + shiny::updateSelectInput(session, "ref", + selected = "Emerald/SanntiS" + ) + shiny::updateSelectInput(session, "group_table_ui_1-group_by", + selected = "Emerald/SanntiS" + ) + shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", + selected = "Emerald/SanntiS" + ) + shiny::updateSelectInput(session, "ref_col_biocircos", + selected = "Emerald/SanntiS" + ) + shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", + selected = "Emerald/SanntiS" + ) + } + } + process_rippminer <- function(data, example_data = FALSE) { if (example_data == TRUE) { ripp_data <- data @@ -232,6 +311,8 @@ app_server <- function(input, output, session) { ) } } + + process_gecco <- function(data, example_data = FALSE) { if (example_data == TRUE) { gecco_data <- data @@ -477,6 +558,11 @@ app_server <- function(input, output, session) { #---------------------------------------------------------------- ## Loading and processing of example data - ## ---------------------------------------------------------------- + + shiny::observeEvent(input$emerald_sco, { + process_emerald(BGCViz:::emerald_data, example_data = TRUE) + }) + shiny::observeEvent(input$ripp_sco, { process_rippminer(BGCViz:::ripp_data, example_data = TRUE) }) @@ -513,10 +599,15 @@ app_server <- function(input, output, session) { ## Loading and processing user data - ## ---------------------------------------------------------------- + shiny::observeEvent(input$reference_data, { + process_reference(input$reference_data$datapath) + }) + + shiny::observeEvent(input$emerald_data, { + process_emerald(input$emerald_data$datapath) + }) + shiny::observeEvent(input$ripp_data, { - - # Read data - process_rippminer(input$ripp_data$datapath) }) @@ -685,6 +776,22 @@ app_server <- function(input, output, session) { shinyjs::hideElement(selector = "#ripp_hybrid") } }) + + shiny::observeEvent(vals$emerald_data_input, { + if (vals$emerald_data_input == TRUE){ + shinyjs::showElement(selector = "#emerald_hybrid") + } else { + shinyjs::hideElement(selector = "#emerald_hybrid") + } + }) + + shiny::observeEvent(vals$reference_data_input, { + if (vals$reference_data_input == TRUE){ + shinyjs::showElement(selector = "#reference_hybrid") + } else { + shinyjs::hideElement(selector = "#reference_hybrid") + } + }) # Show prism options if data is available # If hide anti is FALSE (checkbox), then show them # Only if prism_json file, then show Prism-Supp @@ -994,8 +1101,8 @@ app_server <- function(input, output, session) { "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", - "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_prism_box", - "upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", + "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_emerald_box", "upload_reference_box", + "upload_prism_box","upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", "download_data_box", "gecco_filtering_box", "deep_filtering_box", "arts_tree_box" ) @@ -1017,6 +1124,21 @@ app_server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code + shiny::observeEvent(input$reference_hybrid, ignoreInit = TRUE, { + if (input$reference_hybrid == TRUE) { + vals$reference_data$Type2 <- hybrid_col(vals$reference_data) + } else { + vals$reference_data$Type2 <- vals$reference_type + } + }) + + shiny::observeEvent(input$emerald_hybrid, ignoreInit = TRUE, { + if (input$emerald_hybrid == TRUE) { + vals$emerald_data$Type2 <- hybrid_col(vals$emerald_data) + } else { + vals$emerald_data$Type2 <- vals$emerald_type + } + }) shiny::observeEvent(input$ripp_hybrid, ignoreInit = TRUE, { if (input$ripp_hybrid == TRUE) { vals$ripp_data$Type2 <- hybrid_col(vals$ripp_data) @@ -1045,6 +1167,7 @@ app_server <- function(input, output, session) { vals$sempi_data$Type2 <- vals$sempi_type } }) + # Rename the data, if button is clicked shiny::observeEvent(input$rename, { rename_data <- vals$rename_data @@ -1082,6 +1205,22 @@ app_server <- function(input, output, session) { ripp_data["Type2"] <- vals$ripp_data vals$ripp_data <- ripp_data } + if (vals$emerald_data_input == TRUE) { + emerald_data <- vals$emerald_data + res <- rename_vector(emerald_data, rename_data, vals$renaming_notification) + vals$emerald_emerald <- res[[1]] + vals$renaming_notification <-res[[2]] + emerald_data["Type2"] <- vals$emerald_data + vals$emerald_data <- emerald_data + } + if (vals$reference_data_input == TRUE) { + reference_data <- vals$reference_data + res <- rename_vector(reference_data, rename_data, vals$renaming_notification) + vals$reference_type <- res[[1]] + vals$renaming_notification <-res[[2]] + reference_data["Type2"] <- vals$reference_data + vals$reference_data <- reference_data + } shinyjs::showElement(selector = "#reset_name") shinyjs::hideElement(selector = "#rename") vals$renamed <- TRUE @@ -1119,6 +1258,7 @@ app_server <- function(input, output, session) { prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } + ###HEERE I STOPED### if (vals$ripp_data_input == TRUE) { ripp_data <- vals$ripp_data res <- rename_vector(ripp_data, rename_data, vals$renaming_notification) diff --git a/R/app_ui.R b/R/app_ui.R index fa57eaa..ba505f3 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -164,6 +164,19 @@ app_ui <- function(request) { ) ) ), + div( + id = "id6", + shinydashboardPlus::box( + title = "Upload reference data", + id = "upload_reference_box", + collapsible = TRUE, + closable = TRUE, + shiny::fileInput("reference_data", + "Upload reference data", + accept = ".csv" + ) + ) + ), div( id = "id5", shinydashboardPlus::box( @@ -224,12 +237,12 @@ app_ui <- function(request) { div( id = "id5", shinydashboardPlus::box( - title = "Upload EmeraldBGC data", - id = "emerald_arts_box", + title = "Upload EmeraldBGC/SanntiS data", + id = "upload_emerald_box", collapsible = TRUE, closable = TRUE, shiny::fileInput("emerald_data", - "Upload EmeraldBGC data", + "Upload EmeraldBGC/SanntiS data", accept = list(".gff", ".gff3") ) ) @@ -249,7 +262,7 @@ app_ui <- function(request) { shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), shiny::actionButton("ripp_sco","Use RippMiner-Genome data example data from S.coelicolor"), - shiny::actionButton("emerald_sco","Use EmeraldBGC data example data from S.coelicolor"), + shiny::actionButton("emerald_sco","Use Emerald/SanntiS data example data from S.coelicolor"), shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) ) diff --git a/R/emerald_try.R b/R/emerald_try.R index 5e74498..f8c6a23 100644 --- a/R/emerald_try.R +++ b/R/emerald_try.R @@ -20,5 +20,3 @@ read_emerald <- function(data) { return (emerald_data) } -data <- read_emerald("/Users/levchik/Downloads/streptomyces_coelicolor.gff") -data diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 04db102..2d73918 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -6,6 +6,27 @@ #' #' @noRd +read_reference <- function(data){ + reference_data <- data + res_validation <- validate_basic_input(reference_data) + if (!(res_validation[[1]])) { + reference_data <- NULL + return(NULL) + } else { + reference_data <- res_validation[[2]] + } + reference_data$chromosome <- rep("GF", length(ripp_data$Cluster)) + #Type magic + reference_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) + reference_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) + #Mutate NAs + reference_data <- dplyr::mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) + + return(reference_data) +} + + + read_ripp <- function(data) { diff --git a/man/read_ripp.Rd b/man/read_reference.Rd similarity index 83% rename from man/read_ripp.Rd rename to man/read_reference.Rd index ce237af..202b6d6 100644 --- a/man/read_ripp.Rd +++ b/man/read_reference.Rd @@ -1,14 +1,14 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/fct_reading_functions.R -\name{read_ripp} -\alias{read_ripp} +\name{read_reference} +\alias{read_reference} \title{#' @description A function, that reads RiPPMiner-Genome file txt #' #' @return csv file #' #' @noRd} \usage{ -read_ripp(data) +read_reference(data) } \description{ #' @description A function, that reads RiPPMiner-Genome file txt From 3a1bbcbd1859b37a216b2f5a50845f1a1828512b Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Sat, 14 Oct 2023 18:48:24 +0300 Subject: [PATCH 193/199] processed emerald and reference in app_server.R --- R/app_server.R | 51 +++++++++++++++++++++++++++++++++------ R/fct_reading_functions.R | 22 +++++++++++++++++ R/mod_deep_reference_2.R | 14 +++++++++++ 3 files changed, 79 insertions(+), 8 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index 948b490..edca8bf 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -15,7 +15,7 @@ app_server <- function(input, output, session) { list( input$sempi_data, input$anti_data, input$prism_data, input$sempi_sco, input$anti_sco, input$prism_sco, - input$ripp_sco, input$ripp_data, emerald_data, input$reference_data + input$ripp_sco, input$ripp_data, input$emerald_data, input$reference_data ) }) biocircos_listen <- shiny::reactive({ @@ -1258,7 +1258,6 @@ app_server <- function(input, output, session) { prism_data["Type2"] <- vals$prism_type vals$prism_data <- prism_data } - ###HEERE I STOPED### if (vals$ripp_data_input == TRUE) { ripp_data <- vals$ripp_data res <- rename_vector(ripp_data, rename_data, vals$renaming_notification) @@ -1267,13 +1266,41 @@ app_server <- function(input, output, session) { ripp_data["Type2"] <- vals$ripp_data vals$ripp_data <- ripp_data } - }) + if (vals$emerald_data_input == TRUE) { + emerald_data <- vals$emerald_data + res <- rename_vector(emerald_data, rename_data, vals$renaming_notification) + vals$emerald_type <- res[[1]] + vals$renaming_notification <-res[[2]] + emerald_data["Type2"] <- vals$emerald_data + vals$emerald_data <- emerald_data + } + if (vals$reference_data_input == TRUE) { + reference_data <- vals$reference_data + res <- rename_vector(reference_data, rename_data, vals$renaming_notification) + vals$reference_type <- res[[1]] + vals$renaming_notification <-res[[2]] + reference_data["Type2"] <- vals$reference_data + vals$reference_data <- reference_data + } + } + + ) # Reset the renaming. Uncheck the hybrid checkboxes shiny::observeEvent(input$reset_name, { vals$anti_data["Type2"] <- vals$anti_data["Type"] vals$sempi_data["Type2"] <- vals$sempi_data["Type"] - vals$ prism_data["Type2"] <- vals$ prism_data["Type"] + vals$prism_data["Type2"] <- vals$prism_data["Type"] vals$ripp_data["Type2"] <- vals$ripp_data["Type"] + vals$emerald_data["Type2"] <- vals$emerald_data["Type"] + vals$reference_data["Type2"] <- vals$reference_data["Type"] + if (input$reference_hybrid == TRUE) { + shiny::showNotification(paste("Reference cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) + shiny::showNotification(inputId ="reference_hybrid", value = FALSE) + } + if (input$emerald_hybrid == TRUE) { + shiny::showNotification(paste("Emerald/SanntiS cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) + shiny::showNotification(inputId ="emerald_hybrid", value = FALSE) + } if (input$ripp_hybrid == TRUE) { shiny::showNotification(paste("RippMiner cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) shiny::showNotification(inputId ="ripp_hybrid", value = FALSE) @@ -1341,13 +1368,24 @@ app_server <- function(input, output, session) { # dplyr::filter while ploting then. shiny::observeEvent(inputData(), ignoreInit = TRUE, priority = 5, { # GENERATE DATA + if (vals$reference_data_input == TRUE) { + reference_data <- vals$reference_data + reference_inter <- vals$reference_data %>% + dplyr::select(Start, Stop) + reference_inter$seqnames <- "chr" + } + if (vals$emerald_data_input == TRUE) { + emerald_data <- vals$emerald_data + emerald_inter <- vals$emerald_data %>% + dplyr::select(Start, Stop) + emerald_inter$seqnames <- "chr" + } if (vals$ripp_data_input == TRUE) { ripp_data <- vals$ripp_data ripp_inter <- vals$ripp_data %>% dplyr::select(Start, Stop) ripp_inter$seqnames <- "chr" } - if (vals$anti_data_input == TRUE) { anti_data <- vals$anti_data anti_inter <- vals$anti_data %>% @@ -1720,9 +1758,6 @@ app_server <- function(input, output, session) { "Num_domains", "Num_proteins", "Average_p", "Max_p" ) - - - # MAKE COMPUTATIONS sup_index <- 1 soft_lttrs <- lett diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 2d73918..bcd466d 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -25,6 +25,28 @@ read_reference <- function(data){ return(reference_data) } +read_emerald <- function(data) { + # get rid off unneeded rows + all <- readLines(data) + filtered_lines <- all[!grepl("^#|^$", all)] + data <- paste(filtered_lines, collapse = "\n") + data_connection <- textConnection(data) + # create dataframe + emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) + attributes_split <- strsplit(emerald_data$attributes, ";") + attribute_list <- vector("list", length(attributes_split)) + key_value_pairs <- strsplit(attributes_split[[1]], "=") + key <- lapply(key_value_pairs, function(x) x[1]) + for (i in 1:length(attributes_split)) { + value <- lapply(key_value_pairs, function(x) x[2]) + attribute_list[[i]] <- setNames(as.list(value), unlist(key)) + } + + attributes_df <- do.call(rbind, attribute_list) + emerald_data <- cbind(emerald_data, attributes_df) + return (emerald_data) +} + diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 2bd56c2..40581df 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -71,6 +71,20 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { ) plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) + if (vals$reference_data_input == TRUE){ + plot <- plot + + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_refer, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } + if (vals$emerald_data_input == TRUE){ + plot <- plot + + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_emer, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3)) + } if (vals$ripp_data_input == TRUE){ plot <- plot + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_ri, ggplot2::aes(x, y, From b2c9dbf6e4bfacb48f394c5fb4eee6322656e82e Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Mon, 23 Oct 2023 21:07:37 +0300 Subject: [PATCH 194/199] Emerald/Santiss working, no deep testing performed --- R/app_server.R | 18 +++++++------ R/app_ui.R | 7 +++-- R/emerald_try.R | 43 ++++++++++++++--------------- R/fct_reading_functions.R | 38 +++++++++++++------------- R/mod_deepbgc_plots.R | 49 ++++++++++++++++++++++++++++++---- R/mod_gecco_plots.R | 44 +++++++++++++++++++++++++++--- R/mod_group_table.R | 6 ++++- R/utils_deep_reference.R | 28 +++++++++++++++++++ README.Rmd | 2 +- README.md | 2 +- data-raw/use_data_internally.R | 2 +- dev/02_dev.R | 4 +++ inst/extdata/rename.csv | 4 +-- 13 files changed, 182 insertions(+), 65 deletions(-) diff --git a/R/app_server.R b/R/app_server.R index edca8bf..c1d0042 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -100,11 +100,11 @@ app_server <- function(input, output, session) { "ripp_data_input","emerald_data_input","reference_data_input" ) # Universal beginings for variables, used in the app for different data - soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp","emerald/sanntis","REF") + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp","emerald","reference") # The Namings, meaning how to label the data on the plots soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder", - "RippMiner","Emerald/SanntiS","REF") + "RippMiner","Emerald/SanntiS","Reference") # Dataframes undes vals$list, that stored the data data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", @@ -172,7 +172,7 @@ app_server <- function(input, output, session) { if (example_data == TRUE) { reference_data <- data } else { - reference_data <- read_emerald(data) + reference_data <- read_reference(data) } vals$reference_type <- reference_data$Type2 vals$reference_data <- reference_data @@ -211,7 +211,7 @@ app_server <- function(input, output, session) { emerald_data <- read_emerald(data) } vals$emerald_type <- emerald_data$Type2 - vals$emerald_dat <- emerald_data + vals$emerald_data <- emerald_data vals$emerald_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 vals$choices$ref <- c(vals$choices$ref, "Emerald/SanntiS" = "Emerald/SanntiS") @@ -559,9 +559,9 @@ app_server <- function(input, output, session) { ## Loading and processing of example data - ## ---------------------------------------------------------------- - shiny::observeEvent(input$emerald_sco, { - process_emerald(BGCViz:::emerald_data, example_data = TRUE) - }) + # shiny::observeEvent(input$emerald_sco, { + # process_emerald(BGCViz:::emerald_data, example_data = TRUE) + # }) shiny::observeEvent(input$ripp_sco, { process_rippminer(BGCViz:::ripp_data, example_data = TRUE) @@ -1207,7 +1207,9 @@ app_server <- function(input, output, session) { } if (vals$emerald_data_input == TRUE) { emerald_data <- vals$emerald_data + print('here it is') res <- rename_vector(emerald_data, rename_data, vals$renaming_notification) + print('here also') vals$emerald_emerald <- res[[1]] vals$renaming_notification <-res[[2]] emerald_data["Type2"] <- vals$emerald_data @@ -1748,7 +1750,7 @@ app_server <- function(input, output, session) { } index <- index + 1 } - + lett <- rev(LETTERS)[1:(length(data_uploads)+1)] diff --git a/R/app_ui.R b/R/app_ui.R index ba505f3..afaf12f 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -237,12 +237,12 @@ app_ui <- function(request) { div( id = "id5", shinydashboardPlus::box( - title = "Upload EmeraldBGC/SanntiS data", + title = "Upload Emerald/SanntiS data", id = "upload_emerald_box", collapsible = TRUE, closable = TRUE, shiny::fileInput("emerald_data", - "Upload EmeraldBGC/SanntiS data", + "Upload Emerald/SanntiS data", accept = list(".gff", ".gff3") ) ) @@ -262,8 +262,7 @@ app_ui <- function(request) { shiny::actionButton("rre_sco", "Use RRE-Finder example data from S.coelicolor"), shiny::actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), shiny::actionButton("ripp_sco","Use RippMiner-Genome data example data from S.coelicolor"), - shiny::actionButton("emerald_sco","Use Emerald/SanntiS data example data from S.coelicolor"), - + shiny::numericInput("chr_len", "Please type chr len of an organism", value = 10000000) ) ) diff --git a/R/emerald_try.R b/R/emerald_try.R index f8c6a23..fc88d90 100644 --- a/R/emerald_try.R +++ b/R/emerald_try.R @@ -1,22 +1,23 @@ -read_emerald <- function(data) { - # get rid off unneeded rows - all <- readLines(data) - filtered_lines <- all[!grepl("^#|^$", all)] - data <- paste(filtered_lines, collapse = "\n") - data_connection <- textConnection(data) - # create dataframe - emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) - attributes_split <- strsplit(emerald_data$attributes, ";") - attribute_list <- vector("list", length(attributes_split)) - key_value_pairs <- strsplit(attributes_split[[1]], "=") - key <- lapply(key_value_pairs, function(x) x[1]) - for (i in 1:length(attributes_split)) { - value <- lapply(key_value_pairs, function(x) x[2]) - attribute_list[[i]] <- setNames(as.list(value), unlist(key)) - } - - attributes_df <- do.call(rbind, attribute_list) - emerald_data <- cbind(emerald_data, attributes_df) - return (emerald_data) -} +# read_emerald <- function(data) { +# # get rid off unneeded rows +# all <- readLines(data) +# filtered_lines <- all[!grepl("^#|^$", all)] +# data <- paste(filtered_lines, collapse = "\n") +# data_connection <- textConnection(data) +# # create dataframe +# emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) +# attributes_split <- strsplit(emerald_data$attributes, ";") +# attribute_list <- vector("list", length(attributes_split)) +# key_value_pairs <- strsplit(attributes_split[[1]], "=") +# key <- lapply(key_value_pairs, function(x) x[1]) +# for (i in 1:length(attributes_split)) { +# value <- lapply(key_value_pairs, function(x) x[2]) +# attribute_list[[i]] <- setNames(as.list(value), unlist(key)) +# } +# +# attributes_df <- do.call(rbind, attribute_list) +# emerald_data <- cbind(emerald_data, attributes_df) +# +# return (emerald_data) +# } diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index bcd466d..6dd7937 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -17,10 +17,10 @@ read_reference <- function(data){ } reference_data$chromosome <- rep("GF", length(ripp_data$Cluster)) #Type magic - reference_data$Type <- stringr::str_trim(tolower(ripp_data$Type)) - reference_data["Type2"] <- stringr::str_trim(tolower(ripp_data$Type)) + reference_data$Type <- stringr::str_trim(tolower(reference_data$Type)) + reference_data["Type2"] <- stringr::str_trim(tolower(reference_data$Type)) #Mutate NAs - reference_data <- dplyr::mutate(ripp_data, Cluster = 1:length(ripp_data$Type)) + reference_data <- dplyr::mutate(reference_data, Cluster = 1:length(reference_data$Type)) return(reference_data) } @@ -29,21 +29,24 @@ read_emerald <- function(data) { # get rid off unneeded rows all <- readLines(data) filtered_lines <- all[!grepl("^#|^$", all)] - data <- paste(filtered_lines, collapse = "\n") - data_connection <- textConnection(data) + emerald_data <- paste(filtered_lines, collapse = "\n") + data_connection <- textConnection(emerald_data) + # create dataframe - emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) - attributes_split <- strsplit(emerald_data$attributes, ";") - attribute_list <- vector("list", length(attributes_split)) - key_value_pairs <- strsplit(attributes_split[[1]], "=") - key <- lapply(key_value_pairs, function(x) x[1]) - for (i in 1:length(attributes_split)) { - value <- lapply(key_value_pairs, function(x) x[2]) - attribute_list[[i]] <- setNames(as.list(value), unlist(key)) - } - - attributes_df <- do.call(rbind, attribute_list) - emerald_data <- cbind(emerald_data, attributes_df) + emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "Cluster", "Start", + "Stop", "score", "strand", "frame", + "Type")) + close(data_connection) + emerald_data$chromosome <- rep("EM",length(emerald_data$Cluster)) + pattern <- "nearest_MiBIG_class=([^;]+)" + emerald_data$Type <- sapply(emerald_data$Type, function(x) { + substring <- regmatches(x, regexec(pattern, x))[[1]][2] + return(substring) + }) + emerald_data$Type <- stringr::str_trim(tolower(emerald_data$Type)) + emerald_data$Type2 <- emerald_data$Type + emerald_data$Cluster <- 1:length(emerald_data$Cluster) + print(emerald_data$Cluster) return (emerald_data) } @@ -58,7 +61,6 @@ read_ripp <- function(data) { data_connection <- textConnection(data) ripp_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("Cluster", "Type", "Start", "Stop")) close(data_connection) - print(ripp_data) #Validation of input res_validation <- validate_basic_input(ripp_data) if (!(res_validation[[1]])) { diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 3b20597..3df1181 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -80,7 +80,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE) | (vals$ripp_data_input == TRUE))) + shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$reference_data_input == TRUE) )) # Create empty dataframe to populate later @@ -121,10 +121,18 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == "RippMiner"){ - ripp_inter <- shiny::isolate(vals$sempi_data) %>% + ripp_inter <- shiny::isolate(vals$ripp_data) %>% dplyr::select(Start, Stop) ripp_inter$seqnames <- "chr" - } + } else if (input$ref_comparison == "Emerald/SanntiS"){ + emerald_inter <- shiny::isolate(vals$emerald_data) %>% + dplyr::select(Start, Stop) + emerald_inter$seqnames <- "chr" + } else if (input$ref_comparison == "Reference"){ + reference_inter <- shiny::isolate(vals$reference_data) %>% + dplyr::select(Start, Stop) + reference_inter$seqnames <- "chr" + } @@ -155,6 +163,14 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { used_antismash <- length(shiny::isolate(vals$ripp_data$Cluster)) - inter_bgc cols <-c("Only RippMiner", "DeepBGC+RippMiner", "Only DeepBGC") title <- ggplot2::ggtitle("Comparsion of RIPP and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison_gecco == "Emerald/SanntiS") { + used_antismash <- lenghth(vals$emerald_data$Cluster) - inter_bgc + cols <- c("Only Emerald/SanntiS", "GECCO+Emerald/SanntiS", "Only Emerald/SanntiS") + title <- ggplot2::ggtitle("Comparsion of Emerald/SanntiS and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "Reference") { + used_antismash <- lenghth(vals$reference_data$Cluster) - inter_bgc + cols <- c("Only Reference", "GECCO+Reference", "Only Reference") + title <- ggplot2::ggtitle("Comparsion of RippMiner-genome and GECCO annotations at given score threshold") } # Combine all vectors into one dataframe @@ -237,13 +253,36 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { title <- ggplot2::ggtitle("Rates of DeepBGC/RippMiner data annotation") test <- test %>% dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+RippMiner` + test$`Only SEMPI`), + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+RippMiner` + test$`Only RippMiner`), Annotation_rate = test$`DeepBGC+RippMiner` / length(data$Cluster), Skip_rate = test$`Only RippMiner`/ length(data$CLuster) ) - } + } else if (input$ref_comparsion == "Emerald/SanntiS"){ + data <- vals$emerald_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Emerald-SanntiS data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Emerald/SanntiS` + test$`Only Emerald/SanntiS`), + + Annotation_rate = test$`DeepBGC+Emerald/SanntiS` / length(data$Cluster), + + Skip_rate = test$`Only Emerald/SanntiS`/ length(data$CLuster) + ) + } else if (input$ref_comparsion == "Reference"){ + data <- vals$reference_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Reference data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Reference` + test$`Only Reference`), + + Annotation_rate = test$`DeepBGC+Reference` / length(data$Cluster), + + Skip_rate = test$`Only Reference`/ length(data$CLuster) + ) + } + # Calculate rates and plot interactive plot with plotly plotly::ggplotly(test %>% diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index c865251..3d12415 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -78,7 +78,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ Skip_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) |(vals$ripp_data_input == TRUE)| (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) + shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$reference_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -122,6 +122,14 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ anti_inter <- vals$ripp_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <-"chr" + } else if(input$ref_comparison_emerald == "Emerald/SanntiS") { + anti_inter <- vals$emerald_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <-"chr" + } else if(input$ref_comparison_reference == "Reference") { + anti_inter <- vals$reference_data %>% + dplyr::select(Start, Stop) + anti_inter$seqnames <-"chr" } @@ -152,9 +160,17 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") } else if (input$ref_comparison_gecco == "RippMiner") { - used_antismash <- lenghth(vals$anti_data$Cluster) - inter_bgc + used_antismash <- lenghth(vals$ripp_data$Cluster) - inter_bgc cols <- c("Only RippMiner", "GECCO+RippMiner", "Only RippMiner") title <- ggplot2::ggtitle("Comparsion of RippMiner-genome and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "Emerald/SanntiS") { + used_antismash <- lenghth(vals$emerald_data$Cluster) - inter_bgc + cols <- c("Only Emerald/SanntiS", "GECCO+Emerald/SanntiS", "Only Emerald/SanntiS") + title <- ggplot2::ggtitle("Comparsion of Emerald/SanntiS and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "Reference") { + used_antismash <- lenghth(vals$reference_data$Cluster) - inter_bgc + cols <- c("Only Reference", "GECCO+Reference", "Only Reference") + title <- ggplot2::ggtitle("Comparsion of Reference and GECCO annotations at given score threshold") } # Combine all vectors into one dataframe @@ -230,7 +246,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Skip rate = clusters, annotated only by antismash/ all antismash clusters. Points to how much clusters DeepBGC missed Skip_rate = test$`Only SEMPI` / length(data$Cluster) ) - } else if (input$ref_comparison_ripp == "RippMiner"){ + } else if (input$ref_comparison_gecco == "RippMiner"){ data <- vals$ripp_data title <- ggplot2::ggtitle("Rates of GECCO/RippMinner data annotation") test <- test %>% @@ -241,6 +257,28 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Skip_rate = test$`Only RippMiner`/length(data$Cluster) ) + } else if (input$ref_comparison_gecco == "Emerald/SanntiS"){ + data <- vals$emerald_data + title <- ggplot2::ggtitle("Rates of GECCO/Emerald-SanntiS data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only GECCO`/ (test$`GECCO+Emerald/SanntiS` + test$`Only Emerald/SanntiS`), + # + Annotation_rate = test$`GECCO+Emerald/SanntiS`/ length(data$Cluster), + # + Skip_rate = test$`Only Emerald/SanntiS`/length(data$Cluster) + ) + } else if (input$ref_comparison_gecco == "Reference"){ + data <- vals$reference_data + title <- ggplot2::ggtitle("Rates of GECCO/Reference data annotation") + test <- test %>% + dplyr::mutate( + Novelty_rate = test$`Only Reference`/ (test$`GECCO+Reference` + test$`Only Reference`), + # + Annotation_rate = test$`GECCO+Reference`/ length(data$Cluster), + # + Skip_rate = test$`Only Reference`/length(data$Cluster) + ) } # Calculate rates and plot interactive plot with plotly diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 345c068..b77f301 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -87,7 +87,11 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami e = paste(eval(as.name(excluded_names[5])), collapse = ","), f = paste(eval(as.name(excluded_names[6])), collapse = ","), g = paste(eval(as.name(excluded_names[7])), collapse = ","), - h = paste(eval(as.name(excluded_names[8])), collapse = ",") + h = paste(eval(as.name(excluded_names[8])), collapse = ","), + i = paste(eval(as.name(excluded_names[9])), collapse = ","), + j = paste(eval(as.name(excluded_names[10])), collapse = ","), + + ) colnames(data) <- c(abbr[i], excluded_names) for (p in abbr) { diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index a5fdbcf..62cbf4a 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -17,6 +17,30 @@ geom_anti <- function(data, rre_more) { } #' geom_anti #' +#'#' @description A function, that return Emerald/SanntiS geom with the legend, +#' specific to this software (to show on mouse hover). +#' +#' @return geom_segment with specific fields +#' +#' @noRd +geom_emerald <- function(data, rre_more) { + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) +} +geom_ref <- function(data, rre_more) { + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) +} #' @description A function, that returns rippminer-genome geom with the legend, #' specific to this software (to show on mouse hover). #' @@ -197,6 +221,10 @@ add_more_annot <- function(seg_df, plot, soft_names, index, rre_more) { plot <- plot + geom_gecco(seg_df) } else if (soft_names[index] == "ripp"){ plot <- plot + geom_gecco(seg_df) + } else if (soft_names[index] == "emerald/sanntis"){ + plot <- plot + geom_gecco(seg_df) + } else if (soft_names[index] == "reference"){ + plot <- plot + geom_gecco(seg_df) } return(plot) } else { diff --git a/README.Rmd b/README.Rmd index 872e611..99cfdd1 100644 --- a/README.Rmd +++ b/README.Rmd @@ -62,7 +62,7 @@ Currently, the app supports annotations from such sources: 7. Gecco () -7. RiPPMiner-genome (cured txt file) +7. RiPPMiner-genome (txt file) diff --git a/README.md b/README.md index 18ec486..b917867 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Currently, the app supports annotations from such sources: 6. ARTS (raw tsv files) -7. RiPPMiner-genome (cured txt file) +7. RiPPMiner-genome (txt file) # Contributing diff --git a/data-raw/use_data_internally.R b/data-raw/use_data_internally.R index 36fd292..ac80220 100644 --- a/data-raw/use_data_internally.R +++ b/data-raw/use_data_internally.R @@ -1 +1 @@ -usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data, overwrite = TRUE, internal = TRUE) +usethis::use_data(anti_data, arts_data, deep_data, gecco_data, prism_data, prism_supp_data, rre_data, sempi_data, ripp_data, emerald_data, overwrite = TRUE, internal = TRUE) diff --git a/dev/02_dev.R b/dev/02_dev.R index a9fe8a4..184a95d 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -81,6 +81,10 @@ usethis::use_data_raw( name = "arts_data", open = FALSE ) usethis::use_data_raw( name = "deep_data", open = FALSE ) usethis::use_data_raw( name = "rre_data", open = FALSE ) usethis::use_data_raw( name = "ripp_data", open = FALSE) +usethis::use_data_raw( name = "emerald_data", open = FALSE) +usethis::use_data_raw( name = "reference_data", open = FALSE) + + ## Tests ---- ## Add one line by test you want to create usethis::use_test("utils_helpers") diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv index 8b4d5d6..013af17 100644 --- a/inst/extdata/rename.csv +++ b/inst/extdata/rename.csv @@ -8,8 +8,8 @@ nrps-independent_siderophore_synthase,other,other,#BB34ED,,RRE-Finder angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp angucycline,pks,alkaloid,#ff7f00,,ARTS butyrolactone,ripp,hybrid,#cab2d6,,RippMiner -class_i_lantipeptide,ripp,core,#6a3d9a,, -lasso_peptide,ripp,regulatory,#ffff99,, +class_i_lantipeptide,ripp,core,#6a3d9a,,Emerald/SanntiS +lasso_peptide,ripp,regulatory,#ffff99,,Reference nis_synthase,other,resistance,#b15928,, acyl_amino_acids,other,base,#d4ced6,, aminocoumarin,other,,,, From 1fe4e771d1021a279f9a6dd042a38b93196fe16d Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Tue, 28 Nov 2023 06:35:08 +0200 Subject: [PATCH 195/199] WIP antismash json feature --- .gitignore | 2 + R/app_server.R | 71 +- R/app_ui.R | 8 +- R/fct_biocircos.R | 2 +- R/fct_format_transformation.R | 90 ++ R/fct_reading_functions.R | 1 - R/mod_download.R | 27 + data_all.csv | 129 ++ man/data_to_json.Rd | 17 + result_for_antismash.json | 2271 +++++++++++++++++++++++++++++++++ 10 files changed, 2610 insertions(+), 8 deletions(-) create mode 100644 data_all.csv create mode 100644 man/data_to_json.Rd create mode 100644 result_for_antismash.json diff --git a/.gitignore b/.gitignore index b1401c9..500d4a0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ # History files .Rhistory .Rapp.history +.result_for_antismash.json +.data_all.csv # Session Data files .RData diff --git a/R/app_server.R b/R/app_server.R index c1d0042..5b03c6f 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -56,7 +56,7 @@ app_server <- function(input, output, session) { # Some dataframes that are used through the app + some vectors of untercepted values vals <- shiny::reactiveValues( deep_data = NULL, anti_data = NULL, rre_data = NULL, prism_data = NULL, chr_len = NULL, fullness_deep = NULL, - biocircos_deep = NULL, deep_data_input = FALSE, tracklist = NULL, chromosomes = NULL, fullness_gecco = NULL, + biocircos_deep = NULL, deep_data_input = FALSE, tracklist = NULL, json_for_anti = NULL, chromosomes = NULL, fullness_gecco = NULL, anti_data_input = FALSE, rre_data_input = FALSE, prism_data_input = FALSE, seg_df_ref_a = NULL, seg_df_ref_d = NULL, seg_df_ref_r = NULL, seg_df_ref_p = NULL, deep_data_chromo = NULL, data_upload_count = 0, anti_type = NULL, prism_type = NULL, sempi_data = NULL, sempi_data_input = FALSE, @@ -143,6 +143,9 @@ app_server <- function(input, output, session) { if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { file.remove(file_names) } + if (file_names == "all_data.csv") { + file.remove(file_names) + } } options(shiny.maxRequestSize = 100 * 1024^2) @@ -1110,8 +1113,15 @@ app_server <- function(input, output, session) { shinydashboardPlus::updateBox(id, action = "restore") } }) - - + + shiny::observeEvent(mod_download_ui('download_anti_data_2'), { +## display something on screen + if (!is.null(vals$tracklist)) { + shiny::showNotification("Downloading data...", duration = 5, type = "message") + } + }) + + # Logic show/hide selectinput in Link coloring in # Biocircos shiny::observeEvent(input$label_color_class, { @@ -1653,6 +1663,7 @@ app_server <- function(input, output, session) { label_1 <- c() label_2 <- c() label_color <- c() + # CALCULATIONS # ----------------------------------------- @@ -1671,6 +1682,7 @@ app_server <- function(input, output, session) { index2 <- 1 if (vals[[upload]] == TRUE) { for (upload2 in data_uploads_2) { + # vals$json_for_anti$start <- data_uploads if ((vals[[upload2]] == TRUE) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) chromosomes_start <- c(chromosomes_start, output[[3]]) @@ -1687,17 +1699,56 @@ app_server <- function(input, output, session) { label_1 <- c(label_1, output[[9]]) label_2 <- c(label_2, output[[10]]) label_color <- c(label_color, output[[11]]) + + } index2 <- index2 + 1 } utils::write.csv(vals[[data_to_use[index]]], paste0(soft_names[index], "_biocircos.csv"), row.names = FALSE) + } + index <- index + 1 } + + + #### made for json antismash #### + # ----------------------------------------- + json_start = c() + json_end = c() + json_lable = c() + json_description = c() + + ### list dir for appropriate files of biocircos to create json + + files_in_dir <- list.files() + # Iterate over those files and if found "_biocircos.csv" add remove them + for (file_names in files_in_dir) { + if (grepl("_biocircos.csv", file_names, fixed = TRUE)) { + df_read <- read.csv(file_names) + if (file_names != "arts_biocircos.csv" & file_names != "prism_supp_biocircos.csv"){ + df_read <- read.csv(file_names) + df_read$Description <- strsplit(file_names, '_', fixed = TRUE)[[1]][1] + json_start <- c(json_start, df_read$Start) + json_end <- c(json_end, df_read$Stop) + json_lable <- c(json_lable, df_read$Type) + json_description <- c(json_description, df_read$Description) + } + # json_description <- c(json_description, df_read$Description) + }} + + vals$json_for_anti$start <- json_start + vals$json_for_anti$end <- json_end + vals$json_for_anti$label <- json_lable + vals$json_for_anti$description <- json_description + utils::write.csv(vals$json_for_anti, "data_all.csv", row.names = FALSE) + + print(data_to_json("data_all.csv")) + # THE END OF JSON ANTISMASH + # ----------------------------------------- - - + # Combine labels with mapply to one list link_labels <- mapply(function(x, y) paste(x, y, sep = " | "), label_1, label_2) @@ -1826,6 +1877,15 @@ app_server <- function(input, output, session) { }) + + + + + + + + + ############################################################################ ############################################################################ ### ### @@ -1883,6 +1943,7 @@ app_server <- function(input, output, session) { # Download used datasets (as for BioCircos) mod_download_server("download_ui_1") + mod_download_server("download_anti_ui_1") shiny::onSessionEnded(function() { # List files in directory diff --git a/R/app_ui.R b/R/app_ui.R index afaf12f..0c7bada 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -27,7 +27,13 @@ app_ui <- function(request) { shinydashboard::menuItem( tabName = "restore_boxes", actionButton("restore_box", "Restore all boxes", class = "bg-success") - ) + ), + shinydashboard::menuItem( + tabName = "download_anti_data", + actionButton("download_anti_data_2", "Download Antismash data", class = "bg-success") + ) + # ), + # mod_download_anti_ui("download_anti_ui_1") ) ), shinydashboard::dashboardBody( diff --git a/R/fct_biocircos.R b/R/fct_biocircos.R index 8057d92..629bd6d 100644 --- a/R/fct_biocircos.R +++ b/R/fct_biocircos.R @@ -124,6 +124,6 @@ add_biocircos_data <- function(data1_inter, data2_inter, data1, data2, data1_lab } return(list( inter_s_rre_n, inter_s_rre_n, chromosomes_start, chromosomes_end, link_pos_start, link_pos_start_1, link_pos_end, - link_pos_end_2, label_1, label_2, label_color + link_pos_end_2, label_1, label_2, label_color, data2 )) } diff --git a/R/fct_format_transformation.R b/R/fct_format_transformation.R index 1d405cc..de1571e 100644 --- a/R/fct_format_transformation.R +++ b/R/fct_format_transformation.R @@ -12,6 +12,9 @@ #' sempi_to_csv() #' } #' @export +#' + + sempi_to_csv <- function(project_archive, write_to = getwd()) { trackid <- NULL # Silence R CMD note utils::unzip(project_archive, files = "genome_browser/main/Tracks.db", exdir = paste0(write_to, "/SEMPI_TracksDB"), junkpaths = TRUE) @@ -241,3 +244,90 @@ arts_to_nevik <- function(file, write_to = getwd()) return(lists) } + +#' all data to json +#' +#' @description Function, function that takes csv file and converts it to json +#' +#' @param csv_file path to csv +#' +#' @return json + + +data_to_json <- function(csv_file) { + + # Read CSV file + data <- utils::read.csv(csv_file) + + # Group by label + grouped_data <- dplyr::group_by(data, label) + + # Build records list + records <- list() + + # Iterate through each label + for (name in unique(grouped_data$label)) { + + # Truncate the name to a specific length (e.g., 20 characters) + truncated_name <- strtrim(name, width = 20) + + # Filter rows for this label + group <- dplyr::filter(grouped_data, label == name) + + # Create features + subregions <- lapply(1:nrow(group), function(i) { + list( + start = group$start[i], + end = group$end[i], + label = truncated_name, # Use truncated name + details = list( + score = "group" # use actual score + ) + ) + }) + + protoclusters <- lapply(1:nrow(group), function(i) { + list( + core_start = group$start[i], + core_end = group$end[i], + product = "bht", + details = list( + some_detail = "value" # add actual details + ) + ) + }) + + # Build record + record <- list( + name = truncated_name, # Use truncated name + subregions = subregions, + protoclusters = protoclusters + ) + + # Append + records <- base::c(records, list(record)) + + } + + # Build top level + # Build top level + result <- list( + tool = list( + name = as.character("Example tool"), + version = as.character("1.2.3"), + description = as.character("Example of external result sideloading in antiSMASH"), + configuration = list( + verbose = as.character("true"), + multisetting = c("first", "second") + ) + ), + records = records + ) + + # Convert to JSON + json <- jsonlite::toJSON(result, pretty = TRUE, auto_unbox = TRUE) + writeLines(json,"result_for_antismash.json") + + return(json) +} + diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 6dd7937..8e0de1b 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -46,7 +46,6 @@ read_emerald <- function(data) { emerald_data$Type <- stringr::str_trim(tolower(emerald_data$Type)) emerald_data$Type2 <- emerald_data$Type emerald_data$Cluster <- 1:length(emerald_data$Cluster) - print(emerald_data$Cluster) return (emerald_data) } diff --git a/R/mod_download.R b/R/mod_download.R index 49877ab..0e4c096 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -24,6 +24,32 @@ mod_download_ui <- function(id) { ) } +mod_download_anti_ui <- function(id) { + ns <- NS(id) + tagList( + div( + shinydashboard::menuItem( + tabName = "download_data_anti", + actionButton(ns("download_data_anti"), "Download data for AntiSMASH", class = "bg-success") + ) + ) + ) + +} + +mod_download_anti_server <- function(id){ + moduleServer(id, function(input, output, session) { + ns <- session$ns + output$download_data_anti <- shiny::downloadHandler( + filename = function() { + paste('antiSMASH_data.json') + }, + print(vals$tracklist) + ) + }) + +} + #' download Server Functions #' #' @noRd @@ -57,6 +83,7 @@ mod_download_server <- function(id) { }) } + ## To be copied in the UI # mod_download_ui("download_ui_1") diff --git a/data_all.csv b/data_all.csv new file mode 100644 index 0000000..b9d074b --- /dev/null +++ b/data_all.csv @@ -0,0 +1,129 @@ +"start","end","label","description" +86693,139654,"hgle-ks__t1pks","anti" +166700,191657,"terpene","anti" +246867,270397,"lanthipeptide-class-i","anti" +494259,544087,"nrps","anti" +791700,799942,"ripp-like","anti" +1258217,1297040,"t3pks","anti" +1995499,2005898,"ectoine","anti" +2939305,2949875,"melanin","anti" +3034430,3045603,"siderophore","anti" +3524827,3603907,"nrps","anti" +5496473,5567376,"t2pks","anti" +5671274,5691836,"terpene","anti" +5751944,5824487,"t2pks","anti" +6336090,6346443,"siderophore","anti" +6429574,6475291,"nrps-like__t1pks__prodigiosin","anti" +6632342,6643659,"ripp-like","anti" +6656903,6676224,"terpene","anti" +6842314,6855522,"siderophore","anti" +6881334,6951537,"t1pks__butyrolactone","anti" +7088263,7142447,"thioamide-nrp__nrps","anti" +7409741,7432456,"lanthipeptide-class-iii","anti" +7506307,7532117,"terpene","anti" +7570411,7618555,"pks-like__t1pks","anti" +7682906,7709360,"lanthipeptide-class-i","anti" +7973469,8047403,"other__t3pks","anti" +8269636,8290764,"indole","anti" +8475101,8548352,"t3pks__nrps__terpene","anti" +170910,191657,"terpene","deep" +211747,220764,"pks","deep" +251763,262319,"ripp","deep" +320109,322255,"pks","deep" +332310,341318,"pks","deep" +370065,372478,"pks","deep" +431961,437224,"pks","deep" +586986,589546,"pks","deep" +815933,824058,"pks","deep" +1050594,1054583,"ripp","deep" +1275829,1279960,"terpene","deep" +1327990,1363153,"pks","deep" +1405030,1412625,"pks","deep" +2549403,2569910,"pks","deep" +2934113,2967589,"saccharide","deep" +3526136,3603907,"nrps","deep" +3782902,3788943,"ripp","deep" +4115027,4137513,"ripp","deep" +5055827,5059681,"pks","deep" +5510515,5536994,"pks","deep" +5765662,5797479,"pks","deep" +6552934,6557688,"pks","deep" +6889623,6949758,"pks","deep" +7078584,7118257,"nrps","deep" +7385659,7388675,"saccharide","deep" +7623284,7715706,"ripp","deep" +8228870,8235982,"terpene","deep" +8288250,8293976,"pks","deep" +8468384,8563058,"nrps","deep" +8610787,8635487,"pks","deep" +31460,41750,"pks","deep" +103781,121371,"pks","gecco" +168705,177496,"terpene","gecco" +498683,533448,"nrps","gecco" +1335695,1361419,"pks","gecco" +2931776,2950345,"saccharide","gecco" +3524828,3602320,"nrps","gecco" +5515246,5536994,"pks","gecco" +5785753,5791297,"pks","gecco" +6432593,6467702,"pks","gecco" +6847315,6863275,"pks","gecco" +6889594,6948414,"pks","gecco" +7106284,7117874,"nrps","gecco" +7516017,7523399,"terpene","gecco" +7586410,7601569,"pks","gecco" +8258333,8283623,"ripp","gecco" +8493549,8542072,"nrps","gecco" +103780,128290,"pks","prism" +255310,261084,"class_i_lantipeptide","prism" +513988,533448,"nrps","prism" +586986,589546,"pks","prism" +2000499,2000898,"ectoine","prism" +2559339,2563090,"pks","prism" +2938688,2944875,"melanin","prism" +3038894,3040682,"nis_synthase","prism" +3513615,3585724,"nrps","prism" +5511270,5534546,"benzoisochromanequinone","prism" +5785752,5795837,"pentangular_polyphenol","prism" +6432592,6458318,"pks__nrps","prism" +6890527,6947423,"butyrolactone__pks","prism" +7108263,7120497,"nrps","prism" +7414295,7422622,"class_iii_iv_lantipeptide","prism" +7586409,7598555,"pks","prism" +7695015,7699626,"class_i_lantipeptide","prism" +8504460,8523749,"nrps","prism" +231675,251017,"butyrolactone__furan","prism" +256525,259687,"ripp","rre" +7696261,7699360,"ripp","rre" +106723,110434,"pks","sempi" +307598,308816,"nrps","sempi" +513997,524488,"nrps","sempi" +1405117,1405750,"nrps","sempi" +1477976,1479275,"nrps","sempi" +2290771,2292100,"nrps","sempi" +2559357,2561673,"pks","sempi" +2622623,2623751,"nrps","sempi" +2762807,2764220,"nrps","sempi" +2963180,2964527,"nrps","sempi" +3328396,3329098,"nrps","sempi" +3543364,3584771,"nrps","sempi" +3797561,3798752,"nrps","sempi" +3941523,3942822,"nrps","sempi" +4398632,4399859,"nrps","sempi" +4799973,4801182,"nrps","sempi" +4923207,4924557,"nrps","sempi" +5531212,5532682,"pks","sempi" +5786632,5788168,"pks","sempi" +6447994,6454855,"nrps-pks","sempi" +6558978,6560136,"nrps","sempi" +6804366,6807194,"nrps","sempi" +6901254,6931905,"pks","sempi" +7004464,7004725,"nrps","sempi" +7108290,7116050,"nrps","sempi" +7249252,7250602,"nrps","sempi" +7549538,7550897,"nrps","sempi" +7591514,7598516,"pks","sempi" +7734541,7735729,"nrps","sempi" +8053551,8054721,"nrps","sempi" +8140076,8141438,"nrps","sempi" +8282564,8283500,"nrps","sempi" +8504751,8523677,"nrps","sempi" diff --git a/man/data_to_json.Rd b/man/data_to_json.Rd new file mode 100644 index 0000000..187dd3e --- /dev/null +++ b/man/data_to_json.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_format_transformation.R +\name{data_to_json} +\alias{data_to_json} +\title{all data to json} +\usage{ +data_to_json(csv_file) +} +\arguments{ +\item{csv_file}{path to csv} +} +\value{ +json +} +\description{ +Function, function that takes csv file and converts it to json +} diff --git a/result_for_antismash.json b/result_for_antismash.json new file mode 100644 index 0000000..3f9db27 --- /dev/null +++ b/result_for_antismash.json @@ -0,0 +1,2271 @@ +{ + "tool": { + "name": "Example tool", + "version": "1.2.3", + "description": "Example of external result sideloading in antiSMASH", + "configuration": { + "verbose": "true", + "multisetting": ["first", "second"] + } + }, + "records": [ + { + "name": "hgle-ks__t1pks", + "subregions": [ + { + "start": 86693, + "end": 139654, + "label": "hgle-ks__t1pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 86693, + "core_end": 139654, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "terpene", + "subregions": [ + { + "start": 166700, + "end": 191657, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 5671274, + "end": 5691836, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 6656903, + "end": 6676224, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 7506307, + "end": 7532117, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 170910, + "end": 191657, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 1275829, + "end": 1279960, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 8228870, + "end": 8235982, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 168705, + "end": 177496, + "label": "terpene", + "details": { + "score": "group" + } + }, + { + "start": 7516017, + "end": 7523399, + "label": "terpene", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 166700, + "core_end": 191657, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5671274, + "core_end": 5691836, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6656903, + "core_end": 6676224, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7506307, + "core_end": 7532117, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 170910, + "core_end": 191657, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1275829, + "core_end": 1279960, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8228870, + "core_end": 8235982, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 168705, + "core_end": 177496, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7516017, + "core_end": 7523399, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "lanthipeptide-class-", + "subregions": [ + { + "start": 246867, + "end": 270397, + "label": "lanthipeptide-class-", + "details": { + "score": "group" + } + }, + { + "start": 7682906, + "end": 7709360, + "label": "lanthipeptide-class-", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 246867, + "core_end": 270397, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7682906, + "core_end": 7709360, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "nrps", + "subregions": [ + { + "start": 494259, + "end": 544087, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3524827, + "end": 3603907, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3526136, + "end": 3603907, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7078584, + "end": 7118257, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8468384, + "end": 8563058, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 498683, + "end": 533448, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3524828, + "end": 3602320, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7106284, + "end": 7117874, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8493549, + "end": 8542072, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 513988, + "end": 533448, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3513615, + "end": 3585724, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7108263, + "end": 7120497, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8504460, + "end": 8523749, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 307598, + "end": 308816, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 513997, + "end": 524488, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 1405117, + "end": 1405750, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 1477976, + "end": 1479275, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 2290771, + "end": 2292100, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 2622623, + "end": 2623751, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 2762807, + "end": 2764220, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 2963180, + "end": 2964527, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3328396, + "end": 3329098, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3543364, + "end": 3584771, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3797561, + "end": 3798752, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 3941523, + "end": 3942822, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 4398632, + "end": 4399859, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 4799973, + "end": 4801182, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 4923207, + "end": 4924557, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 6558978, + "end": 6560136, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 6804366, + "end": 6807194, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7004464, + "end": 7004725, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7108290, + "end": 7116050, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7249252, + "end": 7250602, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7549538, + "end": 7550897, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 7734541, + "end": 7735729, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8053551, + "end": 8054721, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8140076, + "end": 8141438, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8282564, + "end": 8283500, + "label": "nrps", + "details": { + "score": "group" + } + }, + { + "start": 8504751, + "end": 8523677, + "label": "nrps", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 494259, + "core_end": 544087, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3524827, + "core_end": 3603907, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3526136, + "core_end": 3603907, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7078584, + "core_end": 7118257, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8468384, + "core_end": 8563058, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 498683, + "core_end": 533448, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3524828, + "core_end": 3602320, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7106284, + "core_end": 7117874, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8493549, + "core_end": 8542072, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 513988, + "core_end": 533448, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3513615, + "core_end": 3585724, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7108263, + "core_end": 7120497, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8504460, + "core_end": 8523749, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 307598, + "core_end": 308816, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 513997, + "core_end": 524488, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1405117, + "core_end": 1405750, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1477976, + "core_end": 1479275, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2290771, + "core_end": 2292100, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2622623, + "core_end": 2623751, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2762807, + "core_end": 2764220, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2963180, + "core_end": 2964527, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3328396, + "core_end": 3329098, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3543364, + "core_end": 3584771, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3797561, + "core_end": 3798752, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3941523, + "core_end": 3942822, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 4398632, + "core_end": 4399859, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 4799973, + "core_end": 4801182, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 4923207, + "core_end": 4924557, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6558978, + "core_end": 6560136, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6804366, + "core_end": 6807194, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7004464, + "core_end": 7004725, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7108290, + "core_end": 7116050, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7249252, + "core_end": 7250602, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7549538, + "core_end": 7550897, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7734541, + "core_end": 7735729, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8053551, + "core_end": 8054721, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8140076, + "core_end": 8141438, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8282564, + "core_end": 8283500, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8504751, + "core_end": 8523677, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "ripp-like", + "subregions": [ + { + "start": 791700, + "end": 799942, + "label": "ripp-like", + "details": { + "score": "group" + } + }, + { + "start": 6632342, + "end": 6643659, + "label": "ripp-like", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 791700, + "core_end": 799942, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6632342, + "core_end": 6643659, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "t3pks", + "subregions": [ + { + "start": 1258217, + "end": 1297040, + "label": "t3pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 1258217, + "core_end": 1297040, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "ectoine", + "subregions": [ + { + "start": 1995499, + "end": 2005898, + "label": "ectoine", + "details": { + "score": "group" + } + }, + { + "start": 2000499, + "end": 2000898, + "label": "ectoine", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 1995499, + "core_end": 2005898, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2000499, + "core_end": 2000898, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "melanin", + "subregions": [ + { + "start": 2939305, + "end": 2949875, + "label": "melanin", + "details": { + "score": "group" + } + }, + { + "start": 2938688, + "end": 2944875, + "label": "melanin", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 2939305, + "core_end": 2949875, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2938688, + "core_end": 2944875, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "siderophore", + "subregions": [ + { + "start": 3034430, + "end": 3045603, + "label": "siderophore", + "details": { + "score": "group" + } + }, + { + "start": 6336090, + "end": 6346443, + "label": "siderophore", + "details": { + "score": "group" + } + }, + { + "start": 6842314, + "end": 6855522, + "label": "siderophore", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 3034430, + "core_end": 3045603, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6336090, + "core_end": 6346443, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6842314, + "core_end": 6855522, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "t2pks", + "subregions": [ + { + "start": 5496473, + "end": 5567376, + "label": "t2pks", + "details": { + "score": "group" + } + }, + { + "start": 5751944, + "end": 5824487, + "label": "t2pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 5496473, + "core_end": 5567376, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5751944, + "core_end": 5824487, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "nrps-like__t1pks__pr", + "subregions": [ + { + "start": 6429574, + "end": 6475291, + "label": "nrps-like__t1pks__pr", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 6429574, + "core_end": 6475291, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "t1pks__butyrolactone", + "subregions": [ + { + "start": 6881334, + "end": 6951537, + "label": "t1pks__butyrolactone", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 6881334, + "core_end": 6951537, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "thioamide-nrp__nrps", + "subregions": [ + { + "start": 7088263, + "end": 7142447, + "label": "thioamide-nrp__nrps", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 7088263, + "core_end": 7142447, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "lanthipeptide-class-", + "subregions": [ + { + "start": 7409741, + "end": 7432456, + "label": "lanthipeptide-class-", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 7409741, + "core_end": 7432456, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "pks-like__t1pks", + "subregions": [ + { + "start": 7570411, + "end": 7618555, + "label": "pks-like__t1pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 7570411, + "core_end": 7618555, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "other__t3pks", + "subregions": [ + { + "start": 7973469, + "end": 8047403, + "label": "other__t3pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 7973469, + "core_end": 8047403, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "indole", + "subregions": [ + { + "start": 8269636, + "end": 8290764, + "label": "indole", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 8269636, + "core_end": 8290764, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "t3pks__nrps__terpene", + "subregions": [ + { + "start": 8475101, + "end": 8548352, + "label": "t3pks__nrps__terpene", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 8475101, + "core_end": 8548352, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "pks", + "subregions": [ + { + "start": 211747, + "end": 220764, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 320109, + "end": 322255, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 332310, + "end": 341318, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 370065, + "end": 372478, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 431961, + "end": 437224, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 586986, + "end": 589546, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 815933, + "end": 824058, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 1327990, + "end": 1363153, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 1405030, + "end": 1412625, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 2549403, + "end": 2569910, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5055827, + "end": 5059681, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5510515, + "end": 5536994, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5765662, + "end": 5797479, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6552934, + "end": 6557688, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6889623, + "end": 6949758, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 8288250, + "end": 8293976, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 8610787, + "end": 8635487, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 31460, + "end": 41750, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 103781, + "end": 121371, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 1335695, + "end": 1361419, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5515246, + "end": 5536994, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5785753, + "end": 5791297, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6432593, + "end": 6467702, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6847315, + "end": 6863275, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6889594, + "end": 6948414, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 7586410, + "end": 7601569, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 103780, + "end": 128290, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 586986, + "end": 589546, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 2559339, + "end": 2563090, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 7586409, + "end": 7598555, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 106723, + "end": 110434, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 2559357, + "end": 2561673, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5531212, + "end": 5532682, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 5786632, + "end": 5788168, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 6901254, + "end": 6931905, + "label": "pks", + "details": { + "score": "group" + } + }, + { + "start": 7591514, + "end": 7598516, + "label": "pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 211747, + "core_end": 220764, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 320109, + "core_end": 322255, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 332310, + "core_end": 341318, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 370065, + "core_end": 372478, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 431961, + "core_end": 437224, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 586986, + "core_end": 589546, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 815933, + "core_end": 824058, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1327990, + "core_end": 1363153, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1405030, + "core_end": 1412625, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2549403, + "core_end": 2569910, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5055827, + "core_end": 5059681, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5510515, + "core_end": 5536994, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5765662, + "core_end": 5797479, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6552934, + "core_end": 6557688, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6889623, + "core_end": 6949758, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8288250, + "core_end": 8293976, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8610787, + "core_end": 8635487, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 31460, + "core_end": 41750, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 103781, + "core_end": 121371, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1335695, + "core_end": 1361419, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5515246, + "core_end": 5536994, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5785753, + "core_end": 5791297, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6432593, + "core_end": 6467702, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6847315, + "core_end": 6863275, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6889594, + "core_end": 6948414, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7586410, + "core_end": 7601569, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 103780, + "core_end": 128290, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 586986, + "core_end": 589546, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2559339, + "core_end": 2563090, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7586409, + "core_end": 7598555, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 106723, + "core_end": 110434, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2559357, + "core_end": 2561673, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5531212, + "core_end": 5532682, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 5786632, + "core_end": 5788168, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 6901254, + "core_end": 6931905, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7591514, + "core_end": 7598516, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "ripp", + "subregions": [ + { + "start": 251763, + "end": 262319, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 1050594, + "end": 1054583, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 3782902, + "end": 3788943, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 4115027, + "end": 4137513, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 7623284, + "end": 7715706, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 8258333, + "end": 8283623, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 256525, + "end": 259687, + "label": "ripp", + "details": { + "score": "group" + } + }, + { + "start": 7696261, + "end": 7699360, + "label": "ripp", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 251763, + "core_end": 262319, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 1050594, + "core_end": 1054583, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 3782902, + "core_end": 3788943, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 4115027, + "core_end": 4137513, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7623284, + "core_end": 7715706, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 8258333, + "core_end": 8283623, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 256525, + "core_end": 259687, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7696261, + "core_end": 7699360, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "saccharide", + "subregions": [ + { + "start": 2934113, + "end": 2967589, + "label": "saccharide", + "details": { + "score": "group" + } + }, + { + "start": 7385659, + "end": 7388675, + "label": "saccharide", + "details": { + "score": "group" + } + }, + { + "start": 2931776, + "end": 2950345, + "label": "saccharide", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 2934113, + "core_end": 2967589, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7385659, + "core_end": 7388675, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 2931776, + "core_end": 2950345, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "class_i_lantipeptide", + "subregions": [ + { + "start": 255310, + "end": 261084, + "label": "class_i_lantipeptide", + "details": { + "score": "group" + } + }, + { + "start": 7695015, + "end": 7699626, + "label": "class_i_lantipeptide", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 255310, + "core_end": 261084, + "product": "bht", + "details": { + "some_detail": "value" + } + }, + { + "core_start": 7695015, + "core_end": 7699626, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "nis_synthase", + "subregions": [ + { + "start": 3038894, + "end": 3040682, + "label": "nis_synthase", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 3038894, + "core_end": 3040682, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "benzoisochromanequin", + "subregions": [ + { + "start": 5511270, + "end": 5534546, + "label": "benzoisochromanequin", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 5511270, + "core_end": 5534546, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "pentangular_polyphen", + "subregions": [ + { + "start": 5785752, + "end": 5795837, + "label": "pentangular_polyphen", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 5785752, + "core_end": 5795837, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "pks__nrps", + "subregions": [ + { + "start": 6432592, + "end": 6458318, + "label": "pks__nrps", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 6432592, + "core_end": 6458318, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "butyrolactone__pks", + "subregions": [ + { + "start": 6890527, + "end": 6947423, + "label": "butyrolactone__pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 6890527, + "core_end": 6947423, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "class_iii_iv_lantipe", + "subregions": [ + { + "start": 7414295, + "end": 7422622, + "label": "class_iii_iv_lantipe", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 7414295, + "core_end": 7422622, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "butyrolactone__furan", + "subregions": [ + { + "start": 231675, + "end": 251017, + "label": "butyrolactone__furan", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 231675, + "core_end": 251017, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + }, + { + "name": "nrps-pks", + "subregions": [ + { + "start": 6447994, + "end": 6454855, + "label": "nrps-pks", + "details": { + "score": "group" + } + } + ], + "protoclusters": [ + { + "core_start": 6447994, + "core_end": 6454855, + "product": "bht", + "details": { + "some_detail": "value" + } + } + ] + } + ] +} From dcd13fd440779385149df9ec55125dcc7813fa55 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Tue, 28 Nov 2023 10:18:25 +0200 Subject: [PATCH 196/199] working button, but still having some issues with data --- R/app_server.R | 9 +- R/app_ui.R | 7 +- R/mod_download.R | 18 +- data_all.csv | 129 --- result_for_antismash.json | 2271 ------------------------------------- 5 files changed, 19 insertions(+), 2415 deletions(-) delete mode 100644 data_all.csv delete mode 100644 result_for_antismash.json diff --git a/R/app_server.R b/R/app_server.R index 5b03c6f..fada85a 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -1682,7 +1682,6 @@ app_server <- function(input, output, session) { index2 <- 1 if (vals[[upload]] == TRUE) { for (upload2 in data_uploads_2) { - # vals$json_for_anti$start <- data_uploads if ((vals[[upload2]] == TRUE) & (length(data_uploads_2) > 0) & (soft_namings[index] != soft_2[index2])) { output <- add_biocircos_data(inters[[soft_names[index]]][[soft_names_2[index2]]]$from, inters[[soft_names[index]]][[soft_names_2[index2]]]$to, vals[[data_to_use_2[index2]]], vals[[data_to_use[index]]], soft_2[index2], soft_namings[index], rename_data, input$label_color_class, input$ref_col_biocircos, coloring_datatable) chromosomes_start <- c(chromosomes_start, output[[3]]) @@ -1744,8 +1743,12 @@ app_server <- function(input, output, session) { vals$json_for_anti$description <- json_description utils::write.csv(vals$json_for_anti, "data_all.csv", row.names = FALSE) - print(data_to_json("data_all.csv")) - # THE END OF JSON ANTISMASH + + + mod_download_anti_server('download_anti_ui_1') + + + # THE END OF JSON ANTISMASH # ----------------------------------------- diff --git a/R/app_ui.R b/R/app_ui.R index 0c7bada..7686c21 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -28,12 +28,7 @@ app_ui <- function(request) { tabName = "restore_boxes", actionButton("restore_box", "Restore all boxes", class = "bg-success") ), - shinydashboard::menuItem( - tabName = "download_anti_data", - actionButton("download_anti_data_2", "Download Antismash data", class = "bg-success") - ) - # ), - # mod_download_anti_ui("download_anti_ui_1") + mod_download_anti_ui("download_anti_ui_1") ) ), shinydashboard::dashboardBody( diff --git a/R/mod_download.R b/R/mod_download.R index 0e4c096..0e9ad97 100644 --- a/R/mod_download.R +++ b/R/mod_download.R @@ -28,23 +28,29 @@ mod_download_anti_ui <- function(id) { ns <- NS(id) tagList( div( + style = "text-align: center", shinydashboard::menuItem( tabName = "download_data_anti", - actionButton(ns("download_data_anti"), "Download data for AntiSMASH", class = "bg-success") + shiny::downloadButton(ns("download_data_anti"), "Download JSON for AntiSMASH") ) - ) ) + ) } mod_download_anti_server <- function(id){ moduleServer(id, function(input, output, session) { ns <- session$ns + if (!file.exists('data_all.csv')) { + shiny::showNotification("No data to download", type = "warning")} + output$download_data_anti <- shiny::downloadHandler( - filename = function() { - paste('antiSMASH_data.json') - }, - print(vals$tracklist) + filename ='antiSMASH_data.json', + content = function(file) { + if (file.exists('data_all.csv')) { + json <- data_to_json('data_all.csv') + write(json, file)} + } ) }) diff --git a/data_all.csv b/data_all.csv deleted file mode 100644 index b9d074b..0000000 --- a/data_all.csv +++ /dev/null @@ -1,129 +0,0 @@ -"start","end","label","description" -86693,139654,"hgle-ks__t1pks","anti" -166700,191657,"terpene","anti" -246867,270397,"lanthipeptide-class-i","anti" -494259,544087,"nrps","anti" -791700,799942,"ripp-like","anti" -1258217,1297040,"t3pks","anti" -1995499,2005898,"ectoine","anti" -2939305,2949875,"melanin","anti" -3034430,3045603,"siderophore","anti" -3524827,3603907,"nrps","anti" -5496473,5567376,"t2pks","anti" -5671274,5691836,"terpene","anti" -5751944,5824487,"t2pks","anti" -6336090,6346443,"siderophore","anti" -6429574,6475291,"nrps-like__t1pks__prodigiosin","anti" -6632342,6643659,"ripp-like","anti" -6656903,6676224,"terpene","anti" -6842314,6855522,"siderophore","anti" -6881334,6951537,"t1pks__butyrolactone","anti" -7088263,7142447,"thioamide-nrp__nrps","anti" -7409741,7432456,"lanthipeptide-class-iii","anti" -7506307,7532117,"terpene","anti" -7570411,7618555,"pks-like__t1pks","anti" -7682906,7709360,"lanthipeptide-class-i","anti" -7973469,8047403,"other__t3pks","anti" -8269636,8290764,"indole","anti" -8475101,8548352,"t3pks__nrps__terpene","anti" -170910,191657,"terpene","deep" -211747,220764,"pks","deep" -251763,262319,"ripp","deep" -320109,322255,"pks","deep" -332310,341318,"pks","deep" -370065,372478,"pks","deep" -431961,437224,"pks","deep" -586986,589546,"pks","deep" -815933,824058,"pks","deep" -1050594,1054583,"ripp","deep" -1275829,1279960,"terpene","deep" -1327990,1363153,"pks","deep" -1405030,1412625,"pks","deep" -2549403,2569910,"pks","deep" -2934113,2967589,"saccharide","deep" -3526136,3603907,"nrps","deep" -3782902,3788943,"ripp","deep" -4115027,4137513,"ripp","deep" -5055827,5059681,"pks","deep" -5510515,5536994,"pks","deep" -5765662,5797479,"pks","deep" -6552934,6557688,"pks","deep" -6889623,6949758,"pks","deep" -7078584,7118257,"nrps","deep" -7385659,7388675,"saccharide","deep" -7623284,7715706,"ripp","deep" -8228870,8235982,"terpene","deep" -8288250,8293976,"pks","deep" -8468384,8563058,"nrps","deep" -8610787,8635487,"pks","deep" -31460,41750,"pks","deep" -103781,121371,"pks","gecco" -168705,177496,"terpene","gecco" -498683,533448,"nrps","gecco" -1335695,1361419,"pks","gecco" -2931776,2950345,"saccharide","gecco" -3524828,3602320,"nrps","gecco" -5515246,5536994,"pks","gecco" -5785753,5791297,"pks","gecco" -6432593,6467702,"pks","gecco" -6847315,6863275,"pks","gecco" -6889594,6948414,"pks","gecco" -7106284,7117874,"nrps","gecco" -7516017,7523399,"terpene","gecco" -7586410,7601569,"pks","gecco" -8258333,8283623,"ripp","gecco" -8493549,8542072,"nrps","gecco" -103780,128290,"pks","prism" -255310,261084,"class_i_lantipeptide","prism" -513988,533448,"nrps","prism" -586986,589546,"pks","prism" -2000499,2000898,"ectoine","prism" -2559339,2563090,"pks","prism" -2938688,2944875,"melanin","prism" -3038894,3040682,"nis_synthase","prism" -3513615,3585724,"nrps","prism" -5511270,5534546,"benzoisochromanequinone","prism" -5785752,5795837,"pentangular_polyphenol","prism" -6432592,6458318,"pks__nrps","prism" -6890527,6947423,"butyrolactone__pks","prism" -7108263,7120497,"nrps","prism" -7414295,7422622,"class_iii_iv_lantipeptide","prism" -7586409,7598555,"pks","prism" -7695015,7699626,"class_i_lantipeptide","prism" -8504460,8523749,"nrps","prism" -231675,251017,"butyrolactone__furan","prism" -256525,259687,"ripp","rre" -7696261,7699360,"ripp","rre" -106723,110434,"pks","sempi" -307598,308816,"nrps","sempi" -513997,524488,"nrps","sempi" -1405117,1405750,"nrps","sempi" -1477976,1479275,"nrps","sempi" -2290771,2292100,"nrps","sempi" -2559357,2561673,"pks","sempi" -2622623,2623751,"nrps","sempi" -2762807,2764220,"nrps","sempi" -2963180,2964527,"nrps","sempi" -3328396,3329098,"nrps","sempi" -3543364,3584771,"nrps","sempi" -3797561,3798752,"nrps","sempi" -3941523,3942822,"nrps","sempi" -4398632,4399859,"nrps","sempi" -4799973,4801182,"nrps","sempi" -4923207,4924557,"nrps","sempi" -5531212,5532682,"pks","sempi" -5786632,5788168,"pks","sempi" -6447994,6454855,"nrps-pks","sempi" -6558978,6560136,"nrps","sempi" -6804366,6807194,"nrps","sempi" -6901254,6931905,"pks","sempi" -7004464,7004725,"nrps","sempi" -7108290,7116050,"nrps","sempi" -7249252,7250602,"nrps","sempi" -7549538,7550897,"nrps","sempi" -7591514,7598516,"pks","sempi" -7734541,7735729,"nrps","sempi" -8053551,8054721,"nrps","sempi" -8140076,8141438,"nrps","sempi" -8282564,8283500,"nrps","sempi" -8504751,8523677,"nrps","sempi" diff --git a/result_for_antismash.json b/result_for_antismash.json deleted file mode 100644 index 3f9db27..0000000 --- a/result_for_antismash.json +++ /dev/null @@ -1,2271 +0,0 @@ -{ - "tool": { - "name": "Example tool", - "version": "1.2.3", - "description": "Example of external result sideloading in antiSMASH", - "configuration": { - "verbose": "true", - "multisetting": ["first", "second"] - } - }, - "records": [ - { - "name": "hgle-ks__t1pks", - "subregions": [ - { - "start": 86693, - "end": 139654, - "label": "hgle-ks__t1pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 86693, - "core_end": 139654, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "terpene", - "subregions": [ - { - "start": 166700, - "end": 191657, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 5671274, - "end": 5691836, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 6656903, - "end": 6676224, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 7506307, - "end": 7532117, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 170910, - "end": 191657, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 1275829, - "end": 1279960, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 8228870, - "end": 8235982, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 168705, - "end": 177496, - "label": "terpene", - "details": { - "score": "group" - } - }, - { - "start": 7516017, - "end": 7523399, - "label": "terpene", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 166700, - "core_end": 191657, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5671274, - "core_end": 5691836, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6656903, - "core_end": 6676224, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7506307, - "core_end": 7532117, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 170910, - "core_end": 191657, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1275829, - "core_end": 1279960, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8228870, - "core_end": 8235982, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 168705, - "core_end": 177496, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7516017, - "core_end": 7523399, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "lanthipeptide-class-", - "subregions": [ - { - "start": 246867, - "end": 270397, - "label": "lanthipeptide-class-", - "details": { - "score": "group" - } - }, - { - "start": 7682906, - "end": 7709360, - "label": "lanthipeptide-class-", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 246867, - "core_end": 270397, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7682906, - "core_end": 7709360, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "nrps", - "subregions": [ - { - "start": 494259, - "end": 544087, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3524827, - "end": 3603907, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3526136, - "end": 3603907, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7078584, - "end": 7118257, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8468384, - "end": 8563058, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 498683, - "end": 533448, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3524828, - "end": 3602320, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7106284, - "end": 7117874, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8493549, - "end": 8542072, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 513988, - "end": 533448, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3513615, - "end": 3585724, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7108263, - "end": 7120497, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8504460, - "end": 8523749, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 307598, - "end": 308816, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 513997, - "end": 524488, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 1405117, - "end": 1405750, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 1477976, - "end": 1479275, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 2290771, - "end": 2292100, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 2622623, - "end": 2623751, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 2762807, - "end": 2764220, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 2963180, - "end": 2964527, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3328396, - "end": 3329098, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3543364, - "end": 3584771, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3797561, - "end": 3798752, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 3941523, - "end": 3942822, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 4398632, - "end": 4399859, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 4799973, - "end": 4801182, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 4923207, - "end": 4924557, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 6558978, - "end": 6560136, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 6804366, - "end": 6807194, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7004464, - "end": 7004725, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7108290, - "end": 7116050, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7249252, - "end": 7250602, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7549538, - "end": 7550897, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 7734541, - "end": 7735729, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8053551, - "end": 8054721, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8140076, - "end": 8141438, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8282564, - "end": 8283500, - "label": "nrps", - "details": { - "score": "group" - } - }, - { - "start": 8504751, - "end": 8523677, - "label": "nrps", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 494259, - "core_end": 544087, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3524827, - "core_end": 3603907, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3526136, - "core_end": 3603907, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7078584, - "core_end": 7118257, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8468384, - "core_end": 8563058, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 498683, - "core_end": 533448, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3524828, - "core_end": 3602320, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7106284, - "core_end": 7117874, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8493549, - "core_end": 8542072, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 513988, - "core_end": 533448, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3513615, - "core_end": 3585724, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7108263, - "core_end": 7120497, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8504460, - "core_end": 8523749, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 307598, - "core_end": 308816, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 513997, - "core_end": 524488, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1405117, - "core_end": 1405750, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1477976, - "core_end": 1479275, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2290771, - "core_end": 2292100, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2622623, - "core_end": 2623751, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2762807, - "core_end": 2764220, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2963180, - "core_end": 2964527, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3328396, - "core_end": 3329098, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3543364, - "core_end": 3584771, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3797561, - "core_end": 3798752, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3941523, - "core_end": 3942822, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 4398632, - "core_end": 4399859, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 4799973, - "core_end": 4801182, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 4923207, - "core_end": 4924557, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6558978, - "core_end": 6560136, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6804366, - "core_end": 6807194, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7004464, - "core_end": 7004725, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7108290, - "core_end": 7116050, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7249252, - "core_end": 7250602, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7549538, - "core_end": 7550897, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7734541, - "core_end": 7735729, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8053551, - "core_end": 8054721, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8140076, - "core_end": 8141438, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8282564, - "core_end": 8283500, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8504751, - "core_end": 8523677, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "ripp-like", - "subregions": [ - { - "start": 791700, - "end": 799942, - "label": "ripp-like", - "details": { - "score": "group" - } - }, - { - "start": 6632342, - "end": 6643659, - "label": "ripp-like", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 791700, - "core_end": 799942, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6632342, - "core_end": 6643659, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "t3pks", - "subregions": [ - { - "start": 1258217, - "end": 1297040, - "label": "t3pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 1258217, - "core_end": 1297040, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "ectoine", - "subregions": [ - { - "start": 1995499, - "end": 2005898, - "label": "ectoine", - "details": { - "score": "group" - } - }, - { - "start": 2000499, - "end": 2000898, - "label": "ectoine", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 1995499, - "core_end": 2005898, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2000499, - "core_end": 2000898, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "melanin", - "subregions": [ - { - "start": 2939305, - "end": 2949875, - "label": "melanin", - "details": { - "score": "group" - } - }, - { - "start": 2938688, - "end": 2944875, - "label": "melanin", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 2939305, - "core_end": 2949875, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2938688, - "core_end": 2944875, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "siderophore", - "subregions": [ - { - "start": 3034430, - "end": 3045603, - "label": "siderophore", - "details": { - "score": "group" - } - }, - { - "start": 6336090, - "end": 6346443, - "label": "siderophore", - "details": { - "score": "group" - } - }, - { - "start": 6842314, - "end": 6855522, - "label": "siderophore", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 3034430, - "core_end": 3045603, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6336090, - "core_end": 6346443, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6842314, - "core_end": 6855522, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "t2pks", - "subregions": [ - { - "start": 5496473, - "end": 5567376, - "label": "t2pks", - "details": { - "score": "group" - } - }, - { - "start": 5751944, - "end": 5824487, - "label": "t2pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 5496473, - "core_end": 5567376, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5751944, - "core_end": 5824487, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "nrps-like__t1pks__pr", - "subregions": [ - { - "start": 6429574, - "end": 6475291, - "label": "nrps-like__t1pks__pr", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 6429574, - "core_end": 6475291, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "t1pks__butyrolactone", - "subregions": [ - { - "start": 6881334, - "end": 6951537, - "label": "t1pks__butyrolactone", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 6881334, - "core_end": 6951537, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "thioamide-nrp__nrps", - "subregions": [ - { - "start": 7088263, - "end": 7142447, - "label": "thioamide-nrp__nrps", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 7088263, - "core_end": 7142447, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "lanthipeptide-class-", - "subregions": [ - { - "start": 7409741, - "end": 7432456, - "label": "lanthipeptide-class-", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 7409741, - "core_end": 7432456, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "pks-like__t1pks", - "subregions": [ - { - "start": 7570411, - "end": 7618555, - "label": "pks-like__t1pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 7570411, - "core_end": 7618555, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "other__t3pks", - "subregions": [ - { - "start": 7973469, - "end": 8047403, - "label": "other__t3pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 7973469, - "core_end": 8047403, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "indole", - "subregions": [ - { - "start": 8269636, - "end": 8290764, - "label": "indole", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 8269636, - "core_end": 8290764, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "t3pks__nrps__terpene", - "subregions": [ - { - "start": 8475101, - "end": 8548352, - "label": "t3pks__nrps__terpene", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 8475101, - "core_end": 8548352, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "pks", - "subregions": [ - { - "start": 211747, - "end": 220764, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 320109, - "end": 322255, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 332310, - "end": 341318, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 370065, - "end": 372478, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 431961, - "end": 437224, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 586986, - "end": 589546, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 815933, - "end": 824058, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 1327990, - "end": 1363153, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 1405030, - "end": 1412625, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 2549403, - "end": 2569910, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5055827, - "end": 5059681, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5510515, - "end": 5536994, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5765662, - "end": 5797479, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6552934, - "end": 6557688, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6889623, - "end": 6949758, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 8288250, - "end": 8293976, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 8610787, - "end": 8635487, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 31460, - "end": 41750, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 103781, - "end": 121371, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 1335695, - "end": 1361419, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5515246, - "end": 5536994, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5785753, - "end": 5791297, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6432593, - "end": 6467702, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6847315, - "end": 6863275, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6889594, - "end": 6948414, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 7586410, - "end": 7601569, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 103780, - "end": 128290, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 586986, - "end": 589546, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 2559339, - "end": 2563090, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 7586409, - "end": 7598555, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 106723, - "end": 110434, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 2559357, - "end": 2561673, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5531212, - "end": 5532682, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 5786632, - "end": 5788168, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 6901254, - "end": 6931905, - "label": "pks", - "details": { - "score": "group" - } - }, - { - "start": 7591514, - "end": 7598516, - "label": "pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 211747, - "core_end": 220764, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 320109, - "core_end": 322255, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 332310, - "core_end": 341318, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 370065, - "core_end": 372478, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 431961, - "core_end": 437224, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 586986, - "core_end": 589546, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 815933, - "core_end": 824058, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1327990, - "core_end": 1363153, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1405030, - "core_end": 1412625, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2549403, - "core_end": 2569910, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5055827, - "core_end": 5059681, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5510515, - "core_end": 5536994, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5765662, - "core_end": 5797479, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6552934, - "core_end": 6557688, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6889623, - "core_end": 6949758, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8288250, - "core_end": 8293976, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8610787, - "core_end": 8635487, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 31460, - "core_end": 41750, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 103781, - "core_end": 121371, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1335695, - "core_end": 1361419, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5515246, - "core_end": 5536994, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5785753, - "core_end": 5791297, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6432593, - "core_end": 6467702, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6847315, - "core_end": 6863275, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6889594, - "core_end": 6948414, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7586410, - "core_end": 7601569, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 103780, - "core_end": 128290, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 586986, - "core_end": 589546, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2559339, - "core_end": 2563090, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7586409, - "core_end": 7598555, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 106723, - "core_end": 110434, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2559357, - "core_end": 2561673, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5531212, - "core_end": 5532682, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 5786632, - "core_end": 5788168, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 6901254, - "core_end": 6931905, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7591514, - "core_end": 7598516, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "ripp", - "subregions": [ - { - "start": 251763, - "end": 262319, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 1050594, - "end": 1054583, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 3782902, - "end": 3788943, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 4115027, - "end": 4137513, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 7623284, - "end": 7715706, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 8258333, - "end": 8283623, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 256525, - "end": 259687, - "label": "ripp", - "details": { - "score": "group" - } - }, - { - "start": 7696261, - "end": 7699360, - "label": "ripp", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 251763, - "core_end": 262319, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 1050594, - "core_end": 1054583, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 3782902, - "core_end": 3788943, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 4115027, - "core_end": 4137513, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7623284, - "core_end": 7715706, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 8258333, - "core_end": 8283623, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 256525, - "core_end": 259687, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7696261, - "core_end": 7699360, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "saccharide", - "subregions": [ - { - "start": 2934113, - "end": 2967589, - "label": "saccharide", - "details": { - "score": "group" - } - }, - { - "start": 7385659, - "end": 7388675, - "label": "saccharide", - "details": { - "score": "group" - } - }, - { - "start": 2931776, - "end": 2950345, - "label": "saccharide", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 2934113, - "core_end": 2967589, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7385659, - "core_end": 7388675, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 2931776, - "core_end": 2950345, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "class_i_lantipeptide", - "subregions": [ - { - "start": 255310, - "end": 261084, - "label": "class_i_lantipeptide", - "details": { - "score": "group" - } - }, - { - "start": 7695015, - "end": 7699626, - "label": "class_i_lantipeptide", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 255310, - "core_end": 261084, - "product": "bht", - "details": { - "some_detail": "value" - } - }, - { - "core_start": 7695015, - "core_end": 7699626, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "nis_synthase", - "subregions": [ - { - "start": 3038894, - "end": 3040682, - "label": "nis_synthase", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 3038894, - "core_end": 3040682, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "benzoisochromanequin", - "subregions": [ - { - "start": 5511270, - "end": 5534546, - "label": "benzoisochromanequin", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 5511270, - "core_end": 5534546, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "pentangular_polyphen", - "subregions": [ - { - "start": 5785752, - "end": 5795837, - "label": "pentangular_polyphen", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 5785752, - "core_end": 5795837, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "pks__nrps", - "subregions": [ - { - "start": 6432592, - "end": 6458318, - "label": "pks__nrps", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 6432592, - "core_end": 6458318, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "butyrolactone__pks", - "subregions": [ - { - "start": 6890527, - "end": 6947423, - "label": "butyrolactone__pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 6890527, - "core_end": 6947423, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "class_iii_iv_lantipe", - "subregions": [ - { - "start": 7414295, - "end": 7422622, - "label": "class_iii_iv_lantipe", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 7414295, - "core_end": 7422622, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "butyrolactone__furan", - "subregions": [ - { - "start": 231675, - "end": 251017, - "label": "butyrolactone__furan", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 231675, - "core_end": 251017, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - }, - { - "name": "nrps-pks", - "subregions": [ - { - "start": 6447994, - "end": 6454855, - "label": "nrps-pks", - "details": { - "score": "group" - } - } - ], - "protoclusters": [ - { - "core_start": 6447994, - "core_end": 6454855, - "product": "bht", - "details": { - "some_detail": "value" - } - } - ] - } - ] -} From bc0f2c18fc7315472de35d62302d99770be3324b Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Fri, 8 Dec 2023 18:48:58 +0200 Subject: [PATCH 197/199] working verstion --- R/emerald_try.R | 23 ------------- R/mod_group_table.R | 4 +-- data_all.csv | 73 +++++++++++++++++++++++++++++++++++++++++ inst/extdata/rename.csv | 2 +- 4 files changed, 75 insertions(+), 27 deletions(-) delete mode 100644 R/emerald_try.R create mode 100644 data_all.csv diff --git a/R/emerald_try.R b/R/emerald_try.R deleted file mode 100644 index fc88d90..0000000 --- a/R/emerald_try.R +++ /dev/null @@ -1,23 +0,0 @@ -# read_emerald <- function(data) { -# # get rid off unneeded rows -# all <- readLines(data) -# filtered_lines <- all[!grepl("^#|^$", all)] -# data <- paste(filtered_lines, collapse = "\n") -# data_connection <- textConnection(data) -# # create dataframe -# emerald_data <- read.table(data_connection, header = FALSE, sep = "\t", col.names = c("seqname", "source", "feature", "start", "end", "score", "strand", "frame", "attributes")) -# attributes_split <- strsplit(emerald_data$attributes, ";") -# attribute_list <- vector("list", length(attributes_split)) -# key_value_pairs <- strsplit(attributes_split[[1]], "=") -# key <- lapply(key_value_pairs, function(x) x[1]) -# for (i in 1:length(attributes_split)) { -# value <- lapply(key_value_pairs, function(x) x[2]) -# attribute_list[[i]] <- setNames(as.list(value), unlist(key)) -# } -# -# attributes_df <- do.call(rbind, attribute_list) -# emerald_data <- cbind(emerald_data, attributes_df) -# -# return (emerald_data) -# } - diff --git a/R/mod_group_table.R b/R/mod_group_table.R index b77f301..88979a5 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -89,9 +89,7 @@ mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_nami g = paste(eval(as.name(excluded_names[7])), collapse = ","), h = paste(eval(as.name(excluded_names[8])), collapse = ","), i = paste(eval(as.name(excluded_names[9])), collapse = ","), - j = paste(eval(as.name(excluded_names[10])), collapse = ","), - - + j = paste(eval(as.name(excluded_names[10])), collapse = ",") ) colnames(data) <- c(abbr[i], excluded_names) for (p in abbr) { diff --git a/data_all.csv b/data_all.csv new file mode 100644 index 0000000..891eb0f --- /dev/null +++ b/data_all.csv @@ -0,0 +1,73 @@ +"start","end","label","description" +76963,97013,"terpene","anti" +292967,312632,"lassopeptide","anti" +479882,586556,"t1pks","anti" +734502,778127,"nrps","anti" +958642,1026513,"pks-like__nrps-like__t1pks__nrps","anti" +1119154,1221388,"t1pks","anti" +1278447,1301717,"terpene","anti" +1419908,1429664,"melanin","anti" +1877241,1928997,"t1pks","anti" +2012322,2036507,"terpene","anti" +2437673,2449463,"ni-siderophore","anti" +2626185,2647331,"terpene","anti" +2662021,2682824,"lassopeptide","anti" +2692610,2703259,"ripp-like","anti" +2756600,2811733,"pks-like__t1pks__butyrolactone__other","anti" +2860465,2936136,"t1pks__t2pks__pks-like","anti" +3004667,3015882,"ni-siderophore","anti" +3449231,3645978,"t2pks__t1pks","anti" +3744874,3765721,"terpene","anti" +3781104,3799888,"terpene","anti" +3910606,3955803,"nrps-like__nrps","anti" +3961815,4011002,"nrps__nrps-like","anti" +4335458,4376544,"pks-like__butyrolactone","anti" +4480083,4560161,"nrps__ladderane__arylpolyene","anti" +4831754,4852768,"terpene","anti" +6379292,6389226,"ni-siderophore","anti" +6494928,6505495,"melanin","anti" +6787151,6800612,"aminopolycarboxylic-acid","anti" +6869385,6891957,"lassopeptide","anti" +7666128,7676533,"ectoine","anti" +7918325,7952201,"napaa","anti" +8471425,8512484,"t3pks","anti" +8534239,8577675,"t1pks","anti" +8727143,8740816,"ni-siderophore","anti" +8758094,8809766,"t1pks__hgle-ks","anti" +8926459,8953908,"ripp-like__lanthipeptide-class-iii","anti" +113393,117049,"pks","sempi" +445939,447112,"nrps","sempi" +498923,566951,"pks","sempi" +711684,712977,"nrps","sempi" +754795,760498,"nrps","sempi" +992757,1027894,"nrps-pks","sempi" +1137906,1202468,"pks","sempi" +1388383,1389679,"nrps","sempi" +1467175,1468306,"nrps","sempi" +1545011,1564316,"nrps-pks__nrps","sempi" +1660049,1661168,"nrps","sempi" +1898935,1909972,"pks","sempi" +1969587,1970775,"nrps","sempi" +2265039,2266389,"nrps","sempi" +2472591,2475428,"nrps","sempi" +2777475,2810877,"pks-nrps","sempi" +2879936,2900198,"pks","sempi" +3485523,3486988,"pks","sempi" +3536831,3626365,"pks","sempi" +3930317,3932054,"nrps","sempi" +3982960,3991128,"nrps","sempi" +4496984,4531106,"pks-nrps","sempi" +4708815,4773431,"nrps","sempi" +5161127,5162354,"nrps","sempi" +5614133,5615435,"nrps","sempi" +5858387,5859689,"nrps","sempi" +6095930,6096626,"nrps","sempi" +6333416,6334595,"nrps","sempi" +6727381,6728713,"nrps","sempi" +6923549,6924689,"nrps","sempi" +6991537,6993841,"pks","sempi" +7305917,7307246,"nrps","sempi" +7935449,7937069,"nrps","sempi" +8320414,8321701,"nrps","sempi" +8553652,8558053,"pks","sempi" +8777043,8787804,"pks","sempi" diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv index 013af17..6709af8 100644 --- a/inst/extdata/rename.csv +++ b/inst/extdata/rename.csv @@ -9,7 +9,7 @@ angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp angucycline,pks,alkaloid,#ff7f00,,ARTS butyrolactone,ripp,hybrid,#cab2d6,,RippMiner class_i_lantipeptide,ripp,core,#6a3d9a,,Emerald/SanntiS -lasso_peptide,ripp,regulatory,#ffff99,,Reference +lasso_peptide,ripp,regulatory,#ffff99,,References nis_synthase,other,resistance,#b15928,, acyl_amino_acids,other,base,#d4ced6,, aminocoumarin,other,,,, From 852257761acc6e1ceb88c596388cda5ad870bd63 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Fri, 8 Dec 2023 20:16:57 +0200 Subject: [PATCH 198/199] reference processing --- R/fct_reading_functions.R | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 8e0de1b..5d9caca 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -7,21 +7,14 @@ read_reference <- function(data){ - reference_data <- data - res_validation <- validate_basic_input(reference_data) - if (!(res_validation[[1]])) { - reference_data <- NULL - return(NULL) - } else { - reference_data <- res_validation[[2]] - } - reference_data$chromosome <- rep("GF", length(ripp_data$Cluster)) + reference_data <- read.csv(data) + reference_data$chromosome <- rep("GF", length(reference_data$Cluster)) #Type magic reference_data$Type <- stringr::str_trim(tolower(reference_data$Type)) reference_data["Type2"] <- stringr::str_trim(tolower(reference_data$Type)) #Mutate NAs reference_data <- dplyr::mutate(reference_data, Cluster = 1:length(reference_data$Type)) - + print(reference_data) return(reference_data) } From baa143f434a81f79b999a0d51f43a13215fe8040 Mon Sep 17 00:00:00 2001 From: Tsarin2061 Date: Sun, 10 Dec 2023 00:03:50 +0200 Subject: [PATCH 199/199] bug fixes --- R/app_server.R | 141 +++++------ R/app_ui.R | 4 +- R/fct_reading_functions.R | 28 ++- R/mod_barplot_rank.R | 3 + R/mod_deep_reference_2.R | 13 +- R/mod_deepbgc_plots.R | 48 ++-- R/mod_gecco_plots.R | 38 +-- R/mod_group_table.R | 222 ++++++++--------- R/utils_deep_reference.R | 11 +- anti_biocircos.csv | 28 +++ arts_biocircos.csv | 162 +++++++++++++ compare_biocircos.csv | 31 +++ data_all.csv | 266 +++++++++++++++------ deep_biocircos.csv | 32 +++ dev/02_dev.R | 2 +- emerald_biocircos.csv | 33 +++ gecco_biocircos.csv | 17 ++ group_by.csv | 32 +++ inst/extdata/rename.csv | 2 +- man/{read_reference.Rd => read_compare.Rd} | 6 +- prism_biocircos.csv | 20 ++ prism_supp_biocircos.csv | 126 ++++++++++ ripp_biocircos.csv | 5 + rre_biocircos.csv | 3 + sempi_biocircos.csv | 34 +++ 25 files changed, 989 insertions(+), 318 deletions(-) create mode 100644 anti_biocircos.csv create mode 100644 arts_biocircos.csv create mode 100644 compare_biocircos.csv create mode 100644 deep_biocircos.csv create mode 100644 emerald_biocircos.csv create mode 100644 gecco_biocircos.csv create mode 100644 group_by.csv rename man/{read_reference.Rd => read_compare.Rd} (83%) create mode 100644 prism_biocircos.csv create mode 100644 prism_supp_biocircos.csv create mode 100644 ripp_biocircos.csv create mode 100644 rre_biocircos.csv create mode 100644 sempi_biocircos.csv diff --git a/R/app_server.R b/R/app_server.R index fada85a..18b608c 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -14,8 +14,8 @@ app_server <- function(input, output, session) { check_to_rename <- shiny::reactive({ list( input$sempi_data, input$anti_data, input$prism_data, - input$sempi_sco, input$anti_sco, input$prism_sco, - input$ripp_sco, input$ripp_data, input$emerald_data, input$reference_data + input$sempi_sco, input$anti_sco, input$prism_sco, input$compare_sco, + input$ripp_sco, input$ripp_data, input$emerald_data, input$compare_data ) }) biocircos_listen <- shiny::reactive({ @@ -24,14 +24,14 @@ app_server <- function(input, output, session) { input$ref_col_biocircos, vals$inters_filtered, input$prism_supp_data_input_width, vals$prism_supp_data_input, input$arts_width, input$sempi_width, input$rre_width, vals$anti_data, vals$sempi_data, vals$prism_data, vals$coloring_datatable, - vals$ripp_data, vals$emerald_data, vals$reference_data + vals$ripp_data, vals$emerald_data, vals$compare_data ) }) inputData <- shiny::reactive({ list( vals$sempi_data_input, vals$rre_data_input, vals$anti_data_input, vals$prism_data_input, vals$prism_supp_data_input, vals$deep_data_input, vals$gecco_data_input, vals$arts_data_input, - vals$ripp_data_input, vals$emerald_data_input, vals$reference_data_input + vals$ripp_data_input, vals$emerald_data_input, vals$compare_data_input ) }) dynamicInput <- shiny::reactive({ @@ -41,7 +41,7 @@ app_server <- function(input, output, session) { list( vals$inters_filtered, vals$rre_more, input$ref, input$arts_width, input$sempi_width, input$rre_width, input$prism_supp_data_input_width, vals$anti_data, vals$prism_data, vals$sempi_data, vals$arts_data, - vals$ripp_data, vals$arts_tree_data, vals$emerald_data, vals$reference_data + vals$ripp_data, vals$arts_tree_data, vals$emerald_data, vals$compare_data ) }) @@ -72,13 +72,13 @@ app_server <- function(input, output, session) { can_plot_biocircos = FALSE, can_plot_barplot_rank = FALSE, can_plot_group_table = FALSE, prism_supp_plot = FALSE, ripp_data = NULL, ripp_data_input = FALSE, ripp_type = NULL, ripp_interact = NULL, seg_df_ref_ri = NULL, emerald_data = NULL, emerald_data_input = FALSE, emerald_type = NULL, emerald_interact = NULL, seg_df_ref_emer = NULL, - reference_data = NULL, reference_data_input = FALSE, reference_type = NULL, reference_interact = NULL, seg_df_ref_refer = NULL + compare_data = NULL, compare_data_input = FALSE, compare_type = NULL, compare_interact = NULL, seg_df_ref_compare = NULL ) vals$computed <- list( anti = FALSE, deep = FALSE, gecco = FALSE, arts = FALSE, prism = FALSE, sempi = FALSE, prism_supp = FALSE, rre = FALSE, - ripp = FALSE, emerald = FALSE, reference = FALSE + ripp = FALSE, emerald = FALSE, compare = FALSE ) # Making coloring datatable rename_file <- system.file("extdata", "rename.csv", package = "BGCViz") @@ -92,29 +92,29 @@ app_server <- function(input, output, session) { data_uploads <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_supp_data_input", "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", - "ripp_data_input","emerald_data_input","reference_data_input" + "ripp_data_input","emerald_data_input","compare_data_input" ) data_uploads_inter <- c( "anti_data_input", "sempi_data_input", "prism_data_input", "prism_json", "arts_data_input", "deep_data_input", "gecco_data_input", "rre_data_input", - "ripp_data_input","emerald_data_input","reference_data_input" + "ripp_data_input","emerald_data_input","compare_data_input" ) # Universal beginings for variables, used in the app for different data - soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp","emerald","reference") + soft_names <- c("anti", "sempi", "prism", "prism_supp", "arts", "deep", "gecco", "rre", "ripp","emerald","compare") # The Namings, meaning how to label the data on the plots soft_namings <- c("Antismash", "SEMPI", "PRISM", "PRISM-Supp", "ARTS", "DeepBGC", "GECCO", "RRE-Finder", - "RippMiner","Emerald/SanntiS","Reference") + "RippMiner","Emerald/SanntiS","Compare") # Dataframes undes vals$list, that stored the data data_to_use <- c("anti_data", "sempi_data", "prism_data", "prism_supp_data", "arts_data_filtered", "deep_data_filtered", "gecco_data_filtered", - "rre_data","ripp_data","emerald_data","reference_data") + "rre_data","ripp_data","emerald_data","compare_data") # Used in barplot on summarise tab + Annotation on chromosome plots - abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "Ripp",'Emer',"REF") + abbr <- c("A", "S", "P", "P-Supp", "AR", "D", "G", "RRE", "Ripp",'Emer',"C") # Used for deep reference 2 plot soft_datafr <- c( "seg_df_ref_a", "seg_df_ref_s", "seg_df_ref_p", "seg_df_ref_p_s", "seg_df_ref_ar", "seg_df_ref_d", - "seg_df_ref_g", "seg_df_ref_r", "seg_df_ref_ri","seg_df_ref_emer","seg_df_ref_refer" + "seg_df_ref_g", "seg_df_ref_r", "seg_df_ref_ri","seg_df_ref_emer","seg_df_ref_compare" ) vals$score_a <- 50 @@ -171,38 +171,40 @@ app_server <- function(input, output, session) { # TODO Make tidyr::separate functions for different data types. # For now you just have duplicated the code. Specifically for ARTS! # Reading functions: - process_reference <- function(data, example_data = FALSE) { + process_compare <- function(data, example_data = FALSE) { if (example_data == TRUE) { - reference_data <- data + compare_data <- data } else { - reference_data <- read_reference(data) + compare_data<- read_compare(data) } - vals$reference_type <- reference_data$Type2 - vals$reference_data <- reference_data - vals$reference_data_input <- TRUE + vals$compare_type <- compare_data$Type2 + vals$compare_data <- compare_data + vals$compare_data$chromosome <- rep("C", length(vals$compare_data$Cluster)) + + vals$compare_data_input <- TRUE vals$data_upload_count <- vals$data_upload_count + 1 - vals$choices$ref <- c(vals$choices$ref, "Reference" = "Reference") - vals$choices$group_by <- c(vals$choices$group_by, "Reference" = "Reference") - vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Reference" = "Reference") - vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Reference" = "Reference") - vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Reference" = "Reference") + vals$choices$ref <- c(vals$choices$ref, "Compare" = "Compare") + vals$choices$group_by <- c(vals$choices$group_by, "Compare" = "Compare") + vals$choices$ref_col_biocircos <- c(vals$choices$ref_col_biocircos, "Compare" = "Compare") + vals$choices$ref_comparison_gecco <- c(vals$choices$ref_comparison_gecco, "Compare" = "Compare") + vals$choices$ref_comparison <- c(vals$choices$ref_comparison, "Compare" = "Compare") update_ui_with_data() disable_event_logic() if (vals$data_upload_count == 1) { shiny::updateSelectInput(session, "ref", - selected = "Reference" + selected = "Compare" ) shiny::updateSelectInput(session, "group_table_ui_1-group_by", - selected = "Reference" + selected = "Compare" ) shiny::updateSelectInput(session, "deep_barplot_ui_1-ref_comparison", - selected = "Reference" + selected = "Compare" ) shiny::updateSelectInput(session, "ref_col_biocircos", - selected = "Reference" + selected = "Compare" ) shiny::updateSelectInput(session, "gecco_plots_ui_1-ref_comparison_gecco", - selected = "Reference" + selected = "Compare" ) } } @@ -602,8 +604,8 @@ app_server <- function(input, output, session) { ## Loading and processing user data - ## ---------------------------------------------------------------- - shiny::observeEvent(input$reference_data, { - process_reference(input$reference_data$datapath) + shiny::observeEvent(input$compare_data, { + process_compare(input$compare_data$datapath) }) shiny::observeEvent(input$emerald_data, { @@ -788,11 +790,11 @@ app_server <- function(input, output, session) { } }) - shiny::observeEvent(vals$reference_data_input, { - if (vals$reference_data_input == TRUE){ - shinyjs::showElement(selector = "#reference_hybrid") + shiny::observeEvent(vals$compare_data_input, { + if (vals$compare_data_input == TRUE){ + shinyjs::showElement(selector = "#compare_hybrid") } else { - shinyjs::hideElement(selector = "#reference_hybrid") + shinyjs::hideElement(selector = "#compare_hybrid") } }) # Show prism options if data is available @@ -1104,7 +1106,7 @@ app_server <- function(input, output, session) { "deep_comparison_box", "deep_rate_box", "deep_comparison_controls_box", "gecco_comparison_box", "gecco_rate_box", "gecco_comparison_controls_box", "annotation_reference_box", "annotation_reference_comparison_box", "annotation_reference_comparison_controls_box", "biocircos_plot_box", "biocircos_controls_box", - "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_emerald_box", "upload_reference_box", + "ranking_barplot_box", "group_table_box", "upload_anti_box","upload_ripp_box", "upload_emerald_box", "upload_compare_box", "upload_prism_box","upload_sempi_box", "upload_deep_box", "upload_gecco_box", "upload_rre_box", "upload_arts_box", "use_example_data_box", "rename_box", "prism_supplement_arts_box", "improve_visualization_box", "download_data_box", "gecco_filtering_box", "deep_filtering_box", "arts_tree_box" @@ -1134,11 +1136,11 @@ app_server <- function(input, output, session) { # Make hybrids from the data, if checkbox is checked # TODO Put the function to the root. # Tou have duplicated code - shiny::observeEvent(input$reference_hybrid, ignoreInit = TRUE, { - if (input$reference_hybrid == TRUE) { - vals$reference_data$Type2 <- hybrid_col(vals$reference_data) + shiny::observeEvent(input$compare_hybrid, ignoreInit = TRUE, { + if (input$compare_hybrid == TRUE) { + vals$compare_data$Type2 <- hybrid_col(vals$compare_data) } else { - vals$reference_data$Type2 <- vals$reference_type + vals$compare_data$Type2 <- vals$compare_type } }) @@ -1217,21 +1219,19 @@ app_server <- function(input, output, session) { } if (vals$emerald_data_input == TRUE) { emerald_data <- vals$emerald_data - print('here it is') res <- rename_vector(emerald_data, rename_data, vals$renaming_notification) - print('here also') - vals$emerald_emerald <- res[[1]] + vals$emerald_type <- res[[1]] vals$renaming_notification <-res[[2]] emerald_data["Type2"] <- vals$emerald_data vals$emerald_data <- emerald_data } - if (vals$reference_data_input == TRUE) { - reference_data <- vals$reference_data - res <- rename_vector(reference_data, rename_data, vals$renaming_notification) - vals$reference_type <- res[[1]] + if (vals$compare_data_input == TRUE) { + compare_data <- vals$compare_data + res <- rename_vector(compare_data, rename_data, vals$renaming_notification) + vals$compare_type <- res[[1]] vals$renaming_notification <-res[[2]] - reference_data["Type2"] <- vals$reference_data - vals$reference_data <- reference_data + compare_data["Type2"] <- vals$compare_data + vals$compare_data <- compare_data } shinyjs::showElement(selector = "#reset_name") shinyjs::hideElement(selector = "#rename") @@ -1286,13 +1286,13 @@ app_server <- function(input, output, session) { emerald_data["Type2"] <- vals$emerald_data vals$emerald_data <- emerald_data } - if (vals$reference_data_input == TRUE) { - reference_data <- vals$reference_data - res <- rename_vector(reference_data, rename_data, vals$renaming_notification) - vals$reference_type <- res[[1]] + if (vals$compare_data_input == TRUE) { + compare_data <- vals$compare_data + res <- rename_vector(compare_data, rename_data, vals$renaming_notification) + vals$compare_type <- res[[1]] vals$renaming_notification <-res[[2]] - reference_data["Type2"] <- vals$reference_data - vals$reference_data <- reference_data + compare_data["Type2"] <- vals$compare_data + vals$compare_data <- compare_data } } @@ -1304,10 +1304,10 @@ app_server <- function(input, output, session) { vals$prism_data["Type2"] <- vals$prism_data["Type"] vals$ripp_data["Type2"] <- vals$ripp_data["Type"] vals$emerald_data["Type2"] <- vals$emerald_data["Type"] - vals$reference_data["Type2"] <- vals$reference_data["Type"] - if (input$reference_hybrid == TRUE) { + vals$compare_data["Type2"] <- vals$compare_data["Type"] + if (input$compare_hybrid == TRUE) { shiny::showNotification(paste("Reference cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) - shiny::showNotification(inputId ="reference_hybrid", value = FALSE) + shiny::showNotification(inputId ="compare_hybrid", value = FALSE) } if (input$emerald_hybrid == TRUE) { shiny::showNotification(paste("Emerald/SanntiS cluster types are NOT visualized as hybrid anymore. You should check the option one more time"), type = "warning", duration = 10 ) @@ -1380,11 +1380,11 @@ app_server <- function(input, output, session) { # dplyr::filter while ploting then. shiny::observeEvent(inputData(), ignoreInit = TRUE, priority = 5, { # GENERATE DATA - if (vals$reference_data_input == TRUE) { - reference_data <- vals$reference_data - reference_inter <- vals$reference_data %>% + if (vals$compare_data_input == TRUE) { + compare_data <- vals$compare_data + compare_inter <- vals$compare_data %>% dplyr::select(Start, Stop) - reference_inter$seqnames <- "chr" + compare_inter$seqnames <- "chr" } if (vals$emerald_data_input == TRUE) { emerald_data <- vals$emerald_data @@ -1806,6 +1806,7 @@ app_server <- function(input, output, session) { } lett <- rev(LETTERS)[1:(length(data_uploads)+1)] + tooltip <- c( @@ -1813,7 +1814,7 @@ app_server <- function(input, output, session) { "P_value", "RRE_start", "RRE_stop", "Probability", "Name", "Full_name", "Hit", "Core", "Count", "Bitscore", "Model", "Num_domains", "Num_proteins", "Average_p", "Max_p" ) - + # MAKE COMPUTATIONS sup_index <- 1 soft_lttrs <- lett @@ -1830,17 +1831,20 @@ app_server <- function(input, output, session) { seg_ref_g <- simple_seg(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), "Z", soft_namings[sup_index], soft_names[sup_index], soft_major, inter = FALSE, inters) seg_ref_g <- define_spec_seg_df(soft_names, sup_index, seg_ref_g, soft_major, eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), inter = FALSE, vals$rre_more, inters) seg_ref <- seg_ref_g - if (input$ref == soft_namings[sup_index]) { shiny::validate(need(nrow(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))) > 0, "Reference data is empty, and so, insufficient for plotting. Please select another one")) - plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = ""))), ggplot2::aes(x = vals$chr_len, y = Chr)) + - suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref, vals$rre_more)) + + plot <- ggplot2::ggplot(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))) + + suppressWarnings(eval(as.name(paste0("geom_", soft_names[sup_index])))(seg_ref, vals$rre_more)) soft_let <- abbr[sup_index] lettrs <- lett[2:length(lett)] labels_1 <- list() index <- 1 + for (i in data_uploads) { + if ((vals[[i]] == TRUE) & (soft_names[index] != soft_major)) { + df <- eval(as.name(paste(soft_names[index], "_data", sep = ""))) seg_df <- simple_seg(df, lettrs[index], soft_namings[index], soft_names[index], soft_major, inter = TRUE, inters) seg_df <- define_spec_seg_df(soft_names, index, seg_df, soft_major, df, inter = TRUE, vals$rre_more, inters) @@ -1869,9 +1873,12 @@ app_server <- function(input, output, session) { title = list(text = " Cluster Types ") )) } + seg_ref$yend <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) seg_ref$y <- rep(soft_lttr, length(eval(as.name(paste(soft_names[sup_index], "_data", sep = "")))$Cluster)) vals[[soft_datafr[sup_index]]] <- seg_ref + + } sup_index <- sup_index + 1 } diff --git a/R/app_ui.R b/R/app_ui.R index 7686c21..7868a9e 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -169,10 +169,10 @@ app_ui <- function(request) { id = "id6", shinydashboardPlus::box( title = "Upload reference data", - id = "upload_reference_box", + id = "upload_compare_box", collapsible = TRUE, closable = TRUE, - shiny::fileInput("reference_data", + shiny::fileInput("compare_data", "Upload reference data", accept = ".csv" ) diff --git a/R/fct_reading_functions.R b/R/fct_reading_functions.R index 5d9caca..32e642c 100644 --- a/R/fct_reading_functions.R +++ b/R/fct_reading_functions.R @@ -6,18 +6,26 @@ #' #' @noRd -read_reference <- function(data){ - reference_data <- read.csv(data) - reference_data$chromosome <- rep("GF", length(reference_data$Cluster)) - #Type magic - reference_data$Type <- stringr::str_trim(tolower(reference_data$Type)) - reference_data["Type2"] <- stringr::str_trim(tolower(reference_data$Type)) - #Mutate NAs - reference_data <- dplyr::mutate(reference_data, Cluster = 1:length(reference_data$Type)) - print(reference_data) - return(reference_data) +read_compare <- function(data){ + compare_data <- read.csv(data) + compare_data <- subset(compare_data, select = c("Type", "Cluster", "Start", "Stop")) + compare_data$chromosome <- rep("C", nrow(compare_data)) # Use nrow for clarity + # Type magic + compare_data$Type <- stringr::str_trim(tolower(compare_data$Type)) + compare_data$Type2 <- stringr::str_trim(tolower(compare_data$Type)) + # Mutate NAs + compare_data <- dplyr::mutate(compare_data, Cluster = 1:nrow(compare_data)) + + # Convert "Start" and "Stop" to integers + compare_data$Cluster <- 1:length(compare_data$Cluster) + + compare_data$Start <- as.integer(compare_data$Start) + compare_data$Stop <- as.integer(compare_data$Stop) + 25000 + + return(compare_data) } + read_emerald <- function(data) { # get rid off unneeded rows all <- readLines(data) diff --git a/R/mod_barplot_rank.R b/R/mod_barplot_rank.R index 358c8aa..9c6a117 100644 --- a/R/mod_barplot_rank.R +++ b/R/mod_barplot_rank.R @@ -44,6 +44,9 @@ mod_barplot_rank_server <- function(id, vals, data_uploads, soft_names, soft_nam shiny::req(vals$can_plot_barplot_rank == TRUE) antismash_count <- NULL + compare_count <- NULL + emerald_count <- NULL + ripp_count <- NULL prism_count <- NULL deep_count <- NULL rre_count <- NULL diff --git a/R/mod_deep_reference_2.R b/R/mod_deep_reference_2.R index 40581df..f9c80dc 100644 --- a/R/mod_deep_reference_2.R +++ b/R/mod_deep_reference_2.R @@ -71,18 +71,19 @@ mod_deep_reference_2_server <- function(id, vals, data_uploads, data_to_use) { ) plot <- ggplot2::ggplot(data, ggplot2::aes(x = vals$chr_len, y = Chr)) - if (vals$reference_data_input == TRUE){ + + if (vals$emerald_data_input == TRUE){ plot <- plot + - suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_refer, ggplot2::aes(x, y, + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_emer, ggplot2::aes(x, y, xend = xend, yend = yend, color = Type2, Software = Software, ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) } - if (vals$emerald_data_input == TRUE){ + if (vals$compare_data_input == TRUE){ plot <- plot + - suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_emer, ggplot2::aes(x, y, - xend = xend, yend = yend, color = Type2, Software = Software, - ID = ID, Start = Start, Stop = Stop, Type = Type + suppressWarnings(ggplot2::geom_segment(data = vals$seg_df_ref_compare, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3)) } if (vals$ripp_data_input == TRUE){ diff --git a/R/mod_deepbgc_plots.R b/R/mod_deepbgc_plots.R index 3df1181..4518433 100644 --- a/R/mod_deepbgc_plots.R +++ b/R/mod_deepbgc_plots.R @@ -80,7 +80,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$deep_barplot <- shiny::renderPlot({ - shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$reference_data_input == TRUE) )) + shiny::req((vals$deep_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$compare_data_input == TRUE) )) # Create empty dataframe to populate later @@ -121,20 +121,18 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" } else if (input$ref_comparison == "RippMiner"){ - ripp_inter <- shiny::isolate(vals$ripp_data) %>% + anti_inter <- shiny::isolate(vals$ripp_data) %>% dplyr::select(Start, Stop) - ripp_inter$seqnames <- "chr" + anti_inter$seqnames <- "chr" } else if (input$ref_comparison == "Emerald/SanntiS"){ - emerald_inter <- shiny::isolate(vals$emerald_data) %>% + anti_inter <- shiny::isolate(vals$emerald_data) %>% dplyr::select(Start, Stop) - emerald_inter$seqnames <- "chr" - } else if (input$ref_comparison == "Reference"){ - reference_inter <- shiny::isolate(vals$reference_data) %>% + anti_inter$seqnames <- "chr" + } else if (input$ref_comparison == "Compare"){ + anti_inter <- shiny::isolate(vals$compare_data) %>% dplyr::select(Start, Stop) - reference_inter$seqnames <- "chr" + anti_inter$seqnames <- "chr" } - - # Get the interception of two matrices if (length(deep_inter$Start) > 0) { @@ -159,17 +157,17 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { used_antismash <- length(shiny::isolate(vals$sempi_data$Cluster)) - inter_bgc cols <- c("Only SEMPI", "DeepBGC+SEMPI", "Only DeepBGC") title <- ggplot2::ggtitle("Comparison of SEMPI and DeepBGC annotations at given score threshold") - } else if (input$ref_comparsion == "RipMiner"){ + } else if (input$ref_comparison == "RipMinner"){ used_antismash <- length(shiny::isolate(vals$ripp_data$Cluster)) - inter_bgc cols <-c("Only RippMiner", "DeepBGC+RippMiner", "Only DeepBGC") - title <- ggplot2::ggtitle("Comparsion of RIPP and DeepBGC annotations at given score threshold") - } else if (input$ref_comparison_gecco == "Emerald/SanntiS") { - used_antismash <- lenghth(vals$emerald_data$Cluster) - inter_bgc + title <- ggplot2::ggtitle("Comparsion of RippMiner and DeepBGC annotations at given score threshold") + } else if (input$ref_comparison == "Emerald/SanntiS") { + used_antismash <- length(shiny::isolate(vals$emerald_data$Cluster)) - inter_bgc cols <- c("Only Emerald/SanntiS", "GECCO+Emerald/SanntiS", "Only Emerald/SanntiS") title <- ggplot2::ggtitle("Comparsion of Emerald/SanntiS and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == "Reference") { - used_antismash <- lenghth(vals$reference_data$Cluster) - inter_bgc - cols <- c("Only Reference", "GECCO+Reference", "Only Reference") + } else if (input$ref_comparison == "Compare") { + used_antismash <- length(shiny::isolate(vals$compare_data$Cluster)) - inter_bgc + cols <- c("Only compare", "GECCO+compare", "Only compare") title <- ggplot2::ggtitle("Comparsion of RippMiner-genome and GECCO annotations at given score threshold") } @@ -257,7 +255,7 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate = test$`DeepBGC+RippMiner` / length(data$Cluster), - Skip_rate = test$`Only RippMiner`/ length(data$CLuster) + Skip_rate = test$`Only RippMiner`/ length(data$Cluster) ) } else if (input$ref_comparsion == "Emerald/SanntiS"){ data <- vals$emerald_data @@ -268,18 +266,18 @@ mod_deepbgc_plots_server <- function(id, vals, score_a, score_d, score_c) { Annotation_rate = test$`DeepBGC+Emerald/SanntiS` / length(data$Cluster), - Skip_rate = test$`Only Emerald/SanntiS`/ length(data$CLuster) + Skip_rate = test$`Only Emerald/SanntiS`/ length(data$Cluster) ) - } else if (input$ref_comparsion == "Reference"){ - data <- vals$reference_data - title <- ggplot2::ggtitle("Rates of DeepBGC/Reference data annotation") + } else if (input$ref_comparsion == "Compare"){ + data <- vals$compare_data + title <- ggplot2::ggtitle("Rates of DeepBGC/Compare data annotation") test <- test %>% dplyr::mutate( - Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Reference` + test$`Only Reference`), + Novelty_rate = test$`Only DeepBGC` / (test$`DeepBGC+Compare` + test$`Only Compare`), - Annotation_rate = test$`DeepBGC+Reference` / length(data$Cluster), + Annotation_rate = test$`DeepBGC+Compare` / length(data$Cluster), - Skip_rate = test$`Only Reference`/ length(data$CLuster) + Skip_rate = test$`Only Compare`/ length(data$Cluster) ) } diff --git a/R/mod_gecco_plots.R b/R/mod_gecco_plots.R index 3d12415..c47e71e 100644 --- a/R/mod_gecco_plots.R +++ b/R/mod_gecco_plots.R @@ -78,7 +78,7 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ Skip_rate <- Skip_rate <- Rates_data <- Rates <- NULL output$gecco_barplot <- shiny::renderPlot({ - shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$reference_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) + shiny::req((vals$gecco_data_input == TRUE) & ((vals$anti_data_input == TRUE) | (vals$compare_data_input == TRUE) | (vals$ripp_data_input == TRUE) | (vals$emerald_data_input == TRUE) | (vals$prism_data_input == TRUE) | (vals$sempi_data_input == TRUE))) # Create empty dataframe to populate later fullnes_of_annotation <- data.frame(NA, NA, NA) @@ -118,16 +118,16 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ anti_inter <- vals$sempi_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <- "chr" - } else if(input$ref_comparison_ripp == "RippMiner") { + } else if(input$ref_comparison_gecco == "RippMiner") { anti_inter <- vals$ripp_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <-"chr" - } else if(input$ref_comparison_emerald == "Emerald/SanntiS") { + } else if(input$ref_comparison_gecco == "Emerald/SanntiS") { anti_inter <- vals$emerald_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <-"chr" - } else if(input$ref_comparison_reference == "Reference") { - anti_inter <- vals$reference_data %>% + } else if(input$ref_comparison_gecco == "Compare") { + anti_inter <- vals$compare_data %>% dplyr::select(Start, Stop) anti_inter$seqnames <-"chr" } @@ -160,17 +160,17 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ cols <- c("Only SEMPI", "GECCO+SEMPI", "Only GECCO") title <- ggplot2::ggtitle("Comparison of SEMPI and GECCO annotations at given score threshold") } else if (input$ref_comparison_gecco == "RippMiner") { - used_antismash <- lenghth(vals$ripp_data$Cluster) - inter_bgc + used_antismash <- length(vals$ripp_data$Cluster) - inter_bgc cols <- c("Only RippMiner", "GECCO+RippMiner", "Only RippMiner") title <- ggplot2::ggtitle("Comparsion of RippMiner-genome and GECCO annotations at given score threshold") } else if (input$ref_comparison_gecco == "Emerald/SanntiS") { - used_antismash <- lenghth(vals$emerald_data$Cluster) - inter_bgc + used_antismash <- length(vals$emerald_data$Cluster) - inter_bgc cols <- c("Only Emerald/SanntiS", "GECCO+Emerald/SanntiS", "Only Emerald/SanntiS") title <- ggplot2::ggtitle("Comparsion of Emerald/SanntiS and GECCO annotations at given score threshold") - } else if (input$ref_comparison_gecco == "Reference") { - used_antismash <- lenghth(vals$reference_data$Cluster) - inter_bgc - cols <- c("Only Reference", "GECCO+Reference", "Only Reference") - title <- ggplot2::ggtitle("Comparsion of Reference and GECCO annotations at given score threshold") + } else if (input$ref_comparison_gecco == "Compare") { + used_antismash <- length(vals$compare_data$Cluster) - inter_bgc + cols <- c("Only compare", "GECCO+compare", "Only compare") + title <- ggplot2::ggtitle("Comparsion of compare and GECCO annotations at given score threshold") } # Combine all vectors into one dataframe @@ -248,10 +248,10 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ ) } else if (input$ref_comparison_gecco == "RippMiner"){ data <- vals$ripp_data - title <- ggplot2::ggtitle("Rates of GECCO/RippMinner data annotation") + title <- ggplot2::ggtitle("Rates of GECCO/RippMiner data annotation") test <- test %>% dplyr::mutate( - Novelty_rate = test$`Only GECCO`/ (test$`GECCO+RippMinner` + test$`Only RippMiner`), + Novelty_rate = test$`Only GECCO`/ (test$`GECCO+RippMiner` + test$`Only RippMiner`), # Annotation_rate = test$`GECCO+RippMiner`/ length(data$Cluster), # @@ -268,16 +268,16 @@ mod_gecco_plots_server <- function(id, vals, score_average_gecco, score_cluster_ # Skip_rate = test$`Only Emerald/SanntiS`/length(data$Cluster) ) - } else if (input$ref_comparison_gecco == "Reference"){ - data <- vals$reference_data - title <- ggplot2::ggtitle("Rates of GECCO/Reference data annotation") + } else if (input$ref_comparison_gecco == "Compare"){ + data <- vals$compare_data + title <- ggplot2::ggtitle("Rates of GECCO/compare data annotation") test <- test %>% dplyr::mutate( - Novelty_rate = test$`Only Reference`/ (test$`GECCO+Reference` + test$`Only Reference`), + Novelty_rate = test$`Only Compare`/ (test$`GECCO+Compare` + test$`Only Compare`), # - Annotation_rate = test$`GECCO+Reference`/ length(data$Cluster), + Annotation_rate = test$`GECCO+Compare`/ length(data$Cluster), # - Skip_rate = test$`Only Reference`/length(data$Cluster) + Skip_rate = test$`Only Compare`/length(data$Cluster) ) } diff --git a/R/mod_group_table.R b/R/mod_group_table.R index 88979a5..6a8bf42 100644 --- a/R/mod_group_table.R +++ b/R/mod_group_table.R @@ -1,4 +1,4 @@ -#' group_table UI Function +#'#' group_table UI Function #' #' @description A shiny Module. #' @@ -8,127 +8,127 @@ #' #' @importFrom shiny NS tagList mod_group_table_ui <- function(id) { - ns <- NS(id) - tagList( - div( - id = "id2", - shinyjqui::jqui_resizable( - shinydashboardPlus::box( - title = "Group table", - id = "group_table_box", - collapsible = TRUE, - closable = TRUE, - style = "overflow-x: scroll;height:700px;overflow-y: scroll;", - height = "100%", - shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), - shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ""), - shiny::tableOutput(ns("group_table")) %>% - shinycssloaders::withSpinner() - ), - options = list(handles = "w,e") - ) - ) + ns <- NS(id) + tagList( + div( + id = "id2", + shinyjqui::jqui_resizable( + shinydashboardPlus::box( + title = "Group table", + id = "group_table_box", + collapsible = TRUE, + closable = TRUE, + style = "overflow-x: scroll;height:700px;overflow-y: scroll;", + height = "100%", + shiny::checkboxInput(ns("count_all"), "Show all BGC for the 'group by' method (+ individually annotated BGC)"), + shiny::selectInput(ns("group_by"), "Group data by", choices = c(""), selected = ""), + shiny::tableOutput(ns("group_table")) %>% + shinycssloaders::withSpinner() + ), + options = list(handles = "w,e") + ) ) + ) } #' group_table Server Functions #' #' @noRd mod_group_table_server <- function(id, vals, data_uploads, soft_names, soft_namings, data_to_use, abbr) { - moduleServer(id, function(input, output, session) { - ns <- session$ns - output$group_table <- shiny::renderTable({ - shiny::req(vals$data_upload_count > 1) - shiny::req(vals$need_filter == FALSE) - shiny::req(vals$can_plot_group_table == TRUE) - if (is.null(vals$inters_filtered)) { - inters <- vals$inters - } else { - inters <- vals$inters_filtered - } - df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) - colnames(df_test) <- abbr - added_inters <- c(soft_names[match(input$group_by, soft_namings)]) - add_inters <- list() - if (input$count_all == FALSE) { - df_test[nrow(df_test) + 1, ] <- NA - } else { - selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] - df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) - colnames(df_test) <- abbr - df_test[[abbr[match(input$group_by, soft_namings)]]] <- vals[[selected_dataframe]]$Cluster - df_test[nrow(df_test) + 1, ] <- NA + moduleServer(id, function(input, output, session) { + ns <- session$ns + output$group_table <- shiny::renderTable({ + shiny::req(vals$data_upload_count > 1) + shiny::req(vals$need_filter == FALSE) + shiny::req(vals$can_plot_group_table == TRUE) + if (is.null(vals$inters_filtered)) { + inters <- vals$inters + } else { + inters <- vals$inters_filtered + } + df_test <- data.frame(matrix(ncol = length(abbr), nrow = 0)) + colnames(df_test) <- abbr + added_inters <- c(soft_names[match(input$group_by, soft_namings)]) + add_inters <- list() + if (input$count_all == FALSE) { + df_test[nrow(df_test) + 1, ] <- NA + } else { + selected_dataframe <- data_to_use[match(input$group_by, soft_namings)] + df_test <- data.frame(matrix(ncol = length(abbr), nrow = length(vals[[selected_dataframe]]$Cluster))) + colnames(df_test) <- abbr + df_test[[abbr[match(input$group_by, soft_namings)]]] <- vals[[selected_dataframe]]$Cluster + df_test[nrow(df_test) + 1, ] <- NA + } + for (i in seq(1:length(data_uploads))) { + if (input$group_by == soft_namings[[i]]) { + exclude <- i + soft_n <- names(inters[[soft_names[i]]]) + index <- 1 + for (d in seq(1:length(soft_n))) { + name <- soft_n[[index]] + df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) + for (h in seq(1:length(soft_n))) { + if (name == soft_names[match(soft_n, soft_names)][h]) { + colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) + df_test <- merge(df_test, df_tmp, all = TRUE) + } } - for (i in seq(1:length(data_uploads))) { - if (input$group_by == soft_namings[[i]]) { - exclude <- i - soft_n <- names(inters[[soft_names[i]]]) - index <- 1 - for (d in seq(1:length(soft_n))) { - name <- soft_n[[index]] - df_tmp <- data.frame(cbind(c(inters[[soft_names[i]]][[soft_n[d]]]$to), c(inters[[soft_names[i]]][[soft_n[d]]]$from))) - for (h in seq(1:length(soft_n))) { - if (name == soft_names[match(soft_n, soft_names)][h]) { - colnames(df_tmp) <- c(abbr[i], abbr[match(soft_n, soft_names)][h]) - df_test <- merge(df_test, df_tmp, all = TRUE) - } - } - - index <- index + 1 - } - excluded_names <- abbr[abbr != as.name(abbr[i])] - data <- df_test %>% - dplyr::group_by_if(colnames(df_test) == abbr[i]) %>% - dplyr::summarise( - a = paste(eval(as.name(excluded_names[1])), collapse = ","), - b = paste(eval(as.name(excluded_names[2])), collapse = ","), - c = paste(eval(as.name(excluded_names[3])), collapse = ","), - d = paste(eval(as.name(excluded_names[4])), collapse = ","), - e = paste(eval(as.name(excluded_names[5])), collapse = ","), - f = paste(eval(as.name(excluded_names[6])), collapse = ","), - g = paste(eval(as.name(excluded_names[7])), collapse = ","), - h = paste(eval(as.name(excluded_names[8])), collapse = ","), - i = paste(eval(as.name(excluded_names[9])), collapse = ","), - j = paste(eval(as.name(excluded_names[10])), collapse = ",") - ) - colnames(data) <- c(abbr[i], excluded_names) - for (p in abbr) { - data[[p]] <- gsub("NA,|,NA", "", data[[p]]) - data[[p]][nrow(data)] <- refine_unique(data[[p]]) - names(data)[names(data) == p] <- soft_namings[match(p, abbr)] - } - data["Group"] <- paste("group", rownames(data), sep = "_") - for (f in seq(1:length(data_uploads))) { - if (vals[[data_uploads[f]]] != TRUE) { - data <- data %>% - dplyr::select(-as.name(soft_namings[f])) - } - } - } else { - if (!(soft_names[i] %in% added_inters)) { - matched_v <- match(added_inters, names(inters[[soft_names[i]]])) - soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] - for (inter in names(inters[[soft_names[i]]])) { - if (!(inter %in% added_inters)) { - add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) - add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) - } - } - added_inters <- c(added_inters, soft_names[i]) - } - } + + index <- index + 1 + } + excluded_names <- abbr[abbr != as.name(abbr[i])] + data <- df_test %>% + dplyr::group_by_if(colnames(df_test) == abbr[i]) %>% + dplyr::summarise( + a = paste(eval(as.name(excluded_names[1])), collapse = ","), + b = paste(eval(as.name(excluded_names[2])), collapse = ","), + c = paste(eval(as.name(excluded_names[3])), collapse = ","), + d = paste(eval(as.name(excluded_names[4])), collapse = ","), + e = paste(eval(as.name(excluded_names[5])), collapse = ","), + f = paste(eval(as.name(excluded_names[6])), collapse = ","), + g = paste(eval(as.name(excluded_names[7])), collapse = ","), + h = paste(eval(as.name(excluded_names[8])), collapse = ","), + i = paste(eval(as.name(excluded_names[9])), collapse = ","), + j = paste(eval(as.name(excluded_names[10])), collapse = ",") + ) + colnames(data) <- c(abbr[i], excluded_names) + for (p in abbr) { + data[[p]] <- gsub("NA,|,NA", "", data[[p]]) + data[[p]][nrow(data)] <- refine_unique(data[[p]]) + names(data)[names(data) == p] <- soft_namings[match(p, abbr)] + } + data["Group"] <- paste("group", rownames(data), sep = "_") + for (f in seq(1:length(data_uploads))) { + if (vals[[data_uploads[f]]] != TRUE) { + data <- data %>% + dplyr::select(-as.name(soft_namings[f])) } - - for (name in names(add_inters)) { - data_to_add <- sort(unique(add_inters[[name]])) - data[nrow(data), soft_namings[match(name, soft_names)]] <- - paste(data_to_add[!(data_to_add %in% - unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + } else { + if (!(soft_names[i] %in% added_inters)) { + matched_v <- match(added_inters, names(inters[[soft_names[i]]])) + soft_n <- soft_names[-(matched_v[!is.na(matched_v)])] + for (inter in names(inters[[soft_names[i]]])) { + if (!(inter %in% added_inters)) { + add_inters[[soft_names[i]]] <- c(add_inters[[soft_names[i]]], inters[[soft_names[i]]][[inter]]$to) + add_inters[[inter]] <- c(add_inters[[inter]], inters[[soft_names[i]]][[inter]]$from) + } } - utils::write.csv(data, "group_by.csv", row.names = FALSE) - data - }) + added_inters <- c(added_inters, soft_names[i]) + } + } + } + + for (name in names(add_inters)) { + data_to_add <- sort(unique(add_inters[[name]])) + data[nrow(data), soft_namings[match(name, soft_names)]] <- + paste(data_to_add[!(data_to_add %in% + unique(unlist(c(data[soft_namings[match(name, soft_names)]]))))], collapse = ",") + } + utils::write.csv(data, "group_by.csv", row.names = FALSE) + data }) + }) } ## To be copied in the UI diff --git a/R/utils_deep_reference.R b/R/utils_deep_reference.R index 62cbf4a..1f33810 100644 --- a/R/utils_deep_reference.R +++ b/R/utils_deep_reference.R @@ -15,6 +15,15 @@ geom_anti <- function(data, rre_more) { ID = ID, Start = Start, Stop = Stop, Type = Type ), size = 3) } +geom_compare <- function(data, rre_more) { + # Silence R CMD note + x <- y <- xend <- yend <- Type2 <- + Software <- ID <- Start <- Stop <- Type <- NULL + ggplot2::geom_segment(data = data, ggplot2::aes(x, y, + xend = xend, yend = yend, color = Type2, Software = Software, + ID = ID, Start = Start, Stop = Stop, Type = Type + ), size = 3) +} #' geom_anti #' #'#' @description A function, that return Emerald/SanntiS geom with the legend, @@ -223,7 +232,7 @@ add_more_annot <- function(seg_df, plot, soft_names, index, rre_more) { plot <- plot + geom_gecco(seg_df) } else if (soft_names[index] == "emerald/sanntis"){ plot <- plot + geom_gecco(seg_df) - } else if (soft_names[index] == "reference"){ + } else if (soft_names[index] == "compare"){ plot <- plot + geom_gecco(seg_df) } return(plot) diff --git a/anti_biocircos.csv b/anti_biocircos.csv new file mode 100644 index 0000000..0410951 --- /dev/null +++ b/anti_biocircos.csv @@ -0,0 +1,28 @@ +"Cluster","Start","Stop","Type","chromosome","Type2" +1,86693,139654,"hgle-ks__t1pks","A","hgle-ks__t1pks" +2,166700,191657,"terpene","A","terpene" +3,246867,270397,"lanthipeptide-class-i","A","lanthipeptide-class-i" +4,494259,544087,"nrps","A","nrps" +5,791700,799942,"ripp-like","A","ripp-like" +6,1258217,1297040,"t3pks","A","t3pks" +7,1995499,2005898,"ectoine","A","ectoine" +8,2939305,2949875,"melanin","A","melanin" +9,3034430,3045603,"siderophore","A","siderophore" +10,3524827,3603907,"nrps","A","nrps" +11,5496473,5567376,"t2pks","A","t2pks" +12,5671274,5691836,"terpene","A","terpene" +13,5751944,5824487,"t2pks","A","t2pks" +14,6336090,6346443,"siderophore","A","siderophore" +15,6429574,6475291,"nrps-like__t1pks__prodigiosin","A","nrps-like__t1pks__prodigiosin" +16,6632342,6643659,"ripp-like","A","ripp-like" +17,6656903,6676224,"terpene","A","terpene" +18,6842314,6855522,"siderophore","A","siderophore" +19,6881334,6951537,"t1pks__butyrolactone","A","t1pks__butyrolactone" +20,7088263,7142447,"thioamide-nrp__nrps","A","thioamide-nrp__nrps" +21,7409741,7432456,"lanthipeptide-class-iii","A","lanthipeptide-class-iii" +22,7506307,7532117,"terpene","A","terpene" +23,7570411,7618555,"pks-like__t1pks","A","pks-like__t1pks" +24,7682906,7709360,"lanthipeptide-class-i","A","lanthipeptide-class-i" +25,7973469,8047403,"other__t3pks","A","other__t3pks" +26,8269636,8290764,"indole","A","indole" +27,8475101,8548352,"t3pks__nrps__terpene","A","t3pks__nrps__terpene" diff --git a/arts_biocircos.csv b/arts_biocircos.csv new file mode 100644 index 0000000..a015ee2 --- /dev/null +++ b/arts_biocircos.csv @@ -0,0 +1,162 @@ +"Hit","Start","Stop","Core","Description","Count","ID","Cluster","Type","Type2","Evalue","Bitscore","Model" +"hit_1",161236,162553,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,1,1,"core","core",NA,NA,"Core" +"hit_1",197220,199917,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,2,2,"core","core",NA,NA,"Core" +"hit_1",457483,457654,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,3,3,"core","core",NA,NA,"Core" +"hit_1",544193,545717,"TIGR01311","glycerol_kin: glycerol kinase",2,4,4,"core","core",NA,NA,"Core" +NA,583522,586897,"Not_core","Biotin_lipoyl",1,5,5,"resistance","resistance",4.7e-15,54,"PF00364.17" +"hit_1",612155,612320,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,6,6,"core","core",NA,NA,"Core" +"hit_1",620366,620879,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,7,7,"core","core",NA,NA,"Core" +NA,740313,742083,"Not_core","ABC_efflux",1,8,8,"resistance","resistance",3.9e-74,248.9,"RF0007" +NA,796976,797723,"Not_core","Biotin_lipoyl",1,9,9,"resistance","resistance",3.4e-06,25.7,"PF00364.17" +"hit_1",1035207,1036800,"TIGR01344","malate_syn_A: malate synthase A",2,10,10,"core","core",NA,NA,"Core" +"hit_1",1116446,1117826,"TIGR03356","BGL: beta-galactosidase",5,11,11,"core","core",NA,NA,"Core" +NA,1202479,1204282,"Not_core","ABC_efflux",1,12,12,"resistance","resistance",8.4e-81,270.9,"RF0007" +"hit_1",1210321,1210594,"TIGR00105","L31: ribosomal protein bL31",3,13,13,"core","core",NA,NA,"Core" +"hit_1",1282581,1283235,"TIGR00079","pept_deformyl: peptide deformylase",3,14,14,"core","core",NA,NA,"Core" +NA,1338247,1339366,"Not_core","Biotin_lipoyl",1,15,15,"resistance","resistance",7.5e-09,34.2,"PF00364.17" +"hit_1",1396237,1397416,"TIGR00485","EF-Tu: translation elongation factor Tu",2,16,16,"core","core",NA,NA,"Core" +"hit_1",1401206,1402082,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,17,17,"core","core",NA,NA,"Core" +NA,1494023,1495871,"Not_core","HSP90",1,18,18,"resistance","resistance",3.6e-07,28,"PF00183.13" +NA,1590406,1591387,"Not_core","OTCace",1,19,19,"resistance","resistance",4.9e-37,126.3,"PF00185.19" +"hit_1",1636965,1638942,"TIGR00418","thrS: threonine--tRNA ligase",2,20,20,"core","core",NA,NA,"Core" +"hit_1",1662891,1666530,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,21,21,"core","core",NA,NA,"Core" +NA,1757648,1758413,"Not_core","Proteasome",1,22,22,"resistance","resistance",1.9e-26,91.6,"PF00227.21" +NA,1758474,1759320,"Not_core","Proteasome",1,23,23,"resistance","resistance",2.6e-38,130.3,"PF00227.21" +"hit_2",1778725,1780264,"TIGR01311","glycerol_kin: glycerol kinase",2,24,24,"core","core",NA,NA,"Core" +"hit_1",1923749,1924289,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,25,25,"core","core",NA,NA,"Core" +"hit_1",2048175,2049129,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,26,26,"core","core",NA,NA,"Core" +NA,2059303,2060092,"Not_core","AAC3",1,27,27,"resistance","resistance",3.5e-54,182.5,"RF0002" +"hit_1",2068834,2069953,"TIGR00876","tal_mycobact: transaldolase",2,28,28,"core","core",NA,NA,"Core" +"hit_1",2069956,2071480,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,29,29,"core","core",NA,NA,"Core" +"hit_1",2071476,2072532,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,30,30,"core","core",NA,NA,"Core" +"hit_1",2080142,2081153,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,31,31,"core","core",NA,NA,"Core" +NA,2080142,2081153,"Not_core","Gp_dh_N",1,32,32,"resistance","resistance",2e-61,205.4,"PF00044.19" +"hit_1",2156336,2157773,"TIGR01064","pyruv_kin: pyruvate kinase",2,33,33,"core","core",NA,NA,"Core" +"hit_1",2162745,2165253,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,34,34,"core","core",NA,NA,"Core" +"hit_1",2185227,2186259,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,35,35,"core","core",NA,NA,"Core" +"hit_1",2308850,2309915,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,36,36,"core","core",NA,NA,"Core" +"hit_1",2316757,2318494,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,37,37,"core","core",NA,NA,"Core" +"hit_2",2338273,2339347,"TIGR03160","cobT_DBIPRT: nicotinate-nucleotide--dimethylbenzimidazole phosphoribosyltransferase",2,38,38,"core","core",NA,NA,"Core" +NA,2345795,2347568,"Not_core","Biotin_lipoyl",1,39,39,"resistance","resistance",8.7e-46,152.5,"PF00364.17" +"hit_1",2348739,2351439,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,40,40,"core","core",NA,NA,"Core" +"hit_1",2445704,2446967,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,41,41,"core","core",NA,NA,"Core" +"hit_2",2539575,2542332,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,42,42,"core","core",NA,NA,"Core" +NA,2624025,2625402,"Not_core","Carboxyl_trans",1,43,43,"resistance","resistance",2.6e-27,94.4,"PF01039.17" +NA,2651102,2653031,"Not_core","ABC_efflux",1,44,44,"resistance","resistance",4.6e-95,318,"RF0007" +"hit_2",2684903,2687633,"TIGR01828","pyru_phos_dikin: pyruvate, phosphate dikinase",2,45,45,"core","core",NA,NA,"Core" +"hit_2",2728979,2730326,"TIGR03356","BGL: beta-galactosidase",5,46,46,"core","core",NA,NA,"Core" +"hit_1",2745001,2746024,"TIGR01430","aden_deam: adenosine deaminase",5,47,47,"core","core",NA,NA,"Core" +"hit_1",2753869,2755006,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,48,48,"core","core",NA,NA,"Core" +"hit_2",2854111,2854591,"TIGR02133","RPI_actino: ribose 5-phosphate isomerase",2,49,49,"core","core",NA,NA,"Core" +"hit_2",2861701,2864203,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,50,50,"core","core",NA,NA,"Core" +"hit_3",2873769,2876343,"TIGR02412","pepN_strep_liv: aminopeptidase N",3,51,51,"core","core",NA,NA,"Core" +NA,3010976,3014708,"Not_core","ABC_efflux",1,52,52,"resistance","resistance",4.6e-170,565.4,"RF0007" +NA,3027513,3029130,"Not_core","Carboxyl_trans",1,53,53,"resistance","resistance",3.2e-164,546,"PF01039.17" +NA,3029168,3031109,"Not_core","Biotin_lipoyl",1,54,54,"resistance","resistance",7.8e-20,69.4,"PF00364.17" +"hit_1",3043785,3045603,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,55,55,"core","core",NA,NA,"Core" +"hit_3",3054669,3056109,"TIGR03356","BGL: beta-galactosidase",5,56,56,"core","core",NA,NA,"Core" +"hit_1",3153869,3154226,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,57,57,"core","core",NA,NA,"Core" +"hit_2",3166795,3168142,"TIGR01513","NAPRTase_put: nicotinate phosphoribosyltransferase",2,58,58,"core","core",NA,NA,"Core" +"hit_1",3390540,3391821,"TIGR01060","eno: phosphopyruvate hydratase",2,59,59,"core","core",NA,NA,"Core" +"hit_2",3521672,3522680,"TIGR01245","trpD: anthranilate phosphoribosyltransferase",2,60,60,"core","core",NA,NA,"Core" +"hit_1",3691373,3692384,"TIGR00233","trpS: tryptophan--tRNA ligase",2,61,61,"core","core",NA,NA,"Core" +"hit_1",3789247,3789487,"TIGR00165","S18: ribosomal protein bS18",2,62,62,"core","core",NA,NA,"Core" +"hit_2",3790677,3790932,"TIGR00105","L31: ribosomal protein bL31",3,63,63,"core","core",NA,NA,"Core" +"hit_2",3790938,3791103,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,64,64,"core","core",NA,NA,"Core" +"hit_1",3791190,3791412,"TIGR00009","L28: ribosomal protein bL28",2,65,65,"core","core",NA,NA,"Core" +"hit_1",3791411,3791717,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,66,66,"core","core",NA,NA,"Core" +"hit_1",3804031,3804376,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,67,67,"core","core",NA,NA,"Core" +NA,3966834,3967929,"Not_core","vanS",1,68,68,"resistance","resistance",2.9e-88,295.1,"RF0155" +NA,3967921,3968617,"Not_core","vanR",1,69,69,"resistance","resistance",5.8e-82,273.4,"RF0154" +NA,3973353,3973962,"Not_core","vanX",1,70,70,"resistance","resistance",3.8e-98,325.8,"RF0158" +"hit_2",4048920,4050120,"TIGR02349","DnaJ_bact: chaperone protein DnaJ",2,71,71,"core","core",NA,NA,"Core" +"hit_2",4153149,4154442,"TIGR00418","thrS: threonine--tRNA ligase",2,72,72,"core","core",NA,NA,"Core" +NA,4193531,4194941,"Not_core","Biotin_lipoyl",1,73,73,"resistance","resistance",3.7e-23,80,"PF00364.17" +NA,4210795,4212271,"Not_core","Biotin_lipoyl",1,74,74,"resistance","resistance",5.5e-18,63.4,"PF00364.17" +NA,4260740,4263314,"Not_core","DNA_topoisoIV",1,75,75,"resistance","resistance",2.8e-148,493.3,"PF00521.15" +NA,4263377,4265438,"Not_core","DNA_gyraseB",1,76,76,"resistance","resistance",2.3e-61,205.1,"PF00204.20" +NA,4268712,4269843,"Not_core","TIGR00663",1,77,77,"resistance","resistance",8.7e-90,300.1,"TIGR00663" +"hit_2",4304257,4304494,"TIGR00165","S18: ribosomal protein bS18",2,78,78,"core","core",NA,NA,"Core" +"hit_2",4363347,4364685,"TIGR01412","tat_substr_1: Tat-translocated enzyme",2,79,79,"core","core",NA,NA,"Core" +"hit_2",4413741,4414275,"TIGR00481","TIGR00481: Raf kinase inhibitor-like protein, YbhB/YbcL family",2,80,80,"core","core",NA,NA,"Core" +NA,4684158,4684947,"Not_core","Pentapeptide_4",1,81,81,"resistance","resistance",3.4e-18,64.3,"PF13599.1" +NA,4795084,4796683,"Not_core","Carboxyl_trans",1,82,82,"resistance","resistance",6.3e-139,462.5,"PF01039.17" +NA,4796696,4798541,"Not_core","Biotin_lipoyl",1,83,83,"resistance","resistance",1.6e-14,52.4,"PF00364.17" +"hit_2",4977868,4978495,"TIGR00079","pept_deformyl: peptide deformylase",3,84,84,"core","core",NA,NA,"Core" +"hit_3",5061598,5061763,"TIGR01023","rpmG_bact: ribosomal protein bL33",3,85,85,"core","core",NA,NA,"Core" +"hit_2",5068591,5069623,"TIGR01430","aden_deam: adenosine deaminase",5,86,86,"core","core",NA,NA,"Core" +NA,5078060,5081546,"Not_core","TIGR02013",1,87,87,"resistance","resistance",0,1814.6,"TIGR02013" +"hit_1",5089829,5091956,"TIGR00484","EF-G: translation elongation factor G",2,88,88,"core","core",NA,NA,"Core" +"hit_2",5092129,5093323,"TIGR00485","EF-Tu: translation elongation factor Tu",2,89,89,"core","core",NA,NA,"Core" +"hit_2",5134359,5134545,"Ribosomal_S14","PF00253.17: Ribosomal protein S14p/S29e",2,90,90,"core","core",NA,NA,"Core" +"hit_2",5153333,5155181,"TIGR01135","glmS: glutamine-fructose-6-phosphate transaminase (isomerizing)",2,91,91,"core","core",NA,NA,"Core" +"hit_2",5172736,5173045,"Cpn10","PF00166.17: Chaperonin 10 Kd subunit",2,92,92,"core","core",NA,NA,"Core" +"hit_1",5269285,5270731,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,93,93,"core","core",NA,NA,"Core" +"hit_2",5271518,5272538,"TIGR00233","trpS: tryptophan--tRNA ligase",2,94,94,"core","core",NA,NA,"Core" +"hit_3",5334545,5335736,"TIGR01430","aden_deam: adenosine deaminase",5,95,95,"core","core",NA,NA,"Core" +NA,5355282,5357055,"Not_core","Biotin_lipoyl",1,96,96,"resistance","resistance",7.1e-17,59.9,"PF00364.17" +NA,5359017,5360610,"Not_core","Carboxyl_trans",1,97,97,"resistance","resistance",1.2e-199,662.9,"PF01039.17" +NA,5533652,5534546,"Not_core","ClassB",1,98,98,"resistance","resistance",7.1e-26,89.8,"RF0054" +"hit_2",5644428,5644671,"TIGR02200","GlrX_actino: glutaredoxin-like protein",2,99,99,"core","core",NA,NA,"Core" +"hit_1",5670248,5671262,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,100,100,"core","core",NA,NA,"Core" +"hit_1",5671274,5672591,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,101,101,"core","core",NA,NA,"Core" +"hit_3",5680106,5680757,"TIGR00079","pept_deformyl: peptide deformylase",3,102,102,"core","core",NA,NA,"Core" +"hit_3",5830019,5830244,"TIGR00105","L31: ribosomal protein bL31",3,103,103,"core","core",NA,NA,"Core" +"hit_1",5832393,5833041,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,104,104,"core","core",NA,NA,"Core" +"hit_2",5833805,5835062,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,105,105,"core","core",NA,NA,"Core" +"hit_1",5880227,5880572,"TIGR03954","integ_memb_HG: integral membrane protein",3,106,106,"core","core",NA,NA,"Core" +"hit_2",5883332,5883662,"TIGR03954","integ_memb_HG: integral membrane protein",3,107,107,"core","core",NA,NA,"Core" +"hit_2",5892974,5894405,"TIGR01064","pyruv_kin: pyruvate kinase",2,108,108,"core","core",NA,NA,"Core" +"hit_3",5955946,5957209,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,109,109,"core","core",NA,NA,"Core" +NA,5957223,5957601,"Not_core","Biotin_lipoyl",1,110,110,"resistance","resistance",2.1e-05,23.2,"PF00364.17" +"hit_1",5978784,5980992,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,111,111,"core","core",NA,NA,"Core" +"hit_1",6005642,6006641,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,112,112,"core","core",NA,NA,"Core" +NA,6031664,6033248,"Not_core","Carboxyl_trans",1,113,113,"resistance","resistance",1.5e-201,669,"PF01039.17" +"hit_2",6062058,6062244,"TIGR00009","L28: ribosomal protein bL28",2,114,114,"core","core",NA,NA,"Core" +"hit_2",6069793,6069967,"TIGR01031","rpmF_bact: ribosomal protein bL32",2,115,115,"core","core",NA,NA,"Core" +"hit_1",6099895,6100675,"TIGR02227","sigpep_I_bact: signal peptidase I",4,116,116,"core","core",NA,NA,"Core" +"hit_2",6100667,6102008,"TIGR02227","sigpep_I_bact: signal peptidase I",4,117,117,"core","core",NA,NA,"Core" +"hit_3",6101640,6102651,"TIGR02227","sigpep_I_bact: signal peptidase I",4,118,118,"core","core",NA,NA,"Core" +"hit_4",6102755,6103532,"TIGR02227","sigpep_I_bact: signal peptidase I",4,119,119,"core","core",NA,NA,"Core" +"hit_4",6161551,6162715,"TIGR01430","aden_deam: adenosine deaminase",5,120,120,"core","core",NA,NA,"Core" +"hit_1",6206674,6207832,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,121,121,"core","core",NA,NA,"Core" +"hit_2",6266752,6267652,"TIGR00674","dapA: 4-hydroxy-tetrahydrodipicolinate synthase",2,122,122,"core","core",NA,NA,"Core" +NA,6371005,6373129,"Not_core","DNA_gyraseB",1,123,123,"resistance","resistance",1.2e-50,170.1,"PF00204.20" +NA,6386423,6388880,"Not_core","DNA_topoisoIV",1,124,124,"resistance","resistance",7.1e-147,488.7,"PF00521.15" +"hit_3",6470908,6473452,"TIGR03954","integ_memb_HG: integral membrane protein",3,125,125,"core","core",NA,NA,"Core" +NA,6550398,6551406,"Not_core","OTCace",1,126,126,"resistance","resistance",3.7e-47,159.2,"PF00185.19" +"hit_1",6594925,6596854,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,127,127,"core","core",NA,NA,"Core" +"hit_2",6750130,6751231,"TIGR00157","TIGR00157: ribosome small subunit-dependent GTPase A",2,128,128,"core","core",NA,NA,"Core" +"hit_2",6865735,6867358,"TIGR01344","malate_syn_A: malate synthase A",2,129,129,"core","core",NA,NA,"Core" +NA,6897088,6898861,"Not_core","Biotin_lipoyl",1,130,130,"resistance","resistance",7.1e-17,59.9,"PF00364.17" +NA,6943672,6945265,"Not_core","Carboxyl_trans",1,131,131,"resistance","resistance",1.9e-191,635.7,"PF01039.17" +"hit_2",7301062,7303123,"TIGR00484","EF-G: translation elongation factor G",2,132,132,"core","core",NA,NA,"Core" +"hit_4",7324762,7326169,"TIGR03356","BGL: beta-galactosidase",5,133,133,"core","core",NA,NA,"Core" +"hit_2",7396675,7397611,"TIGR00534","OpcA: glucose-6-phosphate dehydrogenase assembly protein OpcA",2,134,134,"core","core",NA,NA,"Core" +"hit_2",7397607,7399386,"TIGR00871","zwf: glucose-6-phosphate dehydrogenase",2,135,135,"core","core",NA,NA,"Core" +"hit_2",7399382,7400528,"TIGR00876","tal_mycobact: transaldolase",2,136,136,"core","core",NA,NA,"Core" +"hit_2",7524432,7525587,"TIGR00612","ispG_gcpE: 4-hydroxy-3-methylbut-2-en-1-yl diphosphate synthase",2,137,137,"core","core",NA,NA,"Core" +"hit_2",7525612,7527583,"TIGR00204","dxs: 1-deoxy-D-xylulose-5-phosphate synthase",2,138,138,"core","core",NA,NA,"Core" +"hit_4",7560697,7561891,"SHMT","PF00464.15: Serine hydroxymethyltransferase",4,139,139,"core","core",NA,NA,"Core" +"hit_2",7580931,7582254,"TIGR01356","aroA: 3-phosphoshikimate 1-carboxyvinyltransferase",2,140,140,"core","core",NA,NA,"Core" +NA,7782660,7784535,"Not_core","ABC_efflux",1,141,141,"resistance","resistance",1.9e-80,269.8,"RF0007" +"hit_2",7832789,7834235,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,142,142,"core","core",NA,NA,"Core" +NA,7832789,7834235,"Not_core","Gp_dh_N",1,143,143,"resistance","resistance",4e-39,133,"PF00044.19" +"hit_1",7835927,7836392,"TIGR00494","crcB: protein CrcB",2,144,144,"core","core",NA,NA,"Core" +"hit_2",7836729,7837104,"TIGR00494","crcB: protein CrcB",2,145,145,"core","core",NA,NA,"Core" +"hit_2",7837143,7837980,"TIGR00753","undec_PP_bacA: undecaprenyl-diphosphatase UppP",2,146,146,"core","core",NA,NA,"Core" +NA,7913373,7914627,"Not_core","Biotin_lipoyl",1,147,147,"resistance","resistance",8.2e-23,78.9,"PF00364.17" +"hit_3",7914736,7917424,"TIGR00759","aceE: pyruvate dehydrogenase (acetyl-transferring), homodimeric type",3,148,148,"core","core",NA,NA,"Core" +"hit_2",7947902,7948901,"TIGR00465","ilvC: ketol-acid reductoisomerase",2,149,149,"core","core",NA,NA,"Core" +"hit_2",8041720,8043442,"TIGR02891","CtaD_CoxA: cytochrome c oxidase, subunit I",2,150,150,"core","core",NA,NA,"Core" +"hit_5",8077470,8078550,"TIGR01430","aden_deam: adenosine deaminase",5,151,151,"core","core",NA,NA,"Core" +"hit_2",8173118,8173721,"TIGR00057","TIGR00057: tRNA threonylcarbamoyl adenosine modification protein, Sua5/YciO/YrdC/YwlC family",2,152,152,"core","core",NA,NA,"Core" +"hit_3",8325356,8326355,"TIGR01534","GAPDH-I: glyceraldehyde-3-phosphate dehydrogenase, type I",3,153,153,"core","core",NA,NA,"Core" +NA,8325356,8326355,"Not_core","Gp_dh_N",1,154,154,"resistance","resistance",1.5e-53,179.9,"PF00044.19" +NA,8329971,8331888,"Not_core","HSP90",1,155,155,"resistance","resistance",9.9e-117,389.6,"PF00183.13" +"hit_2",8337388,8339560,"TIGR00575","dnlj: DNA ligase, NAD-dependent",2,156,156,"core","core",NA,NA,"Core" +NA,8345073,8346285,"Not_core","Chlor_Efflux_Pump",1,157,157,"resistance","resistance",1e-109,366.1,"RF0051" +"hit_5",8380678,8382118,"TIGR03356","BGL: beta-galactosidase",5,158,158,"core","core",NA,NA,"Core" +"hit_2",8466853,8468158,"TIGR01060","eno: phosphopyruvate hydratase",2,159,159,"core","core",NA,NA,"Core" +NA,8488517,8489696,"Not_core","Chlor_Efflux_Pump",1,160,160,"resistance","resistance",1.2e-124,415.2,"RF0051" +"hit_2",8641684,8642638,"TIGR00544","lgt: prolipoprotein diacylglyceryl transferase",2,161,161,"core","core",NA,NA,"Core" diff --git a/compare_biocircos.csv b/compare_biocircos.csv new file mode 100644 index 0000000..85ba2d0 --- /dev/null +++ b/compare_biocircos.csv @@ -0,0 +1,31 @@ +"Type","Cluster","Start","Stop","chromosome","Type2" +"eicosapentaenoic acid",1,103627,129988,"C","eicosapentaenoic acid" +"isorenieratene (12)",2,173767,199945,"C","isorenieratene (12)" +"lantibiotic",3,255310,281086,"C","lantibiotic" +"deoxysugar",4,395938,422413,"C","deoxysugar" +"coelichelin (5)",5,511034,535822,"C","coelichelin (5)" +"bacteriocin",6,796583,821798,"C","bacteriocin" +"thn (6), flaviolin (7)",7,1277624,1303748,"C","thn (6), flaviolin (7)" +"aromatic polyketide",8,1336563,1360694,"C","aromatic polyketide" +"5-hydroxyectoine (14)",9,1998467,2023979,"C","5-hydroxyectoine (14)" +"melanin",10,2944321,2968455,"C","melanin" +"desferrioxamine (13)",11,3035640,3062082,"C","desferrioxamine (13)" +"calcium-dep. antibiotic (3)",12,3520902,3544448,"C","calcium-dep. antibiotic (3)" +"actinorhodin (1)",13,5514248,5538808,"C","actinorhodin (1)" +"albaflavenone (11)",14,5681015,5707100,"C","albaflavenone (11)" +"gray spore pigment",15,5786087,5810752,"C","gray spore pigment" +"siderophore",16,6338948,6365546,"C","siderophore" +"prodiginine (2)",17,6432565,6458617,"C","prodiginine (2)" +"geosmin (9)",18,6666218,6693398,"C","geosmin (9)" +"γ-butyrolactone scb1 (15)",19,6891292,6917236,"C","γ-butyrolactone scb1 (15)" +"hexaketide",20,6907355,6925897,"C","hexaketide" +"dipeptide",21,7104901,7131289,"C","dipeptide" +"lanthionine-cont. peptide sapb",22,7419663,7447455,"C","lanthionine-cont. peptide sapb" +"hopene (4)",23,7516016,7541927,"C","hopene (4)" +"polyketide",24,7591451,7615411,"C","polyketide" +"lantibiotic",25,7692904,7716780,"C","lantibiotic" +"germicidin (8)",26,8027474,8051305,"C","germicidin (8)" +"aromatic polyketide",27,8494579,8518548,"C","aromatic polyketide" +"coelibactin",28,8506121,8529460,"C","coelibactin" +"2-methylisoborneol (10)",29,8537029,8563351,"C","2-methylisoborneol (10)" +"methylenomycin (18), 2-alkyl-4- (hydroxymethyl)furan-3- carboxylic acids (17)",30,232199,256675,"C","methylenomycin (18), 2-alkyl-4- (hydroxymethyl)furan-3- carboxylic acids (17)" diff --git a/data_all.csv b/data_all.csv index 891eb0f..fcc4912 100644 --- a/data_all.csv +++ b/data_all.csv @@ -1,73 +1,195 @@ "start","end","label","description" -76963,97013,"terpene","anti" -292967,312632,"lassopeptide","anti" -479882,586556,"t1pks","anti" -734502,778127,"nrps","anti" -958642,1026513,"pks-like__nrps-like__t1pks__nrps","anti" -1119154,1221388,"t1pks","anti" -1278447,1301717,"terpene","anti" -1419908,1429664,"melanin","anti" -1877241,1928997,"t1pks","anti" -2012322,2036507,"terpene","anti" -2437673,2449463,"ni-siderophore","anti" -2626185,2647331,"terpene","anti" -2662021,2682824,"lassopeptide","anti" -2692610,2703259,"ripp-like","anti" -2756600,2811733,"pks-like__t1pks__butyrolactone__other","anti" -2860465,2936136,"t1pks__t2pks__pks-like","anti" -3004667,3015882,"ni-siderophore","anti" -3449231,3645978,"t2pks__t1pks","anti" -3744874,3765721,"terpene","anti" -3781104,3799888,"terpene","anti" -3910606,3955803,"nrps-like__nrps","anti" -3961815,4011002,"nrps__nrps-like","anti" -4335458,4376544,"pks-like__butyrolactone","anti" -4480083,4560161,"nrps__ladderane__arylpolyene","anti" -4831754,4852768,"terpene","anti" -6379292,6389226,"ni-siderophore","anti" -6494928,6505495,"melanin","anti" -6787151,6800612,"aminopolycarboxylic-acid","anti" -6869385,6891957,"lassopeptide","anti" -7666128,7676533,"ectoine","anti" -7918325,7952201,"napaa","anti" -8471425,8512484,"t3pks","anti" -8534239,8577675,"t1pks","anti" -8727143,8740816,"ni-siderophore","anti" -8758094,8809766,"t1pks__hgle-ks","anti" -8926459,8953908,"ripp-like__lanthipeptide-class-iii","anti" -113393,117049,"pks","sempi" -445939,447112,"nrps","sempi" -498923,566951,"pks","sempi" -711684,712977,"nrps","sempi" -754795,760498,"nrps","sempi" -992757,1027894,"nrps-pks","sempi" -1137906,1202468,"pks","sempi" -1388383,1389679,"nrps","sempi" -1467175,1468306,"nrps","sempi" -1545011,1564316,"nrps-pks__nrps","sempi" -1660049,1661168,"nrps","sempi" -1898935,1909972,"pks","sempi" -1969587,1970775,"nrps","sempi" -2265039,2266389,"nrps","sempi" -2472591,2475428,"nrps","sempi" -2777475,2810877,"pks-nrps","sempi" -2879936,2900198,"pks","sempi" -3485523,3486988,"pks","sempi" -3536831,3626365,"pks","sempi" -3930317,3932054,"nrps","sempi" -3982960,3991128,"nrps","sempi" -4496984,4531106,"pks-nrps","sempi" -4708815,4773431,"nrps","sempi" -5161127,5162354,"nrps","sempi" -5614133,5615435,"nrps","sempi" -5858387,5859689,"nrps","sempi" -6095930,6096626,"nrps","sempi" -6333416,6334595,"nrps","sempi" -6727381,6728713,"nrps","sempi" -6923549,6924689,"nrps","sempi" -6991537,6993841,"pks","sempi" -7305917,7307246,"nrps","sempi" -7935449,7937069,"nrps","sempi" -8320414,8321701,"nrps","sempi" -8553652,8558053,"pks","sempi" -8777043,8787804,"pks","sempi" +86693,139654,"hgle-ks__t1pks","anti" +166700,191657,"terpene","anti" +246867,270397,"lanthipeptide-class-i","anti" +494259,544087,"nrps","anti" +791700,799942,"ripp-like","anti" +1258217,1297040,"t3pks","anti" +1995499,2005898,"ectoine","anti" +2939305,2949875,"melanin","anti" +3034430,3045603,"siderophore","anti" +3524827,3603907,"nrps","anti" +5496473,5567376,"t2pks","anti" +5671274,5691836,"terpene","anti" +5751944,5824487,"t2pks","anti" +6336090,6346443,"siderophore","anti" +6429574,6475291,"nrps-like__t1pks__prodigiosin","anti" +6632342,6643659,"ripp-like","anti" +6656903,6676224,"terpene","anti" +6842314,6855522,"siderophore","anti" +6881334,6951537,"t1pks__butyrolactone","anti" +7088263,7142447,"thioamide-nrp__nrps","anti" +7409741,7432456,"lanthipeptide-class-iii","anti" +7506307,7532117,"terpene","anti" +7570411,7618555,"pks-like__t1pks","anti" +7682906,7709360,"lanthipeptide-class-i","anti" +7973469,8047403,"other__t3pks","anti" +8269636,8290764,"indole","anti" +8475101,8548352,"t3pks__nrps__terpene","anti" +103627,129988,"eicosapentaenoic acid","compare" +173767,199945,"isorenieratene (12)","compare" +255310,281086,"lantibiotic","compare" +395938,422413,"deoxysugar","compare" +511034,535822,"coelichelin (5)","compare" +796583,821798,"bacteriocin","compare" +1277624,1303748,"thn (6), flaviolin (7)","compare" +1336563,1360694,"aromatic polyketide","compare" +1998467,2023979,"5-hydroxyectoine (14)","compare" +2944321,2968455,"melanin","compare" +3035640,3062082,"desferrioxamine (13)","compare" +3520902,3544448,"calcium-dep. antibiotic (3)","compare" +5514248,5538808,"actinorhodin (1)","compare" +5681015,5707100,"albaflavenone (11)","compare" +5786087,5810752,"gray spore pigment","compare" +6338948,6365546,"siderophore","compare" +6432565,6458617,"prodiginine (2)","compare" +6666218,6693398,"geosmin (9)","compare" +6891292,6917236,"γ-butyrolactone scb1 (15)","compare" +6907355,6925897,"hexaketide","compare" +7104901,7131289,"dipeptide","compare" +7419663,7447455,"lanthionine-cont. peptide sapb","compare" +7516016,7541927,"hopene (4)","compare" +7591451,7615411,"polyketide","compare" +7692904,7716780,"lantibiotic","compare" +8027474,8051305,"germicidin (8)","compare" +8494579,8518548,"aromatic polyketide","compare" +8506121,8529460,"coelibactin","compare" +8537029,8563351,"2-methylisoborneol (10)","compare" +232199,256675,"methylenomycin (18), 2-alkyl-4- (hydroxymethyl)furan-3- carboxylic acids (17)","compare" +170910,191657,"terpene","deep" +211747,220764,"pks","deep" +251763,262319,"ripp","deep" +320109,322255,"pks","deep" +332310,341318,"pks","deep" +370065,372478,"pks","deep" +431961,437224,"pks","deep" +586986,589546,"pks","deep" +815933,824058,"pks","deep" +1050594,1054583,"ripp","deep" +1275829,1279960,"terpene","deep" +1327990,1363153,"pks","deep" +1405030,1412625,"pks","deep" +2549403,2569910,"pks","deep" +2934113,2967589,"saccharide","deep" +3526136,3603907,"nrps","deep" +3782902,3788943,"ripp","deep" +4115027,4137513,"ripp","deep" +5055827,5059681,"pks","deep" +5510515,5536994,"pks","deep" +5765662,5797479,"pks","deep" +6552934,6557688,"pks","deep" +6889623,6949758,"pks","deep" +7078584,7118257,"nrps","deep" +7385659,7388675,"saccharide","deep" +7623284,7715706,"ripp","deep" +8228870,8235982,"terpene","deep" +8288250,8293976,"pks","deep" +8468384,8563058,"nrps","deep" +8610787,8635487,"pks","deep" +31460,41750,"pks","deep" +12285,133520,"polyketide","emerald" +172170,184797,"terpene","emerald" +202863,266263,"alkaloid","emerald" +395065,425157,"saccharide","emerald" +497375,536408,"nrp","emerald" +583522,601051,"nrp polyketide","emerald" +846084,853212,"ripp","emerald" +1241590,1282541,"nrp","emerald" +1332873,1367440,"polyketide","emerald" +1994053,2009395,"other","emerald" +2539582,2565877,"polyketide","emerald" +2615131,2639798,"ripp","emerald" +2792392,2812253,"saccharide","emerald" +2927749,2964702,"other","emerald" +3004801,3043723,"other","emerald" +3382380,3399072,"other","emerald" +3513073,3606342,"nrp","emerald" +4006935,4028808,"polyketide","emerald" +5502704,5539733,"polyketide","emerald" +5680218,5684576,"terpene","emerald" +5776741,5798684,"polyketide","emerald" +5927800,5941379,"ripp","emerald" +6334614,6343370,"other","emerald" +6433764,6470988,"nrp polyketide","emerald" +6830272,6877184,"polyketide","emerald" +6884252,6984001,"polyketide","emerald" +7084064,7146243,"nrp","emerald" +7508709,7540017,"terpene","emerald" +7581046,7606355,"polyketide","emerald" +7655814,7715820,"other","emerald" +8022244,8030491,"polyketide","emerald" +8490911,8620226,"polyketide","emerald" +103781,121371,"pks","gecco" +168705,177496,"terpene","gecco" +498683,533448,"nrps","gecco" +1335695,1361419,"pks","gecco" +2931776,2950345,"saccharide","gecco" +3524828,3602320,"nrps","gecco" +5515246,5536994,"pks","gecco" +5785753,5791297,"pks","gecco" +6432593,6467702,"pks","gecco" +6847315,6863275,"pks","gecco" +6889594,6948414,"pks","gecco" +7106284,7117874,"nrps","gecco" +7516017,7523399,"terpene","gecco" +7586410,7601569,"pks","gecco" +8258333,8283623,"ripp","gecco" +8493549,8542072,"nrps","gecco" +103780,128290,"pks","prism" +255310,261084,"class_i_lantipeptide","prism" +513988,533448,"nrps","prism" +586986,589546,"pks","prism" +2000499,2000898,"ectoine","prism" +2559339,2563090,"pks","prism" +2938688,2944875,"melanin","prism" +3038894,3040682,"nis_synthase","prism" +3513615,3585724,"nrps","prism" +5511270,5534546,"benzoisochromanequinone","prism" +5785752,5795837,"pentangular_polyphenol","prism" +6432592,6458318,"pks__nrps","prism" +6890527,6947423,"butyrolactone__pks","prism" +7108263,7120497,"nrps","prism" +7414295,7422622,"class_iii_iv_lantipeptide","prism" +7586409,7598555,"pks","prism" +7695015,7699626,"class_i_lantipeptide","prism" +8504460,8523749,"nrps","prism" +231675,251017,"butyrolactone__furan","prism" +246868,272469,"lanthipeptidea","ripp" +4886990,4940861,"linaridin","ripp" +7407798,7459926,"lanthipeptidec_d","ripp" +7681180,7705273,"lanthipeptidea","ripp" +256525,259687,"ripp","rre" +7696261,7699360,"ripp","rre" +106723,110434,"pks","sempi" +307598,308816,"nrps","sempi" +513997,524488,"nrps","sempi" +1405117,1405750,"nrps","sempi" +1477976,1479275,"nrps","sempi" +2290771,2292100,"nrps","sempi" +2559357,2561673,"pks","sempi" +2622623,2623751,"nrps","sempi" +2762807,2764220,"nrps","sempi" +2963180,2964527,"nrps","sempi" +3328396,3329098,"nrps","sempi" +3543364,3584771,"nrps","sempi" +3797561,3798752,"nrps","sempi" +3941523,3942822,"nrps","sempi" +4398632,4399859,"nrps","sempi" +4799973,4801182,"nrps","sempi" +4923207,4924557,"nrps","sempi" +5531212,5532682,"pks","sempi" +5786632,5788168,"pks","sempi" +6447994,6454855,"nrps-pks","sempi" +6558978,6560136,"nrps","sempi" +6804366,6807194,"nrps","sempi" +6901254,6931905,"pks","sempi" +7004464,7004725,"nrps","sempi" +7108290,7116050,"nrps","sempi" +7249252,7250602,"nrps","sempi" +7549538,7550897,"nrps","sempi" +7591514,7598516,"pks","sempi" +7734541,7735729,"nrps","sempi" +8053551,8054721,"nrps","sempi" +8140076,8141438,"nrps","sempi" +8282564,8283500,"nrps","sempi" +8504751,8523677,"nrps","sempi" diff --git a/deep_biocircos.csv b/deep_biocircos.csv new file mode 100644 index 0000000..a0e8e4f --- /dev/null +++ b/deep_biocircos.csv @@ -0,0 +1,32 @@ +"sequence_id","detector","detector_version","detector_label","bgc_candidate_id","nucl_start","nucl_end","nucl_length","num_proteins","num_domains","num_bio_domains","deepbgc_score","product_activity","antibacterial","cytotoxic","inhibitor","antifungal","product_class","alkaloid","other","ripp","saccharide","terpene","protein_ids","bio_pfam_ids","pfam_ids","pks","nrps","chromosome","Start","Stop","ID","Cluster","score","Cluster_type","score_a","score_d","score_c","Type","Type2" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_170910-191657.1",170910,191657,20747,19,75,11,0.66526,"cytotoxic",0.23,0.63,0.12,0.08,"terpene",0.09,0.05,0.01,0.09,0.71,"NC_003888.3_NC_003888.3_149;NC_003888.3_NC_003888.3_150;NC_003888.3_NC_003888.3_151;NC_003888.3_NC_003888.3_152;NC_003888.3_NC_003888.3_153;NC_003888.3_NC_003888.3_154;NC_003888.3_NC_003888.3_155;NC_003888.3_NC_003888.3_156;NC_003888.3_NC_003888.3_157;NC_003888.3_NC_003888.3_158;NC_003888.3_NC_003888.3_159;NC_003888.3_NC_003888.3_160;NC_003888.3_NC_003888.3_161;NC_003888.3_NC_003888.3_162;NC_003888.3_NC_003888.3_163;NC_003888.3_NC_003888.3_164;NC_003888.3_NC_003888.3_165;NC_003888.3_NC_003888.3_166;NC_003888.3_NC_003888.3_167","PF01266;PF08242;PF00494;PF08240;PF01494;PF08241;PF00348;PF02737;PF00107;PF00355;PF01593","PF11066;PF03441;PF04244;PF00348;PF13738;PF01266;PF01946;PF03486;PF00070;PF07992;PF12831;PF00890;PF13450;PF01593;PF00494;PF00355;PF01593;PF01266;PF13450;PF12831;PF00890;PF03486;PF00070;PF01946;PF07992;PF01262;PF01134;PF02737;PF01494;PF01209;PF13489;PF13847;PF13578;PF08241;PF08242;PF13649;PF05175;PF05834;PF07992;PF01266;PF00890;PF13450;PF01593;PF01266;PF13450;PF01946;PF12831;PF03486;PF00890;PF05834;PF07992;PF01494;PF01134;PF02310;PF02607;PF13411;PF12728;PF13518;PF00376;PF13384;PF01527;PF04542;PF08281;PF04545;PF13412;PF14344;PF10099;PF12900;PF00582;PF13602;PF00107;PF01262;PF08240;PF00582;PF07681",0.11,0.02,"D",170910,191657,6,6,0.71,"terpene",0.63,0.66526,0.71,"terpene","terpene" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_211747-220764.1",211747,220764,9017,10,16,4,0.74452,"antibacterial",0.67,0.13,0.25,0.24,"pks",0.02,0.12,0.05,0.04,0.16,"NC_003888.3_NC_003888.3_183;NC_003888.3_NC_003888.3_184;NC_003888.3_NC_003888.3_185;NC_003888.3_NC_003888.3_186;NC_003888.3_NC_003888.3_187;NC_003888.3_NC_003888.3_188;NC_003888.3_NC_003888.3_189;NC_003888.3_NC_003888.3_190;NC_003888.3_NC_003888.3_191;NC_003888.3_NC_003888.3_192","PF00583;PF00106;PF01370;PF08659","PF02613;PF02665;PF12680;PF14534;PF07366;PF13586;PF13302;PF00583;PF14027;PF02909;PF08659;PF01370;PF00106;PF13561;PF13460;PF00440",0.61,0.05,"D",211747,220764,8,8,0.61,"pks",0.67,0.74452,0.61,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_251763-262319.1",251763,262319,10556,9,20,6,0.71258,"antibacterial",0.78,0.11,0.08,0.15,"ripp",0.01,0.12,0.53,0.04,0.01,"NC_003888.3_NC_003888.3_224;NC_003888.3_NC_003888.3_225;NC_003888.3_NC_003888.3_226;NC_003888.3_NC_003888.3_227;NC_003888.3_NC_003888.3_228;NC_003888.3_NC_003888.3_229;NC_003888.3_NC_003888.3_230;NC_003888.3_NC_003888.3_231;NC_003888.3_NC_003888.3_232","PF00903;PF00975;PF01408;PF05147;PF00561;PF04738","PF01408;PF01978;PF12802;PF01047;PF13412;PF09339;PF00392;PF13545;PF00903;PF12833;PF00561;PF00975;PF12697;PF12146;PF12695;PF07819;PF04738;PF14028;PF05147;PF00528",0.17,0.15,"D",251763,262319,11,11,0.53,"ripp",0.78,0.71258,0.53,"ripp","ripp" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_320109-322255.1",320109,322255,2146,2,5,1,0.56163,"antibacterial",0.54,0.1,0.38,0.14,"pks",0.04,0.12,0.12,0,0.08,"NC_003888.3_NC_003888.3_279;NC_003888.3_NC_003888.3_280","PF00107","PF00107;PF13602;PF00135;PF07859;PF00326",0.57,0.14,"D",320109,322255,13,13,0.57,"pks",0.54,0.56163,0.57,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_332310-341318.1",332310,341318,9008,7,15,3,0.5871,"antibacterial",0.81,0.07,0.15,0.33,"pks",0.01,0.06,0.02,0,0.14,"NC_003888.3_NC_003888.3_290;NC_003888.3_NC_003888.3_291;NC_003888.3_NC_003888.3_292;NC_003888.3_NC_003888.3_293;NC_003888.3_NC_003888.3_294;NC_003888.3_NC_003888.3_295;NC_003888.3_NC_003888.3_296","PF00106;PF01370;PF08659","PF00106;PF08659;PF01370;PF13561;PF13460;PF00440;PF13022;PF16859;PF03055;PF10518;PF14200;PF00754;PF03435;PF13460;PF00440",0.76,0.03,"D",332310,341318,15,15,0.76,"pks",0.81,0.5871,0.76,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_370065-372478.1",370065,372478,2413,3,9,4,0.57281,"antibacterial",0.76,0.04,0.19,0.36,"pks",0.01,0.01,0.02,0.03,0.02,"NC_003888.3_NC_003888.3_323;NC_003888.3_NC_003888.3_324;NC_003888.3_NC_003888.3_325","PF02737;PF00106;PF01370;PF08659","PF00106;PF01370;PF08659;PF03435;PF05368;PF02737;PF13561;PF14486;PF06912",0.92,0.03,"D",370065,372478,20,20,0.92,"pks",0.76,0.57281,0.92,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_431961-437224.1",431961,437224,5263,7,11,2,0.66524,"inhibitor",0.31,0.09,0.53,0.1,"pks",0,0.17,0.02,0,0.01,"NC_003888.3_NC_003888.3_371;NC_003888.3_NC_003888.3_372;NC_003888.3_NC_003888.3_373;NC_003888.3_NC_003888.3_374;NC_003888.3_NC_003888.3_375;NC_003888.3_NC_003888.3_376;NC_003888.3_NC_003888.3_377","PF00107;PF08240","PF05719;PF12680;PF14534;PF08281;PF04542;PF06197;PF08894;PF01872;PF08240;PF00107;PF13602",0.69,0.18,"D",431961,437224,22,22,0.69,"pks",0.53,0.66524,0.69,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_586986-589546.1",586986,589546,2560,3,5,4,0.65291,"antibacterial",0.6,0.07,0.26,0.2,"pks",0,0.03,0,0,0.17,"NC_003888.3_NC_003888.3_506;NC_003888.3_NC_003888.3_507;NC_003888.3_NC_003888.3_508","PF00698;PF02801;PF00108;PF00109","PF00698;PF02801;PF00109;PF00108;PF00550",0.77,0.35,"D",586986,589546,30,30,0.77,"pks",0.6,0.65291,0.77,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_815933-824058.1",815933,824058,8125,9,20,2,0.76996,"antibacterial",0.66,0.05,0.06,0.08,"pks",0.12,0.12,0.1,0.02,0.31,"NC_003888.3_NC_003888.3_728;NC_003888.3_NC_003888.3_729;NC_003888.3_NC_003888.3_730;NC_003888.3_NC_003888.3_731;NC_003888.3_NC_003888.3_732;NC_003888.3_NC_003888.3_733;NC_003888.3_NC_003888.3_734;NC_003888.3_NC_003888.3_735;NC_003888.3_NC_003888.3_736","PF00067;PF00248","PF00989;PF13188;PF08448;PF13426;PF13185;PF01590;PF07228;PF13581;PF14016;PF00248;PF02441;PF07080;PF12680;PF14534;PF00440;PF06902;PF13459;PF13370;PF00067;PF04075",0.51,0,"D",815933,824058,38,38,0.51,"pks",0.66,0.76996,0.51,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_1050594-1054583.1",1050594,1054583,3989,4,26,2,0.68095,"antibacterial",0.54,0.42,0.15,0.02,"ripp",0.01,0.15,0.66,0.01,0.04,"NC_003888.3_NC_003888.3_956;NC_003888.3_NC_003888.3_957;NC_003888.3_NC_003888.3_958;NC_003888.3_NC_003888.3_959","PF08241;PF08242","PF02475;PF05401;PF02353;PF13489;PF05724;PF01135;PF01728;PF05175;PF01209;PF13847;PF03848;PF00398;PF13649;PF08241;PF08242;PF01497;PF01032;PF00950;PF00005;PF13604;PF13191;PF13555;PF02463;PF13175;PF13304;PF13476",0.07,0.07,"D",1050594,1054583,42,42,0.66,"ripp",0.54,0.68095,0.66,"ripp","ripp" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_1275829-1279960.1",1275829,1279960,4131,4,7,4,0.63375,"antibacterial",0.61,0.02,0.04,0.21,"terpene",0,0.15,0,0.01,0.77,"NC_003888.3_NC_003888.3_1162;NC_003888.3_NC_003888.3_1163;NC_003888.3_NC_003888.3_1164;NC_003888.3_NC_003888.3_1165","PF08545;PF00171;PF00067;PF08541","PF00171;PF00195;PF08392;PF08545;PF02797;PF08541;PF00067",0.1,0.04,"D",1275829,1279960,45,45,0.77,"terpene",0.61,0.63375,0.77,"terpene","terpene" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_1327990-1363153.1",1327990,1363153,35163,34,86,17,0.839,"antibacterial",0.66,0.4,0.12,0.04,"pks",0,0.12,0.09,0.1,0.05,"NC_003888.3_NC_003888.3_1216;NC_003888.3_NC_003888.3_1217;NC_003888.3_NC_003888.3_1218;NC_003888.3_NC_003888.3_1219;NC_003888.3_NC_003888.3_1220;NC_003888.3_NC_003888.3_1221;NC_003888.3_NC_003888.3_1222;NC_003888.3_NC_003888.3_1223;NC_003888.3_NC_003888.3_1224;NC_003888.3_NC_003888.3_1225;NC_003888.3_NC_003888.3_1226;NC_003888.3_NC_003888.3_1227;NC_003888.3_NC_003888.3_1228;NC_003888.3_NC_003888.3_1229;NC_003888.3_NC_003888.3_1230;NC_003888.3_NC_003888.3_1231;NC_003888.3_NC_003888.3_1232;NC_003888.3_NC_003888.3_1233;NC_003888.3_NC_003888.3_1234;NC_003888.3_NC_003888.3_1235;NC_003888.3_NC_003888.3_1236;NC_003888.3_NC_003888.3_1237;NC_003888.3_NC_003888.3_1238;NC_003888.3_NC_003888.3_1239;NC_003888.3_NC_003888.3_1240;NC_003888.3_NC_003888.3_1241;NC_003888.3_NC_003888.3_1242;NC_003888.3_NC_003888.3_1243;NC_003888.3_NC_003888.3_1244;NC_003888.3_NC_003888.3_1245;NC_003888.3_NC_003888.3_1246;NC_003888.3_NC_003888.3_1247;NC_003888.3_NC_003888.3_1248;NC_003888.3_NC_003888.3_1249","PF01266;PF02801;PF01636;PF08545;PF00202;PF04321;PF02770;PF00155;PF01494;PF00108;PF08541;PF00109;PF07993;PF04820;PF01370;PF03364;PF00561","PF12679;PF12730;PF13304;PF00005;PF13555;PF07730;PF00072;PF04545;PF08281;PF00196;PF01047;PF13463;PF12802;PF09339;PF01978;PF00480;PF07702;PF00392;PF13545;PF12680;PF14534;PF08281;PF04545;PF04542;PF00561;PF12697;PF12146;PF12697;PF12146;PF01674;PF00561;PF05057;PF02801;PF00109;PF00108;PF00550;PF00198;PF00364;PF02780;PF02779;PF00676;PF00456;PF02775;PF13292;PF08541;PF08545;PF00108;PF10501;PF00550;PF07993;PF01370;PF01966;PF07992;PF01494;PF13450;PF04820;PF01266;PF04542;PF08281;PF03109;PF01636;PF01163;PF04072;PF03007;PF01266;PF00890;PF01946;PF13450;PF13454;PF05834;PF07992;PF01613;PF10604;PF03364;PF00202;PF07993;PF01370;PF13460;PF04321;PF02770;PF09924;PF14079;PF00392;PF00155;PF16655;PF09423",0.57,0.23,"D",1327990,1363153,50,50,0.57,"pks",0.66,0.839,0.57,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_1405030-1412625.1",1405030,1412625,7595,6,13,4,0.56512,"antibacterial",0.61,0.11,0.19,0.16,"pks",0.01,0.22,0.04,0.01,0.03,"NC_003888.3_NC_003888.3_1290;NC_003888.3_NC_003888.3_1291;NC_003888.3_NC_003888.3_1292;NC_003888.3_NC_003888.3_1293;NC_003888.3_NC_003888.3_1294;NC_003888.3_NC_003888.3_1295","PF00106;PF00501;PF01370;PF08659","PF00501;PF13191;PF00931;PF13401;PF00196;PF08281;PF08281;PF10101;PF10935;PF13561;PF00106;PF08659;PF01370",0.6,0.13,"D",1405030,1412625,51,51,0.6,"pks",0.61,0.56512,0.6,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_2549403-2569910.1",2549403,2569910,20507,19,36,8,0.83648,"antibacterial",0.52,0.24,0.19,0.25,"pks",0,0.14,0.02,0.01,0.09,"NC_003888.3_NC_003888.3_2337;NC_003888.3_NC_003888.3_2338;NC_003888.3_NC_003888.3_2339;NC_003888.3_NC_003888.3_2340;NC_003888.3_NC_003888.3_2341;NC_003888.3_NC_003888.3_2342;NC_003888.3_NC_003888.3_2343;NC_003888.3_NC_003888.3_2344;NC_003888.3_NC_003888.3_2345;NC_003888.3_NC_003888.3_2346;NC_003888.3_NC_003888.3_2347;NC_003888.3_NC_003888.3_2348;NC_003888.3_NC_003888.3_2349;NC_003888.3_NC_003888.3_2350;NC_003888.3_NC_003888.3_2351;NC_003888.3_NC_003888.3_2352;NC_003888.3_NC_003888.3_2353;NC_003888.3_NC_003888.3_2354;NC_003888.3_NC_003888.3_2355","PF02801;PF08545;PF00108;PF08541;PF00107;PF00698;PF00109;PF00583","PF13302;PF00583;PF13508;PF13527;PF08445;PF13673;PF00144;PF13560;PF04149;PF00652;PF14200;PF03498;PF14440;PF02678;PF07883;PF13556;PF00698;PF00195;PF00108;PF08392;PF08545;PF08541;PF00550;PF14573;PF00109;PF00108;PF02801;PF11343;PF00657;PF13472;PF01263;PF07264;PF02566;PF13602;PF00107;PF16884",0.69,0.23,"D",2549403,2569910,64,64,0.69,"pks",0.52,0.83648,0.69,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_2934113-2967589.1",2934113,2967589,33476,32,50,6,0.94003,"antibacterial",0.55,0.04,0.18,0.17,"saccharide",0.02,0.17,0.04,0.66,0.01,"NC_003888.3_NC_003888.3_2652;NC_003888.3_NC_003888.3_2653;NC_003888.3_NC_003888.3_2654;NC_003888.3_NC_003888.3_2655;NC_003888.3_NC_003888.3_2656;NC_003888.3_NC_003888.3_2657;NC_003888.3_NC_003888.3_2658;NC_003888.3_NC_003888.3_2659;NC_003888.3_NC_003888.3_2660;NC_003888.3_NC_003888.3_2661;NC_003888.3_NC_003888.3_2662;NC_003888.3_NC_003888.3_2663;NC_003888.3_NC_003888.3_2664;NC_003888.3_NC_003888.3_2665;NC_003888.3_NC_003888.3_2666;NC_003888.3_NC_003888.3_2667;NC_003888.3_NC_003888.3_2668;NC_003888.3_NC_003888.3_2669;NC_003888.3_NC_003888.3_2670;NC_003888.3_NC_003888.3_2671;NC_003888.3_NC_003888.3_2672;NC_003888.3_NC_003888.3_2673;NC_003888.3_NC_003888.3_2674;NC_003888.3_NC_003888.3_2675;NC_003888.3_NC_003888.3_2676;NC_003888.3_NC_003888.3_2677;NC_003888.3_NC_003888.3_2678;NC_003888.3_NC_003888.3_2679;NC_003888.3_NC_003888.3_2680;NC_003888.3_NC_003888.3_2681;NC_003888.3_NC_003888.3_2682;NC_003888.3_NC_003888.3_2683","PF02706;PF04932;PF02397;PF02668;PF00534;PF00501","PF07690;PF12832;PF06813;PF13360;PF00400;PF12894;PF02668;PF03781;PF00389;PF02826;PF03446;PF09860;PF08843;PF03777;PF00264;PF06236;PF03205;PF03777;PF13439;PF13579;PF13477;PF00534;PF13692;PF13524;PF13727;PF02397;PF04932;PF03023;PF01554;PF14667;PF01522;PF13439;PF13579;PF13477;PF00534;PF13692;PF02706;PF13480;PF02156;PF09849;PF03777;PF03777;PF00501;PF12034;PF00092;PF13768;PF13519;PF12450;PF12679;PF12730",0.02,0.08,"D",2934113,2967589,66,66,0.66,"saccharide",0.55,0.94003,0.66,"saccharide","saccharide" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_3526136-3603907.1",3526136,3603907,77771,35,87,19,0.94701,"antibacterial",0.74,0.25,0.08,0.1,"nrps",0,0.04,0,0,0.01,"NC_003888.3_NC_003888.3_3169;NC_003888.3_NC_003888.3_3170;NC_003888.3_NC_003888.3_3171;NC_003888.3_NC_003888.3_3172;NC_003888.3_NC_003888.3_3173;NC_003888.3_NC_003888.3_3174;NC_003888.3_NC_003888.3_3175;NC_003888.3_NC_003888.3_3176;NC_003888.3_NC_003888.3_3177;NC_003888.3_NC_003888.3_3178;NC_003888.3_NC_003888.3_3179;NC_003888.3_NC_003888.3_3180;NC_003888.3_NC_003888.3_3181;NC_003888.3_NC_003888.3_3182;NC_003888.3_NC_003888.3_3183;NC_003888.3_NC_003888.3_3184;NC_003888.3_NC_003888.3_3185;NC_003888.3_NC_003888.3_3186;NC_003888.3_NC_003888.3_3187;NC_003888.3_NC_003888.3_3188;NC_003888.3_NC_003888.3_3189;NC_003888.3_NC_003888.3_3190;NC_003888.3_NC_003888.3_3191;NC_003888.3_NC_003888.3_3192;NC_003888.3_NC_003888.3_3193;NC_003888.3_NC_003888.3_3194;NC_003888.3_NC_003888.3_3195;NC_003888.3_NC_003888.3_3196;NC_003888.3_NC_003888.3_3197;NC_003888.3_NC_003888.3_3198;NC_003888.3_NC_003888.3_3199;NC_003888.3_NC_003888.3_3200;NC_003888.3_NC_003888.3_3201;NC_003888.3_NC_003888.3_3202;NC_003888.3_NC_003888.3_3203","PF02770;PF00441;PF00501;PF00155;PF08545;PF08028;PF00903;PF00975;PF01494;PF00668;PF01266;PF01636;PF02801;PF00702;PF08541;PF02668;PF00109;PF04820;PF00561","PF00122;PF00702;PF08282;PF00689;PF00486;PF03704;PF13191;PF00931;PF13401;PF03621;PF03403;PF02153;PF01266;PF09056;PF12679;PF12730;PF13304;PF00005;PF13476;PF13555;PF07730;PF00072;PF00196;PF08281;PF14493;PF00155;PF12897;PF01070;PF01645;PF00977;PF00478;PF03060;PF00903;PF13669;PF14696;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00668;PF00501;PF13193;PF00550;PF00975;PF12697;PF00561;PF00561;PF12146;PF12697;PF01636;PF02463;PF00005;PF13555;PF00664;PF02668;PF01663;PF01261;PF02126;PF01026;PF01261;PF01040;PF07994;PF01658;PF01494;PF05834;PF04820;PF00070;PF07992;PF00890;PF01266;PF12831;PF13450;PF01134;PF08541;PF08545;PF00441;PF08028;PF02770;PF02801;PF00109;PF00550;PF00589;PF14659",0.14,0.9,"D",3526136,3603907,70,70,0.9,"nrps",0.74,0.94701,0.9,"nrps","nrps" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_3782902-3788943.1",3782902,3788943,6041,7,14,1,0.63217,"antibacterial",0.55,0.17,0.2,0.16,"ripp",0,0.03,0.92,0,0,"NC_003888.3_NC_003888.3_3369;NC_003888.3_NC_003888.3_3370;NC_003888.3_NC_003888.3_3371;NC_003888.3_NC_003888.3_3372;NC_003888.3_NC_003888.3_3373;NC_003888.3_NC_003888.3_3374;NC_003888.3_NC_003888.3_3375","PF00171","PF12698;PF01061;PF13732;PF02702;PF13304;PF00005;PF13191;PF13555;PF03551;PF00171;PF13560;PF12844;PF13581;PF04149",0.04,0.01,"D",3782902,3788943,72,72,0.92,"ripp",0.55,0.63217,0.92,"ripp","ripp" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_4115027-4137513.1",4115027,4137513,22486,20,36,3,0.90015,"antibacterial",0.62,0.15,0.09,0.11,"ripp",0,0.14,0.58,0.02,0.09,"NC_003888.3_NC_003888.3_3686;NC_003888.3_NC_003888.3_3687;NC_003888.3_NC_003888.3_3688;NC_003888.3_NC_003888.3_3689;NC_003888.3_NC_003888.3_3690;NC_003888.3_NC_003888.3_3691;NC_003888.3_NC_003888.3_3692;NC_003888.3_NC_003888.3_3693;NC_003888.3_NC_003888.3_3694;NC_003888.3_NC_003888.3_3695;NC_003888.3_NC_003888.3_3696;NC_003888.3_NC_003888.3_3697;NC_003888.3_NC_003888.3_3698;NC_003888.3_NC_003888.3_3699;NC_003888.3_NC_003888.3_3700;NC_003888.3_NC_003888.3_3701;NC_003888.3_NC_003888.3_3702;NC_003888.3_NC_003888.3_3703;NC_003888.3_NC_003888.3_3704;NC_003888.3_NC_003888.3_3705","PF08241;PF08242;PF01757","PF05175;PF13489;PF07021;PF13847;PF13649;PF08241;PF08242;PF05724;PF00174;PF13231;PF00313;PF02518;PF07730;PF13796;PF00005;PF13555;PF13191;PF13401;PF13304;PF02687;PF12704;PF02687;PF12704;PF00005;PF13304;PF13555;PF00196;PF08281;PF04545;PF00072;PF07730;PF00487;PF01757;PF06259;PF10756;PF02342",0.14,0.08,"D",4115027,4137513,78,78,0.58,"ripp",0.62,0.90015,0.58,"ripp","ripp" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_5055827-5059681.1",5055827,5059681,3854,2,10,2,0.6628,"antibacterial",0.59,0.18,0.32,0.32,"pks",0.01,0.2,0.05,0.02,0.04,"NC_003888.3_NC_003888.3_4566;NC_003888.3_NC_003888.3_4567","PF00107;PF01370","PF13676;PF00931;PF13401;PF13424;PF13374;PF13460;PF05368;PF01073;PF01370;PF00107",0.53,0.36,"D",5055827,5059681,94,94,0.53,"pks",0.59,0.6628,0.53,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_5510515-5536994.1",5510515,5536994,26479,28,70,17,0.86345,"antibacterial",0.56,0.41,0.15,0.2,"pks",0.02,0.05,0,0.05,0.01,"NC_003888.3_NC_003888.3_4999;NC_003888.3_NC_003888.3_5000;NC_003888.3_NC_003888.3_5001;NC_003888.3_NC_003888.3_5002;NC_003888.3_NC_003888.3_5003;NC_003888.3_NC_003888.3_5004;NC_003888.3_NC_003888.3_5005;NC_003888.3_NC_003888.3_5006;NC_003888.3_NC_003888.3_5007;NC_003888.3_NC_003888.3_5008;NC_003888.3_NC_003888.3_5009;NC_003888.3_NC_003888.3_5010;NC_003888.3_NC_003888.3_5011;NC_003888.3_NC_003888.3_5012;NC_003888.3_NC_003888.3_5013;NC_003888.3_NC_003888.3_5014;NC_003888.3_NC_003888.3_5015;NC_003888.3_NC_003888.3_5016;NC_003888.3_NC_003888.3_5017;NC_003888.3_NC_003888.3_5018;NC_003888.3_NC_003888.3_5019;NC_003888.3_NC_003888.3_5020;NC_003888.3_NC_003888.3_5021;NC_003888.3_NC_003888.3_5022;NC_003888.3_NC_003888.3_5023;NC_003888.3_NC_003888.3_5024;NC_003888.3_NC_003888.3_5025;NC_003888.3_NC_003888.3_5026","PF02801;PF08242;PF00106;PF02770;PF08240;PF00725;PF08659;PF08028;PF00109;PF00441;PF08241;PF01243;PF03992;PF02737;PF00107;PF01370;PF03364","PF00440;PF16884;PF08240;PF00107;PF13602;PF00246;PF13577;PF12680;PF02737;PF00725;PF08240;PF00107;PF13602;PF08240;PF00107;PF13602;PF07690;PF00083;PF05977;PF13347;PF01243;PF12900;PF05368;PF01370;PF16363;PF13460;PF02770;PF08028;PF00441;PF03992;PF02909;PF00440;PF07690;PF06779;PF00083;PF03176;PF12349;PF00486;PF03704;PF13561;PF00106;PF08659;PF01370;PF00109;PF02801;PF00109;PF02801;PF00550;PF10604;PF03364;PF00753;PF01613;PF04978;PF12867;PF13489;PF13847;PF01209;PF05175;PF08241;PF13578;PF08242;PF13649;PF03848;PF05724;PF13560;PF12844;PF13443;PF13413;PF01381;PF07883",0.9,0.09,"D",5510515,5536994,97,97,0.9,"pks",0.56,0.86345,0.9,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_5765662-5797479.1",5765662,5797479,31817,37,60,9,0.74897,"antibacterial",0.58,0.46,0.18,0.14,"pks",0.02,0.07,0.04,0.02,0.02,"NC_003888.3_NC_003888.3_5224;NC_003888.3_NC_003888.3_5225;NC_003888.3_NC_003888.3_5226;NC_003888.3_NC_003888.3_5227;NC_003888.3_NC_003888.3_5228;NC_003888.3_NC_003888.3_5229;NC_003888.3_NC_003888.3_5230;NC_003888.3_NC_003888.3_5231;NC_003888.3_NC_003888.3_5232;NC_003888.3_NC_003888.3_5233;NC_003888.3_NC_003888.3_5234;NC_003888.3_NC_003888.3_5235;NC_003888.3_NC_003888.3_5236;NC_003888.3_NC_003888.3_5237;NC_003888.3_NC_003888.3_5238;NC_003888.3_NC_003888.3_5239;NC_003888.3_NC_003888.3_5240;NC_003888.3_NC_003888.3_5241;NC_003888.3_NC_003888.3_5242;NC_003888.3_NC_003888.3_5243;NC_003888.3_NC_003888.3_5244;NC_003888.3_NC_003888.3_5245;NC_003888.3_NC_003888.3_5246;NC_003888.3_NC_003888.3_5247;NC_003888.3_NC_003888.3_5248;NC_003888.3_NC_003888.3_5249;NC_003888.3_NC_003888.3_5250;NC_003888.3_NC_003888.3_5251;NC_003888.3_NC_003888.3_5252;NC_003888.3_NC_003888.3_5253;NC_003888.3_NC_003888.3_5254;NC_003888.3_NC_003888.3_5255;NC_003888.3_NC_003888.3_5256;NC_003888.3_NC_003888.3_5257;NC_003888.3_NC_003888.3_5258;NC_003888.3_NC_003888.3_5259;NC_003888.3_NC_003888.3_5260","PF01266;PF02801;PF01494;PF00108;PF00109;PF01243;PF03992;PF01050;PF03364","PF05331;PF03029;PF07992;PF01494;PF00070;PF00877;PF07813;PF13560;PF00440;PF09339;PF13340;PF01609;PF13359;PF13612;PF13586;PF11583;PF11695;PF00905;PF01098;PF08239;PF02518;PF00512;PF00672;PF00782;PF05706;PF08378;PF02735;PF13628;PF01243;PF16242;PF11350;PF04673;PF10604;PF03364;PF00550;PF02801;PF00109;PF02801;PF00109;PF00108;PF12852;PF11699;PF07883;PF01050;PF02311;PF04486;PF03992;PF01494;PF01266;PF01734;PF01037;PF13412;PF12802;PF09339;PF13404;PF00881;PF13613;PF04545;PF01609;PF13359",0.84,0.07,"D",5765662,5797479,100,100,0.84,"pks",0.58,0.74897,0.84,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_6552934-6557688.1",6552934,6557688,4754,4,9,2,0.58364,"antibacterial",0.67,0.16,0.2,0.24,"pks",0.01,0.3,0.06,0.01,0.03,"NC_003888.3_NC_003888.3_5907;NC_003888.3_NC_003888.3_5908;NC_003888.3_NC_003888.3_5909;NC_003888.3_NC_003888.3_5910","PF00378;PF01494","PF13581;PF00378;PF16113;PF01494;PF07992;PF13450;PF00724;PF00685;PF13469",0.61,0.02,"D",6552934,6557688,108,108,0.61,"pks",0.67,0.58364,0.61,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_6889623-6949758.1",6889623,6949758,60135,26,107,23,0.84593,"antibacterial",0.67,0.3,0.06,0.09,"pks",0,0.01,0.02,0.04,0.01,"NC_003888.3_NC_003888.3_6196;NC_003888.3_NC_003888.3_6197;NC_003888.3_NC_003888.3_6198;NC_003888.3_NC_003888.3_6199;NC_003888.3_NC_003888.3_6200;NC_003888.3_NC_003888.3_6201;NC_003888.3_NC_003888.3_6202;NC_003888.3_NC_003888.3_6203;NC_003888.3_NC_003888.3_6204;NC_003888.3_NC_003888.3_6205;NC_003888.3_NC_003888.3_6206;NC_003888.3_NC_003888.3_6207;NC_003888.3_NC_003888.3_6208;NC_003888.3_NC_003888.3_6209;NC_003888.3_NC_003888.3_6210;NC_003888.3_NC_003888.3_6211;NC_003888.3_NC_003888.3_6212;NC_003888.3_NC_003888.3_6213;NC_003888.3_NC_003888.3_6214;NC_003888.3_NC_003888.3_6215;NC_003888.3_NC_003888.3_6216;NC_003888.3_NC_003888.3_6217;NC_003888.3_NC_003888.3_6218;NC_003888.3_NC_003888.3_6219;NC_003888.3_NC_003888.3_6220;NC_003888.3_NC_003888.3_6221","PF00106;PF02786;PF00108;PF00289;PF00698;PF08990;PF01370;PF00202;PF03756;PF01039;PF07993;PF02719;PF00975;PF01494;PF02737;PF02785;PF04321;PF01266;PF02801;PF08659;PF00109;PF04820;PF00561","PF00106;PF08659;PF13561;PF00440;PF03756;PF05368;PF03435;PF01370;PF13460;PF02518;PF13581;PF07730;PF02775;PF17147;PF01855;PF02776;PF01558;PF00364;PF13533;PF02785;PF02786;PF15632;PF02222;PF07478;PF00289;PF10518;PF01565;PF08031;PF07993;PF01370;PF16363;PF04321;PF01073;PF00550;PF08659;PF00106;PF13561;PF14765;PF00698;PF16197;PF02801;PF00109;PF00108;PF08990;PF00698;PF00109;PF00108;PF00550;PF08659;PF00106;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF08990;PF00550;PF08659;PF01370;PF02719;PF07993;PF14765;PF16197;PF02801;PF00109;PF00108;PF00106;PF00698;PF01494;PF12831;PF00890;PF00561;PF12697;PF12146;PF07690;PF12832;PF03209;PF05977;PF00083;PF13347;PF00202;PF00486;PF03704;PF10518;PF01565;PF08031;PF13561;PF00106;PF08659;PF13460;PF05368;PF01039;PF13822;PF00440;PF00975;PF12697;PF03959;PF00486;PF03704;PF01266;PF01262;PF07992;PF02737;PF00890;PF13450;PF04820",0.97,0.08,"D",6889623,6949758,117,117,0.97,"pks",0.67,0.84593,0.97,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_7078584-7118257.1",7078584,7118257,39673,25,58,6,0.86082,"antibacterial",0.66,0.24,0.15,0.14,"nrps",0.02,0.14,0.01,0.03,0,"NC_003888.3_NC_003888.3_6336;NC_003888.3_NC_003888.3_6337;NC_003888.3_NC_003888.3_6338;NC_003888.3_NC_003888.3_6339;NC_003888.3_NC_003888.3_6340;NC_003888.3_NC_003888.3_6341;NC_003888.3_NC_003888.3_6342;NC_003888.3_NC_003888.3_6343;NC_003888.3_NC_003888.3_6344;NC_003888.3_NC_003888.3_6345;NC_003888.3_NC_003888.3_6346;NC_003888.3_NC_003888.3_6347;NC_003888.3_NC_003888.3_6348;NC_003888.3_NC_003888.3_6349;NC_003888.3_NC_003888.3_6350;NC_003888.3_NC_003888.3_6351;NC_003888.3_NC_003888.3_6352;NC_003888.3_NC_003888.3_6353;NC_003888.3_NC_003888.3_6354;NC_003888.3_NC_003888.3_6355;NC_003888.3_NC_003888.3_6356;NC_003888.3_NC_003888.3_6357;NC_003888.3_NC_003888.3_6358;NC_003888.3_NC_003888.3_6359;NC_003888.3_NC_003888.3_6360","PF00975;PF06339;PF00668;PF01050;PF00501;PF00202","PF00202;PF07905;PF13556;PF00795;PF01979;PF07969;PF00296;PF02133;PF13229;PF05048;PF12708;PF12218;PF12079;PF02627;PF07730;PF13581;PF00072;PF08281;PF04545;PF00196;PF03099;PF13581;PF07730;PF00672;PF12833;PF00165;PF05977;PF07690;PF01569;PF00041;PF03422;PF07971;PF14403;PF04174;PF05977;PF07690;PF00501;PF13193;PF00550;PF00668;PF00668;PF00501;PF13193;PF00550;PF00975;PF05899;PF07883;PF13434;PF07992;PF07883;PF06339;PF01050;PF11699;PF00190;PF02311;PF05899;PF12852;PF14525",0.05,0.81,"D",7078584,7118257,119,119,0.81,"nrps",0.66,0.86082,0.81,"nrps","nrps" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_7385659-7388675.1",7385659,7388675,3016,3,7,1,0.64353,"antibacterial",0.51,0.16,0.12,0.15,"saccharide",0,0.02,0.21,0.71,0.04,"NC_003888.3_NC_003888.3_6571;NC_003888.3_NC_003888.3_6572;NC_003888.3_NC_003888.3_6573","PF00534","PF01242;PF13579;PF13439;PF00534;PF13692;PF13847;PF13649",0.01,0.01,"D",7385659,7388675,122,122,0.71,"saccharide",0.51,0.64353,0.71,"saccharide","saccharide" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_7623284-7715706.1",7623284,7715706,92422,100,87,10,0.84839,"antibacterial",0.52,0.14,0.13,0.2,"ripp",0,0.26,0.51,0.1,0.01,"NC_003888.3_NC_003888.3_6768;NC_003888.3_NC_003888.3_6769;NC_003888.3_NC_003888.3_6770;NC_003888.3_NC_003888.3_6771;NC_003888.3_NC_003888.3_6772;NC_003888.3_NC_003888.3_6773;NC_003888.3_NC_003888.3_6774;NC_003888.3_NC_003888.3_6775;NC_003888.3_NC_003888.3_6776;NC_003888.3_NC_003888.3_6777;NC_003888.3_NC_003888.3_6778;NC_003888.3_NC_003888.3_6779;NC_003888.3_NC_003888.3_6780;NC_003888.3_NC_003888.3_6781;NC_003888.3_NC_003888.3_6782;NC_003888.3_NC_003888.3_6783;NC_003888.3_NC_003888.3_6784;NC_003888.3_NC_003888.3_6785;NC_003888.3_NC_003888.3_6786;NC_003888.3_NC_003888.3_6787;NC_003888.3_NC_003888.3_6788;NC_003888.3_NC_003888.3_6789;NC_003888.3_NC_003888.3_6790;NC_003888.3_NC_003888.3_6791;NC_003888.3_NC_003888.3_6792;NC_003888.3_NC_003888.3_6793;NC_003888.3_NC_003888.3_6794;NC_003888.3_NC_003888.3_6795;NC_003888.3_NC_003888.3_6796;NC_003888.3_NC_003888.3_6797;NC_003888.3_NC_003888.3_6798;NC_003888.3_NC_003888.3_6799;NC_003888.3_NC_003888.3_6800;NC_003888.3_NC_003888.3_6801;NC_003888.3_NC_003888.3_6802;NC_003888.3_NC_003888.3_6803;NC_003888.3_NC_003888.3_6804;NC_003888.3_NC_003888.3_6805;NC_003888.3_NC_003888.3_6806;NC_003888.3_NC_003888.3_6807;NC_003888.3_NC_003888.3_6808;NC_003888.3_NC_003888.3_6809;NC_003888.3_NC_003888.3_6810;NC_003888.3_NC_003888.3_6811;NC_003888.3_NC_003888.3_6812;NC_003888.3_NC_003888.3_6813;NC_003888.3_NC_003888.3_6814;NC_003888.3_NC_003888.3_6815;NC_003888.3_NC_003888.3_6816;NC_003888.3_NC_003888.3_6817;NC_003888.3_NC_003888.3_6818;NC_003888.3_NC_003888.3_6819;NC_003888.3_NC_003888.3_6820;NC_003888.3_NC_003888.3_6821;NC_003888.3_NC_003888.3_6822;NC_003888.3_NC_003888.3_6823;NC_003888.3_NC_003888.3_6824;NC_003888.3_NC_003888.3_6825;NC_003888.3_NC_003888.3_6826;NC_003888.3_NC_003888.3_6827;NC_003888.3_NC_003888.3_6828;NC_003888.3_NC_003888.3_6829;NC_003888.3_NC_003888.3_6830;NC_003888.3_NC_003888.3_6831;NC_003888.3_NC_003888.3_6832;NC_003888.3_NC_003888.3_6833;NC_003888.3_NC_003888.3_6834;NC_003888.3_NC_003888.3_6835;NC_003888.3_NC_003888.3_6836;NC_003888.3_NC_003888.3_6837;NC_003888.3_NC_003888.3_6838;NC_003888.3_NC_003888.3_6839;NC_003888.3_NC_003888.3_6840;NC_003888.3_NC_003888.3_6841;NC_003888.3_NC_003888.3_6842;NC_003888.3_NC_003888.3_6843;NC_003888.3_NC_003888.3_6844;NC_003888.3_NC_003888.3_6845;NC_003888.3_NC_003888.3_6846;NC_003888.3_NC_003888.3_6847;NC_003888.3_NC_003888.3_6848;NC_003888.3_NC_003888.3_6849;NC_003888.3_NC_003888.3_6850;NC_003888.3_NC_003888.3_6851;NC_003888.3_NC_003888.3_6852;NC_003888.3_NC_003888.3_6853;NC_003888.3_NC_003888.3_6854;NC_003888.3_NC_003888.3_6855;NC_003888.3_NC_003888.3_6856;NC_003888.3_NC_003888.3_6857;NC_003888.3_NC_003888.3_6858;NC_003888.3_NC_003888.3_6859;NC_003888.3_NC_003888.3_6860;NC_003888.3_NC_003888.3_6861;NC_003888.3_NC_003888.3_6862;NC_003888.3_NC_003888.3_6863;NC_003888.3_NC_003888.3_6864;NC_003888.3_NC_003888.3_6865;NC_003888.3_NC_003888.3_6866;NC_003888.3_NC_003888.3_6867","PF01636;PF02770;PF02786;PF00702;PF08028;PF00441;PF02771;PF05147;PF00535;PF04738","PF03771;PF03771;PF03771;PF00069;PF07714;PF01636;PF01163;PF00656;PF05762;PF13519;PF05496;PF07728;PF07726;PF00004;PF13191;PF00535;PF02195;PF12846;PF11203;PF00877;PF01555;PF16259;PF08239;PF01638;PF07690;PF15632;PF01071;PF13549;PF02786;PF02655;PF02222;PF07478;PF13535;PF07690;PF13419;PF00702;PF13242;PF03771;PF03771;PF13620;PF14686;PF13634;PF01068;PF13586;PF01609;PF13340;PF13340;PF01609;PF13586;PF03771;PF03771;PF03432;PF05713;PF02467;PF13730;PF13560;PF01135;PF13649;PF01209;PF00398;PF05175;PF13847;PF14028;PF05147;PF14028;PF04738;PF00196;PF13556;PF08279;PF08281;PF00441;PF08028;PF02770;PF02771;PF01590;PF03029;PF00009;PF05331;PF03259;PF02518;PF13581;PF00723;PF13424;PF01980;PF13581;PF01636;PF03881",0.1,0.07,"D",7623284,7715706,131,131,0.51,"ripp",0.52,0.84839,0.51,"ripp","ripp" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_8228870-8235982.1",8228870,8235982,7112,8,11,3,0.67244,"antibacterial",0.8,0.06,0.19,0.16,"terpene",0.1,0.04,0.14,0.01,0.55,"NC_003888.3_NC_003888.3_7322;NC_003888.3_NC_003888.3_7323;NC_003888.3_NC_003888.3_7324;NC_003888.3_NC_003888.3_7325;NC_003888.3_NC_003888.3_7326;NC_003888.3_NC_003888.3_7327;NC_003888.3_NC_003888.3_7328;NC_003888.3_NC_003888.3_7329","PF00106;PF00067;PF08659","PF00106;PF08659;PF13561;PF13460;PF03631;PF02746;PF13378;PF00067;PF03029;PF13479;PF05331",0.2,0.02,"D",8228870,8235982,154,154,0.55,"terpene",0.8,0.67244,0.55,"terpene","terpene" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_8288250-8293976.1",8288250,8293976,5726,5,6,1,0.6163,"antibacterial",0.66,0.04,0.13,0.4,"pks",0.01,0.17,0.05,0.06,0.03,"NC_003888.3_NC_003888.3_7385;NC_003888.3_NC_003888.3_7386;NC_003888.3_NC_003888.3_7387;NC_003888.3_NC_003888.3_7388;NC_003888.3_NC_003888.3_7389","PF01636","PF05426;PF01636;PF05977;PF09835;PF07690;PF11706",0.69,0,"D",8288250,8293976,157,157,0.69,"pks",0.66,0.6163,0.69,"pks","pks" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_8468384-8563058.1",8468384,8563058,94674,88,209,23,0.91964,"cytotoxic",0.48,0.54,0.21,0.15,"nrps",0.01,0.08,0,0.04,0.02,"NC_003888.3_NC_003888.3_7547;NC_003888.3_NC_003888.3_7548;NC_003888.3_NC_003888.3_7549;NC_003888.3_NC_003888.3_7550;NC_003888.3_NC_003888.3_7551;NC_003888.3_NC_003888.3_7552;NC_003888.3_NC_003888.3_7553;NC_003888.3_NC_003888.3_7554;NC_003888.3_NC_003888.3_7555;NC_003888.3_NC_003888.3_7556;NC_003888.3_NC_003888.3_7557;NC_003888.3_NC_003888.3_7558;NC_003888.3_NC_003888.3_7559;NC_003888.3_NC_003888.3_7560;NC_003888.3_NC_003888.3_7561;NC_003888.3_NC_003888.3_7562;NC_003888.3_NC_003888.3_7563;NC_003888.3_NC_003888.3_7564;NC_003888.3_NC_003888.3_7565;NC_003888.3_NC_003888.3_7566;NC_003888.3_NC_003888.3_7567;NC_003888.3_NC_003888.3_7568;NC_003888.3_NC_003888.3_7569;NC_003888.3_NC_003888.3_7570;NC_003888.3_NC_003888.3_7571;NC_003888.3_NC_003888.3_7572;NC_003888.3_NC_003888.3_7573;NC_003888.3_NC_003888.3_7574;NC_003888.3_NC_003888.3_7575;NC_003888.3_NC_003888.3_7576;NC_003888.3_NC_003888.3_7577;NC_003888.3_NC_003888.3_7578;NC_003888.3_NC_003888.3_7579;NC_003888.3_NC_003888.3_7580;NC_003888.3_NC_003888.3_7581;NC_003888.3_NC_003888.3_7582;NC_003888.3_NC_003888.3_7583;NC_003888.3_NC_003888.3_7584;NC_003888.3_NC_003888.3_7585;NC_003888.3_NC_003888.3_7586;NC_003888.3_NC_003888.3_7587;NC_003888.3_NC_003888.3_7588;NC_003888.3_NC_003888.3_7589;NC_003888.3_NC_003888.3_7590;NC_003888.3_NC_003888.3_7591;NC_003888.3_NC_003888.3_7592;NC_003888.3_NC_003888.3_7593;NC_003888.3_NC_003888.3_7594;NC_003888.3_NC_003888.3_7595;NC_003888.3_NC_003888.3_7596;NC_003888.3_NC_003888.3_7597;NC_003888.3_NC_003888.3_7598;NC_003888.3_NC_003888.3_7599;NC_003888.3_NC_003888.3_7600;NC_003888.3_NC_003888.3_7601;NC_003888.3_NC_003888.3_7602;NC_003888.3_NC_003888.3_7603;NC_003888.3_NC_003888.3_7604;NC_003888.3_NC_003888.3_7605;NC_003888.3_NC_003888.3_7606;NC_003888.3_NC_003888.3_7607;NC_003888.3_NC_003888.3_7608;NC_003888.3_NC_003888.3_7609;NC_003888.3_NC_003888.3_7610;NC_003888.3_NC_003888.3_7611;NC_003888.3_NC_003888.3_7612;NC_003888.3_NC_003888.3_7613;NC_003888.3_NC_003888.3_7614;NC_003888.3_NC_003888.3_7615;NC_003888.3_NC_003888.3_7616;NC_003888.3_NC_003888.3_7617;NC_003888.3_NC_003888.3_7618;NC_003888.3_NC_003888.3_7619;NC_003888.3_NC_003888.3_7620;NC_003888.3_NC_003888.3_7621;NC_003888.3_NC_003888.3_7622;NC_003888.3_NC_003888.3_7623;NC_003888.3_NC_003888.3_7624;NC_003888.3_NC_003888.3_7625;NC_003888.3_NC_003888.3_7626;NC_003888.3_NC_003888.3_7627;NC_003888.3_NC_003888.3_7628;NC_003888.3_NC_003888.3_7629;NC_003888.3_NC_003888.3_7630;NC_003888.3_NC_003888.3_7631;NC_003888.3_NC_003888.3_7632;NC_003888.3_NC_003888.3_7633;NC_003888.3_NC_003888.3_7634","PF08242;PF00106;PF00891;PF00107;PF00583;PF00501;PF01370;PF03364;PF01408;PF00903;PF00975;PF01494;PF00248;PF08241;PF00668;PF00067;PF01266;PF01636;PF00857;PF08240;PF08541;PF08659;PF00561","PF12802;PF01047;PF13463;PF12840;PF03466;PF00126;PF03446;PF12893;PF00903;PF08922;PF16653;PF03435;PF01113;PF02254;PF00440;PF02909;PF13828;PF13499;PF13833;PF13405;PF00036;PF13202;PF00196;PF08281;PF00072;PF07730;PF00561;PF08386;PF13977;PF16859;PF00440;PF13302;PF13420;PF00583;PF00903;PF00248;PF00248;PF13563;PF01186;PF01494;PF01266;PF13450;PF07885;PF00520;PF01872;PF07690;PF06779;PF01035;PF04343;PF11160;PF08240;PF00107;PF13602;PF01966;PF01494;PF05834;PF03486;PF07992;PF01946;PF01266;PF12831;PF00890;PF13450;PF01134;PF13738;PF04191;PF04140;PF08541;PF02797;PF00195;PF08392;PF01040;PF03640;PF13473;PF00127;PF06902;PF13459;PF13370;PF00496;PF00528;PF00528;PF13304;PF00005;PF13481;PF13191;PF13401;PF00004;PF02463;PF13193;PF00501;PF00550;PF00668;PF00501;PF13193;PF00668;PF00501;PF13489;PF01209;PF13847;PF13649;PF08242;PF08241;PF13193;PF00550;PF12697;PF00975;PF00561;PF01738;PF03435;PF01370;PF13460;PF01408;PF00891;PF13489;PF13649;PF08241;PF08242;PF00067;PF00975;PF12697;PF12146;PF13489;PF05219;PF13649;PF08242;PF08241;PF00664;PF00005;PF13555;PF13191;PF13401;PF13479;PF02463;PF00664;PF00005;PF13555;PF13191;PF02463;PF00425;PF13561;PF00106;PF01370;PF08659;PF00440;PF00903;PF12802;PF01047;PF09339;PF13412;PF13545;PF02333;PF01209;PF13649;PF08241;PF08242;PF09278;PF13411;PF00376;PF00027;PF02353;PF08241;PF13649;PF00392;PF07729;PF07690;PF00440;PF02909;PF07992;PF13450;PF01494;PF13560;PF01381;PF11512;PF13483;PF12706;PF12802;PF13463;PF01047;PF12840;PF13412;PF13545;PF01636;PF07730;PF00072;PF08281;PF04545;PF00196;PF13412;PF13302;PF00583;PF04672;PF08327;PF10604;PF03364;PF00440;PF13384;PF11716;PF12867;PF07398;PF04978;PF12867;PF13560;PF09339;PF13404;PF00857;PF01978;PF13463;PF12802;PF01047",0.42,0.64,"D",8468384,8563058,161,161,0.64,"nrps",0.54,0.91964,0.64,"nrps","nrps" +"NC_003888.3","deepbgc","0.1.0","deepbgc","NC_003888.3_8610787-8635487.1",8610787,8635487,24700,30,42,5,0.83777,"antibacterial",0.54,0.26,0.2,0.31,"pks",0.01,0.12,0.08,0.03,0.08,"NC_003888.3_NC_003888.3_7682;NC_003888.3_NC_003888.3_7683;NC_003888.3_NC_003888.3_7684;NC_003888.3_NC_003888.3_7685;NC_003888.3_NC_003888.3_7686;NC_003888.3_NC_003888.3_7687;NC_003888.3_NC_003888.3_7688;NC_003888.3_NC_003888.3_7689;NC_003888.3_NC_003888.3_7690;NC_003888.3_NC_003888.3_7691;NC_003888.3_NC_003888.3_7692;NC_003888.3_NC_003888.3_7693;NC_003888.3_NC_003888.3_7694;NC_003888.3_NC_003888.3_7695;NC_003888.3_NC_003888.3_7696;NC_003888.3_NC_003888.3_7697;NC_003888.3_NC_003888.3_7698;NC_003888.3_NC_003888.3_7699;NC_003888.3_NC_003888.3_7700;NC_003888.3_NC_003888.3_7701;NC_003888.3_NC_003888.3_7702;NC_003888.3_NC_003888.3_7703;NC_003888.3_NC_003888.3_7704;NC_003888.3_NC_003888.3_7705;NC_003888.3_NC_003888.3_7706;NC_003888.3_NC_003888.3_7707;NC_003888.3_NC_003888.3_7708;NC_003888.3_NC_003888.3_7709;NC_003888.3_NC_003888.3_7710;NC_003888.3_NC_003888.3_7711","PF00106;PF01494;PF08659;PF00107;PF01370","PF00881;PF02909;PF13358;PF09076;PF01494;PF07992;PF00890;PF01494;PF00890;PF07992;PF00107;PF00440;PF02909;PF13586;PF01609;PF10756;PF13011;PF01527;PF13518;PF13384;PF13551;PF13565;PF00665;PF13683;PF13333;PF14145;PF01548;PF13022;PF00440;PF00356;PF00106;PF08659;PF01370;PF13561;PF06197;PF13359;PF01609;PF13613;PF04072;PF13561;PF00106;PF00440",0.68,0.08,"D",8610787,8635487,166,166,0.68,"pks",0.54,0.83777,0.68,"pks","pks" +"NC_003903.1","deepbgc","0.1.0","deepbgc","NC_003903.1_31460-41750.1",31460,41750,10290,13,23,4,0.61532,"antibacterial",0.76,0.13,0.12,0.31,"pks",0.02,0.15,0.01,0.08,0.12,"NC_003903.1_NC_003903.1_34;NC_003903.1_NC_003903.1_35;NC_003903.1_NC_003903.1_36;NC_003903.1_NC_003903.1_37;NC_003903.1_NC_003903.1_38;NC_003903.1_NC_003903.1_39;NC_003903.1_NC_003903.1_40;NC_003903.1_NC_003903.1_41;NC_003903.1_NC_003903.1_42;NC_003903.1_NC_003903.1_43;NC_003903.1_NC_003903.1_44;NC_003903.1_NC_003903.1_45;NC_003903.1_NC_003903.1_46","PF02585;PF00106;PF01370;PF08659","PF07228;PF02585;PF12833;PF00165;PF12852;PF00106;PF01370;PF08659;PF13561;PF13460;PF13586;PF01609;PF13340;PF07228;PF16859;PF16925;PF00440;PF00106;PF08659;PF01370;PF16363;PF13460;PF13561",0.58,0.07,"D",31460,41750,168,168,0.58,"pks",0.76,0.61532,0.58,"pks","pks" diff --git a/dev/02_dev.R b/dev/02_dev.R index 184a95d..1506e91 100644 --- a/dev/02_dev.R +++ b/dev/02_dev.R @@ -82,7 +82,7 @@ usethis::use_data_raw( name = "deep_data", open = FALSE ) usethis::use_data_raw( name = "rre_data", open = FALSE ) usethis::use_data_raw( name = "ripp_data", open = FALSE) usethis::use_data_raw( name = "emerald_data", open = FALSE) -usethis::use_data_raw( name = "reference_data", open = FALSE) +# usethis::use_data_raw( name = "reference_data", open = FALSE) ## Tests ---- diff --git a/emerald_biocircos.csv b/emerald_biocircos.csv new file mode 100644 index 0000000..cdd55e6 --- /dev/null +++ b/emerald_biocircos.csv @@ -0,0 +1,33 @@ +"seqname","source","Cluster","Start","Stop","score","strand","frame","Type","chromosome","Type2" +"NZ_CP042324.1","SanntiSv0.9.3.3",1,12285,133520,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",2,172170,184797,".",".",".","terpene","EM","terpene" +"NZ_CP042324.1","SanntiSv0.9.3.3",3,202863,266263,".",".",".","alkaloid","EM","alkaloid" +"NZ_CP042324.1","SanntiSv0.9.3.3",4,395065,425157,".",".",".","saccharide","EM","saccharide" +"NZ_CP042324.1","SanntiSv0.9.3.3",5,497375,536408,".",".",".","nrp","EM","nrp" +"NZ_CP042324.1","SanntiSv0.9.3.3",6,583522,601051,".",".",".","nrp polyketide","EM","nrp polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",7,846084,853212,".",".",".","ripp","EM","ripp" +"NZ_CP042324.1","SanntiSv0.9.3.3",8,1241590,1282541,".",".",".","nrp","EM","nrp" +"NZ_CP042324.1","SanntiSv0.9.3.3",9,1332873,1367440,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",10,1994053,2009395,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",11,2539582,2565877,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",12,2615131,2639798,".",".",".","ripp","EM","ripp" +"NZ_CP042324.1","SanntiSv0.9.3.3",13,2792392,2812253,".",".",".","saccharide","EM","saccharide" +"NZ_CP042324.1","SanntiSv0.9.3.3",14,2927749,2964702,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",15,3004801,3043723,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",16,3382380,3399072,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",17,3513073,3606342,".",".",".","nrp","EM","nrp" +"NZ_CP042324.1","SanntiSv0.9.3.3",18,4006935,4028808,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",19,5502704,5539733,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",20,5680218,5684576,".",".",".","terpene","EM","terpene" +"NZ_CP042324.1","SanntiSv0.9.3.3",21,5776741,5798684,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",22,5927800,5941379,".",".",".","ripp","EM","ripp" +"NZ_CP042324.1","SanntiSv0.9.3.3",23,6334614,6343370,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",24,6433764,6470988,".",".",".","nrp polyketide","EM","nrp polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",25,6830272,6877184,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",26,6884252,6984001,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",27,7084064,7146243,".",".",".","nrp","EM","nrp" +"NZ_CP042324.1","SanntiSv0.9.3.3",28,7508709,7540017,".",".",".","terpene","EM","terpene" +"NZ_CP042324.1","SanntiSv0.9.3.3",29,7581046,7606355,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",30,7655814,7715820,".",".",".","other","EM","other" +"NZ_CP042324.1","SanntiSv0.9.3.3",31,8022244,8030491,".",".",".","polyketide","EM","polyketide" +"NZ_CP042324.1","SanntiSv0.9.3.3",32,8490911,8620226,".",".",".","polyketide","EM","polyketide" diff --git a/gecco_biocircos.csv b/gecco_biocircos.csv new file mode 100644 index 0000000..4682bce --- /dev/null +++ b/gecco_biocircos.csv @@ -0,0 +1,17 @@ +"sequence_id","bgc_id","Start","Stop","average_p","max_p","type","proteins","domains","chromosome","Cluster","ID","Type","Type2","pks","other","nrps","alkaloid","terpene","saccharide","ripp","num_prot","num_domains","score","Cluster_type","score_a","score_c" +"AL645882.2","AL645882.2_cluster_1",103781,121371,0.819288729972613,0.999420718360737,"Polyketide","AL645882.2_97;AL645882.2_98;AL645882.2_99;AL645882.2_100;AL645882.2_101;AL645882.2_102","PF00106;PF00109;PF00550;PF00698;PF00753;PF01370;PF02801;PF07977;PF07993;PF08659;PF13561;PF14765;PF16197;TIGR00128;TIGR01181;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR02813;TIGR02814;TIGR02816;TIGR03131;TIGR03150;TIGR03443;TIGR03466;TIGR03971","G",1,1,"pks","pks",0.65,0.32,0.08,0.01,0.01,0.03,0,6,27,0.65,"pks",0.819288729972613,0.65 +"AL645882.2","AL645882.2_cluster_2",168705,177496,0.659158938092802,0.85012823839182,"Terpene","AL645882.2_148;AL645882.2_149;AL645882.2_150;AL645882.2_151;AL645882.2_152;AL645882.2_153;AL645882.2_154;AL645882.2_155","PF00348;PF00494;PF00582;PF00890;PF01266;PF01593;PF11066;PF13450;TIGR02730;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03464;TIGR03465;TIGR03467","G",2,2,"terpene","terpene",0.09,0.04,0,0.01,0.87,0,0,8,16,0.87,"terpene",0.659158938092802,0.87 +"AL645882.2","AL645882.2_cluster_4",498683,533448,0.769374704262298,0.99996968309163,"NRP","AL645882.2_440;AL645882.2_441;AL645882.2_442;AL645882.2_443;AL645882.2_444;AL645882.2_445;AL645882.2_446;AL645882.2_447;AL645882.2_448;AL645882.2_449;AL645882.2_450;AL645882.2_451;AL645882.2_452;AL645882.2_453;AL645882.2_454;AL645882.2_455;AL645882.2_456;AL645882.2_457;AL645882.2_458;AL645882.2_459;AL645882.2_460;AL645882.2_461","PF00005;PF00440;PF00501;PF00550;PF00664;PF00668;PF01266;PF01494;PF03621;PF07992;PF09339;PF12802;PF12902;PF13191;PF13193;PF13304;PF13434;PF13450;TIGR00630;TIGR00655;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01318;TIGR01720;TIGR01733;TIGR01734;TIGR01842;TIGR01846;TIGR01923;TIGR01978;TIGR01984;TIGR01988;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02372;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03375;TIGR03384;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03968;TIGR04406;TIGR04439;TIGR04520;TIGR04521","G",4,4,"nrps","nrps",0.11,0.04,0.7,0,0.02,0.03,0.12,22,100,0.7,"nrps",0.769374704262298,0.7 +"AL645882.2","AL645882.2_cluster_6",1335695,1361419,0.847326425018297,0.902810689697336,"Polyketide","AL645882.2_1225;AL645882.2_1226;AL645882.2_1227;AL645882.2_1228;AL645882.2_1229;AL645882.2_1230;AL645882.2_1231;AL645882.2_1232;AL645882.2_1233;AL645882.2_1234;AL645882.2_1235;AL645882.2_1236;AL645882.2_1237;AL645882.2_1238;AL645882.2_1239;AL645882.2_1240;AL645882.2_1241;AL645882.2_1242;AL645882.2_1243;AL645882.2_1244;AL645882.2_1245;AL645882.2_1246;AL645882.2_1247;AL645882.2_1248;AL645882.2_1249","PF00109;PF00155;PF00202;PF00364;PF00392;PF00550;PF00561;PF00676;PF00890;PF01266;PF01370;PF01494;PF01613;PF01674;PF01946;PF02089;PF02770;PF02775;PF02801;PF03109;PF03364;PF04072;PF04321;PF04820;PF07993;PF08281;PF08541;PF08545;PF10604;PF12697;PF13292;PF13450;PF13460;TIGR00027;TIGR00292;TIGR00508;TIGR00517;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00713;TIGR00747;TIGR00748;TIGR01214;TIGR01265;TIGR01347;TIGR01348;TIGR01746;TIGR01835;TIGR01885;TIGR01982;TIGR02018;TIGR02032;TIGR02296;TIGR02325;TIGR02352;TIGR02404;TIGR02407;TIGR02813;TIGR02937;TIGR02946;TIGR02959;TIGR03150;TIGR03181;TIGR03182;TIGR03197;TIGR03246;TIGR03251;TIGR03338;TIGR03364;TIGR03372;TIGR03443;TIGR03466;TIGR03615;TIGR03695;TIGR03947;TIGR04022;TIGR04544","G",5,5,"pks","pks",0.53,0.28,0.15,0.05,0.02,0.02,0.03,25,79,0.53,"pks",0.847326425018297,0.53 +"AL645882.2","AL645882.2_cluster_8",2931776,2950345,0.795181197366316,0.999357302051581,"Saccharide","AL645882.2_2651;AL645882.2_2652;AL645882.2_2653;AL645882.2_2654;AL645882.2_2655;AL645882.2_2656;AL645882.2_2657;AL645882.2_2658;AL645882.2_2659;AL645882.2_2660;AL645882.2_2661;AL645882.2_2662;AL645882.2_2663;AL645882.2_2664;AL645882.2_2665;AL645882.2_2666;AL645882.2_2667;AL645882.2_2668;AL645882.2_2669","PF00264;PF00383;PF00389;PF00400;PF00534;PF00535;PF02397;PF02668;PF02826;PF03777;PF06236;PF07690;PF12832;PF12894;PF13439;PF13477;PF13506;PF13524;PF13579;PF13632;PF13641;PF13692;PF13727;PF14437;TIGR00227;TIGR00326;TIGR00900;TIGR01327;TIGR01508;TIGR02095;TIGR02149;TIGR03013;TIGR03022;TIGR03023;TIGR03025;TIGR03030;TIGR03087;TIGR03088;TIGR03449;TIGR03469;TIGR03937;TIGR03946;TIGR03965;TIGR03999;TIGR04047;TIGR04063;TIGR04157","G",7,7,"saccharide","saccharide",0.02,0.18,0.05,0,0.02,0.74,0,19,47,0.74,"saccharide",0.795181197366316,0.74 +"AL645882.2","AL645882.2_cluster_10",3524828,3602320,0.752421552194178,0.999999999825827,"NRP","AL645882.2_3170;AL645882.2_3171;AL645882.2_3172;AL645882.2_3173;AL645882.2_3174;AL645882.2_3175;AL645882.2_3176;AL645882.2_3177;AL645882.2_3178;AL645882.2_3179;AL645882.2_3180;AL645882.2_3181;AL645882.2_3182;AL645882.2_3183;AL645882.2_3184;AL645882.2_3185;AL645882.2_3186;AL645882.2_3187;AL645882.2_3188;AL645882.2_3189;AL645882.2_3190;AL645882.2_3191;AL645882.2_3192;AL645882.2_3193;AL645882.2_3194;AL645882.2_3195;AL645882.2_3196;AL645882.2_3197;AL645882.2_3198;AL645882.2_3199;AL645882.2_3200;AL645882.2_3201;AL645882.2_3202;AL645882.2_3203;AL645882.2_3204","PF00005;PF00072;PF00109;PF00122;PF00155;PF00196;PF00441;PF00486;PF00501;PF00550;PF00561;PF00664;PF00668;PF00702;PF00903;PF00931;PF00975;PF01026;PF01040;PF01070;PF01261;PF01266;PF01494;PF01636;PF01663;PF02153;PF02668;PF02770;PF02801;PF03403;PF03621;PF03704;PF07730;PF07994;PF08241;PF08541;PF08545;PF09056;PF12146;PF12679;PF12697;PF12730;PF12897;PF13193;PF13304;PF13450;PF13489;PF13649;PF13669;PF14696;TIGR00010;TIGR00517;TIGR00747;TIGR00748;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01106;TIGR01116;TIGR01140;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01249;TIGR01257;TIGR01263;TIGR01264;TIGR01265;TIGR01271;TIGR01277;TIGR01288;TIGR01387;TIGR01473;TIGR01474;TIGR01476;TIGR01494;TIGR01497;TIGR01511;TIGR01512;TIGR01517;TIGR01522;TIGR01523;TIGR01524;TIGR01525;TIGR01647;TIGR01657;TIGR01720;TIGR01733;TIGR01734;TIGR01738;TIGR01818;TIGR01835;TIGR01842;TIGR01846;TIGR01923;TIGR01934;TIGR01978;TIGR01984;TIGR01988;TIGR02032;TIGR02056;TIGR02142;TIGR02151;TIGR02154;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02335;TIGR02372;TIGR02427;TIGR02633;TIGR02673;TIGR02708;TIGR02769;TIGR02770;TIGR02813;TIGR02857;TIGR02868;TIGR02875;TIGR02915;TIGR02956;TIGR02982;TIGR03005;TIGR03020;TIGR03056;TIGR03081;TIGR03098;TIGR03150;TIGR03197;TIGR03205;TIGR03208;TIGR03219;TIGR03258;TIGR03265;TIGR03269;TIGR03343;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03467;TIGR03522;TIGR03540;TIGR03541;TIGR03608;TIGR03611;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03946;TIGR03947;TIGR03966;TIGR04406;TIGR04520;TIGR04521;TIGR04544","G",9,9,"nrps","nrps",0.195,0,0.97,0,0,0.01,0,35,180,0.97,"nrps",0.752421552194178,0.97 +"AL645882.2","AL645882.2_cluster_11",5515246,5536994,0.713019114810484,0.868896297725067,"Polyketide","AL645882.2_5009;AL645882.2_5010;AL645882.2_5011;AL645882.2_5012;AL645882.2_5013;AL645882.2_5014;AL645882.2_5015;AL645882.2_5016;AL645882.2_5017;AL645882.2_5018;AL645882.2_5019;AL645882.2_5020;AL645882.2_5021;AL645882.2_5022;AL645882.2_5023;AL645882.2_5024;AL645882.2_5025;AL645882.2_5026;AL645882.2_5027;AL645882.2_5028;AL645882.2_5029;AL645882.2_5030;AL645882.2_5031","PF00106;PF00107;PF00109;PF00440;PF00486;PF00550;PF00753;PF01243;PF01370;PF01381;PF01613;PF02801;PF02909;PF03364;PF03704;PF03848;PF03992;PF04978;PF05175;PF05368;PF05724;PF07690;PF07883;PF08028;PF08240;PF08241;PF08242;PF08659;PF10604;PF12349;PF12844;PF13443;PF13460;PF13489;PF13561;PF13602;PF13649;PF13847;TIGR00477;TIGR00517;TIGR00692;TIGR00710;TIGR00711;TIGR00833;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00916;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01963;TIGR02296;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02818;TIGR02823;TIGR02824;TIGR02825;TIGR03070;TIGR03150;TIGR03201;TIGR03206;TIGR03325;TIGR03366;TIGR03451;TIGR03466;TIGR03480;TIGR03534;TIGR03615;TIGR03618;TIGR03668;TIGR03971;TIGR03989;TIGR04022;TIGR04023;TIGR04316;TIGR04504;TIGR04558","G",10,10,"pks","pks",0.89,0.05,0.02,0.02,0.02,0.08,0.03,23,88,0.89,"pks",0.713019114810484,0.89 +"AL645882.2","AL645882.2_cluster_12",5785753,5791297,0.57649202361676,0.618435119958616,"Polyketide","AL645882.2_5252;AL645882.2_5253;AL645882.2_5254;AL645882.2_5255;AL645882.2_5256;AL645882.2_5257;AL645882.2_5258","PF00109;PF00550;PF02311;PF02801;PF03364;PF03992;PF04486;PF04673;PF07883;PF10604;TIGR01930;TIGR02813;TIGR03150;TIGR03214","G",11,11,"pks","pks",0.91,0.06,0.01,0,0.02,0,0,7,14,0.91,"pks",0.57649202361676,0.91 +"AL645882.2","AL645882.2_cluster_13",6432593,6467702,0.909289567375217,0.999999958443177,"Polyketide","AL645882.2_5815;AL645882.2_5816;AL645882.2_5817;AL645882.2_5818;AL645882.2_5819;AL645882.2_5820;AL645882.2_5821;AL645882.2_5822;AL645882.2_5823;AL645882.2_5824;AL645882.2_5825;AL645882.2_5826;AL645882.2_5827;AL645882.2_5828;AL645882.2_5829;AL645882.2_5830;AL645882.2_5831;AL645882.2_5832;AL645882.2_5833;AL645882.2_5834;AL645882.2_5835;AL645882.2_5836;AL645882.2_5837;AL645882.2_5838;AL645882.2_5839","PF00108;PF00109;PF00155;PF00196;PF00355;PF00441;PF00486;PF00501;PF00550;PF00698;PF00891;PF00975;PF01053;PF01073;PF01222;PF01326;PF01370;PF02353;PF02544;PF02770;PF02771;PF02801;PF03704;PF04191;PF04321;PF05368;PF05401;PF07993;PF08028;PF08241;PF08242;PF08281;PF08541;PF08545;PF11639;PF12697;PF13193;PF13460;PF13489;PF13520;PF13649;PF13847;PF16197;PF16363;PF17837;TIGR00128;TIGR00517;TIGR00536;TIGR00747;TIGR00748;TIGR00858;TIGR01179;TIGR01181;TIGR01214;TIGR01733;TIGR01734;TIGR01746;TIGR01777;TIGR01821;TIGR01822;TIGR01825;TIGR01923;TIGR01930;TIGR01983;TIGR02072;TIGR02188;TIGR02197;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR02813;TIGR02937;TIGR03020;TIGR03056;TIGR03098;TIGR03131;TIGR03150;TIGR03203;TIGR03204;TIGR03205;TIGR03207;TIGR03208;TIGR03443;TIGR03466;TIGR03533;TIGR03534;TIGR03541;TIGR03589;TIGR04022;TIGR04180;TIGR04543","G",12,12,"pks","pks",0.76,0.11,0.46,0.02,0,0.01,0.02,25,92,0.76,"pks",0.909289567375217,0.76 +"AL645882.2","AL645882.2_cluster_14",6847315,6863275,0.739858389200434,0.958970163028131,"Polyketide","AL645882.2_6167;AL645882.2_6168;AL645882.2_6169;AL645882.2_6170;AL645882.2_6171;AL645882.2_6172;AL645882.2_6173;AL645882.2_6174;AL645882.2_6175;AL645882.2_6176;AL645882.2_6177;AL645882.2_6178;AL645882.2_6179;AL645882.2_6180","PF00150;PF00356;PF00528;PF00532;PF01381;PF01547;PF04183;PF04542;PF06276;PF07398;PF08281;PF11716;PF12680;PF13377;PF13416;PF13581;PF19054;TIGR00969;TIGR01481;TIGR01581;TIGR02139;TIGR02140;TIGR02141;TIGR02405;TIGR02417;TIGR02937;TIGR02939;TIGR02947;TIGR02948;TIGR02957;TIGR03070;TIGR03083;TIGR03086;TIGR03226;TIGR03262;TIGR03850","G",13,13,"pks","pks",0.62,0.22,0.03,0,0.03,0.02,0.1,14,36,0.62,"pks",0.739858389200434,0.62 +"AL645882.2","AL645882.2_cluster_15",6889594,6948414,0.873977476188822,0.999999999840931,"Polyketide","AL645882.2_6205;AL645882.2_6206;AL645882.2_6207;AL645882.2_6208;AL645882.2_6209;AL645882.2_6210;AL645882.2_6211;AL645882.2_6212;AL645882.2_6213;AL645882.2_6214;AL645882.2_6215;AL645882.2_6216;AL645882.2_6217;AL645882.2_6218;AL645882.2_6219;AL645882.2_6220;AL645882.2_6221;AL645882.2_6222;AL645882.2_6223;AL645882.2_6224;AL645882.2_6225;AL645882.2_6226;AL645882.2_6227;AL645882.2_6228;AL645882.2_6229","PF00106;PF00108;PF00109;PF00202;PF00364;PF00440;PF00486;PF00550;PF00561;PF00698;PF00975;PF01039;PF01370;PF01494;PF01565;PF02775;PF02786;PF02801;PF03704;PF03756;PF05368;PF07690;PF07730;PF07993;PF08031;PF08659;PF08990;PF12697;PF12831;PF13460;PF13561;PF13581;PF14765;PF16197;PF17147;TIGR00128;TIGR00508;TIGR00513;TIGR00515;TIGR00699;TIGR00700;TIGR00707;TIGR00709;TIGR00710;TIGR00711;TIGR00713;TIGR00880;TIGR00881;TIGR00893;TIGR00895;TIGR00898;TIGR00900;TIGR01108;TIGR01117;TIGR01249;TIGR01500;TIGR01738;TIGR01746;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01885;TIGR01930;TIGR01963;TIGR02407;TIGR02415;TIGR02427;TIGR02430;TIGR02632;TIGR02685;TIGR02813;TIGR03056;TIGR03131;TIGR03133;TIGR03134;TIGR03150;TIGR03206;TIGR03246;TIGR03251;TIGR03297;TIGR03325;TIGR03343;TIGR03372;TIGR03384;TIGR03443;TIGR03466;TIGR03611;TIGR03613;TIGR03649;TIGR03695;TIGR03968;TIGR03971;TIGR04316;TIGR04504","G",14,14,"pks","pks",0.99,0,0.06,0,0,0.04,0.01,25,95,0.99,"pks",0.873977476188822,0.99 +"AL645882.2","AL645882.2_cluster_16",7106284,7117874,0.783762333451763,0.999856305267705,"NRP","AL645882.2_6364;AL645882.2_6365;AL645882.2_6366;AL645882.2_6367;AL645882.2_6368","PF00501;PF00550;PF00668;PF00975;PF05899;PF05977;PF07690;PF12697;PF13193;PF13434;TIGR00900;TIGR01733;TIGR01734;TIGR01738;TIGR01923;TIGR02188;TIGR02262;TIGR02275;TIGR02316;TIGR02372;TIGR03098;TIGR03205;TIGR03208;TIGR03443;TIGR04439","G",15,15,"nrps","nrps",0.03,0.06,0.92,0.01,0,0.01,0,5,25,0.92,"nrps",0.783762333451763,0.92 +"AL645882.2","AL645882.2_cluster_17",7516017,7523399,0.939298768070374,0.999999744466846,"Terpene","AL645882.2_6688;AL645882.2_6689;AL645882.2_6690;AL645882.2_6691;AL645882.2_6692;AL645882.2_6693;AL645882.2_6694","PF00348;PF00432;PF00494;PF00890;PF01048;PF01266;PF01593;PF07992;PF12831;PF13243;PF13249;PF13450;TIGR01507;TIGR01559;TIGR01787;TIGR02731;TIGR02732;TIGR02733;TIGR02734;TIGR02748;TIGR02749;TIGR03197;TIGR03463;TIGR03464;TIGR03465;TIGR03467;TIGR03468;TIGR04277","G",16,16,"terpene","terpene",0.03,0.05,0,0.01,0.9,0,0.01,7,28,0.9,"terpene",0.939298768070374,0.9 +"AL645882.2","AL645882.2_cluster_18",7586410,7601569,0.832626210768822,0.998326356077945,"Polyketide","AL645882.2_6750;AL645882.2_6751;AL645882.2_6752;AL645882.2_6753;AL645882.2_6754;AL645882.2_6755;AL645882.2_6756;AL645882.2_6757","PF00083;PF00106;PF00107;PF00109;PF00550;PF00698;PF01370;PF02775;PF02801;PF05977;PF07690;PF07992;PF08240;PF08541;PF08659;PF09335;PF12832;PF12840;PF13460;PF13561;PF13602;PF13738;PF14765;PF16197;TIGR00128;TIGR00710;TIGR00711;TIGR00747;TIGR00879;TIGR00880;TIGR00881;TIGR00891;TIGR00893;TIGR00894;TIGR00895;TIGR00898;TIGR00900;TIGR01289;TIGR01299;TIGR01500;TIGR01751;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01930;TIGR01963;TIGR02415;TIGR02632;TIGR02685;TIGR02813;TIGR02817;TIGR02823;TIGR02824;TIGR02825;TIGR03131;TIGR03150;TIGR03206;TIGR03297;TIGR03325;TIGR03845;TIGR03971;TIGR04316;TIGR04504","G",17,17,"pks","pks",0.92,0.05,0.03,0,0.02,0,0,8,64,0.92,"pks",0.832626210768822,0.92 +"AL645882.2","AL645882.2_cluster_20",8258333,8283623,0.835037750982841,0.897403579012686,"RiPP","AL645882.2_7365;AL645882.2_7366;AL645882.2_7367;AL645882.2_7368;AL645882.2_7369;AL645882.2_7370;AL645882.2_7371;AL645882.2_7372;AL645882.2_7373;AL645882.2_7374;AL645882.2_7375;AL645882.2_7376;AL645882.2_7377;AL645882.2_7378;AL645882.2_7379;AL645882.2_7380;AL645882.2_7381;AL645882.2_7382;AL645882.2_7383;AL645882.2_7384;AL645882.2_7385;AL645882.2_7386;AL645882.2_7387;AL645882.2_7388;AL645882.2_7389;AL645882.2_7390","PF00005;PF00009;PF00067;PF00089;PF00501;PF00583;PF00743;PF00857;PF00891;PF00989;PF01925;PF03029;PF03259;PF03992;PF04203;PF04486;PF05175;PF05331;PF07992;PF08241;PF08242;PF08448;PF11991;PF13426;PF13434;PF13450;PF13489;PF13581;PF13649;PF13738;PF13847;PF14535;PF16864;TIGR00229;TIGR00231;TIGR00955;TIGR00956;TIGR00958;TIGR00968;TIGR00972;TIGR01076;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01842;TIGR01846;TIGR01978;TIGR01983;TIGR02142;TIGR02155;TIGR02203;TIGR02204;TIGR02211;TIGR02314;TIGR02315;TIGR02323;TIGR02324;TIGR02633;TIGR02673;TIGR02716;TIGR02769;TIGR02770;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03258;TIGR03265;TIGR03269;TIGR03335;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03429;TIGR03522;TIGR03608;TIGR03614;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR04018;TIGR04046;TIGR04406;TIGR04520;TIGR04521;TIGR04538;TIGR04543","G",19,19,"ripp","ripp",0.07,0.19,0.05,0.02,0.03,0.11,0.55,26,101,0.55,"ripp",0.835037750982841,0.55 +"AL645882.2","AL645882.2_cluster_21",8493549,8542072,0.912955287850247,0.999999999881635,"NRP","AL645882.2_7588;AL645882.2_7589;AL645882.2_7590;AL645882.2_7591;AL645882.2_7592;AL645882.2_7593;AL645882.2_7594;AL645882.2_7595;AL645882.2_7596;AL645882.2_7597;AL645882.2_7598;AL645882.2_7599;AL645882.2_7600;AL645882.2_7601;AL645882.2_7602;AL645882.2_7603;AL645882.2_7604;AL645882.2_7605;AL645882.2_7606;AL645882.2_7607;AL645882.2_7608;AL645882.2_7609;AL645882.2_7610;AL645882.2_7611;AL645882.2_7612;AL645882.2_7613;AL645882.2_7614;AL645882.2_7615;AL645882.2_7616;AL645882.2_7617;AL645882.2_7618;AL645882.2_7619;AL645882.2_7620;AL645882.2_7621;AL645882.2_7622;AL645882.2_7623","PF00005;PF00027;PF00067;PF00106;PF00195;PF00376;PF00392;PF00425;PF00440;PF00496;PF00501;PF00528;PF00550;PF00664;PF00668;PF00890;PF00903;PF00975;PF01040;PF01266;PF01370;PF01408;PF01494;PF02353;PF02463;PF02797;PF02909;PF03435;PF04140;PF04191;PF05834;PF06902;PF07690;PF07729;PF07992;PF08241;PF08242;PF08392;PF08541;PF12697;PF12802;PF12831;PF13191;PF13193;PF13370;PF13401;PF13411;PF13412;PF13459;PF13460;PF13489;PF13561;PF13649;PF13847;PF18563;PF19086;TIGR00543;TIGR00553;TIGR00564;TIGR00565;TIGR00630;TIGR00747;TIGR00896;TIGR00954;TIGR00955;TIGR00956;TIGR00957;TIGR00958;TIGR00968;TIGR00972;TIGR01166;TIGR01184;TIGR01186;TIGR01187;TIGR01188;TIGR01189;TIGR01192;TIGR01193;TIGR01194;TIGR01217;TIGR01257;TIGR01271;TIGR01277;TIGR01288;TIGR01289;TIGR01292;TIGR01733;TIGR01734;TIGR01761;TIGR01815;TIGR01820;TIGR01823;TIGR01824;TIGR01829;TIGR01830;TIGR01831;TIGR01832;TIGR01842;TIGR01846;TIGR01923;TIGR01963;TIGR01978;TIGR01988;TIGR02018;TIGR02023;TIGR02032;TIGR02043;TIGR02044;TIGR02047;TIGR02051;TIGR02054;TIGR02142;TIGR02188;TIGR02203;TIGR02204;TIGR02211;TIGR02262;TIGR02275;TIGR02294;TIGR02314;TIGR02315;TIGR02316;TIGR02323;TIGR02324;TIGR02325;TIGR02372;TIGR02404;TIGR02415;TIGR02469;TIGR02632;TIGR02633;TIGR02673;TIGR02769;TIGR02770;TIGR02789;TIGR02790;TIGR02812;TIGR02857;TIGR02868;TIGR02982;TIGR03005;TIGR03098;TIGR03205;TIGR03206;TIGR03208;TIGR03258;TIGR03265;TIGR03269;TIGR03338;TIGR03375;TIGR03410;TIGR03411;TIGR03415;TIGR03443;TIGR03494;TIGR03522;TIGR03608;TIGR03613;TIGR03719;TIGR03740;TIGR03771;TIGR03796;TIGR03797;TIGR03864;TIGR03873;TIGR03971;TIGR04028;TIGR04316;TIGR04406;TIGR04458;TIGR04515;TIGR04520;TIGR04521;TIGR04538","G",20,20,"nrps","nrps",0.15,0.1,0.74,0.01,0.04,0.02,0.07,36,174,0.74,"nrps",0.912955287850247,0.74 diff --git a/group_by.csv b/group_by.csv new file mode 100644 index 0000000..9b1379a --- /dev/null +++ b/group_by.csv @@ -0,0 +1,32 @@ +"Compare","Antismash","SEMPI","PRISM","PRISM-Supp","ARTS","DeepBGC","GECCO","RRE-Finder","RippMiner","Emerald/SanntiS","Group" +"1","1","1","1","NA","NA","NA","1","NA","NA","1","group_1" +"2","2","NA","NA","2,3","2","6","2","NA","NA","2","group_2" +"3","3","NA","2","NA","NA","11","NA","1","1","3","group_3" +"4","NA","NA","NA","NA","NA","NA","NA","NA","NA","4","group_4" +"5","4","3","3","NA","NA","NA","4","NA","NA","5","group_5" +"6","5","NA","NA","NA","9","38","NA","NA","NA","NA","group_6" +"7","6","NA","NA","NA","14","45","NA","NA","NA","8","group_7" +"8","NA","NA","NA","NA","15","50","5","NA","NA","9","group_8" +"9","7","NA","5","NA","NA","NA","NA","NA","NA","10","group_9" +"10","8","10","7","NA","NA","66","7","NA","NA","14","group_10" +"11","9","NA","8","NA","55,56","NA","NA","NA","NA","15","group_11" +"12","10","12","9","51,52,53","60","70","9","NA","NA","17","group_12" +"13","11","18","10","89,90,91,92","98","97","10","NA","NA","19","group_13" +"14","12","NA","NA","NA","NA","NA","NA","NA","NA","20","group_14" +"15","13","19","11","NA","NA","100","11","NA","NA","21","group_15" +"16","14","NA","NA","100","NA","NA","NA","NA","NA","23","group_16" +"17","15","20","12","103,104","NA","NA","12","NA","NA","24","group_17" +"18","17","NA","NA","107","NA","NA","NA","NA","NA","NA","group_18" +"19","19","23","13","110","130","117","14","NA","NA","26","group_19" +"20","19","23","13","NA","NA","117","14","NA","NA","26","group_20" +"21","20","25","14","NA","NA","119","15","NA","NA","27","group_21" +"22","21","NA","15","NA","NA","NA","NA","NA","3","NA","group_22" +"23","22","NA","NA","NA","137,138","NA","16","NA","NA","28","group_23" +"24","23","28","16","NA","NA","NA","17","NA","NA","29","group_24" +"25","24","NA","17","NA","NA","131","NA","2","4","30","group_25" +"26","25","NA","NA","NA","150","NA","NA","NA","NA","31","group_26" +"27","27","33","18","NA","NA","161","20","NA","NA","32","group_27" +"28","27","33","18","NA","NA","161","20","NA","NA","32","group_28" +"29","27","NA","NA","125","NA","161","20","NA","NA","32","group_29" +"30","3","NA","2,19","4","NA","11","NA","1","1","3","group_30" +"NA","18,26","4,7,8,17,32","4,6,19","1,7,8,15,17,18,19,20,28,34,35,36,43,50,51,52,53,54,61,62,63,65,66,67,70,85,89,90,91,92,95,103,104,109,111,112,113,114,119,121,123,124","5,8,12,20,27,42,43,44,52,53,54,55,59,68,69,70,77,89,101,102,125,129,131,137,138,140,141,157,160","8,13,15,30,51,64,157,166,168","13,19","","2","6,11,12,16,18,22,25","group_31" diff --git a/inst/extdata/rename.csv b/inst/extdata/rename.csv index 6709af8..f1273f3 100644 --- a/inst/extdata/rename.csv +++ b/inst/extdata/rename.csv @@ -9,7 +9,7 @@ angucycline-type,pks,terpene,#fdbf6f,,PRISM-Supp angucycline,pks,alkaloid,#ff7f00,,ARTS butyrolactone,ripp,hybrid,#cab2d6,,RippMiner class_i_lantipeptide,ripp,core,#6a3d9a,,Emerald/SanntiS -lasso_peptide,ripp,regulatory,#ffff99,,References +lasso_peptide,ripp,regulatory,#ffff99,,Compare nis_synthase,other,resistance,#b15928,, acyl_amino_acids,other,base,#d4ced6,, aminocoumarin,other,,,, diff --git a/man/read_reference.Rd b/man/read_compare.Rd similarity index 83% rename from man/read_reference.Rd rename to man/read_compare.Rd index 202b6d6..ae66ee3 100644 --- a/man/read_reference.Rd +++ b/man/read_compare.Rd @@ -1,14 +1,14 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/fct_reading_functions.R -\name{read_reference} -\alias{read_reference} +\name{read_compare} +\alias{read_compare} \title{#' @description A function, that reads RiPPMiner-Genome file txt #' #' @return csv file #' #' @noRd} \usage{ -read_reference(data) +read_compare(data) } \description{ #' @description A function, that reads RiPPMiner-Genome file txt diff --git a/prism_biocircos.csv b/prism_biocircos.csv new file mode 100644 index 0000000..042b8dc --- /dev/null +++ b/prism_biocircos.csv @@ -0,0 +1,20 @@ +"Cluster","Start","Stop","Type","Type2","chromosome","ID" +1,103780,128290,"pks","pks","P",1 +2,255310,261084,"class_i_lantipeptide","class_i_lantipeptide","P",2 +3,513988,533448,"nrps","nrps","P",3 +4,586986,589546,"pks","pks","P",4 +5,2000499,2000898,"ectoine","ectoine","P",5 +6,2559339,2563090,"pks","pks","P",6 +7,2938688,2944875,"melanin","melanin","P",7 +8,3038894,3040682,"nis_synthase","nis_synthase","P",8 +9,3513615,3585724,"nrps","nrps","P",9 +10,5511270,5534546,"benzoisochromanequinone","benzoisochromanequinone","P",10 +11,5785752,5795837,"pentangular_polyphenol","pentangular_polyphenol","P",11 +12,6432592,6458318,"pks__nrps","pks__nrps","P",12 +13,6890527,6947423,"butyrolactone__pks","butyrolactone__pks","P",13 +14,7108263,7120497,"nrps","nrps","P",14 +15,7414295,7422622,"class_iii_iv_lantipeptide","class_iii_iv_lantipeptide","P",15 +16,7586409,7598555,"pks","pks","P",16 +17,7695015,7699626,"class_i_lantipeptide","class_i_lantipeptide","P",17 +18,8504460,8523749,"nrps","nrps","P",18 +19,231675,251017,"butyrolactone__furan","butyrolactone__furan","P",19 diff --git a/prism_supp_biocircos.csv b/prism_supp_biocircos.csv new file mode 100644 index 0000000..dc0d60c --- /dev/null +++ b/prism_supp_biocircos.csv @@ -0,0 +1,126 @@ +"Start","Stop","Type","Type2","Score","Name","Full_name","ID","Cluster" +45266,46073,"resistance","resistance","247.3","AMR116","Puromycin MFS transporter",1,1 +192879,194637,"regulatory","regulatory","1326.1","SCO0203","Two-component
      Sensor kinase in S. coelicolor. ",2,2 +194759,195461,"regulatory","regulatory","524.5","SCO0204","Two-component
      Response regulator in S. coelicolor. Negative regulator of ACT: SCO0203",3,3 +242202,242766,"regulatory","regulatory","433.5","SCO0253","TetR-type regulator
      Regulator of SCO0252 of Streptomyces coelicolor: Tetracycline",4,4 +288986,290456,"resistance","resistance","278.5","AMR261","EmrB: drug resistance MFS transporter",5,5 +291314,292592,"regulatory","regulatory","459.1","MmyR","TetR-type regulator
      Represses methylenomycin through inhibition of mmyB in S. coelicolor: (+) riggered by either of two environmental signals: alanine growth-rate-limiting conditions and/or an acidic pH shock.",6,6 +322243,323938,"resistance","resistance","965","AMR139","Tylosin ABC transporters",7,7 +333528,334149,"regulatory","regulatory","478","SCO0332","TetR-type regulator
      Regulator of SCO0330 of Streptomyces coelicolor",8,8 +373044,374001,"resistance","resistance","247.3","AMR116","Puromycin MFS transporter",9,9 +389530,391123,"resistance","resistance","207.4","AMR116","Puromycin MFS transporter",10,10 +662372,663014,"regulatory","regulatory","250.1","EsmT4","TetR-type regulator
      Located in the esmeraldin biosynthesis cluster of Streptomyces antibioticus Tu 2706",11,11 +663066,664686,"resistance","resistance","244.9","AMR224","Multidrug: subunit of efflux pump conferring antibiotic resistance",12,12 +677226,678861,"resistance","resistance","1018.9","AMR297","Lukacidin ABC transporter",13,13 +721494,722964,"resistance","resistance","235.3","AMR116","Puromycin MFS transporter",14,14 +740313,742083,"resistance","resistance","245.8","AMR201","Multidrug ABC antibiotic efflux pump",15,15 +1193397,1193988,"regulatory","regulatory","446.6","XdhR","TetR-type regulator
      Regulator of xanthine dehydrogenase of Streptomyces coelicolor",16,16 +1202479,1204282,"resistance","resistance","270.4","AMR201","Multidrug ABC antibiotic efflux pump",17,17 +1262508,1264110,"resistance","resistance","614.3","AMR196","Tetracenomycin MFS transporter",18,18 +1265840,1267331,"resistance","resistance","291.5","AMR261","EmrB: drug resistance MFS transporter",19,19 +1636965,1638942,"resistance","resistance","764","AMR100","Borrelidin target isoform: threonyl-tRNA synthetase",20,20 +1677148,1678681,"resistance","resistance","375.6","AMR271","Multidrug MFS transporter",21,21 +1818350,1818878,"resistance","resistance","248.7","AMR264","Redox-sensitive transcriptional activator SoxR",22,22 +1834288,1834906,"regulatory","regulatory","460.6","SCO1712","TetR-type regulator
      Regulator of antibiotic production of Streptomyces coelicolor",23,23 +1863881,1865048,"regulatory","regulatory","874.8","AbrA1","Two-component
      Sensor kinase in S. coelicolor: Iron",24,24 +1865044,1865710,"regulatory","regulatory","490.5","AbrA2","Two-component
      Response regulator of S. coelicolor. Negative regulator of RED, ACT and CDA: AbrA1",25,25 +1871316,1872921,"resistance","resistance","307.3","AMR271","Multidrug MFS transporter",26,26 +1967793,1969392,"resistance","resistance","262","AMR286","Oxazolidinone ABC transporter",27,27 +2059303,2060092,"resistance","resistance","261","AMR176","Aminoglycoside 3-N-acetyltransferase",28,28 +2326326,2329452,"resistance","resistance","707.4","AMR211","AcrB/AcrD/AcrF family",29,29 +2424358,2425390,"resistance","resistance","403.5","AMR263","Daunorubicin resistance ABC transporter",30,30 +2453706,2454993,"resistance","resistance","326.3","AMR260","Efflux Bcr CflA: drug resistance transporter",31,31 +2478171,2479632,"resistance","resistance","350.9","AMR116","Puromycin MFS transporter",32,32 +2512482,2514552,"resistance","resistance","442","AMR150","Tetracycline MFS",33,33 +2543006,2544617,"resistance","resistance","974.7","AMR196","Tetracenomycin MFS transporter",34,34 +2544732,2545416,"regulatory","regulatory","180","TcmR","TetR-type regulator
      Located in the tetracenomycin C biosynthesis cluster of Streptomyces glaucescens",35,35 +2651102,2653031,"resistance","resistance","317.8","AMR201","Multidrug ABC antibiotic efflux pump",36,36 +2691804,2693250,"resistance","resistance","284.5","AMR261","EmrB: drug resistance MFS transporter",37,37 +2712739,2713435,"regulatory","regulatory","490.7","EcrA2","Two-component
      Response regulator in S. coelicolor. Positive reg. in RED production.",38,38 +2713431,2714784,"regulatory","regulatory","1014.6","EcrA1","Two-component
      Sensory kinase in S. coelicolor.",39,39 +2733654,2735148,"resistance","resistance","221.2","AMR116","Puromycin MFS transporter",40,40 +2738851,2740243,"resistance","resistance","176.4","AMR246","Multidrug MFS transporter",41,41 +2916747,2918412,"resistance","resistance","277.3","AMR286","Oxazolidinone ABC transporter",42,42 +3010976,3014708,"resistance","resistance","278.8","AMR201","Multidrug ABC antibiotic efflux pump",43,43 +3116520,3116931,"resistance","resistance","273.2","AMR298","Rifampin ADP ribosyl transferase",44,44 +3354680,3355955,"regulatory","regulatory","932.8","DraK","Two-component
      Histidine kinase of S. coelicolor. ",45,45 +3355989,3356667,"regulatory","regulatory","517.3","DraR(CheY)","Two-component
      Response regulator in S. coelicolor. Positive regulator of ACT, negative of RED and yCPK: DraK",46,46 +3467221,3469459,"resistance","resistance","1218.7","AMR311","Calcimycin ABC transporter",47,47 +3506389,3507907,"resistance","resistance","273.2","AMR116","Puromycin MFS transporter",48,48 +3509243,3509852,"regulatory","regulatory","452.7","SCO3201","TetR-type regulator
      Regulator of antibiotic production of Streptomyces coelicolor",49,49 +3513615,3515160,"resistance","resistance","715.9","AMR116","Puromycin MFS transporter",50,50 +3529271,3531188,"regulatory","regulatory","1500.3","CdaR","Pathway-specific
      CDA production in S. coelicolor",51,51 +3536944,3538660,"regulatory","regulatory","1331.7","AbsA1","Sensor kinase. Global negative regulation of Streptomyces coelicolor antibiotic synthesis",52,52 +3538678,3539347,"regulatory","regulatory","498.4","AbsA2","Response regulator. Global negative regulation of Streptomyces coelicolor antibiotic synthesis",53,53 +3584821,3585724,"resistance","resistance","680.4","AMR15","Calcium-dependent antibiotic phosphotransferase",54,54 +3704767,3705382,"regulatory","regulatory","105.4","Tsn22","TetR-type regulator
      Located in the tetronasin biosynthesis cluster of Streptomyces longisporoflavus",55,55 +3723843,3725439,"resistance","resistance","272.5","AMR261","EmrB: drug resistance MFS transporter",56,56 +3725585,3726185,"regulatory","regulatory","213","SaqK","TetR-type regulator
      Located in the saquayamycin Z biosynthesis cluster of Micromonospora sp. strain Tu 6368",57,57 +3751836,3752478,"resistance","resistance","247.5","AMR190","Tunicamycin resistance protein ",58,58 +3924250,3924592,"regulatory","regulatory","76.9","RsbV","Two-component
      Positive regulator of sigma-B activity in Bacillus subtilis. Non-phosphorylated RsbV binds to RsbW, preventing its association with sigma-B: RsbW",59,59 +3950325,3951000,"regulatory","regulatory","490.9","Crp","DNA transcription regulator - cAMP Kinase in ACT, RED and CDA biosynthesis in S. coelicolor",60,60 +3966834,3967929,"resistance","resistance","295.4","AMR84","VanS: transcriptional regulator of glycopeptide resistance genes",61,61 +3967921,3968617,"resistance","resistance","273.2","AMR83","VanR: transcriptional activator regulating VanA",62,62 +3967921,3968617,"regulatory","regulatory","264.6","CutR","Two-component
      Response regulator. neg. reg. of ACT production in S. lividans & coelicolor. Alters copper metabolism",63,63 +3971388,3972306,"resistance","resistance","574.9","AMR73","Glycopeptide Resistance: D-lactate dehydrogenase",64,64 +3972298,3973357,"resistance","resistance","660","AMR74","Glycopeptide: D-ala-D-lactate ligase",65,65 +3973353,3973962,"resistance","resistance","384.8","AMR72","Glycopeptide resistance: D-Ala-D-Ala dipeptidases",66,66 +4026216,4027671,"resistance","resistance","274.8","AMR261","EmrB: drug resistance MFS transporter",67,67 +4197501,4198176,"regulatory","regulatory","477.9","SCO3818","Two-component
      Response regulator in S. coelicolor. Negative regulator of ACT: SCO0203",68,68 +4231927,4233400,"resistance","resistance","792","AMR25","Cephamycin penicillin-binding protein",69,69 +4268712,4269843,"resistance","resistance","764.3","AMR314","Griselimycin Resistance - DNA polymerase III Beta Subunit",70,70 +4305059,4306397,"resistance","resistance","367.6","AMR262","matE: MATE efflux family protein",71,71 +4421135,4422659,"resistance","resistance","807.5","AMR305","Virginamycin MFS transporter",72,72 +4422720,4423479,"regulatory","regulatory","374.7","Ecm10","TetR-type regulator
      Located in the echinomycin biosynthesis cluster of Streptomyces lasaliensis",73,73 +4427068,4429648,"resistance","resistance","233.9","AMR224","Multidrug: subunit of efflux pump conferring antibiotic resistance",74,74 +4633204,4634479,"regulatory","regulatory","964.2","PhoRs","Two-component
      Sensor kinase of S. coelicolor: Phosphate",75,75 +4634475,4635156,"regulatory","regulatory","516.9","PhoPs","Two-component
      Response regulator of S. coelicolor. OmpR-type. Positively regulates RED and ACT through ofsS+ropZ: PhoR, Mg2+",76,76 +4679363,4680245,"resistance","resistance","326.5","AMR141","Streptomycin phosphotransferase",77,77 +4680294,4681728,"resistance","resistance","891.5","AMR116","Puromycin MFS transporter",78,78 +4842786,4845768,"regulatory","regulatory","2193.1","AsfR","DNA transcription regulator - LysR-type",79,79 +4872767,4874393,"resistance","resistance","209","AMR224","Multidrug: subunit of efflux pump conferring antibiotic resistance",80,80 +5019698,5020457,"regulatory","regulatory","494.5","AbrC3","Response regulator of S. coelicolor. Positive regulator of RED, CDA, ACT and morphological change.",81,81 +5020677,5022045,"regulatory","regulatory","995.1","AbrC2","Sensory kinase of S. coelicolor. Coexpressed with AbrC1",82,82 +5022158,5023382,"regulatory","regulatory","915.6","AbrC1","Sensory kinase of S. coelicolor. Coexpressed with AbrC2. Have negative affect on antibiotic production. Might have phosphatase activity. ",83,83 +5065113,5066586,"resistance","resistance","302.9","AMR261","EmrB: drug resistance MFS transporter",84,84 +5092129,5093323,"resistance","resistance","864","AMR110","Kirromycin target isoform: Ef-Tu Isoform",85,85 +5179006,5179345,"resistance","resistance","103.1","AMR267","Multidrug transcription factor WhiB",86,86 +5337920,5339528,"regulatory","regulatory","1204.4","AfsQ2","Histidine kinase in S. coelicolor",87,87 +5339524,5340349,"regulatory","regulatory","504","AfsQ1","Response regulator for S. coelicolor. Positive regulator of RED, ACT, CDA and yCPK",88,88 +5517893,5519495,"resistance","resistance","226","AMR116","Puromycin MFS transporter",89,89 +5523182,5523935,"regulatory","regulatory","573.7","ActR","TetR-like protein that represses the adjacent actA operon, encoding the ACT export system (Actinorhodin)",90,90 +5524072,5525809,"resistance","resistance","236.6","AMR116","Puromycin MFS transporter",91,91 +5528093,5528861,"regulatory","regulatory","593.8","ActII-orf4","Pathway specific activator of actinorhodin biosynthesis in Streptomyces coelicolor",92,92 +5875297,5875966,"regulatory","regulatory","491.2","RapA1","Two-component
      Response regulator in S. coelicolor. Positive regulator in ACT and yCPK biosynthesis",93,93 +5875962,5877399,"regulatory","regulatory","1042.9","RapA2","Two-component
      Sensory kinase in S. coelicolor.",94,94 +5940592,5941267,"regulatory","regulatory","354.6","SamR0468","Response regulator- LuxR-type (CheY superfamily)",95,95 +6008514,6010062,"resistance","resistance","360.4","AMR271","Multidrug MFS transporter",96,96 +6058384,6059554,"resistance","resistance","339.7","AMR77","D-alanine--D-alanine ligase",97,97 +6321290,6322367,"regulatory","regulatory","781.2","Sco5784","Histidine kinase",98,98 +6322366,6323026,"regulatory","regulatory","483.1","Sco5785","Response regulator- LuxR-type (CheY superfamily)",99,99 +6354011,6355559,"resistance","resistance","442","AMR116","Puromycin MFS transporter",100,100 +6419307,6419961,"regulatory","regulatory","493.6","CutR","Two-component
      Response regulator. neg. reg. of ACT production in S. lividans & coelicolor. Alters copper metabolism",101,101 +6419967,6421212,"regulatory","regulatory","939.4","CutS","Two-component
      Sensor kinase in S. lividans & coelicolor",102,102 +6432592,6433618,"regulatory","regulatory","794.1/297.4","RedD/RphD","Activator of undecylprodigiosin in Streptomyces coelicolor/Activator of prodigiosin biosynthesis in Streptomyces griseoviridis",103,103 +6438205,6438859,"regulatory","regulatory","489.2","RedZ","Regulator of undecylprodigiosin in Streptomyces coelicolor",104,104 +6518092,6519544,"resistance","resistance","277.5","AMR116","Puromycin MFS transporter",105,105 +6527870,6529472,"resistance","resistance","231.6","AMR116","Puromycin MFS transporter",106,106 +6688704,6689961,"resistance","resistance","851.4","AMR165","Macrolide glycosyltransferase: Inactivation enzyme",107,107 +6709908,6711471,"resistance","resistance","253.5","AMR137","Erythromycin esterase",108,108 +6890527,6891175,"regulatory","regulatory","260.9/502.6","FarA/ScbR","GBL receptor
      Autoregulator in S. lavendulae showdomycin production/Regulator in RED prod. in S. coelicolor, SCB1",109,109 +6891292,6892237,"regulatory","regulatory","743.9","ScbA","A-factor biosynthesis enzyme",110,110 +6934506,6936138,"resistance","resistance","377.2","AMR271","Multidrug MFS transporter",111,111 +6945704,6946379,"regulatory","regulatory","151.3","SrrB","TetR-type regulator
      Involved in the regulation of lankacidin and lankamycin biosynthesis along with SSRA, and C in S. rochei",112,112 +7090612,7091761,"regulatory","regulatory","762","EcrE1","Two-component
      Senory kinase of S. coelicolor: (+) co-cultivation with Corallococcus coralloides, or in inculum of 2.5% (v/v) B. subtilis",113,113 +7091757,7092432,"regulatory","regulatory","469.1","EcrE2","Two-component
      Response regulator. Positive reg. in RED prod. in S. coelicolor",114,114 +7172393,7174841,"resistance","resistance","272.9","AMR261","EmrB: drug resistance MFS transporter",115,115 +7250905,7252420,"resistance","resistance","237.1","AMR116","Puromycin MFS transporter",116,116 +7497717,7499361,"resistance","resistance","1121.7","AMR127","Hygromycin ABC transporter",117,117 +7499507,7501850,"resistance","resistance","256.1","AMR161","Tex-like protein N-terminal domain",118,118 +7586409,7587975,"resistance","resistance","336.4","AMR196","Tetracenomycin MFS transporter",119,119 +7736806,7738927,"resistance","resistance","254.8","AMR224","Multidrug: subunit of efflux pump conferring antibiotic resistance",120,120 +7782654,7784535,"resistance","resistance","263.5","AMR201","Multidrug ABC antibiotic efflux pump",121,121 +7919672,7921208,"resistance","resistance","236.3","AMR116","Puromycin MFS transporter",122,122 +8345037,8346285,"resistance","resistance","373.3","AMR123","Chloramphenicol efflux pump",123,123 +8488517,8489696,"resistance","resistance","415.1","AMR123","Chloramphenicol efflux pump",124,124 +8553427,8554087,"regulatory","regulatory","472.6","KijR","TetR-type regulator
      Regulator of KijX expression and kijanimicin resistance of Streptomyces coelicolor: Kijanimicin, saccharocarcins A and B",125,125 diff --git a/ripp_biocircos.csv b/ripp_biocircos.csv new file mode 100644 index 0000000..72826c4 --- /dev/null +++ b/ripp_biocircos.csv @@ -0,0 +1,5 @@ +"Cluster","Type","Start","Stop","chromosome","Type2" +1,"lanthipeptidea",246868,272469,"GF","lanthipeptidea" +2,"linaridin",4886990,4940861,"GF","linaridin" +3,"lanthipeptidec_d",7407798,7459926,"GF","lanthipeptidec_d" +4,"lanthipeptidea",7681180,7705273,"GF","lanthipeptidea" diff --git a/rre_biocircos.csv b/rre_biocircos.csv new file mode 100644 index 0000000..788920e --- /dev/null +++ b/rre_biocircos.csv @@ -0,0 +1,3 @@ +"Sequence","Start","Stop","Locus_tag","BGC.ID","BGC.product","Domain.name","E.value","Bitscore","End","chromosome","ID","Cluster","Type","Type2" +"NC_003888.3",256525,259687,"SCO0269","N\A","N\A","Lanthipeptide_RRE",1.2e-11,43.9,240,"RRE",1,1,"ripp","ripp" +"NC_003888.3",7696261,7699360,"SCO6930","N\A","N\A","Lanthipeptide_RRE",2.7e-20,71.5,253,"RRE",2,2,"ripp","ripp" diff --git a/sempi_biocircos.csv b/sempi_biocircos.csv new file mode 100644 index 0000000..18b6aca --- /dev/null +++ b/sempi_biocircos.csv @@ -0,0 +1,34 @@ +"Cluster","Start","Stop","Type","Type2","chromosome","ID" +1,106723,110434,"pks","pks","S",1 +2,307598,308816,"nrps","nrps","S",2 +3,513997,524488,"nrps","nrps","S",3 +4,1405117,1405750,"nrps","nrps","S",4 +5,1477976,1479275,"nrps","nrps","S",5 +6,2290771,2292100,"nrps","nrps","S",6 +7,2559357,2561673,"pks","pks","S",7 +8,2622623,2623751,"nrps","nrps","S",8 +9,2762807,2764220,"nrps","nrps","S",9 +10,2963180,2964527,"nrps","nrps","S",10 +11,3328396,3329098,"nrps","nrps","S",11 +12,3543364,3584771,"nrps","nrps","S",12 +13,3797561,3798752,"nrps","nrps","S",13 +14,3941523,3942822,"nrps","nrps","S",14 +15,4398632,4399859,"nrps","nrps","S",15 +16,4799973,4801182,"nrps","nrps","S",16 +17,4923207,4924557,"nrps","nrps","S",17 +18,5531212,5532682,"pks","pks","S",18 +19,5786632,5788168,"pks","pks","S",19 +20,6447994,6454855,"nrps-pks","nrps-pks","S",20 +21,6558978,6560136,"nrps","nrps","S",21 +22,6804366,6807194,"nrps","nrps","S",22 +23,6901254,6931905,"pks","pks","S",23 +24,7004464,7004725,"nrps","nrps","S",24 +25,7108290,7116050,"nrps","nrps","S",25 +26,7249252,7250602,"nrps","nrps","S",26 +27,7549538,7550897,"nrps","nrps","S",27 +28,7591514,7598516,"pks","pks","S",28 +29,7734541,7735729,"nrps","nrps","S",29 +30,8053551,8054721,"nrps","nrps","S",30 +31,8140076,8141438,"nrps","nrps","S",31 +32,8282564,8283500,"nrps","nrps","S",32 +33,8504751,8523677,"nrps","nrps","S",33

    9r zi`UIIOwSTqT(PAwvWOTvd-iOva^4)b3@7k83ZHFWUZzf|Q)wWDJyyrioKt1GX*drj zcGXTSFL5+Aesh^evJ{*|96Ci1$9Z=0i+!-~vASNRGud$KWn!hxzS&1Yk;+M{qO^Je zU4Y_1xV0bg#<`MOvokpX{}7CKpz}s7X7H15B6Wm776^l50cj1f!a(fbnP1XcZ4dGz zqA$*47^Q`5LGYx=8($w~w*$!hPgvjk;@n5{p@?q=rGyCe0Lhb6mY)w_ZTi2!=}9nG z_p~sj_7eIKiH#|I9%8TX8|fo+9IJf&d_p2ZPZnR*cb+@TyK7p;v1LuWPyHbW&8!Yn zmngwr2AB~P!idYa>d5RXo!A~^0tMN(xO$XoXFr&MD1%3CmnTk;BHe9hXAKrOi*t0Sl5 z{Y-rm+_3^+*K|dX!oqQ#G*AbKgnlR_Y1dI9U{&OtcsHu@V-Tz*Q?+{XPa@yr*2wkJ z-6EYC=_z0rBoH*YO$1pLYNXo~54EH2$4+GZCxMZ)q|@7{k51>At<~qmZLMY20!bOq zoz9cd#7n>qGXi%6%7Fe!X^PEGn>m7lzM^89B>>VntcVUtbZF3 zzs*qwh#n?G&3Z+=t)UJhbn-*|Q=xNv8!gp1s|UEv-RalJ&&u4vrFUQR%~#7l*V(p( z-*A5Cw}+7v1=5s9;p5zG7e2j%@O%WN6DGm<_Sh#D7cN|gMiG>)J;%t%eQ3poOS~uM z7&3!yQRWqwS7-ajIyRp zNIve&W!4Jy)K)uw{zFLW{LUnjK;X2#+|#~RHaO(s z#ZG zC8Dt=xRk-h_HnzbeUHwZL1QKKV|fossGG3uw}AsT0)>j)9zm1tN5@WUgJpH zjF-q!x;nLD%Dg({Zw?Ak_GMkl5a!d!>!UHSbt$*NT0*)zQAgyoS%2ye(H9+|1@vW3 zj{fS6!~|$WhCU`=@kj0G(kB!kwMdI9T@s=K0eYVE{d zQroWBffR$vuNOVtht%**u-CVA5gRvV_SDs9L;Hno)8Ok^gg+;s21?4=AheJa~yk8sIr00s?M07 z^tBJZdd$Fu$2Q9?lmI1yXHhf~8s*>(1Erz&za{tl#*-&*G{Jx?+)OK*qg2h#^x5*A zoq5w_;xwDyS3_1mi*NIe33(3&%}?1}WnOsQDE|oQ7nEyH?ceUdt2}-uDJiIbVW?54 z+1xz^N3V9V3i?+xA>|v6;-55LnsHDVl9$Hn4MA93hB%?0as$Xr8D2ovPrtSU1`Q|* zf8KU|gqc|n=_w4WScif`oO}`azQ;L=ms#cE-+Y3nf&=Yu*!tEYz324OUBH0^m@qCW z=@q>~@CLK54n+^dPmAak5?$n4KoTI!?zi;yzj|)`)S9I0>pKg_Gn|hQ1GUvwsqx9k z5S;Opp(L&Jv#R2)EvXWzB(D<}RuEsnLF!KM+|k?qxzej8?)RR>l; zBM>I>1p)?+TxeI_l`H-AOq_w&P(BT#+~A`fI(Dqy;VBv$sO3q!Y|^4GdA~Y4fDm6+ zo>?^o?UEq-EdOvOg3v+G03KU1V)#Oejp($rwkV=OisTJB7RBv`Z*bZOCBi$1p$(hw z0Cn@pyzryL%I4jld7ayA%&E;b5yTEFHByiPefC4;T)E;Zx(xhFaM0?IrE}+#!Mv5F zyDxSNL|Qgs_Ux7fh42|i>q3=QMpGQ0Qc#gt4}5UEQ%r3D|;kYC=Q#8vCn z3n|eK6xk-{a_*(BnVe(^X^S+w0kzB-2qaGAW8q3O^?Ng5vTOJ5zk{4%dOcI?s$*59 z*c9^HyoD}s6*4QADGBpu0?jQ&BF8_7i@UhZ@&54inm$I;$}*#T&CK-eqK;Fh^}gC6 z|43ZKU(H1e!j@uFTat;pcv(Y|8n(`M>#^%hFFHc@axLOlbuhMFb!XtZ3s$ zlFM;%q8DQ&Rr&@OQWnR_z0=kGS>hBJrmv-LgnQ77V<$|A_|i4X;u5(CyV#rX75h;? z`Ly(^O2{NDZ{EKBrt#)$IU8G3G*O8!;g}WDANtP4-8lR*tlk99N~uN2Kcrb4R<9L1 z+WBg2m#PXsU+>v2rD;A!$;qcl~3Q+`n$VyW{A?4JURg-T4jPUZxQl75D5Aj}UY9qDy%@AKd~rcyeuBUv6zs z{4SrVNzX>I2j=bU*s1i&>C<>7^qO?UXVb2@h``fN zyA=QW4@O2;t&_{&7?}>V(fRq?{yucqBd7mlWSZ^P-Ts4-*`wk6Z$J7EMg~~(J0tUG zxjp%mMzySdFe;lgyEJ^1cFP)*W^QR3iMV}4TG zxb4))ZFN92l5NzuWiv+qjdMw?-LxNjXB)739^;nI?&J0(j1w|5z_t2rXAfX}p0nHWiTn!<&NeEvz4A3Q+PB^N zN6-=GZH+WEtaYy)3rzK|UT_7LRP=^(=1$K{{1Kmv-FPOx0O0ccLq_nHu>U6qWM7N?J_leatc`8?^urgvh8}bV^#SA)SV#2b-#NR zDg>?*2P*K1n9mU)d~32|8}c(hMFXjbgAz$>r2X)>Ix~%p?@Fz+cJ11LD0@^ZLisZR z3{i51MU#0kREx?PVI#S68$txo6JW5HZ=&#gv6Hu6||tyVcSu<$#~{%O3NIE zxDLf5wNl3QUB1#JyL4$+%BvU%Qo(wiv zsyUVs7A|gX@gyyG02t_pj7F7>#ef1dmZ#aDBrJYk}tG~oaHy( zp}LY@KJlzuo*Js$;DAEWp@!a=k+TBlg#@#u8?xVMP6q6yin+^^>fd}kPzBrw zx7}+0cJ4ai{ZHyxqM%X1`lMl{?T86W$=5i$S|8oHV}}OTH89HK$y{N#&jRi78-jO# zGYd*sl@qWR{Fc_N7o@M^aYi4?G=^9%suW`u@qm}P0c0u4fVJfK5FAaQ#~9heV3SvL zcfZ8xNW0*iw_TJzwH45SU`{+YY$$hefRgq~&oT&3F>{!lX?*4Dv@Z_QoAI?$|u%N|siDr_iQ>N^Tk3<3?@a*vR zj$bVml^@Oxx8w+MUKRQIWqmZfpVKlcW#rv@V&9!%BNs@-Y1w!FUAPZ%OopT#lDV;T zUf4S^X@Zm@b&RIxgtc1?japM3%TnRA<+u#R8?<%9)^Jnz`!DnulI@U9QvYM>nh5}{`+zk42Un` zHWR}fV1!G^{prm_;B!QRq<2?o?Y5 z&|(&<a@^!7OKJNl&x|+H=572RX;ym-C8VS}S-NnAdF_ zCd|<~g_aP0|5`$YCr27e)#BlhkFloGAR$-3V`Lt1D+6Q~A$?Wa=jiAc9zHb7^%EN2 zGZ4nSqw7kOWy^LFPlz?Q?%eT9*TJ_}kM<5p7sNG{uA#aM@qWV7@IDee1=`UWtA=X1 zU<|qX#Fk^X=87KyA+}zH44z|2e#g@aH5}%ug#Ty4_*&r{jR? zn8wZw?0gFBf~?}SaWAs)z3m1a;(zNuUhi-TKve@rXR&5Lh(z#GffBL|GvO4w&vXzn zU`9=xLp@9e%ps_zrY1hWf7cuf2m9~%Sua!_q0aNqKyGr^1^THT0TE^DlnWB2AG_fa zi$$68htzxuj}pAffl*SiAAz^|_`CP)!B-`V^iw+!F8d4@Er269oa754W$4owtKTQZ#h`lWwGf9_-`Dx@JFS&80kS8KpIRSc!)m;uHv54zB z#lx`A31W}9s=#bH>R+kMy+W2`Cy6gKjpf}cNtDtrb9#`06_fnY&9NW2Q&a#99srp% z8C^i`EQ14Jq!$BmBTgui`3IN}AG>S0W{5z2beGXevlPsVGog;!#x`PN|DA%@r|WI% zC8N1>nb{Nc9?Vb!jjtHI1Cf=X8Q=0?Tp`>Pc+7re-UM0g0nzU0ka7N!oyq;MLn6ZX z#U=FqNXsYL^kQ>!d!wje3JP)hqNqWcyMrhL3F!BJmD5w9{a6@FQH6u2{z7+>4F77< zq>18iq~**{OUIG<3L^)f(OFZoIZO;8b^N~o7gaK8auTtFHZgJ3w<~-c+!^$401;5L zb*0~1dr?}D)SM!R=XB31ES$;#&soC}RSO^-K_vsk>LhrUt`Y+|*gMl8-anBA{V=hw#rRY?AZLL=4)X%?;nY?_L z>W{jYKYg_R0|NP>$ZXmV9*}v+SAQsVH)s59YS+J%tkoaqA6U%~^(sM#uYZUq|KnYM z055q0XdrP#e7h@sG(a^3;Q4%Y;`Z4cKVH#>!EE0}y+2QTDkC8G&>k>vr@W8W+1oYw zVSaoHsZ7lSh*YQ4X?p#}jhgH^lT|2u588Wv*V&#;wgB0 z4qiJ;@B&bK^vzIf-EV)roXo>PCxjln+QxckBU4sG>_-_=C3P*OQP54biApV6U|KSY zvSr@R#WL$q##+dl&iJGwU0E_}0|{y2!X;Xw6-RnOFkXndbX~<~n?<CuWUri`{x**%>TpJ?_b zD6d`IojX|^0M{3)r(cirT}OV3J}O%DJ($*v2cNVw*uTJl9EQyK6z0YJHqSgR=!YQI z#~K`BA;JcHmYQ$o_rmve?$MW%EpYVbWL6Qc@0YKx5E5SjEwu!}N$HrnH=o5N(Jc3b z=}YkOQE#M97*kN^`@)DD#yM7d^WMFCCxliv7lE6KH6Xee<4A|rn+d`f(L|ltkk?&q z7)|1Ery863!sSvkKg9T19NsuqHb3b0ncVjt_fdoqVhfKJR(;S?>T~kX+9>ww@z6vC zC>lc^9*MVN!p>gBrKMsXT6-aaJCR=?t>SMUn4a|o z{0@8hXmpd;DT~G<$P-|tr$hZStXtBje)M|NPiIhR$969LjcipE&L`I@yX|H`K#7dxB`F4Zi2;M^FyEnQ zEJt`5TZHLrDEiwogbD|iiL_(=9L-0cgER@Pf;<6o>(*_TX0Fd__)XG04DE~qvn<0a zKBaZNZL@CO?c`*o&6Ib|aNwt{hgOuIo|EK^c%wc+A){wDg>si@#6hX83mQkT#&-U2=`+pfKDf~6b8ZZR7j z{mng!%mkIj6Na>sNeZYkaodqm43rO6_;4eTVK}_vBo<9V%V%GsB3PMr*@-(uMH7qT z2K~8C@zbWkjmTz0qYa3a$T5nareWAX={n}(K64~W+b@SMeW*{eCvP_@DZ!>uq^068 z0;`~)RSEQf02#wc&pN)rMMMXM{Ts(dQ( zay$h5Gje1Ns64?t_<-_=m`QMxyWuy~Q-X0+m%ni6wnJ=tv4A=;t(AwzayEKlD>RjY zWpb9+MXh5++E3M-g@xXj2_v3u>YLAShJQ+11GI?Np)n+E4@}vy8Y9VzK@%|%JoR7v&*gHo`>f(dpxP%TBYBeHm)_FEM2js zWv`rqs<98tqY@UjTe9{-(krDwsdk@_&zzrLS`m?0*rTpuV_;O}7vQg9dWAP0;rOOU z53GDkH6As#b9Pm&9jNFoXBNSDBvBHS_)OjC8(!r$zZ|C84v$P{)y(pY(u-L4e9i7Q zJf7y@gmR$7j!|XzEUZ%Jt?Tk;qkGoJt5>gHgr*k!ET?>+%fn$=I^eMJ=zEWV&venF z+uh4Kv4jevn;sy72dSP^ZPKQ_>C+`o`Fj}v#BtTIJYThO8QA&)=Qi}8xOM5s5mj8U>M91o-kL4N3LY45`eD)J0~5huZ#8a3LU@w!YV zI_n+k85FM3;me;p4}GXJkpT>GRGB4c(Q-jw5p3HU10BvW@IRwM;KmGC9tMC(7wg3lY;?_zw(ss5fTy>O<=b~ZKOlNO_iH| zw{6P()TcfWP7ND2^zrqbuyNx?>F0k17BmHf+AcG7xF>maK2tdsl{IuF%N66~oLBEr zx2X$GPqW7^tNb&kL%QhM*x2Aa?gI1uin1Yz-9-|EXI*Fwa5hl(4Qg73x==Pm+#i5Odt4*}-sMlom#!EQ(Y z!<4JBsLn4*-R`d4mt^`58$c$u728l%93~&gws0&r3L9RTuWw+`ZIIo@U5MpX-y9Fl z1oWNi@UnR~l{AdIX80VY(k$NS@g}5v)HcuX6+@ zn!rOZ%P1dpB!%*n<~ec9@Wk16RiewG!ii*nDdTK0JOm)B>oOdJ_i zLU`}ZI=Ks@bSGewnYp>9*`xF6Yi>4tgF38LBrruQV22c8=A1chtfu2dA)MgHy}i9v;~7}- zj_U8%$&)AN4A80ai(K|~TZgYmp@yB?7(4dEahU-r>a0zr*D}3`H<@q0&U{mDRKP9^ zeP(O4sc6rF7Ll7ClrOyvtKh7<;Oom)nxHLGK}iFJ4%o40@s-G`&d5*Ja0GK|rDS7F zH5v3H>@tPo0PSaMXL6#)T=MPxW|f85V>)ED&6Gt1I^uln*s)FTf)t93#Ge`{6wzrZ zm{30W^Unk5qeS6+7aiFp?9?75C+Bd+P4$@tpD^=~Di0*yo)9WN`V4`b4Y@s6C#ml6 z&(|d=gE<>ZY&5oi7ZR4WZ^$9lb?KJlL6;AcALb$y5N8uG4(l1!Pl7A6j_-1G37J#Q z>`_Sf;Nml?@7ahH)v!)K!Dt3x;T4MKiuV$KcJF{jg2KZbS#w5|KV|d;I%$H z93OxGNn9K~7n=rz9#Jhz35|3?#wbqqI8TiUyjF0PUpkfEKHup>#P$b((KNaCK;e|Q zvGmzd`+~4;q3Ko=1BuN<-Lrv#eY9Cpb5duceM)l3)htVms&pBSu4Ki^m3R4#REvYl z6q`dY?M{6iYv-3RvlcDqsB`s6erbd)T;i=G}p~Fs{f)k zDZ2VkMT@Qrzx}0NbNLv2ZU05N`p?ZbeCu50Z_kgfcvZi5t$Dn7c;`v0u6*b{C`evK zS=}PJl?pGOYBVT#yu2r0|Bvq^JA|(hizM#w^{I+qE?%@65zFLa}C~tUffX9<(HQ^uG*m*uQ`OY{?+V?y+C|qOFq81m9t$>CPO1C3CLXt|C!z zClhHH#~m`(t=`tPy&@xZSmmvC9M(s@!|(*ljER7}&XjJ;5W(1CSZB@5i--FvI7t&_ zqdb0GeVXB1VMoPrC_8+A4Mp_!F>(i=pB7Czx~l;Y2~!R+pQo2B7H9-3cInK0?~o!A z_tiX?aez~9I!^F;FELU=uy|1@aeg?&VR^+I$Cj%G4pY$jf;t|IAOE zJjD7E9qw|gW)||mTWy!X0rFdM*#_@flr=tqfjT*ld6n{tE18HZDZ)gb{%Rx7sE=yK zLVl@FJ?dWR1bo10M&41*V|bL3a>8~cfEaQZi?X4pp~Y%_#`Niy8Mo!8cl!2=#1u(I zK=B@OCPEyD=8UgF?@)$5yhtJfqOZw;hHll!>Yi4rYP?;CT3nu9jQJ{+VYTM{#G|uR zbD3b5bZxxH{m3B;md8KZF|qyv6L4Pdn`&FLS|nOCR1~{i~;Cqwb72%3nRY$R1Yz)q8;P;6J_Y-(y+$DncIg%>wx>g(&jHk5n0Ch;RY=egSk4GEV`AYofk<)x4%sk z&7w0rbldQf`x+s&u8tsC$-Zu(#Y_Z1Y_!zcc}Rb0g_lO_$)bT0Y29*0e=6fFeNV>=vtw>Rf!iTZ-rQrk*~us%YW!E!<~ssgdt3Nb>*y z89-W0_`7r3(Xywz^31c~Sz_LjnHl4mg~2xXhh|OI!dy7gf=`W)Jw>!|@%Y8NgU|0w z4k@p53RBS(zHw;XR{Do`QW~*-F)99i4?YQ5@<;)RKF{@6pN`K9d5g73yQ!>N0)*2q9?HJzXA!hS}!Ml7o;hwh}n zqiq|Dpo{CoNjqnKkQI?lF}F*ViSlB6nJ=cuD5fo#3cD)g!%Q`RM|@owcsz?d#36Zs zEuNq;am3AQx%e~XRBll-DZBoAZp4Y$V}=S*8o3)wN#gG26qk(KFNzo^ra z>Q5A`+BuNJrcNt^5Pb#X5tdkoh8~WEgjDMYxj4exrZ&YUfmJh@wI{*bFgcd6Cj>K- zg;h$?S2XBDUMxGzg1S9$+)Z^Ao{-iTWDGouWXxge`d{cKkBYoT9R9~ zb{^aXwk*K5vv4OTn=ZFf8dW4b!>4^B$Xj@uo0@sBQZS>DFK{~QZj{c9S1X&Zi4Mda zIaetwwW%ElqvbHM%rHqvI9v^-JkqYS6%D`qy{1NeKli6b(vIa?=MiD8hiJN4b6YTR ze0)lG;Kjx6zOT59e8lAT&4NT`$rd(n>pjB#IGF`2k*>%JtuHXVbVsxUBiGnK^<`>* zq2i>+ioV*S%z@-av~c26{x-eLsRoKjy2W;}XQ35$$X8uXZn|A&QHU~$Wgnqdj{ zpR%TK0c5jJz1oeT(xANI*0M>}q<0N%!%wM%q?r8W!#7g&Nn1~*fgc68=^2=ia(;|| zQ@Z(JMZeex(sDSbcf7T=n=gCG=jdtNILb|Rf7`nusH)cbEvci)!nnHSEr5)B$ivd1 z=I~OtN~NqCS1=EoLmim|K~XS-{nJhr{}P<6`Qf1KWpC{qRgq3xMFaYVwPj6H^Y1-* zQUKfh@R(Xnw=r(pH;wzgs^+)ZhRHp6e3eB2xOo*7205K?U|K;7)f9oXr=f@`DqH^3 znIjB&wk12TZ(<2-D~Zv~O`+_ORvqu`cErv1R&`Z6$8vA4q1J^$w_dP=oBTG)zy?RL zQK>ACtkc)r*P=`9@*`K`z7YTt#MW-w1a)kzj0Vo)7&yxle`9~`+ODRFo*#Im>b?CBH& zaCcyDdP>pY?hV$=h@6!l<5c*u?H$SmvF35<%9cw<2IPatR04BO;9vnJ=A0=(|N|J-?|V7v;k**qhAONxB+Pb{0?lIgtwspo&!3%)VSMZdb_I$KGIS}PQm0s z_h03Am|o>O*M#H(be{S}j2xPYY4L4bqNE3A@4N#-WT;}QOMAD0LTIUM?@xH zMkdV+T^MO+zC_QrmG(}lH0N6am7S}|?}xhp&$?sdIGa9{8Sv^J2azXV9UHYXGd#ZW ze(d{_0;fLXY^YjQWh6QBQr!mZj4Odf(&vgW#0987fAsfPB)GHtE{sIp?oYywhTQ+v zO9=qzgKqnb>hw5ejVw}s)sduEq9VGr>i&~fM%S0pvR(Q(5$sZL_j+-F!fEiErN`8* zv;Bv?3>tmS=aB*vQ>-YQ(zT?~#*o_F(a(|PaJE7T&qB?Va9kUXh)KK#?EIHKy?rc1 zsR$(-#9c}zIUijU%C>MYc_;xQ)qNPH9N=9X^BP7*;y^@#LXn*CW9|>b*2G&1(g@>6 zwhk&AhGo~o97))i$pWSNaz`)O)Fm~#x-mrr35lv$#-GBCK1b%`LComGTrk;e=oj}5Mr zeo>(gS;5p`_XA(rXrQ;(qA|xJFSea+DNQA<1dM(TcfRTGYknZ?B)1jKOl zTk?|oxr6YNf-D@^6}a7P4N73=^px!|2gbI63P%eiDBi*mFdP|9L#$HXt$kv=Te_)Y zZA&yC;|yJ?B;R+@tliwMSU>bA5M;?Hz^s=;=UBO_Va_$z`5Im3`1EPPZRGIqkiv|kj?0^SdPD|X&91P! z5Qu47B+c!sN>F+swZh6mY$k=Le(_vp*(-;&`l`6R((QVfIewU;u=r3EYj3Oz2Lj zioZ%~H6Z*_|7HUbP3y7rj_n4IzU8z{?b_1rLQ-LreX(UI9)xBKqsGxjFFW8W}4XIo7cqpJP6L&KGBY$@NTsUq5cEK;H?Y~orbZ+9{BEsbEOFj_8f~ka zCb58ldsE?#p$OSWEeU9%UR3>o-J)VQ^{7KISwCg&JUQVLK_P#lTLG%eSYu)tBeOA? zc8((GXRt|0;Jj5KV}G<>!EkDvv2%5Sak7b%!AVhPHJEtSEn0if@SdQJM(aLyI_9eY z2Q!0{lIhUcp<-VQ?aUp3c&MtBK{7e$ZaTk&d-E|faO3k%V(V|shSu(y^8&qhWfQqu z^qhHS0I&34!xe-=(^Y(&xu$6iU8f;7tDRj} zDDnYF^wvZ@cWUq+jsK0p+0Jw7yE7WMvw(sUA6?0_+))|a|6}$Y`Id{ z@m(DLzBrZmWKN_PKu%cD%vjaVs~Cz9?^w*GMsy2VPRhC=mGRaKh0cA#57*q`E4mU_ z*R_SK*psi8cDVvk&a>Emb|tfMU!|!)st)IqVK7*tS`U{$Y}KvM&eF1E6aZTc%sX}-^RRr zBbk!`wp{&Ya6EZG+qDl?t7_em7PBdyKZ{AaTqu%z*m*;~W!rFOrH5(zSsEvzrXIW~ z<5*SLrtr7`nZ^|9#}x{eV)WmUxx{wVcXmHu70;8k>5jt`VQeejFQEC$Jx8*55wM|T z6Yz-w`VvblSPF^U4-gjwWua1-|Fpq=rNDxA5dNnP2|6LP!yBc4+Wun@+u3Q#gL`W@ z5ht=p=Hp=aduD^1qxtpq_1&ZCmW~5rvw^U~eaqN++TD2FBMVemOD(X@C*&X44l#fXj5cU2A(2@;ZasykD2FUyq%M5CB^iFIYI9fSWg3 z`|F&6f`bQyE#EURA=P>;1A#u%mX_(77|xq4J!07LUu>nNrMpvwm)r2{v4fYAkc6kA z1x}G1nO-!Cf{eEffo;kgm32iY7q(Nzpk zHw7mtBUv?!?b%~fIB?4yDAM91SfoQQ&hlrLuATj(DEBeLUbFTN;T(V;2sD+m-QJGN1D}P6la+u&){_|z>**wR zVQ?uN*=$Ma4;G7iSJk5G9dqlvVK~6i>i3CcP1Rp(-I|Avh-5sk2Rl5T8%%h;roPHfO~m#w{XeAdujEKLMY>>q zsH~seD0Hi%RCKat9AF{?e z9IaK@pV3Mo6ab-{x332)_G^aUFV18K-WnUy;$OO%d!y@QZ_9U9G< zc%LQT+z7|&lJmlN$$GGrdeqK5pwp2k8*hKE4AZO2s=CX4u-45X+Amu<8p=#pzvNZ! zkjhZA9jzV`DWi(+QZ}Os{lX0PR_(t#@@Lzht*26^?IjOW8T^|`!-6O3Zxi{ zHTMxj&ZIU_2(fBDmuNfvc)=&=c5^iJ4Ht?~whd^_k$)k`eRaIN9=Z$vN67WRfIGNV z(szJ0yOOG=pYpRC_8)|PI8D%p?s}RR??}M4mt`M4n-s^S!@|C;s9}V$#?CKKFVCDBFxFve|x8%Ng>pSOWlRhgc3yONSMo0w9>=(6AoZfn7PU z9?{Rnf;)p2!|V<36&*bBC}Uw58fIgzmRdjDxgqz)QEL|>&oHX^4d7L6b|Zf?_H8f( zjo8akZDbWh;S8wcd?e;|muCI$W%Z~9OFD$!T<=xgh#Vk@lUD(7ALZ0BK>Q9jOJmN$ zbh-P)NcVtMf(G5`RXyKN+4XM4zf=2)-?!8^D#%G~1IQN6DD}>>M^w^^d4YY*g(ib6 zhb)ndy7@%KiY<|FYly`uQJt;3){0}3AIb`iVw3|QXw6*yqhFTwAC02vg!4lohxz%| z$bj}XI{H_wDU}VXm>XR$MW&Z!h%Op547J`ONQ-6Vxn>4(Ykoz!(|Vd=DAf1}b57F5!pxn~{EJtc?1Wa9nXJMfyjK!LwkpptBn6R_20r*vu%)!f= zvF9qoJ`>jf(Y|R#?i!sfukX`!p`YQ3heYhwzAZ}Vqtnh7Mg)XeN@Rl^O#DkY8Gqhj zfa|$88cF09nkfYsgCnO{!!@qur3gHN5#*t#H%X)kr#epG0Cn=)})7fjPNrV$JR&T49nND-D&V_cNfC_?L~G zZu55ob`@3`gep>{-n4U}DIrqh0}+CLu(rz;=&!i^ z=3h#)5B1+3m|j@XQ2F_7_J38MgZ^oQ`KLn^**}W(zYqFRA*QV}y2MF$H0)VClsu%G z?B-jWeO|?20T|sz31QrDRBl~}*=BDI)hp?1t@tg$_jBQeirhWHsY>@g2$&+)1zN)dGp&McHfgTy>uFy6Zq%FJ0$9}`4}dT(CB23x~C2+ zen(0yU=?Y#LQv>F;Cx)g-h3eyE+qcZSV8V~P?Eh&qJxq9kgcIyJ@z6vS#4u9Axnq2 zYz?-cb#~zd9Ba!O6JuhU>T;xd=zcwGp1<-d{MiHuipW$ThV!0?SpIfl6K#y(`lw+MTcp**cZs>aTpIfZDvR^hqrLu;{*QrNNhBx1{hZWfO5U~c8|ZCCu` zTBQ;G{pXb|bNmzmw6TgmLuSS4kN5G5IkAMurk~???NX02bK`J{xB$mxDQ%Bp)LG-d zp4lUO14<@@`c4ku2Gxz!m^&j}ja?%=no3ot^Q?v1HFV&+NRgG*0Rp?JjFoV}jf-tjD6Ue z>CdYH+6H-R5OIdl$PC>QZd+vo4snF^MD?X2{?rIT8uRxnV$7OIjp~i(CbjtQo*jj2 z*ph#?$Glri>*z|RnR!+*7tM~^!pazn&irgk^ibOb1vv>oJDN$;(`{NeR~tOFGPwe` z%<>kQom&elbaok4w)#d#bO|`{X-rH7$=@wu0ag~byi_{i#Ac>qkxzO;R>O*rDgfE> z>i3pasynsT>&i0;H`V)+GUkW>mU^D~ivMS-xca5{eg{VW%^f1jlnCd4NjCF8)DW(| zRSb^iM`I}J7E{3Cd(^5?#4+k|Xlr|DnRV66ta~tMVXePmGwB?19I--i;0`($mEoeDVUmdv*;5&ffiV zprZcth+#HkOJf=PT?dCd?_iy~}zrUtyxj(Bd?$HQl2?KwrF!MOOkhdM<9*28PSvTt;5@o+`X_X5OLipd}@(v`alH`I+gVNTUPT zCM{P*(#%P!UvMW6AZ^o18g|&uj-32R_S?f!VA*pjEsydLGFqCt+42cs4S#-1+idXH ztWN9iBaq&H*!Sg~yf7E(;lPO2sVS`D-)@7LdUaY}WmoWUR4%5Hz#YLXHHT>&zLUAv z-*{)Nl?1&6ODFh1mB2DO51;wx>`E|Aq7`HDMA9H>aKM=Ui%YJS6`!HxROEz7uLiA2 zK6`!{jjWQHnF1{%M**2R3qz>@c+eW3DU8jbM?X^0=@gw3ZzuN>Idc~UA^b+bu9kBD z!GWm!P$LZ|RfQ)IpCjb~=f?N0mCml6-_=0|!YjFd*O02nG(t2M9LR4ww#X*1jH!2= z7R{Smx)y$ukvL$Yb;$Vy{^B32-8NKtEXSBO2-9v2>TOxTh#;&!vE_l-2It;Om+Vm& zpl3EQa>7hzP;3_0DpN^kf8+Gj4{09Z^JLPy*UoF6F@I=^!iBWJExgvwUbz&L4vy?; zx-oD7Fw;GcmBF4-YVy7UR$*~-t!6|*`LrfV83NrFLtsc~VZckK9TK@OA=^7ctKKoZ zbx2#sSZ43}=G{FL;;CqInqz2BC6)Y&T6wbmI>&S{fOFvY^4{DsBZTu1Rnb0Byj`bd zW+uA|uNiJ0(s|S`mjWY{+Xw@A9}qppN84{Yl^B;7>eDoFykM$xsWBLX9|QB{JfNEd z%%fL-%FoEIr&0$!a5g}PWBrNCW|Sy+{n$fqZIYq=9oz&2v8;h@(}Id-iu{(Sa(K3> zOW9pNuF5ML)M73O0PV?Nl5*@%7;q-%^QDGe*RKT+MLc5@` z`ud+@cKeZdo zEqB^9%Az_Wm9ZP1z|BX79N3Y0C`UOYNw<1&_ghUEQ$YFR9UNz@Kb}j;1Pck*uQ6SX z*oQfn5qJQy5c604n6-lz7AhlQ@&PQ&&kwC!mmnI~)-^OmTw{?EofPGDxd9@>vACy2ezDo7@?W1=?pB$4cJ*ycJc= zBs3~6Q`~QRw^94#(d1A)2mq{YTn)xhO!0=rcrU%3p*Lg+JO%(}S`cPjd0)*)Du~*H zTV~k1Vul(8H!fqbK;r27rl$Wb!@XRC)5m5t=90NU0Y`qNA;5(l50j6B;N!BN7ey1M zuN9b&A6mVWRh^^Aqa1`{x#FZ%9Q-bpM?kE0F#yd3x^cUX4piv`wRD zb|ScR=>S*IKS6T$ef?FnQ<(Gq?A?Dxhe|${tq4Ig$cLr4?jFYFm8_V=pKg#p^*M%2 z2o5UuFhB2@61rbwXwOBC1C4A6M}9Vx6m;|Z#KH|uH3{pSru9udS;eVV7JZdQ{bSsd z?jVf}+F4qN(Ze$*?UiB4%m9A(N1KiN?_6GfaZDhDRrk>UnXtgejAL3ABCgdH87ghq&Y*C==8Yx-lL>1A zqN@%?IX~~<3Z^bx#_iQ;shQi>4x#3|k#Vjj6RqL%;Dy*iVezap#Wx;49Mzu@; zZsF{ElFdO{e3l6O(i@P++cl~!dKa0^yI`B!UvQokd96CB_t-5!J8@7G$6-%)NqtT& z6BEPZqms1G4SA?h2D+Ph0c6&o70+m)0hI6?w z)1Q}A)LR-Ft$luYPJp#|X!}#HcFp5+lLvKf4xTYrG!3mLwoA3t?Ar!c>$Ex$m$i$Z zYdgPthCh>F;LyYR{FbAuP0aJ>p#z^lfT`a^2%fQTn!8V2G!JMU2ZLR556x$Xxg-t% zIZ;|q3(c$e`TpE=E6O`Bt!%M&mJ73fj+ufKGv75EEVFtW$~tMJN87&FOB&-QmTJYP zX8Vu=U_HE<<5cm8-UEAPpYu_8bBy;<1X&sL_t@P$L}VSrOLy$`pZjE?>TnTjzd&~O zEu6Fjgb|~wPr~kpq^UDk1lU2)v!=%`Y@&N#os2`Z>-*bIrGkYe&v}zVG;A$c+Zt41 zOw4E;UgD!)r4mY0O?G$ikXfu?;|`s#hp|WuRnrRiMDvP!U6YhN4z0MBbul2;R1JR~8@(=VUx$D}-}18+T$S#ZX1eIK(dx7xfsC2-R0rfNLNz zfsnwa(aKdSu$yV!EJ~OJ5j@~RKe3p^KsgqXk91<0M;n`8&eFtQIx2-w>u3Du2SIeL zc-hBah1c&|kfY$%TyPhbHSH}%$wqp+h|8qhd%-cveyi;?JTtFRJ3}LXUZW6 zWAQA{c=+0HpUn~uAc@?tg$a7Qf?o)cu4s>byq-g)!G;6Ww4eoUyeTo0DP@xYHbZH+ z%yaDwVR*oMMu^rfkiJx9Qtj@rRC)6Q5qYqWnu>>J=TLYD?oEP{{gN4b2OqO(&p6(LtA-`I5_qC1a ziw^fvI{O)TWo%hks)lDax=U*OgaiAi{(MGvO5n?|K%vZ);DVG`I}+Q?XO0afWhyVU z=jY}ZAn36_JwKZoJH&ot%bc^#pnkWZ%+7%O$tu7BcQ$6+s#&3NApiZxE)ANPfODRXf-%q<;(OZv()E#O} zBC@Psm%;z1Lb5wus0^JgD=TXkwZ|Low79%ABs{!@cB7*28lvYp!Vb~ir-iQ0z3J(; z?UjV(r<9x9BexcMnhSK4ni?@|{Z5M6KO$1ve&b=;<3Vxx==>3FDF5HtebQb>v2@I2 z{)Ygd%hT!R>AabPomfzfq567p?VDJ@1Rb-x-C173-7v&sVX|pqV=8ol+3>TPoi2j^ z)_hfiPz3-oE+qBlW>Ro>LFenWBsRpH z9_QKpb&2t$NXo3oD_K(`^CUwftw$;5H>@60nTc|7ujU+~8r515a}zZ?m~!_a zzEGRyn(8^t}ombev}hVwDJfm z+RDRh{%v+i%U{=y|M!Zn!$$Pe{=4=*BIMPU`$B)G0G&x(X{h{bfsZRNDY*^5!w}U> z>Sp*s>jRwgdSWkM+_VIy_~YH2)cZO-+3t8A&>4;tjITfFHwrJ`MJig# zxCd=SLF=#m;-4to9(_7HgUP+7)f3D#JQs_Ye^7kP0n~sWrZ*{I$k4ncJ)-S6Rl1HAf`Xv_0)gM@)* zW>Q-?;?qfQDxYdwmi&?pMVv~@J+vB)jMLozkei3>_i#tu-~daPxm_Hm!)>rLYvoXV zuUxA8#dTu5uesKrkG4uN7?R!)&ugmRM`~eBuP`+OJU7NyO&2y!zGI*X_-$RID;k<)wW@{GeQ!H`o&x(YIZHOz+)ha$&u0$;cKi;zIz_85hJkA1c{gJYe^JcV zMpFJZE*W19ChF&sWz|xEu_T05NsvQcTh&xI+xW>~YjejBbFC~1PLX45NMC~kW~@9! z)7U$^;ast28z#b+dWC&g$@1w~gEusjy^TFBdb@vqY{!~+#7-ckWqba-DPg6~s1v;5 zMmY3Aw@kOebd+HCZnQ5-d8MrdyiKzG)!uQ5P2W<}wLr=wWpSwSw4LN>4 zn7uijUO2(^#agM$vNhbLWzyp);ETuH9yaMTo5X7KDN}wZF;w|xb-yZdNi1`oAh{hT zHqv`s>>Y0p){m_^;dc0OXx6feJheQ~c8;iT@FI_2od=B(j}~igdQZ^0Ve4iDFQX?r zK9%!nXj0Pq2OVYTMgkvBJzp1>mfR0Z>oQshp36)~J0Go@clRAIuQXrEG;YIMPX=+t zp!3*fi5>Z7o{cZPRcl0oj#PtvHb#R|kpB#$(7az=eQqF@iph=!N(B0G*{mr70s=f9 z_VaN<{??)3V7=QNAnA`31K#B&!9hX4%*@P8O%L|=>Zkp6T=n(!J9u89%hcW1{3jf~ zfrZH&b9%mpWL9stuSzx_IP+zUj*imlz(ZrYRr+CB)5*hOd1O!!7jVe?_8kUj{q=a( z_tpH|ssGutKK5_u3h`rxynM}hn!l=0;-ns1v0VdoAFZA~?u|R?ul}vrz*s*P9IEjP z+#FdTv{vo>SX5gT;{Ut&cpHHR4r_`JiLi-{??qaRMRw@x4PRWAJB}6}t54LePwWVG ztA~S(=IgpAAi;0Bt#)J0uJl5p?AAVqJ#V(?s1+7cEmykQ?!}h^zZ{j?$bM#4YeW_) zGq`HX^V6_|x*M``nbQ*mMk{WPzfvz}>kWDedJHMS!D-%cRzK@~5@@&669j?8gAx zl^n^k76FN6jn?Rre>(#t&XmmlBUbe%f#R>4|BJ?#4ZydNnE`uT`q8mKYr189*Jf`0Qdz>RPVApVM zy1o*(zb!}l;>{#3{bmdMhe%luP2u$%O}+9 z3Y~3n!}9SMTS-qCro-@g566xvDV1%gN+f4)Opni*Rv*jy;4a~o7iBlR<#MZbGVtVh zJm}W)16@|jxDFPK^w5|cwt+RpC&NP*=eY4<-!p?-R5vO z9MK7tm%mb@+59j#s(7V+b-b-<%_^}CN2CmoxzK6r1-Lrp#;%7*c<%=J*eQwq^6xN46VIt>c6%9Akts;@sZDK(4VtFSwACnu*m))Gm)tYUn8 zyrQBaC@6?d2MVRUmTOJIpqKkyfJ8VUE*8tLpIEjoX?!jh<5{8*Z96o73i2%?_A{la z^45otjVO0nKR>@PLiVDZoXx+i0_yMJddJJdLybOACn+U`MAA;>=RUPJNC7GW40{jc-f9Ww&3ng}O2D z)jue3kys#tiR;hT&36=4UgK;%`Zu8K1rl1e$uiV&k|Hfxfnu~?^L0r5ajk-rL0dhw zIS`!H))CDoHE9xBH@M9zPv)0p^J1$Du9I=^fCy$~OYget9E4$dU6yd(uSPnRD73S? z%450)8CbJ*9{?G3p@|mfA543{%btre=O3OZ1Gh$j4B^SSd0H5842)`mb?yefwa%&C z{`c;~Y?m>~(Wkh>i$xjk)kpJ?k_;{-8n7#2N*|v}sGC&r^A*0_YMURHx`)ocao>@;bt$-hi-%vvUTEP z0u5j%80L<|V$fJ)X?Q6~@t~D-;%w`JD{o&fpJ{7L$HQaGSLUk7^t(Ss#=jsT*PfHs zl&*u${&n}U2sR?+l}&m~R_RraJ#y$mZe5E_?iAVeCl8LL^kqEV6(rd_BL*2^I&>k$ z0=v^^A<=g94cHAHo6yUX0_B6c$cKa6li-aF3ta{B0nV{%dcxQ3zc2NQ0*7>I^gHY> z8`a!J@2f80^iA`YdF>nL-6Pd+_Ab_h=rMY9Qf?`sMvC9EaX}e6O|aOZnd#WMXB>5v zToq+kIW|LTqe?jqOX|%=2SwbR2#di@FH0$BQ`GFdqiqKHcU>lFu$X}noGHE4BikCq zjx-@ag&=bhql`ieMmT`Ysav=bLGg%_%|@0n%^P}5Zf;;lfA3^qXs)=K{6``g(lXPi zyiY+#am^bvbrs>oq`EI^r*X{B2hnY)vi%;Ggtsm#H+D@Cd^p&+^t;16ndvRSfs5-2 zNzEyG?ws!4fOC`tdD*pQm4?vOi{WAKr(70&;S-$s%Db#K$rqP>zWcFI{Fc?m9|&+t z{O2}P&a+zATN@0BdEtnF^W&Mr`I74do06L9HKoT4nz0BBM)3W}b-0rT#8`YivxoH+ zUI=HxNqDL+k?wQK3DLsd9`7?A0D5`o@-%eua7fo0V-Vsz6QGi}*v&AeKCMxn>VdR> zI_qM#lAeHQUvTQN6gLijnV@QUi<{@t`5>vcunD5hGvhqjF{y6YhL=sj#=^qt4bL=Q zQ)o*;EE*I@u7B80PMbS(Ojmn?EEKV&EGekeO6AzX z7_{RAQ>jsMA*c2GO-@MIPna+CAIZn9gqMc%?PeEC=gq_z^=~%P-V2fB!iuOzs7Mw9 zzM#?#0f;D$L8Z=C)N~|gvaz`@*IopK?*?Fy43oX6Z|zrICDQBUlR3fe8HNV;v8F;I zzinityB4#!CTSz1VZN9;P@+`O<3GXCqe#Pg^{-J+D|Kzd9e1p>NNTp3yLV}x0fq21 z6mYzM961Z#7WNgwkWsL(yaCwt`uHHEuDESW_KLxtxeBUDUI5x9daaLj-~E_2RY7Y1 zqJ2whemXPMJE8$Ljd1>Ru7^nYqFqts5OUpU?>uh09Po-@&z|gf<4|_lHal_?4pBihd~sK(<6-OJMV|>{(%-IIPgGpOh;WXjiCz z)%T=OsqX&0@f`$=-c?wkrKWQ3iv+2{T8$5h%6Eoqn-`L@D=9ZWf65In-^=FPc-@Y_ zbNmiTL$f*xb2W~4Aw~hb(hhlm#+ozHTZsXfsf!dq0WCg^jixdFhkT3>6*x}bs%f04SJz1dqCo-&u%$+=RY=cx#X;@Pwh5ZqtDlP}3)Sz2C%xUq!Tj0= z6%m|6{tZKlrlRkX;zfN%xI0S-L6Rw-9L98$G)u3*uHMx9U+oSD-UnG>H2?0%yUhXo zj%b`%w3g}&FPUDTFUqs#>T?l3KixiD$lqSV$8}QszJxK8QF2Wh%-V#WDj~sAI-(n< z7K*0gnUEJ2u8Kgq(I2hKc+tz+i#uoAsAu#?b75*J`2A?pp<+}0zEU&^T4{RFru9~o z8cAU<3?PU&_rg`v`@KCF93ZBkv?le}@3j@ua3+QttabKOvw=GwD*E2Of800~SU3-E z(bA>Y8?%wif6uyH@`06&cR}-Pcy&6A9z7F$mrRW=^tgC<8r=;HHnp}4in>Zep3yzaz!4`hIi?w2Z zY^O46k44B5VMDtsN(zius(D&9uxG<(J?%)+XJQi6jK$1~*Ubmia3_-h<@|xgOd0nS zZZOOy97I`hbzYK31LZNL;<5K{Pzee=TG7$NYY{Yn_I#Ry>5CA`aRK#tX>O20&;!QXV@oJ|(e$pzZyAJvX@+ z@mBmNzo;SLzq47j;*(IBJ((e^QAARAYbc4;{i~*~8m%sze*9~@PsCkb+xS**Gg=g{ z)`$RY(8DMzkfQPi*0*8Qp1x%8rM5KJjdK(GC%h|w6q|oY@6xvK;utw z&%tH0(Y@XkC@LyiZvQvetoLpM!Tings;jG^i5UyNn3N#2J5>-!18ZDw0RV86;B4t&q~qw#`&-#G@JLlP+A0e2iJwqW+$zWqi`#IzZeFHc!t{NdN^TKBPd+hPB^0~R(4 ztQ8(!OZDOWKfM4ZhZ*B&;9t-!-@4$vCGp)h^zfr408Ao+VeQy|>V-zie%TV7rJKaz z>9P+zP82VDlg_AHo|(}}L*}I-FQva~SDz0w!GKJ&4A68P0xFal4)Z(=;V7W{$vF5s znA)6)?w0|8?0ae*wSSLgh0}W!25IDh2EKd)`w-okChq)HHFZKv|IdlVS)CUlX*VLR zcwQ{r$9SQJiYd+Ix~yHD76sUC>*r7zfE*t(V*s$+uQ5#E7 z)76y!w)X#JYJdggq(=YJ)6pb93`a?RUhT((?q`(jT6P(`N-p84S#8TfoNL}$qw|11 zd-4c8ys=%YVG^^U`>it6e|jgB@iR!(UOviE6Tie3)KUetkVeUdogj$+JtF_|ms0+3 z?W6xjIsW4x5B_b?Z|_sk`sF?JUI#Uj$Z7CLiLfMoH%DjZJ0qH-n6o+j7tfm$!Qa7` zFK~BFn2cE5);rywf-sA{kZZ`MN!3emG~;T6N`GTl(_A6WS&6IV6n9(ttj5ok|0de_ zJcnkIKWDlhAQ&)nAa-1#{!UAXj_gz6l|e_>8p)eB&o{K{C4vWICzlU&4SZv3&YS*6o?~X6G9Xq9RF@n&DK%fr@(v_;kpk5YFSID|7&A|dJfCNs zrX!bcwNzSpvbN5fKXnK$6&(t-uv|ZJDA#+4xX2(}y>jZ@ccnv5SnpMO&}rN2i`^Li z?#aoDogoPH{0MF6L}9vG`t{&8nZ}S|a>__h4gj1>Noboc56g2yq~Nmd>TK>uT0hYL zz|B9^BpCU4uIWcMa|Y_uy{9HMr}- z7Fv_N&%I}#`>M5iuT}l3*7&nn)7G40^wE3&WO93qO_4}2U>G2OS;1RKUB+@ydNv8s zmnO4d4)4%Q$1a|sb(7MlVO%c0ZD3kZZQMtetJeu+^GS(&I2Av9N_EY%(=Q*?visl& zVOtvZN4uJX%y>$s*5_juO<_eoYx7-gV;rRTv~$?0wv*S9vp=?E&1Ed!;5n8H8UFUl z79D27{iFcVDvw0DP?&QePL(Ps-9YgT4i26)eem8yMNSJBV2<_?eVcr9#9Aym0QI|m zt<2PmP3#aVeME-xa_H{S19FECXV+H(n&lRRy6)tR^dHqGDlB z@!b_$L3Cu*fu9D&s*>obkNM}72Xf_X>;{Y6qMq;e*|m8gstg}|O={TM2xYaq>$`wr zMCwnxb)!{JZ(cL+fQORF5cv298K_DtX|UUDxi!+i>ue54ti93xc@_Fgi!IDUK5pC; zY+ScvY+2!8xLw}WNhP@x>?|u1F!a#w{;O30?9-6ubCTo8n#SV^mF#R{=uKK3Wz2&1 zy@s{Qd-M7tuH=X>Gn6pcW5&Vp{(HfYf<<`Ras6@2*7g=Ur_X2Il`Q6ZpY9qfV6dK+!b2()TL!I_ zd0$nmF5Ev#^IR%EX+YSbB;3Lm_KO1tEABZSTHe#8dFiC>mo{Fv!zH_4t7B8|kQ*fn z^>MPL$z%{<7iI}~e~NCf0NdNcr$77kKQ-9X9IMraWU?fZzLvb7GemEoR4Y}(XLlG> zV7qI;eteczQMa&suOG-r`@{^6xZqSi|3p9Ov!u@rbBv@t6 z3|!#!$U6jPX3t9asSNd`u2ojqI_~oupiA)0wHllu#?eqn#rkM!vM3#1DGhp)J5Kq+ z_)>3B84X2ASjF0GXG&C3g?eSwqibl8&L%+lGSufkIt!Hf4Zfu}X1!e03M-`D6c zrWji};NRqkadTT_Wjuys?&MuJ{t9;In+ejv2_34*{4#+TBaOKiT)*PnADQ_)ZmXO$ z@4EJ>JsegzMiP$81+&@?oUJR~s%NrD28N9^QiJ?_Kb7-$C9&DuM_S8zDQ+lygIsU! z1ecC%tIVLWRG_qn=gzZ1Hr`k%m%;06jaH>dYQI%fmyp+?=7(s$gDE1Eokl7ilo^QM z*&ZR1PsylilgFp9S{@l0(Rxpbh5Uo;xy^GbxAT->SNUDIczOZ)O+FbBCkE4p`?C-- zuJcS33HfIea51k{KtJk!U>-tLDlRS`&w+%7pT~at zkMZxL<6Cvyx-`q~j}ueHM2WciM6uYQ3_C(k{mqmO#rolPD|1SHX0|*2_*U z!tp4ipT+(96z-L;7w^#F<3{)B)OYo@A{F=7k&wWvP0JQ{7iIf?#RVk=_F{`cl@xT(UX&nX$LYpsd*o!eQ~_g>L`vk# zFT#_Sv9F^{pePlo$zT9E%yyvKc2tC8iPF1-ifMgha0i$LiAl;L-}I`@y+hO@iMO5X z#)ZnbsIQm81F1=-5-h!&00jf38zVsm)7h!6kglb+@g`3E;^4e~t_&{XZkHMqGkC5f zep2%I&Y&Vm6%`a;^39j8n^|J!6DT4bl`L7BJf~nFrXDTkRi8MDZ|U=Gl}WsRJZS43 z42@I)cnE}H2?uvCO)z(xa=q$O$?r~;;1BZE!ya7xX);Hj+`(KoYb|jP?@P&4qI`cI zTA9jjau}}h=Uh?WzLRaW0RivIJooG-BEF-JJ2EQec>`H{nl(jAI^j?`^VNqT>`L%U zHn^3z93}i}^M0i9;Yuwnzq1D`C9d8o>|72Ck~U{!f%xU}*vU-_hnr!=dG^x$THCJU zLQ1oPu8Z-pCC*1s?I|%aq{lWvrD|wcN9}oPN8%$o=!lOb^HblQ^h6K#>o;)j??_ar zQ*5N5JK?XKq+{WvdVQ$m=tfhxgv&G)G7&*2AEAppeYCdsoPvtWsu--E#Z;0=QV;Td zg&!6FNO{XUiwobtM_F9q7CAEecoBXL)tO1-=KXLq$j~#=8rWVmTuFWU-NS48x7RDs zQZ;vMmIptp%f73dg56NgkOh%jzC=Dgi)7Xw%$ovkvp-HrD8)hVShLumGOLoMu1mz3 z-*~aLn6EwdYp)DXt5jyTWaH<`7r(!%rvAj}1)E@6q9~R6e7}z}%%U?Sz{riFEDk-P z$KKGnc_0_iY@;X_K4l^}-$Cr=0QnIpU~8t3e{qJLR72|rJED`4{Bh12fWQUz>Pd+i zNvWY7BnV}%Yx@UJtlAa&)3j-$?+&HQ)Z?Qi)79c*TNnh17V849-Z~DAe1TwX_Ixt; zw^!Gv4Ce!Zw&Uc6{5)rfJim3fiQ*8j#0^g5Cwd?``q7Z+WuJ1g^YCoiEw&v@n&pt~O4CqmhjjSE@3@yDHFU0h2$etw0 zKGn`tsLiBN-ji{oh7*T@q7;Qgf|xv|rIdW5PKf^f)D>HV)v8DV{>|@7wsYW4T)~e* z0`2wO-dlAr@F^kqG$!?!Xgd1n-nTlZBQ>*5J87pYto-aTVa(x^^hx;P>!t zooF8mtpkbtR;90_8haL}0qcT0i<;4M@B435Yuskqqf`IPv?STCu+f!Jg>J46O_%Gc zi5vEj)4Rd51*Slh69YfI>NVx#B}2<`U_1<$WIy!Vv?>*W5TBK1%>? z?6>M4|(9LQyd%Ni9h z;ww`z7s)&i@U^T{aHN;y$z5#H@cFNjs21QX@w$Hlh6UR@7;k?U1Ob_v?4yzV4k20@ zTT=%TB4XrlJ%$0FSpki5S($?qp zM!8A_kxwu!jjg}ioZ6d)i^joW&m5yOfPSqat24XY`?n1mxZyYp;(p^nFf_i>Pu|{Q zQXo;}DbUc^-uDW__glrrH@@xAr*GxK64V56+;!LP!OcED_8pKAgrL1J0HyDd()#-~ zm=19oc5xXhvmpTrW;~U$`>j^Wu0yvr{?(fUbD)NKKws%mQ|Qx&siTadeo>UO>tnM7~Igz-L! zuC-I-m%+uFeUa!3>9pZqJOM#q5EAOnC6g@PcoIv*EDO6}%YmOys-AH4&=+9dFjB}f&mDTi}+ zZT@nlltA30pmY^G)eTieDmwRHk5BLO%Og~bEnfn@_g%Jhqn>Q>|*z|3}7XrZ8wl_n~H1W zh3%@bg6%YC(&{EpalDNDN-^%Fc}W?wBxp=i>m%q>ENL?TVvNQCE7%7SfudA5&~Z38 z5txuL`KQ8{VKapRAxoIO!o8%%%0(NAbP+Y%)1dt?i|LIR_X*>qeYcJciP5r}1xf@G zktvvQ?urSw?)urgjpBK77aeaUohd0I4UkMs(lVtY6cS8ELVrJN$bWuc2`}Q|oGnqT zShJQDQN3Ba_{qWUx*&C|f-W;!Eb`ZSgpOE%Oq9fJ3)fjMM6To{DKp|MCiz?zR@-Y^ zmfu@O(9}ZDemQ)h5M82=I@DT4MU{VmW1@~a+%QexG;T$CjVdibQ*`;6s*(4Vl3u6%;Zr=o0^FiMoU6onk_cA6Xg}wTAj*hL?l-C5VN%UH{O!_@AsKIOd zYaP!*$b62KKqm~v-lxeEQseJ0Siq>7~@ zsK1$s1-ZniesZXLs_KxYZYBvBE_@0!R3`TlY|IRzj`dmzjSgQQrFtjWzF14iK;2P!pe0( z)GJf1cGn&g(+etGSZWGSEXi$X5x&Fp58)KcPd|NW|iXXE{!6J1F2uMHls(euGbIyD*GNoetLAdg~Y+mUwSjW#U$ zg);(S)RR(xk;R?NZPU^@A|ldibffAR7!i?v9h`Ne00Nbngg;G)G0e;n?fTe4kHHVa zzLJu~zQ4Ll5Nq_!%G*9RLj%fk7FjxC?=;pW?sEn$K=2?JP1q8NlC5sWw{uw z6DgIyfi`vOn?UHalJ2Rbk#)Qy8*vvjTGPLq{U)I3*yS}AOQq@2T`jAwej8T4ZM`^6 zi9!3U)={!GlJ_%c;pW5|PO>AokpCumW2*YfhqCyBC=3A!D*XKe{um~d@AmMx)N)+7 zaiqLzJ9`}rX6-M&4M;x*#Z$r3=50$L3xP~)TTRWno4{$NzxK@V#b7WIO~HfptZl8z zPUW(jr6q_K30aI6E87&p31&#}Og=csCI^Oo%VQ&2ynR&MxhT}?wJ#s2XeGfj19c*M z)HJ@h`)H;0F|gGox&|$`jX)Bi{`7sY*!`DCjIgSB4ug-0IJI~;(wXb*^Av`~{K8P@ zn&q9%D~SXx`typ%c|6XR1Aodj|1cQyjezO9H9?$>a8j>I_}e-Wcbl*Cf2P~?&xF2d ze7AuP!q?Ky@{EURU6l zzgvD~3@U=O*n}1U==b$yM<~^CHJdl~bKkZg$|{zpwFM22g|_8~%JV!s^$+Z#5yIiR z{IG$H+xkR32f-;GBf?3hdJ=A?TgiUBXobO=pYuyfv~fiUq7u#w4nLhiq%E+~$_(*w zqo(bD(w~$2@0AdXU)tVpG=;Pf=OXXr8 z-72o7N6#HaYg56Tg*TPP%>tna?zJ#9h_#w#uIJhktwIBBb<-?9hY}tnn0Sf=1jU&x%@S(&hLZfj0Ne6tt*f!s%KD7eYB%Kc?J7rp%=NdPvo1KtVo$d%ET}Y_=w4Uy zyu8Pu2Udq*Br00W;9?eNd|dvf?ME_Tyjk3}<4t4fcrqD}B)8~{mRGMJO5{y0huYj( zKabx<^c5E~3E7O>)+ew@YI{fUdjTeeF2mcyNdTEnED9geJxUmX%)QK3Aav@bIk#Dp zkzpQjZ-u`quk`TrHVG6a1cW%`zt)uj*=58r)P0R*U?upMfkE{?4=M({h?rQv7Jc9g zfex)q*`mYyv0|z0G=VKDD#~O$lYrZ?Nb33nT^q0@T(r@D148s;uX$bS=+4vQy-tJC z8jS^rm5r^gu1<|MaY<|GxbUy_X?b?mxe|axQ0&+C=PGrcpB}Zev?`ZsPN{UeIm&&O zAy+0><(S1_=Q(GJrY>u>5 z_{G4@`(LiZ3!b2*hA`16VMR+uk=%1sK56({k=%rgU)b3f3k5a*9=;~=9y=48*dNgx z8Lgz+WG&TyEg@|+^5K4SEpp?a{-G($AtPoiUE6utOgy600WY2VHe$3uZ0EJ~R$6Zs z&(8;lXv-6B1)a?%PULlU=!2X0C!Z_GU2pw;<>35$iZ5>|IEpqdPHKTi)A~^SLMG`^e{ss&Cgj zQ}n%&O=>aNSz|pm5;xULORN5MZTLg<4;b^y>@@XunZ9 zvIUtwl$kF?fzvHKR%g)y*J`4h7TIUZZkP7WksCtoLAKb(TuMb+57*Vxxa{mz4!c-b zrBN9RJVpI|+4qjzk^_&SJ0Stfpq5fXRY)Rxc3j8&z9mnVImIr1&jEXO-l%Knx}k1s za5?@0JrOOMMdwv;QxjT-RU~x$3W*(Uz>bWg_OeHjRhV*j*6FKG1njK{^I9-;rz*pn zT+o+eT|?(R^hmmlz4%*aoZUB|M>SEt5rb__mjQfR(I97#Zia^qX}~h$9kS4X)0efd z5yr$`5h!LK4mhwlYQ=SWILSm`wey-H4B+tGu2tduY7u`1Nq*Zl8fPa}Cn-d)!}Cb| zQ=@4izHV^elQqoQiam!msDE&RGK(2v5~gemb36g!!14t5vK>^#mBKBqLw8>t7Ma8N zhWi=vdO54fg>zmGezy;=PNJT5?Mrx~oOm3GK-5M9}*<;N%GWJbZALhu3KCE?XHsI#a7p zrG|CRyILk{W}CJ1opsS_`7DJ=1eWhS>Hm~>$`q6{fu(jy;_fPh(OB=wDF`xTvc@os z(7s*AIT1nJ%2Sp;4ldqcdbP*dICvWyUf!GV+c(uzD>qv7hsMBZuVqbSCA*)UBnb}q z3!*U@KQ;7g^SE<#Op0TsorScX{gwvUdCMjK`)EFmP~~O7L>Kh67)9N+;q-3Je8L1G z+XdQr2wd7@7s<ED=S*$ zEyjlLFAN+V9a&jfc`qk~04j6Lz3`feG=o;Nu-%sv$`q-clN0M|)e|S+H%|e@O06m_ zdhnJ^+@PVOdM1kfb9Mq7a5Mg8{5Jo$8Qg!T#ID`kC9`HuEj@UqO%zVoizOPaa8E)j zfP;5#v&NqLeJCLM{aM<1%2u}6t5a#WkoNO8e-j?yUNw;607j7DxjrZ$%BYscq6Mf= z4fO5A-iP|nc!wIPm`%Cn@yKvrFu&m>Wb2?4?~I2(e?6%*27P+}2cuF4y)T1CN}YOd zRc0ccX4Jhjdp0vcLquCQPv^Io2cdNM^o%(IyEz-kx6iLr>ts3t z$;&-o#Gqx8z538g2-uRGpDhyB@_+5gB4@?0Mlhs_Ee z0kO(8vpKMVJ|yB8W5$mmgr8WiHd0jT$G@cDplbKI3S%hH^wWiq2!oXuDq+m zHD6e@B1YLrah1s=t=rfvg@+1u;t8U=0@18ym2N_EE%&#TIOBP`8u*_nq0@BH%0B71 z9sX$#Rf;ZUi3o4)-bXlL)UAfsY*<{Kw=~79M@)RBi<-%oJtXX?ptQQuwgb`Ba*K5o zASk#H`R5(VI~;P#%1~kF{{r1k&6ovB(^@b|8eshpNdd1?@#Qe0BhJBPoGAJBT{rZG zc6Fh(Rf(1~@_wZ%*_l zD3!)JAr-cZuUUdH=Y><_?Zir>c*NZ~ zXE{!NHEWYz`mIVb=~kw{jYs&qp%KZj|f35DsaUivB5+4^q zXBKNV@OCLm>O@(lg>73dBE}R1Xf6{ zEJ%7C>M*iYj=X3n`ZY|FVSLZM$!k~*O!Bf?i?}R*oh@dDn(|v%J~A_0(SpSFr=dUi zu<~0PTsHp-Lgs^FtWw4>Qa-X52HG!)AV&PcL>PN63lC5ee(sx2wd27>Z8)3y#h_ih zNUV}oNy$f)m{(jhZ$Jnj=(VFVXIM~O3tkD7$7{qEd*zcj7SHk?2^IJUZzvT5Me{oR zKX{Swb;pi1X*~TLXJ_rk#adhZ)ie(Jfqf<8r8N9fqf9~hZ8$4Vi_@m@n*M5_G9N?q zp;cCg&*mUo#nS4zdHt<4i*V)q6WED^h#ag55~<1qnv;e35~Oud=cqK@5g(in=nupp zT^$x=Ul(Mx6L{(jL~z1a4KX3+vi*x;+^>+~KH&2yml9TBM%KxHwZHq>x!>xR!b75? zWWkD-R2E_g)t(~Ky^5HqvLh(p5oO zN#5~UfbFl5VJ$NmMVek=LCeDK6}~8!V!1L!{yQ z7T((D2Oe&p=^Zca>uv<2+aPWze#^8;)A7Lh&37PMYjgT9X_>t6D7Y3P6+E1()*u}V zXwK|q0;;s2H(6U& z=224Ki=!rGY2$gC8TEexP=Fh&SZ*9q$Lq(HlY1s)7vBZ02yiP zvn@E35-jdYGF8QH_ATO@h@VQVH7xB8{AHqZk?$JSiNa?a^5mL(zsu+ z9op3^Zndg8=lmKNnT8$iVFu|^Q1m61YsGN;CaAAx70o$rqhqo22sdzx?^Y-er>8)@ zZ}oo!BTOkL+MCM?+>~_PlwPj#N7@`BcvrMF`zCz%s`UOIJmQfveI{yN9M?m_P4)dS zLEcMG43?)OB~x*v%02|smL-<_C#BZ8<7B`}(AoUfy4jtG*aFgb4`m{r|E$#?IrE*f z^op$kK|$;^OCtG=I?eVYnsElL(5`0>!ZD^oD z5A%4Da5)0CCZKR0&*YQL`ErteeSHmx9fl?+&$VB4(^_{=yu`i*1qJo>?BTukNeINx zWcUOG_cx~k|JA*8Y%>1KME6DV*Km9BIXS(%obKa0qwv*_2M^2C9M0XF0 zKI#;W1)bKC@C(ZE2<6_BqhDG7a@^-e*03f+Q3 zBB7jnG4`kTq%*Z-l9|d0m0>i5Eh0qj4c8Gbr8ABfMehFQgGAN~!vNHyK<1IEu?|Jq zM~Zv7dF;UoBg$(@|1`k+ghQsg`t$b>+>fX3R$C*r0>agxfY|Az3*=yiefMALarY7x z)GH|Yt#K_c?6Bn@?Pzjrdd<6wWwmVI^2F}%UI&Oq#&pAnWbG6j)Wd+1KgaDbgh6i& zy^Y%SOSq{2@xNKd4NfFsY!M)mzfd-qDDA}{q5Y#So7(wY*b!% zBYb4=ls!7Red|W+50z4~g@-Rh%M%($4oYD7yviQ`i{$ygI~WiF z`2W9^jQ_dQLlJ<^qhV#%E;uT91?X$tPS;Kmf$Lr3%)sI6c0MJob4D*$zj-Iq^Jo(g zTwuwvl&QEqmcmQ-b3;byLnhUjE1C7dZ@|r2p|CAk*;7>bcYXX|j*3*&aD^bG#0;Q} zzJ+xH`8Gdb0o2k$qeP+QINa40Mo)D?bG>}s^1(+Z)8$k`rdiF*`?SX5IHB%BvLBCm zGOZV@Y-tL+Qi#Zi(UOC7Xx0@cCCgkLW98MWQ9>`wWq#X8p4T_|o>#T;@Rda$<+smq z187-kBX3X0a(D%-j_ZevL-o9Tn0&-HI18J7u&3auHOh%u)YGo-9LMV~mZve64%8~` z2>melPSaGileL!F`EI&}87#EU*XpM;m_LF*Xw9B2-q0|h>zHA=CuGJ7n9=*|=~0Qx zGJ&cNvp=5-Jl@=Q#=EfOrmG)@PsKXag!j|8mRvMPv!7xKU7eaObZu>QSVgBcGfohK zMxND^H1_k?YGl-s0ks|3LuF{D7T?Id%0BaTNz;d&10kWTMty;Xf>KC^r0JB zoa%WIMV~QRN#1LTUf0_fqF8PGu2+mjDhmsD<0s#NBm?e6G*$}LsGI$@M{5oeWlIff z_`Iv7{U7Ybn$nf1wXiRH!Cc)10;5DWIzB(TcqasG1H9(0?-ZQQ@Q+Ik#Uic&iclf# z3W1EZc0(T9#*GGh8-G-_G(p;Ec?Bw!8t`#XuHDQ5(z!oqN0R)J1<@zD;;ta!t;Cos zhfk=_+TUgXO-Gbf-yzPmOwxswAJ0pdnD-|H5Np>T&ty_Ag2a#gIr@A z&cg0F=zux{+G87R%dDaXD39fkeBZvy`kGnSqRKnVy}$hl+}^Dvq&m#v!^MUtU%G{k z-N9@Arry&gI3O%C1rLYPNxzi z>I4gy!*7I{^zvRx`ESk@mD+w>o;}oaHdIYnXe%#PLMQkd21?`$D~uK!zfnqPt87b= zP|p8R#$e(}E}c~z`PPP3`oQ&sTbqGxZg=)OmVtFqa>E zH6N)>p3W=jnL~r&>zBrjjD40?tr6lf!*}51S-LdTPcPv$kV$`9i-nJMCF4@u%p@%2 zO-XyOG&MEU+`(Zue!ynn0Zo15$R%zLDDa$cVwUIUCKjZk%8EEkxG7T^Lz1UXkf@*Q zqZtyI_bwTA)K$_~G!z!ziq$uOBr2u!7G`@=b3wkRM(pM}1}iSYGG(qgVe|1ZrBjJV zrp3u2se~wtZxb{gUh2aZ0F78-Z6)=qLPih*hG)xs0bDg#s zd-$_6y9#vpn`HkYuHad!H<8olQyVLcNzD+HhrEPftUa_lU=4UfEA;0J@F9 z=f5rY|CI`KB725wC@94B>YG_uw4}`};|2=aK`yr8autDnT-1PWH#&UppI`njz3BwD z-LVXqKPM;jaVtGoS*tWJS^(eA{;yXKfsF%}UATF8=rF^9?8Zr``n0pfaepcVm4q;a z^Fan^a1*)j<@}ZE#N59$=n3%gQ`6F34md}iSH^+7#g=Fn4@T!3~e>({On+MZsF?KStWVfS@1teozi`L#o(qd-nTVW+~{P-W# zUa>1C6IIC;WPPd-UF`Snja9gUchYH`vG@ ztF>&k?!Vg!TCqlvW9jiMDhk!^eH*j!$VtIphz=b6oP+Fy- z+tQ)L1^?~Tuijr%2Pi0o8S`$8K8MxL6mXKI!#!$0p^pT{Mv8ISV=W*D!--jN{FZZF zcpbI37CM>p+VPp=_xFttFv3 zjKZ^S6Ctaz&y7RT!9CxKforEtZY-Av;TmTdCjaC$%^i#-S1(zuP>)iAr?|9h1Vc84)DWO|#5> z%3*b%kKA)8ePI}-yW5`V#;&Pt87;R?+o3WY0cx^EM;cOV+-JdIGL7SE%z+j*oY&%# z2s+hu%hGAM`F`61hbjr_ZjQ5z_u6d`h9M2nk-MycoG|6Mw~5aWUeVog!?k(%i_zQV z%Ssq$?;YBFZLkOXr=EPHs(4Y%!h+7uu7z=+J zix!m5W#aMaq;sB-lQMbC8C2yWM-9~(=+NX^k?$f+_W*fX9tZh?ef(fhu-Z0tASu08 zQJJ#50(>6~4dn*K!|xmV4Gng*_{?6QH04D-g_dyW{5em9(gn-c=zk!IPcT{&hld7Qjo;{W*y}b;kRA$o z#vUHt-Y6$gZ0Kad4_9|!J1fGO_CwBliF_>W@YD9}J)&O&U3H75x}OC`hmHvFP$BOh zOIEe?&NV=rrdCa!-F_hi8*M-W)H!ycWlNqPbph|yh-Nzj>kn(r3=1m$e1)=&z#X_`~1omVf)nU zj3F@2KYzw;!yy&aLLp=Mxap1sOY7Gis@Hne8-NKphxPV7X}i$A@?y?6*KCSdhcDEcj@5snta~2P9!v!8r<={!G~>sL28Db~ z5%Q5Jf=>uviLY~0&mPL&HW+-k&zUS{Sd04hvRIH^X8aQf00b-lT^PT7EdLemPJV)*Zqi*UmExt!zsy%T!0F=~!Vzl4&90jE_zN9w zS8J9WchLX8!CITD!?bKe@Q?^SoP=hg!lmYgIUwIRE4PUl0;ruiL9E`&b(Z~ZV|9Es zhoN0I3;mi_coxbJ$BuQuOTt_r&WP)D>S=oKdsTBpJiPfPaCo><|JV`1w1L5d7k38P z){`)h1zG#9C?S`5O5#ln>Kr-NXUNvYIUwmf;Y~~$xAxdFGp=?kM_DEzCx){9x$9nD z4jro(g<4xNOf~q(>XHlISQWBTsKtHqqyTAmelStY%fJHlxqn81{bUYD@>8hL)N)_A zu%}^|Qw+2>&U~OpNVD54wByUdTnhs_T=pROxD_<%gDqGgbf;_>R830{9|LLON|p_? zt=rYa|Hd9wcVB=DnxMKkwyz_Z*eP<3p$_&KVVrwt7JhfXZ6FKXCBm}};$gjZ!Sg*$ zY&nPKlnD}r#19H6)cWC>2ET4>`jf^`As3vX$v1(7g zHXD8hV*r=abR#M_fS4yty2agdu&9|O=i}LX{QgL&$EwnPS3Clrrr?mYO|j!?(ZZc;{F_nf9hOtL%PY++uVY zNqn}wVGo?)nFeMd$y*Zue;-bWtn1R^kqO{EyL$?F>Y4U;0jy96(E+vrxP$L{ak2#x zDFaL{v8})?>)Zg6EoB0!tlMtHe>J}}EuuJmy3aSSE*mI;>6{fJ#yfw6MF?4E_tFv5 zMBhG7Lll$R-M4-ZWWqJ`)F@gj@=LuU2gO2q%$ohqC- zC_zBz!VJ$Zj|7}htOdlx!~zA^4-VX4*dQ@9FKm}4hh0!(OUtm~T!fUMwHmO6kWe>3 zJ`~OYFmj(uui49~d`SRP9s53Lcye+AkPrXr5vl+o6f-<LAY+^OMhy<0mV?*0vpWFh8ld6oALbPL6KgARMR0DZGS56ixk1vBR=vGK zs#SZ_Ay6EQ0BMoK1cLKtj*jeFgG%eWNt`9eU(6sBm%|O3jRyMbj_NV}84oiqIMOC) zeHP@7SC0=U08Q}0`L<}g9#iVmRI0G_WbOd%UVTN>4hW>Q!1DfDdTfceQ2pkp&*qU& zt&{pqSj-Qjx4-oDrsO~0IQ#7s+-#j36sadQbI|fF?5YR17HA$1^2&4m6cOija>#apTXOIln!Y{Mj#SdQ8T$#Z- zy|chLGxhVX_fc7P!e6;V%H_c8+5+9y9Ao&wzRPw~&SGgW$$eXObBXGVkr5?>jif5k z;63K<@@TwE&Y&K*0S8h#G{NJKc;|h0pnm%w1WJQpKUylIQOyd+ZNCfy#C?NEH=2tQ z0<~)Kv&^*2qb3$JyTCQoimTx;(eWx>kM`?fcs;*WMrq9(8h<-K0h4tLyvBJ9s?YV4 zbV{%^4%A0#tdf~OuLccTU<&i9O-1hLOGWd9^I)xgRkf1q>(M2e7Dh%@D}LiIHr~fA zHh1vnh8u*tV@|LMZmzmG&w5jhyZ4)z3-ytQBM-l3a8+xwFw(B`Ge~vYE#_W9n`(A5 z+Zp_9DdZH`%VWvux)};DjF%{8ztUfRnW1%nRbRjh530L|j~xBv@@-?ExVyOx8fKE8 z(@c%`-o{_=2Dpr#@Ta%K8;_G79ewl8CFUy#c)?bTQr3GjD!;!bU+?C9WsX%NyeQ#c ztUl~as$fIUG~hb(<5m_B_;E10fM>;1!#Q;<_KZdn5W{oKPNuJAR?OB@#X38hS!orU z=dLgtn$5OQjc*Qqk0`RvRqbzexGo0{->R2epWfotE<#2(g_1jT`g^W-idcr_|>Xp z^uX%#Nin#P)FY4GrCyJN2*|o{pR0`vMQ>zsUwcmaiKLbEIgUf98!&4{tTi!4;XM>w zu%J+0xy=g-&D*-o+$~rZG$YR{i!}GUZt3-nev+ zkHMr~!{Dh^-sZ8d3HMElW9X?OFOv{b5d{UsyW*i#D-@m8Wab~l7S4Ks*f_IJ*z?&Y zg3i_xI1dkPVz7Y`k%)4hE}8*eO@T+tE|=b>ykAx46q}v8|B2L2i?`hzGU)L|nVq(e z3OfBKo(iD`{Q>(q6$;IkMea^djZ4?EnADw`TL<*zCTIXKKcq{ zQ=}}@AHnjhYq*iSGKO@OpbvxCHY~c5!c|WWh+G7M2GYHu2B&*Zq+_lMr--Jxju!5t zsAM4f=e?K}u6x(0wQf=R-D_tu;trd(u>ojh#!T^M6V7Chq*?R-z$rludnwkF;8J5t zL_Mf^|7TZ&#g1+J^;@!10Z`CpJhQLf{0W?WsTFO5o;m1`W)lJ;?`x1Rq^$aCxOMs` zh%{8r$7NJ@D>9Zj02Zj-9PB~%DXy1V-Ev}0sw>noCw4vUDxEj~ruXXMp?O3qgVNL9 z#|)}*?H0W1WV9DQn2bY^Rzst{aGIIH$ma^5t#Ux5(sKCPexCkw5d*X=Xs~kI1s$k9 z3iAC6o;8+SyPpx$aZ{gd{Vy)S^iIa+G$05pWwT_lv7p6?EI&X&0xd63cda^{ovs4i z54R7?g2W|!1Qs+0D7^T-wwJ2q?v3iKvl5>N_s5|N!8=AL5uQrrlTw;B#IdlqL846_ zE-IU=PA%Kj4noVKfsK*y`ux#!xcoHj|R5WJ9g9(;IQM0e+qB8qo-xnKZu#jNqadQ>%cv5Uyh7qqv ziwjuT$Wj>4Me8C(Mv5x)-3~u25lJ4q)VIL6o?nboYnZpTs&&J=~vv8H46 z=QpzW$%Wl{=*rd0@k`u#R26OQq0c7R`eN~Ju-|FmT0mmlXt?m9LH`4rZE?{l0B4|% z|DaRVERf?isM373OVnj-RDh!-G5+gmBhy8KV*Jd+Vb<`DHhrSScU=Zlk>N=!l>5)TRBRPJM8JMo!U3G$J+G)*o{HOMF=HL7S4T z^}G53>3N8Z#MW{d5G+zMH*4DNYf_Vp@ij|jSAKmN9eax)v_<*KSFU=n8_`U%RPAhP z9=(mi+E9-k$QT6f+HZRQP2=_Yk!QZr8rjW`P2Ay|nPTb(c0c81<&Wi`Rzuk7*=q*zel^tW6zZ1D!xuoseo%ia z&Zv$SSzPos43!D0PE&DS!WogXkrO7oLjW@pt5t{b8u9@9b9cmZ+|`YQ*;!?vQ+ntO0wGK8hEgUC%VzS1ehq;8QCD|$x&Pa~skIaV3Un*Jd)odX7x4W| zOvEgmxr;&Ydwy--v^+Ri3~-0FwBCR^Wv!E64*#rFRr4AI@_iHf1_aU#7Jj)NL1N${ z=0E=98omevn-Y@}0~>1XwtP5ZzwT9b2aW{6>4SnxZZe_u)z=_eH&|TuD<~u6Y&WfvAzUvg^+&UgOv94 z=4dlBW0+JdI993k#Zrb0oilWlAbfrQ{p*vSx^Z=&>ihCs`{`i>Z@g?zP7W9l=qY@~ z)<<}J7cD|gTbNYYiiwtuyAY=}l(&$yK*UXJQsRSrR9Y6Mz-^cThA@l?=`&Y639+8o z6j9BMbOecflt(YNK=OccJ305gsX>v7!u1rQ-^sI4gfj_ojc0>{eUFCsrL>jm+jgbWY3*I^F?RWwVXl;gCN7h3!oxu4rnw^N>eo1Zncbr9$-x|_ ziAfDBTd8Q2iL=%6$|q8A+IM}a`!zG_&oLng*!xXBzY}r4hlE%ruK0+L@pw}t0mG`1 zh9jNCnfF7Tct|49jT*R^(V^#KBij(|!+!1J-Y$u(Viik@ z9GX>3Y%My}dQ?~Z7M3~aJL+IO6j=YkP?!Px-Kd$_Tb_{3FT^t}&5cl`ClXPmZ^pxV zPl3Vu=kqV?ufY8gb`^LTs08m(|4+vCKR0)g4OPt~wR@PpOAJPi%3omm2k&kP*e;c4XGo1X8r6rllOLb{>Oph|0hsQ9hXYEE1J zMR)&~md-}btqVy(Gv|u~y6wpK-H=CWekS91hf#{Yt>p{jw1IcCWF7pYrTMHZX8Vci zV;=E^x_K68Hoo*MR`n(Ow^4|LW(aW$9e5P===pTx^j74ta6PTxv8OaBM*UD`NVZheW|1qj)vJ0x9>tIDuGMSJIajYazA?UUj8PPyIFgx}zN%GTzf$9&|3PjCDo!VA zSZ!6$Ny|kiI9~5E6|%H8z7NxzysGEf$_El4j-jc{P~c4 zUQZu!8LQp5`U!;{ZdvoYw|(r&GE$exJeV&s1xJ+f)GjX4FC;Zal^msA-rFBcZ+!>O z*CG;*4F(sEPwbP&eXrwyUuNa;d-nBGw~)5;DM=55FSxY(?aiDnP#NBh2v$96JG=V> z57se#LkFp{+a_-|h)fBOcnXOvdUiRBkx^j5VduQMmRljRpn^i~{pYWA@%EgVG^Rj4 zmpic=Q;<&j1`Xi8Q(lgvEP@Z<2Mi02>s}zrY`UlMGI2rsK`U@&bjQQ|_yTJdo}p;` z@mmwvFi>hGB9qVgM_(A2T5d`cLOwgD9V5eIFVmDgZ>D-Zt)6FCl_V)sB@5UZQQgcjY;|%* zfeZC<<%r)})!uu4xa&IyA3@ZatZeqwt5+v)REieaY7bX;HW{Zh5+bO{D+&`6vJ6BC zOt+G~#}woqY`?}ySH;Ta<%Ssdk;oL%i<<3igvZf`CmBmv^CStxyb--4WW?{n$oO)n zo8%}X);aVJ#mk$~bkGrf#;i3y?#jw2SJb=9Xx|1W7PdHH3@b!dalDw<=T6F6?adet zauf!G@1&yKgrTPQNvD$p9coZh%Z-HDmNYr_%0ot))M)iE6Mnz_8W1R-ZQ7hbaO_HS z{Tmu%m9o^KOq_*a(~14F{2$#lGgS9Pw-UfU1(&Te8Hn49VMM)ZOuN{)KgcY_41XQ5 z%r9=ZKSNcqA{C&q^wbF=} zZAb3I;#`+tgvf$pVUK;#=`EQcGu4`yz8sI4nZM5&THc)pK9>RE{+uJrr*Pq8 zkhYQh&7D{@{8fHpF7n__su(p6;2|Mu7d-n5qz)~j0d#Xr)J6L5O~TT#vjWMRH$aw^ zoZL`X>DD1VUU&o{+XJ)gGo-JfrQVl^07sx%VNh=~cdawYWj>0f3=#1qB|ZF;)80JT z5r`UA_#dzeNyuq_VWCW;M31%2l-`ZpgOF8^i2ZZ>80Bj=XD27GwJ^G-rk6-a9yNL` z9^>QVm6eqzNi2e6LI6lZgo{)DJ>W0wb7(zWYBp?eSWO!7Gphuq=^$n2UlmlF|JT0# z1C0s(MPo?VI47^)`!-tjymtPJD3LJxGb>6hnG~~XYK*?KDN$=bv&#_Ch7XB+9V8dU zrzjOXAM$)Rt3rhIC)Pz1Na+3O$fR2H8pN&byuw&MbDfqvHvjp2v*E`z0=AH3s?O+< zKfcc?L1C>hqie*qWihCsXb8(VJ|WTBF>W>Ztx#cTINR^cQw7T0@I7wp;!ObES)X@v_nAX|tJ1 zF7wwpWJT7DS#NSFOLp+0GVT|!FSzP7Y+3H=il>^ooJkKBZ|tQsrL3#hfAur49GTWW z@HmDGj)!5Yx{1^tUsB;+x}E`Rn|{dX(@mu6-swObupO)^({Y;3kcax6~g?L*~NbucuW*p>|fB$+nE= zziEPt`)@{?@CA#rvgVZB)a@si{j*5%GOy&a7)A9|}Av=LEQem}G3< zup|6w&(+_j%Xc$LvhT^ttBPHR+dnM1!{or?NMFmHG{gE|hbhX83t)xeTd%)r4CM3y zE0+j^3!%%MsKsI64J+;gKz#DjYKXoBn<+6qr=c^>*fgp49h;ZcwS;S9$ysnzZYqu- zq=J`MgRoqBUIsM63cDm7_f_cjQ*}|YUuqJWvROy*<3=!4&(%Vhu=y{Dd6Ej({_sOZ zl|bF6KHf!*iRCig`4nS~Hw`%044zPu*g2a@HCw;S6_AN*Zb4dFsd?Gs1Eb)cb@sHg z(?v!iI7{s$8njXDV#_}Vg29V%i)puM@0_JHnu7C=9ssY-GvLktUFy|450Hp&&$4bb4@*gI~qQB(=NFdwM7APdP55B ztOtATZ*CD=6vLq6X;p8x_gB$>^!HcdEO-P@k!K|0N=jOaeujbVZP`;7)VmRbhF8NG zTpAx?u+MHTnh6M2Xj`P;Kt#V4Pi+(9e8i4ad{LrDAMH?#(+pjOP%7vEb_PijX@f<1 z#HP7bc)^F_#XC_X8CR~i(5nXoH`3UF@Kfl{VOCmF>D1U59i?*iJG79GYWlE~@V*GN zc~i?9UXOh3Pmdpujy}9sQN6ZuRU;j$dN?x+>ElEhC}vvbHJjs$e)`3vTaVQOY?tg< z`M|{s=$j`A`y89ku%+?|Szj|6-1w}f9Q2wqO^?dLXG}ngQ)zg8Zip<*mybL9Vl2~8 zV>7F}+vg_mG95bih95*c#>}D)ULWk1o80va=LXvfn?>T)jQxskbf*PfTS}N3U8r_( zaq>rR_L^h~QA?&g_lJqQLV`uSO(q5R^zcpc3TXG#lyE8)Hq)yxGpn^0#o=C`_8#0H z>KRSu?6YoyrS`U>f>{H~R(#Hsf~#|C=S=r2)IrgHRBGuf+?Kev%Ol4CgcsQXAUsf? z(C_Ma6|*g^*?8qvEN5H@2V#A*o?NnQo7v3XUHjLeMrsD^frh3gCMnwPi0 zWz)C%v-dz6@4l-+i$`UNH8RpysfZCXK*gk}sQA}3-D3N@Sy@@>=;-{@#%#D8EiVlW z3@k0(12zUim38y;Iv0;sW7f~ekCvrpZ0EVT=s^J)E7nsNPoBDX`Ou9ACaksVzWDh-l5C{|Et1Fn| znqEpm?z^{Qx;VVoTpP}t?T)1phe zI})&4%M0|RyZ9`O)NTs^h(E0T)RRT9maaLtw*uMkC~#rA>MYT97Ut`=3xjja2j4*N ze&!W&@AIWD>tVZ&d(u0pv-d{=XF7hin@S`lF6a|pzq7yov0QMP-9qpk3e|^eOgK2e#c)kct5?yn?vKG9kG!Q zAin<4wNF!{S(>C6KA?hXq!?NtaAYT5Zw>vGnyv$$AAv9E?~kcASGMG6&56OLRr~{1 z$-pN&^){cG7KT0wNw(l>zgZ}1%~O24na6cPiWYSM^Yeo*Ck+ThUE2s^r#{==5le(w z5rByn_&?%-b2W@eo0OZiR$z(;ag9>}$++13j*(3econ~Ie@ARFX<;H5?A&+OsOH|*hSNpl8nM&c+>qS84&0oyD?FHC`@O=N~)-(4el~j zxpIIN=+CvrPr2&Do2ScL?0o8wGc>d`{N$tsWvVisPN>L&7AnOnAVFS!)^*8Sm_t%> zI36|1;d5CRPC%KB_@?H+wh`A!J3b;~ET|+7-jNhrpF&0cQwIdI>^_#3j-HX7jWUrF zN=xRaZBQKyJ9nR*>*dFL|1wX~ti2T#hxtJr?B!%(zp!nWy1V*BDz+e)2!ni^B74j6 zrx!P?C0x5j0VSc_ay$!pE!J!d<>_y*e|ZHd6bn?EDCxIXgtn6X9<70u66G3NrmSYBZT5Dlkggu*JXm}ZMVaVYp0#sFS8paetX6+6(S3!q zj;{O^<*^*=Vte)nE{4k~^w1|>LFSPH+1|jy7ETxuO$iJ_Y0&jn>0NF?)|dt`Al8ya zG*R2b@v6=pGXO1P!hU8grX`0iwwK~mBSV$hjz^Q z8YVLu!j&HUptVhBIO}MIMRNr7QdhS}C(|!o8h=ivab>CaB=v6g$_LR!kB;;wdg=Px zL|x{MC2GF?I4VCDcG$wXvZ-=9!S#y4%G!pE9MkjbQ&1c=14<5#U%}>4OHk8(qcTPH zgH?!4+=sM6-m{KY>C(BR%BElP)YG)#xv!&@BHwgk$6lAz_F}$%!I=b#g~b~YN?bX+ z`}Bksml@ekjQ&aBTOnCWt=o+g-!0q+lkhaW>a5ou*c$>H4_NUqeZx%xEv?(0OyylI zPog0qHO=~ZMFfAUaVQqoFTb8AZ#`Y)t)uzLx1&Q}zaAbneGBgF~MMuC60=xFR3JP#I4hJrpEs+p!v z(KU#s?!_c1r<_E|Bo5`n=W9glRDAR1%nh7io9PqR3RnOb$)zxP&uCDZV1W_)Dao}b zn0Cf~_QBP4WF>T$s)y_!}XsY>ik0gwhCfg(X zcY|9&`*(WuaDALS{zS;#3`(vEHF}Bf6xNpOc>^V}cSYQ0b)AC83VR{5yQcyg%75uY=C zl#yG~V5Nti`TADRXWf#MTYUjmKA9hJNQ%wj1YJiD!L}7W z-{_;sjlmt^PE0iIAx58U31)-{&XRb~$Qc`M^t-cxQJYR46 zmbW~NxgG{Spdgi;(k`huw6>>)O)fT&^W5klrnxi`CBu|itTnZe3T6#}o|y*#`xCsaFh z5y1(6{&Gu%M9!wpuh_h>u(6MRLT|*VlS)^* zd+B~ba`CNSE%w$_y(5`0+z1+rhtB#<>KX}Z`p?UEN1UI34L9f{N zHu_6N&LB0nrC{nf0bxI?()poA=)C+#p{c1U=UqkrhlbrPO~Qv-P)@}0<5bR9S;b~wUPLzmP7F@p zMKxGR-UWK{Vb<1`LW6zyiv>-$rhLq4o*)U?xMzW1L&qVzU%&sS7QkMSvphQUsQtS- z<&oCCT9z%}rv@RWx+BaA41)-C3oIf86n~8b{3RUC|rVb zmQJipfY%%}dH3ZeYbqqSEE2Yj)B0iP;-t+=4;`kNHES$e>Xz#GU=&@dcij04ZRRY` z=awwx)~WJjB-hA%K>kZ5htU1r)+TU^FfxyPPwp>QFeyatRy8LZxvnea7(5lasRR?Z zwbVGPO7=WT$%H%{{pw#h8a?*=OVDOR`hWnZGYHA!nEfBb@;`~(|L`^sl&^lv zBT;7m7lVBH0|81H+N4v;0?~Ko{P<4>`EFVP8R_sNoXHwo2&6^kqAHhoKEcdD=ZaEM-DQcOs2*)PR$-Bj%Y*7g_-4=DS<~}ZzeBw2!!~#VHVV>W* zmTVF#A;XhO2vZ7}!V{#gk54k`D6u_7AfF>oDJgN}G)D#&D7Zy_R0sY9y?2m2g@`wj zWSYwwrM04CV~0TuZ)ABs*C3+RABk-4YG?3A64wnldNFA!Ic=4u>EZ!S6^o&7M5&r$ z|1*^eM$C2fmzqd`29618IOr>Q^_kOfKrN3*Jki|)6S!w~ap2m8$ulWp9C_LSXPEsu zZPWPN=<5l8FmxsEu3!n^ksSgAx++@jk0$oNraDgS*6e?=Y#J4*RN>}uf`z8$MZE(h zRdAlwUi2sagJM3Cq$VGhpCJ5hQdH~k@H336Yg||beD8mX(9$GFxjhs_`XxPl(Og;4z&d+qFVZp%2-coEk~^FT)%_IX$kZy z+1AzJ@7~ll^b@65p9duP7~`i_C&#~I>eapY&V~VyBfHbhAN4hwoUFuB-7V~k?v6Po zSlL-$H{Qj4O3Q5VlJm^zcJONpSBfOw)I)@E@YlD@(Q*d54pb;1tQbb*b(->$5agQ- zv*6|}7>Y}(Wwo&B#GHR#59=6fiV({N0csdny0l6{-hM53zmsm+`be0 zYI=0I&U2KK03(KuG;40Fx@#x+b*Yc2^u4Hx)4Z=vGKsX3&3-p{bTwFXQ@pyKeyMHH zFLPV#>(4Oc+A80y$*O;QuB}Xcl#CGqkEUT8EVnf~^WTlVXxc?=)Q}a(N_!je0r8lK2+58Z9ERA~1 zQjU{1f5d@xl$B35e{9-(=7yzzKqj-)2KoR~_e6_bU1bX%Gw}R$F6NW_ScVzWhL?I5 z?BE-P(O2~{N&VOUrgmB+P5QtFX;xAu0V~_cf>%QHR@u@#>FIQD#*7rlg)`}h;s|$? zzqPTVPD4U<@sA`TVkUL8z(+j?hSx>$22n|7m*0bGqWIe`nMVeg4mem?oscHILr%sf z)kNQO1vnN_n9$wK5NsUOEk5W25nNWMK>js#%zIFn0IhMP)mK6(8+#>u{7l=1vzxj3 zG}_+DnHZWk?CtRbys4vcRjacF%^1!2Vr2@aas4KovA5gEcHI|)bwHIJChrp6MUxhvdz7TCgVuI*B1Wo=CC)^Mxt&MyCn>QxT2UlR{L+FA zRwAUU)O^o(0`4=;Q%n#^xsd17b5AD&$Sgy{yLDuC9XFW(D+1p2i7q_-G+tQ|9<3A9 zo3^BTnNFl+k4Z_n||0K0Yy@#A}4c?SykVHw@acfsxg7n; zbaACmcoiX~0L=JcDk}A#?Caf>lr0_l48@xZC#{uq8zW$w);}npPGkJGrjc(!2DYl& zf~xCPAh_8ewH>=djvo>5qI#C0Vzp!WoH^5Qk?FMZ`fjt~@r1GrXd(aVI&aNHpI7UT zbb~hNuUNQ^S&@IjJ6h>QQ+ZZ)XS?h_SQ*D&DO(RfUa$rpw7Dzy)2Hew*HXLu7*lJz z@wS23((o@_F2?%Bbz20PE-tP$JPeW}8T@x??{lW@r&(@w#zS4nIC{wG1y6A0XR<(!6q}D7qD*WEdT79j1)0sXzoyL8{afZkGc|zHy1UY}DgEou!`q`r;<}X5;2|z05H{9IZzrZ=rnm#&oRR_5&Pq~4cj z4e$>ZhTZJ=i)xIYZNlNCp)8T)Yg)0bHI^o8E!g4H#R^5is3==epRi($MGvH1P4{3} z_E}AuZPnN7&T4sSB4e8CvlHgP@8zKYutAGrxwJCFyB)L6V_baH4>gII+f%FUDbvud~)~5g-urSbcJuZqbVC z7>~YpG5$pbz>hA4rHv$QJ^I{#oW>?ruBK|#4a1uON&xwl=Db@F@YQZR1l8U0zX9|K zAO1gOMWZt_*U};r5QB8LuOcR1?I@Osrj?#DQPjx76hUS95{45n!{);!pKc{yke@#) z0LL)9mxQ@lv`ZimB~Ug<90wz?u&HnzKZX#uW@zHf{#d^H$3x)qN`OUf{^`_iAzzZ| z{muwRjOp_@bt9;sT(*>xw! zLe!W>X=dVR#Q?bB!riC7r*f$U9@yzG(EKT)_9!Lw%_9_f&a-5CfQ*$sWQ1r4GlTql zdi|k3p;g@}+ip4Jt((}Epy}yP%$c&=-o(R&PHuZNyeh3(wkPfdsvk&L5 z9rV5GN5n9@*C|Yp!e^5AhR_#3_;GgDz1Lo{@X!pH?=iazplrTe@fY>EIu11)S*kqp z{W)#{Fq419BmcK#rMxB~fO_?jA=-eG@E`bgPv~zEVqM(@aaI7N{y+!ZNT6zIxMbfdU4=;G2C~6ky?WIbLs73&cG>*v_HSP7UW>(75kz)wbN6ad< zfHEF-b5)2-s)v0T3|3Q9 z<^eREp;8?#-t&{!{`vGbXD(3Bp;0)v(qGtR1GdiY4y?u7?03EyoDb~#Tebp*+Nx6y ztH>~59>2Nm=w<|zx)GFa>`xjLUSp4UnXgR0Hd~_I3z1s6aVM^KR=6~+y!SnEGy1yV zCfFF_uYy$H9z}d{2^Y{PIvK+-B&`!Uabjq#Xj`9F<>(KItyxjp`b9d>4n4U1@WT5AMdet)Brl2z4}Jhpat z(p%x*Q6I17YBcZ#-tFL?OyFe4Rj`#BGKxlOZHMQ-+L<~w?dm*n%%V+F{Jsg>c*K0f zPI0%oHe&y_g5Lp~tEF#nKGjal4k{xYLa_&mf7I_&XmMdb>LxEmMQX53p?b3TEY(CH zG0mOt)~BKfr3o9`)%hg})e53xb!NHbp`*>-0W)=T!MFnI?GZJ{(f|p31ZQpOhZ+o3 zl-*exC)$0~!JK#Ao;t_Z9pmaS7M{HiH5?MjP$~vLfIzM*8q9NEN$&O|^DfknQg%Vj z_kSw$jxr0+&WMI^u=!tKq*1D|d0l>*;9#ZvabJBjrb${nKLy%*@l&?j zZo7>T@;IxaD>q;JG)LTfTJa{i<1y)i=XG}3*jrFIMDCMb*_e9sgZsellyb&`we>Kx z+!hzwEUKTCne$^uiwm6E1so7tI?Cz~!uo}AIwMc8jRonzPhw%Rk>b2ognQ}pMf#le z0>@62lyuR`mk2$c0!)5Bl|+fyPoi}93j(>Q;~(Xz(47|6xo`>s-kp2{qB z6ThVm-0}s-lC(w3KL}H5%61lT;#4X$aM`nG{mDSTTD(tgre|~tG;7Gk3G-t3wAc-3 zfjB=#cxWpV_J$|BEZyU37Cv={__92dz;e#QlGbh@>fWN0oFBx^Zr2QiFtMgy=DDyy$iMslMc%QpL7_Gzc!q`BjQbs=>Suaj4dD*oQ*!?Dh zXW*x+`Kmi4Raeh|i0C4wm`%@LK#N7F=Jx4v^~|;4Ss(3z=T#okot}kQNZ+H!b}b4f z0ymSCGCQ>D8rAu`1CqP7(%@`5Z~Gu%O^~ulMzGgsC`9xkAb$mr92~HCUBv0{^!lB< zOE9{)@MD8t+YYl^Jn*nXgxz_sJ3qDQ@_5Vt!zFK!x)P=Y&Vl_`&;5Vmf&Zs6?%yB2 zWWh^MX=P#YOQ(#5Wftotxr9@r-p@}!;;XysJEY^QZ6Dsk|5Etb5v3yO7XnHRSdprd z(8*IVY^1~FQAnCWg99?aL~^2{h5}S3P$Qt6^(hiL1(2&TWhFt{Nj2Khfvj|n{70no zAM^ib>cqcNs+SGa*`5WCJv@k!HydM+WZlc(yN%0#X~?^Dbq|?=aP5H}cSq!(9@mSF z5eTOF!|bDb%_<*_(;2nc%!J#eva~w&(y5*LFw7jl{Y`H`Jj=5cJfD0mzmkpV^p+B* zelKS*n}_AJtrglc5TB%hak>e}aX+dkdQD+*NHgkPt%XqBxAIX^4louO!bl7@&JY@I`kBwQYB`{KSY!V?HID1q6vj5&tXF^ zt0b@F9p@Jsr#Pc)!^{HEy+^R7A+4d4u@$U6mj*W|NJ5~?9Tozyf%&{fZl`EVf-6D{ zG~C%Z*MUZE40GJ=9g8mJN63S&`qQ2=c|dZ8oyyxQNvJM~F@bf0OOQ{8@s2Wku(mqs zsML?+8yND7K4<;UIo?Od9WwYkN`ZKa=7hM(z*9J_ZtpWE(P_=;W91>78e73Adpph& z?v_OxI|Ln0IYX(do}Lh0VelwyNuuaI2UOK*4pXc4`OR5BUvW) z+S0Q`Vnz(p)EVI2&pXT&WfvU~^Nj;ZXaS2wgPbKw4*r}o6bw1+>m>1v$qHk&mcEO* zH?q}ZEgKe>a_+?lK`Mr3$+$4hH)awpUivV=n_mXxu8PwQH>9Bv}k*A2ok&u3}ypp<|O;zKm-;2LW+OL`T%nw6~@VY_+~ZFcefX+ z{u_ck4&PLSfEPrf?h<0Z^C0hcMaCFOO#UhqK}MT(K$Z6KyeGj`i<{b}-QiCNTYj_4 z3@bhCA**o41y4b(ULcy>^ez->hRki#kD*_FtNV5(m}(DIG2#nNTDYZV&xm^O>@Gz0 z9>6_#2bgc9*uqZdN+8WsBH#JS7W5x_o+35)UNT@?hez1ztgpSmOl@om$Q#V4p$gcs zrt~Nt4d)eHca8B&=I+(fK_N#ymjOLqyDx7ms>w;Q;O9PN+^&!HcO z($LpMnW!i~HtdQG(J7oVCavY%nNA7bN)Z!0Kbf}mTIw^6g~lK1*1^Xvuj__`7)xn3hMuDNymt;~GP`huN%Zw?Gvm72V zj@W7Vz0}S>+S=M4kI}w}h~87H{trHq_oPVyO)37$)d_Z!8SjEWv!vDZ(a?EG)AC<^ zCY}q4+ka15P8rG|eHC{2E>OtfI2q=lhy4NWfx3;ihQ}5 z;j2n2&7??|1A&Hr6ec9I)~{U~0A5HJn1>Tmc^n{w9owvP@IlRA|4Vn_6uGE=;IQjC zoRNo)&R3oqjhXHR2)g=3-lMAKkFjBrwB!~WFZE-DX>b>z%|$BK(NAip&-_W3pK!3d ze#L=6oRUlFbd*AGon& z^~&-y&o7>&?d{@QaRaj3@laj}XS`D12OwQ1`v0EUoPh+rO5^fY_30f&W9ZNn!dj>8 zRa`C|QZ5kQ&~Op$|fVMle~@R2l?!#T47)Lwatqxdx?LhAi}f z{I%EfB)2C@@YW{#KS3h0xAia;!=oRsla%qX`MnFvOwU<1hLo2WxGJEVD1iF$c7GIi zyo2{E}@Jt zmpF-_4X)d?&hotu1#lR>wy@|xRD9ZiXm7i}`QmRJQ;eB7@6Ef-g=LSAOs(k|dPN!+ zQy67z!}mN7Au~z;jgQO|+b#VXeNs7Jcr3Q=b8l|79K1RpnYKEkM^E1m*V|pN=4L~^ zh72nhXbhLMhMX1kKT1h_&b5b^82&HRq;e0-A;BJ3caDQXCl6`}6%I)8RyJEow`X2^ z=PoT0%uqRR+ItFCbTr00G?| zY;9wD;l@uEKUiCri2dB&1#8Ad8}*j|a*pdc2zNs) zKwu^=Cl@hg<=g)ZdGR&S7-?ezR&74^PYlK@4+5_B$f)%%zU=>otNB-?cu3p)Q9GQo zYKTT@>CTdovg$xCGtJB9M|~Vv8i(4nU+8|jxJKPDg}Os+x&2BwkDB(wWn1hhgqZ6x zJTfDf7X8%(&4XXf>ANVvTmEyn#D^V2NahT|?%Kdl2;+EQ#*Q`e7>2ycF$IB={HeQb zMMZ4=vK?QJk8@Xxo+&DzeF^KYW8;R1ttb$W;l$>h#XEJ#j(W!%Gj=)~oOsj!UC#y* zURltW6^(eq1lfV7FZQ4~cYkGAm}ay)=+ad%9lpok-N}M-e5r=p3E9Js3M`kG2oh2( zc2glbsx*uK)GMSu07p9<*?kA+lRXQyN~xA<4okC6NB68wBKS`&fR(sQYuM~62Sdm> zXXSfg){2#@ucH(pPJYS^mOLFUEiEm~W5>J`vhZpZ7zqBm43M({owSDf)ku33%D)B){dAank{+CGmDrIPH ztw7?wLG}iVGvVOMt(~teoCTs=Zt(*n%o8etXjM76fikvr7%4k_Gk_%I&d?Dw_JW?r zHZbuE7^Gb{~l5x32uI&ZbD67bZBBKY&cRdn!R*A8opFhU5^yA-F>~mW=jz95q+YQNf ziU)C;tN)Jd?k4tI3}igrx-)XF!@-Va5ap?py&PW~zjWaIBBio%X#P?q%iMkmxL=3y zB>O~*sS}B+xPvX?-g29vF|lp|j*k7C$w3qQ8&kT2Bs3w2TXi3!VS0F)QshA6<_J$L zajBf2ZY7TMReo2KdimU{sGctgb}SG<9R7caLfmS3CHQjid63XLuirPPOS;=&xzI7YDJdu( zIXSWAY)?@4ZZCtDMu*eO5U_Md<;x^fp*~Swt=Zb?Up7;{tt#!qDV8(cKg;U2AI~HX z(Ie5Nm`s`HC#P>zEqCTR zkjppo)RS_gtc6ifyau(3G>#3v$8)WW)zp4=N5PJD(E;AKp5Px1NrC$~Wp<#IR;bISO8yPIX4BMLentzf$)3`ZneRF+g&td;9>5sxM zl26Eq($Dh~Xv5linAU86oT{cwq<$kwhevi?#)MrPzj%{9eR~~>$#+3NNzopp|z{mdciwC1IiR za{YHoW{Ya?y3Su@tya|gyFJ?}R-7<~6Y;7e) z{z`PX`tE6f8l%ZL1`5&#>DE>Wy`R-XQ8e{aTg`9Hs-SOqg!nk~3Y*UBF%O0CB9(Il zveIwd#5A4(_2E)aF1mnHyW1Tc5HMxfi(PTDAG! z2kNRlJ7LhSMHh^T$@0e-;~w!(*omyNq+gyj$ZBn9Sq!Q71!XLjPVrdXH%V=6+ZIc? z-ob36sa$S}yuW{*9ITrw2aQ=)dRd=L=+a2vA*S$bAFAf%6U#z*9))?%&3k*;JRY*I z<3aPXrb{Cb+??zQp5glW%rs?1Lqiu;BImql%0j^s*w@PP)6!{KMttENVM#UpUpe!x zrS+FunCgxO{2tyh4SOfXsk;5_?=94<%8#ld*Os2485Do3xNt|k&kX%0k`b?Af+6oA zYM0OTwX#_^Bp_`8lS=HxPt-mi%BB#S?wj$26^vJ}qhyP)f-4NLnSrpd?v}&a+Hvh| zaCNrWQnRiz9jGiR>~(MG=<6s^)^IPn!G&@6Q+oPqa}&KvhblHl3xwGeLU}d&bfae# zO_YoB^Y)?P;o0gpoZ7ypY?Hwfu@x0(Hjd*gu?!f|Xvx#?g4EPL%RMqa3AJPj5&_qV z+~cdR&foaxc95}7SHl(?0=zsEwPpTxC(M|Li$X;-%rr9HZpj39^an$zGQCImhS0 zxr_|tl%rlIOvCf{H@v-d6APqhX1tf(i0r8affe!NEo^OVjZt9Y4e4VPubzZQkX!ui zS@65-tNZpp+IwHVmjnSHJhVGR{;k-I{F#yxsLV#20tPPebRtUD{{>gc!# zWExaZ^jjTbLdK4OYH`f6z^UH1KgT2=h9g2>kxX05A)Nm<;d+V$w2rX35EgoQ_l4ha z?I{ulnZVf>LZGMEcI@QbT+!r?hmb+VPYaRba{cD5wY5{N?$uXGNlAgvUwO@{1I=x{ z06xIgkuPIUr@zSH`9TLWy_b+gB1kFVR!-8TIJMuu$1>~g6XNuI5a<*nZl(k?X9&rEeA64EJ*k|; z=UaAa>5lVt-12GsMi}R%w|5C^Q(#x5G%C{4_%NFw;N6oVq9R`f>neHOvvdb=|LOq- z0_pM{;oiLMwvj$HMuC}1-sO~PZz=lza!4Q5e|xMARlB=y8fFxcsZp8!cxtgE*(f03 z8>ZS5;>lE7xl(>&3{4#3uJRnwMc0)Hh&7UAmIa^wykx*Zrw?E$`-0jH#a)B7;eK`< z>{OCd^AWLd<$0)jX1BYRk&S3aCR?$F4zD!j^A!{Z7Qv$L;MlUa!i20f1o7v%1Q6S)`J{NsXV?=oCJ^ugV? zG1flJMI8DdA$=la7ShSHqjxg+<9V`22IuD?%}iS7p1j_G69%qi?F~PfD&NpMoWMus zx%avPehg!4(9TeiOky^+r)dIG{P(swxJb`*=2<9xf95hUWe>A_S-_$D?ZXyx)52rQ zd{XhU7$v&4;kv!DIJy$%I5L~OFu068JWCA`!AKib2K80KSTw~s@sOW18Hs~#VvxfL zpWZh{5HcybM@Q?iOLSYQ>aTu6MORv2i%$Re=8Y1$rF9M?lrgz~El}czV3Vn@%t$qQ z#t~_NYhC8uY5F7;p;UCWa@J&^$>8DuPYAB=bfyKyw^RE!QWfA#BNVlP5Ejv>2p6b^ zp6dui)6~H^H=*s@uU#SUT#EXl3mgCM#1FLSF8vcq~D9Bw0+^oNFGKU`?dtEXFJjr zg*hcbTm)z@W7IVZb*0+q$dHgo&Ybvqd7z4+(kYo`gyV^+|SbgUg3UjD8K+a{&< zu50kH<}{^lHD~n*&$h|1Mfz%dw2Apc$T5-h;}awYnX2jx&i2f(LXo&znlaA~=E>t& zjzIRv6O+lmr5io{3C`T<_HU>uco>%Y5JA+kKv>vsGqm8r3nd|Yh~CQOq`qE0q_IBD?mgb4o0 zMa}ZFCPVN;h3+{#R{X_J(Zm(^Z*g*QHpSW~cFafwNMC0Sq^G!1_yVAfsVuKQ%Pb0U zry7zH%40aLCvM{TD8;;RG*4r^Law9;LiUw^w@_!lD>T6F-lmS`=ktSY%Ic{*b^DR= z4_3Fx43cZo52}tT%j4Kt)aOjk-g3Str?+&ZkkUzqK1<8y%dKye^WYJQWs)SDi#wl; z=TNn~1yfP;!+Lle>XCQX@U7#Xnn%!~$Lt#~+yqB93=S~xD~RHQ#B^6mo_)1u85P|NI2I(_|w*ZP)d|LGK>GPNMB0sbukF~@y=UB2-uU$ zo7<}M`zAJq5XfK6KD*d-PJYsLxyK!dsPx-Y*|e4xE5UAKyfi_HbT9VGaZ|=f9y$+l zpQPEt`Kn%Wrx$C9_u@kiF$KZ9V`7$t0xg;qQ#tlXkL6;b4iV4U9natrpTTM9CqBn| zqi{~!RY@mjFD=ZOtHbC?8M3QvhnPg}ZP(YhgnXU?9_E|*Hmj8tC#_qz@l`jfpsYGh3YCe(;&%)MDBf6F7=*{%ItGY2#6vL{q!J7@CHdS+nbUJUG58GevA+}ho zD1PaIJbV2w8eiO`fpc2}y)?}#-+uL{uP>ZT!xYF2_5b~u?>@Cq$H4uf3EXrlSO`;Py7r9~I#6pQs%c?_ZNI-X>rnX0Sbl z41lz^z(ADrdp>=OeZW-C()`1!5k*PX>eyOZ&H|zp{Kilr_VY4I}2t8K6sx;Nni3Y*blA=H2)mb53rOrJXZU2 zQz_HvG)A!qO5*;oV&?h)K}F;XVV1Fd!4YU$t&9Md@qqGjM@b&_V&suUDg}x2OJx3T zlDq{pOm|Uk#BdF2bHT3P;+i$qSH)x1-#oj$!ocuAU6G~wsT;kqHOvvAJdUx{NENS8 zM@>>*f3q=c5sf_SbA4)!v+-y{Y8H-d)wIfB)E`yTpH-g5CKtII_o@37#(Ixy3PG$Z z%N@xt5*Eyp4cBiA24YHbuI%qVPTb7Q`juao-WSWZ3r9znVaZY6G3s?+zxi2x^re0q zebp22hdu8JLSA}`n`JIN%pW@?U|ACan(@9E^@=WkVwP>b&^RnhMTZkn-+NGPJ=rZ7 zim~!#TX0yEH(%+iJ>4(z_NWN{5|Q=KC% zT)j0j>Al@^ynp$Vn{T3h??+lnQPjuVdH_gP2!EeAADfmMT88WI=5hqffw)x~ACD&C zhI@$yRw45zf-p>;RDJRCOQiV(f}`SL%5?5o0j_qGh}te3@A=RSauk|>(pf_!(h&W7G zh>qh!Rw<)>@<^P02tYXwhQ7&e1Jz~QmJk{dXg`DB*TN$QN6AMQV-L~c%bR3Gc+(kR zL8)CKE#qgn*!*wcJiBdeh7P>MYP;%2^-bEBOptQROPxV>b!qsUl9R~PXld*!Raf$D84ey@Hm4Vvvn{6G?{M^S=zc0>I&q{vd53{M?({a* z-(&Z4qU^{vz`KC@VlNukEo{F$T~6geUaAFStwA>5W_mxR8~x_Td6etrtc;Fkx9P!f z2vo$0GpFw zxbsq7_Gdk!OWb=Kyqwxpj<*|0iKJHETIxjv z*V8ATJTtNR7)}YS@4s3~bNe67e4>146cJr5xu@P>VM6{nlM ztu;AX?!I;E#F^o&ZMOYdgnHTu17^uG53l2b3~7Rp429POuXw z0Q@30@~lepQlF2{Bi#c_)mbUIJnw!b&74A1s{P_)n@aK(yMTd@8*GA1)-8dne_}HS z)oziFrOR;{ogR03!&TuW= z03A0%Aw;Wck6+c$gn9(S+-AQvCp*2J>NihBpVF5b7m^k`=QI0?cb?X!rmn8-0^}^3 zoL@&aPwU|Y;D9zf+iPtmvXt9fnxU3ze)c8uZG9Nlo( zM_{6DAUHJaI#+0_q`DbqmC`3eKaF%x!F)puZLd}334{z+W4D?7qWbO1&@_cLEUZ92cq0mh{?Xla=RMfMSiHh_mm8(F3ZLDBuV1(Pgtf&*w&h}Sz((q}{+4Bn?%b(DRpbQNKgr=U62!q$c z#d44$i`eiiA=+Y{V1GPuh!Sk+qyrwpVc=-=z0n38JihwA6%@yj6qSc)I*ON=l`KF# z)x|zQr~qK_OMk!WXfnUnQ}RfN%RZT+1W~Szh9rWQs>TR%PPkg|+f#Z7g(5ce5*MCD z9OJA1sG?WROZNW$y(9_Ce@7Y#C9=O_oYtCb;h-euMr zp;I%VLmQ#o^mLQWjT|n*ljaFKx}G}+qgU&h`7W7F#9q`9eo;Q+-7it8Z?FP6ZB+S5 zUoz3j>AXt)%|-zqaCDy|N6JK_;356{ZC6O|jGB8*-A-ID4pNW5)c)B-%?eM>)HI)M za6XeDr{i9>(mVIkEQdx3JzuJOA3}y2X{z;E*%7k*wp?qsx|zc1M?(V2 z@e^6ABt#aQauWTnTJh9jGI6ORL2is<9CY%UX-Soz;VH-{hbbijdJg>C)C{p30>?5F z=riBZMdOX65+^CTN0M2`aGA?avS(5Xc-q=?41#5xu zS2k~A|AL>x)$#ZBEtsg%lc@}r3k1vGt3N#jd}hn_nrqkvtG2+b0YKNrX2f`<jevc!3>eR#t~Ua;^s_b{!+sUctAezyHjF2{yQ1G6O$zrWCUOW6l8A1AN<2{@oj0 zlQ8;3MBq{?cLp`bQQ$$em-TWIgnL5e>w*R=ne-6Hd*^CKb|%$gD|IoQ{|O z)7(&z!D2QrmbAr7>##gfco5j|Se!y`5-s}we4YEY(Swvf5PBt{Q8kzX)BVMn(kQfA z(2JKB&_xBo?+@Gh|3SC#8vV+nq7xvk z<|Xo(gXeOxlO1zg^$kDffNt49l#-Pu+bVwT%wM&j;)ashK${OY;?wRYFFT_-wF}V} zKha6{{SxhztzhK@DH8^F3)KUmNbNuqRP!*)JK1 zSL3H7e{NryU|zzgP1=eFR8OzkzD$Q=pXhJy4v$5m<_4)-71F=j)BR<3(`Co@L1ev; z!pcgyOKlTN!?PUOQKGh(xxmf&(^-kZ+o_-YXmS$WcVGMqnbl^Jc2f~}+XZZ`ebJP? zu9sg>BT)Q{LCO-aI$KooWUe)k%4WQE`TsU9o^Gmqwo5J zIXL~WO(IE(P+W%;C-{xdaZh<(-H_4G{R!eL&Ddv_3~7tD*|^CmgyE{cz2fv?}6}#H=6sA}r{(3i__$JKZ+rix0T1j6_dj-+c)C%s!DzJmW_>h|}Lo5}S)_H_fcmMjSp0Ay*FAgv;Z{m?+K_~Z-# z7EzRe{-XC^o{TEseQH`S)LRg1hKX&0poH*5QuMv@9n^4L$G_%|mh^6t#eJ(T&zYE! zCm-t?>Ew9Z6-1M7NB%AAau%^?#*=s8 z5}wSEwC~pA)=Mu@B``PhhSJJXNM#$Neq8EWa!c}FiJT;#uHeK@s-)GsY;^Tkn^|N2 zxZ9u>p=lZ2a(T%|EcS&ey&k5IG!+$YQDv}taU9&|*N8EJ2-|cy=Gb4F-s07?x}4Ab zF{Cj6Sotg#cls8c*kn?B&LMLmt#9BRj#Qcz%LUs+)~}mpoR#3LiT0g%L!|>Aw3Vj3 zM^?$ZlufqbJ#vP?&fZ>ONeMBJ{l-$#9SYV7oYGd)-}fa!Xf*=oir09LsAsW_e$tsQu0&5CQ$o8M#GWr)Czht3}HE0R<(nkr`~*~1u3Obq4vBwuu%T1 z%1FL&nLW7%bGQ+-pMiDr{55`9_s`EBX;}LAyyOu*7N(}Qwzj%equ@bQ=az{ymKuF^*r#} zV;SSn3pgU5Devn2HJ|+-yt!4a79JRrFB*ZzH>DBKJ1L&ryLjDlH>yM8W#%1G^c3|7pHo?%mufpfLy$Fu5SVq%+}&wk{Rg!Tg28ZJd&Shtol1HrMd0N_;~2l;96Xi+1j3G^cIV<3OwCWkd&s1hsNm+mD{ z8Qc}9!Xz!=oa+19$G=XRSQptvg`MRwDb>WS4P4O6977FI+qW8FRlF#uGO{fn-$kC+ z`V(v?J(+00+e+p0J%hv8V|ztG?ntU0TFA=tM_Kize2xjUW#Gnm*DqLNH7D0%%hd3QEb@kDEnELg27u0e9vy^@Y#~w!`;+%yGB9z1Fx< zxCgEyH$bNG%jh(GA_G;8tw94(4qTL>2)0Z2B=wc%>p*oOiVv2nGf?;Z4nKMleK<7~ zd)q+87r1Aqycg>S*VXT7LMRQbJ@A+A;rH^ z#BkSsWLBLwH?(@5o_>`D*Op1$HFYKHFN_B0)2Q3yWx!+_+>C_*{xHmVD}JX!k_YBs zkUDy?Mo^%8wvt*8lE5>VE6?NZz4rB{j69Q`JTBza6vpEr-3Xnei+_lv9XZ5*n5BOU zeE&;X{hyfl|NazzGukr%>`M74CPy&)3*Y(nte;$af;4v^1Q`U!y|)YLVC?Qc60&nd zCr3wiPEK@C{1w3jcdxfT)8`<@#}CXWt(dd)@bCcD;m3_FgCs#tG(|ShE(nH~ zG}Ima8^rts!^Pl^=MVga_+;49qTtXV1CJUq#@nBw2V)g4aNm&ZN_EUjC)|1rHQV@> zehAU5d$&I8RXqQ|v?;+nke6OyD>Kj95MOg{ece9P4@V1Tq#+GA%h4Rp(x*9iE<4x1 zAOd`s8KKG*J4LanUOH)Xi`6B5&Y|iAZ{U2xD?4{BV&xh^J|HvzQ`U##=W()dMPtGk zyP7unJBe>?#6&0e<9+B9icj||-b;1ac?XgA zOV~avq{l-49P35;7l&O#h+l)GV^NxQ#po+3tt6!$Yz$2_9(poox<9jVoyokyx|3~H zktnGA^<0{&FICaB@MSzxAE3Nj8cYDNLTxM(MGAiN{*Z8n!e?3uiikBYCUIM z#r*D;J7tVsZxl{#G;y2)y%9PZtnTj$_@QGP_^Tb6<|AsRZ{E-tPna>&CsMmd@fOxZ zKG!0W`tCkM>oA?8R{mtPpPNZKh+riJN-XomBD#f(mj@+7@+lV3K=+V~#^~?k<5Vo1 z+_1npUvUrzACNF@Gk#Q^Y0ld5jFIYzWM*t7delH3iy7wE zy#fQoFqN0QwZ51_9BHM#7+s0GGX`brS8DvEak)#+x~xC8WhUg|QZZcAH)v(ddc{^7 z(af{iUy#eyIkmo$A*P!kui>##k+xz`&OV&N5UTRbRAa`v^&DuhUV7SM8BP8W<@@9# z1-g{_R^BamkediEPG;Io^HB%=5wDlUQ14(BJuF<6h4wFn2a^*9T-N9m8Juh% z6}TDs58R)d_P1DFYLk=I8~jMRG)qkZe<7H9qNkexi!!6p;Y%!11M9lJ%ja$tEO&>U z!6y9t{5`P2XBdk#P3!8gxFRxwU;qwMK}LSp19SY=}0!cLO;D#ZA#-LGhu>C+S@i`UZ>XoCX>CTrc4OK!%U& z$Ue%4Wb=vguT!q7SOa}954rS~PD0RY0fzC(*yi>~7#KCRUX~Yi|0eflfcX*;#Yqd! zLB{S4%6HOl6VlyG=f!tIQjKES%rWdnVlnkpmRf615|1|(($u6AdJr+>!oI#Lm4@V} z$6JRG>qIuNwECrzv>hInj~Xr1jOnG(-Cj*r_&wV**BG8IBGZtB^OU#N`QGBukX-N7 zDp2QUSuhtL$*g|r)^2J_H&kXpd$Tv~^fGt!4k|m((;Ai}{K2#zn)nU6y^S*ClI?S^ z0D`TyhE~z03t?{O?u})rynRSaJuagWSz+%}hgQokja|?3aV^ME@ ztpmuEylJ&|->?Nr`P7}INum#xLIwuc<_(!>$>L?@g13YG^O&=0I-Wq2q=5AK^fiv z0Ocj+)Q1A6tv{#$ke@3xtRyNDy$0QW2)Z=%b1`m z=hcz~c`&itkC#rXZ14bkkKA;yM9}V*rm>~;cnGllmO{~4#z*8}V}rETxdHGsw_KZt zLaWyHy`o}wPb;)RBX*9MkCWwCFwv5|R~*B=xdv>xKoYLT#j?uHX5QL*7E7>i!aFLj z2kQZqzQ}LC6;{$2rFZ0Agmrr*1TCCGrWB%Qt5rB#K4Dl;=Dzq`aU*cAb9+=HcIns! zGbm_2&{UFP^Ce>EP@3-eFbZN0;!b@#$8lj4-`oOB%B82FQc5xD8Pg;c~2E-DYyVO1?&} z;$zD|oG$)JlS<@JnoV&cZW;2M9?ovM(?yEACk3=$hsZP5S>#}WBLm&smrXW{TObS2 zl&jg#tWS)x4NjA)%)4pYxH4R1`~W^y-k&WuyqP^sVxnuOu|3KD(=4G<2)k|z0pg94 zbZ^&NbugV5PR;CF^|rW}-B_n>AcdZ2lBOJMYMZH+Llun=knem9j*;&U&YRj*1TZmg zaOmTGm;qOFg?4NKOdoosCL*YDmpld*vDnAZ+M}7yq??!0VVaJwsZ{Sd-aqcSH(@PK zkSnm~X)1aMLB|CAg;V1;^eQh-OofQE()G^6lUXfdxn zy(J`ifOxm2Otx-^;h`YiZN+I4N~CnS%Qp$_@KMbQ}8g|7G8fQ)U(_c?Dq*`fY zk~w8`GV49E8j5?(e(g@R+DJKWnv7L_HtyM)xoh!;i9xI_r+iuKf(q~A@OEUld4d*+pn5zn@WhmQ@B=!?LS!EsP0B z^4jg>5l1d>KQ&l7tZhZ{5+kQ35}e6SJ^@(XZZ2eU;iVZRi$voL=y%swK&L|BVg8gY1LoIuA|C2&Qrv8s<^EcYxFW1?&7CkW(diE zz+kVcsM`Vy;ZjEEh1hxV*^&pdlj=#`F9vpOkvmUtJ3bcO|Ul~ zY2l#M?Unz2a1$|~qDTgfo77kKw|XsXWL~@Cui&c-e>i`tC~%uA`!G=DFkto?j2hHg zZy@LMs1Gcx)Abp!G0H0$k`I%kn^pM6t`K|izB>c`wYs!d2s;xqTkxaiCwnjP{*rGw zUEkM&U=UE!)_Ha@d91lo*47$>Gz{x$OKgng003$w$6a=zr$(8AR7oz(NRLdPr`n;)L-HYMW4I-qI zsH^Hfl>lsG)LBg?@t7xz!uFyrA_LXaUz)1mnSQf}1DIxJeqe?(g}3>&&0xX9rQ`V8 zUVuK~Yefloc6THo=+`o~sIiWR>rG2FJV54nhEY*>ZcC={-Xd%U`b=(Srl5^=5&|%M zDyn*^q)_&D*^MMYVJ61g<+fZ%Z3rJi04j<9+7C9Nz4!y-q_P0 zK;$D+_{k#fxxx?1Dw*4&F#&Iy1)(1?RE6R20L?OHXHcC>wHOSv!>*3K*)M5Y2-ZKP zZx&p{>{xo`R2;I)n(}o;!;7Pa_BS28ikTJxr{`1^|wLhK_)IuXpzAs z-y5o?R;g*`zAGMKVVi(%`^Bq{>_F&U?QsakGk0!$?Sd@imPdzrS;IdL^`)`Ay`B;R zqxMce%9-|^-&Jkj_qWC8!a1dLDx*^O>>mZuW@4*!EI|DUV0$PkOjA;t@ma&9h?!;8 zjhVkTzj~Y}xQVg|wpiC&>__0>cRY>{!cZA^0gHaD=a?v8a=Dwnnr;QtMD%ZTRhjhU z#^@L#e?8t%kUt&it<(Qy2wfZ98hT*Me_<7d_8_QnU~)kcvVAo#8|2Q0<19LoN)-EB zr9Pl;EUm3;0P$nAfk43%45Z<6)szAkv}aA;zru~g*bTeBcZvN0vJ} zU0G@zOjDR2h2>;J^kVp`b>-328X|W4(2COx4Jmr;QlI=`^C2#s#Wz zyM~t-KGKDsdCeN}<5cf~8401=$$fHhc?>aXfkt_OU)`bLDSY&J;!I=WQx=oEhuy~< zn%_fpeJw z*o0=sk+)e#@Y~cQfpQn}FJ1z4pr>g#?2c1qjnUvd(_ru{MS0{*zK@wI7fo4mHqOYi z3yL>6A0{?8^QVoFvYU<~(7XT%2Ex}MJ^Knh4{Vz{69)#q=1nB5Vf?kPuZNFp|Jfwh zjhMk?1r5E(cW~$Y1OFTM`Xk5E*W7y3?y6@4tDz9r8W_HGzITW$bBFZKRX1V+ZMHuO zrmgMPzV{zgf{deqMM?ifn9SMN%)v#r!#LeKeaFPJZvA5miMMQjYMwFhB&y<9x$Z(K z83irpROkE2@H<9#rJxtJ7K|e@D>`U#>D2FVn+19Y9pkBnvbszxFr zbo5Yx(sfI%kF~{jrKiCix3&B~qY};*TV(9|IvBMylW~hHKGVU^J3VjHMR2Tv=37u9 zIefpQe?E(q(#Afe!{SFQ!1ENGR|w9>UtPUToX;j*W@KwQY7V65&ml_VuTTJ`W{0#* z)Z^#J)|1}ZtG&NhDHo2858p6C*b1888dz-!MD$)BoGSRprSiSf{NsH!ayX?EvOQ2( zH7>|dTT_Lg<%i%rL5^Tw(Z#hu!EQWfh`TP6B z^vX(5s*%go>W2B#L!^ZQsTG|Qaeut(`Fh@U0HnP}Kf4?oh>j#Ugd6*Ox9`N7UpU;7 zXoLrLFHWw3q*g{ z-p-5kA~5Et$#bJO(#0m=&tD7M|A}bir}}SJTU{1V(a=dsXeE6_;GCRb%39UjAMcJw zo56W63;y%4u&{R|W#Fm-rz5|opGDHF|=PP^untAV) jZH>{u*Zxb{zZJa4G7{&|mYM|bkphxpvZAHJx_vf zvo_w(%zWRxznN#=nc*K5uh{!Mk63FR>)g+zC9mzsMt-NVfQqkZj7@ zxgEc$^gg@z25}SL+**T9JTALo{VCUdCevan?JI@8K^T)4< z$jRR}`}mNApdGgPXZMjtu|M5S6cfGmW@6X>f$+n3f*!W3# zzB%gejUQ!^2eMZ;eiGhYJp1Q$iZbDc|GX}qLHhZh*C`xk5ZQRySH}PLad~-XjX7F- z#`L`&g|N{3-c*?t`}0{7z7IEZ^4TwHca}wke{?EMwdJ}pJa)&;_fg2_$c+yy>-HQFudX$TD`u@4H^?efD-1Dse zx~L9`|AUL)CVtjZDM{___YZdyZe@(P*bbPT;^q$6Pkq6>_v^FePBLN%7TI)_6v>1a z`+e!ooY~UT+xsv%nQh^EZrKM@ws>w!~@_33&;x@$RGI zW}X>!kRBKsvK(*YN=;3juvMCHKP&hC*LN+ix)iO_f3C^fF|KO!>5F&n9Cu!xJI%%A z|M>A%#U!=z=0w#X0ecQEqh{vH_ct2z?Jbw)C#76mgkoc36EuoKr}|2%XxH40TT`ES z2`&B2s1Wzpv11Y$hD{3tff~vm?rc&~Q4zqMindyhHlMQ`lyGu(9{%=r3mKDQe{`6O zX4R{6PIIk#3rkB~UN;IRJ32d6QnkxhCrX?xi3MA8p}>N97bQ3THadLxuykv|yW*K= z6uzIDuZ zeZ*=-OVJjtuQ{HQRxfl4A}+X;#?hli-ErTw()Ikm1RduhWuwGP`fdcWp2J7n$}lYc zo}!hKm9-;WHOur3zwL{oT!t%RO7x_!Jv=;?JGX6YXK+PD;ioJk8yV?4?=7z%=ZaI> z)blIFZmuLW{GE|~=-2^S-SI$!@Rb6?rntHyS6AJdH|0ORxOsjs;0{(PbmF7pHa^bB z7j*wVNvPulpSwzkPeuRW;6WOi8pp|kQmk-mrU{jSfq}r%&j^pBT)Rn0z4+&qNT!Wh8v<)(scI)1qG!W zwY<;^a}GFkM)Fsal7_{~g2m>|n-^M&)U(ReOp%LosLPUplamt(0|UdI;^$<>ZRyVt{ba(z!bAY3=~jDKxO;l)tSn3+(Vjoq zLy>CK!iwz|)z@dh?R{x(p3Bs7S@?CgaA|}|GEB%bIGD<$E&XoK#|Pir+q=^;T^D}r zpqC1*@}%NyVHH&xW=jZD;#rYS{OiWB9D5q?8b#>KxYQFS)IN^3)z?m>7pR%&+tm^q? zSaQ)o*4rK*WMzXMKHOZmwq!In*7~Si`yGO@F;>p)W-xb(^Ri8@^{DRF55da;VPUlc zm4S=Xm2A(vyz~}+{g6*k=2Z}IU2|GlT^(-AFnZR)kAGnAc9N2^%^ulAM^De;v|xVk z-o2mQMZ$@+^5Tx(o41-pPea&m$x0w2a-8R{P6+ z)$;AUaizzosTU{mCbOLuIqK@_9zTBkEk@=Pw@KSq?8(kuyHa?wA}!qA-TMmWyG}7M z{Qc{fIkr_fMROY}!`AKFH^21r`&!~jB_=N3J3UZoHQ5ys9)A2yNXX*SXtF_D`dJi4 zk~^Ot@4~fCugugo#LAtKm6NluvO52HetEJ;3V*qsXLFi^!zW%TdAe0EOeRX44EO6f zM_dG{@XGzfM3xYK+mcV89yG-(^^K3;9B<1o;~T^x>fm!56I6WHR+r_nOmELkc1yXF zvtT`P^-Pp-$3%5Nd>o{tEHCpuwQJX|Po15snOX{OFF%pZD$=PW&$SwU7#)2EIU=yW zGGpiH$Z6QfuzAZCK8xP1vm;Gkii-!5x;FaEJu{u|vL8d7&(tI(hqC;bvR2E>tG_fw zb=+<;;b@g^uXUdhE3#O1;Er|`>vgI(BWawTJ(+&fS97_r!*jHi&sJbvD&+0fU%!5R ztf_hN_3KrV-rip2JR6qDf_WNj(xz~k2+^;_#VHQ6hTHcaQ;y>hxqSIDQ58H&k$YOW zQ>XRSd8BfUoeL7xxFfsno!R=zkgz9ZYJR@J!9#~wCZf0U+Ke61O`{~?=jR`3PP~Ca zFD53oQoFuVd)upYtThemu02>4{0*NaHu^3~`NbdgYNVv3D7{xM z*iIOyw0Z>wQXu<3Ha7>npyp3S#c^30K7#^iP<38C+x+c!>p^g7SapYs%d;|d@Ivh)- zLbTRDWgn~zlHlG;r97?OJjus*;aj5CUzLjE$7dY4NxGT@b{e%GZlK-i8#NWZL!9Bw zIPBRn z7mo=!y`m9x=-{CHT3YJs?S1!g$jQ5R?@ELTg@m~*m7kPuj#sKZqJ$!iuYOvtovJ*s z{Ot;pl+ zx81C$xT`A^MYnfwE-ZH8irfCXT3T|(N{uxk{AtJzm$gN`Q|C7keXC^sCjB9Gb@j;i z@4Hev8=|EMIFf5S=~CIJ(>j;9;*v0txq8yY#l_Cv{+#oY)za+fwdJ{Sca{QjqR=i! zJijKwn4=I*0Ka<^rp?LB{FJU;JAFxt)&fL(i?yBd1rw9f&aeHx81&|i1j4qftLx$q zpIX!e4!d7HnmXeINBBA@0J zpO=hDYN;!lbXQE4R(m;ELi$3l*cNm6wQ)^w69AAJ*^NHl%8nI*z+;FsJfxy z5D;kL;$U!lsN8FgEMmVnI63WqzI794R&9*N*Y!mj{u zTc>*!5F)FCIhMJd)l;~>Fg~71N_h3W^V07V7cRU;6yMW?!_#7!k>;&~=c^UX4<+N^!;Db$&F{`sCGevuqS5pZ-D%Imp_AfxXePTk#5?w zN%YlY;W_IgB58J+nVCd?Ep&F2e8bT3EDkvfQ2fDqRMFj%+qC0)&bw`ZoM0S#p~R^CZ8SszrXLzis;3I!1NJV)>m@1p4410e*Wot&e39{Rj@x7sm|z?8j0{^&8&r zo6Mitzq&LV;j+4=bfs}_UNRVUv~MxsN+JrPXI@ zq;H-3_2WxpypoqrWk8DSx(jNiB5mV#9OE^=k3H`j8oGuX83xe9YLO49yRKRj$%jZJpjNC}4o7t`PgXWt z@_8K+hq*DaTeptVI{n&2#wZ`|y1use2z$74H=1*4q4V-Uu+H{w5j{JvS?;!}jp3m^?5{IQ5;RBHr@Kx+)* zF{43K{tSTj{$}veADjXLZ_p}JKxZ>eJBg-wjZGafR!W8YJVt-)PdE>7#L ztgP70RP*fGy?g0P%TY42C#Y7H0W4Y-erM&A)PfK!N7G#AbI0o`5kI%2)zx#8BLYXq(`Vyd_tU%lMO{o1) zr^=etrAwPa{b@SbuGdyqpTVRisYuH3f!h^ zrRyi6?in5BA&BOI997r6f9WZ%`~R!%Qqes~^N$9TleIQF@%E3<;w|j z|Gu2GP24_wpugW7k+9t9*)A?6b>`HmJ{Q|78;!B>15^C-YF*A70nB$%FW(5eh7!UG zir9gpM=L%(+ClJhR2zZ$4ojV;Cyu&^5Q4&P-*@y|vPRLt%IL_*m%hGN(38#uO$enS znTMR_J8jhp9Q+|Gc!KR1<*sIZL%pqe!}p~l$C9X*6SlU@E66#J9qKb@&NL^eT*2j; zEw&Y{uPsMLMV+(zbqBdIp{zIBoLF8_@wuerDZtvnzyA7&VsJxXQk@t4V#|*G=V^e` z`$k7A<)j2f-1bv@3>`XjD2U65{F)cdX@34-TqZlpsJl=oZj6#s_gB&SauMin19Y6V z#adU{6wP9eqW#21EzbD0?j6Xs=v(;pg_O^JnvTSclvcMb-9TGc*XIvKYt1s#P~mcw zDu&dA-nE}rNG)zU;+hxzAMVvID}H3k!KKT-coDGHyH3QBE*GF|o7Oo%pp{kxK~C^Y45l0b7W6>{{nH=q?ll zdIZ0jYBNf*Ud*u? z_Guadl0JMNB~sPtI$L66qrBSf+bL;GY2`y4dfdUd;-UaiI*T`O>yJtFKP0H!$rCZjW4A2lC2;RA7Iy327A-vv(26v(DAi0-nmu<#4W z(l;dJrnK~5W<{&q=ow>O1;GG^M~9?BF8Gg)854q(-&r|xbMrgU1c8kfrG|@$vaw=c zq5bq8Fa*hCH@AjVof{;GpBTC57dn0PhveQ%pwjIBJ=WT=Q%?Fw!rGLV>$mqesT}4f zsu5PqHK<`Mko}^dC+wxZ(5N~03t_hR==r~UdhQS}Qqpi1LG2Bf1yJrUi5+ z%~hV@YG&mR_n|x1C93kgIL4=GAs{3a%F|`{$h0%JF4x-VDJg9YI(1oj`3YX$S6D-m z&!0aZ;W9i71PA%!A+oF?(?m7bX1szz!$~Hgljs#dY$P851hryELrPB4(?9+A@gh01 z^2a@F`4>xHP`4I1W{DI4jbZJdpwS#e6F}?|-*M)Qo0QPvV<;1suUxSo@K^GysBQwCSHgAftb!0`s3db!xaHhZC#( z#h5#gcRQpnI(GJ#iKVs`7dhfoAUC9@&CGIFHejCM29!F zq}oks0sve>Wd9dbYTi5_pLOAAbrT0CA3TcKi12KHlCIl`U(!$X*@j zRKz-if@yIFyJxs^Ub}Wp)Z@sej{qN@Dz(tU{FT)0pS*ne*SmM`l+*RSEhKGhxHGD2ma9wF?&pyELR+@)4aY8fQ1QH|s;W}Wq@|#^=HPGv!B0R7s0k1gNQh8P zN=o|v{W~;V4A?m3KG6oVRouVm%M8E&& z(H7tt);;9R&~7Px%fI3+l;@J!E+DcTTmh@qBWQVzhMGCLYU=<|f^R8bLy6*(fN4;LL5-C4mfJ53VLO0)SQ$q7bD)Rz|U#nwuNUn=I4< zHzv0RpC2MfEGSBIvIaqPSY8Yb4IMgiqzqdF0(KX|2C<459*_tK3dYJt?S^PZ)RYA= z35oL+AllMU4h|+u5p{U2t%6Q^u)m+=j+T~X={<;ZdSDPGV^RnR5;R)QfTrTFUjd=@ zNyu5%^rt4Fg*eVNJz)c=OZ_ow~AcimzxPJXQ z`(|@*3;;;j&3i6F|1a+O^oZrfwX0V@7&b9>xvo1S{PrJy+6Q&D%VCryq66#%;uA0O z0x|1`Dja~?=YNgHe(QZ&*Oj_=U4Vu4P$0wEze~K~P5GLV-TL{-o<)otV&r3eraDlH zh}MkvC#dE4{QRk3@`CyX5)GAeYfoCOkQSmAi(rlhhWcYFGYL({gt@4?va$~nk?yC5 z+aOSwc4W&K2iQWft9s4lj$GdS0kbFAckqi|OQ&c2JHp(ZfhhTq_)C($}9Xj(NBO?mD zm3#L#aVI!9 zc+W>9HXnj^3Z3uvNVoF_7I9?oy*NBHwBwF(nI*resi}O7^d>ViGZL)KraQ(Yvgh-Z ze*aj-%7gwM=2t&|$ZBoHer$Z)9)RA$)>f~?gVJiW*%Op$6XfNsL{|-(CM^Zb0a6K|$2pf`8gk!oa{KfvCl zq4|XW5_Cej3;#8{04DYd^pwZ6gJEus)xp`YF=msraX>RR7BT`c?IQR(CILh={hFQK zwmVQd45$$h@-HeXqjRdNzw^Q%t>G1CuZeD?ZyeHh`?hVHKIm2-)r#$@6<#-Hu3RqY zuGKy4{7n#PfU2%l`eM@)+L)X4z7{J8EohZ5XodH$ocWlpU-uBOjKgM38M0$dx%8ax4P~2YY?wL87SV(Xr0F7CTZ`F#Hn7Vo3BTJ6O0%sCgdCQtpSVPm*_1 zsabU;9xj-N6bg~CgqEetW!a>@p`pCCHfv`I>K~7~7pc&~{Woupp|UN2AYRsDUx`pA895eLaLIPIH_$#oHHV zTQnYgW|#Rr`FPi%SN}+b^-(tnA^=F=+t)`aV8@PL_pzyo41=mDaes4U@wf0x9<;)t zKp-F$SH#74BUAM-lqDax9sBNGE41vU`hq`LUQjrft>J>*JHrNhdoM$w$hI0j z2yy--TFX0>-itr>4nr@{OIiFzOYQEHZrb@8LIBYofnUIxzcw}bgR%QebmpZIvWWAX z3fk;NG(XTUAfXy%bwf`?sto!s>+Rgfn1TT&iGEDe-TVA2x`g$J{H;u5gDPXic*T7@ zJXwwoEJSJna-&VTxzRZMjVk{5IT_PYDw0lC>8_ECtT{);Xo;Z9xHAArVq&UWb%X>E zTLdi%y(1i-zp%JSj7^CdA}|94MBv2N0IV}VBfRcS_lsfQp?y4-nfEz;<9nK(*Ez>d zWUzbY%*>4act#5$_OIQqOS;W3L4OG2GsZ7&q-WpaKLPiEbi>W(zl-_O%fu_PB&p?G29{aCoHh1#9ybC$La#Oy zqqS6o3TE41uhBXaON#-x#Ow3r3xBCgOW%215WJ5@;1w}Wf$E15@Mz zc}WO3l(;V%8X5q+L!jUA2N*Wps|iM)di(o}pcdGHT2IZ-uV2xUjzlb^8#XO#ful& zd3g<>OX_w%w#AojND(v=+~vbTwrdj)*X5+8@9RbF*6E~O+~e-y(GPjNDpW9-oaI)> z2O8Ij==hrv;+{L_4kU*t!c(T`b}2k>Eu6ulcoQU+&TZII+Frf#nRGJ zOj44-tz%K$}hN2#fE< zpx3XT=jA!7$g}*pA;mcP*n^N~=MxG!cKM;Dz7F~$l-Yj-Q15OKG)=FJ|MRu~2?GRs_%R=i^3JJ@>Wa~*9>ru)l*uvh=lp04(XI`(WH0KD6| zZ=Vi0t*vzzAS|EF*sG~*r0d>eyuZ|KH-Ivra_tr}hT2fU8=&Fd-rmODg{w(51vcZa zi?wKJX)%SqN9uUy&u#KJhHrc-5orkMfuD5|P@|f7$;rry(Twb-iYW|QlBiEzdqH>V z)Rz0u#t+caqIWM!-O4h(X=um@%_;5GTeWok13-NAV3WHJ(VK%wV*Vn57KCkh2MHZ9 z_W`43@J2hBIEeW#IE*ND(b^J|?-?n2NTPr^?@?Yc@F4+e7g!!kd;H`{9U2bd!0Cet zLI8zJTv_=D`19aUm@Dh(AK}uw=p|YqNQGT#7!YdLq$&B#$88nJKR~C_Q(gj}(IZ%1 zNP(KJsBA{W*B&k6> zqDxZEdO;BKO6)dWmM>u0K%lQOl z8;y{YurfJ0dCUQP+<&3rEbtU0-FBX2+A@IX>Dyfv;3(N6E83h2I(#_EH3sr z04_b6f?62VMYRzi4fY5X}wQo?eQlye6{sMUN<#Es^yR*X39_uw(WitirEAoA0IC- zFG19_{A{hP=$M$|<*gktHU(@(e0Up0HWm-6!=DS^Ak*y37hYWAzDwrh@~Lv4D( z=?7uz6htA2^IObu^(4eh2SSVP<1UP7K4}I_4=&xaw7en6x)H+D-KRJ>4&Fx&Y$COJ z^>_z^^u+g+M^K#3K@sfBfu_3u81F@7mbgH7Ny+xKR;Ttp0P=wdFQHzPV`9)k4A{}h zI~8d4s$M<7YJ#Ve>@GSO`FBLbDF~;Lh@SlUE=TMRl_=kz6{u(2?JvBx(6@z}{>LVj z>DM74)$oPv+P^>3t`JNjYHjHydId1u4NUdWlgLW}Wov-DU{MN(hLD|`OU@*Bl!8_5 zqcOK{U|=bt^Lvr2urzP*QZ-Na%YcBV1qFi8Hx--MHtuutleg2CNPU0Z-&#S8ixAza z9kx56y%;k;VG*0`DtPwd1(8UQT9l7jT3eq6_Q2QGBZVM9Nq}Wd=7wPmK`bp6BSxBVGHgt<8#*Zs$$*`Ivv|Hv1)@!M}f0@CXEmH2tY&no;TL=OG?j)s8UvUR24sr-Ky`m6bgR_mEEA={{WqKCzw36_CQ~h2d?MCKS`*%sLN{xCIN#E!1Om!mcf*{LfdmJ&j7;Fojx5^wY+exjU%{PTSo^_)4H8w z$Npm*c1C!FysYGi{g0IRH>L)GJ^&q1PHk+WsMes-W_UPSIbuY*)X>gcJ-b%tGJrq~ z3VIeC+)f*Zt^nXxq!LsmZQ7Q;>ppTAC~?$m+vI0w9uI0@Dz7cdWZpA*J1#>ems*etPCEZYP3t1rBuwWm*&Qe z(r?R4VL^88-AfQzl4AmPFVW(*?>$0t5&MERs}0HqL8d;(QV(>qP6$Q4f98j9*Nz&x$QVw9a@J< zx;++5E1%vH<;)5Blo zXTtuXq!dFIB~~mfj4snlW#%<2g~bnnz@PU4UW!v_w!c5tm^K*2SWo*ybQ<} z0|0^?@qwXSx^xNFyHMl@$OY_{`LoTckd7e4JEJFlyuns*)y1VyqzH0z2~1evO3~on zutsbJ+ku;fFx+}bdj|%(Wo7XoVF{N6wg+wf3cv}5BmLu9-I+1AUHSH3OG@fNE{}2> zZ)_sOHVbR(;`a7nVvG-cN%alTwm3p*6N6IHu}_~q5j_{hc{5?02xqt3j9@uB1bO#= zkh!;o%bVbG|55(YtgM;Jm7cVlEZ-w~#7enEKlt6d>ydSJ|gtkq{p5VLJB_y<=>>$%S zQ`S#s%)+mldgs$-A79^dK@!GY`9TLxi5_v)UVul{(F=neAM}2ha`<2$VyS#a?5n`_ z|46GQyc{H=$5k?oDG~ONHxED#0pQ-GjMOSFA}}^`1X`yL;aesnA%RJWs6P3&;th%b{(#nhGcyd?o!0H-pZyP zT_6CAd$->w6f>mQFGw=vOdBLM(}VrPzg?RU)gg3i0HSIRHybvxTPzZz^Ce>(QD8tKa4)X>Y=urg!0MdLZ)@FWut@ zJSV)8h?#>F6ol~~`CHo3((+DCMi^v+BpbtKTGM68KG!rPI0tGTqMrbGL{U#kNpa0y z^*LOvzqaPA5D5jRWZk{%knqZ{EwEea4b_BP{NdPZLoDe#oknhMZcP420mWcydC;r1 z_2sKq`YY=|f?rBX1_StuHaLuc{(mR&_R$oDxvm9aK-7`CGO5R51O@pc2pR@Q$M|jb zGOYYE!qkuMGX-brrVp?ULv}8!tv$oT)AF+x)fHMX0rf#IRMaXb z$ppN%%_$I0>E~*?A8;UnVx3Woqi5k4bb!fw+QGj9EF$5AXrz@nhrX(IMdXS(K%uCCg3#P0PIxU&DqBuc?f_xZ04 zQo_#dYk`f5GG*t3t6@s;4hb=-DqLPzP&O{{3k#Eig6dH!QkglakWJWE51hTBbC7{Z zpN{NvC=`%v{lJbxouslCq3rcgw=;|Bw)6%9K0R^?)r!DQ=?>} zf!@Gy?8lEE#2geAT9Z52!qV~!IstF8evmeR6ia~A+KmD#$SJ_GCweqF_`?a;h}40^0!d07oZeCPEw_{M^jW z`9YXQAa(%sel^NTQ3lgk|NOQIH3jy=oyuLpD%wB^#OMV_Y2dg-DJ;F6aXa0+9yRa? z25abj1$_(M%&3Y0e!qYRsVbkxE5s{mE@$O+;q(EkJmlN^@Bw(kzWF;qOYJCX@Ta=E z4aIBkk&nO(=sl$N_V!uhu3{Y>9Y4DY_(>o}Gh>w?JofeVT|rqS1m!PZwlL&tv_KF* z*li}D5iyHbQ+w0Y0t>*&lhb;r5(ZjYUvT8&^UD)ge$C9B0^ue+GY|x{40=K!>~Yvm zsJ%XK@EMB4)Xa<)?(V9H$fhTGrIL_GcUnMI>qRs~0ej%WJ%Q6;NGyXsVbBp?0SIt z5x_O5_b-gn8!%xz^$~skC8ma}FIxDZSA%pv1Xutz|5{l&8la&igOSi$_xiFcAq-$1 zZ!tHfLP99%*RSuC&fb~{eYUt}-|pQfnV8%m`2IpGJbHueM!O9_8L^fiVs8W;1F*sT zFV?G%@|a2hWb)emI*vguVX8l;RpR%3Z9HjS_rIyVf!XOxnBqIV;>4)OlOI{%^4xRKt@Tyrml_CG0;_dh32IH zyfe<_M&(EC+*N_dP7|-PE#s&d`O6b|1RR2pjjBDR8o;!qew9d35Z{{*rrAay!6Bh# zph**>Tg?1fUU>bHPAOFDnKnr2y=49Je}uvgS+N`HmD+MN8y|6Caar!)JmvTwa5;i} z)xa2tqhK(}5DYnv^3TVfCE@_Y7+Xr|=(y~tXa)lYRBoUJI0fD!_^_7#BL5uJl--RI z0}g$VmR1VzY*HnL+4poZ`Vr7(&-i#E`=1k;_riexevFTMg02*;&b151XGv_<0SbiQ zlF>cxpM#l%`|>0U%Xny$5_DRAekwh^q12dL8|!;D0UX*%YCgM;^&idnKXDjT!2H2I zlvn{uo3c`_trv3YOcC^K#=k?7?XIwN`kN92#vZC$N@`(`#sdcD0~_TK|-KH z{sQvGQH4A1YXwUq@yxf<%X)LL$Mh1fF5){dJ+BHA?&i&e*_-GB?U^Qo+XP9wxd*x> z(NR!hIncuP(+KFl;k2LD2BQe#wKxf6PO#e0(3<$Blvtxmdb`2|%rO~39WF>*l_=W|^XkUny3 zeykP4pqSzun23Hr2iC>JocVUHA1c)*VuDJ@vT$w%^O)&=yuT?sC&&BsYl5yp8sADx zU}B>~d!JCK_kf{@h7c!!AgE&a**7*;#gv>+9Bou7auEa$9n5G^KP4!*O5>Tk5e*$? z=oy3pm?en(eS6XV3?>bLGF3aZVHskdh!AjII#0MDQT6e)=(?96WZqCP1D1kEf{6sf zgk!=kZ$P~L?9{O?yY}qSf`f%*th*=-)-rNcaaHKAsQ+Jqe_#*jg#musZoSK}l31Yc zK7kwv!uz$n{24&iitF5jfKc4X+WLZH>dW$nV%ImHIQaLGlVn@#7~D4*x2hd9^4@G> zaVfmFneF6Rx!j?F6ImRuevK1zSOytaK? zW9x^zkM@4~hFE4DZcKO7rR zzF;Y@(t<$2EdY|b~pQT}HCTp2^Jpzl#z4#rv7LG#Pe9dd2`Dl4RCCAk(Pxsd0jAAm* zTk8XejzFF@${F*5t0`MoVibL--{Yl9G`yLxNg+0z=`=LDMZFH;YA=pTQ!p06H0ORn zLY$)9rzI|q(WEn10V?M#4K4ef`!HZ7Lk6%OwTeib{g)S@`6h834y99ETpVTPf|%^( z%MZ~>6y)XU@;bZjEN6Axa|eNphv+f-KG@XIJQ$;AHI#@Y%C5Elyl z*u2CA!yq{zcDh&;Nshf&p5Fag!#~;By}o8^(p`9azuOf!%P!pO{~JcCBuH`20Iv6V zkF_BRU@Pm;|912Gb!iC+kNWz0c?E?iAD@Fd+S+d%r8nUg)0N?dqi}xZ$Le!2$lLoZ z9Gk_(#Z8U^XU~d(BEKxwl!0E0n~{~3wZh;xFW_&R$*$WiYL=cDf5fJzr*Chky!nw_~ORI z#ic-;3xI*@Jj(9PkP8YZ9(4ei891ZMcWgg`-w-Wn33}UGfR~?au8Z#KE{i(Wa5&fH zsyhsyCL<#|%g3jpRpPO+d2V0o{N8ROVy!`Wx45yW9JkelkmtKe4P+y_on}0fFdN&$ zIHoD1sQBK`4>pi4$LAg%zis%4cbH$QIg=d1z-k*p^Zli}=F@3S1sR#QIE~BzIKaM( zcuDjLY3`H!{Hnwrf=s{1e8fKQ81X;ZKh@4F*%y3=R;PfK`(;B({MNiq^XWn2FFoX& zPZNKBWZ5cC{CQt>C!Sz|pRB(ah>ajIJ$G9AR-&SUqT=hi^TaPc-t_nPPra2$V^r&R zu@&|OG75^|fBhFW2}jW9l^x%2t-zk)m1n`%gEl_;S87FtI5f_cO zZiR0pUXgA*wA)W@fNbN{|I0f$A-$P+VaMe^Z_a*labxYw_dNJFm*W4~2e=zNsAu0> z0Hn24ZRQezCS?GJ-_lrGEuC1m%W@(P#m2(XTbwX)6T_ou@PSwLb1)!qS@d2#efqQk zj@Q2bJ*9=-kpdYr2DTg?1IN71BycqUfB^0sFQRtBL6b^1nLiQATLKZn2o8-4_S2Cn zI>e%|_!vCkK+v-l{Pvlf=wuRW%dw0`Vrr+g`UMBaL-sO+x~gk!_8fZ{6&d-{`x?!; zsMVoRM@iH_X*;`YLcbNK6;@PLjmJw+TDc6CA?e@{o(SXyllnOvKV5>pqoAtFB&KfP zDQMvVtY1-8)rbcf=qU!_A}+f3>xo97mp4QCVMIeI0Fgb4dWME_<_r5_48KGJt9yYp z-e;H`d5VN*5p%#H=0?!fnYN<$??t(TZ$dlL^*b{xe^G!I)Ba3DBcs`wu=S3<3_pMW z^6qX8#rUR(ac(OQ9D#&l*7-ZDX!R!4B{_gefwnWaif^((99MAuVNK4*s@){Z0Jy>@ z64jLGZnOOJQ+2SJheK;Lzz_k9EO0aj65a5F9W?MnJ^Ed#u_g<7%B8?rc4EtVJ=Gz!jlL_jlIoenH&gf7uXxa;7whOOoSCYile9(P3Vd>F-76w z7rg}MUJ-4szh4`hCZ*vt^#t65NvxuxLRM4r9dxIO5i`UJQ0+@7MbRD}d&QyyO6lq8 z4e?tC4D`7`Zb3!Gk^H<7wID@hKg_TDfZ7Q`IbC{F8sy{i4zqtlG$*3Z69+RKOx{OF zGo3ppLlixnDcGoiZ+K^0X1Z66djlZ4BTSy3zw0UZp?-(XIah|aG> zg%iDxneME=0-Cx)Dj10q4p+(DMeyT*aGJ$)5t!)dMX4`Xy`-}q`!0hE0-`W5Pe4f> zFz59{J;4Qp)zu;h{DOkcx_xHSIXGmwxVVynvM#{+l0Q0+^^64i zwQcTONx|5Dgm!(wZ2}7P_R<`9`5hp!X24D>CabHf`{;MQyE;iAf@{%Ri%mq;93@dV&zri?!w1 zCSzci0FD4@UBLmK!Qb%rF|xBuqt3wsVli%%)$afLbsYRsxg&gGS_18kOniJfpS1iW z3kH4se0>{wj%>kZ1fG=JtkW6zD|gTId3t7Mi4!MIJb(7gn@&MV>BdrR;2fZGnPy6M z%^3lpwKtMOl(j9@k7AFfp}dxsg0eEhaN{-;Ns7aV z0faS9)6r$qFtM@*RO>c?+i~GRCDpIaec}3|EH7_W(XwSANQ)(|qv8yv^FcYWbl6OuCT zvT~K*DC=#_91i>7boMamo=FFDu(^BB!RH0y&N-kyJyNd3bR0?x+hH)zg zTCXG^^ere1_S8d*H1LflK7ApxB=s^OIF`Upcj^_?G2YF9KYRRp$`wEgdE5i;iJo9` zmepKC9j+LQ-70X%0Edl4sc%_)ij$6Bqw7##(=lg@L~co;t546*x1cAZd`3Y)lLFCc zMD)|6Vbjng;ly$$ti43y!bTMVVFb$&2WjKApkrqIB<{+SR#+Xz7d%lU*l5udlTGc6 zTRJJq^2*9FKn6<4rv{AfVCQ5+WHE7a$|=Sxpl|3g-=O9)^c%CugE|=d^XE^8N-iqP z%sv5HWJVp#kGIoeQI_SP9^hCs2&cq72ZvmOiV)ESsEpMC67{n(6vgAz>aAs>K#wj% z3226Tfuw5dQO+>yR>xz3WN^6f(QJpy@_15EY1rzR9uTf=^$4EJv4QSU5(Hd4h8)a7 zTs(+U0mEHy?vjz5%U@V!5;aDNpttGD%(qgtpOtvgCPQNfeV83h?A3^E!vliF z-9gBW;+a|jUS3|N1+$8Ra5Ghz5p3H!=6`-?x16 zrS-*(6I4;6>0xIG1`i9sZ7)*l3-ZL`+1O-aXdZ#5VHjc52bu_gmWw!<#fU)c0vWUG z+DurbVa5omGq|Wjk!@ibJWeG zX!>%xRHJFNZeL8~FAChi^DAyq;a_#%IC7Q`TQM>Ud>wPRG(olv!Y@ZcIGt zPoG8daA0L=^pyQ|Ib8;e_YHc(tWOFjb4OXXZQq`2I2>bZsVm40;!bz@;yoX| z79?GJV_R>weq-OeZAa$0oHxzIEiFn=zjH8Eh{RYRjH@;HlVL_2=86RP7_G>w25-HH z!QV(nPFhmolA+v^{tGQ;HZ~;%1%K#^3@C(hOGK2hijpbJrAfwp=-;41-;M|5Z%`eH zOaHr6XCbIA=I#+j78Zay|2L9)kJ>SPK70QB?*yLmtu;#a)`?(S4x+yyt ziI1=PVfreeul$&9#ohrgz7WX*cpM<8hCp2PpOaqhIdO*QOeBRh+2ch(nbWjc5Xv-2tjbGXm8^Vp2e zdS09TRhw%Udzn~}&+>|j6^0qjj#WR*8H9y3Aj|~Pby_vtY%6rmJG&Z8!yqNh8=hm_ zp^;D=HdH2K)abZU!t^y;mB3ELBspu`J(j# zLUfG>69*PZGGWad;~=95whZ~JP$Z%$E`iU|Bs=lVfAN@&-0@hd*;k)>Tyvd zUfI3RnXF2wZGU>Xu0+r{|CV7<{t*62_2Db)Jkf^Qw_91cqt|bzDl>Cjp> z%TSGc>8ywAMR4BBzhT&~dM>P?5Wgglh1`8oIKlMRv3|51?Si(1JTa8W`ZIR9D z+JjFixl_-jMclT>WWN(_;*wmQNET-JSbI(Cv_|Z&hm7W!yP3p?Hfvtr=ek&p~o4^S7#q^0PEo;dN&K<4cfhLA6JB< z+UM%X-gNYT;76wK~d?7)S?jC7N(Q@16 zPXu2gDPAH9O$rBF4wI1$*ihjW-(bD~9{u^L0f zj{ghyKPCN6fftw>L^9Z_rauQ>ZYBU*9B!wH*^5``7f9rh4g@;x`5idxW}VP+!mS}e z-8?q!`t)o@jE3DaQM#@63Af{$;=pv`V`8pDQ(4tbyHHZ(65g_}1$ zp`s!a{a?Q9Ns%@X4_BKtDXiG#t4}XP?%uYf=qNxO!!1LrB6r^q%^f@tnQRD->4f1kwr(9jv_ZZd#ouf#i z8A7S*&pfg5S+MCG2BwFN%&Uw0>bBF|5oe2DQ20}Z(wFy{gc4pZwr4_Y#VITd4D3Ry zzvWKx^DjSiAsDbIz)ys;`g5&zwfu9LPd_cZewM;Ts%1oDb}Tw;sX)FYFvaAy^J~FO zT^ipYlVC2^Qum6Q*M|fhMd^D)Fz-%Bvkw`#t98?oWF~O%GC1jDpk#d1Il90PdEd&z0 zn&0|$k~|XakEmLnD;&IQT>a(yYxk**n=Hw^tLs_$tam!CE6?X*tN6LhbsR;G@9otj zI02*vAB0C728XEd!+21oaPr&{)fx88K}{#(Q`}OxDEf?ON}2^cOupokG2F~C*=c?b zkW>acomGiTC%Hvk^L9fR&MuCB;1g>|y!roo3C(IA$+$NB$G(~7Z1yYvrUGm?Amj&W zs-92^2$6!P+bNAlTt5R^Y5eIM0Wq1GiWu%S;4u^Vw`JXxpg`elxI%lDSqmOfa5}mn zHmlo36-Q87@JtON^vwdlYlaAA`dA?*VOCT^Vk4sng$X?SWwfz}4c|39;fzXnA19gG*T_!HL?VGL=ic zXj?$PemAR{orN)HGM`2s3NM^phM*rf;GNT7G^41b!~~g_7{1UM-~e3iK!9pG9uYu| z2^=zq5P0y-63N9(5AZZeHDX4=lWRIlPza24)sYhfbH=VMFPEDek(XqPn*=_ahiZKbOK)iNHeqx1Wg(!wJ;F!1SP zZ)UzayNq6>w5Qk>K*|!QjAk#OYgJTHscLl0wE`pj^s`yovCs#NuBmQ-)M$qOCvZ%( z#}&QW3+0S0S&d!H&g3Kkyf$O+CdM<0N4nS3L85)7a|yfCVqj8_@aH!{i#{EgwCC0O zjAiLonH!OF^&T5Co2c9keFy9aO>Oqk2}8$>ibhZoN^%_xZt954)VlUmu3jo??nybGjZ6xJ;DXckucmzjf1EPdjjue$oxX99U`ycX9hKtwUJ%xsSifH z4$h{@SKaB?0=T_|b#7yFG1Ch4*`P$fWUK71USa~yF=AUtNv_mbIQ0B1nWoERT00h>tgr85kc zolYt2K@jLzpvl{r7v2>{|8)I&GLE3|@bNl45ybgLFK;<#3rf;6$B zpsBmd+a?r48kFpK=0rUXz`?K!n1i-pG`N1P7d1PfWPk8Kt7K+xAMOA4S*aUm$~QAl z+hZh(&c~J?xDP&79_xJ93m#1UVC6Ss-A77NHFrM$buv5sOiWA+Jaa40-(P}FdT3@JW&3(2{Q zsCd|XUNL92j-plIRsJ-6%9NjKI}S`qlq`aE0U+y&9F$7X9BD5~@&Ucunr$^nSjVcT z{vTgD4(Tsu0mouL#=oVcq|_`Ne=kX7H)cs#xVv}DPekS2zHN$KAiO^&Nad?9zwC!k z!;l3=%GBfR?dvNE5??G9D|inl9kH^uPKF>4khBfDF>OCsg#M*nuh{s<55X{nRfGMi z@U^k&nlk))0Hg&kY{pC(^=*(Ro`Uisc73crNlysHzoTpQZcgn3f2=+i*p9L7sRRWD z(Uv$d);ytv?$;x{;T1f%+d)VBC@IoFO27MaE#F{`w-+7zo)9DaduF(?ulTxHlakR7 z#aD#f!7fL~1kf=iSB}&o_h1)Cm63XN+-!+Rk!)CI9BF#|cp*_%NFb5(6Mlb(09x;JY4Nm6`kHZ{vi)EQTzIg(!sj!(Y0B{Rh49&}o)fj13NZ30NziK_%|* z!t8&jMwe3XgEY+AT}=*~F?(-$bfiVBd{q zIIuTFs5+da!p5jU{Y-`S(22oDt5Qd%^}_P#iZMtL+5z5IbMqRzAk6GMbf_a>F!Yl? z8aWu4v|{B-bKIIBv?t~H@rY43^CbBWv7(~UW!OF$b`Su1s z5iCQxU4aG2UizM9|GgZllMx6xCzQqVw%?Gx3iQ@4_)oz81(Y6+QU;hOsCW5tNedJ1 z_GEk$1^f*6EZE$1I2v3HzHmR|AdTDF92@4yS7M?^5ISr{GxgK0y9@HfaEr>08`g*69{`uFmIR!m)^f zTP>ig)>H>A9h~Qv)#1lPQ>K7&xl_JEbvi&Bw33?rhYexz56U)Wz)(8*_U8r=(wFm39J9O(PVp8Jik(5Mu?KZ#)~i4Z(VGUT=cxFkp} zII2&wDO?qX#QAaCaohDnU^s-5PS>z7pwCv#fy7iytx$)t4dHrjspDB_N7!BjwB`u<6ztXqGnymJf#dc>s=LBTM@U~-NRdDDtOy^zsiW+OnR z4oe=6k5QAH5DvIWOhK5kT?%PILF4T~xV5RRV$_hpg!5Dui!TzFz&d=%ZP3vx9G)LaYfIlsplB>$bpu8VavDH%J( zMd?+qF7%v$wQe9QW^6lBD^$1T8K_5M3kvb>0C{yNNL*x73O-=yZ!V5yV5mJtG_U02 zDfj#~sjlXdiO2^`Er5PNRs|q7vLF$xz%qb;D5tc38;f4Z@D@(R60$wFeF_^{w<~f3 zZ>n3<8c+Q1^;J?0ZjIgWIK1vKWqCv)J!y#PP{4h)R7Ch%En4wJ!Hlp4saBKf< zWDnkkB18b0GzmzMn}0A=sj@Huz=!2%5re!(xF9HxW*!qEoik?5s>g<)$e>;XI0LOH z2Shm`E&yuCC6-{H;hnI4H~IvEhzkZ{lgt3CLaKccGd~(GuRZat#Zcx^o{UzlTBUXL zeJsXB#lh(H2r^;Z=>;_?AWLB1!UZlud0}G8Rn_n?oO#>HmjUqUi^m9{6MppIK~gmn za@|VCxr-Nd;?qfm1$E2i;kzBkw4yr`Kwfdp8ViEdz}Whcwr)^=rwAbc2^URwxL=6mDcdoRw0*;l`q4~|g2y7u(X5-fCstH=)Ag2HI$|J-pH`guRj4nxb&>n3QU?;1NBa#F{K>r0lyxx!*Y zG0@X1`A(EPzY%hfTEj3}9WDeX;tP2^8`wb+zlb4t2J|o%LkSDJ69YmP2Qvi|Ulbz) zB>*QJi-CJleO4xxW@b0xcig6>(Kw0`uL?_+Y(&e1GUNJQgT=w*cyRs8mn}=G?xEsk zvmOeoU2IChB9r}?(S`+j6P90w8M_!{$>` zJ*^;8_v&+mHyJhf#iBCRYzVB3q?0kwtuRhG8=^fO7aBq)92hy+`-n1Tu_GhX2tSg> zddKm+SbHBypXR5h+n$LO19uUsY$JyWKZE?(vd^QqnasxQLrXgZE3KmtAH$4aKQyY< zXhP=OE@1L_{>C1ui~S4ia657xA7PG#ziczS59YwGAVc!Y6T9>Ks;zWDudJTldO_dH zGMw+^6ZHU(E=fh1p-tr6rAu|_N@cVMd);KT>Ui}QS_8v%W2&X9)4QH$ZAH(^z21xQ zJ%8I1&+D2tZJH20R9_0+yUs@2^D8i; z$aQ4ad2?Kye9)7F{oMtKFCP`*U}R#V=c>c9oi~4&N*~%k9b|uO|8lvOB4xkOcDS48rE9C?~fWoG>3T8hLeT^5e zVXXMW|BTZt*8y*+<$(hng7={Q(4o4JRETB_MvHjBKDeINF!hk6SPM!PlBUbOGqZsy z6Gc7P;8OtY;S14q)u~BtAx9dCr4YMQj?9kD5;p#e3hRp-0BgYh&T}`Avpxe}%A^Ey z@4lJ}Mpd0Bc(yN70R}CUITX@5av6N_MJ%LXXSh;jbdTSiUSfNZLZS&Q#^8?a5PAZjjH zZ$w-+q8BF&L)?jVdfnglEbY*1AE_H_!C6LSvi?VJDnz+)8Fe(>OI9y%G)=GV?iYNoG~g=QGVG2tIU0=M1N05O7|H>pW=TZO zH?*f6Um|hQe`+TkjflV6+i9aTq`h^%+Ih!Ru8t`8?*i&N%>+q&Y;f2UG3SFKZeX0$ zSNH*WEHjuGa9?h9ITWV9?vs9cs3te2TlvajJdDHg+HTTMC9?Hli$GK0>)QN>;7ae1 z&oG*C)o+cX)D3en*_rLu9r8#Ed(?sy&UGh+s`~t}`y_`*a2gtHlUGk*ZiA;W@4DjTTe%kDlT$T`ZI%d@ zIt<^2w^o$R?Y-X<1BrRpMyzZMZP&pN6>6KP;RWHdb9m4o_V`}UG<-i%p2yod(frGu zFJt_Az7yM&pWcLDxD((wOb&ykS0HW>;&2Nm22c%50^NJr2$YLIq_F3lYWhgADXV{= z)XeVdxpJv`M^x!T1@~2>;*cXf#KC!Dd~7+oLbTz(d;37mVjI52c|FQ?tu^Nd&P@1S z_Y{sEY;tF8x!5piWJMl_m;YG&SyHJeYYiCYMktZk8X(2qzP?&Cl{ZmqFs#o64m3Do zG!ud{Y}xJoyQ8gEN_`!oDORt8!ycpML3sL#9NJ#8>?2$OUFsv2yWF0a0wx^$qlvXz&-`>ua`*yHZK=fq~`%B}EY68J!}z#Lo+T!$fY z9l4F}wfHc{yhcALyb9>^QW-ULZ}!SReq3hHv(C`3E0*lOm^gO$vL=tB z7r}-N&;R-=Ag?VmOk3gZ#f&^ddUNo3v%Py;CUtq_*yxxu)FxH@rN^N?XUwSS7o!w0 zzi*R^F?r;+(5RJ$ss%W9Sy;2O-8AeUS!|QY67wl7M(tXs z?^u6wzQ?xZzfrF60i=PEokTWF5Mj%m3JFPpub15CK-dula^kNwKjLu69e{HL8;A%J zy6l1i0w^lSfZd-I%ugx^oaG2T6-+#Yo_A6r)A@HDFuwVF~`4)^h;jjo2PLES4a5sQ16uQM&ZjLf?<1fgZLk~yjtFL0l+F&hmqF7UR!(%fcRUebhFGqy?M^g z?oHOVwrRn^5|?uh=Gf$bU&o1f^wRTThi`>ygs+zkebU|6=wKA!4}$9-HsgyA8Z_ih zoffW3RF++;Q->*nS3s)Hk(KS5di7HX!5M{H21-9J$cn{_OZUgsu=NjRWGgD%%6ia% z10r4?(jHu5pTY{B3+Qi9GHh&8AdIBqk}Wt?kM~$S>+9+HL~RA%K$rt(!qZFA;D*C4 z>;M}#ZPKZ+$NxZmSOE}Xc}-5dqyIbvdi$-PH6+c1N{P#o6?n`C^HW5?Gmtb)DXHHw zKcF|Zw0~j0WtoqV1V&{8 zhd0s5YSE^X1>qiFVnNa2Gvb08D66tut#T`b=pF=sWw1lf>lfjHKC7@kt5V;UBN8WA z+GYFpgn`QkU6oUrj<$Rs#S2QU4ZLBuZu%SKvmd-PsuEOl`5IilpDkZ_*}B!g@YdV3 zb=6r14~%capi1<(80fGnuMuH-OJCn?V(rBmw}eFWUYl4p=ijP}P@*dY`icy|=TM=G z5Dx)?fa+7()#YD+WuF8FwaK$=hEq7zHwn+H@MqO=QXAJs8E-jt`fk$>2ZuN^X2BNl z$R!6Rux$_+S;ls}+?zKy3WY*IAcO!U9^0w}-{1H0=9X{w{&74|PG^=2wJ)TvleY9x z<#w-f{S_D?X5d9AUrIrQInXJPkkI~B@cFwuJ#XWJ<1rI)*g5PlO>N$<4-zhw{P^3y z{j?s7SoOBt#Wcn=o|?HDje6U7+NAk*;`{pN&$jEG?sYScT>FyWErta1eop;piS`; zVo0##3n0!Q7W_{NpdwZs^`Q>ZD6Zt##LiY|=W_nfiXX=Ii~0fjks-L-IuqdW9^^!A z5=Udk`YC`$Kt?%4>*tUk|(P& zropZ;@IArycQp&Ysk6f;;4W!C$rfdKkAswIhnMCu{9cQB*m`JVgL zS3c$YA+@b8xpwl)8`bPRP|v5E;Ne2*h>JQ(hd5xugEZz{3~nn3zXN{e-bbW0_8o_E z7vi8=9^H#52>&6buuLygMeF4Riuma@OosLX!&9a@y%kx~)p!cvJN}ouIq+l52P+)n zAYFdP@i9Fw=;6o4=5Z&CrT{ZqW|iX-+5-#c(X4w?T~H%5@l?W#@Bla8N>A75E*i8) zt1k_ZS&l5o{!KtmBNbwF6Bq z2*JlT#uJ zrY}S@1J>`huc6^#Sl>-Rbz@KM#fwY=0`kWPGJ+0)i)VJ{w}ZQ{JXZG^9xOH&wgA1+ zm$N89uu^Io&cg>HOwl`Iq2fH~gDw?kHSF#OYwi^~P} zrnOJ>4O~YChK6GH6fK$i`^?{3Lgh2`4KqRIkF}`;RU;dsq*pQ=WH;TNC(8X@1VmeX ziO8n9W0fB#3@3X9{-O23Y&(pQ#r$8(JA7B?x=SOxKpds4Y&r!15TCd;sQu1*5SJOC z`w&<*9Cm#W9#Kd(`CfnP^m54QzL<#uh#S-MP0XI|=ZF;{xRir9G^+V_a2!G~yWL%P zY_!p?=)C{=GdfDJ3R|J>MfXIVugXv(OEJmZ^b7Dl)SE4IoyphTbREb6i6ncLFZ7b% ztm}`Rb-19jALM{d@$q~TxNv+7s$HT&HV}^@3hoX0+-)SXLhz7dz!?m!B6Tpj35GjS zQjs$cR~O~ZfVARl#KTE01eb!V$SQkDQIQ=xC>Yh=WwtvK97QtL4l%Yj(O%Ha+}ig< zM#fUNMEMEus|M1Q^)W-EJWp__;3z`nCP_-BW@obp(@tZ;Mklh{Pr*A=34t3sx+=rx z7E}*}XatP^$XN}ukUg$qtfrycPr&&a5OS$Z zIc4Q5SKzu=A)fLOp)xq)eY3{Q(=}2G&TN2`L(8}WA^!zG}$Ta~CWKEZ-kJ`PH&> zkK0;nKWcLDiEL z^Er=V4T4|nZme@F!4zdQH^Fl@pwZPo7mH3|(H4SqSC-K6ZJSNtpEKD2|26xZypM_n zC%vu1CL(~ngXi5znDC$ESTN2xjn}rEaO)`HZ?HBv%XHtNqV(I)xL_~dP?#7{ytOF% zR=ZRJTbR>ko>V;6vW{CjC$ITNJE^k^ouxz89+!PJa`b}NHA_+5ws#%ae2?j_>!pex#PIVLLur{uk&Q B0ImQ4 literal 36103 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 literal 69472 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 Tku`#Afq;~RoOqe2LE!%dShS6o diff --git a/docs/images/download_button.png b/docs/images/download_button.png deleted file mode 100644 index a077a7afa8f0366b22afa4ce9c72593d69622d48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5758 zcmZXYWl+>_w8wv>v@4A?(v3)mG%QHEl+=RKjg&M|M4A|)-cbR#Vx-CX`N z_syOA=9x3koO8b4IcMg)_X@{r;HJcc_|?#H3-#ST@{dK_J`>#adNj!rpb47Ai9rnp7fR zG)j)TnbBt;+!cftsL}_kuJ)o6+Xdwt|L~}zrKN|Z2VJs4LPn4~NO4nZynLE~>!!z9 zjQ*=RR>#T+mZQq!AN+*z&>82=x8}}8LvEjB#rH3-CY;*)XF?0_Pg1Uo+g2}~+hcjw zc}Y9de1xL#{KIh%rdu+nMuN$xAb%?AMU=C^z8^d*HP(`ds5IkMn~N!2DkD!{dgvu* zBvZjZ!Bcc&xQr%;r#TDVGR;nM{QydJUYF#awvRvHfoHCS22^3!mY!|+*}rx}Lsb(q zRIj`O23`)g{hS>?Vqx}9G{*C+INz=!^+x}}8ChRG&wPo-9H=w`X~&ua0FvimIcbPz z)VqcINEo1=J{YHTnG=}60xGquq~;g4K#W6FY`r*LsWuiYm#(881PZ* z^nn*7`L`#yQNQt$<>8;tqW7W5c8d8RI;6X>NV+KdLnc3LbxVpX}#&M>)l*I{_q5}Z|rg|CMNUlP<${LywVVd^;Dnq?c2AtwYBka%>>56zM7r%nVlUgWn~<2!b*eZ zQ^JevqM{+l!88;1@uoY5@%~oWm$~ zd}d)|W1DUi`(Q8k|J+J<;RZ@og3TPXd|%E&11v-kPFjpTx#nH}c?q^8Z_~33S@w!X z1KwFUXHOIyhe*+Nyv#5iMZ1+;P_3+NzMpPvM1N0!W^P02DM%>e#3+aj zy;0~tu%z4KrxxrRXsj96n7tDM042mRM2k^#=kn;iWq~0V&1?=Xjkrm6h=ilG&e)H! zbMv%`@Z99JuQ`H`7VWPkIx6(lmz-m-+DX~Z%Q!wQRUN!*?$yqx(^*dRiYa?X7HZ)S z_52VjT=UCr@P!#rV4`=BWmQb-*9!Ne+p<@+;c|rI_ftVW@3Q+|eNmnLnC>V9=Wa11 zoB!J%QHHJ_J#N)LD9&O!O8dTD|#O6yVsk?kbrC_rlfVUW&6; zAl`984Yt5j)7<$MhE%XKdRh04PRTSy&d3mH*!j#*z@0A`NrseiMvMrf7dDN;+k z0`3XA)e`w9^hV#OztW`6rH#JP(I^aQbAs&vt+=8!@>f4L;=KmIEK=0irML&+u)myG?+EH z%V&BB6(N=R?X~dDwvC;DCZ-|)w6c?6G&l1zBh`#H?2mJ%%9kB&#mb8zI%97DGAC*w z>(5U%tyY>v@2LQ(Dbi^8aE9__cz=mbl2ICwTaR{$hQ7qqAZC}9kMuwXg6x?-ET~SO=Oz{W9C4PkOxCQ(dm509x_+Uh z{@e5mH}|XF>n}g`v#W|O^n@F z0X=ab>Jau~4wA%p8;>~k;Bu>VHZgc=9H-=79;L0eA`A@EW}UaTJe*uHqw(68WQX<< zgw5q?Z?Zyet41G$Mdt|(SS&Wn29^nQc_VPEg2Tpl4h}Xqwr(78|G1>vg}u8tJ!rTy zWL}_89N5I@Y^T`_Efd4{(jPyf;S?2~{lG9(wYPOW&@m7Dgh6Zcg?HdIUu=6hd1z&y zDr>L8_r38yB;(j=8?1S?Dk#WT)#FRfHcJgv{L%dxH|?G{YvLx2sK++_*l9jTis2lb zOjdjh&he>5VCK80q*Jw3Sjo>X9tqnlXk;AAaU@ORt6%(T+vQTcugvIr)I$y%sggR4 zotb)0?^b&~Hcw=$JZMkuoJ=O+E%mvnjSs$HjvJemgrlk>KTrl$+c<=Atja0usuPy- z>p~D?YyRw(aBjH-E;R3a6S&VD zCMzmO%Canfh_1{l@s8VOp}os5hxT7A?(IKmJIn*EL*Y8=a;o~or*u^ z6)QC#Eu!UYzf!$Iwup6$KOQ@5JGz(`SAC7|8&ny+mJuI&?lnd|%w=_jJEp#5J1{ksrpo)?k^7@ir)lcT;^IOZ211b4j zqb&ES@F1XvQqZzOJ2Oz0A*Wc&LiNh`4Y07^!lrRJ9yyIt6oHFd6ts!@IETE>b~Smy z)Wc_Hn_qmRvHY>4D<0tGhP+H-KZFn`E?>U(PLhOGXGMk>? z_c6um0SLS`dUsgZxaUY35Xbvekl_g+&fSzLFsIL&^A^c(n+mvb5o3YJUb=EX2T+{8S#_9 z^5Xu4sc@FuZ^*Ob7<8@R%N(=Da4ubeq$A}#j_xIxo}9xNY!5L*?FJ8?bs&?XyFFtY zINp(vs9*=k$$Wq))g6u+bB{8s2!!bG0|9yN9O0c_q+3mOqVrl44X-V3&|K|&`??y^ zYSncYUgn)h72D>s7EMe*C;LR)Z~z1fzzC>3>(>e?I6vKtli9&0fDRt$4{sY|2E!ci z&D+yiO2#}^wi+|NZ+>tU*PsTY(52H^NI>EMULs>*9=Vl5`s}R7O3Zk*pHcxim}_zf zx52}|?UWfP0mrj%>dY~r!PujqLDdGbk453{sDgTHFM~do$+%n`xV@7rlLwB|kTAC* ztBpbvayDWG*GFpA*k?wLD)Xd<9QWMo1hKZ`GPQQ+`}@Py6_qYz+q)+g<--NDL7V}< zycbqQZ6J>|X$hK1GF79bW|OV~TX!b=jNi$Ua^?C96Z26p1xNhh!E^&H0emA~JkuhE zuppvD0AwLNel}5u>Ahm_XmxrQosJGTM4`En1I>HN4MX;#@` z?8tQBQlg8uY*E~j4h38ia=%i4tRt?<{OhcRax(nQF)uEA401e0axT%y5M&lsSiz*0 zGj8*-we{wW)PUg~LoyOy@EnJM3<2|7`E^t2ikgDH(PBri!c2nnYJc^U#y|9mvLN7WZyunTv7eEZJR||B@$G+s(jP0W{ z{a5IpzfL6I*Kkm*;!>={{=zbnw~RTA*T|WFZnY!3Sd!i6Zu4}co2hst^{m6z;gS}f z@mvVjra$8YLPHcOW?uyLnrQ5KaNba;u#96FH>NFMn1BCpmM$!XsO$XQ0Li1dt+DrY z$=pDfhXO{)5g!2{j&*{@gZobY=}*1fFk@mJ@PrtGd0U5b{tbKbG2u z(vy>8l9yEqCoC8u)=k8SO*s6~DiyU=QwdWr73fwd+4jjk23^#Lr0)Lb%`Zp-{U+JZdcFxVOwGg3656FfX1<&&i&32q>c0 z3Esc7Ph_9k)6gN~z`W)MHI9P5#b*S|AUwo4my5}W0ANwb&!h;g2pb!^)AA+)zB0y1 zS+kZIvac8v*uo_f$YU@sj>iZ{rDej?OxN|)=adpqOFI4iX1iabjn6!zQP=6nXj^kP za`)yZ8QeshMaLQ&7Wvl$665nuqcjzX`lYp_vI2womO>>xyaI`fyN&#z%NuhjpfSM?DUMU?dMVw(2FQ?S6`B5)q>okI=QHx#br3^D{og@b z6P-y;zI%81cW9hyHHEhaoe7NCXLos#yUsbzBWm3|EYZZ+JBTcamIdy93?6tqBZlkh zauz-F%`QF4H6e{j;;x_9VIPVpRxs}Y7?o!%o>|YGfkNG{O*99=9yHSkYp*M=YT`PX znSkiKM~vsXh*F*nm(>rJV0@Q!=3e>PAN`yU4UZp$x9BRy9+hl@b#_D&$rq4o1K~Mu z_SrKP4tP`qN9$6gT@_@zVGZ;PkGh+m5yRC|ZSufkJ-K+OcEMX|nPts9Sza(q&Tc z#c}k^5Ng!byiIl&1R53!0NuRg*k}Blsf@(Tzn3Yc0dCKx@nu}kG}Au1*$*Y$^({xA z0fg`V^C+y~%!IY?Hb|9+)9+b<&Vb-*IomX~J+1=eYe?APvpMHJ?J~AI#4aTY5cBWW znr@)6x88yD8#8L)(G$Ee0Uy+bZ^B~3KBl9DQb5T?SKAGBFGUjb^GHQqT{|&k$`XP* zYQ-F0|5ZXDtr~nOdJ2YzPyvLfb&kw$x4y%C{fmx%zs31~_*lH`Jc_F#`^T>Vs*UTj zEEWNEuC8@EmlX`f=V%CwtSa3;V{Ii;VMDw?vRP3=oWt9lV7&1NOv@q9luSriHIf3K zfJ#qrT6XnCR_8#e!;^?s2*m>NW-h6%NjC~W*bwoyIf@##oAgdk>eC@_ws2+CRe;_J z{}%uA^B8gfYE&XDvHGCn=qDn%Hi2tT8&dgQIq6XVvy1`~IP!rG9XRkO_m*t5N!D3! z5}(wpkkhca&f~3WZa=H-eKfUqR%@sG%I>4c)3J%oGZ07ATN2B)w&A`}J$QWc&gSvk zD-q#k3d);R%2QBIMNSxMXC-6h)lbDvO=<6z2G&B~mz+qcrlX@F&eSKcnfbIyG3;rr%F@r*?_@(n zB;5E-fnW3QtKpjFTCf^_%>oIlYQGU3EdvW>+vX$4drNzZY+c<2GtnKv+==(!!=tD% zhw5BTpe-ZNru$_Ziqd8>wh_*-Vhb&J#YoLYT$=U=TYOp=B~piULXOb>Jj{z8V2mKS zrpS)I3Ci3$J<_g_bl{xS3lqjuPqpG;KUYb}BV$S+JCJC%%f}3Z^y1jW%G-7N;w{d& zwHmnr05*9CTjIPU#|q4|^>ye9VTR2@T+?Crv?K$_VW@$MhmC66+(HBj5%P+ofRLLsZfh|3@& zRdu{N+}fnD>(8US_x&O3^ZCuYU3Gu2bEIx6t%C?9>W;^`Z>WV^8gY zU4?jl5Ek?tF+RQay0<27S(k@sl(#``FaGH3G!4+ynWgb$Wam|k#d5evgd&S%84md1 z?#bt`a!|Tb(7e3;L)SIj{@LV&J=(28u3rr58EjvFGbgDLV$i`lXcXX^-rX2By& zU!ev{`8@W#6fEE=V*rH5iXBJA8j@5Uv=V56AYy(Dt0>TI;^VHF+2^-2J9{}q$dXhv=WKEAS=tKmmbcr zgyQR-ovVPGSl3J8^`X9pe^0_#1|GX3@5PWQL#Y<9SiKOiC6MzV=w_7Ai%fV8Hf5+v zVV}--Yzg`)6J|+dO1uL$0;*8#NOvN%cM`}_0zbn3bLVPB+8^rf1(FeRt`9a|t-kHA zFckUCD|~s>F7eMs76OX#oT`YmPR5m0H)>c1(ML3?ZLIX>;?mwmc{Le14Rwut2d>(? za&v|qBGvg>D%M9_u46k@=#fH%LZD+0qJX@=>Z!zs_9u=Y`SVh6B*diS)KfnzPa~^j z$zc09CnB8+&jdC)V>)&BK#OR3^#MESBF2=XR1=16VBR7c5k>=B~?%N_<# zC^QFon=~y>Y#?kD3+pCiu|05$XID5cD@lE+(!dkkOa!LwIgXnaM7=lzQa02iN);Y* z88Zle6rRsIjQA{mHcy(vk4k@4F?z{co!v$XR+d$-C1V*;+KPr$&zl6aJ-#TDIu0Ho zv5Fei?z38~>4kmg?NrGq_30Y8ZCRckswMreUofS{^oq<)Z^ow9XRl)>%^h4?J65`iyhDmzpb{h@T4w};~28ZC#{tG)cYbHSGLc76hKbrG5@3CdK9}=iw9Dl(Avsx>j5P6Yl-P z;1}ke9d$H<;WG$Cmi)s){C2+vwKcdhf9cTqNmqiR@JtI|qzXHpY{;nNRV=Y!8A~;Z zO;=Zi%Z1r5i(q?sx41xQaN7z+B$+}H@<-D`ZpiCdSK!9`0g*RZ{lc>9EDQD1%RB9+ zRGRxr^ zMt54AC1T8G>ET>Gjo~x^wR8ee!R;)uFK@ZaRgC$qpT+PJ(+^+2;@w1y-tV%!$y$`*v_R090 z8^qUvPDkAIGN1ZD5ieFaprT>G=RDEqqBhAJmx;fs(?S_voAmHYu*>xaFWPkuP|Atz z)0N3lPe@>NA_y1jMIi8M&kNJ@emk^=JT-N(x>Ma{y|#WiH1o}kRK(uyzFt(<+jpg< z6AVr_dK^#S%@FL`>6b53%L9JK6jVkdW%%}A3hqh40cu4IJg2{cI%Ifa+itA zIKO^lHpq{ZrcJr! z*i-iU?Sq}LXN5xBQfE+1YA5U>^h?D*G% zvgs)2Skpl1&3JX~tT_Twm$KUV-AG1$yMV4*wz|XMrEZ<4S?KM%{_k_Gi-vCZ`VTJ) z_76S^xR&Qc+4+tmIprjoa4rctPiNOL)-@U&(zQC`<5~EJeA%8q6)V@B9rbR18(hNy z=Q@qMsm~X`pA?Q^ecoj?e=)L;dsy$QBu`^89%4#a;}Uw*>dPD3z>>a|pjR*%M}r%~ zBm}S{+_${f=nhLk)2ALa?6tioO9mGcV0FVF&bn}oX*w7>|<9%9( zpQo21ag%d6DHf1EO;iJda_elP#^ydDYukA!7opRjv00uxs+G6Y8+;a}+k+9CaD41o z9e-!}Qk?&j?3IHU`ts)NNE9FM>eR^IDXJP9t9zH0ChpMU+dnnff@`t&1#(rpOzTeR zxj}ObLnEBWP9*zuOxJdjAs7%NhS^;kX2-e%=dWBIf3q)1=~*hR7QkV*yu|$6Gd;6i z8rt>g@?IsH!WkTwH;evaHVs3p6Yn)d(^G8}MN{FTC5XY^c)2A|@ z{v80|OrhoA)rG1ACrY@R^u99g+<|q0+}-T6kGO`r{#v5g*Ik6M@DjkrB!W~L9=stp z(((3mRNWlIAoC5fxqKne?Y9F(xMJOw6$kL&)d>iTe$ako*g?cs3|hCXy#|1wSd&M9 zPvYR2y$eh#r&=+6GUH^(f5T8cWLoR<_2Wo@8n@-_4?GJ3%W)*4-(7E;_h@t%i(%zb zX2i6KvM4~{d`nfedzzg?0EKz%ubq$hlr$}|mQf6mchL~x-BvV`N_y6m*tPG}8jLou z-Rn2ADzBfU?%rJvxeZkr3SiDO>ueMg{7Q|nv1c|s|Cx!_&Gqwm8^ok`z_=qL5fiGk z1qbvqXh5XrYiOcuM1Uht&Yr7-^0>i#h?ga~^#8X`CR6=^ZlLvVu8la==kfeE5<*+$FR9{DO=1_pP4W z{IzyF@*^d_aPfzkzog#iV#-lP4pY~Ai&Zw>6~&)H&NyySwbEE^V2d8&^hm;cfh?G2 zuAy`6Gq3u?$r=b`voY1=Cxw__z6P6R0Y#Csoz%clQ44R31~-kbgX8I8k{d|&BUj~b zGfD^|03csh_zwR}kLE9@^O@Qp6{@^$To#1kGhIwTkp`tThwj3HmyfrV#4e)tFSNay z*$rTUM}KAjXvP$L23EpqBc`XD@zRKbJQkMW06>TmAE|q(48k(D#y)H+<(?24nZ=Qd zB(U^>S&WngSNUF25(Hfev!_H)kP$@%(l`8Mynbhx?)9^rGUR=SrZ#BLKD|;Cg~4(K zHHW;62S3rrZ5foi_h5t8c}3oc7=){O4R3isfK18+Zf9sBnhgWYhF4=Cw8hMRELptS%55d2!@D=I7;P-F{$Ppos6zGDPjoaJE2?)aJ+{()VwX3z;`S0F?DDs z6W{SGWE%&l2<#SJp+g5K4XH9F=-LNdp^x@l5N5-OiBrP)u`D5n;{*$w{fpoBTjtIZ zYg-+LRZ;Wt3&;<5A8ab~6i$;cN;d-&Q5GH4$hVj@@fy+p1L{ebY(HePqktt!-8*I2 z25i|SOwfFzlPL0GXkTuSYdguRy?QS`2)nn2CjOv9#x_r1n`otFw!3cw0HQ$*wpOFz zoy$Qw5(C_jyl1!(SuEf;>vUr(F|9`bHUf~sKL&gc`l#vfr`CzR1=AYs@b524y~em= z3x?W$o85-BL^>UySqps2Nr@)~!)A}Q4MUU_-;YdNOrpIxjDCwEP0@Utsrh~+XFNk^ zQ}!yh;NFah)chwIu%SMmquF5{xdjV;Z@J=~vmq7DWOdGjmFlZ?003-!&3U()^kx?r z+b{s8l%Xg)6Gse=bNAUD*dO?K5euOiA`r0q-3gy67_e94k8e(d2z0;XDfzlfP?A}) z^~eUftzY-QQ^A#vX8KME=u{8EInTN8K+XE$Y#28H_+9|74#F{tGz0(KSi0y^ff|#t z{60P82n6jnkF~nN(75DtH8i1V>C3#T~R! zv!}Lo=}Q&GqWj2^V|pd5I*jRzRERnRK#-8{D;j(_QJIAEz4^QB9uZ0zs=`U+lRQ>T z_D-pg7fGDN`b44?=<`1^RREGiET|pT#pF?L*C^uXyZB#*oU#f(@4aSox*xMurZCLC z`n?_)(3d~nf3qM*PBRJ=;oZw?OGS5MXaH1Evg~3 z%-tk?i4;MBhyD8ATO<3EDjsl;l$td3zBN%w%<%jK$>e4h&&=f|X-GE6L`Xb{D6+Nt z41-jT2nh%nAHHhSx5&)ht049f7G?&{w`q?i(j4dcAN~FokY)j5vi*sbTqEvne-V|w{I!av!jIwW{clF|=U;rnBoGukSpuAqs%T4JXz`B2-G2CT`n%L6as?haE z`;1HQCws}F(ct8l36c1cfaL+#d-r0~`|l-qc2mv3iKagKiP`k>jXsZEplY-C+rtP4 zjEt_9Cv4Dsh3_nfr6bXP*|ZIh-Hftk{XGEaXe%z>Mowv8LyaBb7lTNG3r{7^v2&z` zV558Bhuk_Uh+$^LLFRl~`Rf3F15$UI=I3(b_dO|%gEi=g#n5BOIS0Pg)^ol&xLaBM zkEQ9RMtWMZ3}DB(PdwxwOABg~Jz+QSk@Ybe!-t`fl{}JmNI{VP-7KB|~%7a&)ARV{}e=v~l`MIvz@Xb7CM@!FD80*j=#utk;Q>;q=PV?1r;;RuYC<{_?+*zai6SzS_h z_S!)OH0&D()-@hrUCbh8;ydaQoxH}Vk4d!Hw1ZCGMcr3)s8!n5Ioa3rJHt_Ot^(YH zm<0ku>EQA>!fU?RmUiaz>By+?wMe$

    S{|NH&;Y9_WZ{Fr-- z^eJ%Dl|~Sz(bh7ns1<`hFw;>|W+47I1kBYY2qjtTc|m%depd`od`4I;MO(q+G=^fQ zAsn+ySGzD~9-$F7gok_^o-eR>2ifxZ-Nlurd@C^AA>5z`GrW-7YwpC~D!BnC`+5D* ztvX!VBiJys4osc%kj#kK3!qb!9)ZlvvS%ZvzS=j*Ewoovm>-CVq3Hi*?p?HWOXO-_ zDlG&F+{PWTFspuzKR#8VirG#Vy zWVlmh=J>t`0QkWP0~0GH_io}bfOoJ}0ES{)jW55gZTFOgp&um4!&g5`>*xF0o-m9X zE@7pQNe9IK4H`5{dWt5RRH)Us9qdSCDq;kGDyL6|NusXAqp02Ma{w*Jt|UP4$M)c=_gdf2f{8HiEY#-<~r}gbtSP z+rkPjXav(NoICBrtzLzJ4fku$d-N^{J63u>H?is~8M*J_dKi?y`OCl3^m=i%K*Ezc z$(#wrKy;zOCvj~o_wk-ha-^L^C%#r7oG0Noc4x31jlA&&>vAh&zDigy73svN82r)Y zT2VH^9^`_)!4982Sc{9o0Ffo9`DS&SsVl+e3eb!3atFD`?7S!#T6EB|r7?dr!v0u3 zIIhivt1NoHW+1x^+Dl3_yJ80~?#`?b57Qkr2)sL!U0rzflK7WYTEW4rMm(4I2#ZGV z5$ zgiXZ+{PvkP_$=_B;F!b5=3PqUs%qoU1X!03h&A6%vJFWxKz$8U^KU$|%hHb2T|a=% zSjOLr?W`%_-XiU=LI40oR;NW1r^JFujV@^P!|;w*>?NJblDh0e>@?{Zi?vJ8PMA^E zP{l5GD`NxUd~!NKV30nkt&%vlh5`Vflrd{acc(^6*=YmwPd;C^ztc>J0QwPN;nXG2nFmA$f+ay~(h_$q?ed*#i~_FZJTh7T`G3*LoIP4l=d>7+&IyTx@! zFQCGZW2YzEfhpC%$=9tlN!E-n&67%MIy#ncLFJP^HYPmCfKa9Kp)Jjm(845)f$ije z9{G!JpC}V^qmq;6)D$dirw#3F`ld8d#~I^agZSz7uMbK;BOuJ!aJ+P2KhQ1+g*Ip~ znlsK2u_BShmw(XgjHP9HZF2D~TSY+Dt=hgvIP|m#RvY{{;E?6i)CDzrUdd^1| z&Dk*6eJLoAbl*6^p9$AUBbS_?mt1Lq4ZIlS`$q3|IHT-oE?m`z+BuoOOco}TkKVNA z=%uQoVF*{bKt#`CPd<(AK&I7j%yBvNURGia1@xN~<@@Kf4$OeZ$NT%qQlIWyHcF+8{m`EWVR4X1-XeB@Dtsh$%>jETVjLhgMpxXl( zdWjG5lx%`2=lCRg*~(9;=2TF6)jM^@M=#J~g8JwmGOOGP<1;d1({^7wwz5y>@Q05y zmSeJc|F-yrj?ig=L@ooqKF$P;c94^Q%|CtV;dbfPco<==)^>D!`xLtXtK%DTb;}Ua zwvG+IIkOq5OQU3JHZMa^LnC(x19Ua~#y6N@~t(8;_PP zxa2mE{`3ux3XP-La+DqCTYr(O!Kz3cB8x>lI&+ag7Xh(sOI9}r{5dP4P@zu?(%5ACRCisy3dIvc*a{^&TlfV$%;*rv7+Y#D@%uoNOM; zlZ%Q{rq02bu8S{&N+m4N(zY)q%MXP8GaO+r7qBD?V@oaue(8@&m&Y|u&d7dcZf(kj z1`t{@%EqCx0)~^+M%53e&0AbsSR?GlTOWxqq|?8-_#Q=nB<)^vjMtT z?iIU7^g53o&cy+?3}YiNlf7UCZn{0*^bgdxuMVRVT1a8xC(PC>x97&#pUl61lifm8 zI$irN^Zv45Ip;ueSuscrT&NdVNhgfeAFhqf5*0$_{G&vF=8fCxTIPr1OUD%vApGbw z(|>=UqeKV*D!nxozaYhrkbgwhF17_}gw?(8(B_iA*p!g!$2PAXw9%_|yK2Zd)()J4 zabQY(v)qDEUqM?2whTvHYuUUS8t*Ta-$OKrhyb;wL%(?ZV8OzRyo%9xu_+pw4#a&e zC->B8q%uGV1KO{qen%9FMs;}q8us+lh|Mi$TRvEoDU0C)EfD2E0Ng$C7DPpFzwO}x zGX{o9M?)1Z3Tgh*Ag_pdcJfdUeA?x5Dx;F`*bdqyG7f^1D-y@}BJitu+8Meh0_M3R*D$`0b zGQT|Qr=El(3pSJ(KU!~G6!f&lN7oW+fW=b&F_37vc2&c~snh9@_m(#wr}trL>-~?V zb6X#(Iz#fOw?@fl94I$9y4>zZ14sTk#%(F-oM=UoS|ZMm8e<8Z$`q=Sf)i7k@cv)( zks-Jdp#7l8i<)pZi2wt`U>X=QMgVYv`}0=GIG-3abLl>(CX&#`7@5OUxV2tUuTh${ zkx0nO&E37Dj``6M0@|sM4yL)Mz`1Mlb)^?`cvtwRdp^55wF(U+p5QP`EhJXqxE>uW zK(iG6ka!d$x~Fn1KO)_`i6iz9gHGu-6oib0Jh4jyge1(X zV#`sr!kAB0w&1Nhmhylz=4vdeXpaCZ~IlfJ;7@o4a^{UPfaBxki8eW@Th~e`= z*JUKTm`=i%<%B%8m8G#TRDQ9>=?3o^HZU9Gn2o5@BH7V?$1$bx1)6~GZ$CId2=ONb z!GRp>+Ql4d|E`Gj5*6{8+dxT^A6jNOt*2f<{3YAO>0=y&(PQ5c7aePtHuh zpjp#ydL9Xo595?7I;~iio&iK_{@@sv)j*B)ixGj~tZVz*0-Xsae9)=g*{4voBEr z)rl59`Ube_4Z#bb9*%O0G73#?nc}AExRWnMIJz-Kj7^Mm6{Jt~&Ns@hEi)WnDW2ci z0Etf>6mn;C>X%MO*yXpMb%@8U>30#$srYWbsOh`0$s0h3|A`{edH#kN&F%XOz1h0o zKEtY>#1CoGYBuwv?Ng5p?bHH4u88s)fk<9D6rfY1n4t$ck4x+WFjj}n z2l%xWEHAsd5f&}$$tS=V9F1aQ!&mW(lOZOJEiW4geT+QVlfFHLlionvsI8j$xn)r0 z#)#7l6gWy`Xnuydh6YOW3%GvakI(S}(APg(KZF5*BAPO|bX>K#%gVg%@(CdZ08-vQ z0G&2f8gNl+OT0CfA(rZn#ChW9(-HS5q=EgG1ct227{m}fSv^TD)gE({5E`N37i&FaF8?+0G? zY|Zx4N}ShES#9IVw!|@C!KByftjylvrNh>xc%2$-hFZCmu3|b3@}-`JiIb?}((=xp|^;1uzqGVNSN#dU6~) z)?dXzYBj7Q5=ax_A~TmubzlBx$jtc{7-Mqs{{D@i4FSwzr_AbqiSYN>u+MqC(YH`QF z2&)5Eao{Qz%!)%;S)7AmJ#Q#T3qn8N!&5vQdNgxq&qovUe5M`YJSPI|DB zY3Y+MIGUSzQ98T0tSQ5U3##O^xb^K|=SyAa3<`9cH%xKjUx>Z&11*AV;)WXot@?4; ztRLbtM?>G*#y=F%c&qqK+@g@)#NJ?f_75n0(N#L4gHf}wdy$!d<)%d()A zr}{s0P&L@ED!4pe?cUwpMMk0qJtDl;R|E$S%$2COw6vW6L#6N#06KKn_NB>K3WxL2 ztpCVBd*;d2?ueY6Tt-Gl4Y*j)`|0##r)_t(NCjZFoG)!z{Q&L+0H{~!wRt@{C@4&b zq6x4wkAiW2T|FMdN zgTp1p*~y9j<)Wvd#`C^*D3;0)thZ0LZ5+*N5TU0j&i+7c%j84~B>20cp2(So@_ zGnZTnyZLmU)J&m*>5_0qdw4DixH~pISSF&_-~S`mQ~gKDKjZqZ1^v~}X`I(pqJ7V( zpO`A&d6c~VR6ineKfkd|@s9d3395OTcOMf5yq1?f3?_$RuKNa};~D8p=n^Dmq_pCw zpFfq~V;y#7Ue^?=*)BFZK=6E%`&(14!+(80y*%RBlc{&I-qBRg7Tj@yta;f8G9}>P zKD6zyPNmVqe!Gy(G2O%5+;B$o888FATPL1-SuC%f!HK}5u-Z$(0z!T*C zpZS_KL`w@==#CadBJ)lEefb?84M>UHZBKm{GmibygW|?dYB+O*UJGw2v6B+v44z=x9_I_ozdoS42?Rb%k!=s9wFMId=>q@DY3UW8a+Th{n9^@bzN2mWQ!sENmL=z^}F&;}Dpgg{#Ur_cQfSBPQE5555$Ua;5}Q_hFRK^hhs9p% zi$ja|l0ho;9)4`w-`uU@dR?ny1z#)JP%SR678eh8v(cQA6w(Sj0T0GBo<~AH*P)uJ zsnBTi8~2qq&eAXNtBI7HLrKM;0kJ_cGNTV4s&T6EMCN=omhRiq{G(0P-v34oeBM0% ztj``??&DlUjL?asmHvQizZK>%5Kt-B+f;E3k#*^WMe0dfT2fpLleMq2%f*Hh1S^u5 z3zmSR-~d68cH8Sgdz=KsXeOa`sN_=xJTZnJ&d2)|Q%@4O8&7mITSaGu z*7@-}Eu6tH^82LmlmfK;4;h@Jj!dFTyLKFi&SVw|`l~~J-!;yxS@2Ty(qBKw!~W$Z zzzw~iPw<3v8I9XV)ch9Uc$OP=Q3xTMvG+Xqc{UztKQ;Yg`@Yuk4)Q~05^~^u01P); z2zv8p$|wG%3db5lu)WA>sa-H7^VXsHwdW+>5%9Z7#@t9jtKs6{ZGC}k^8UFudif(Z z0u(JnjAX&{bq>-;-`5%`)Q2+faNF0rr!>v;3i-MwP6FU&%A=Pb^C5MZnD|Uaq~EMl z$3BR3vX75{x_kIRqTJcPCTj||Gj(zd4-|kA{BZPc&HFwX)8sv}I6giCZ7crHbU2#C zf?`FO4s5r7402v%(zPk4UUIdb%1cgP1-`r=oBKxzdbQ`ATvJvop()1s8jx`OaLljC z9a*x!J7}+27`EqLl|MKhmZWoXcF{}U1m(KgNxD5xz!_NEwi9|Dc z&N=*$_DAd_71g;t*DD<%N#=7?l$Z2(!G&qHxsR>vfzW=P@!DvN*4&yl)F2mjy2A>% znfGRI8ek}DWG+8=l?^9eHnrvAH|%RN?Xv5ve)s0z4TB^$h6@DMKj(w_zu>TG)#)oa zbQ^`Z=J6~$Fasst(twQ%9B~FL6kL2~qt@;7D+u&GsG9w$$NPqsrLH$^HpR9(qsd%wom}j3@6NkZv8pf8=u8(# z2>!P6L?xvNUi5KrfPhO&`X)>ugM#eX+HF?~PrPRo*VP{E6Su|DGu3EPLPGsYi|{tH z;afM%44#6op<{D(>c&+;^`4v2!8+h)ET5@w;t7g=E?^^bR zGq;@9!iUmvR-O~95_vU&4cSc2M~D6VjJ141!gRL`WKt(MS-Th(-TDM#EiE52^B0A& zst%KL!F^0pZDuEmOUIEHx_d8;wQitR_4MVKMWdQE0FIf0+G;BQ%6s=Dm((A)u#+@+ z{q3#)92oQjA!In!zuPe;ct;FQi#+Lg<8R(~%Azyr@A;l>-=ogELM$Ff8Bw%dEU$?J z2SuPp2G5G)r{4vJ?%MZhP85GTeb)su$cB2-f>N$m%Y{Rt49bH~TPm2Gcp(^<#^-hH z1gS4tvRh8PAfW`7ElQ5~Jb=Z>r(we<%zfDOFvsb_cb^A+Q|rVuU|goYew=QmU@VD! z3}jb-9kBG$LjmmP6OX<>wY=S+LG>61VioXnFGO8?M+(27RMvy z=MQ%j{e4t?`L&(1XAsmE!|L=8-<8}mAW$=}(r>n#9LEyV#%0D#Cph$B!AR(p(nT$j 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 From 199c630f854fbede97b11dc3939824a03eb2b884 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:56:59 +0200 Subject: [PATCH 013/199] Deleted obsolete image files Former-commit-id: 607c3d12337092f5f3bf21aebc268c97c5509156 --- images/BioCircos.png | Bin 244595 -> 0 bytes images/antismash.png | Bin 10576 -> 0 bytes images/barplot1.png | Bin 32907 -> 0 bytes images/barplot2.png | Bin 67364 -> 0 bytes images/deepbgc.png | Bin 52214 -> 0 bytes images/deepbgc_expl.png | Bin 30011 -> 0 bytes images/deepbgc_filt.png | Bin 89086 -> 0 bytes images/rates.png | Bin 51615 -> 0 bytes images/reference.png | Bin 64070 -> 0 bytes images/rrefinder.png | Bin 116188 -> 0 bytes images/upload.png | Bin 48223 -> 0 bytes 11 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/BioCircos.png delete mode 100644 images/antismash.png delete mode 100644 images/barplot1.png delete mode 100644 images/barplot2.png delete mode 100644 images/deepbgc.png delete mode 100644 images/deepbgc_expl.png delete mode 100644 images/deepbgc_filt.png delete mode 100644 images/rates.png delete mode 100644 images/reference.png delete mode 100644 images/rrefinder.png delete mode 100644 images/upload.png diff --git a/images/BioCircos.png b/images/BioCircos.png deleted file mode 100644 index 32da06fd9fb7a07b75ddcb075e7524b1d8295868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244595 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

    rQ(w;@QI&{0EeWt0D{; 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℘0CppUfr)m_|!n*NE07^&BwLL zNcB$p6a2^(7EFyExCbAkEYR2NCPE;f?IZR?|1?=K{8H=w{TmSE5t3yFQPiBg`Zw3_ zMUruY{RNeM#v!AQ*At%b~+3erB{6L0!_p8y@ zuWJ5-Zwgu;KawiVNfVp7mtZ6pwf%&W2$#H!4iToPSxppAP(mO7yYiC;2RR*#ST=+X zCKNy=?*@w3k=8yWxd$aoNR6rKVPFq`*Mn-GvNO(-#I0_7XK0;$i^qhkQKW3*2#OUW zuw=okvF1S+eOj6Mo8nOdyW5OW5SrmBkIFsEPh%{~+qfr@>^M})pZ7hanpUN&2dKjTFA+9~l{vt0qCJ9rG(ySu7-Ja<~9CgiP19=Wf*3 zh=_NlP*$)?0e{v^MEbi;e<%40ZEja7gpr6+T}(v##H3?6_#XcjI}uP`AA3rzd1Z>Q zc`&OvNP;cVUdsao@somdtn=;9|vXr*mg50NeB{5!&A*;txLZvK4t8D z8SrE~x}r0X+!63PUX}_LS7MyJX~U&@Mi_m-cUkRe=cFtuy98FTtwE&XI_0a3?|*e- z7#s^3fMP#BD)X-|E{9>92|f(qBA}BsR@L9I`gsYqjdGpN^>3Vq=wkV$)Z4MVzmzRQ zXc0I3N5=Sxg6Mtqf(1cu!2D0>wHV+G+Kl?#)Ya2Kf@pvk{D#r3j#Jh*n{a@TlW zp#DDOTMv0{otBh-N|^nLN)tr&hdltjGkGuYz?%JYum@Nvd<(jpXky zxVL*+46wtec16e&p&9-uY78x^{_%PDbqk);3(K5MtfG@KO!wEX$j>MZ(Tf+qSg1HQ zGPHj!_W*-wT|hK?hbul2Jcy+#;boaWTgv?%FcTs8t_2~-u=Z~_J}!mp`+E&GEsP@( zw!t?%bYu4)v8vrye(RIkK*LZKkY`A|&_X3kbTEJrJeVy$3J8Yn>pTpus17`R(Ninc zEGXF#NWmSbQ|O;5j6RW8mTgB&^DSv|b`;Bo;hx-esH;|=fX#D*BGsTQs+S(2bTsmI zvquuG(wjEpTflDjJ83HV!nKL(@lMKvHZl++6HWIaX#8J0rUP^YFC8~FQ!WC zsZUs45%&EtvCHIklo(m;H= zYMwQ8`H0E!zOG*$PQ3rSN!-ok!UE3^P_9wE)g1gAj|*^_5T+6<W#GC-5E$mBjkrsk`DV_T?S<86GNN_7*( zRiJe0*vTgM7d=z^itUOh-_zgyxdv%tC%CL{u(!KD7WMQ2Q`uXXmMn+z#QogR2ivNo zlMr`%*)jOEXGK-e&zkGf+V-8fWY8qXo4%gY3y0k`Ea3b}*6R*8iZTK{S4$vQIDd=O zhui$jrWg6q64IT*+fFEizgjDO_N2jUNX>0i?nI6W?FYBusyXt7{S3Xf9=Z@pymGabZ9<&?Gby zxFf1ZzwqlmmeeF~IbhnUn0k0XjlJQ@0`wNw!E11errFq@zN+DGU7glIP|Xkc&g}Gv zjJh(^?P}7eD-%)Lv!+O#l?fy@RPtnF?14hY_XC>oUm|p10jB`7g(EQ|01FOy6#2p! z4uj&*Z%o@@7GN2L&^YDTZ+_N4B(OAaod5IvbM~Dfx+@5F5bZpLJ$m!oP!gwjmG$|JCBz+ zxze50+XOTO`*EdB<~lTw%D%zNOyu}VJI6Fv=#MoyI5y87;X}X#VX6{T zhJ>6bKRxdWF4ZGV1(k*nG#)I?&r7KT=lXZW_Vd3p^QVWuJNr!ex1A-c1x^Ceqv4RJ zn=j}>zSrY_m2;%BM^4lxMVnpR*jpLDNHL^vF^uh%Xotqj4hC;)q2meW4myuXvNg?K z+(O9RAib}Ni?VpKpO=}Y+ne#HZ|wLM#w!k{R#NzW=Lv0G#{4V^X7+;P6_ylxsY&(Q56G`6;h{~@)ZB1#Hba3uvT6et-ekUj++(!U=n*VlsqK)f#B z(85W#QPj6M*~Z4*E;9r7<}~rO-RSdw@Aiu?b(&zwD|I=p#hz+IFX6u`fARICri zN2!lDC@pfy(Ed3TsQ%$qrQLnvdS3GOJ{TyX1Avk!`+%~0p3=ki5&UNP`SQ_yO>h1I z{}-5OC3QT5tChqm!mQfOG)xhzlziaR={Ef9OXOqi#y&@l^TC;qk~Ir{n9EPb@nQD! zw}8mun-5M`NbaCeS#aL%?Cm+dJl#gCPw0BmS;aSB-r!F@?L+LI&#yIpE1DP=ZXFx^ z>bF)}??Dc?xh`>(7_ZB%r8WVr#@z>Igrb5_tIDKS=!1ry!=C!W6E)tQ(oqy)MdePW9j z+wa?7P}VAI?N99X9#fRF;6EJbvs+L*s&S6FV&9tggBJ9VpD{qGp|6^RUux>+xEGR| zZPL{x!aw4Qb9X~zUn~Z|?y~^>loAdV`pZ0I3(#W_a^PSJ<DLfA32r?m;j^P3WAUu+`NAk zc>&S764LylC1JVp?4t^=Z`tLOe|B2IWLh zfhWi_0j-ZVO8H9r*64H6XAH}l7KhM?&&O@Hv;U*%Dx<3Ex-|j{N_T_O-QC?G%^{@@ z-QBz(UD6HG-QC^Y-QC^c-F#!*|LQo7z1E!1d}2*D{74;eY6q*fjZ^j=$^-}f$-srI zHk|$!n;3)d_-dp5|7hdB29Y$IAS(CZDJTgB$(L#0!rQ*1(Xc2 zNFzO$pWcG=6n{wQmI|QBA3SkM0g6mEr?wcVBjPY(j(29!UkjZoVc>X0WN4F z6WWg&1-d;GT?+U}85!}N`TTGW^$Rxuj2kd6sMDZ@^bcjEC+?U%RrC>+VLDf*u({<)XtI;=|Hw;Tna&a|V z$6>vIYlYxUM@hsRpP!}!>L$?hLkp4l2jy}m_V~?zzq^J+P~b5!F-hEFa{%*ddrPwM z9s-0V{pcnzyYB?5zar_vJH_vr#sRR@SoZe=#Tt0uvSMH#^TW^c0K>Fu%=rN&Weu&7v?RzDEsP5r{mzU|dswBY7MMug~Kt3%=jE~c-& z?PTQo@owArCnG;WF*|aAeX5@49ORlZL?f4x!zArgBBH_#Jt9(In$c=o(*mqbS3(OA zna)uvi64F*e|i>+>*?1c-)cphkjy+W2QdTA4ghSoH`7ZKw{B5%!2Kj{15_;-xaki< zY+r<6^$&U%M__#51d?i16{8_ES4&HMYz%Cj4_F=PK{zzr5Z3T^K=94-M;~m;Hw@om1#67adZs_jPVPkfNIM%v@Bk>NPo%BVk-p04X5} zGjVevP8MzB!f$188gJ{8LPveLelO zy_Y?-0MPqf?pa@29?8+Zg>+6#XBPo5?5$a2{rr%^LWTekayj!QePV}1Wo0i#isaei ztk*=R9K#1~Z2xH4pF>C1PPIQd5xzggudX;lA$eWgk`>PQCpC2*r!3+zGcX|S{I`ji zknwGhdT?{(EK~0B5n%W=Y-*9~-X|NshV^`1I_&K)@>41jC5~ofWVHWeV&~CVQ67e) zb+Y)Y_VQsV8C6aQlI`!x?I^ht`z_M#{W+<1hxg`anXd7b%n&#osQ^m?klfV zZrkjkV~xE!3D8S+0a!E~=D2GbcQ_l0^56&#_5;pgdXGV+96g6#iRt!#&(`B1^OY^6 zGZmExTk|68)sGH2YyeP6Ldgd7K~Wp0FRkTx;q%d5L{QG?ex0WfHS!Sdsc3+bs-Tpk zfn2;R0kiztW>C?P`q-8ggk>KCSU=)SGyNW5dNg=$9BR-MrJyYdqZbbHFGs>n&nqtW z{l}|z4_2`e4#X{NgNgr3NCbu|c1-ZEn_%>~BY^3+v7KLx2yUsZYGtMfkrRgtb7B3H zA5+uP>k&cfdKPu!4s+z#SagZ9{lGm&N^PVKjO`sQP%Fm`$)#yHZ1)Zpi5GP=@aj`1 zj)o7x-l_WObHEDPAdE%_cJskQxKel|y5gu^LfBX-#%Efq9=gO>6bO4(AZLF^6+KHo zv>mt$dtP>8Fka8i4?LGaHL}G_RWYHkf0NM_n~g0;R(?yRsu>U8Ha8RyFPGL-^B;GK zf5#r_)%+_u|1s{buKQ=HuvsF62!`+Z0FV-pi`ZTwzi{pDdA9bkKXheG9g`$QjT`O^ zeRC8(T6Uq#U~413{zSc^x_fXy^z?UMq4D8`vi)gg!S$@lCOg&Ba5Pt+P6#yg z|6TxhS~jTjIaN~yN>bE4nI{AQ~w5N zr2_OHc#(^X8qF;&Z$92-W4)zi>*=$pN;!pEDSc5&IgpqQ??@y}v#RqujyHSVw@mCE zGSsP!CH1jJdEp7hOQSdvPn?Qr9VO8U?q5LY<=pg2YUb53dc_C*P-kgaWm$lKz{Si^ zfwS*QDpMY8gvSYjoDwDGZq1(s!j zk#Ed&be?iaB}u4aCPIlgyz&NNfNdzcbVx35{rHz+GGU2UZmZN;JdIpjoebzK zKW)BRP9TtvhfmvDxU)8>c%TUvu+*A=_K>dDz}Z2lU*h;>@_z4b%{$o-Qv7jBKSZiR zomDsr*j4;j7~DyFDUEpfS^jIz19|fNNP9VH8C+Hx(Mxe3Q2p7`(h?F8!Dn{BsY*$+ zCa)igF(mcgo@%KwchB76x~ItUX&Fgn@*Gmj1fOXc2pnY#s1lsR=Rd`31!#&Qo3G}*$Yy8QlwQYmBHKI$Zy5AIT+ zBjPir=xX_(u!{>T<10ic`Y8(?FE8(JQp2$}I%iJJPgh;e?Sy#44gQNk&MrDwSKn|r zp1L(wvj@GLbV@00e$_KnU6(47N);qTDRv#0qXXaR#=Yf(#}AiBB09*sYAJ0*(es1? z+}LO4yBj)S(oVV@@bdhf#c62!>ehKi3vEH99 z-xZN5M5q^-GtacdeT6i~uuD-9q|68S$#YvfkSAw}fk-s$X?M z3!}HrOeyRqaIc>pnkWl>5s;7Aoj*oYis zKFU#YTU(o`sOb0jFE)Ia(iTJ~5d|4L#g=O@=q3sRE^u6Jtn3?fCq7TzyI?#?c~QSTFno+X^_Aia+6X%tfh!3h)3U zD&Q&y7=!6w4uA*9)=rxeY2Jm&#e*-bd(JZ{wL8+A24K%?o=9DK$7d-&R7sxDT43Fa zHc*jTmH3EUQmY2i#(VE5$Q+F8Idl68k!GTL%k zy0T2hX^kwbK+UjWza9wGB^-*}nb!A`w($6p+*F2Gv(jVX5bI_sZkxRhwN;vqV9BVd zfm;NY+3J-7xpl-ht(-hLSy61r!5282v2zrNDHJ)~?O3zeINkz=Q_*ezLfUnm6)|9? zI+AksW8=!`s?{B>-LjUYe1;V>F{Ft^KxK{OL8bz3_xq<0 zYw;;zG=UiRJ^bH{ZUX=yl+i7{La0WaMmU{d{)qiFwhjtO|4*V8gb z6Ziow*~NC`hfT#Q@rF1+kvx9q0D1y7{nFYl1Dbb9PA0$>c8r9R@Q8Npcf%LcA<`FH z;;PdnmnkY~=8BcX)D%~T09M*pMzYWXlRlE|h*X!5$N15(?e51`6I*Dv^<|ShN^Jth z+x+$8OEeb$v7-icL<}1WgtiN7NYRbN7nx4VgLGj|ZYDfwkJW<~!YO7dLKIDfs~**Hk$HlzOJi|i{~&%dVppHkfT&7Xz)`7AQlvJrhU(I&8_zMtSa+c+ zjXaf~TKy4RC`*2MxL5Vh56&?L4p6@Hq4hupYDs#(#eB@YhM=LOlCKWs*lO$KDsY+w zCBq_n!8Kd9vNjVwl~-yW0w1Q{lw4TvJigbxyMunh@e)%}a@Y@5rY$#E>gf$wdMn=a zA40p)WW;A2G~y3F56~NwwZRa70bc)xOG+qpk6SlM+ZvcK`njflXcP2Ws2SH^c_$_V z_VQKTwXWh}FlIo>QUj;M?`|Aek=zkL16;8LRN#w-*0mHuKJrator~{)=w?)m5r=Uk zsXp{r=;3PZA{)-3OV2cSoMu&hBG$ScPwVN8^y`Y@u z>0~KXsdfNA+PmQx|8@42aW~*>{UIPLO%4#a6%?do0^8pX9ZjteGwH zkplYTGDHElW2dH&IH}i%KX)hA%h@{X0uK;25uT+Xlwgq#la9U@TyjcdSI#>0nyo>2 z#mcImBfv}q{A=Go9PRcayN}7<$tZGCzf&&GtdbpHc8eg>HM=4KEs9*+7C>-)v@*i zmB6|3<1Tk9*~KCv>)qWz38Ly!Pe{tk%|$kk$}Mnu9!tqfB)wb;Q~*ww{5Nr!|6Y+K z`T+^0e08B)%r2{yb=2Oa=UvUZd@z0?T6U~Oz8MII3A7&#ECh2-?hF03>o7Jqi2t)M)NG$5{n9nUQ*FG^r6_~0hs zNL0=@82pSmpLq*k=^FIu)8j?ABXny*Zx3=+NF3mK2h{ z)y4M_;yFq(k`C@?9cxVjYhhBz8qcd^fbG+a_gua0a4+$P4nU7r>0Wcv`Jm$TZj?2! zv-Z12Ir%SejLM>Fle~V2iL9BQMEI*Dorw;S^3G54fD^sNgZ(;2rH!mA0)Vs=kiUZb z`aK@D5%MxxBOsgsE8p4QH88b5R-n#CfYE{8FjhSW@4i7(B%M4l?0Sv0I^c(=oCDaW`T#-L znsc%rXD{$?kUucA;@v18I=J_rt*1u*lqPNE1bor^WH*4>Osj;)72vWa4oIuVjP@?Z zytI?C<$=^C&;mTC&^VnOtE=E?1jfH*q`#UbN&D4bjUa)F`QCcy#dEUOR&+2i*xr=L zDf}vEfrm;=t`j^e6K9Yqu99$4_Oo@(ExR zec!xx9o*2J7%3wU?N+U&o5-kz-2b7(jt;{gy~I|5J2$-4f*TU!!PD%WigAF%m}Fjh zMz9;tj;1gkP9cWT+8NCp8z0pIbLixT?HCq^Vb(-vxUItrBo`TrI&0*_r&a8oF-|lH z^M2@%5k*tGC|FS}oLcMv$-i~IKgSf>L{13EG>Ol2KAT=|^EfbE6rK3T3H&xx_FIfj zrRJUd=bku^+1GR50JG=;QXt`noJ*}&uvj;QGWt!?R;w-%0)Yy=rS$cUo;%-bpE9JLCJMj$Xn?-d0;e>kmEJp?mxhJLy`OYr zDB@-;&+KEyem#h?A3m$}m1sBLUPzX5;oJhqy9xK=oiKd=<=h0)T^AH;3}w@S0xp)? z1{*JluYsC?tPZ~S8H9U!21;)!5RR*>k>e!soT&PWU9Z3)I*Kn*nMQZHq;SW6;b9zn zh}0~`Ew4Cd2@8xi7xa>QIjt(@bn<|)vL zJO6Y-nr)d^48>DX_{ zrGYi@he@{V-kUHJWkOz0Vxh?IQ(}J*_;G!jmYjSh=7xi7%*4v1E2eyl_aBMTpl+|+k2L;Q!GbV0Eq9v zH;auUV87~%`Jx>C*?UvFj|4z0h9Ub6jvq{G%Vt{i71;i&rQRk?E!j z;y!d~0WjmYFyh(OlCZt^XX|FDQH-*TRMArH;Xr=GCL}28i;r^{z0+kE_#F-A@X8yoJ0x3kTGjjJdYvA`; zvVee0K*-lhCM6T6?-;FN9qcVL3;O$Bavo{)27xFwx&?S8O1qPLK^|j|CtLs0gAMZI zr2jySwZ~j19&oG-Lj;qVNOSXjy%aIGlUJ_Qj{5Nsss-#6l3uI zIXdI>{M&9JYb8}#c{LKnDZ=qK%k2C7Utx|*qMV^;UIhyoa?NPZFH}7Af7m=!nE0o8_1`t^u&JZ{fHcwf7#6pA zBt>+P3ixm7M*pxWLMEN8!1mP|B39ysHCWY{rA8S2R4=WM0EekSn_&%bXe4Q8{ME!R zvql;jL6`-lfB0&AF!Ry8;qQBs-ffG~QG9eeV7J0c3`8zn-ND%%s9U-^v|qnbHK;|^VHK028u>K@S)@;OH!v1pi+wi@FFG7qeq%t&QOFTke3K`H^n;@CSdn2^y?|I^DK_zp>k zqHD!s2aXG@19AXT5JG|w8J4HUB}2HC9q@n0nQ0#lDXD!-`$vy{xG!4p&OWGllFLat^XrX5{nWY4IKBP6y334()GxLwkaGr@&mj>2lg?G&5~hbBuX0j2kLC;8vd+! z_fcF!g`}tejKz%`;7JDvsA_VC2oo^brKb!LfQ|sa;fLWPHZ^qS;oiKG3sl*b;o}ru zmJ3V%{QL}yfFMTB!2*&@C8mq4P;wL>ROO6&e%rH2X(HOSvD0C!5Qu9q+ z{?1I6s{Ojx((cN@-C03_M%Z48R?qs;pjcri7f>MgeTqR4r>6}c4pYqEMUSik2tc2g zp%YIyy|fkw!YrGC-%I#<0ID2L=I)erMFYdbQK`PUE()}A{DHO@c1f$Nex5{p66mW0 z;#)U#Uc4y;yl{p!V?)`@P+Bjgxzxt5JPdb9gN49>3%7^5aB_zd8ISs!H^9bRMk7a6 zFn^rey3yYpa0D=e?E7}>C#*SuQr#b}(m#KXXs=sKzA5|5tRrz3KEMzDv(Ike7d6hc zY{}TQ2mm}XGB~XgUjlQ_q@~MMy^UhSn31t@c;JaL;=zv*GDx5F^g)ZWH%pxOxCd7e zBmzXNhCGQI+1O}0FHB%0q~MV4+iOXcxMgTtoR)}P>jUJBjMQ{dZ@_hQVYW5NDY^^T zGu8S6fsrbKL_DD4q6X-IF~xCJBbGZe<)0En11qidzt{^2Qg`yCgNx}Recy~XRj&hA zus_9kv3<=k87(DbIQky00uwOkmCY9W^Ol|%vhohs5vxocqEpJlTY$QknQTtnW32!OnWVT&cxw4Lx1Q;i8DN40{EA z1bO+HnlS|Kgbe3? z4F*G5uA=~ufdO$1+`){i>2(u!!UV&%fCqo~nKP32B{t(UnRo2a?>^L)w?iYNhP56p zp5tWm$;+-+VR-4!0=$dEE{L@;#cE0|*}UiCwxq}+*`?E4d)4qHHWOhC!?=9j@~z<69}J4YWn{ocBR?`HODL54=_0thgh|7Ed3?&7FyMB+;K<3zGB-I=+e0JeY3|fl zJ5=HPWDDdHG*xq(8%DOe{vuOG#L~H*Z2jHYe#^sYJAHhqChqGDIQrVUOo$Ffy?h;g zpR2o>j?hlf-(7jpBCZjo(-nA_bG*#yW+f~gG}6sZD0yJtNi=@vqKF#z#V&FjtRD4Z zBN$bfwaXd`*8FjK-|7i3{a+Z32aHM(pkM)s!-*Ip0;~(mUlkWS1Ft)?w<7B|Jf2$rl3?!PB|n!>?-rLPfA&*SK5kuYhN8T4_^<6~;W*=ct78;nn^C%8w=~)j-u20$+li8;gWK!jQ{MSen&8@^ z2nlb^Ir$cbPB@mEF9NQxyi1cqOFYMgjHZ;+MM>aETjTl3vWy0o7Eo3u^aS;yVR$!|2yUQcpj=A(tr>JGK4mw?jLpnbiyP3{ zae(nNSJ~k_@>$Ya8(T}zCM$idOvl2ptj~B2jd0Nm;Zw*8eL@tR_wq1MC-# z7qaB^`w%+*d0YYvFkJu$5D-J5(GFEAZ)hEoyECXA3JI#m3hZCms-4ABHb^)LL~JtQ%5ycSH1X zd|Dx`dY)ZCAnvLS|Eopq3WFh>gQz>^{xs!ocuFcNp$qx`d8Q{#+yYvv9sjX^SGMufg_FBsqNy2H(CiB~ot1?yYyzl71(_m>?3PyQllhM!Eb24ZNg@ z@hLgjf6p=p6U8Ou@Th~ssjYGR_q_64sOUE zRF~JV!&px2e^_$0f_T)xnQFt+Gr5|*(jnl*xnOBUM^X*;i`Ckg^To6O-mJ~h&FBqy2-lvB4^)w8_a zkP zE>|4c6DcJA#H($xRjm`TYo=wj6j> zH-7Bg&&QE5j^Wau)i2Dzk%}XAO;l~~|0u+cXr-p@#@@lrP{cl|D2`UErVcmhoMkot zVl#*9nucDh^GVLNl@iqYg5W|czmNj=I*N~VrD1;C$UB=}X|Lrw-+v_Z0t{orWU6_a zX#{upw(e5_%Q!4^-yFaF#}k?2R>@8|9@*Tj_N4FeN~n)%T_vmh;29sJb%Wa7ZOL6p ze4F`c^XMtmCP!X7}Aw(W=|*D9*}pVc5+&b~slE zw>K!E%jTGNfR3G|Xv8^=jn}1+U!-9i^D$ggW{=X`hf@0)9)ABd|-wWW87+=jP zB~hYa)K|~#?OJ%3WO-MnM&sT_7y;hBN2NOcHFCb!f-5gczLdtP zL^$z3)L=}Ob#!w2fxx`Vzhrv#48pL-egn?b39US)O%d7m5l_aBKSUUj=f4~UzlBzl zod2Z^BZJh*?rnHzsB~8+aR}$WXJFV9R{qyocr`dtyj=7E?P{mC{ztfKr)px$czqui z5h!Sle}nPhrd?MoO%i)XDgrg=TApn21o)@Nr;Yfu65@JG*8{YQNq_BRXAd$NyCX>K z)K0V-JKs7OI)2eg-X@TY?PeNh?8n> z17=)tc&yq@1yt6N>LAmEn&Gn@nHGPL*}rpJTklyn9vZq&@enO%y8IxO-{Qy`b!GJ1 z-mWr=+)bJo+yR|dszN;Pmkz4n!=j`Bli_Zb-$%z8_v5x?vK8U(5$nixlUUzp@_IQ2 z#a*Qfo$MtJTeb1sGpT zZ;GiYiP8vIfT*F;+mTF{I}yAWQ>X$6!&qc^C5u)>&%CXap&DiL zicGJKmiD4G^Y*8tDZ?>0Do~MtGM6{{=@9^@GSW+=d>!l`FF=U2qadurm z9qMx%p(t=_{|;-!AicNq&(pJ;ux9>jr}WH8yS*fOgc-F+M{%6Zt6VpV90USUsLJFl zVf~uBcjwI>r3edkZLSI{d0>kzRI+t-!#T)}D#u2YWX8xO*b816__v$ai*C%*!Z*6E zGIm49?yVI)Gyn%TgrCQF5)BR;8@o8+X=)f1b;B14%et(%w+7DL4^UpNy&09sZ_zFt zi80{vi?Me=+4Xc`5*A(Trm;d1(b1mH^<(DupY1%0ltH}aM>!a|4KjByXjxfvzY-_j zgL*W>&~O?l#W(Hq*8C-Httoh0YDcz&KDAN1`dFTB=gnJZBuDpH=0ut|WKIiF@2hnH zd)eyjK!HpKPZffjS9ZL=s8RqJ9z!Ev|50~bUzOPA|}Pr zV+SUl#kR&q2?k`v#Lxhhw02bsll92TD=7iP_^`1~LF@&QW#1_l7fo5gblhK+O6s{z z4@?R&cZ5t@YU1y}Hq>Ndpowa%dDa&uF}I~a=XJUu)mF}LlPZ*iF0N|58sy^Q79|yB zM`-$4$OJn#Yl~Idf7$%6q9c*llxD{)E4hmY>07_tsAN`9B_Ex*SABgYkXy_tjYzk*B&-qvHw6 z1B)doRu8Dr4egP#pq0Q`rRDW?dGP+^N_&t@sOAt~9?q(=`F6%JqBZv{w|QiYi2nbO z67xNz9qXcJVOZXQryEd)tbsC=&1rRXl;jd&J>Rdvv{$Rdzxw`OC?H>3HK3i7uskzD zq8~fh!29hMWn$|0B>E!{g>b>*b;Sq!*py)O3+mx5&hN^L3iEYy@-h(DOnyR%E@ zcMe{jsCd^X(Bu+~2@B7D9nIqc>(T4;`c{?VytP#e(4-mz?5wjBGSLZM=7wR+c^VB| z&<=9RDxIVh;5!9YnwR!2?e&&AFVH{ zo3+N#zx%fE`t|ueLe`xe95I{_$2K9~}$i5EQy#w?uiBw+@QvNV5o?Kq` zh*-TU=zdc-hJm@YSbdj7RObbdekA3{tCKro{m;9t;#1Q1Nz*f92coeZ1f56HCxl;e`=@My>KiJpp@L56&Ow8sJX;saXJ7i8RU$Ot=a95LA1vu z_fCY)xHS)jLOvVE>ihv4Srw3I=*v%Dw}ftbhW8O|rX#`>nUiJG(h|$%_5MY7ow1~# z8vZeZS`%L-krt$djuz*oi??y{bal)|)wl}ff=(;P{vDzvyV#Jbcyo1I^lLI9J(W4x zzqHs1;HND8a$rc+P^M5ityJlH zyOft-M@2MHeCXnshw7;|R0K-J_{^CHcnH&9|5iJo2mOSNmxm>Bgaxe$?86c@pZTZ( zki}1)XEJI0C%qSW^3bVxceEhqXJD9LwUtg1i_XZ9H(N&6v>?~Z6Dw29qEWw`3Ph6F zdpE@K;ALh@jblo~aAv+Pa=MjgKTc*7=r4iiGlG|^PQh3>fEC@l#iUFM5#QkX5>}b1j zo-C8;2XGevDuwBZ39H_)>~=!;=828S!VsSgrZ~|39&0V<=_qrj&yD-@*RvmL(V-A% zsDXFVBgAcdaZ-z$-Xu>iE~43AvA>z*lVA3){)IY8UO92idFxH?vwFOIlj6~Gu3Q(t zkDHN_;<6)9-APyOE=4k-=SfW%9!d^iGc@L^sQ5P!JfRy9!KZ7}5LH|?V2c9%31EPh zc)4_{ff3q`=cMT7(GBd*UgA7Eb%<~&=myrN=#B1W7>ctl&0a^_%=c3vM6_z{xn+BF zb$3T>R>TY?k;_}_@pr;Jr)FXzk=M8ud?ZV*IJMqIicljg9^5VB@4nkp!-LV`CoB%` z82V$B{BL=tH>_+;J3YOZrsn2nAF?q_ny#8P((<`ab!D()L@0V)OeB9dtsYjXCmW#V zJ3T_4R(d?wG1a?40Vv*JJn@s~G6p)PcvWiucJ(Svx1?MgNP=+AJaj?cyF#{ z;h&`Tm*41UWoNI}{@nR!_{JTwzPiXWN6ouzpBvV_IT~V(7cNzM$jBX{LpJm;t+Khj zNkRwA)LV1(xg&H?Pwd)^vGZ5PIf^@DGFiDI~z#yT@gH4X)S~jgI_x>U}M4;?~KF`>PJtZx(O&YoQj{R z^kpo3Ze2hZEe3xR+FVsfeNI$<`IDtMb$sIXHX3dZw!D%bk1$B$O-})E>Ge-Bav#g; zYEu~miS5SZ{%sD73G?CGtoYaIj<+$Xds1d9yAxwI*Z6?~a`)1|-IAnxWF<#EE~HQSY{u3UQQc8e*{=opb?aZK9ys zu7U2{5aUY}x$m>xoO6G-O!|5nC=lTee3H*vnRzPo@N!81Xd{uHW+E;C!K@@vP8u8I->fF4j5wvWuX&_(O$=6`EnY^#nE7T5gTyT3XeO&i=e zMmL7;1Q48r6nDKZ`Vfu(U+gERvH&9VT=C-D5Na|cHKS|Gu!u4y{)tS}Lt>d6qhg^R zr>tMcL>Rfu0*V85FIw&)MW(2#(z=!aInw!LQu<1vn!t)JSP8;TOEX7k8N zEONq}N>>JpWXX9HrG1O zUTX&v@cr_6)f1TU7*yB^V^21X$X1!3S4Xvh_c{&N_stPS>jo0AS@HSX(l%6$rjHSR zUM(qltIY+job?~vL?>~w9xPAoW=z9pq(_gC+@h{;25wHv+$|Y2DRJ zs4P${Qy9Mxc|ECG!31gZ>!x9}2(uxB^?YX<=BnrR_uJe8n4og>OzRZS?r%z}7uAK| zVn&a35L(TgZN0oFf089o!byoq&yA2(tKmNk@kQ*fst-s=e&_$+{%;UosPe;=o0|QT5dRemQoNYG&a0SbXvjuK*3F4LV<< zvruz1fiu!sI|MNO<~1aV;I{y-azeX%RdtETyGuj-6yEfqOBe)WlkH;0llu(n6$i@m$kJj{I^#W38n=GI zt^aV$$SsO*<>ScYLqrmQO}fK zARUlTw-z=Gu~^yeQgYJ=SkCXUdd*(u&HnNOSYsr2@fHzZLvdue^f9vY8%J*>DtFU< z8A+he$+5Rj@r6JyA2k|VZV2*f(QJsacwl1zm>@B3r`|-8=^*;%p1S{91mAhiEjxl219Z3NqgBzJ*S>WeW2B z#de%M?7m*d*;K?>rUz$~^cT;BlQ^qG#IRXYDyZT?{0GhMA=Z1FLJVl(=yahU_A;Yy zYGjclMUEW{($-pq%_^}+BviU{KwCr-}ed!{*L&x>-&sn~Kgd-2c=3A|?4>MXPlc#{IM%hYSx*DSsh zg_32v!0tRYFM8bH|JEAjSh^bo=L7w6kRUSq-_S_<$%q2?bHCl;qRZ-<^#3QRLgnV5 z`$<7|Y`a2^9T;izz_6+@pQYRh(^JMWQ%YNB&3Qi2q-&rb&Apl^qIA%XZPrt>m{?a_ zVEoDe_z5esuL_uC4tk2X)N_w5lj@}l0Q`Ye%foH-blD01tWx21f-#=S4$PIG6b%}< zq66TtBJY&?2?~CL;DOZxCgTE$DZ|e|VJiH|%afUYrxmCw_N|_7{^!n>vV%L$#P}$| zgCA{5Z7u7mGmrPb-m|-kheuF-9j1w3_h014#pCT(R;W7@mD}Q&a7;qQT+M$o?d?%E(ECyU+0Qy{EBH6Q)xY^p4GaKpNGehhW7OQG z%WKE1DkKp&yPMsFq@fk?J@xQ+O(U1)o0!LyUO0ZpDX6MUrLTP6(uTE6?`?Da13L5> zDG6&M_@Di{Wr@fH0sSE@F`-k$3G;n+F`$pZUMmfA-7SQ>d_->l+?*xSS5z7>8{ldh{YE1f_Fyg|MeN!e5TvriTonw|}(3WiiIHT?DPXQg>UmYThV9rro)$Iw5Mm|!MK#p56kza5VZirf$b!HAo|&C?nYPg=hrtKfkJ!56f>iztNrA$(GkYM+*Wpwr1KmFaRgLeaiRoj%&yn zFWI;_P_pvPYuahCcLc=J5BNj#-ERNBdFNZ<`QhQ;tZM>H+2lqnP8frmA2c!(?FJvr zAs5-`w(b6Kjp;h;6%FkbrEYwmmc<74_0>%{H_*~22H?W_1F8n9{-mcz^f5C<=tMSp z(r#$V2*y;wh~l;Z8)uoW-u<%Ct{=+0iqEG+(g{FCMxcLm&cD&e#6 zOyttEzVA|b!eqDg0}~6ymqW}g3QGE4e!M&w=cUD)ZvynZh`p63SR7Fq9+$q%G8k{j zwwh(7Fb81M7WVROm&(Q4+d4icQcg`xF_mj#!|ddDv#tXgFK~P4H|A_*Z%iyUTqAEx zvLt4+o?#GBghuwopN@aU3qSvdsRxlrdNX{geNI67V4iE+3n-+?X8^|(p&a+< zsmKJ-`0m21}))-&h948;(@LHs8|PeepV8NPxED}?7H5uU&vD;~f#JNy{9G=7Y2 z6@J2#POC6KFe=UR0_pgf^qXUGF!IIiXVcp+gHy$gKE4a!QurE=;;}~2kPg|4jc4ro zVTDtY(Q$d1zZwPon13FZz6WyP;HugZR*!e*++l)AO`pFG0Qwdu9cUsVXt@$bbRXaZ z74>nE7F@(jj}5CxK@(7WU2Zjc3!00wXXM{|j=XdQhN#Ib_Ax|91;-U+I)4mPes&K? z&`YuwC4qfi+1@-L6PiiR#JA2FVVK7GBdJOQN-347KwiAK)jv_jnfWarD-+Iujw%z^ z+BO=AUVVHJ@_0ZmmY2&v+~pwdhpC9j&5|){?LP$Y#S-~OSHRRaQa^vst>869jb56p z?o0RmYHzI#*o-#iFaG1Qg$h)v_jAw#6J~^iK&)ggdoI$uw1V?or_09Dog!bmMZM5$Ezvye`_Psjm#&#p1*h?iTm)P46eceak*1D`OZ?Gyc(Auh=XGm$g*&dRQqe~o&9#9pG;!>`HJ&7z_uyD=rrwokk9v^FAF?dvqnTW`+fYd#Y&()XsH6h#pW>wp2QT$=(+S}*LAh1Tgs34)s#1AyQR2pZ z8<&&Wq^t3_)yeB&xDFWpV(A?%n&;;;LGxF(LWoYVfzr+-PEo4SU_X?@Q2g@A=k;2i zm?5IUmvbE*u!>X&UgQluSEd=hK=|DmZAk=}c{UefhY571$<0C4vjZevD?3jn&|$s# z1tp)THcM-v>lp@j5|eSKrwuyvC?L0u|RYo_FGQ^RO1GSSoilMTdL`R%5ZS3Mu~qrkpPUlNCC41#2Sef}u2{{BSrvX#~w{ z1!`FTEE{ql>4$d)Ha&)UMWG`j@nIp$NQ;%y^j?=^>Uec7Whj z?6s44RRW_nU=%pmIKgn|A=lVfbN37e>By(>c|&hr)Z8qZI@I)U3+5mL5b{G5PZ$0V zwXtKqJ2q?b?29fNglr{VAkD)oxn^DGPf;t5@e4I)XQDSZN z?j=*h3stD6r>Fa!E^k{15XVA*N?HNmNdi)^mZRGl2TUxKhnI53jG@Uxm-<$AZl^_)&@+UYd3alL5*Bu_@rH!3oovZ+cuIbb4EJNn!_u z>|z!;t9Yjr``&8Yr*s+QtBIH_B?h^9}WIh>-?Pbrf(kxwiCl z^(a>pf136Bsy>=607DA;7&G*Sq_@kJ(1;wlxws`CD6q0CPxA9XO!AmxfQu9bM5zkH zRiyagm^dIL1Y!s9og;FAl5rbLgK~{OOusGp`5ui4)k}=^9AV$Cg-ZcDii{Q>xahi< zpA}t`Qb|mh0=sNvRVGb9Kz*i4O4#e)l2d zHy8ZKCOCxBfQNj!w)E*IuTKgi)wmT{*p{l1gQC3MH&ft80{+)7jP$tmOsP~}-n!^% zc$g@|cH)sk8=_O6f8vxjRe(%%atch zF5Cp-hr<99YYu74?F5mLszf%6QaGv$#a?iyJrzF zE8ax}8LiJ?0nhPDYYcEs4T*C-aCF9fzwVF#Q7u#e$R^H(GfScGpDiT~sPJ65{96Bc z0W2Tb74gw}AevZy)LOI~R^u0k`0RjXpZKn;Q}Zg%GP!H8G02-}wj3$hIS~G%zBU4W zAh&q|O%=K$pFC_@Utt-hmc|Oxv7>YSjuY2s;kd%W_ve^|w5Xg)Lz{LeL&T-kvG39m zUyTpF;1Ljj+P#;q*lz`!*>n0My;*A0=i1yf`DS%hb=U*<`!5@O92b}Qf2}|7r3Rj^ zRozXIc9a-PD9fw02y#!1VG19fnirS^A3}J2NwM)=)~gajh1K>V>4g_JdysTQ#8?C~ z3~QWweO`iWm5okn5;vLXm}X3)y{$A1;5|c9PvjI1gE^z~;-yUc9XmVl?|{1(hS}>A zp7$EhTU)$=r+^Z#<7w~S>Ydip4L_;YP}f(#IC2v152gt~d+#x*u74YTLuT~hq#AE_ z_H?VviwGG9tsGr5&v0D(`81O5Oo_2LhMg6#`36=(MC5gidcY^ z^kW<5x$L!SMdI-jW>t!Yb!L{uHo*L$CBk3UL~X&@3#*`&ke{{f=+WlWB>*}Xz)=Im z-oeiAwK^+rhOz5M-@;2eDh!jG8RE(rt>25~U*Dd}X|clTy%<;!EM7QZgabe$`afn| zoI<&1zp4$2Ll~~$M;~aaFIjSl2yAqxoSHxK?}4sA-$qzOJQ8egHC0|4t9poRvb`h= z_j$?T1z5#G@D2o?A)Xp=vCg%GnY>?E9<_Vin&5(E(I*uBT#H7&%u9=qMf1i3N|OcJ2B-Ib=<8d0KHe3|>2 z&O8NQb(hp^Q@-xwqx0MGy(c3jKsMREne*X`T8b{9pC$nG+dNj&wYD!vPU;o^*6_>3{XueqO9(7j|b;U-2^2Zu^a9%wzF)v>Xol{B zlbzt`0)uu{p^q@9WPM;=_Iw)8rsz&h z8)b}P#v|5ZK3lU%#%q77BO69s`71+NMkBml{>MX7?mMd+1gkqlCliQK;Y5cil&Qky zg=)5}t!MZL@Rolc+V)N1Y|N8TfLbH;^_ia(K7s3k)CQEy6i@ z6*oS&6xGqsOSo&=bFtVRTo&sXSjglfH+{;I@3|Xe5lISoJj6CY3bkr%mk-wA)147N zeAsn*&Ex+V6S3qcMvW3jFHfcR`w06R!;dPFeMu}>5MGJBJw9m!8Sohz-?{|x`>wtm zjhnL!Uk}5~b{-c3_PN!u>OvO{cN*b-$?YDgwH4RcOwp8yV3kV25(;m*QE6dm(nunu z3(4{2rO8&whu(AK&DUIS9xD!#`rCfm5f5DS0HCIaDk&+&?n{?cunjxilMx$+#Vu{V zj=*_#0t~Z8jIWaESnv-K5onc)r0+xzlVfI%b9pKNmBC7)o?2M&C(?lhX0#8_e3Fm9 zh*xonRB{YnFf=Dhj_2P23{J*>`k-E%{ZAV=nM=y$5l8$DX!PTxGu1MYVg zzpZ%7SP|pm~ zLk$r@YF73Dy@hnhngO2wd8214AzI1ICvIsOxtF%N9x!kt^B>JspEN%Js%ukkZ7bI0J||UdP|GYl zs@Fzp97*%eJb!xgsZ^n*NHCu#C{U}x#Vk46I|yviIea|{BxIL2XW_QTFILde;aikU zL(N1p8Q9)c*3GqXTm!VId8+h;k?e;HR#w)?(>)=j%U@IS|}kORofj+_c5!h2fL|m6D*3;Cp{nHc8)tM8TsAUtUrM2d^Jgn zGaukf)UQ9_O>2_z<090%p)WIk@X*F}-ElX?$b!cwvG-hvo}U3eJ4V}OCim)~mU;-V zS}7<=_^7ZnBB_~D!E(#zZ3FGNX%U`*2vnsMn_TskZPwQD&0X2TlMLcYXecq5w%vPjb)p>~9Ne^E0@Sxl$NNe#!iW z6%R?IAZ~gZeeUQg#fV{9eWro_8%FQkT)n%)-(z2D;kol0#T#|GL|$ID41P9s_oAu{ zQACuE{r#<& zT+|pu8~bpzE&}?62iI!y2z9h3XIz1tMqjr`jHCeDb8C~Bf*t|U<)7qV^n07WyPd%JA@Pm`3t!O6Q(zqx;*xxg$;lcA z;iDZuBdw(*1DIl_C<*D6rabAJV!>{fJJh+O+w*vKG1!_MB|cU}P+=h%YdSh;IyPS= zK3^p|;&f$=k+;tsL}{uD|J||#A)`8=OtA!zbSMykhnuO*?Et%UbDm>y0*5VLItqcn1;GQ>aN?~A{<=1Defh&=Bfxjr z_tw-GwMU5%(fR<17aa*T)3U6#b+QZSu=WFW#_ES1Fd9#e2}%6YGkg^CCO1%St=$Q< zEKynwJ!#-s>9SZ@NI0W!fr3?D>j(Q)?$1g%(Y^_26AV3o4YPJaG(aI#Z8k)G>!eVw zB%f#6u*a|&Ca_2mX%ZHWxk9&a1s^B=Cgc-v6|OJzJBO|E*t%zJOx5eN8=y<=bW$<` zbclhqm9h)xMc?o%Kxl?sHk+|I62TfnjOBZ#z}yAQbwGLnO{pLU{apU@Og;I{!V~vj zt(N;rIM)mRr&LklsT!XQ=M=$o#Cr0pKxu)wX)ie<<4P}_>fa4C>#cl;ufu(f#?CsO79 z6>p>W*XK|q8m*0lNBEsc$BCzr)s&l;y%`Bf}66HWD(5fWIh5 z#s1g9Kq*G4j{I==JbDJ4%F%o^k-cjZRMii?k>6-C_yM3Dq2dkf?P0+xt)#3$ z^5W$cb>Iz{ddGT4Lo*)P4Tilw(?DRUZJrYjQ0Nmy2p`2EB6^McD+AahZ_g*SRHA-a zk{G;y{^Q|Oun{eSDkevB{a|jdwRIAyNuOYxR+3&h3Rxkh-yGzS4qcI2b%q$Mz^|6g zS*dq>`K$O(pbRBH^%pfF{6zTbY4O7}3R(vF{MCbk-UDnJb%I}N5U4;9J)G{dlPyg&70PP4shT&WV=qOGlcpEyg zA<}W6t@N^2HLRhL%9Dxut~7+W{c?W}|1MbTfCV^RcI}iFYJ_S8NMT_!%TtlC0b9x0 zt&~ny*2oJMWr=M?5!*bCr@078PsJ#rH^Csvj~v9vW;P#y8#&feFZ96TsN0po5Z?6t z1IM7w>H%^#ln$8+RG06MOalS98$DdH{~V{)X~9^@7H@;Ivaa~P^UM45qUDG)ArS3Y z^y8?mFsd7!m?)^T->=9A5Tr4F3?L0q&6S;~u?2Z;gke@V+Yrw2*9?=6{d1TJI%m;I zE;e|ZkNrfQ9+_}{(UgM+k3oseavtbY$+oTg=l3zhGOpVEB>T-pUk(^XN%yk4TO2=`{7&~OJYw{zGz%5wp$3a4x;|cf@M-MsN=UK3)*5?$S>1rU&&chA_^~ z&I8>SYMR@Gj2czR`};wS@`+!~UWI_V@WhN--r-K3j3G20PY`g*F_;i(NXj|1*GaRWK zUk62|laVkJfYW@hpKpD0MN7D1C+`dt&({{o#HYd2U4?|tRX>iEnO|~2$0j%vakD@U zl6U`FHDC3y9R8x-GcAXsmg+^-lYP-|@Pt{48+w2mYG@lc&fRu35zt(zv3YznKbteK z2QO*@g!ZCbmp@Adc}XRH1h8id5R>WJMlAI#L%mZWo`|^sUq46?>sFYTAQ6(H4xxmk zo0=A);AeYb+s8P@Aw;df4ABatb_N&-{}Av44ZElYiL-=%g95tS#QE{oI2G*A4*8z+ ztVwpq_-AuvZW^$5VP*rGJXQF@G7KKAtue_eUX>4W4`-tX#{S0wA05G8MV~qN>A`T_ zXeFqC+p(8mOs01yZu7^dl1>U<2M0uj32509?XeZd=!y+(9EtwT)@UxrsZ%EL2?-+` zS}S2pFlAL`c`w&5lhoXGq==O9fcbm)J72@me z>UA=IeL*D{R9tKTb|TsvAAG_z*J80IV+W1A(Gt6Pr9BUh`(d zVP9<|u&`0&s?7gDx9XWffTC9S>W5-P-Ow3>euQkD*b$9i2O*Mb1m&xeTLb>%G&qfV z10lB8#&TXXCoc^``=*H|`R}p`8eZGy z&-?)_6K0s;K%^!Y6_Nl6caCStz|c834p+Dm!hpMVZ6eJKHd6XhM z7y~78B_;sNe@J1`R$HHKnqEl->91;f#5`Aeke`LbDwB`Ux3M9Bo_76s9!9p_%&~mF zVx}^)>9O;9s{3`3SRdY*Z713Y|zX+@J3oWJ8=g z!qmtkggLg(-ApdJ>pS8)%DGYfn(pAAwum);#*l@4(J`?u@1qQ2x4se<~88j?Yb&`U?Q0JXJZez0L`G4Tjbmff zTKOU_xjUmEd#@}Ir};IPD9Sxd4&)pUnZ7M5` z6MUYkv6Zt33AmmT^@^Lt^m!{lXac6z&w!EsrV4@{Xul(M%C@4 z>_>NuWlDn-Dp18#X=ULPV$A-fTO~BvW2DDOK*7($cnw+qod2Hg)a&+{{m*5=GR-Tz zN;vbcY|*fYjvMb-K;o^FyXVu~r(&WJL83-;RRr*Qy1U|)=_2Ae^s0Q*;mXauqtZ3P zxu-qA$wMdcd-f8^MlYG-PiXC%3?mv7y9{jsV8L^q|58?;gvexy9RVFfD32U0i2@Tv zl#8Lq(X?%QP#g=e(ECKe2!L~2FJ@pOqN=ar9ZmuYJ0lVnvg!h64`t4Qgc&N$yB(fE zN>&euBKeVt3jGPk;AJPYF*FH)j+yt=k)yw#Da|mSH&CFx8NYTDl!dzfe~VE+{dnVZ zfC-T>7p9H)<eFobh`vE}pgAJhojh@>f8H?V zFx}i|d;PRrJ2O5m`R)mbPx^rP6defcHq2wAGyshtUuV)KW@Zdn+P)hC|4KoH0bgHV zAB@RojS^~P%h68|l0w%MU#+Z2g$s6ew^Ki}qd$F^K6?0ij{%{XlKF*#P~QqH4%i-R z7dD1tJ`{ck$d9xx>^Di1WZCI1UekI&gnr$v6shP_4m}M)t?)fcls2%yV(PBJA?;hJ z`S1;DHoYR;b=y=FJ(2KjX8_2g?^~ZU7A5%G-9)x|eSO#3fNt?o?b?oT1!^i<)24Qw zR)06vjefReGvLGpw*AT>CL=4R^3MJWLM%jbgudNlz-AC1rXTAH@PhdP+(sbsAbQFT zhgkcZl~KA^p)USfS1x0?9g zsWD!qn%me=P*TDS!DZJFgyu~rA{}0GU~K+<$x-Jub%;S;*7mXBZKKnw2lPW0eO&&l zXt;4qY@eW0Bxyi-kT23RL58X9D6OgjUd%{1=s>V474E|86O9yYjzS1@j#dC zF%!|)YZ0|t7vAOB0}v!sP=-IGv~X`8`u2qM!;6*?%Jci~!h=6!^M-D+Km=p2V&3Vh zeoBtI2>r*BL4;8j(qLK{G~|=-!!)S2>hER$%tCf^=i~S$1T5(!(}V$@cW=aeR{3iiH*W+kXpe7^`z{U!UZO3jdg-F^OUP2@4mkJR?7hlUy1*wM3=f zUYBRdqgWwVYoLP*FOVx&uphKIifmoO3-SZ`*B|G6?QO6#k=eI=mXdsYK}Ud+kKF{} zOEAz(?!O7rE}z2LJz*~>owD+9Hl&(raJ4zk{DM;aN(Hz|f!K1F&o$Wh0qIv6b(#*- zm)&gZt!60U360`JB<<5nv;C|;E?8N2Z*hFX0#i@z68O**ve{B#2aOBJUM2T>CZ~MR z{*jpV4GnOR;BH;s*k#>@&Y+t)-k(Nk8RPXpak=gN$`oy@<%9f|-!7T>=JA8!BVC?{ z;RoNYy7lArl?kP9=DO!k`x44t@v~EsgDyu&`O6VcL!@9%ckQoW;v|Yi+s!`1#A^Zi z$ySv|rBV=&DE8onEC$#Y7Q#ZQSy`s1Xt_59kz;=+eCj%~YU%EJ_r1D9gM~BK4RtL8 zE3URzuvJCmrfo z$E6|Pq8{J(*U;>V$Z8B38 zjuPe(SXv0Z8lv$zmhjsl_8)JsnJM@y)DahbU|PzVD}R``VkkU|aq*(-aGneV$cfcW z`mh&(z*ej04+d9NP4wSvqTD()DSAv|DvQT5#Eqp%YD(jfDV(@3EY7!oeF+S10_wV! zHkL2@@-q4+R~$wDQo*p91Ii*Dr!(~eVG-Y{3zNY(OMW`eVZsa_?nyx;jG#@0wo_TpHl$? zk<+NQ$|$j}Xnhdi1)7W0D1XZnxJuz&{nd9fi!m}Oz+qy$w%#fn76H%FR!Nmmizth- zOY%@$Z}qJe+-rUIQ5wgugJORNjhw)`R&fu78OZp!Cfus)J5yqF**8K7Q{XpB{jO-! z7nNKRqZS&*UFvw%_SCJbje(&!Dj?dO9%iC~S~s}L5v?Oper{_2&kJy8P!+x<6?tFt z#%tqx*-8iTC_P@nMwS2RePLgWfX@DNEc%-xf|)866D?+COotu)uW}$!VnlM)l?vQd zg<_m0FK;)@11`1^ALWTJ4bij_pf&?ZbV8R%A7VOjG;3??0TmM7d9`_o!!+mlrvO2$ zzc-hfHFi#A5Z>{FYjuO=(hM@ZA26iek%8HbO!(ju5)!G|+$n!A3^g;QdAq}xmb%w5 zow*69X=%@zY+Y8^qh7sKxh3@8c9OhI`STYaLuxYlqW_i$*M4c6=r+(%|J_x7(<|%J zyo)Hw!$!&+u!)7}*uT{DPa+`Hh<4|HSz}mPALUBPfx`8upO>&Xru_X@!mat-J~x8z zDEV?Ok8fe{B1X9EO$GI&qLrU7f(k3aQgJ~5D6Iwb8>Awt*48HVIs?wLGe-%fztnIZ zQ=xrfMb!*+&_>SdC}6Dnm|SHe*D*>Tpvv$DwGXQHWtRUsjrju)enM2_fmT$!G zH6$4c^+>O7rk1My%)RtUoSFC=Z+GD=OQH#q=)XRxj=VjRGR@`|bK=OjEdz!#Q?)_T z@e`+EeInHYgA0Ak%s5MflVRxS(O(U}4D@b-p__}CxVYn4+1TW@cSGcppM6nwca3|c|8e<+J6d!rg-Y-S!#Y>;rjZS#$~ zXBI(Bk_Z|y$SWehZOVRIA;`A57%au8C16i$d&7W3q5N!J2!NL%^v4*T z?bQfL8A<=b!^D{r-x}(ysveJ4;EdXb!JceF~SJ%tXG5gHUmH4L9kPtrw3^no1OSE8l7TP^OS6N=pUD z-!APd6jE65nJJpSe1&=^MZtj3mzhZe7G?NE@Yj~21Z>TOb*GLmq26IFeVE)VaAUP= zYi~Z;8MYK;q6*Yo%|%$v@g{c10I*8e?the^)9UC73QF^kaH5gXRuz>b;<-kM{4_Q7 zZ}!~RTC|fLJzqh79p49eteLOtjlF%N<@6*a3|(G@G0YTV2o1y}w6qaHiZP}$f9t;H zva#w5*SyHRHEzFS4qdLm5<`ozNvbdyphH~>xjG2g(k4}pV+(DbQjp4Ru6FhKz zc(!r|*D^|=+G;g5rCp_{A-lP1StZ(64dgHl!_IyMiJLfwge26H7)DmtjsoStL0lhN zRCEN3z4bM;HxD-q+$xaP53oke3fl25t%^G`O@395!);Cej?+V?n6&G8iAkPq=3u8? z1{H(D=_?c7Z&ff6!$ww5HnaZ6_2|$TK+-(3=VB*ppOW{}sAkKb6um#H)w4y0^l`Z` zoH~?3jE~jhQWNrBveq4tDx5&z!Y$A#ro+uxs)cN+gVyTwN~ zMw5NZKmvv%%yQVpY@3J+1?NqkmmpWGFS{bn(AF%IjxLiSX} z1%nS8af{_X9f7IZekIZ$z(DEl2Kj(&*iT0_k(rg^W}hn$3rubykiT4I?5G(IR!w{w z*uT_^m(AjX+`i8oJhF9q_T2ac7?wIJsxp%eja25vBZTW@#q1MrPOvC_#1CJ{)wMlU z+S2ELu1I9y7btAER$gjzBuMoA<^g@!xDj2 z?mrJbUNUZ}SzF*5HrReB*UGlM*bghViSx)D@>mAC{p`y%tKOOvKv zvh&vZwbQC89N1<&T{|e^>i4jH>|{3#-;)_T!e5MiYh_6Zio$z%3ZUCqX0q_uH&}vB zOEa`g^kK>)1cHEUH9V8JA%}>s+ku(NYfv)0Fa1CtoJveT8H`$`GLa^lGw>k$5P2^j zoJDOKa}_7zH*%>1Fv`8C zRFR61z``KRTM_A0hg(NOn2e*p6hkdGuYexsFprD7MdeVg@WSUqMPp->>@r1wjHbu5 z?mk0>y`xjWrs}*KC#>yTSu_hnMMDF}j8LA6uqP7<54?g?f$AzxW~%XdQoXynJcYGD zoU2t?2)Pzef?!{}>U>M8$f*>{6djjzXdUkR-OA-BTq9W8yk+s<31mb{sEE;5P$KL_ zm63()A(#&mFS(g9f7}gRTlm2=NZj{rv#7jy^2wuXoHP7WdP)) z)zejUcKLCB92IUZLJv4+XR`PJZX!-X9hUCoeI|!-#@I4uqu7uI$w`ENX=!b)dd1FB zS{#dUih74MBxTG4>B`luRexl(M$wIj01#L?ISqAV??>)p_y=3CBj2`02(8QxQb9F8 zst8{8(qY1Z&d5N9_eM$MeaWA7d>B4BJ#&}tRT!C1<7HNi&{&9?hNj=52@Rh71Po7v z@ABHNf5~}Ns2`k9SFUYK01F1h$IR02<`x{CG2Si;pJV25t(TQmVuIypG5sEspjF=% zN1y$Paf)FG3(bA*^m2~=WkH9Q(8&$33{elQ#yuBdI!;bY)!UY0LVD#7j;)9Q<>g`H z!l)GEwUOi|;M6jOkUXrzNJrkFgnhJ=;KkVWvdKX$I2ygaeI%v)jTk7`iN6_p?EV6% z?lv%fbm zXaxa$3dtjI@tzci`Y2&tKePC`vT?6|nq$HzOVjIBP>$xDox=wFN^-&NS<6R*G=hw7 z!b!FIEwAYxc1p71t647NSvc7l2`wY!Nhx!7X9akP3~jXGxr{U8R= zsIYLCC+P@!j!$E{f<3A6v!UnDSwf6wT}9}T9IwB?@kqsCnGEzom1s{MqPRrgGY4mt zQ7YXm9!;DaALBgr8K&OeI-H)KA}^14E}icFtT~JIL%5sjbQF6IZDlS9<9=wI`vME> ziHWcN72;}bQ@ye{S(U`8rO^68$_8}!!0*J~Av#X?(!4~fLZY3$dG&H<(}K1qCozXf z#Wi;Y7pX=qeyL+rgZjHza6*05`8}jt=U872q+i60e*0!T|v0L zK~T6~OquPDbZ9U7m_mf+81{ryG>B1?jj@i>p4LzHR?RSl1alvwh#M6A>BaQ~%4DXt ziZO5E2G*3fc}FnHSlx^?h}XIVZs#Q!o{E|6ZOyst4EAF@Fti>$zI{Z~Uh&b+M54up zMJ58X`B4xf>Z828%*Y>N#j-WVvOKGJczSL2?T98=0HrK339wXbGfRnz!su3cMJgV} zc#qgEc;J_0e+>8&rUL%3pcN*&d-)O6Wu(n)*DoVPiqi~xV@D&8Vx&TY>ed(6Fg=xx z?HtyE5G>bo^>o=8id^S}j*WLgb0dPzE|*!UOPC(DQ|Njp#n3>jcefVyvbBeW@WKIF z8oW?$^V+$u8wXBJ+`Vh~u(FQ{+k0*lm$O*sa?amGyMz!7E&tjOU;{>b#nnY@RyITc zB>w2>)a`v3`HHBSnnuL{v^7+IEB4VVR~AFlaV0HX%1m*N%edvtDz_DkQaB zg+%XJ6i`iQt865i%B!#Zv$a%G#Y?Des(GE+O#u`#o96MpEV|=lDMv;pm?kr2ox};W z#HPktPeZ^T)dCHET#Hq5Xr%0$j2Fzo-$(4k<@OkS z7u5y4$yda$IrODMWlue4=Le2Owwo0LP6H^S;?vt>Fatf@}u;E;U9K7AZqRC-u#LVid0mg<0wH1df|VaoB*SVyF{>Ll5&(gZ-B6>VGPxww%dzVL1sSV=*fL- z-SeESjU@FbWVCUDLJKeQ)if+ptJvk{{aH>mG5=SPTKIr};oL|(J1w&{H%2XW@O$)% zi>zPqca9SrL!K0D<6DUgOF2Uq;JQ%%qI%XugCU`q9CwNXZKzb8 z!a5gybKy1_<1f*b9ThG?ZI`IycNv5OB?U~EMznG)P2#Jt3v;n0aj^lk1O<^Zx6y$H zCffZduWn5kZmwV*q?lwmF+}zcx3c$Bcf|5awXgGizvS zuCyP*$)xf=knUAvX#Z?LF}_VKBlS*X7S~8cBE`;e$6c_*7yXL^^Rvt}TX;+mEY`Ah9ml2^i$0>EdR8^)OXDhNxZL zQnnhSo)keqBQ~p>-{oR#@1MVOCos^B<|-ztSw~i$0tliI#|LVL|0G!HG`jI-%QENOO1R)4RMquv!^WY z40=Lt&yGWmCdtU?zPk*x>9$k%^8D}_#@AGnrgHUsZ~m^E{r3n?!@svpL0Nf7Xb$nT zIojJkS=mg0&avUJ00k(b)OGnALs_1|lwCBGlp%Udp(70+J%~BxE)KJYp;VscGUANP zOgeC)qBy1*jq7+Dd+o-q_yCvL$yJhgGW>Q%6L?u0qpNb@U}95P>sGWdg`MSdc~RGL zh)JGoW1*L=KCvNKJNFHvvbKFpfi{851i<-5y`pYZ-v%fT<#gL&V8v_tEWov15`EyiV&gVDw+Lf`V5tODvmUGQbP*5=jaDs zx46MlrCJLg&XS|lSU(W^ytDH@5+(rR^q5i^FrhcSEjdGs*kiNmK6+e5xHBG>$8v7y z;SuI4Fb0Hydxj3oAn&+rk1&v=?of^L)`w;~Xq8a$`2+n;^H%tIw%?In#;2|%D&~vM zWyBf`uEg!#oju2wC$E?8Paj4FffLO_LMs64$;r;|t;#ao#iruo5y->a010H4!YE*T zOPlUyPJ}aAAnTrP^a*>ie`T?_on3xAOmECwGCaQ;{z~5nbbCA{jZ1EOVyKBmn{{nt zO4RX}rd7?Jzi3H@=6Ygi6QYkmru#ptOVn0zqRetEfA9Q{S-B1TUHP-S3dhr1AQ8Ol zOG|bqFc{?3%dzH-HHVC{iX@bhYRpSdmLMS~65$pE%{!f1rQ!h4YcfR`DxwWx&PGC^&tjSlOR$Vzw3_a`?g0?#2M9b*X~swJEGNslv( zhtbx?6B6cuq-qm&-ZmWrf2zh}stde<>+IBoEmV}}4JV24**V%jqWA}aGPCB|awjd- z>Wx1dR;X>FfqAX*c&4qB875_vcw2SPu@{=B0!&}1NxZw8`f0@BtWB?rB2Sbyb2M<` z6rYpxYC7VUpO@#~&X|30jJqe8TfI^xl%hPGFC4L4t3Mz{Xet%|4;kDZOr-Jq@|`W! znBMM>W%}L1y>g*z$mWkBEhn0x?c!ZUCt2hYLtHF$#$#hgd`R6c$1P z<^`f(A79UmUJLrBmDfnH)vl%)_a=GnFE8Lj%+P*C29`aTA$w7SGBF2U_3YtYMR>sd@!a6ilCO(PdWWwTRae`8b3<| z$r2w4)@^!+8lU&Qz(^&Ap&o~}>hs8BVRrxI*WP>uxl-jDw*-h7Dtm9V7DSS-CP@&T zlz-k)&$N7i-1QspWx_t6Yn?%-?IUX9L1NGfr#poeaU2TF36Ykf!4AHwpX{DX_vu?+ z^;2 zTYyCgo?&?&hkA1H(-uV3kMHq)A7U+|U8O`2P()x?g@$*c7)8MRsB<(1hDjo-0ejtr z`mqDTr?59vSjgJ73k>WSuhvo zS68`8!B0g`&$T*u(Gm$w>AL)77S$eG&R(Hj5m5r4e<5x7i9iqC zt!lN?%zNP!Olp`LEK7xg6{yQ6NVjv^v#@U!-%Ufk ztOGQS-FjY{%I_^Ii9g3sH7qhWk~*0~hY-QO0?OeQ{rDj57~N}mur@?%srP62ATvwL zg2F%b~!zB_7Y&AU6%?Sn+u}??%pd3=LmlBWKLT}2u=%fl$iR{fRr_@%q+`% z5Zxa%6WdjifI^`Pl7<*JOF%lgKv2k)f54MpKSpL+sx(g87|_uT%^3enuoEV9fWkDq zyf_vlK8!<5G6}tkuW5c~XHrdlpaCg>`j0GF_@?TbD;)0CGuVGumBleYqAy-dPo+?O z@%9YRJ>9wnJ8{9$KOIiiXdHnrS%h%z!`)Cuzgr_r!B5#mc4>(vdD2XdCe`vc33&DK z)&?M;*OEEPHem)T_&3EU4QFTKIe*c$alElvmlhJ92V`;~0N?PeZtEpYAyNF&CMJTN zEgTc=&^?RH6vIwer@n4>b_<~VT^LOS`_GARCQ0umls53LD*cDZRwQ^pKRrEt*xTPJ z@|3sZc=?qDp*S*zsd}l$srIRZo$@tn$UuLk-k7)Am0l^!0rc_rk&wgiCud`R(=f@c=p|qjuk+?Y*+Be05UA z2fscDkcj>QHRe+gwy{a%deP+I=#C5wH=EvE{;n46dYFRZc9RWn`Bmp~)6!TxJM7FO z@^GWBBnzNBy=YqiSmaofgjD^hW}1G836jvabon$|Xe1}eGG8&#<0AE~sT%@Hu3Y(% zQ>JAKos3TO_xtWmI9k&?s-ra5yVg>lQ$g@v{oi-Kuccb;n}oX+GW;cqxSyG* zU$B^@{ZY9)`w~ZR3^Nl<0Xfp-f=Du!k#Sro-ZuS%_wLT;=jG_w(GAbFHbYtNBrc>Z{kRAO7W<#V@N5z)t2{i+ zd%YqvvZ+k|0C!mUvE{vRvEJVC6>Ql}2s6Ye`bs7>8$eM(by_96*6F@)N`+U+Meo9!Cul&m4riae;umXu)hL?(A^+LlpR~>9<4-Z&aoSNI-NhL}OTgNKGk-F-l1TW# z%F3#!q=e@^jfcx~bI$9&PeGeQuz%=%{+FF8jK0aJqhG200yc~D8-{j&D~9&au+rV- zM(=hv1Xp6J%RKA1^{KSzWTl4auTM0hnf>{_ej%79kvOM22)EljJM9Fu@6`Fs0>tqu5QXpiU zqEhY#w+eKvQ%6SS;*x6w+<$-}huK!TWrFK|Bg;&J#{35QVF(LJ+2yE>|5n;?vDE3| zfyQ#&G*sIUs=@56Bjh)j^Ybn7VRgsd;D=g`RVnk>Xev5hW5k)!G$q;!KV{Z!bTBl_ zy#kI#n#I&4B8;7+F#M~z{dK77E8xZre$E1CndY-(vRx^E9m#Nz`^|~JGJJwZ|!W!qkU*#DoE-e*q!%taTn}jKFl0$M;7C1 zS2t146{_xER_{%OdO8iw*~6~O_zV8}FFV_JX-WN!<@ze<+korxHiwL1mgUw>?!&O9 zRWu+2_CS#7l-%jkq}?6rAXD$e5?w ztP&9S$VNsImxo6l?A~rBzr{^5{1FK0u4+Jx2Jj&;syB`bKfjTQmHE{{Kj>aR0Q`IQ z5yE}kMk!RJ5=1)H_s~6(VN6BAWFl?Gvb5g%k!r(6PTpB6I}D5eZC=t!-*53L1127Y zIqYF+*Ek>2eOJd8$E?&Vdes`k%N#;Ce>~L%Yw#mhd(^JX&yH*wmfuNsXn$U*5nO*V zud0tKv06Q;sn}H1)Cz0sxPNAjSA|XrWNo_ASA6h!KK!hGEQFWd8OV_pJG>BGwf(5} z+7^GN96-{p?NPp{>-3^)^9MZP7Up zpzL{_?p1U~Kro1#_)Dln4l#Nsm)nR?Jf9QMC|i4)TFwxtC$uRykVq|QB)`Vs>sPP` z%Me~a@bRuMg{T#6#Pi*D>unKhWIWB!V94NWQ{E&$Wu_+>3sQdX68hjr0HdiLKS(Y^ zZ>qbYRhgBze=c7VHusY&o1aTtJy)r+v_Dy2)?VVRmp$r5xF(7vM1(pTu^T}S6Hh~P zx_k4lhyBy-L*k78q^=Pj@^26q`I*CtZh{&doHV-hfgXdCe_hI0HJcQ3@0Qo1#R;NG z^K#`4S58&=U$|#m7KeLHZZv$#UWe^|4-W|Nzj#TQfc7(n%AevN6O@>kjY+_3&vP-8 zWx0JRyscjWyK&?26ZvvXtS^%pAN<_R5&0Kb@)x zghb0lgw19chvz9SLXZ(=mgK$&&M!X4#w#X!Odbk-h&DuJzx@hGgI-|{%wf4OqmXnATSy6q%tUuPmea-IPrifxR-&DSwhH4 zqN;oC)F2j*K((DlST;czw?D3Q(> znVfZX$)JAsZAur(9{+~rH6^@U`x;ZUA6P~6BER1GnjTWV1>oE*7)hFunX9C~@Yi47 zvq`~z*Q_QuSIreN%NLhaAP5)q26C@=o=+?vGu_B`?dJV8O9^9&WgWLshz0Ni0s;#E zido=A@jMJzHRx^LKkz=!%HRlJB_3j)(+X(KjaZo<(F4M7Ip#t~{Ky zyly@U{cU1xBamg|Zm@Lw0*W#276CfCf!sd)kVEaY)4gAm@1FzRL6dH7{fKZsmZDse zx0gIPVDZj^JW|%wgV1tuw$C9CUE9j(Dr9=t%x;)M23fX^9*BEV)V+c+jFY0LyJrEz z;&fJPD-u~WO#8Tbi>?U8!(?GEGYZ0|1{=GvXg9%}T0MvIY$xtSA&Hemt zGr1MTVRdXs5;bd?N5B`zQ%K+s65k%5kW;mTT06|M5A*F(PFE>?|A}2e)PoUT@iXF~ z*AJ{T0QnS26%N%fSwWi%NOlzO}7u{+aNi5t-p5z8=pyTMe+lnw^c^vaZuz)5iT{omUJ5tq5F85nb7r6xJw)F)9zk)4v zg$Hh!NJgz*?_2O&5BTeXP-+=diNM5u@xPfjxlLKNhZx!V;RUzV_;X)Fxja1@Uv zw6ccVY_;34Ad&vTu!&F+$fBxJn6F1+e}=29{lCAg9*6svQ$RB*O3+ac?R2VZWQ~V$ z7$H^WC{b{*Nk+*K{$4~mIHG+=F+&CUG=U0pB^_1M4;Aq_;Z6IRnKUKWYoU~fN`yD? zMNOInfI`frCg^wbFPbnQZ9z})En6eN|GN2$j2)Y4>%+@Ceu_~+aRZv0Fd2RaAQXiR zx5iyIvg>qf1S#kBV{9)p8)MvLy(VoN-(`H`o^yVd#4*pTV{S5;A&o{_^Dx_aInMq_M2ru;>Pqu>?iv(QJ|eyA z*j(2B!q=aDgw+D+f{H5esz)>5U`Ytm7aUdp^!KE)#QKg~-R8@$ZGK{4lUY8oaVT3njg|H7N8Eu3Q1Ga!z z6mz7WshL@$p{vUhWtdPbNv7wHOq<)&J(6K9ttA)iRkG88Zw%j111X4q$!BzUIsya| z39*A=lFrBcuM7M0_hzjbXO0xrpcDOgNG06UGA{zvD(r zWN?u}>PpAPE;;ia-PaW5N@l@D#{GRgG%1zC-!t00)KJRc2Yd-BKPRq_(3e$wV@IYU z;K0r(mHl`!JU_P@!YK&aAKI`8h8KtUNQOSu$QJVKmg)XM zNC7qCs>TuJ2v-iC5_4RxUwM@a zqVUzo6%$U8E~cOF?}aiVekj(UnJU(N6h_~_dC>%8Jq9`wgwesii%AY|Gc-Fw{;*~0 z$3HcKT*4vCcO)NtKn1nGB>x5IRO}^uFe3l-q#~hN(RP$rTbQ6DGtB@*p zEKp@edJ`8rfYylTV83nlbjwGbo6{7{mw``&U{ZHJ_6(*FPXMR zoy`x{y@_Orvx{nWKYP8S@IEV20l*3Ec(M8;XMpfC7)Yy;1`Gp0XbaLO5cV;^M!P3b z)t{N@hmm)98KEh}lC*UFe|Cl?KRs}b^!=7wJIfhGyyt#kx~X;{p>y)~`-{eNQZ~D_ z!yd2>Vg4!OVk~j`ukWi)^q~lC3S|qzY@2G3+8GW$eVt==)NSyMsHpuh9r57&%asg1 zr>S99PORVNj`_P2LdLwVeP=)yyvO2Fc5-ei{`7a-pN5z@9J|=#7oEU+Ykd=R>eAEP z$pydHW|W)(32~`fD+@V{yQu zrYI*6jF4fmtSBaqu4ChxJA6d`>h+rI4!wa`9r>U79{qYKN{UyYStu>VduxAEwx)N- zm-%x=iAMKeR}-(>t(=-#NL3cm-NnF>k`<%c!Z)=SpHI*@aHXr}hJP#9$;gebZ|ow; zK~IQky{3jC_vlHziR#%Hg_fTw*W0Y2JTbw*A<#6TxAEl845C~)?VtqALqj!H#kx&> zXV0ciB`NZV?SJ3ZU;_j@{Xd};mY0j51{qgauv{s|`OP}g11$gkclWSlwIn4z!85%Q zpM$f@@42zrUi8ErQiKe^DSyNxjAQO-)UcIc)Tr3Q9jVJDp@dlo)e5{sm!A+belIwTkoMIuB?TY-H7wBaq9R56I?P z>kM!O!vow~d&j z>ZcZM3e~RncJxQz;$kX*+_3Ca-p%ZyAUi1BR58kJ)>CA7?R<&LDAs*#>ACI{!f?XL6Ds zG$1N7*s;m_Q?`KSND%x_tV9n0J6oE}XN$a_h{j9hfyh1w5&DIv)*Hy=wf`7boEA#) z5@NMEl14gdYnkf;5k{0_jiU!bud}%;(%A3dH!C)J+yaI(XivCwR^#7Ey=iHxhH;J) za6#9M1p5J)b@QvLY;&WSs9g5W+P8}Xwuc2)wD-Sh*dQwuNCV$bE>N3`pkZX$QAXe| z!o2T`k_48$SdZ{X^32Ei|1#OfOSd&R^WTcX&D%RSeOCpG|W?6swY4y~Ewbh725hNj<$@#o$v^Dq=h zAg3P%+(}9IaW5N2!G7vQ!EfdRBvKY}ky5_1>tAmoM=;fO$%cL}WiD~#P*b@|4Tg`l2U()9dVSsD_5>lA0!QE&AIx*BH>$=j%dffin&HiX$CH;V5i1VNv8KdD?d!xq1yIvZGD$R}DkM&+)!)iM8 zCw$<8mh_eyIdDfPr-Z$!F$!|A)V+HokrepXOc7IArb2}-!a zompdi<8s|E!kmxF>Rt>)!{=RGK6yzmKXRjD$s|CaV=8Yw5SeSQv-lV2C^OZ+xrxx8 zwY8hdjdK$YFH}%0Z(K5u=i)H9*!T_0&XPAjK-3)Dg=dI`)zq+nbtJ3ewKdug%}s14 z5U)&Xro;p;w1ur6Rw1@E+v68AjqM=2H27^Je`-~7_(xL<;LZZZMUZ#+c!m@(^?}SM z#cYZU)v8|vL3Wt2YU%XXHxwIFy`C zP1rEdt=?!*;YF#$#-0B1IK5`xjyLDKwz=$RcE~#ZSuG8 z`{c^%)6iN6e3O7e+8NB>dDJ!y=s-$oy&HKGIWS`fj6@)1{e&lJ@^3F3B2>ux_TiMP z8c$_JN#j#JwOx!i9Z6(Yar}*Y|faP+LXrRQ&nr;(;As`O5rA~wK=Kmy2?^* zJWpK)0y&c{;G%-`?TE*vBstwT;FzS_N}-wItm*%$D-*hOt>k#}aqMAhcuKFX^a;vG zJ+7v(^Z$OjwA>~;E}ak?i_FE%eRz!P=9F5oIwvI-ySV-3Vj|u*7jp7AB+adE0vG7w z=_sCsaS4>b_@)+`;JTNPTTg^D2$J~g1JvLAM11vqN{Tu;Y#)qsT%|0#Wk5)!o0Gw}?JBxbVzH2JXFRr=`gUI0i( zHjqi{TzpqFGe-eV{2}j~1B?AX4wAj}wA_9k02WNYxv2gcrPyn#nQvyAQtMJSnmGbN zRutYEAijXoDhJxLh1o_$xm0mq{YvngR!mdZZD)$E(MBqo88 zV`DO!bQrz8ImXxqER}YT=tum|806zvI@#vineg@~vc^l{YM>@yu>pb&ik&V}jLB=8 zkDaKF=zYjn<0)e(RxcTmk&(}?8H(HIN%f5!#`^Du_Y+T(C^Txy6LkQ7W5_aS(?CH% zL4XMJqn`YXhYJ&UDz-p$(N!}t$xJbmRG_Ap32-vE%rtepyc)uVKiL<2dBMgZ{PYjJ z1z2@8%ecE-I0HD9!+vaJPHLHBApH;tl=l(N1AsW7MmUQ^52Vc)(l>q!^!Px&FmR5k zJ-X$*i<9^H-lHTDkXp!b(5Qc#x!V0nEifK{KTx)3Q05v8|57+aD1HEQ95^^YZSUv` z^^UL3EuQhRF+EnFM5t(E5jC9v%mH~*N?56~zW`^r2u|rCbzuB=rf-EH#;0rN{=L1_ zSeh!u&vT7WHPGGn-$QyEjX+s0n;kiCGKrW`zm3}o{0LK+FgJ(VcnKyQ*vLgUH!r-3 zxk^`I#hThb9UPQsdhV6W!F=lfh-og)NF&QVc(ncF42eOfx(GC?1qTfIi~QznI6mLJ zeSLR+iEe|}4Zr4jWJ$;8dM!N+OWqmXqrrWhZZ|pm@0fW1-JT%_jMafa8@4GJ>mIb~ z`_XQvlW99p@$Oob$8ViyncG_T&XEDY2haMov^}aGlmR%JF<%ihSQVFq2 zjtJNR9kN5!4_rsF%8!C0jHl;& zHDR`0u79qm)7fTc8{H2~8$60z!&Lm*;(-KDFMd!YKeDwmE@iY+Jql`T(emWQwYAsz z-v#+*CcuA0iCVi;@N~Ysw;g(u`8v{B-|p2fhEFVw47#6qCY!DAdl?Rp5f$axHKiz2+4a3_`Jec-|{5{Kw6EHj`YlId{w1E4;R_~k9$J| zhuz!?B$`chQteEIC5ISpRL#cPkjUQySJjeoH`7TDIxHO<0H5GdHQrteaX~dz^5FBV zsRUeRDX>!`OjdDmyMmR$g8vB?{4L(akhhZ+B%4N-vnP*0J9eOEjg}AL8lmDcr{Wn92mbwB;G5?O9kP=?sBol!KG@$ z%Q3C!e$tPEZ?L;!z8^Wnu}+5&!$6ayl!Vfj)-;-gE>Fu-LYGt4oddC)cp?(CPZvqd zL(H8r*yEezO=2UY<~Yx{w)V5}4j2;Y>qPuh1Q7@1C>IuURvs`C8WkUX#fgvYSgDGy zk8<6N5V15g+47>xG6}rSD(RihdU&8W0OM<=wFQ(pL~pCLr(#c3CU9XCKm;_w&xtj; z&HDS-Rf-G+efXS9K*iidZ?b90Pd@$m>Q^%d&g}nb0k|8VtdVXIPgwA2+#9R?j#Ks- zbhmP2_#{$E!Yj`D{KCJWd!^+^;X!+B6VvgEXsZD$J3D>rMc03sNfP@DXd0=i%Erb3 zwtE-odo8S!eO$1+czhE8FXkOQXh1|yfA$}3wkL>+?X(%-&44RqbB`#J#XrBbQ|rjy zo*CVr?&sI zkmOJ+%^}ge(4Wyh!x-jHyu}kwty^qd*}ZkmT*n_@W!;WlAvK{FKfA$TX&h$Xj@^H5 z;m^8r^VUyXDN|n}U%Z&C)80#SIEL*{&gxy$(Wj7z@I1%N(V~TyaK{am(-btaZoGcw z5s1VlQnTaXSTorfh3)aBr-MU|0NOW(;I3d|*QK8BF&ZX)xld0X-e$KaCXQS=Hri6h zPYDN#HNqdFm~Q(>yJAPuc;Dh;qrIx=ioTg6^`y^$801r;?q2o$G>Xs`y7La(H}wnr zGGx9owU98!%H3tO;UxsaEH_lyZoq!oU54lUNFthez=CR`7z{M^&n)r6hY{i%e)w$) z1LfA?@?~7xFZDbrC{g_;=H`H3#EdgJv$vUb>yDF2=e@d@fUma5&;GeC{sa2_ea=(; zVyB65R@R@K9W37#hO`a$eKQsL*Ae4JzCP`O+YKtV0KUD|+OzOwJG$iw!B%z_y`C3q zSkj@>3@r&Eh9;GqTL&(@+1XhZc6Jo_s1^)n$a&8e&H99|vbTPQNSlrVgXQ=tR*21_ zu?4Q)2)0h2ERkqq##Vi-cC<*&q9)-~IkJetRyJQsNni{(XZWN(H zWqNi5vC7G{qI#%iz&cSuj*Qj5BS$AMXcJ=0)tatjs$WK)eBp^jkz@a^A5+KSfpgA8 zg42ySW@WSL28lnG=89i7n%*b|K83cQTe`+yp9MOw9cxdTcm$RzM&ZjS&m?2Z!URd% zhin3Cfue|ZIO_#7ICbY^pS3=R+d*%@}YI@U+2pTfn!=YHdyKxeDqHurnPbcJcd0=3z(c1rvpJhZmXCMG$GSOIcV~V0 z^Hdo|K#pX|-SVYEs|zLWw?jz!V_kyQCZUOUpSlVt>WRly@LaLnDnhLp|c&M&;9Z^!jje<_M`>XQPt2yZ$#>u9DNav}~-Lm~v zIeT)FRFSM#u~wUzY?CFHqFGk;nyziGrR-&#^x;|iSIF_ z`7DaiBGkddyrrzoMvfPIMlK7jtKl}1;9o3gvo20LrD*nPfOR765=um;6s+V%-VXn6 zyPwAECyL^wUeI7Pm{CLGAVRC;%32X2*YX^8D6FbPwEkf3bU*1yhNqk$=0p-GL40|n z;tu}F|46Q$_dlC_>Mfiz``~fvQq{j}iv$B*SXel)h(+edapla@a(;*A?lF0v_bP+# z+M>&MK)3HdJvMd&xeWiNoh*&q=COwMxFbf~fs{0|zsD__^wqu}9z!yWMnOHERJ@PS z$?mcj0?MayK-F}5J*zlE$d>D+F6sG{W=T3cKS#U0x$_uiw89^XZ1g!!&vmCCsX8+N-Se9v*QHD4J5@JS;_jErXqeqsqmfSPK zM%(XUkgZ;@S9!apD@u9=D+^4xZ+d$h+Z$OXdlz}@wTGP|m+#V6TcXM~zh;3lt`e>rrC7?PHeJ@ZU=6qfk{wDb2rPGj2k-*V^0u7>44w z@E=`UGwbSjahCb9%U4%Kj9JET;}SIrqRxbScC+e{Vhp}6w!8N*W}?AmBr6eFxk2G> zGh9Yg4c-O)eUQNiGrmpX)Y<-awQPT~b;v{3tl~u#ru}BDh)r}a)Tk=KWh6^Zmm3#3 zq#xqnb|q0-dKJJ)@ui+7<*&-J=s@ebKp>VaAn!4bK7Y14Q;3xi0 z6Fon#dTMsmB;^Hw!`OBwI&OuGp9HbKAMmEe?$=ehSVHEvQ6r-o*1T$ogL`2B`S6?M z8Y>Q5Sy>rogh={W2#Pujq<3-s<=&2tgCs+4bgEpg8aH9nvK}uHK!s#Fuq+Zgg?o3>Hs=^MOIAapf4vE?~smeQDgD z&!}T}sT=N(&DE&u7S59y9Sr$ez9)xTpdKKDsv4gk%-L8GZ$Gl;_z{tiwBxJAm38*C zzfey08qN^iJ#qXogMz=BYOM2g1|OC!2Upw{r2diU2t_B@kH(E}f?#o-RWnOXEOsL7 z@YOvNVjvQ`xl5=bVKZ}I_ur>3h&r`mZf31HBdmx#fFIc32*aMM>2=el>R(8OU>9&ygiL2Bo+ef zfmf=Qh!8_6vU<>RIOcbs0xpjypelsoqw~{Z|LuLhL@1M!`Q7^w14KjdYgb;NdabFipI%N|7CZW( zxi#V-vA;xoH6*H~5Dl**rT5UMyq99XBFAdmv@H#;&3B)A9sy4|g$1h}%c|dFIN7AQ z`r^M*)>PAjG3hfpzAyGp5T2vt&@Gc$fsyfloo(2Oyu$3AOyM=5%^6f4=2E6LmsLNJP-*-q^Nq$kBv6W@L>p*3Ja7!@e*chpDCJeBk&jW?iNANqXH{>eh-)wz z)nNP~G?^!7Vk9(hEdKl{d$i+LE}l7bL{a6ZvrA>tjXjs@km|I+*EpYm2ayYo5=`uO@);O_Vm0Pazo19$9jZP75Rb~Ch( zvwop#k#x?+;}qZO&wr%2+rM0PiJPp!y@{&3kuOwIC|9`3S-J>2Tu=V$BWSl|2Fa&+d&2f~_ix!b4Q| z#HfbKSsMxSnw~~Dwa-JP%$*4h!PVrqgKQ-E(0ivodWZHP>jlES2^nNM(iJh1rDnMj zOrp0yb!Q6i#b1A}qfb%|8L&0oVHmu$#rfsmft5U>nx`_28(KAC)RBuUA33KPhaM+E ziPfI7C>$X$%o7)B%!&Jbefoou)>zM?Mv1my>oZnlGVep*Y`>q%A1z$>sd}=RLbJ@6f465KMu#VKN)E1> zO}2$MyS1}a*r8?p8QrS=^|pckP7%q_1B_%5teCIX?}yK2A(nEBby|J<_2-RTA>^Wi zWB!x-3eMIT9uyc)uKL=Qrb~imQx$}@sBWjKuJY9r5*(LJoauP^lDZ|R>Z5`3+uE0YUmLUFdCuq zNud3Tz7%on(>SOx28lCgZ#HKAs3sAR5*e_! zfFTY?ono$-DYWTz1b^@1RvS9LvQoe5U?x?}URbXMbfLKuBRF*Y%f1l0KXHPKSRqK! z2G>NmeEzByQ9bfd`;9WYdM`at%s3vpAPR7{E84Km|Et9Q$mckvOdy8m4(0Jya@?$) z7f!MBUc7XfgIC5gy@tchON7M4q}Z=4rKj3|ELY+~6hU>ukwbjJc>~+|m&U_=tgFR3vR?P_=F^yz+S%14Ul@3V=26-lqHp7X&tWI*6@d|uq zp~ChRnvcRYX9fAMXB@jp{?#$Q+gk>e3ELPtucnC@c{?g(;U(_N2xtQqkiu;rJ$s*Q zi?&jQNmJV^iNZ0M|BRvj^Lo^)SWnqjZxhWR}1H6*f9uTy;0KJwvaqs*X4GwjSX;IVAKWWQ@DJyXib$lsGC@qc;%S zzAme;Jy!UQa8btBPU?5>A#+KWwuZUZvLZ+A`=2gs8wGV%Q%cXHjV2q~b3<|{I`;m{7;Bhh^G*As^*va z7Mo%*HtIK>I!#-1S&nYhT)iWMx zBVLf1%BRL~8osu8JyI?9N}{av=mG)R;$yOdKS|0fy!E+JT1^pBzryE{maR(#vx#h! z_iXpw=^EyFfX+Y7pi4wgd6>c2>*=}Mxwze&R`-%GX)vNE)okC+AbYY&xpQTflug&2 zscKmnJ6UeN=-C2IZw@=%MIHCIN-*ul_;67XS%CU;vJlZno-#1|YA+M-(b3+M1v{^@ z5-DwzZC4QIHkac|Q1{br9d*MI$>YEokMLsM@G#wpuKVFaoUKPZk3IqYNdB8wr_EjS zzfLIfflf>SZ)rM4YSVgdp(Dk=w7030l%-*e3dzRdgxT_tjmBtlhbB!~AEn8x0Vi|J{hlO6;fvIhi7~?P zkOk()1_-`e_W^WZctVmP=Wa47@$@)V)g`z>=n2Wl@_&%WmVaUS7n6uPCeI$Rnt%Gf zfE8)8LgDlPAhDyzrHp|FrxG}jKffEQCiQiK3M&=KKSiAMlC(KyfBO40H!GE^o}U#- zhLV8*HO!N~_s>*|sb6T&U-38cM_Ei2^436yzK9$=fg8#+o~xh3AFhttP}4Qm&fS9h zb50-iJ-AYZKNe=hy?bR)zF2(ltZl{d_M>$@Hf7wl5%I>KM@LTBnCr8&ETR_lR@~Zl zGW+bjVa}fYX5hTc7!TKI;zBMh=v*6~GL_+BK&3Sk!lK{t{yr3AmTeDJj$rWoTS*$qXDOcPL&H?<(Zr2`-K+Hq%8hp3w@0mn zz}XI6KuN8uoHuW65|F{|)Nl|X3HFz%ZNr1PX5axghi_OGvkw%Z0$QnxwI`5+hk2$_ zmrr{&C%}<#-~ts7vJLY3w;}%vbmR8+U9NKVQo+2`do(Dw&;%=&#`B@$3a?8kp8VSq zFZ}HM{J>sj*{v&9IM79o{l?I+!Oh#Rh>yrQE2qIo_T zeeuKEUbw*jh1utuAjohYQy+Qy=lQBfe!+(+{E)qcDYpS>a4ueS}tTnD9WZY8CoBs{U zK3?wCbjZ)W_R}|4qg+rnSSqQ{^=&kiEDFXG)}qzO==LqsJ+C~SrFth`sv6$jQ~HiB zd47ekUefl7v=voX$0^#e-Cy^4P4p{Qf6E4VLqomA#>W1wN`s1qw)>aEEuw9!lo2zJ zlBFr;ubbDM!dTjVS5p$+O-N6%EYAqn9uZYZ@xQ>e{SN^nl;OEG2rqkY&*lWmU(TGG zy6A-w?NgV7s2ta)&?b+4gzaxqWC~QZl_e!+J0D>;y5MLVvXR+m(d11qb)2?&WuqT8 zcryQPJ0%M5s|Y0+xrZD>DW7$uxF%V%QK)HZcKd z(_`RF{AIpWs$la{;^W<^y`4zR``R~7r*i(86fn3pjc=3aB4tnuEoK?^E%08ipcjwv z8<{Ptre|jZ`nP|Tm&3=I*eW}R2jp^Sc!=E;dW!NtC9T`Is}UQ%k9)j(R9#rw${W2G zM&ErL%7=B)W$SHle^4rY+;2;pf{|lu#kA4(cEfKYpBKf#NVNF5i7@KMx5g(9)KjLl zse5~S;eG-y`|#&KHRv5a!0}@l+u+2+k5z%Vh31fwP||jKS>1>79jyNB<3wY^0M(Vk zt)Dy6XI82)nK+RLz51$Q`*@Fo)%dbb7^=7GL=b~`^P%ci1Y=P+*4!oxs$}O1MZ)3R6*7PH#CRLL&b8YF0O9?Bb~3Ix`w01Edk01Q<-;u-YAk)@zs&_s8kD5~**w-l>`tanr|Tm-2!E zncdt{^o^&c#&88ZK7wO0TJn)#?vleZQ+jAH!KO7?Y2jVUN-(n7CFD6RWojGDyauofTRZ2;v& z;r%H|WWVfINH2)vawTB0Y{-Qdn&0++ZrL{K#5Po-FarzN!A#wS09r&uJ5S;FrRc!& zxEpREtnuxj(cjbi=_Y5R{0A0$?lw@>0KaL&mBc-yMlemnz(X(H!YWbn4nP}05Y!J5 z%*D`z7U7;;=-df%kt&Z3MlunfKf%COmN-cK!U9V7Smw7zsWqT|R{hC*?!0WN%Q9TU zodQ9G1~|yQY<-kasVm>H-Kmw*!ej^(?IvccO$bv)>aCa&yK8xo?N(%;OHEl)p0JU6 z7bD*g0~`M!-0XXBi1hZ4zYC$io}!#H7D$Zu#dV8)nm51DCv(+Del^E$uUXI}9%gEG zJQ0i~0gh!z3Hd8rj^=q!x0jKTIb1dM?dpZFx61qt(^-QR1Okcq$J!fTcA1CTE`>-= zoZ4@gt~w62<+#C{xn}-C_tb{OH1Fo zKZ|Cq*?hb=4oU(JBlhFBNcP={@LL`DMhON_$t8R$q19)ZT3kij7jZ2!yTo)t3KT<~ z=pIX-eP2oXFhxHfFJOm*JENQ&>uBzOVP4N3F7_%XBpd-u3y5E~ z$qx1=;cr@PglQI7sQ^Qqtk~7?<;7g}$0Wk%H;^w9Z^XzrP;%5OZcvPd#toYcMC3G! zfrudUa9ax0xr@l*)|Md&1>8Q zyiosN3U~7!^qP$|7AtSNSLbuTuLiL1e*8EU8B1$gLex6YR~YznWAB%~&6@`p8z&qY z0K;ZxXE*O2!Q9|C@!TB+?k(>U-dN%CyqL%VjOQPp2#6dk(LDb7Lqkc1A*q~1JIQ>J zf>98?;Oh>Ye=YY{U0&zNmT10Jgu-R%y5Fq(;m?$T?WJkdrq*vp=he<4BInv%MVa{F zCoE;NnPYA8XG$#EwVv@-A=)YcfqUbUFx`@7FerQyY+v{r!!c%ZOg@5ZDhzW6i}VI6 zH0&YE(rZWwEd81Sg#*A!bTqdD{25YBW^TgT_=`HiVPRlcg7lt6DCo2H{$r2jZy{z@IZCA>PkTaIJN{&C>(iL^b0pr3Dg*3fp@cj>m*ExFCyY)0HnTzfge4G| z7e##-AIA%w3((td1m6Iz{-OK8O7-~9(^V%wV^aNMyX!i-;igzR`Fz^_(&g~K*1|0q z@akJnJC|uL`)Bz3e=#`=+#Nr4rpkPM+8+W!i0_dP)^6K#&G$kZz=isKd$3C=bYKI_gZVOT~(9-9Oll9H+r-$QZ^I$d^%=u&VCuE z0NfVn{eYns$M6(Fby8Dnk1?km4jRa#P?K_4E9;f>l`vvseOoCfFYlChB?~(&78*)t&$~sP1HS8Tc{k^qTfUR(l{bj7Sk`5@P zMSp;Hd@KMk>s6FSUlWiYYb>T4c+H;hK9|1-FN8#+E+^2rZN)Xj+9C#2*~5SLUF8ic z)eB2Xwh`k7Xt0oy3Kre*=?t8FzqckXRqsjRH9p-QmY`GQKPxWt6xi4Y#V8odr z_HpJ8_{s9!?`1RN=&PwWb_m!dllPW}BHTrWR@O&Jqzlt~NI5sVYR^4&i5PKt_S56! z&1D-~+x`L|R~IvM8TnK5hgs6J=a}@9Bnl0^IWnR4O2Gu;U$ThflP+WyLW{lu04_uw zjDXnTMhaHHrZJ_Z8L5LNP1iKoSd?SzY=}qS%DR4NwKw<~`gQ}$9QL){@tu~sN$x6s z-*0s0;+~mtQA&_xcQ}SZStdZp8}HZM?1V|Z2Q{Qg0=m(q2NBhzS4h~Z@D{N@Ei!hS z-rm_~o0e|Qa112LSTk$u-n}aY6_vn6UMFwS%$SG%wYPzvsdvemDT`4T%Dc1j?+CmO z-%hS1GnF!0n3mpiy1jN19BU0EzJ1vNML~g=9CK@eHScAQa3lW^aV&g9p>wIvrRv*t@yLEP(b!2O=7vOeO3>aL z(*M_l1dmNa`AfoRq>`z6A1z1MFX#I=(ic|Ia&)e#HqZ1*37#rLSUa(p6d>yY268@P zqKMYWBAf*aQWCN5Wy9h{a*=?Vz*sxI%GhU{BnV@k|AS9H(xzh~{1KRk_(MSF#f0a_ zrK=hI=frCZxCI`Wmo7<`-fZ*-A#2FU9BNWKC1KO{dNrL~G1Pd}U*)YPqFdMvp0Of( zp1hyxY}cY@E%Jb&+YBV9`^QhsKm=ko&tm$0mF7vWI7y zN>QdXu;z$JoFN^RT z4>A-L#s-_wqfe2uR1etBZQvnQWpl)OX_5eOqq zK2eJX1@N^Hl(hrm?{2pMpepA;I~c~t43Fzp__-RN&O%{*NQ%mLX$Jt_WaW4F7ZF{f zk1m0mskkaoXC8h7-hE$@sKP`nVeKOLx zcDvg5Zr{^;c|Vew=sJ|jFuI~&MlNf!&K4!B z$;dCtyd13Z(N~59Tp?kW; zY)I51fTuu6F@1_)wULbYl&NX315_h``F{7=ga3qVM20p-)P)RGXr-O|+3K$d!`3z8 zn`Y=^GsD^`*kZn>ss5Z&r9xU`rgw3T!osMjlb>%0Fn)@^KJp-c@#!fEYoSI6GUUAt4ctju`7ifglm@Yw zzc0F6y|bB4VDN^S5_;zeJC}>Chw$#1!PHbDse^N^#Bir>569hHSaIThtqNr*bP) zt|0gC-w#5l3vJ#!oq8^O;t)wbb725wygEps`u1uci~w|BOPI(qpmhoK$GW;rW(V+T zDQ5aapDF2vWG0KKi8OK&MU{deV9?6JVDB-h_x{v>RZq2dO7O2RUE}-fUS??DA5(*{ z6PS?z)sqRauK*w;KZ1xNl=x@3o@zEbt#nyA66s@! z@21ERy-#+sfF0QAfVZ4Ah4YCE#+`#0zT7?49ypH{|PH~j1IMWw+G?k2754dTchrX#=}`55(uw@ z`yQrW?zXqLP-OIKibPe36!{MK9L2Y+u7e*o>Xsu*xCxN+Wz)purLfE#3Zo&uLnqMQ+{Ju|h*yH^a~9MU*C08G6$PB|UaQ*3R|d96krRlG zPLhj6f94X3soqf|PXjzA1NRRekhtUnK9SWoIYo>Rd_q@jfKskOWp~fkNh^WbfiM4$ zxDPTSM!2nl?aVUY`dHglE%JEK)nb8WnN&DlyI`xyf{Le`*#xh)WnyReFE??h5QT$m z0tP$2hXvZtlDKrBT4b+i?;!@{h%DA|j{5J8TeN-jNoTu5oNI66nio$&jUQtWaa9jk zTfI4IeYBsZU@GJP;~@hdk@fgh>s5otb%b8>grM~F;;wyv5us3-c4&Bb^618Dsm}Tv z^Nrx|*b$YiddF-Hjz2u{QM&BT8%ahsg)YC*9M4K3uzxo6;Fp0WTF&912M-{zR3gjj zK1n`-6NQ&%A&lXqObGcAyF8!dtg~avyj1wyr}yzcNgUCqD<9k+R1759aIK-FBe7X( zQyPj0V9_CgrmU)u5I7ss-lQrgE!Yw4vFU$=0cA*DEN)!j)Lx>xTi()mgoxm`HHcsS zrLe~qF;J!4rDV6GEcn2J>noZ7ohB>Fd5YnbJ%Adqe4)W1Z0Ac6Jw@3D!MUmD=yquQ z>1+WnDb$P}3hLW@{zeVT$nxq8-`{9foqI3-I_ssNPQC1s62w~WJHtAqz^7L`Rs`## zWQ9y3UFiF9ZpJ6Vm(Pd!;{!nZcx()6MWUU3GHfNX(foty43I+vbZA)TZY#6W`P{^{ zUS3R5Fx_G*<>sv7Z`O}8M7iK7VP65-$h356uqv|Dko(N6Qk`BVi$6n!+M_*FIkLC@y;n8DOFQl_8} zINu+URtWiV^i}v5eH4I;PsyJ)+D7=()_cG^li>xR0?29XxZ#?uhUkzuxK3kiJnHbjbR zR?0!SJ?Ptn*p-$DQ^kNzPrncv%EwG+qmv|;DFT-ie3byW-X zyL+>=Xo+5PuZsajkgB;m08IC!+iU9>0e%kQx+Yq8=E0~>%S>;KgRXI-V1DE7tT86V z2|hwijXTI$Ozbxe&ITY0WIL%{uW=7F>nbr_We)Fb8?%9GsH^L1Q**Pqtu583wN}k( z%usu2L+mwbFqH@ENs`0*h@5(GSy?T_0_vC~l4{)b0VD?`AgnCnU-lb!#qv6wi+3?6 zK-y|;#&>l-86UOiBYz64us{?8u098m(gfU}y672lfPsJ^yFEeZ%P2QHWk9stN4RKG zit}&bpTGg=Bh*XPiKL=L`mig}j~j@!dPCi6#H}C!^W&q%tXHSWdLxM4$Py;d#_5%G zczce%jnm3**7%AK*9 z`q^y4zQ+{SX07c`t6H62%+r%+Wn~4x=nCrU4fFiBZGyz8>xoBzL&3Lk;irY@4m(8#{V<$?aa2w8Fns06hgoK1!ug?eQ zIMFURjfScRg;}hPYPZEFD?n+Vi5I9fIWg$#3H9s~A-C+7GkpNW#2rQ~m4^LM${t&; z^-ics#vqj2_l;x582QW}cl||gtTZ{)rstcT3>RQ<)ES)Mvnlp~0{2kXdr~s2ueL}c zm6QavzsMaOI@bxKfKuVe!2DZ43S~|>3Q@2^pPts&NK#U&Fhf|T@jud$pYT{n zga$YLz{kjdTO#amXRz&3DoD88=tmh#65XjSDerUct=A16&rbJ5 zBUnn$>#@V!&|@{{cF4wN9~7$YUA?Diqb5K^j|%;>o}HtjYPLJ9iFC**MK?hALIWS@ zr{{2$ECbNujYQOBzEZ*Yd-Oe44ejhnG()<|3=J^HDfnz)TPPE73krgW19SoiRm+U; z7O*0KffcZ{$LS-%WThS~#PAfykWMzg=%x7Htq}2BLXS<_q=Pi=XFYlpZpRp6K#FYX zCS2N2>}Kx~HuJ^fwa+6!9B~lVH;DjMW|pq)omsA4Y~mY-Tnb^^{Qm6cEN(4&Rz%?sX!EFc-=EjZoUF7SHpy%`!n4sb5YJ2fK8S&{I@v68+fv6ICubPW zeTqVhHR2|%w1TK3JEggcqI z9rSSwm|~8jiLZvM%6_{uJ-*U*v(s`uD>Hnjfzv?5w7Y8pY$iZK@=(*uC-U|$(- z<0@mz`oAk~Gp61&jiT9Y}H$ z9Ebba3^=cKG!SHSsO87A*eNILIl$JgKBA?jp~)#I2%eh*Egu_%0paX*=t&#$)#3uL zTrm%>%}L246^0SEx6mPj*=W#+zdL;THpGAOqlknIp(gHJKN+{7k{Ye(&;3G$(}aq# zUu1k2GQ>g(1%o%+z-hPD%d4cA9Egz{k&6Kfn0=9TUW109j3| zci+PpeH94fJ%7+2DOhQvS%F2>>ycDDho?>`l64pJliSCY;I))pV(P(?6Qs#lq2$4D z&kc2`xNiM~1Rqyy+oWXjI5My5FqI0zf|vSCIY1c<4C=#{PVxaN1Z>veCo?!OHLm*T z*h*jDVG|^v$R7;TW!)F@9U7P%bFkjng64V9s~E-qXm)%%d6u=8;w6*b?&02-q>j({ zdTroS>2gl=50g%{La){l>`VO-)VB#B4&F%p76l zl}K zgZ$U5x`aT&C0W$CZZK_3Wtok`I||?0IV)2^AIO@{|M-f$QCVt{;|(?JTSrh zO4-|wY6{#QQu^U--F~p5q#6BVzL&s@wxN-&VhwDs;DStF z2jys8y~*mwUlt%MY^)ez-)$}5*3nqgi}tV$vE-;{T`R#?N|tz`K243rri=?cJhYgx z_yP{oHTdy-nx8)-MPB9*U8ySIX@%=(q?pt9TvWZe=gR9C`L{|O98Ek@2kX*|^IqfH zTE?GJ@YFVwd5k`s$1H};K z^mb$D7u<(=Vc)*V3;KS-U#>%sRmH3W!ENsJFGCzGo`Um~I=;vC&-Z_&IrlsYYUwv+h?*K(7;B)+BKVM!yPX>qnUsDX3Y1tBUK5G;v z;6!C*ksv@dlncU6ltcue4`=qjq${$0dFv4PHy4iRmFu+s5}s+6jsn_gY`#>m65v0R{{=9X~*o3aFLf#9Y!M_~=TB0yR_8`InfPUb= z04n=$1i+zirM-Y_tO~`g;|M@ILPO2|tDMGv%yh+JoF1i}UT;NEVI@~kJdR|33OsW5 zDMG3xuBhYai9!rC;g(}$+foj{-(+EQM!J7;q)!GqiNYv2t>>x?e0I~M^rh)(VPWBS zKpd~F9XXn~=J;>=`Q>yenXY^Tfwf@w?06C#uGj5Y2|r2e!9Qa4ZEGpYaKo8#O4Wl_ z&C3y4d9`CjZEUf-U?dLVKdQ_?V29&b-Iv3)m~pSnl5zLZ)2AohRhNAFiH@%9fs06> zD#Z*78|ew^%X_s6&6Te4w~F7o*lO$%#%FYmYN}^QcL=u)CXPHet4yF0&7mCjTW_OZ z$`*NGq)WqLJpn^}4yFsz_=G#Rz27;)=PDe-_+ES zP;M8bm)(zCxytTYcUAV{KEHQ(^6gr-yUM_Ae-lz$?d`plWjpl>&U!0}2|sJe^mkbE zi!(*}Z<}NBi7z*WsR$(dHxJ8h6*EqGbbPg_b_>#7xz}86*lXo;=^B)J7(xG=gk`rf zUiQ1x`nn?A} zZ0#>bPykil{48P&fMpgd{af0kEI?tVy$jo7v4)1M9>bRs-C?Xk!Lq*z&G<9PX#$`^ zK4x=~c?P8>biVJEp@+#7P=fIW`;$B-fD5RFMFR3_KHNl^cVLEI(Nysy925}}4wue% zBTD3C5&a3yEl3kS_FB+mZ8bnxWxT^~L`*7tMXgmXO?NEOu~rqaOf(Q^?Be9tu`3v# zx&Nb@0md=#@?V9A$e8!^(3>~=^_gDMFyIKL3*^TUs#--{T{&D=9AMTsv%~*xUM%uu zNG-qqj>flnaCAXo8Q<8{951+;=cqWS2UkA1?xlJEnQN0%r9r@6$n&6PgYlDE<1@h?(}j<12-!4T=})g@ zYOK|@5@9Oj*M#;l?5;8_n(^P_$nks?`QJXKTp+xf9c@j>i|E(+l6LfCh5~ksS+tI^ z3Rek=I_;tzNJoKO38?Isy+7n2)LI}{)A9sZPRC1T{j!r@!zE>ZLoJ3ZmRj6+G<0;u z$_nlJ+8hIjIqOa{3ltl+LeZaebP4kv_3X%~+7?VY4Eb8sXZ&g%cxpeQAPuU^g%h!j zJd+}i1U4quvL)L3{r5oQnj9cn3w4B!G{1kugg5j^sQ2OubQ8zdXLhpDx(O?vmV-G_5 z(0)`0Eer!?6%uXwSip&ps7xUYr(S^Hk<5YTPd>D60V!t-0CYwL#9_pX35?x~rjcN- z$DCwpNN*moF|EE{e`PIG_X4fAcB)-4L^aK`!R1taxLIaI+D)4Y33AZuXP*r{`CftN z7u30oTB@Vhy9k)DAM`eAjziyB*H&jfAi4~sj}^^3a>lrCC15X{cQH0ziqPT7zFs;I zqqHmz7h%6dY{pKWq#R*ukKGi+D{@;Kl;CYIvTo~gxr-Tjj3Tzxnc))g#W7~f^|w$= zFXHG9zl(nHj^=&)=l=pDe6oH8%8?IgxoSQ|V z5WiG}uTvoD2Hy>4n7Di3cJTDvAc@APjw&FN z@iB+q1>vNO#EaiCibL4^OU!TDF`%#`&rY%@!pYuQp8{({1}ZJr=VuRO#rE#WtIOZ? zgp5AhITn+7BRuEX|7p3%fe!o9XoMLddPi_t-|9ivuq>K|gl4h)$KPtg=k+;!b8~at zq&=C_gd6AHTX)yxlxj1)Qah|nqnI3UWT=#QKvY)ncsD#obdkM-~oMUP{(OTtsawv<)4I(j0~sN z$>D=LtX;w?g38vSn6eiog}F4d6E;!xv`A-a;c zI8Og}H@?Y=@1@GBss`1IcFilt3zhz>tE*Z>bf1A-8nh4R9t(?azq7gxHjnO6>Lf}b zCuvJ+fDp)KdJ&xlcxx%~pRb>*^y38lphsAuva-)4uWe^#*VCY{WVmB};&|9S^kKu6 za1wS(Tt)=pFX5zE(%!`gg+@t-jffb#(aD-Fa!6r{Z&lvr=pxLkVMCqU;OQs91FH+> zVrT$>lMLq)-9Wn;`R?>hFJ>M82H*!FkITACbLFB{e7a^A_AUOZ{#f;%+uKUL+e_!0 z>DkEE@3Jd_*K~c@AWv8rAyMRLXhvclCmz&#VXa|9OOBQA;dL*y-!;B3C2E?eHkT$Q z&e=#x*Dlxu9;7aqkeC$hK$?W6vXD^+6SEFNG%0oPa9ZpB1g#vxehO7}qMLekpwT~$`0)b* zl*BkJMsOajpYjw#zn7lg22IAb==|;bKp%BV9;vYMBTKz!e47PXXU3VkeZ-)aorlM@ zjml+`Gmq-5EAdD0=x&6q^~s%(9zBe11H@;Z}B|M3Vh zLtx=2P0s5*2Um9Rclg4CFhQ>${&E4cHTh5c?GrvJn_qHXB}697Y89us%T{4TNYPwH zgQoNY8d2mt|qU{A1zdS+zWi_=N|V7+pppAJ!~>>RytpO+oN+i0av#p81a{F*01EB|0Dz(Z8$ zZs265=pmwGS6d-e?LiTPe!hwD+=+no{|T%_fq!zZBwD&Op|qPDr=t0qw>IKO_O`mP zoK&qTC1{1YPo}grUTQpvJlOopOVVij!EjwN9oCudZWN+iw1_r{WQ5c`+N_9%eyQy( zucV;mdWAbt%Cu&b4xgh&Gv=00rK>?)dpw;iPlu+ z2L>3B8O4E^-?eqAAWJA3#mO<4ARSTVToJWT%!jL>VC9BiOkPxO zY8oH(W`%_@fORRx|HpUxH>M6jAZ=)c?v3z}iegoFNGGyvB^%8Yz`S6dp`@`f1(>nj z)7y)Ng*9jDuLp~c&7id&NQK2>xGz~oKoQ_oBko+92?$XA4PoEg=T2EE_7#q3W1c0V zzYG&^pr=K!{(g9?{CqY@SiLDm&ZUvnXolEemsUOF2K_w>q0VnHAdw4wcCzUK)9HBz}8aR9gtHA7kNGIJgbs@43vRn~{awjp$4=NAdwr}U#@?>HirCY0)(}l(ADn^U7A?iFo(Sbe|yjhw$Lv6Aey?gT2j zeLKTFpM6{A;mYMQQ{fk@K;)AEI(ikOc)%J9WORl8j^?peb-jEb?X@VnZDfJPKCWt+ zJ63Je7TsW`iM6Ec71PG)ZJ~33l zz8NgaCmG;fQ6QhS`}}aVe{)JPCDA<&Yc+Zyzh}nK{ME5%8l?^)WhSO0qubxlnn0{!J*nV`u2J&Ys;8B&g!*{Dz?HE zki@E+oxN@sovxI}%GRu+u@&TTqm`9jp8I=pB-Tvx?O)iY1sf$o4!V7{|J?k=)fE{p zZ+Z-wIBDEqgWU!c1qFo}8y-E@c>IZvZb3n(fw3IbK`Lc29dSTysH0;9SI{ zbYP`$%Tigm($h=k>`@OZ?O$3m^+9W+Q$!3xIPT~Zn8T_e6KANJfA-4c{U2g(W>JK%yPl`1mx<&us?mW-A_7k1QMc*iz%ud-p8qS)NoG&X>Fm? zZiEHYmayZbxW&73C#)82@{sCbxc^oRF-D>XpKfipI;s8iB=6cC>g!A6?oaz;&IfoR z?@OZcEZdDr2R6#^d1)MkqwALMirr!NodbFNALkC->x(`Poo3%~eEs?r2e33i!JRy6 zA|)jS$j0oPoGrzQF*gloNVE#J{4EU`PfKUE?XV->peaVK{_~h% z?Sizow>MqDcePZxKjX^{V(cU8tYpH0aRsiaw+k_)^9{BJ`;#kn;_o>+=Dae(!sBW*eeT`!d5Tl@6#KsG5n41 z!$gjqr=%&99#JXL9M=t&KCy`>iUsS#oIX`9=iLCF0Z8?^ydT-Xz$tJioktJm;$mZx zh^*Y%gNvY}m<|hV{+z42{6gpZ*-j4vQI_H2@Y{tS^|X@HL@0ub-IrnhFvFYt0!f?H zGIUp0b}sqen0g1?lmgxs#Gg7~{ocV_e;O{2rlRG}j88k;3nW}ElD)mS*tju$8`~?s z^Vrx=BAUb?4NbxBleR709*80P#8+nszx9upJoE^{DK+5 zQ)X1`F9cEM&AT##UOf@NB)R6z9Pp$C7zUC)_%E6>E`G_W+n7s5HmUp^P8a}p|4%X` zgixG0f7SvX5zz=d3HV+g{Ij3n-?zU6$rcllZ&?t=iE;amqnZu=jh1pVxCy@Z=%(RG z7~D+DXSsUt<}@i#C0Gb%A&F!Qj)L&sfK6=8quOeXdw)wB$i9A*38TD0j?W%S_UV`YDoC8NF<`FEke zza7!m89+udy2t2{OPc+_i;z}U)j#lua7=obb{h4Fk>WFbg>E7@EDQ{@(EzGg6oI6k zo*qIBc%Tgaz4E^Z>OcDpx!YK@ZR^fYLeoXx~)ibja4iT740)eUMF9J2X}JlSi11|`kmGA8>;I1 z6@oP*)-xr`N4ko(nio{k7zvT==#V~D-CQug3Je$oZ&e8ptY0HwV4QiWwX*q>pwFt4gWhAE2fp^-3{HrAAyAV7V)@fS;0!GxY=f_ zdb8Vd{Z&Hz5D%`Tn`+Y5YOJ51#KA88zy&`&l^h!{^KV5yuG;cT%-LtXMPyqER?UO? ze+3*BR|(!aT(3J4n=4vg0-!Lng%-I92rGKmiENu_+|KL^<>o$Te|sS z$^rekp|vDZFyrBqER%#dXIM>kHZhnhkS3bCHSXxBLI`PqMngjQroUEd(_s{th4NvW z&iNg$`R7tc)FIs88wUkCdr&qUB+{h$l*Re+E&2Xt)vSPmM?>wK3*KU^YzJC z6Xv;z3BhmQP|3ujj0S#@_~9G{E2}D>*B6{obylV6%A7WgtE{7s`>J;-S#pqF+?=Wh z58xILF15g|W{UsoZd8V-GA~|mE6+qaujW%jB|S6lNr^3;-`cJ zTjr3{el(owA@(SZOA=QlzV+RA@lkQf49fFg7HgCl{tEI>uH~7eZ7E4(HEPQm_%_t6 zwu}KYs-~jjx+zHlZ?($sZNH{69+P^+Dz3se$IYOFP>@B(#P zQy@JCW1cL#C`2AR+-RWRzh`yWmLMf1g=U_MUVL-@l&0$&BFfRxpq}G2siNwmJ~Vw) zw@G%A!lt01OrYR^J9M`fbK7A;E8{SwvnV~8X{FlQ5YsB^sli8ACO$_x;Rx1_#dM8T zNz%(ex4G3wA?Cw%o>ctGnr2OSRu+-v>piz_31&L08oVMj(*?)Hc7hGnRcpPu)$wCc zX~F&P{7j;n$kDRpe^YpDl$!Fxf)2ynT?|v3TU#;1!uM-9Fyl1qBPpz)Sv?0F>cpPK zr{Nk(gf&ZiZFFHGHqmSW+@ohtiwgAzg{6I$^I*PIKIVz)w74*_v@7zY+h_slTg9=< zzSDMh*vAm~3$)xBXTBFE^-ce;q`U7+ukJzu1a-&0q*idcd*=ngWLK+mDXfJ6lDDlb z6I7;S>0H91qA-A6{q+lVsDPrv>=+K}U8@@Mi8;96j-)KU9UvMdxF1a!zLD*%%ujgT zQKGE!hCpcapEmzMD#pxwDvS_lZ^NwYxoWM&>Lc60V_bSZ}OT%#QCcMK`fwS< z>)d~4E_e_Q(n?v2>{JxtcR@=!WM`S&!BTl&i)T0Y_WCRIyK$Hep#9&Y^sTKmQ)sS| z>aKLe#wBbQ<9};p4qJEFT0mL5S|)R4(P@d+EdMBlt=(%-S#`PfA=BHNj!LCAW^ zM)MC%30%k1^7>MA&iQNYVLL?o627*d93ZS=hAeOuDlc6EwC>LD?m%;X>rh-dzt}(F zdAAM3B&v-{{Qv<1F&i6X@hD7(yYjOGR>#a&O_gAEatq|U3Y0k5|IT|3bE<}dmTX0I zh_&RTO_pvR>$RlSF{#D~AJli?TCh`aiDup}Ubi;?DoRe;A^eLzIC-H&n;smzwj zeL`k6I^GTSkgwYRNtVxC|FblruYk;$^j`!cH7z3(bqHW@$HvB%J$-<4ax|P->EA%h z`%$2M*wSS7I7H9DNHLSH%w#@+Y=Cy!NnO>O>*~VOR*x^KzuJ-UYzSK3kX_SV-x6uO z?G@f_!?tYK3Z`l!hJ0jzSU>1RmG9}3G)Z?&=J6T@+gYzsH-S2P1bd?gk)|80%EHn;qA;k-g=_!tL+3j?3UmUl;W%O5>!;@2rpndV+4qsaq55z7T zf`*1ZA0nE+x)JzL!P(eEH^C2(u6?mA(}U`0JAk>a>L6#S&R$qZ%2q=-5>UP@6;2>? zyjn_IN_@CAT>bUS2EJI`S63N%M;9-*QGWdE5n_srn7TSncM#H6lHnGYt23Jr7Dn7> zBwpeqyVqxTP#=eMuD5KLO4;^&5OG=OCIq$Rkgn8^XiwWWkY))tQxja$bK?8=-tl0j^rQfm(M@2YnH!Nci?ow8XQJZ-FbStp&F3$Bu%;A+c@Ta@G{yH&S^>8L9 z%j(jY;vCZ#lE4(#F~i+>x6LWm$(0P@Rr~`Hi%WHW%TH-rs*WXcvXk#|2lzEQW_UQh zZ3haOqK5_~C6?&V7r&q23U$LW%OWv^b?mM(Vki37cdDcs*`3^KFyA#P=E!(ib8ZSCOP3Qf)L!m25*u+DdE29?Pj9fDom-47~XdFe26 zFYfLNDl22I_QsX8K*8wF1^W4cIIl#NPM*X1n=P_s`}T!I#_Gu{OZ9Bnn8A&da@z`X z_>EoYpZbv7IMU6jrsiB_(0dj}8V;f{!(1!uclqNz6rx zo|&0BAUGJ~6fsDfV7C9(;x! zpWW-yFYLosb>!N+%z~2I7Sevo z-@gVz(s{FH8+EIs>Vn*(cRVO60it&K=xBS{O^JCpG;Bz=5*N|#O+MSL{A|C&BA3BE zyS4Xr?3d`AcW6>SVxN3nec{jJ)H#gmn~OKA&+C1SK9Whpy5 zCQy7M67i>l+HKomDeC}?y9O{T%opd7A8Nn-nej53plnmk#8?Gv_(uPn7pL%9$^p>Dkj-&#vKsLwF7}HJHH73- zIM;7$a%EDnn`(uV4-6oiyLmtU&9v^Do2*v7!Sfd}$M8MV1oHvfa*DShocid+HD|GqhuflS;`;sl{rcHiG`PrLUtcBiUb@Y%$sZ0q@(F1ntsI}?IA%PO5@7 zv5asu^y~I@VE5Qp@7qf>PkzAGwEQmQErrxyL@x&m95C6pMJ=lQ!2>D$)A!zdA~q%q z8eOasN?F*)t}i2LwFEn|DOSFgZJ#4X|Kx1CaW!qg_rS9+{`hJ)0?Q&`wf+i1JPTyZ zLCIRoXp7xTp4m$$4Y~Ly6WgDz!$@y6W?cDDxTe1JcZco_;^c}%lrIj56gi^2PxCuq z%%$5)y2cJ(n`21BIPJ9EADX|OgCP~jy@@NIH96U8ma1pJ3;2rK-xwbyHijwFQjn7e zgoMET&dm)C4JDzbhO1PM0R2`~k5JW6y@-u&Kf}U40IhRjdAaSpw&iGNc-@`f!3jCP zOK`Ys4zqs?r{nlEVxp88lP0fA%SIdeUqnivoda|L_$J>#cml#R?hIriA|iksg@lIw z5B&xa1s$D*SQK{wT2*G6mn(ActE&6bAwuI!Fa=rH!uLE1RZ7vk=I6&zxsNXcfAg+z zXOsKO%fnGcQt%0Qiub~=;B_#JF_*C7Tx=Qa=}>Z~52)8_!)o%o-f2uJI=GZj>8rs` zpAFX3{*u@hiNY3H6#V0>mH6=-Sw(dF`RL447BLAsfdtJ!y4=@T2XDCWqHRt-P zPn_Y?NTxXMvvB2EXAXuUiXVmhaNJCf(qwQGhCWZ*UJSV_bH7X3W247Ko8y&vY}~Yf zFff|h)i4>WxJ#T(`D{did@_f(jh=tV}CP8pC!+Mp$kuLJK8OxmSK*K8htWQSOly ziJ1gaP~v$e`@1s@Q7N@!yI?-)Ix!lad@SHUad9 z00{{xA|k>B3cbu^)bZlDO)#AY8W#4$?-3X*pRacP7JUL`F8F*4!lHAz{v}1i6mPu_(BxOAoz` z_?e@N25Dq6-k{tuiSZMJZpW;4k?;N~LO()&jb4N(*uOdW(;6qZ8+G%CL$`BM>G~GR zgkMYWUw*4qdamKsJJvzBc7haw>q>-$^YPgcqN9vqE*@9kvDYDOnFi+wwI~5pCiYa$ zR{;v)Qu}55r}ET2Bj+T{UX`AqKlB8&;)ZM(ccU}_8jtgPrfy+xTiGjeg0WS2DVKex z*2#OYwZnU-p84#aeHPyCE)E3pQdfIkoA==NEJW>9svWcb!s#W&@hc^a2`+OKxC3NM zu_8iQRIuG?)QOvL>Gj362XoEtX;xpNl}X7iyJCk2$)AdGyUD!XQ_#|{)@2@Z%pLwUqr0YP~nGHS{8p*h3hp$l67H_fk5Hi@(D!4ob5|A+d?YAT2e2> z$lfyW9h6&9UAe*!wCRXF6T;B{tIWug{B}LwOYc^h4nwqE;Z)_?vsnKgd~p;mEiTt| zuB zr*`?ZF;=w3sL?~gnt$f6f2$@MzHqGIQdKR+1S`7f_>{%{fBzbuyp5PRhJRVItwxaU z|FZPP6~-v!)+pB2lvz^sZxsF-MIILnCLTL@mtjQ=brMtX_ieK7vyju}et zVNF)N+p}nraH1==+4{@f>5EbTY%U~_PD4W!E@TZp);lb^sz!UwC}TbA(>V5XgqFPw zOK7AB+MMPUbAfsv&aH^IMipDpKkw4TyJ0Wc@HIWuoMff<@C@Wc^8 zz%@nIKcY5Yy)8oFP$VBL8ItKRoUZSB@}Vr$@#wH#%9I$?$6YyJgPr9!WUj$HC#h?( z+nK{g;f+0IUaqG-w=8w~K7+~{REwyuWvxpmn`4u+)d&pz(J;L7Q?HxI8MkHYZaMq) z3ORBxS$w@0i}#)6FpFBO@@+)!;hWP1_iRrp=)$!3?hbG0ao#Z;0_`262wA4v`;|I8 z!9Mc_il@uc|2!K@vd}_Jd?||s=>7g*V_z9mR}*X-0t841?i$?f;7$nc?h@SH9fEss z4jMeTySsaEcX#)<`R;r7_uECP2z6@Co}QVW?$xWi8(1)wQ)L7v^7=7aSrXjxiaDM| za0E5MzJPQVMKuL>hi0}jW)!^zx<{hxt{fdAYl4H~1}Iszv4 zvL?*g1NnmpQs}3f;aGAAzt^!?RCH44VIF(E9wshAfrsiC8J}`R#PkiZbb_66kr-v2 zrGgdvR-N$z!nPm&mtTyvvBQYxTOa&CvW*ziSlG`zJ1=kr35mG9cn%?+n(TIafFD%| zaQ8Th_a|~ZeVDFv{FJ%bWBDq61VX1Eg~dTHX8n@B%d2(`<~MUOthlGg2D{LGyJ{eq zP&}`9GxYpMu@$KdT=*ZDNc3F~SJAgipD?NinfuoYc zqn2X+${)bvmD|)Ld=c^RhO7ZtE`dLOthkqH5sT!pf6kT?_>-gtB95R_b|TrZYm+sFqRo#l)0}rtZ&tBd_lDY>?Pk; z(h{X#Vh#_sb??S1dsZc1Q^e-;jdx&=(4G$<#uQi!OmgC z1ys zGmlbV!;U9DO;|CHN+Q`eMme!X-H}A`ZeDvo(qgG;y!5rz4m02Ra#^B}z^OQLC<99r z8fxBh^?gd;$v4!iKZP4pnYp@%wol}FYI2dy9o>0_yBe4r3Qeu^6-K1j@2ufq0gj~i zxbddWs?2RG+`u*Z@e(*V7HZ0blmzo}2nz4NDT~E|*=fSOmh1~no2cx^%-Kd1s&+?- zr&bro`Z!~hj(b8JmW&)mYY5cjhxa{2RZCcDHeqt6a2FJmgIl6=ad6;2 z*;lRU-+9O~`echB84+afOVPb?w#u=8hJgZ9mJS8dp6k;oz>O z$UZ1C1BGHC+|@}HjYmyhX}`zA)#TZsinhYU=23$4Am)YA$ zpUOCvNS_+P`)5F3=@z^jzny(u9U1G|Sm`@}phkdg7n5OSZM2nNslOC>U>OW-)ff6>p-~G7xc>6zH@jbTM8}p?alfE-|E#0i_odmg zJS$+0j>K)w_@BdU^@}NIu&#Kp_AvOV!}vLlg!5U6i&>ZMe33`Z@AX~nFH%r~^HLqu zY|WX>*kw(2A>E`^JkzXVUm!V!N=J;IGN(i0KXmWKGD(jHJsDT+3uqKCm}YF<-SG@y zDSj4pdES2TN0if#4F(;&x;iIV@Aayx$}1^t$7~Jd@sUEi_{2>%A(9r4c-5Cw$VB%U z>Nz)<>?ST~L-v;gmZfqw8P1~py-=xYgCW}CqQgC-NqQ{6l?Z=U(bM^Fn0asM^I=ZAf(w0xtN_$#O){VRa|yRSOkfiW&H0p$_aYGXt2QE{+D@1 ze*fho=0P_WY;3t}&(Df?hPL-t!aWOwCe)jOM~Z67yh$VY3nPR(D@OPnp1!iTFR8_6 z1ZOL#Ul|Wszy5Vr{bP#PRibH4!Nt`yH=8|${aezKm-to(`DujsCemOztV!hn-m-AY zy`;P+gX;JgIoN9gis5$PAmLdSO&t3oe#qNg48ob{Bvy$l1*M`tV)c5H-1m65-x{TU z?bfBFH>d5_e<>k7K5i-9t|s-pc;r_(svsAy(eF>P!fFw`v+(Fp2()@za)t+8S(ChU zZFU2>3qV)?lqy!kgS!4y@kZ)uhorv5^2X-gi%Jy!1SERSgo72apJ(;PVUhOOp6|t#-dtW z89;2j=5&hOM&Y+^0r8Y~nv(E`hr>^^iU0mEscV$2h<^z46;M^T&;HnZ8aKjcp9q)@ z+r>*d|0I;5xLR9T0TU~AuCN)UHe2Z9dF-F|G?&??V;Jj`I|=DI>7zp)v$NL9)i!AuR4pwX~NrhmgjK40XC$b zl5eR`8EstxP75MH!t?cjmoa%Mv&0w(A9z*#H0&Z=X|9P7zTHUcV~IM{iET*8F;bb0 zw~Ilmzj~B$pl%*1k*7bB%*5llW*`rc7nNPg3#|9(M|xdt*}p=| zyB1miN(=ZQp-+!!4pH${WdNU6XHo3)wGD7wN@xo8#$psU+xTV#&ugOcT*yT%F=4el ztjOMNtIm!%=F#K+>MLuv(&@HF0B85cMVHXiCIR*>DYV;a>*C9f$@5M09g@l`a`Y-r zSAc6^|2Wgc!qpE}m?MhI{VN-0gFg7Gsw#IYx)^4axVsI{cpJkUmYu3ctFvP-D0*Ee zJ@R$F?{K+myh+;)EGk~H-BW`&AVM9X-MXETw01vY-fxoMw!m)ttAqI++Y8ecEI7L( z;O^>izHlx2z1KA!0pd8$CT&>gi%*qQ-HjWShPQLxgVPMW;@<%riY0B7RYP8DCA+bm zX8v)e2XG`;v^AJDi)yR_)Z3c;%2~8&3;^kssdwxE6iuNs$k83Ox?~$VNg0(`_rFk+ zn8H%rjzPdFyR-)P84!K`_!0+DW~LDm-bpmTFu<|GATGYKu&75hDWQ>>KR*8!9Z$5V zK!D4G!Lx~#j#&2vcTA1j7`Euh^6O;A@flBr4+8_A9mA{vn8!;Kc8(POa=sFp{^Ejt zkEv(1^LdRQPC!KkgGQy~4*-k9QjUn?c-Ut<=hsg5 z9I4&;UQ{KE4#_tL)nIm)uh1G3&$+o>-P!OzH@X6)QdmL*zhJVhv2E>wpNTh;@Lbf!oZ-`u=tIyP`S7Y$=vd+1aZ zA;&38R`Ac!{o@nJyU&!^I^kmVw0`i>g`7HJC}+>KRS(!XC*C&T$z%Bfc+0V#la23m zl62#9c9V|ca$F8=8U~nJQC_^InW}09HW(gd`m)t&UfZ;Q-GZ|A`tGR$A&4d|@_7x{ z@0zM5H%G(Z{Y=1!u^&&;BEAiou4SaIS@C9ci8c{6sB$e0hJP=b~*gpsvDl)KE7*w=#t;`j0Y3NCkeyf!OOvl#B#uuft! zmof%)%m@PF<+6KPBGas5QM(~xvqE2TdD&iHex$v}i%}UAQw=$lT2P;9{;VNUpRjz2 za{k5&=INWNtOHK$UmLuwf1#)Jd3kxydzs}IH|-gQD$Cg3oMiBBa!Vjfh;g}d#jlwe zI3t;JJ4ghR-WXm0FdRNk<4kMPNywIUEqD{<>r3&jreR{@UNsQH=R2-VeX@-WyR@Zs@;}0RQ^3f# zl>b{{km!I8>Ot5Y(xq7UkR~}heS|rBy`ZL$&A8s@)PV7GgpM5iC1K;ZSig&K3+kKg zI?5jGLJl4+DUJfa*a2Du|2C;HOnV>Q+-h9%^X<|8#;9S!T-CW6XLI zs(DW9C6-_7NYnswLIUJu64S$Uw{wD4T&gzHKmU5Eg+dKdXEcFewrR>7ow47Jfy;g4 zOwEgBEm_#;3Sy>=1T#;8x!qB*?<~LBsM5QcXzNb3UNK`)GzM)oO5C;6LnOfxGKIu* zqrx_IO5C!8OWdxE!ou9y6C?lz`tJ~4uI3SSYy-V?g4W)}=ZDBJUm13P>h!F}cBwpO zTM-+}{*(R1eD*>r>g87+RYlqp+-vIYJQ{LSRGIGKf|XQP6#tHNF%98C{9BDUM%y z9ppOceXW;j58OAHe0Jzwig;7T%kmH8&s{Z~V1)MHrIJ%My&r#dxp)HwfD7xHyr1t0 zbi*ZVawq(&hdan!HSU_N3X5_U=Vw5Dp9IPD6#&kgzq@8LwsYq!`mx|h8@3DCr{ziP zLKmcD6%)kU57p7}vC9&S`oa2Sc zP{!(5?3_IKFD~UJ8h_MMuU90Mg>P+VC?efL>T^8bD@U~_2uwz!3o8TPz z)Z-9E{rJN`0?Q0huBcN=zLW15yEj6iS{Kpiuq*%S`)h<3&ah<}Oj(W0Nf&h)4N@w5W`0}m)a(04`kavXoMgI!xGpmygx>= ztEBSaYD^OQ#3;Iy{rGljq|T4DjBp8Cv$)3cY8UaWEpj;kXGQqn3M=Zqx;d;AFEO3S?+bFV3wB{BD+V>N(=RJJ_@f3ffJS zl@Sktu++CwM=jUaHyBw08@greALkY2+qbxnr9d~#AnsxHS2YBAS<9c3Y63aA`!Hna z_>o=MsWQuxJewKrDK)u`JTJ{yiu7P4~>GN*lPDI%a zm<;-%ad~UM(!MX`XY@@;<8b}cUFG9KZ`w+2kO%n;;~5Soa@eg8Ar#NBPkZSm#X;or ztL)JViqQwVc1>Z84bbjNV&`sva!CrgA?fF9uXhvEX&bOUIZYU_f%ru$bw*7RjhGKp zQkut12{`i?F;7O%wrh6wCiwN7JS^>V4OF6cvUDHic!}9*i7v=x%Ja6xF1ab?6j2o2 zHgdh<8+mTD@pXF4F-LkgGXsBbr$0=qa~ohC$Nn;+zf)@zQ~~Epo6RLs(`j6h_4lCH zkLYCY&+E>roBGp8nV&LL!*QADk7GM$p`RYfiP?$ga8gyWu&t~*sdlHg6}FA#erq?L zn^c@1#$MsHHmN?>I$?Ie+nT@@?*v7UvPddJu_WEyl6pArT}@>Y2(-Sj5~OAC)fEfM zHynKa;)owP+tIX49aO;Ax4gzP-|8<;EdDkPa7R+R`-1boxu$=7fdGui>kpt(##KIX?|e0@6nsGnit}&Z<-D7_#ny>Ow zZe>ug$J*bFyL)hc{Mh>Iyo_YR0bb_k5KD(rPYP%FfTWuAYH+w%MJjfs8Lc}-bo}04 z<qArneMegL4cnlg*G|}+Rv4yjt2k2k zH>2Z6cCAziPft%9hVrjtLs$UbV1g?>$}5tEQYq=hR%h!k^EkY0E1?17)9?#BDEJ{bG~+gbY~N!v}!< zAoDcRM9cw1@FrdV&W%mW)H6#+N^(}%AoAm{4*p9P$pEAO5+jYLx&4%Sr%V)@-bpgP zx&|cAA?+(e^-KNP<4hJe*84oH>wsi5Ism@Br`}BkshS8GygV|J1m%fjgWpI@<+miS8;4?ZchAjqEqqN7&d@; zSYIbY$OJlw?nIp2fb*z7&fBlD&e2k-&F*=?e);_QzTd*fXwPGusYwslCvBtuCX^^d zD4k!mqgu)Ax@5sQL!SLDX33i_1Ox%m$%MLZcP&A-lQSiTd%7(X7d!HVQ6a*eG%^R` z`Z{$-N)@Moh0Y$P3epu}T8K^-AH$$rw+f1kGMwKRGcP{6U&|Wxta#B~=Gjrn*Wyn2 z{rk6$W>RYjqs8(BM*Uv#5ob|r4YCuNX>Ns#Z0TUv@%f+K*Q&rDOMN!YBqPT_^Rtr% z+mq7%sM*eoiDWCmoLUDxm$~C88Px-+4%a2B3yf2E|5Moh%yfh7?4xl+Q^n7ke`nZr zwQN_X=h^aC=|{Beep%&3YeYvOoI?Sv9U#}dhFzNLnTWFema?U#A+rMKpH?@Uw^;H1 zMs42F%%YWgPfuvk2w9q6moNGAk#jM`K0KQqO0uwG>S$qMK z`FeATVaubo#L9qEn;L+CV7yG11Ad%vZ8ITccs77Od)xC;qE;?1F#&J|CXiX`=*5DF zVz>gcDqgjx(+>xG1Hhc0xWQI&4(_3^(bqzgan5oyD2{x-a8F&gOs_LxsI1}UTJ4$^ z>`x_y9&DLHb)o`KzEr7*;`O#^9ZvTtJFJ>uh-HPhMrFW%xPU5VC-Sx@%B77FrP-R!n0`iqd+n_Vym2Sh+R{##l%a+3;5J!*?pTH=$7fc*KV&unjc zuA6I)tH@o*O46wcE(zxY^xHH?u zL(GuO=3dhP&If^}Xc4h*iJd&1^|0#P){)%Xzoxem-a4fjr$yb_^yKH=&MEptrp3AS zBe|g+4w&M4ypmTmM&cy*JuZ`y_LIH!vAeE?@zUCPo0Fp2y{REG{iMCZL9$JZR!iQ< zUj2>cv$m~{Q(1Yn;Rddz7$&n$-*0{Hsh3~Aw%kec)~`I#!fjF9-r7S!J>tD5BSLSg zUC-iNTBnGLY&%z-sr-IY$u@?E!Z~5i-$@oj~&}6c^PI5ZGPsUl>;MRGDY@>TXD0Jv+ zK;S(@8R8zsIe~{y$u5i)e00k>21tGFo}1y@#2nyS2%I5tXC7N|fp(=#9%1Ye2<0j~ zH4!8!?n>D$0tGvV@)%;PPktcS@QGcfRfYs0T2NQr9T+*V=ZMu5OoRnZ5%kC)Frjyt9f;f0&7PYGHgv_1Hh4)B0zw?HOSKP z)56lTy6v1hhF3BW7zSF5L|+-Ni0eB8zCD{#5qS$%wAm z`#wIp{n;1pf=VmS^Q%F>dpo%b0OfATHA>>Dm@eoVXFhC)c23o8&9g0O(;3z9uO1^M z_yBy7KRLAqv!0%qfolR?Gxq$dm3J47nzLpu%XovTbL_zmJ&#Xyl$y0`YZ}SDk59K$ z1y|dHah^W54E=~+ow;JXiUx)~T9YnsLGViPJ5GjYHruL*W%}3Xp{=cW5Pp2`F%kD9 z`Kv)bMxZ+U1_~TpXiMGYSGL!uGrZ>m$~Y70{Sz`cjz3r^Vftc}Qo+>};};t)XIaBc zcG^RcS__bQQDs#-p1^$pICRnv>L&9)i19LyiUcb7SM9F&2Z+vdq^S+2w_25pb`Rx_ z+xl|9@hiFKhz5eUEV|Y8^-VZX$HyK=R_V%H9ozdJg#7?2mV2#BNl8h>*%w56!!wfz z*eMXxR0o4i9HgMDknZ;MS&3aV+~rTvv3fsk`Rv%IA< zcc~wV)n3eoLHrMTcfSymCp^}*NE9J&N1G0{lVe|3)}^r?0I!Z&Tn(q;&tc!j4o>8E zeBv%hmDo!gMN>S8pr_#D%Bj{VSzWw$!EF2o6FGThl;SKZnaBJq+hW{lx6fQE5o1ip zLQh3)ZePi_@$j=pEYQd`3Jv4@Qt?Z zp{%v7K8fVpMEScj?u(l%l``^ZXLBKPYk|l207=E%cXt~Lm9|b3$3^Az%#OMl*T{8X zj)H>X?kOF0m3~x?{K+-@E_sd?^;qWG#NnK3&R8y&>>o>qe@k1M5FLFo*;GQOSwjX9pe%a zgG_%16A-Z6HgXH8tTY_!YB~dYehJJ>05JJ?pv5;8z)J{TPYjNE&sopfZxN`fQQ-)Q zSkmv57vs4ITnPtdu;EDhnEC8@4EiDtE?8?ZV}V>RrzY?zY%{a|T1&HrjET$qCvMB0 zA7q=mus5^JBT8I*)uSzb#nsi1pI1M(R@{X)KD_{paEmJqdo(vd^_eP^@6Y1!b^^(~ z53lDgp6zGM6sRv2k6*n>X^G8pKJD$Dna!ocT_c?5tJt@lrMU}3K{0bk+Ugmk`+ z6Mh^@+`@S$*N`_?U+#gRzk_bS&Y`I#i-P+mR{t%5NOfVx;8vNQ;3gCxYNYU12A)L& zVNVVKbeY5&1^gcXgHZfybzA{8u_|d8y>MoJF8X^suiVAbmtjq(1}3Ct8O?Gk*;Nksm1?B znw^Vz6b}V+z?1*#wcJ<^o%U2XhXfPqkh&ckl9S626A?k^uB|Tg0Kv(TC|GNG901uY z0E`|0DFkUN@Z;%w40^BdNKD#t*nO~~^gZZDsY5Y* zE%WhU1c3RLo<{;lR3m=kmKHM3SVnJN2E7=iyX&!A;>;?O+x7%-Dix96KAqoVtronTb zJ4NiJaPQ5Rx7ipZ<|y&dK~hpuB&_*bB_7~qXh{H@k~pOEbP5PHH_9VV(AH^n>QwDx zC7kVN)H<&ocMYv z>*@)BWp;TMjIyH5{nq!0%Z;ESe~{YaPeX8Yb0-AhHw*_jR@-EA_*P9 zW){Dq*#))g!fS}^4CCQduOf*%2mfs+O1fuBigi!HMTZz5+hjv9*3APLfm_1;9P;<9 zH_8RrxMh2fVuYKDTRj zlrATh^bN2OeODsOq#*iV0}ZeZ&_xmq6-Napo>hB4Hi<<*=JV)4F#%LU!nLL0V-Nro z0WScEQ}fze8JFH`xe0Snr)aP2=aopBr*5a_2H}MFFB9EOAdM@H^3iV#T9;@>mC?B( zN}a?|hz#Z%l)p>MHW^NnO0~?mp)#_{Nda;>d0Dmq;yXD=s&^Dz601-t#M^ zI5SGj^)yk_$0RwSpzIL%K&rY0$%G{HR7C?#sr7T|F{e1lZt@-ATJGrnJ zI34F#rp=mn;n>7N{pQlUXo~E zT%)=v7%EOYnA`71bF|z>Z~ikEApGB#)IBu1?k%{r;1X@Y=J=hAqbIh)gtEE3)+KR*4C(Yl0T?ZHR`UML`7I8c2W z|F4>Vkvk}^6x(;|N7^G&BTuitkam;y+%hTtIU)IcM`<^~@)4&GJPr48-xZo$z}&ba z44`U!X0v`<{vpzj47ODo0jifwPIiv#zVi2kfBLKISU737{qfN3B=1ZtIjar}5+6B? zmrSZKIjFrV1>gpUg@;E*QDQc(uIel}v7vXzoJD5)kux2S`~ znoS%jWgB%2JV1j+@T8p(IVn1G4E*`n?$;8H>e#|?az!Wgz)8EF4_O(EtycY5`w>V7 zA#t#Ig@u2OhPJuLlVtOOy0!(1Ht{>h@bK^xtE)0VyFx2J-kN%rtr48;k@Q>^3K8|J z^f3KM9vPvfySvL^Z8Hp?SNUD7oXBk9h+KX0SR#c&w03VdGQwNyy)e!En4`(m+)!F< z*{LP(h@VSLL0tOqPCe(_XmXl-fs)kua_UTAAekh`K;lza|5grkNonNmtbYyuqBPf{ zB$%63qw7*S9)0I$y*Wg7Xh|`{5MdqSW~pY+Nv220@$qr{n>ew(PGNGWVRB+3hIic~ z#XJM{#^r;PNPi4G$kj6BrzTlAkN8bAdsFvFzOGNSJ%l=j5}QXoCGTdq&~W!4AOth z0+bvA4KBW>j3O+_9q}xR8d@?Bxu2=Si_fKT@b!jAM_IY5@aC45xHUSOnqli;_76CO zDz;!{9MZDWSad}3Y^*Va3AlkDgr%Nk=kH@uvOW=OHn@L&9-1_qR3pmFpKu8Qg;2o* z9OoOWDrj||2CVO#le@PM>)8Ljgbq;l8euh3lQVzvgP=0|4o`FjhOFuPr_FIfTB>0 z2}4h{Zi!cPM39kTtb4;b&`H^OiWDN=ehpq?pCV+4{o>{Cnhw$pkcmWOBsDe zlABdMcAQmqdumj+3zU}}$sO&1pgy*<17imd0#&-l@%VVv>G^pvMa8(uN}+AVzrc2F za5|cu1pX!|`GsJ7U*w;~>OEw+m3KnX1KEA~gsi~Mb2vgzNPuYgk{pMi`?n(@J4xYb zc*L(;HG990M#%bOf@vralcxQEcLH;Ibzvfh-s`TIZ=PRMCdudASfZ zQYpuZ%$RM)72cH`vSG6>BSLIC?O6``0%(^gbk(Q?o`T+e23c}n?chgOF9xYh7fg1B z#=V}JUg$3vKwa>Ui43~dmIBC}WbeA99{2-+>pBGR&o53VS|q3Cxgg2ZeC3yqH+Gx3 zl^AVbSU*Znj$KgB1!{EMBnwF;vO*>D6q8u50%`CxsR0$rBdX=TUot~QNioj-;c_hjVF~oSE*euXZ;c{o#Z6`rh=3&jz#ijZ&nqdlu ze;^*0VvA~a$OF^{FS?lM3sjhK)p;3%qJsUQvS+5(tvXZaP#wSjXx#Xcn0?4cI1yH8l}N~?Q=6Q z3Hj5Q7%15;=oER%je&huqf;~>{N7~z?R9{Cq0I}Iq3rom+=KF zYHeNqxW`9u$y!B5l4^_C&a-}ziE4zMT1>cquQ^E!9*8Swz)Zb9C)EX!TkSrRVC%x7 zjQ{BBy8Vqu_U$LDhk^5P2AK9~mEG(-N>2`%lV%Z1nDobWd&{r8GTq)(8(#mj(t?N6 z9K?%(ySXX1#JyCX7f%(>BOiNl%TKAVch-w3&3!E81HB#kwQ*wkkx@jKg>`H&4|{93 z-&g!S9eSzDxQ-Ms49;XvcW2AXv)Xh0jQHI{liIBJ0y9tWr(1~aoq>B7Bt+{Pfz|QT zH%f-^>)Snxq(|HEbb00rr!+Zg{hB+>+C9Tsc0+3r-T2wYz-d%v7%k{jy@YL(+Bi0g z4<2u8fz|68jbUfd=YjPL20dpz>L=A|{jHS}ohOvHTRMJ=w)zzBW7n43N;q2LJt0MG zVUW-uKTj{}cSKj~9k4EaZ^jphOhVn)#>}M?X9w9WUY2XN3g?$pOK+PmZN*oGEmhac zvh<)RvmPnX#feY(#>l`0 zImWI>-|26%c;9>*|3J`-nZ%LxdR_3D(NwOufd|C6LWb5o+HfMD?8s6F>Y7ei-;fX} zIB^(rP-qbA<@__vx6N{&zUysVtwTcp zEVG#E8aG+QGrXbQSk8L;l~ET3Ik}&Xq{vLZBEXWwEJW=cV;J#}xVgD4yDg>DTB;3b z9?f0OMz8*HwC0;pRnB+|4>$Z!Jo;Te~jJy@Nw!6e;m1 z1twJFG#Ls>>&D1bT#PE~7tQB~V4oiLdf!D0rHSoL<4QB?94)m$rIfGD9t*YuBemge z19Jo#5u?V;T!|ruAJCbRIXjK3EBBeh8w)p#XG?Yai)p+?4`!hMX=#c(J10(F2=%3f zfwd@O)M8z3ud8cE2c7D@6MP=azYGpd-6&Nb7#qmw%-Gz) zi`~cjjMEvEdykrYtrllhfa%A!#)d`PlM5z^~uG_=~ z`sBozJwTQqnA?S((CZpGwa#jLWv)(gICzq(2Nq_r>)4dJvS6tzVUE`5RazA&tY_p% ziwy1n_F9iEK;K%HcZYGIZS?2$xUDdI5?S@K3eM*max2hht8}~-o?l4$DOwOYMK$Np zyLr^`bot+OJ_6>HSP+=ciwmf>M1d0eJfqZ~(_g@qXjYUHK?QUagjLU-CNVUzkl5-q zrA#pt9sa=0b!^yZ(O`cnm^hm3H+{gul@c-_evKe11e)qs#Aj%|R=7P`5>>4@x>pj# zT|JG=}!oSXryMYnS-?q*BJJ{~Q%la&#$cEH@xjH58}pc=5mv6DK0 zA%WVjE9>OBS4)0bu&dx08oW8ElVdOhlqUo(VSV5d#y$Ip4|!~ft0&qVI9%42-pD?Z zS67GOYm(`en4eFsQl@2QDTW-QD93~v6H#ZsBSGMCT!}jV=3cZlmd@?wGmNqN`ogwc zix9>@)uGBf*ii!_h>S`Wj))>MIk4UP_QVx;d|I_pnlg&czA}KXsw1v4JE*7#6sS;d z^K4`y5*Cv22R4FX3E(&Zm9YV178j><+$URE$JEgUFQ6a*fW zG9e0$S}N5}dQi=B3Y|e=`R?xKX--_ zc+NW@G3iS}2Fw5j9TPFLw&pWsx=;u-L^2*r8wAiGaZ;4ym1dyxf#t@{npKx#+>c2# z#2rORCQTM)X}-bt`@S&QsA|JC3^?3Rzf@A1s~fk&KIOBH=xx-Pao|Nw^Nk;P@*^WN zNz4um41`P)2?>oQO~%$G-0?3*wEpAKn97gWchHE8A~)C{J+s->ZNHkXeq7dl-u77j z-45B#U=yJ@*a-Wz&x{Y$(Z2-<4uHV)ibX7_H z(K{j#%nf69DmH;vqc?oVTC5Juzfp4e*zUv2(6e zX7y*qeD|!AhaE}KysRZfej-vIsN@^ z^(%w*^M(m_m!7{WKA#)i4LdUbTUOR*T&?|wG`-|y(4k}%=Z^u>Wh>valheGvh3mn- zKP^qW0F#iA%=ca?Ay6Od9qajF--myXh3y4VCf<#Stp4d*S2tGeSPB)TF1`?U zF*llJd`q@`d>5Bw@{gE?;Q2;U%~_S#Nr#*C3690az~gkqlsG5E@MGx^B{6nUCMzQQ z`SyBT%iZu3Xg5-k5zBDR&+C|{B9a$|uZM3i!o;3Ft|;t05fcmFri&{{8GEi&6NcNn z;}>?G0j~KkvHU40u1~PnMh<_+ML5!f+pQ5^7tNGZRTbs_v||zz7yKXrlvWnc@}ocN zJvT45;?Rc{9R{89B!Hp^F|oKfvq=skIDWiW8-g5 zE32p|sH+cV2le)B*=cBMF03_0zi{7OtQK=)+vN^iEKpK9DXOK&dW)0KNcm0bW5`%Y z92UMGsV@kVe5M6f9fEfPY^+WWRL#%!7%HlY^749)LdY@UzW}W^fCV(6qDb6s4b zrpEo6FdA~bP29c(fk&8LE6{D*HLWkGT}(Ovxmt}!m=P_flwD@&PkLPiSZq-o>_cue zeUz-M(uZ$kw7tEJg|94R*!6BQGbIo2=s#W`0PRIzdMr*(PJqTy6SGbMvn#<1OHKh3 z6HItIxOIZejXD(cHU!o-8Mi9jq8Q^@;k55drCsWOEr6Y)TSnq%c3J&I61ilKN?)cPP z&z2*i+oD_JCviC?kcQr6JU-KEQDDFmm5h&zm0!RwV#_GaXkI{}pKpRhJLVbY>D^+a z>>3_6fJ?AjhRqDW%q<0++@$xl=g_OwaJ%0K2JSh|dWN>Go+AJh$;cpRYHBh)vd+8l zS4n9?M3F|=psd-Xtkbtkv1`KHZb;j1Nat9=F?vd#F&`cHPl~RT-Yve7ND&JM*dS!Q zkE(u%<>g`7IQ-~33^zIq!otGyCq7hLFE20KdwV%262d}#Fo2mDW0zZ47z+6JaXQsY zCrV06a`N(>md2T`yg>i9l@)0KY}`}BT(Q!Ix`Q%1;Fr?%VPH#ww#a}Er@?I=4x2vd zc(Ai`;AGS!??bs1iAet1uNXiA*Y(3r@P}Pj_d>uHMpw77U?puA(?H#}oPvt~w6@@+ zk+Rf{JJ_Yg7cAxT_7>T{)p_C!z#NyM{LI9}v2K8h73vFpef9R8_KrKT<&dFeu`jv` z6eJSNLgMXjI^dj@W}Nu(r#*G`^_$vMe|Rcf@vv0Xu;27akACe>C$$RB5;go;JKc4_ zYY5$*PiKgcddssFMhVDXfF~^p2$Bv6u7(p9#Tu;J8oJw{PYx&^2p(1x2>cI4+p*sO zIuK}#dpTTUGaCcuT1W&cpbCh$gaGsluoJMVuiSVDcrp}iTzOeo9J3p4?(U`+)@1H& zLkzO`e#IdDm?R>eB#J#C#b}1BUI`eq?mA}Ct1^kP8t*c%|5+W4!BM>OYt*dQyk6f) zjS+-CTm5h$d9?kA%$4z>YEwciVAjV|~;og5+fx|oY=`1_vp5~U8xp{dzzqBL)i$Z!fggi4mWPnqQJWeP_9^eg3 znqKD`d;@j-B=vlrg9yt0k<&l%0U;?)j8w1=uBxhf5cIu{GqvQHwn|$4_gD3N+A67t zHsjZOrk@|B)D2C##cp9?)=alB`8AwW9snD3&Ert7Wbj)hRIW%>CAWhuhkXS%@Z(^& zon$a>7fs;&R6tO`JSrz7v~2_UcOfAF9S^Dy=vXQW0`r_it12m_O*^(`WxWIN2*Hry zy&z}Z+>rkx`crgv z`rlmnB?-I`WmgJS718`C>bSn@IMMx?jDUyC`_M+cuk`i<1RWd$a0DXqLBN{a8(RM~ zn^{?Y+xajz`*eP-{t@Qz~=+&`TpoL0;=l2$N#_G1bhrj>VF0Czk~jN c4OQ`m*eR6CjNSlJ`T#uQ!ZJc-f Date: Sun, 31 Jan 2021 11:39:38 +0200 Subject: [PATCH 006/199] Fixed example ARTS data upload bug Former-commit-id: 5028d9fde1265fd39f0f67dafa839d493591edfb --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index 01725fe..dae2ffa 100755 --- a/app.R +++ b/app.R @@ -423,7 +423,7 @@ server <- function(input, output, session) { vals$dup_data <- dup_table vals$dup_data_input = T - data <- read.delim("sco_knownhits.tsv") + data <- read.delim("example_data/sco_knownhits.tsv") locations <- sapply(data$Sequence.description, function(x){ tail(str_split(x , "\\|")[[1]], 1) }) From 5c30759b9ff1a45907a776fae90880e43920a961 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:28:31 +0200 Subject: [PATCH 007/199] Default chr length is now 10 Mbp Former-commit-id: aa10758f5ecbc8b8b7fea7e2d4d3a74ef22ea709 --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index dae2ffa..c4de9ca 100755 --- a/app.R +++ b/app.R @@ -65,7 +65,7 @@ ui <- fluidPage( "Upload ARTS duptable data"), actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), # Numeric input of chromosome length of analyzed sequence - numericInput("chr_len", "Please type chr len of an organism", value = 8773899), + numericInput("chr_len", "Please type chr len of an organism", value = 10000000), h3("Antismash, SEMPI and PRISM data options"), checkboxInput("hide_anti", "Hide data manipulation fields"), h5(id = "anti_header","Antismash data options:"), From 4b0339829b504c5818e6288f45ba9c915bd8b814 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:39:28 +0200 Subject: [PATCH 008/199] Renamed Data manipulation options menu Former-commit-id: 0b4a79c136edbf3d4c075b19c31e6b2cbfe740a6 --- app.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.R b/app.R index c4de9ca..7dc890e 100755 --- a/app.R +++ b/app.R @@ -66,7 +66,7 @@ ui <- fluidPage( actionButton("arts_sco", "Use ARTS example data from S.coelicolor"), # Numeric input of chromosome length of analyzed sequence numericInput("chr_len", "Please type chr len of an organism", value = 10000000), - h3("Antismash, SEMPI and PRISM data options"), + h3("Data manipulation options"), checkboxInput("hide_anti", "Hide data manipulation fields"), h5(id = "anti_header","Antismash data options:"), checkboxInput("anti_hybrid", "Visualize AntiSMASH BGC with several types as 'Hybrid'"), From 50cb5759a9bb9d6b100de614418d0fcb1f3c1755 Mon Sep 17 00:00:00 2001 From: Pavlo Hrab Date: Sun, 31 Jan 2021 12:40:34 +0200 Subject: [PATCH 009/199] Completed the documentation Former-commit-id: 3be041c36106253523b67cb12c60bdcad3bc276d --- docs/.obsidian/config | 2 +- docs/.obsidian/workspace | 25 ++-- docs/Additional_analysis.md | 83 +++++++++++ docs/BGCViz_renaming_and_coloring_options.md | 39 ++++- docs/Input_files_options.md | 12 +- docs/Installation.md | 4 +- docs/Introduction.md | 4 +- docs/Logic_of_the_output.md | 143 ++++++++++++++++++- docs/Quick_start.md | 30 ++-- docs/README.md | 95 ------------ docs/UI_guide.md | 0 docs/_sidebar.md | 3 +- docs/images/clinker_example.png | Bin 0 -> 144891 bytes docs/images/data_mani.png | Bin 0 -> 39372 bytes docs/images/data_upload.png | Bin 58459 -> 64692 bytes docs/images/group_by_one.png | Bin 49129 -> 46610 bytes docs/images/hybrids.png | Bin 35988 -> 32578 bytes docs/images/renaming_opt.png | Bin 0 -> 7784 bytes docs/images/rre_data.png | Bin 116188 -> 27893 bytes docs/images/rre_data_precise.png | Bin 0 -> 13843 bytes docs/images/summarize_one.png | Bin 42404 -> 47206 bytes 21 files changed, 307 insertions(+), 133 deletions(-) delete mode 100644 docs/README.md delete mode 100644 docs/UI_guide.md create mode 100644 docs/images/clinker_example.png create mode 100644 docs/images/data_mani.png create mode 100644 docs/images/renaming_opt.png create mode 100644 docs/images/rre_data_precise.png diff --git a/docs/.obsidian/config b/docs/.obsidian/config index e6976dd..387c22c 100644 --- a/docs/.obsidian/config +++ b/docs/.obsidian/config @@ -1 +1 @@ -{"pluginEnabledStatus":{"file-explorer":true,"global-search":true,"switcher":true,"graph":true,"backlink":true,"command-palette":true,"markdown-importer":true,"word-count":true,"open-with-default-app":true},"enabledPlugins":[]} \ No newline at end of file +{"pluginEnabledStatus":{"file-explorer":true,"global-search":true,"switcher":true,"graph":true,"backlink":true,"command-palette":true,"markdown-importer":true,"word-count":true,"open-with-default-app":true},"enabledPlugins":[],"theme":"moonstone","promptDelete":false} \ No newline at end of file diff --git a/docs/.obsidian/workspace b/docs/.obsidian/workspace index a49bf8b..7838cf2 100644 --- a/docs/.obsidian/workspace +++ b/docs/.obsidian/workspace @@ -9,19 +9,19 @@ "state": { "type": "markdown", "state": { - "file": "Quick_start.md", + "file": "Logic_of_the_output.md", "mode": "source" } } }, { - "id": "714e750e96c06a9f", + "id": "a538915d727d2cfb", "type": "leaf", "active": true, "state": { "type": "markdown", "state": { - "file": "BGCViz_renaming_and_coloring_options.md", + "file": "Quick_start.md", "mode": "source" } } @@ -80,7 +80,7 @@ "state": { "type": "backlink", "state": { - "file": "BGCViz_renaming_and_coloring_options.md", + "file": "Quick_start.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -93,19 +93,18 @@ } ], "direction": "horizontal", - "width": 300, - "collapsed": true + "width": 300 }, "lastOpenFiles": [ - "BGCViz_renaming_and_coloring_options.md", + "Quick_start.md", + "Additional_analysis.md", "Logic_of_the_output.md", "Introduction.md", - "Quick_start.md", - "Glossary.md", - "README.md", + "Installation.md", "Input_files_options.md", - "Untitled.md", - "Logic of the output.md", - "Biocircos.md" + "Glossary.md", + "BGCViz_renaming_and_coloring_options.md", + "_sidebar.md", + "UI_guide.md" ] } \ No newline at end of file diff --git a/docs/Additional_analysis.md b/docs/Additional_analysis.md index e69de29..bf6f425 100644 --- a/docs/Additional_analysis.md +++ b/docs/Additional_analysis.md @@ -0,0 +1,83 @@ +# Additional analysis +After the analysis is done the one can download uploaded data. This option is particularly valuable for DeepBGC data cleaning, whereas for other inputs the data remains unchanged. Alongside the inputs, "group_by.csv" file is generated, which is the table from "Summarize interception" tab and group.py python script. + +Here we depend on the usage of a clinker software, which is an awesome app. Check out their GitHub [page](https://github.com/gamcil/clinker), or published [paper]( +https://doi.org/10.1093/bioinformatics/btab007) for more details. + +# Logic +The structure of the group_by.csv looks like this: + + |Antismash|DeepBGC|RRE-Finder|PRISM|SEMPI|PRISM-supp|Group | +| ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | +1|NA|NA|1|1|NA|group_1 +2|6|NA|NA|NA|NA|group_2 +3|11|1|2,19|NA|NA|group_3 +4|NA|NA|3|3|NA|group_4 +6|45|NA|NA|NA|11,12|group_5 +7|NA|NA|5|NA|NA|group_6 +8|66|NA|7|NA|NA|group_7 +9|NA|NA|8|NA|NA|group_8 +10|70|NA|9|12|36,92,93,94|group_9 +11|97|NA|10|18|56,57,110,111|group_10 +13|100|NA|11|19|NA|group_11 +15|NA|NA|12|20|119,120,121|group_12 +19|117|NA|13|23|65,122,123,124,125|group_13 +20|119|NA|14|25|126,127|group_14 +21|NA|NA|15|NA|NA|group_15 +23|NA|NA|16|28|70|group_16 +24|131|2|17|NA|NA|group_17 +26|157|NA|NA|32|NA|group_18 +27|161|NA|18|33|75|group_19 +NA|13,15,51,64,30,64||6,4,6|4,7,7,10|3,35,78,80,128|group_20 + +The logic of this post-analysis is to extract the GenBank files, which corresponds to the clusters, from the master GenBank file. Then put them in the separate Group folders. + +**Tip: It's better to use the feature-rich GenBank file, as from antismash annotation for example. This analysis will not add any information to the actual GenBank records** + +# Dependencies +For running the grouping "group.py" script, several should be installed in your environment - `pandas`, `biopython` +Also, clinker software is required. They all can be installed via pip from the command line: + +```bash +pip install biopython pandas clinker +``` + +Pip should be already installed if you have [Python](https://www.python.org) installed in your system +# Step 1. Group the GenBank records +## Inputs + +There is one input -> genome sequence, which was used for BCG annotations in GenBank format. + +## Usage +The usage is pretty straightforward - you need to specify only one input - master GenBank file : + +```bash +python group.py +``` + +## Results +The script is working rather slow. The grouping can take up to 20-30 min. The result of the grouping is several folders, which are named as "group_1", "group_2", etc. These folders hold extracted records in GenBank format. + +# Step 2. Run clinker + +## Input +Inputs are the folder with the .gb files. Therefore you can choose the group you want to visualize + +## Usage +For a comprehensive guide on how to use clinker software please refer to their GitHub [page](https://github.com/gamcil/clinker). To interactively visualize the certain group, please run: + +``` +clinker --plot +``` + +## Results + +Then, after the analysis is done, the default browser will open with the interactive visualization. For example, for the default S.coelicolor data, results for group 3 (grouped by antismash data) can be viewed as follows (while using antismash results GenBank file) : + +![clinker](/images/clinker_example.png) + +This is a result of running clinker with the following command: + +```bash +clinker group_3/*.gb --plot +``` \ No newline at end of file diff --git a/docs/BGCViz_renaming_and_coloring_options.md b/docs/BGCViz_renaming_and_coloring_options.md index bde06df..78e8f05 100644 --- a/docs/BGCViz_renaming_and_coloring_options.md +++ b/docs/BGCViz_renaming_and_coloring_options.md @@ -1 +1,38 @@ -# TO-DO \ No newline at end of file +# BGCViz options +The user can explicitly change the renaming scheme and coloring options. + +# Renaming + +The renaming schema is stored is a csv file, called rename.csv. This file looks like this: + +| Code | Group | Group_color | Color | Vacant_colors | Hierarchy | +| ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | +polyketide|pks|pks|#a6cee3||Antismash +nonribosomal_peptide|nrps|nrps|#1f78b4||PRISM +melanin|melanin|ripp|#b2df8a||SEMPI +ectoine|other|saccharide|#33a02c||DeepBGC +pentangular_polyphenol|other|melanin|#fb9a99||RRE +nrps-independent_siderophore_synthase|other|other|#e31a1c||PRISM-supp +angucycline-type|pks|terpene|#fdbf6f||ARTS +angucycline|pks|alkaloid|#ff7f00|| +butyrolactone|ripp|hybrid|#cab2d6|| +class_i_lantipeptide|ripp|core|#6a3d9a|| +lasso_peptide|ripp|regulatory|#ffff99|| +nis_synthase|other|resistance|#b15928|| +acyl_amino_acids|other|base|#d4ced6|| +aminocoumarin|other|||| +... | ... |||| + +The data used for renaming is stored under "Code" and "Group" columns. The default file is available is the BGCViz directory or in the [Glossary](Glossary.md). The one is free to use any renaming scheme, but the whole csv file should be uploaded in the file input in BGCViz: + +![renaming_opt.png](/images/renaming_opt.png) + +# Coloring renamed data + +The renamed categories in the "Group" can be then colored. The categories itself should be specified in the "Group_color", and "Color" column holds the corresponding color in hexadecimal format. The default colors are from [ColorBrewer palette](https://colorbrewer2.org/#type=qualitative&scheme=Paired&n=12) and can be easily changed. + +The "Vacant_color" column is not used in any analysis. The logic behind it is to store any of the colors, that is not used in the coloring now(due to lack of groups). The selected colors play together nicely, (example: [ColorBrewer palletes](colorbrewer2.org)), so the one wants to store them if the number of groups increases. As there are 12 (base color excluded) groups in "Group_color" column, so no vacant colors are available from ColorBrewer palette. + +# Hierarchy + +The "Hierarchy" column defines the order of the link coloring in the 'Hierarchy-based' mode. More on Biocircos link coloring is available [here](Logic_of_the_output.md#biocircos-plot) \ No newline at end of file diff --git a/docs/Input_files_options.md b/docs/Input_files_options.md index da3db8b..2e83464 100644 --- a/docs/Input_files_options.md +++ b/docs/Input_files_options.md @@ -31,7 +31,7 @@ Similarly to the AntiSMASH, there are two options for the PRISM input: ``` -**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Antismash, SEMPI and PRISM data options" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "P-supp"** +**If json file was provided, the additional option of using Regulatory and Resistance genes, identified by PRISM can be used from the "Data manipulation option" menu option in BGCViz. Those genes will be treated as an additional input, and chromosome will be named "P-supp"** **This field supports the csv file upload. It can be any csv file, as long as the format is the satisfied. Therefore you can upload any results in this field, in place of PRISM, but the result plot will label these as "PRISM"** @@ -49,17 +49,23 @@ The db file, script can transform to the .csv file is the `/genome_browser/mai We are expecting the default DeepBGC tsv output file. Please the the example in /example_data folder # RRE-Finder -We the expecting the modified default txt results file from RRE-Finder, which is in the format as below: +We the expecting the modified default txt results file from RRE-Finder, which is in the format as below (in case of exploratory mode): ![rre_data](/images/rre_data.png) +Or like this (in case of precise mode): + +![rre_data_precise.png](/images/rre_data_precise.png) + +(These files are created from genbank input to RRE-Finder (which is an expected input by default) ) + The expected list of modifications: 1. The first column ("Gene_name") is divided in 3 parts by double underscore as a delimiter ("__".) 2. First part is a contig name. (Here "S136_genome"). 3. Second part is the most valuable one - coordinates. 4. Third part is a locus name, or other sequence identifier. -**Please be sure that any other data from Gene_name column is deleted. The data itself is divided by double underscores (should be made manually) iny three clean parts. Please delete all other data in Gene_name column (product names or gene names), if any** +**Please be sure that any other data from Gene_name column is deleted. The data itself is divided by double underscores (should be made manually) into three clean parts. Please delete all other data in Gene_name column (product names or gene names), if any** # ARTS There are two uploads for the ARTS data. And only two files are provided the data will be included in the analysis. Firstly, download the ARTS results (all results). diff --git a/docs/Installation.md b/docs/Installation.md index 4369c3e..8979dd2 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -21,7 +21,7 @@ install.packages(c("dplyr", "tidyr", "stringr", "RSQLite", "rjson" )) ## Why local run The local run of an app is identical to the website one, with the same UI in the browser. Howewer, it have several advantages: - Fast upload of files -- Better response times +- Better response time - Control over execution. Quick modifications to the code. -Besides speed and flexibility of a local run, ability of upload raw json output files from PRISM and AntiSMASH is a big plus (more details [here](Input_filess_options.md)). For server usage we are suggesting to convert the json files to the csv ones, using provided scripts (more details [here](Input_filess_options.md)). +Besides speed and flexibility of a local run, ability of upload raw json output files from PRISM and AntiSMASH is a big plus (more details [here](Input_files_options.md)). For server usage we are suggesting to convert the json files to the csv ones, using provided scripts (more details [here](Input_files_options.md)). diff --git a/docs/Introduction.md b/docs/Introduction.md index 7071901..b6e844c 100644 --- a/docs/Introduction.md +++ b/docs/Introduction.md @@ -43,13 +43,13 @@ For more information about which files need to be preparated please see [input f # Contributing -There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement smth from out TO-DO list.  +There are no contributing guidelines yet. But feel free to resolve any posted issue on [repository](https://github.com/ostash-group/BGCViz/issues) or implement anything from our TO-DO list.  If you have any questions, suggestions, or bugs with the BGCViz please let us know via Issues section of the repo on [GitHub](https://github.com/ostash-group/BGCViz/issues) # TO-DO list -1. Write all group information in one GenBank file (for know separate files are generated. More info [here](Additional_analysis.md)) +1. Write all group information within one GenBank file (for now separate files are generated. More info [here](Additional_analysis.md)) 2. Add BigFAM information parsing diff --git a/docs/Logic_of_the_output.md b/docs/Logic_of_the_output.md index 5398d18..b711b6b 100644 --- a/docs/Logic_of_the_output.md +++ b/docs/Logic_of_the_output.md @@ -1 +1,142 @@ -# TO-DO +# Tabs generation +Tabs are dynamically generated from the output. After uploading a single file the only tab available is "Annotation visualization and comparison". After uploading more two more tabs are generated : +1. "Biocircos plot" +2. "Summarize interception" + +The default data choice for all dropdown selection menus is the first uploaded. + +The "Compare to DeepBGC" tab is available after DeepBGC data upload and if the more than one data was uploaded. (For example DeepBGC and Antismash). + +**Note: Comparison of DeepBGC data is available only to PRiSM, SEMPI or Antismash. So, if, for example, DeepBGC and RRE-Finder data was uploaded, the tab will be available, but plots will not be rendered** + +# Data upload and manipulation +Data upload is done with the corresponding file upload menus. Detailed description of the input files is [here](Input_files_options.md). + +![upload_menu](/images/data_upload.png) + +After the files are uploaded data will be extracted and added to the plots. It is possible, that a short period of unresponsiveness of BGCViz occurs after data upload. This indicates that data is being processed and plots are being rerendered. The longest period of unresponsiveness occurs after PRISM json file upload. It can last up to 3 min. + +**The supplementary PRISM data is available if the uploaded data was a json report, generated by the service. To include resistance and regulatory genes, identified by PRISM into the analysis, please tick the corresponding checkbox in "Data manipulation options" menu** + +**Note: Please use the right sequence length. It is crucial in rendering Biocircos plots. Rule of thumb: It is better to input bigger length of a chromosome, than smaller. If the bigger length is used, then then just some gaps in the chromosomes on a circos plots can be spotted., otherwise, if the input length is smaller, then all the arcs and links will be shifted clockwise and the whole biocircos plot will have no sense. Default length is 10,000,000 bp** + +The "Data manipulation options" menu option contains: +- Rename BGC with several products in the Antismash data to "hybrid" +- Rename BGC with several products in the PRISM data to "hybrid" +- Rename BGC with several products in the SEMPI data to "hybrid" +- Use PRISM additional data, which includes resistance and regulatory genes +- Chose ARTS core genes to plot + +![data_mani](/images/data_mani.png) + +The renaming options are used for better link and arcs coloring in the biocircos plot. PRISM additional data option adds the resistance and regulatory genes as a separate data input to the plots. + +ARTS data controls are used for better understanding of the core genes duplication. If the ARTS core gene is intercepted with other BGC, then the one can plot only this core gene paralog to see the location of the duplicated gene and if it is intercepted with other clusters. **Note: ARTS core gene duplication data can have more than two genes. Therefore all paralogs will be visualized**. + + +# Compare data with DeepBGC +This tab is generated after the upload of DeepBGC data if this data was not the only input. The tab consists of two plots and delivers a purpose to compare DeepBGC data with several filters to the chosen reference one. After the comparison, one can choose the optimal threshold of DeepBGC data, preserving the balance between novel and already annotated clusters. The choice between reference annotation for comparison is Antismash, SEMPI and PRISM. +The first plot in this tab visualizes several clusters, which are annotated solely by DeepBGC, only by chosen reference program, or by both. + +![deep_da](/images/deep_anti_comp.png) + +On the x-axis, there are different thresholds for a chosen DeepBGC score, on the y-axis - number of clusters (divided into three groups, described above), which are preserved on a given score threshold. Any additional thresholds can be also applied to this plot and will be written on the upper right corner + +The second plot can be thought of as a mirror of the first one. It contains the same data, but in form of rate, in place of counts. + +![deep_rates](/images/deep_anti_rates.png) + +The rates are: + +- Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how many clusters are annotated only by DeepBGC. + +- Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash.  + +- Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how many clusters DeepBGC missed, assuming, that antismash is a reference annotation  + +All the data cleaning is used with the help of the sliders. The main data cleaning menu option looks like this: + +![deep_filters](/images/deepbgc_filters.png) + +The thresholds here are applied globally to all plots and the data cleaning options for DeepBGC are the columns of the .tsv output file, which are quite descriptive by themselves. + +The second group of plot controls affect only the first barplot. They include: +- Choice of reference data (between SEMPI, PRISM and Antismash) +- Choice of the score, to be plotted on the x-axis. +- Choice of a step for a barplot. +- Choice of the starting point of a barplot + +![deep_cpm](/images/deep_comparison.png) + +**Tip: you can hide all not used controls with the "Hide..." checkbox** + +# Annotation visualization and comparison +The plots on this tab can be thought to be "Genes on chromosome". Here are two plots available: +- The general "Genes on chromosome" plots, which contain all the annotations from all tools. On mouse hover over BGC, information, particular to the chosen tool, is shown. + +![all_annot](/images/all_annotations.png) + +- The second plot visualizes the data from uploaded apps, which is intercepted to the app of a choice. Default reference app is the first uploaded and all the clusters are plotted for it. +**Note: if there is no interception available between the uploaded apps and reference one, then this plot will remain empty. The good example is the choice of SEMPI data as a reference. Then the RRE-Finder data is absent from the plot (usually) because no interceptions are made between them ** + +![anot_inter](/images/intercepted_annotations.png) + +The second plot has pretty simple controls, which consist of only one option -> the choice of reference data. + +![genes_on_chr](/images/genes_on_chromosome.png) + +The type, which is used to color the BGCs, is a subject of change through renaming and combining data as hybrids. More is [here](BGCViz_renaming_and_coloring_options.md) + +**These visualisations are also affected by renaming, improve visualization options and data manipulation options** + +# Biocircos plot +The biocircos tab is become available after uploading two or more datasets. By default, the links (lines that connect different chromosomes) and arcs (the boxes under the chromosomes, that corresponds to the BGC) are grey. This plot is also affected by the chromosome length, which is a mandatory input. +- The first plot is a circos plot. It is reactive, which means, the one can make it bigger or smaller with the help of mouse wheel scroll. + +![biocircos](/images/biocircos.png) + +On the cursor hover onto a link, the cluster IDs and their types will be shown, as well as, linked software names. The type here is unaffected by renaming and is shown as is. On the cursor hover onto arcs, the type of the cluster and their coordinates is shown. + +- The second plot is just a legend for applied colors for biocircos plot. These are a subject to change through [coloring dataframe](BGCViz_renaming_and_coloring_options.md). At default, all data is visualized in grey color. + +![biocircos_legend](/images/biocircos_legend.png) + +The controls of biocircos plots are under improve visualization menu + +![color_biocircos](/images/improve_viz.png) + +After uploading data, these are available right away, however, there is small use in them prior to renaming. The coloring is based on the groups, which are stated in a legend. If the no color is specified for a chosen BGC type, then the base color is used. Therefore before renaming, when the coloring options are ticked, the majority of the links and arcs will remain grey. + +The coloring options for the links includes three modes. These modes illustrate different logic of dealing with the linking clusters of different types (because one color for a single link must be specified). The modes of coloring: +1. Hierarchical-based -> the colors are assigned based on the tool hierarchy. The hierarchy is specified in the coloring dataframe (more is [here](BGCViz_renaming_and_coloring_options.md)).If the link connects two clusters with different types, then the color will be assigned based on the BGC type of the higher in the hierarchy tool. Example: Link joining the pks cluster from Antismash and ripp cluster from RRE-Finder. Then the link will be colored as a pks one because Antismash is the first in the hierarchy. +2. Purity-based -> colors only the links, which connects BGCs with the same type. All other links are colored with the base color. Example: the link connecting pks from Antismash and ripp from RRE-Finder will be colored as grey (base color). The link, connecting the same Antismash cluster with the pks one from PRISM, will be colored in corresponding to the legend color (as the types are the same). +3. Reference column-based -> one should choose the reference data. Then all the links, which connects the chosen data with other ones, will be colored according to other data types. All other links, which do not connect the chosen data BGCs, are colored with the base color. Example: Antismash is chosen as reference data. Then the link from RRE-Finder ripp cluster to the Antismash pks one will be colored according to the ripp color. The link from the same RRE-Finder ripp cluster to the DeepBGC pks one will be colored in base color because it is not connections any BGCs from Antismash. **This mode is useful for a diversity of BGC types analysis within one app annotation data. It allows quick visual comparison between arcs color (the type in reference data) and the link color (which types are annotated for the same cluster)** + +**The abovementioned coloring modes are used only for link coloring. Arc colors remain unchanged and correspond to the BGC type of the data they belong to** + +# Summarize interception +This tab is being shown after more than two datasets are uploaded. To logic behind this tab is to summarize the links between different BGCs. To support than purpose a barplot and a table is generated: +1. Barplot, which counts to how much other BGCs the chosen one is linked. On the x-axis, the BGCs are plotted and on the y-axis the link count. This plot is useful for basic prioritization of BGCsm which are annotated by a chosen app. + +![summarize](/images/summarize_plot.png) + +2. "Group by" table. This table shows the intercepted clusters of a chosen data with the other tools. Therefore this table is similar to the second plot on the Annotation visualization and comparison tab, but the data is in form of a table. + +![group_by_t](/images/group_by_table.png) + +The options for data summary includes: +- Option to choose the program, by which the interception will be summarized. +- Checkbox to visualize all the BGC for a chosen data. By default, only BGC, which are intercepted with any other ones are printed in the first column of the table. But if the purpose of analysis in to emphasise the BGCs, that are only found by the chosen tool, then all the clusters will be printed, if the checkbox is ticked. + +![summarize_opt](/images/summarize_options.png) + +**Note: The second plot on the "Annotation visualization and comparison" tab is similar to this table. They can be used interchangeably.** + +# Improve vizualization options +These options are dynamically updated upon different data types upload. They include: +- Add thickness to RRE-Finder results +- Add thickness to PRISM results (regulatory and resistance genes) +- Add thickness to ARTS results +- Coloring option for biocircos, which are described above + +The rationale behind adding the thickness is that arcs on biocircos plot and genes in the "Annotation visualization and comparison" tab plots for these results are roughly visible. These options are just adding some length to the results, therefore making them visible. These options DO NOT affect the interception results. \ No newline at end of file diff --git a/docs/Quick_start.md b/docs/Quick_start.md index 1c06801..296deb0 100644 --- a/docs/Quick_start.md +++ b/docs/Quick_start.md @@ -18,13 +18,15 @@ A detailed description of every possible input file is [here](Input_files_option The upload of the files is pretty straightforward - use the properly named file upload section.  Prior to upload, no UI toggles and elements are shown.  -After the upload of the first input (antismash.csv) (**make sure the checkbox is ticked!**): +#### Note: You can use example data from S.coelicolor, pressing the button below the input field - +After the upload of the first input (antismash.csv)(**make sure the checkbox is ticked!**): + ![anti_upload](/images/anti_upload.png) +**Please also enter the length of the contig in the corresponding field under uploads. This length is used for correct representation of Biocircos plot** ## Results with only one file upload @@ -52,7 +54,7 @@ For now, this plot is the same as a plot above, due to lack of data. After uploading a single file, several controls are available. "Genes on chromosome plot controls" have one select menu, which states which data is used as a reference.   -Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Antismash, SEMPI and PRISM data options" menu option. This will rename the multiple typer regions as "hybrid". +Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is available under "Data manipulation option" menu option. This will rename the multiple typer regions as "hybrid". @@ -64,7 +66,7 @@ Also, "Visualize AntiSMASH BGC with several types as 'Hybrid'" check box is avai Let's proceed and upload PRISM and SEMPI results: - +#### **The example S.coelicolor data is available upon button press uder PRISM and SEMPI input fields.** ![prism_sempi](/images/prism_sempi.png) @@ -86,7 +88,7 @@ The plots in the current tab changed.  Also, two additional tabs appeared: -Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, we can tick the checkbox "Use PRISM resistance and regulatory genes information" under "Antismash, SEMPI and PRISM data options". This will cause a new "chromosome" to be visualized with these genes, named "P-supp". More details available [here](Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox under "Improve visualization" menu. +Because we uploaded the json PRISM file (from PRISM 4.4.5), which also contains resistance and regulatory genes which can be mapped to the genomic coordinates, we can tick the checkbox "Use PRISM resistance and regulatory genes information" under "Data manipulation option". This will cause a new "chromosome" to be visualized with these genes, named "P-supp". More details available [here](Input_files_options#PRISM). The genes are invisible on the plots due to plot scale. To make them more visible, you can tick the "Add thickness to PRISM resistance + regulatory genes results visualization" checkbox under "Improve visualization" menu. @@ -102,7 +104,7 @@ They are more controls for data manipulation available, as well as more plots. T ## Step 3.1 Rename the clusters  -It is a good practice, to rename the type of clusters after uploading. Renaming the clusters will hugely affect the colouring schema. In other ways, it will decrease the clutter in the legend and improve high-level visual comparison. Also, renaming is somewhat essential for colouring the Biocircos links and arcs. +It is a good practice, to rename the type of clusters after uploading. Renaming the clusters will hugely affect the coloring schema. In other ways, it will decrease the clutter in the legend and improve high-level visual comparison. Also, renaming is somewhat essential for coloring the Biocircos links and arcs. To rename the dataset you can press "Rename" button under  "Improve visualization" menu.  @@ -119,7 +121,7 @@ The legend on the plots changes, but the "Type" field upon mouse cursor hovering -Red rectangular on the plot shows, that the product information is preserved, but the colouring scheme changed (lassopeptide -> ripp). +Red rectangular on the plot shows, that the product information is preserved, but the coloring scheme changed (lassopeptide -> ripp). The renaming scheme is available in the [Glossary](Glossary.md).  Guide how to change it available [here](BGCViz_renaming_and_coloring_options.md). @@ -139,9 +141,9 @@ By default, all hybrids remain intact after renaming. However, it is possible to **The data manipulation options changes upon files input.  They are not the same in the every case** -# Step 4. Colour the links in biocircos plot +# Step 4. Color the links in biocircos plot -The other tab is "Biocircos plot". By default, no colouring is done (the data should be renamed, or, at least, match colouring scheme (more [here](BGCViz_renaming_and_coloring_options.md)) for better colouring) +The other tab is "Biocircos plot". By default, no coloring is done (the data should be renamed, or, at least, match coloring scheme (more about changing colors in [here](BGCViz_renaming_and_coloring_options.md)) and about link coloring modes is [here](Logic_of_the_output.md#biocircos-plot)) @@ -161,7 +163,7 @@ The second plot is actually a legend for circos plot: -**Note: "base" color indicates the default color. Please include is, if changing the coloring scheme (more [here](BGCViz_renaming_and_coloring_options.md))** +**Note: "base" color indicates the default color. Please include it, if changing the coloring scheme (more [here](BGCViz_renaming_and_coloring_options.md))** @@ -173,7 +175,7 @@ The coloring options for biocircos plot are available under "Improve visualizati -There are three colouring modes available for the links, which are discussed in much more details in the appropriate [section](BGCViz_renaming_and_coloring_options.md). The problem with links is that they can connect clusters with separate types. Mentioned modes are just different ways to deal with this issue. +There are three coloring modes available for the links, which are discussed in much more details in the appropriate [section](Logic_of_the_output.md#biocircos-plot). The problem with links is that they can connect clusters with separate types. Mentioned modes are just different ways to deal with this issue. @@ -191,7 +193,7 @@ For our example, the barplot looks like this: -We right from the chart can see that cluster # 30 from antismash and # 18 from prism are the most abundant between annotations. The group by table reveals, the intercepted clusters: +We right from the chart can see that cluster # 19 from antismash and # 13, 9 from prism are the most abundant between annotations. The group by table reveals, the intercepted clusters: @@ -199,7 +201,7 @@ We right from the chart can see that cluster # 30 from antismash and # 18 from p -We can conclude that cluster # 30 from antismash, #18 from PRISM, # 31 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#54) and 2 regulatory genes (#76, #77), as identified by PRISM.  +We can conclude that cluster # 19 from antismash, #13 from PRISM, # 23 from SEMPI are the same one. Moreover, it contains 1 resistance genes (#65) and 4 regulatory genes (#122, #123, #124, #125), as identified by PRISM.  @@ -215,7 +217,7 @@ By default, only intercepted regions are showed. But if the purpose of the analy -**Tip: Check the last NA row for the group by column. It shows the clusters, that are not intercepted with the reference data but are intercepted with other methods. For example, cluster #7 is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI and contain resistance and regulatory genes (#20 and #59)** +**Tip: Check the last ("NA") row in the first column. It shows the clusters, that are not intercepted with the reference data but are intercepted among other methods. For example, cluster #6 from PRISM is in NA row, when we group by Antismash. When we group by PRISM, it becomes clear that this cluster is annotated only by SEMPI (#7). The similar situation is with PRISM resistance (#35) and regulatory (#78) genes, which are not intercepted by Antismash. If we group the data by the PRISM column, those genes will land in corresponding groups** diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 8e6b8a6..0000000 --- a/docs/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# BGCViz -BGCViz is a shiny application (can be run locally, or via [website](https://biopavlohrab.shinyapps.io/BGCViz/)), which uses genomic coordinates of BGC annotations from different sources to visualize interception between them in one sequence (genome). This integrative approach could point to both: - - "regions of interest", annotated with more that one tool. - - novel regions, annotated only by one of the methods. - -This app is written as a part of **Cambridge Bioinformatics Hackaton 2020** ([link](https://cambiohack.uk)). - -![Biocircos](images/biocircos.png) - -Currently app supports annotations from such sources: -1. Antismash (both json and csv) -2. PRISM (both json and csv) -3. SEMPI (only csv) -4. DeepBGC (raw tsv file) -5. RRE-Finder (modified txt file) -6. ARTS (raw csv files) - -For more information about which files need to be preparated please see [input files](#Input_files_options) section [TEST](#TEST TEST) -# Where to go from here - -# Contributing - -# TO-DO list - -## Prerequisites -App is written entirely in R.
    - **Note:** the [web version](https://biopavlohrab.shinyapps.io/BGCViz/) is also available, with no installation needed.
    -Needed for a local run: -- R ( v. 4.0.2 ) [site](https://www.r-project.org) -- Rstudio ( v. 1.3.959 ) [site](https://rstudio.com) -- shiny ( v. 1.5.0 ) -- tidyverse ( v. 1.3.0 ) -- plyr ( v. 1.8.6 ) -- IntervalSurgeon ( v. 1.0 ) -- plotly ( v. 4.9.2.1 ) -- BioCircos ( v. 0.3.4 ) -- ggplot2 ( v. 3.3.2 ) - - - -## Installation -All packages can be installed via R console in Rstudio via: -```R -install.packages(c("BioCircos", "ggplot2", "plotly", "IntervalSurgeon", "plyr", "tidyverse", "shiny" )) -``` -If conda package manager is installed (see [Anaconda](https://www.anaconda.com) or [Miniconda](https://docs.conda.io/en/latest/miniconda.html)) you can use the following command to install R and Rstudio: - -`conda install r-base rstudio` - -## Usage -Local run: -1. Open app.R in Rstudio -2. Press "Run app" button on the upper right corner of the script window. - -The app should open in a viewer panel in Rstudio, or a default web browser. The plots will be visible as soon as input files are uploaded. -### Input files -- Antismash and PRISM are comma-separated files, with 4 columns -> "Cluster", "Start", "Stop", "Type", where "Cluster" column holds clusted IDs as numbers.
    Example: (for data see example_data folder)
    -![antismash](images/antismash.png)
    -- deepbgc.tsv file is an standart tsv file output from DeepBGC.
    -Example: (data in in example_data folder)
    -![deepbgc](images/deepbgc.png)
    -- RREFinder.txt file is standart txt output file from RREFinder tool. But as a delimiter double underscore is used "__". So for proper parsing of this file, expected sequence name is: "Sequence-name__Coordinates__Gene-ID", possible "__Coordinates__product-description__Gene-ID" is reformated with product-decription deleted.
    -Example: (data example is in example_data folder)
    -![rrefinder](images/rrefinder.png)
    -### Controls -The app consist of three input categories: -1. Files upload and chromosome length input (mandatory inputs)
    -![files](images/upload.png)
    -2. DeepBGC and antismash data comparison plots controls. Those used for the first two result plots
    -![comp](images/deepbgc_expl.png)
    -3. DeepBGC filtering controls. Applied globally + download datasets button is available
    -![deep_filt](images/deepbgc_filt.png)
    -### Result plots -1. Barplot with a comparison of DeepBGC and antismash data. Have three categories -> "Annotated only by antismash", "Annotated by antismash and deepbgc", "Annotated only by deepbgc" -![deepbgc](images/barplot1.png) -2. Connected scatterplot with Novelty, Annotation and Skip rates, where: - - Novelty rate = "# of BGC annotated only by deepbgc"/("# clusters annotated with only by antismash" + "# clusters annotated with antismash and deepbgc"). This rate points to how much clusters are annotated only by DeepBGC. - - Annotation rate = "# of BGC annotated by antismash and deepbgc"/"total number of antismash annotated BGC". This rate points to how much DeepBGC annotated clusters alongside with antismash. - - Skip rate = "# of BGC annotated only by antismash"/"total number of antismash clusters". This rate points of how much clusters DeepBGC missed, assuming, that antismash is a reference annotation
    - -![rates](images/rates.png)
    -3. "BGC on chromosome" plots. On hover additional data is available - - First row is antismash BGC data plotted - - Rows under have the following structure: Reference_data_with_only_intercepted_results, data_with_which_the_interception_was_performed. The example can be "A_vs_D" and "D" rows. So "A_vs_D" holds antismash clusters (we use this annotation as a reference), which intercepts with the DeepBGC data (the row below). "D" row is all DeepBGC data plotted (not only intercepted. - -![ref](images/reference.png) -4. BioCircos plot. Here the all-vs-all comparison is performed. Hover on links gives a little bit of additional info, as IDs of the cluster of connected annotation tools, names of those tools and types of clusters. -
    - -![biocirc](images/biocircos.png) -5. Barplot, which shows how many times the given cluster is annotated by other tools. -![barplot2](images/barplot2.png) -## Citation -This project is still a work in progress, so there is no official publication. If it was useful you can cite it as:
    -P. Hrab & B. Ostash 2020: BGCViz, GitHub repository: https://github.com/pavlohrab/BGCViz, doi: 10.13140/RG.2.2.23431.01444 diff --git a/docs/UI_guide.md b/docs/UI_guide.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 680ff18..318c659 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -3,5 +3,6 @@ * [Installation](Installation.md) * [Input Files](Input_files_options.md) * [Understand the output](Logic_of_the_output.md) -* [Plotting and renaming options](BGCViz_renaming_and_coloring_options.md) +* [Plot coloring and renaming options](BGCViz_renaming_and_coloring_options.md) +* [Additional analysis with clinker](Additional_analysis.md) * [Glossary](Glossary.md) \ No newline at end of file diff --git a/docs/images/clinker_example.png b/docs/images/clinker_example.png new file mode 100644 index 0000000000000000000000000000000000000000..a324845eccf295603563cb6592d869e47b533953 GIT binary patch literal 144891 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%0AT_)@*!NC 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 Ziok{DJD9g3xq!Jd7#o;DYW1JK`46ZZdt?9r literal 0 HcmV?d00001 diff --git a/docs/images/data_upload.png b/docs/images/data_upload.png index cff8a73148db790851bb53d4515e40a06237930d..2485b03063dc67a5dfdfc08673dfdf21d6c3f1ab 100644 GIT binary patch literal 64692 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

    uc2(hZ9G4&IU4d$2p2(bdpE@x&PC9%My*rq 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 WRV1!DQpNajX=;wM#@3o#jQSUeQco@b literal 0 HcmV?d00001 diff --git a/docs/images/hybrids.png b/docs/images/hybrids.png new file mode 100644 index 0000000000000000000000000000000000000000..95cb17f444e0c2e62f58a39d13475a1529e3a3f1 GIT binary patch literal 35988 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 IM6N<$g7-FC>Hq)$ literal 0 HcmV?d00001 diff --git a/docs/images/improve_viz.png b/docs/images/improve_viz.png new file mode 100644 index 0000000000000000000000000000000000000000..f60dd2c67926459b8ef09dd3abc770f4fb959415 GIT binary patch literal 42218 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 literal 0 HcmV?d00001 diff --git a/docs/images/intercepted_annotations.png b/docs/images/intercepted_annotations.png new file mode 100644 index 0000000000000000000000000000000000000000..6f488ed872914be03d4e19186bc84f562396c477 GIT binary patch literal 35002 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 literal 0 HcmV?d00001 diff --git a/docs/images/pretty_lines.png b/docs/images/pretty_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..a136f3f12769f7baecb2370a3b2ee31b770ceed6 GIT binary patch literal 36465 zcmagFbyQnX_bo~bZD}c9yh!n)#T|+}6blZ;9f~^?4^W`EL(u>sxVuXOp}3V$+}-_! z_WSPry*J*tH-kTR!b$eoYpuQ3oOA6H{z*w1{T1;mBqStsSs4jcBqWqoB%~**s811} zETAR_Bi=AriHmfZv|t!}IO6KM-wisxf_HIGEtA`YO1JPcB2&SI49D(^3NNTa{SF zx&k7n(#R8Hcdf*<#JA0+%}JWk%=+U)Q%rfT>Bh&|en=$BADj|6#fmpriGUH+byAyFX7N{Fg^Wb7{ZYN@$r@!TtC4ZK7V`k2sDLK6YW0lW-?e6o^%3&OJz=&ETB zv9chwJ+Q01vqRf+1=n~-iO;v{?!xRw_ZMQ_=2_h8NGsF`uK%DyFmuiVKDz=*W3@za z8Nbs9WPC^7xR6G|e)+?gZ1t|m>x`X_jxIYR!(l*R(YehqmI4(8;Yh>_OQ9!#<=+tL zGkvhezac6=D)`?B%LNPYKSR*qdd(PpXl<5r{G}nj>W&4_X z82J23J7PD2KqVckh?KcDQm(+Iy`St;y{Tb*15XF=z|-RjrIfD$F#0<8DBoG(K& zG(&gk4_-NQz6udzGXrc>Ju5gPsD7`htMBe@%`opjuU)G{g|qd_y8oCVqtNbPk{<}H zX>`y`E>$<&iA4Xg<9?{e2i+*ph@vWAF7hq!>cPg|%4R9|o9+14!vAQ8k3}!XD&!>c zf3j3-L52Y~)stTNO_!o&oZg;G@Yv-NE8Wq)%%mOF*CVrhQTuMpRA<^2;&vKG4z)>& z&@)VX&M0RQg7~UVOS?Lq^mJlj*1_Bot{A-37Ne?KYegMvQAPEs&Eb)?xs^k|9h6sC)~s{>yS}(i`xdv#+oJyp}fQSHXKE7g|wQ9fP}3X10AC5Oj*1F zf&N2cYk9OquDNg^p{sEOOG5RwtDr|&3S@f`jWIf=AtJBDLq9c@iqd%b?7j0W_Vn|| zrJ;(7eRA^67%p;V6bee_!ecdevDrZp#S&CpV>R6balGy>!sVFqH^)QCu@`>@#bRR; zU|rnAM$r_XbtdBHg3?bm6?p0@vWQ}#blUrH2+(Ai5r#&|5Be=ww%-;Hn_WR&tZBN7 zYTn1-AMn$mo>$p&tt`}eX%yJ3@~1=DK^&nx=`G5d^)%C1BkXd3%#_#%N3{o&Fn#!^ zgdy`5ouqcL@<>ha3i=hEVju--R#UD7ZGl4&VkoA;0v=-8LCkCBqtrh%JnuRP{W94a z-+sTqf8b0sy`6IT`=@h|W<`=na_WtJ5Cv)=D2HA*hpE5~l5B z0{~=DTkB(IE|;qWnIbkQs(BUoDYIMyN0ta+M=w0~sRqbqTlp%G;w|gJe1Kf7y|&-% zQ2=v7f>3fSyYjG-@*vo(zYSI`dT3>pZ0)7B+N0-InGYqaED$I!Q(=s!sK`!|6~{|6Ssh&Xv44`TBeNETghC zBSLN^kuMbJ?Rmk4%e}Vig+G_2(XShIT=nGkU)&v-OD{~(z2@iYMmXa1cN{W{s3n7T zAG@k?0zAmBfo_|A1i&Hjy1Rs9v6eV{oINJV+pxXX+Sj})NrQdY#dlpkQ85d<O7$;gllM=-$Jut0soYfs>=`<;yPsjmSB+ow+{gNp3yFQSj!A&Snjg^r*3l}A3 z;j%=OG`k)wj)hS=UCbV#=q8G_`$CR=#bw7POt8}NP7v^*U=}Zrwd+d5II*2*1`x&4 zTT7MGzyF>XR<8D;?S~0I0nf|8yA@kkpYtgyH_e)!r)eD5`Tm_0kcG19jKxYyCk_xR_(LRWw zZG#IxZuGC8@q0i|F#80C$nlfNewj0k(3}Hyqp5N|0hi1I@H4jpI*#GNVgIviSb#Jho#l_GGoNB%%alU+5(n zTWFi@B;tX`t%`e%m+aQa0apIHDFQJx#uLz2)A_nTg}Je>bd)6WwUg3GMzCV9monDI zwtvpGIXl`IDn+E>;BnE&VRJE#Bs6)dm8Ahazy%?ru*oa913pxCY-DI3hiy{V>_ z=*wdxLSLP4VWCJT2OA6r!_P;5j2o{w9|MZQfy-)V!ZvC5eY zfy$+E*i2<;SL5RYoZq4op%?YqI%;tjqJNXCF?EjYo?HG=b9)A5vaz40HY;WE0C%}) zzjD=L0wl5+{dxKk0+0vjLNz8wbcgy$Yj<$2BY{7!dW`HUFZF~EgAG)pbb4oPeRC++ z8cUjxU0q*n6D#zM;Y|gemX5_s2ue>p_){)}oeF^x?6ESmIFc;0g5NuRFcVEnizoAm zuDkN9OHOfZ`nt8PDJk{c>fjA_>7IWoi51ls+X4wH&X*ItNWQK{ajjv4XVfZX3txdG@h~@q4>alrmMLm5j zq3O2yw_u>eA`GJ%LTdnynzmj+-&th&ETX5@FfJ<5lOFZrZE?(cK@kwxKt+49wjeR? zs?#_2nM_7D1JZk=1zY+v(-^wD5dpPkh+Hm_uQy~zVggTE+pdQO^lLNW7Xt+Dw0!a*BpJGgsxmNWjSEIWmsL?xw{}~!t3D!U-jZ6dVJ6rJTfKt-B3u5#?wt3)?(NSf$2=kYZP%M zwZ!bxfO(JQXpJ}bqeJX&>4{X7p+=?5_~}6_gyQ>oDtP7ifXr2(dkP#TtDmAdDwkBB zY%`9=K+H$EtduqcDdlF_j-%5_h$nUUeQTWhRMcz2-KY8m%f7S3kI&L$ZLUBLo}Z5~n2d)?=00;!$Hh9o@73u2Q@Z z*Avw^bqR@U0{LTgjYc?LbgClPyn$!W_iDBH8xMwhP?M;`X7lIT%2JmY+MB_lw)=Tr z2)9ypHA8o8Yt2vh{-Qvm0duzbw*<1CvaHplEkF3j`R z>|`sz`pLFf!^xZ+XMjM|5;I8_w@ESVc68k?>Mb8LUU||Kwj*a@P?(Q8dy08esDP^e z4uv&WVw;w^N_@B1nsW_1Q6nbf&j()8NKmfqESlc5mvF;&NTUj7!0%9w&XZm0+jVf|HO+B0h;NZeS81VS<&mJ zXR>P!%Y>^GyKc>1>AG>DXASlm)Srb6C3qyo;^a*ckufre?Bk$luHnulXx{WSLcC>1 zm>7upH|?a&_FcGF^lcV&NUN(#9cW3E7p^@O`kE2g5CuB5>k+E5bqr=z(l=RD%V^bt zdV$KevN<>7nAJC|H0~VAKfg_c>m;cMtg}v5$pM5| zO?(q;mogPzQAiddmp5<2B9n81zy-W6B){>FcO{p zgaF8usXewMl8cE7<_^6U3e=|Gn9+i@X`p=trtNd?9ydNWkM2bZOp(Dtd7v{TjJ`@t z$lvZ~Zq8DTY5PaRJJ6XWl#u`OEu^pEC`NdHzkw8p@xMO&5tQ|Rpy^WPvnhqZwD^R4 zWw|jrnoXQIGS7m!b!WSIm|ZQzuXO);$bTsN2L^5%HT}%uGMM`GXKs8j)M-k?vAcY$ z$fwyfm>$g}_&?Wuk<{uQQ|Gs;!%?w0V@xeB4yBPFQ%x3Z9PWz0+WQ^FwO(aW&Fv@e zQkDCslSZCBiIt6M&+lAAl9R*rZRxYu+T4ZAvs&@`#}Y>C0{Fd!$G4t!V?&hvYLm@Ll|AV^_mto-D&i_D zeX4c8RAW28=bd-6gQHx=k?))W@wyoPTC1bz?b-u?>4*sTl`kGIUqh?Z^tY_0{aXyh;#6!hC^*z+- zmsV>vC99dq)VcoE$?XNP7+RV3Ki!0oqnO2Ct;|H+-iiv_5#t3YGtUgzkY|QR8|@Jd zl#yeJmPt#m)E^*jfrkS4Vq986X;d$O5_Adh5iC@+K^p`I* z>ubq^`n9)PQN; z2(*`l`L|%^gc9Ux_S?iF^ndBl(E#AQ3(xM!iJuvX<$#>i9S1|4n(q{f5l+7js=I`ug6X zUN9v7yu9>i$HR59siEjnMJ^oOjoAW|8Kbht{*{YV0`s zw3{7^dn5ae0-nSb-Tx?Q!3~c0kWJf2I!{lz-R}@L{|86O3)bnjmUF|C4f31v_Ir=5 zVU88ue;OK6aEs%m>0yjst%yGw(Kz6DTLB4}`opzvJ&}_k$&3_3`Ue;ZRmzeSsqKd=(l?4f==qVjnZk6nwX!2MauB<*RxV%AGj^jc zQ?rqYtyW~sl8D~rL6!a0{Iai;#HUL1jkK~C9g4*go7=~)4VJn>(3X~#{K~;G5|rT) z5w9kyySa|#wKRs)mTuRBBjfPSO+*+h9*n1ES)VWHt;gW}bx2p!ulIFzvJl7^2L#6^ z{ZtIp(=5nPC5_uX(mE@oJu9F+%b5I9oQxhn5~Sb=qAI<{r&%}M-yfYuZg5&50qpfX z+{Uz%Iq=Wp963lXf&|YMepaG~K=}LzQXgc@_jDymN~jmAdJH#|)93jv&37A;{>C3} zR;#$JU82s-jgo-AuYLhTQoHtEYT+^`TZ>dLhtX4PN01Pe{cEJBCO+NP>f0g^Mbef( z>&Xv)T1}1~ygZM3dySIee?y}If8#BV1AlFuY$-&wteG{lB=1Vs+{HVum^L(7e<|5e zlyGkP6_Ve|fz3auwJa0TDw0_zXSX+I9|HvD`?bT_JrZ{6 zo}r^#u<_Q{P>rhFn~Uuh!sG7QtgKBl_P#?R;9sG5@~b!e?}hXEdj!{o@kWV4#CRei z@I6J4oa8V4>gP!J|GD!1!-v_e#*<~Wx}tzVB@HJ3@i)SrEFhJm@oP~06QqxS)#a}{ zUDKu@9z|?(#ht7|CoA<9{xr<^XLSllsH*?e=?}slS+KbR>Gahp?!i=N)p`qxOs{qL z@4tq+OfNiSg7UwGbtJt)>csq4N6X@%%vE)=c6O>Z>8796sSjM(uXV3k_`Q;(z7n(gpUe65&ld90#dAr;E&45|ZJ5E5S6v zWZFVR7(>|@a1?B%@{R^#se+O{1hdN9t{G@(%E8O;rXJCIHpj%y@`k@+?(iu8O7p>WeSLknbV}bUx)7T!FE6jZ>ivNvXo|bI zR?*ldF{@Tys09c#eT*mNl(loIafFRl)c8BlmxfX~#N)QVB35EuJ2x;e5L@3d`NqzC zD#1J6THb2uIW99JgU+CV<9i>wrFhrIgLU-1kv+q#DmR;-cn%YE{b69VNnQD*>z2jS z{@lQ6F#7z?)CiTE+0yZD%UIuW%VniK`Ck`M)bM30r4Q5Mgon0jVg>K-+Z)ELHAzlQ zwK;p)*^OoI`Wj;39UHiEwtwokGWKwNEyDF`I`iq}X*Z?_uy+{_heHpJJp@H=55=9F zj)5e9N<=sdgmriKoH%_=r^=wtwhYy!L*qCaBAHFvR=;AqeG;7D%!5UP>^@nh!0LI7 zv`N+kf&u}CtPw_=s0gRI)Ue2thUEz2u)V#BxUfA*L_30BTN+Gh0R{LfE*`&7@O+WY zi9fdfTQlkvo_6NT5Z$RA5%Q{G`5R$RH6y7U<}3}?`IK=Tt%~m6xF}sM_45RL%5P(rl!@|SUYq`}7f%&9p--q)#K;QzJFA1Mk{ z6MpOqAJEJcZEf9oftvJ#Bq(-Ch*%?rr3{*`lt&qMHHVILYWSe&f9Ew&6}=wcs;}Q& z#)7XhpY8rjks}lydxFZWcyPnxz)dz?=%qaD3P|Ll!|U7Hb>?;uklBe3ALz_~gAXxP zUIFG9fYd=Pa;%oAp4oMJ_$%hAS zRjJqd9-l>O>(QH=C~zcUEvf4UQ^~yEhv7|b(OOb+5~er#rPqWOzAbSX_|Vvr+tt^U zfIK50P=#Jk5SxuSDh(*piFL4?2GPq%qM?)mo0W2x`NykP`KmUUzmSi@*PJU*UNEWE zuASqhq*Tn9v#!GN9^?-5B>Dyr$OHnHzNKfEn-h6wipP%n(@opfra;mBbQM>t;V{Ds;D1n?zqAtCbKoqm{-G7b0)Xdy}+m!XaT0)df{Bx^^i`rB_Kw+M+~c4Zk^sfz^XTHWkFy+&I6R{L2P=t~EnzAX$9 z)zz%_N-8?wtGK}FQ-?y34jiUmEe%f3ao(HJJNu&a)KK*>?VcP6oXK$IYh>Lh1;l2K zFwNx`lA3sDmZ&2)7am$QyM+RLy~Vf46-ivJS4hD1b_@*aYioiA*phB?@0r4rk@qen}keuyQRYWJUoL$5E(3bMapo*@C^b$bLlzo zehZl2>$4r0rW|mmfL39IQT@`me6#9}X>ThE=cmYbT*&3vXhA+llz=#Aj4fs67bBU% z)bX$4DZRAKM)HC1!JqJf!$^Wmxcj27b*)#h-8B&c4M#n~Bw}x6_++&f6Biek;0R_9 zW2_8yq8z!;p=hEU*LHVfT3~6W_F8$N-eS1TZExjWBKyKMly;!f4hpNaFB{#hF zuTE8<4eI<_-l7RAEHqyqN`3kAWdI8`^{j23@6EZ;VFxnrZ5alJ2vP%^OOu3!PQhcr z(6F|PpA)zam5BIsYHjSHuQz>Vm1&VK(4G2YCjcphx8-E~Ex*g=>DD+|j5KY$Rqfow z!~~mPq{$fCN!^B>U{O2#q%=C9V0kTS5<=i$leAuL$ag$AAkOx_u`&5hczs4i-P2oT zDTo>+9|?Ok4~R)bF3|NwIFD`@}7X4d+ifX2~rCHf3lodKkjxxM4U7c27yKXfz^ ziQ@DR=bt4mZtng0`jH!lu+nM>lm#c8T6J)tU5_#z`czl<@T5WL#+^8GBhzJTl*{{` z`RK&qrMkwu)zk3xyxQc9VZ55KY}H~Hegx-R#u3M8e;-#QyNpUXw&mjf+Y!MXf?lFn z@O5GR4XE(PfJ)4=OZM`TfUl(ywjB(?2@OcQp|nyWPamnD5;BGrD!ALy!Qo*!lJ$9C z7K^j5l@loyB~G|yRdCXuFXY3W7}uly0x9g_g-f>w;&f;<>`%5}dMPBK=D| zX;2K2MBZ)u*>AH|TVTH|-)4Nelc4NB&6g+}OM`Q?2;$O;Of@@q&0eHH*&}sAtYP>u zvvB*RZDv5=^QV466~tp$fH0@#1w+59g6<{484h^XWB{Ih7C1BANB3(9+LPpqR~T5~ z62`@=Wozz?2}^!u4CMFf)*3)pr;Zk~U34_0*;u2Q$Ma*W z;Z_R93>+dK)}DT(KT)C^7x{e9yJgz7)=G@$zca+*uxK^33XiQvr~qw0EL;iC&d!1y zq@<+WTwGrNR%b{&I?`kp`h{XrJ!{K7kIFcdB_zPkKIU*1obfJf5v$Yf^4YxdiV5Fs z54LLF&5h9SC83P1B2YN6OLB1p7 zu(>P$2!zs70*K5!0O2nD{Ey1QX=x~D@Z{*y$(xSkPY$GeLImdxits;kJ=yPa2aU~2 zZqJ*E?u=<2%XZg45}>|gn$UfLr7|CKKd7XO$Z=K#(>$M9!MmeHmjN8!i4i|;81Qa? zee7_+0*DhM)V8nTj5_RFIfve4uiC?au)~eEB?a$>YoYz?5&c?;H;my1Oore4sNvnz zipfgoE|o}M7Vb=wPlsI)fmUabp(MqXn(Z6kFYviss+Vz9284uk|1}G7xBVhWhV~Ov zj=#rS(mD2)wl5mn-A~=HMu$~h)AX|Ym>SYY!PK@t(1NkPNiw9fv3J*=i*{~`0n0ZwyWp?hGCLjc7+Ftt|$2AU<9qdv!lxT4Ux*KaDM zPfRiJId8eJ8>xy46|Ja~25p(%qNAhS(oz_m-5j)Mi;z2`e?$JS%U;g&^LsZsEJ(XK z7b4<;Dog61Oa1D$Ikl%(VL9`dA`Ok;saaQDH2D1f<{;*agRSi@LI@GrmTKZXFa`ON zf)F(G`L0=)7Z-w)Pp$|xy1$BaA^!ZhhI>r#KSp%{_dbBs8%G4#ggikI`!cQI6zyEC z28qh=z+E9y@84(Mjn@l$ckP)EUt#_~-n_>jbht41!_R8#_9OBcswZXaz_k8`z>DX* zt)~2`sFLNhq1il81fx}nO;LJ|blYiM`IgTq72b} zj=}D?OlhT071WMIniEglvXvq}@;^iJ-`U(ODlW$UTNnhhSle%pHQTQf^@RJt!EZH2 z)>Fw?^|Occ)UcySl1s-E{4@62M=AKm`{?9r%act@`u*o0S@Vh%bNH3?+L*sO3r((+ za<%*OX(7Ek3w>{(43&x}>z7u|*!-j(lqRjOzkZF<>~F@^&Jfv*nChkn@9fKiM&rGf zImr%OLF4K^ytppOTu(ZJm))A%FPG7>HeQrfA!>o4|J|AI#R5-Km@}7TdMel2pq`b~ z1f%1ct1i11<+aaQ-1V)#jjN^shUVERasQ5Pb)x3|C(30TwCqx-FOTw$%?=%yyNr=3 zM+{o05IVXcG;H3glUX_V#g5OL@No&#k}bAUEw+6n122G^GVUw(Wqz0z*V$#Q4+~eC zlxZ}rTlTbUQL+m0J9*Tx0WA0w4K7ZU(5(+)YCbt?zsDJI!h4otjbg_o>W6l-@Vmhp zLgVT!dZ8|_ke*a*fnw?e+S+^?@0vMSpk|uJ*#)u-{_1f4A=ZfzrMvz_TdxP^vTJd* z?dsmwd_XqBhT)KGP!bc#=G$5g!EDVbV!X8)4om`qY7%q-=Wh;$Scbaa4a_fFz8ehB z`>;o>?WSp@N4iQ#{O%kk5#eDUdJyti1*iI#4nom*7S36paaZ207vqX3t&yamnT({ zub7oUgAYAbGdarlZ!GTHV@9?MF$p`2l>;{gE=CbyXb(HhhW&hS0pN@Z&X#gY`SZl5 zP__$+m7*dN*%P-GNw?kn3?MC|H%M`bPWn_zId|5PAc?i#Ll6lozlkZ@D2@ReTmM65 zV&ykMx1Pp*kLsfaZr8Gl=kdo*Syx+KB_T9K@Mnwo1oi9czTXG=!2pm0=aeaJtBS!e zD1ZMw5AzTczm6^M|Db|);gpoLd>kf9ndaRO7MG^(FuL^?f?NjoFRAIFZVBwFRmJS! zdcu^xk|qne$g#<~`s9t>id~(=f`@^o`}cO9=2>1rmGrSg<;?G|sX@DyZMUWRNwU(0 zL^U*-!f<0jxzxxqpT#It1ljH=-%l86Rueu58EoI*UTbqDU+A7Za7%~p)B88)WdQe4 z<+X;W;ltGMUM5tR0;GGl95vf(0p}dG($@!yO^NBh{TGV0n380k>JlS;%(egtU++#x zzhJepv%9lBu*lMiDGv+g3N>4d6tzVfT(Ba z*9QS6jIrvB-Yy&T*9C%csx^=l8_rc)TyY(UaP8{C>(IAJQe&#c_5JbhqCF_NsVw%_ zmy?H880CFY6hnd5Ja{@u#PwySLk=lZuYXfbmei(wbJacBz?o&jFDPf!LNt|?jLW+< z6#uS_N4wOA!siHiDKdN$lyzR-*wp%aX(3~a1SYYum`)ubW3~=rLmON5($~^MLtO;b0C3)}lIwoD@-@DhUi5-&*Bm`K6&3> zi$71T57Z1=PV}fN2Tn81Dps5F+^MZ1OSshB^pKVL@o2V>pDmo1m4{mvQoFImd+_A7 zr;jSfUOI?zeRVYAqq=daA6rWJU3zW`A3xe_+r$P$N0V(CAbtJRpHHxEH!|<>$scl3 zYVh+Epkx%q{gC;Fa=C3m?=Zmgm)f?I!Ekfem(oE`F`iTG49^u>>HVFRZ1tByV3Ppy zhsW*`YQn*9|9R--!TNU8{z0p}ed0m}Edsl35^$i=hD*P7!n%D5F+tI*-;8viQt-D( zses???uRc(2xp#exIzTh|U)F7naUD(u;Z_`*HiSwziuCcu2TW zeLh>b)p3vHkYI>qaOI07ezBdywF8i8_I~)TOSnVo=-sacQaQaG{&zY5u>F6rD?v^4 z52u`ZXI6I)OpCd_vWMo41b3r|+jCCZBYWB-rK=Xkg&)J_YT(Hg{dI|eDaS?@rBjic z1pn#*syD4rwT$}VZ44JltPlSm^!5xwWtq9-=+iy9_lR7(hlMP{>BV}O;zs06POXLl zuZ*0f7Q_(Ev!(7Z%~GuZn`h-1I{jE-G0^r)?p!Fd0oDk!{FeGa(EiSgOWgnT=ft&0 zNrjakgAMg1{zxhU4I}V_L0Mbvg&?+MIMqQM>mkN_L22%l6ZBC?93R8^O^rRmq5+QXidZd7ui0r97socn{3HY}!mQiGPy8A5Q};6a=d!A@N@Hy?EAi_$z2?$+cr>_c!_eIgnsm zue~9ULjiv?kb?I=l0@bloj=WW?^E+(8OkA|}G(691tKbG#$fUTzl;-aF+MRMZQc7toK?e|-iWR%{zMXG{#6>GCu-rQehunets{6h7-U-B-RJ-j!0|z z(k5Nw;Ws@d(DYOv0|_ZO-*HcS@BSV_&@St_muec)dhAXjr2OX2X|90r_HxU{KlOTK z1U7TkE|PUG=T{Q*Eh0nB851zFkJmcn(%H?8->iz5ObIz{8#A zuN{oJu~1PF0knzpXFKY|ssovY{9{h@{kYEXF(n?hqT#)*-%Kfyis_>EX>-iR{Zf5B z4z};*QW%^oDBohzyn1h;xxTuZLr|~<47NcyrntBmRo`UQtr?SC`1j1r=8*@GUQqD1 zZr)yAMh4YI|6MoYJB#g$_VwNlunay9K0ZEFf!f3I%c%U?+OylMlb~ekPrpT^&0BYF zcONqDM*O3Ps3}_(On63h`nR0Nj?)I}(3Y(jM#{$ojA<{F@-;CvZF9M>P$>{}xW*A3 zT%yg9v6%5irK-zsS9)#NEa+h8-tQn>TmFFnTc!T4C&q0dgGizZHI$xy1k>8mlK0D> zjz5ORY3b=uC={X4`YG`7GSttvn)FA*V6XrheSQ5G7;h`)_uLm;HIdNJ@Vd$T0ARc@ zay?D!+UsK#{{t#^7m_Sn?>!OAY45aTWK}{GK1}6i45;9V?`Vzm~JJGdTzK>hEZ5XB<1SrDlZT1$U4e;F8Ia4%Zq<`3UzLN z-hFpwX$M|ZL|-!*tD&ixE$rJ=?|#YZgOEIy1k1u#Y?W_*RA3DnD;+wqU5ZGI#6H<-Z~Q>g0lU*&Ua^x4sgOHtZRu4 zzm~(!n#{TKYwPPVVTZZbRIhe=4dt3*vNL?fPd`rJ5$~S6Nv=2=UN}j_D`%fr2)zSs zY+g7e+x#h{z=>6$4IT{skV+BHCplIzzk#;&?Z>B6hBsooR1y*>6*?)r#x$eZ;D^Hj ze$GNNZK;^H2ritQregNzhREInE6S=cW>O@~Qp zS+_l?z7pS;YkI(ZvQ7t%t6K$KzUy-=j8aarHe?-qyWYYmBC16yg>}vy_I*F=N6RZd zm)Elaxo`uOFtydKLi?B^kfzr)NOqB&gAS+K5TB|WRoz@o?pxwkePYoEs61ptAQdsg=gX*^LyOHQ3&CiSgY!DXJAiH4^om# zkSAl|=Mrk`@sOB#Z`K6GS*%T`4s!mcp80l_EM8LX_qiL{>@XV;`a{kWq%YkzmbvAa z==zpyYRS%*XOfh!V)E;tNzxyJx)}bpSYb4jXUF|6jUyXcKkR8{cf4T!k?vZpSgRJWA zDjSWYd#aslP|aGZ=Qes@t^|8~UH)c#Mpggyy3iC0G(WHW^<111xdR(n!H}e8U2-2< z*Y*cX2&a=*$rq`gES$esB3%#q_khsPE_ymoiZ( z*5r;z6|Ldya;dh!Hrq58tf{74x(cZjk6lV%s2*fijQKT6(cNjOjg%(wCZx$A=tB=jBS z`&r@ldeuP%Qjv_12PL?%joU<9qgQRhz#x_ljj^u=egU;~|3I&yG@`|z+v4Hq;!@-O z9J~DR@US#P;@fC-U8vOVcy74=cSX9+>Ud*IqFoR{ZOwLtI+P zbA^bvD?ceg<0O_;y>VsEkYpO&1xjv8;1t5PaniQJPdo#FWle^ z*Q~V~sINjgzHt>C%-0_rlgj}&CyLe3(a~SN?Bvk~4Cs(veg5V#7H?P1EOK+(uVxt4 zdi$CV)fa&|v-hKKM`;n5)6+K9q)*-Nv>)+wBwnQPKRS(!1y<=i;HY#dAl$y`ju}i4`zgob5$ch1wNz>B#G?C;1 z^GbSO{Z2%O+#N??$^p27X*3B6ete;%5BGggaByH{@ouI>;6F^E(@)aUVGH({XlRiU z5n?f?ctpInP0h`Ta%L5zeu1j9dFnW^9aa0I>tu(tx&g6~P0!gO@)K*@I|F-8o+BFg z0xSc1ERJC@&Xzzgs;-+j2+uM@N+(b2VBO?!rjT!1ez$)WqA^8T8eN`{>f0Omb+nZEXKxfrk_rNs)}^#8(;L zf4rwP;hxF7p;&jm(!UUf5z!<>86!Qhmt!9@vquY3o7g)tuqN3eTi6G;g-513I-Y^(@ zoaE@czjWvT_U)#Rmces)Mj)P9jr@gy-S{rK+O2o-f zCH6T5x_-aau1O?8MQ!*jeOO8Yac0%z3Rhmj!h23L%lC+P@iuF_;6)dK;l{Su$BNqM z%8EMKpEi^ueEH+*S%wAfJqr8iE|OomU-dqJ`tGNQ5co^xqv`D5j*gC2R#uAKosL(C zbkk6?Y(^Qsk02cr*?5p;~GnCv_>U-E3yTXHH-K%#Q*eQ`z z)EA)~UA^8!anGPwU_@pJ>c2o7kRXI!8dSz@j!gP{tb$y@I{pvlr|p7;dTw`&A&x6c z#n+#LkARd4w5IvI2QAD%KX$|}c!?&2=m*94BekIz?HnrUJ70b6K-}5IqW{C0H$2Dr z;Y%{i8rmqK?<-DoL;OzryX=eS(M=u>%WcJLC0kjQ&)=9}~#byFGCuBjzx47XM9bSwr)0=#A5S?=tF!mqy6 zgqHLCX%2?a|86GH@al%m@4@RG44s`%I^v$8;iF8xZKt%bFuW+W`Bb>4%l^f$$~}Ap zv)jO|=NJ8aveS*S{C;yJ_8XJTu_^Ov->bFc?l(+0vIS$MrKM~bJ9nl#HuKGG_x->E zhu$~e+Ro7#cy;@+>|-{e2b373CU1@(Wt@q{WrR5LK_yrMIe-NDKPQa8brDif^zJ4O;(X6dPP0G)qT_f(jO5`Gru*Ns07$gFh)3`njH0|!&1A5;@WdL7 zO9zuyScn8lpfvlsW3ESmy8X`#gJfKJ?u5F!(Nx2+@TJ(b%f(>I*?l7^N;u&%)Yc9T zm8l~$K~^jTt|lQ+}tZu5J&`}W5k5({ME-S28MakpcRIY8da=Aj`W z`YLQ-D)MjG%3f7_wQCmH4<{4;>6Aw0+gzQz0#0HE8YH8=;kX-LpsM_-A6$x_B7OY+ zc>XD+sH@AXy9-E*$pl>G*JVzE!z1q+#yGgQ2Gyzx$;}i+`eri~=r)w(-XNUsXlK^b zTFQIO18HwwJl{Q^nYNH~2yWZ|H91NHzmGcZ*{YDm7J5iKGoE(pvx`*7u{vX2LI;yH~dmlzb=>|a&;n3ZkN_Tg6cQ+_U zLb@BIyQCXQX^?KoLwD!9Q9r+X@Auv@UWR{&!?E^Sd(V94Gv~@NEfJbXv!izH9chGY zi!AM#KP+_em+}s?x8-|me?01*E`K0ICn@c80~hjPt*i)}BR2Z9jzZkVpnP7DAj6PB zgC`>c{vY0H|J<=@(WS|I9X&3WHh<%Gcink8gtLrYp^tR8LAbAlkq?5vwY=*ESSja4 z{^r;B^bwQ^+JQy>V(pr}oPjy3mK#Yb>Q*cn&bFdfXNe+<&_@w|>}ZJ`Po?&bovkBx zgkOjnuxRM+JSUx^NrxzXH2fG*rYdh;AtMVwsx!-wAlwLZX*+yh7Qh|LPYLm@inwi2 zd4#vxy=s(^SHuCu!Cme&{lw7zNCj}A@2;WRKB)bxGH!;?kXT<6c6~tTSfR79vS*Cz z`qS$YU;OSYg--XhZ)&>M)%!ltVK!y#arKewo>;E5bB>I%JeUU(DU-3&*PKsma)Jxl zdT~Vk&&r97K!;9`XgO7$<+Zo=z#$^{&-Ok39EJl`+{@E(mW4ENL9%9d(Hgcq@1H6V zQ^36piGCRch8Srls*?BY#jZ*$KSPA9#cL4 zB5A_=*7|@u`lYO!qQgqeGH2})W!wIfLa!b{#e48xH8`_8lF*h1SG$T;Cm+OJa*>OE z6~zAZ=E2Kv`Ku{w4yYs?B_scd!r!j;BRoT|m7AoTUqA@h-|W)$IS_P`{;2j%zp+&W zI0w}DvObphfB`MOUx6J$_}qN?z|D9uEc9R&(=D~*?v=EbN9py1c0tu2JT*BH2K~s+yQAFUPq*^kcXjnyEWe=A5qrcN}ay6KaUN3u}05F1nkv};QG^Zu`(lGOkYUepq zer%eXtw3FdTU24MR%U?edH~j3bR~0LW@8_HaU(wOew+csRn`3l+1DkW+y>d6(Awz0 z*LH&T7s;{jc{hj z7ICaJ{b&;jiiHjlR=7cQJOf`T;Dfs2S%UD{dzj`3@*5jscFdZI=9*>4CM3Fr=QbDf zRbO!P%(FpdbZ$Rye)*i{1q)dD(vIha-HXX*Iu+wy>)QjiqHu93*(%6iCx$;~0ldy5 z`x~L8Q6m?IP*Ot@ZkuXex}G}e{hiuk!|AcF{^b5^XvjNKvW8J9k13pV=C6XIZq~81<1fw~awGLUK5r9BfxPwpTyq!?ZGF ztt4vATw`A@P>e$=qzPFtg^S7*#J-{Z?-k2AEsN8}?~2C0`(QUX@bK;hsD9SKcU*_@ z2E5bMa0sPu;?ZV&QKtnlcSL`jsXBUeV=yzQ+YO>FP9!EhD?|_o;^hg&Px&4`@@vE4ur@YQvoL&z z>lhVweP3j(0%pMf^35mQHg5XoZf|7>ezC$8KSS1^pb0bo#du>fRB9(Nt+dV5Z;0Fa`4Q*e zlP7Ntu`fHd#b-K<@6@UI%qK=AWX?C83vB(`YHh~*VNv7ob~=!|UKpwKO4;q@5kUdU z5mRBLk5Ihlg2HuM00E4U9X<26+j9~OI(0- zh|seT6}MT7!NB6o>nPf&MDT5ZzW<7Nf5PwyZH zM9d#JcfD%+AbK;?9NQXF3~1{|=*eeGxxCz&X&mh7JI6B;^b!)--wmW@zeWd zQh&(>1kvec4#-NPzI&BX3=)Xq6S4#gMoPwXu4cz4scpw0Dt#efxDH7JFp65#$Kig>xV&CW>th22Y z6@3liF-tuq)K(aN%L$_8qN3&M?-r?A6V?2A=+uz{z(0+Gdx))a!>))N@vK-@!4P2fN~%#jFTZirW%t zTs?R~xvyO9kXEKWkJj@=CHoH7DBm!&#koRpx7;{Rhg41-GOOuRgGyteoir&oMW9Hf zqqB6)LO}rxYH;S`T_&u3ITZ85fIL6Rp(n9%9;#g%CLi_a4N?Wxs0aHS2F)txp`B09 zS-G;Lehlm0+=YT$_cVmnUcg}iVg<`RBzmH`giH8k?rn_)lry($mV``3X2jck>Y^aW zjuiXXd-a;>M?K1FtjRCPixS!V&8$?GYzb8K2uYznjl;U3cUZjN6;|7zVlOd-@Fn@M zW?0ldOvi&0;&aYst=ayHkI!n*#@VOM4TX>EfPKr8u&J_C8Z9#ok7E**4Jxa~5TNM{ z(C7&}xCgT@2257ftTN-6XGRh*wcqSTzpZJs6?KM&!{YGvnfZ5A8$)8RijGw7 zzEo~;E$?(bhfjRUA2RsX;8ZFMf6g9fJXKmXb zpK2y4!;-Atm=ntBKvZDoE4SjKsQ?X_TjMhd_QMUBnxP5duo*p!FO=VdNCv)|&0E(! z$&1ZYil+)|Zs5>1CRcfpfut{$!f^lg1yyn0JwfU0A_=B?->C2iKik>PKHnVefX)Jy z#1{;7BD}Q6pHkPEHmbXR1Afn-UlcvRlP+$#kJ_B}tyF%LK3_F(PZzBfpPU*Ol^HcA z|6I}yGNyT*Jp*rOn|`zj(av`{;9VRQKo=k};A4#M5>3YKtBKjGHXpZp&ESXmWC!b! zIKH0e1uCWS6}atZ@Rv+{qY;IhR;y;eS!_-Prz~6WUJsG&?zt}E5>MK=Tb>^T#8nxl z(&L6+L|s$In*?*IXpY}oJgJ-zDZ&G##d%gdyN-=_`Rr073(4bfU0-*v!*OL#;OW+h z;$Rf!PeIX~z;L@t#=R>f$(sTf9Sw!<*oS^4<$g_#0t#%LcMD|eZ#d(*b*+^tumE%h z$pol1LDf6Az!$R;@SR(&9KEfrCo>k27*f$5E<$Z;LsIi>rQ~1~mwY*ij|M)v^hfg7szy=QzrG8k2Yn&SmWIWDY2)DFs*cRdNR%utxFp(`X zk!ibKBRF1hI5t;%sA`WLf5`V=g##7o-PS8r(GJg)G$^TRlB2nZlAOXsG!)$WiqRKCYM$F>{v#5c_w7dIn`@P`#R!6DFS{4ZD>JJQ@T8%->!l7G8XCd~2BQ(7!KI?Yfq;e) ziCiWQ4%~C-UtmC^!`>4fIb;61IL|YU)8{A+H^db*M3z*DeNCB=kYFcivT!$b)aBOM z>S)3wQpD>hpFZJU9;xhkki}+f#{)8WEf|z_J2_RV3GwptRQV%`v)m{ALNkI(=C^kb zMW$1tC6VxlTc&b&qB7H?q{@TBVTouM_&w4RhN5Jep9ay-#@u= zz%@yTk5_ja*te<@qE%N{SI~rbJhSU~3V1F{UREz5Rdl^-O+9yU`rdRydL5|fxN3ng zvT4OrQ8Hg>Sq;mtQB@ioRI*wvED1rWIZ&&-b9nH)mhWx5n!lVB5F7Q;E zytaqPg9l``e2`J$^H|f0MZFYQ^_}sb&x(zcp;pS zUA0L+7`ofZ1}cGuK~RE)0jF&eU(?zmp$S`uYq0w5?7KCWDBFEY=9BL>E0Y69ei*9_ z1??3Wg%qC`7Z;=AbCFbN6o%BSCQEj>@XE?hp;Ol8gs+@JhSQ4WC=Tw{pw6EEV>d7L zl~uL16a=%znH4*@xzK%p3zCj=;=Z0^Wer=6 zrfSRz*xZ8_jwH5bNMQskzu@-pNf61Ntuz#cj1yw+Qc&iy&|cVKbF-x-^Z|ngM&X|v z5O~sWlgxg~i;ezrQelHIuTrMLsB)}{LBRN-bqZIvchYb56u``s?v%d z4jj(|8%3j#!$(u2vrp!fF4y_SjxAJ@NQJ-L(7Y49-u1e12SXZ8{>41=f&O@4g@d`R zO-zH&Z2}#@}4k~CRoU5gFI)}|$=*w${ zT?r-igJ8>3*)+rx~k zh`1j<3uSkQzKK=LVa$1Gl`~bIuz*oyU-&%9YHh)OG{R)RH{OqQroKw3ty`QBqAE8`{Tw{rQdfq7kBpPS3E{Df-e4qQ~bZ+aC@3 z3MD!X9j*F;b>_K&fBE%QCIC zE@MWU=T(j}taYVwL`x&oK$spUGB|aUAWnCU)@#$urS|XvhT;CT-1?E12SiVbrRSIH zx9O9vdTL{_~3F6lrFZ;ceABx*qY&U`aR}vu@>gvFDt6w5=R=hNVd3(f1~pxw0TsPg3YcvFoeKK; zrqpHC_OFk<@{ZvfyWfC(J$1=XBUdljKn2}EuR+xbd2MaAYt-I!HFMvnVx(2+v$ zpaL1n2l2m;u9{qvg=v}?Gg;k7WJD58WvXZL5M`8C29v?LKIFD{ABsAz&+P>nR zov>CF9gR=>;EBp%Hpk+Kkm4+A4RxgXkLmljl-Q&O-iMQ%vd~~hqpOP(eu#Ik;QK4o zgRJf{&z$QT1kIs0lhi<_W8=x~s(_z$BhsykSJ*=~-|lwbA^KLoXx`?fpYLzaqtE&k zRMHr@M(IZlc;VzZvK=98#~U8&4H$<);`?+w^2}pG|IX_AjUoT|6Jt=DH{<&8{QQqJ z)j+4qHlz8=BZGbx)?P2)i!>{Q_T^vy^_k9CtAqhb(pKoM-dd0qSW}m+y}LF&{hq&p z+LG;Y!M1b|wS!ixC2w`5qNO<^EV_*|Tqi2JxbpJZ9n62_t?!o$%PQ<5#s>>$-Le)(si94c=c-*3eh4{;m^t;tUuos4{bQ z1V96$b+_64gD{SXV`eqez&-vCc^>k#2)E_6=Z?ub+60vXWJX>;k=VG$xp;&tSDL=^ z-U1Qb&E2(@SBb0!03!X8-col)<$rkgge9PIX%hn zeDEjF>$27Yl$#&$vm^7LO{RG4KiT(S5kmUNoBB}eWj~O@1ghe6nAEdx zo<|5h1Ur+IU^(J(01_@A-<_Y#`^5+X|PYLd5)xYcALO`QQQO*}mXB~q|_*)O) zGZa-!@%+3?j7mn5Ui@SlT9-RwW4YIv?g1M{DR^U}3-vDWzjSWYvqV_V zC7$j&&fMbsf`sLr)Bn+mcT;CF&OyaR*t)hDwY#*$fv-1*R*k>4E)n~Q{tt2Mx%M~? zrrMlv*Od`i`#|fmNIX=oJYz9cprcNhv1-9ut{muB17kf4qUGC!i+)4UUll5T*&*}n z0PVk}4fTxdgE+S04R!Wp2nBjZvfl9u2}`=MUE-^18h!)L7M}G!UsUzceJ-6clpTXo zgU-4vY7I+=Px{|^0-3rjn_ku<|F`Nc7Bv$BqT*8;hbAzgzhKsu1n#KR?pYY5ee+Uh0V(^q3Zq#>HdW}!GYMq z0XG7uNXQ#TkkQvUHV?RzWIgm{d}jAY<;(7!i%-F41?TA0Mje)lKdx%Ia+)ssU9e67 zL$KlFI836;`n(hK}$V9GML8^{}<&1sz>JQq4TH;~KsP z?Ar&_m(mMw8!Y4p@WzvMX5KawWmSOJII_pw&bG$v*Ltoi^!L_1ONj$1*}QP7O$oGp zBr^CjLL$!fJpsM-K;;F{KcHh0@J9Ec#p%i+(sIiJx@JPlN{D=ds_EXYjOp!_I@g*h}b$aFR!ZpLE_Cb=fQmmJZ$8Gk&&%Xl>+L&OOE z@z>T^HdWkCz`S?M2$Oy&t#i;_vGh;>K+-lP+;4YT%4{0_4siI&P)Z5v7&>`|41T5%<*%PW!{&FbgQv1banEob3(wM4byGJ zFoP*7+=9)YFEx83zLJ@uWC^v})Dc)(Thju=OJU-idR*+wk7uw&n*`9XXd+qJ*-_uH z1Z8>MJ!h01j~_F?2(l9wj;p>(lq;?xC5>z{nlL$He$qj>&jN)?JG(0F)*X}xP+uP_ z)Lxi`v|C|Uyvm%V(xZi*qGHj6*(^paDBlSiAx1v z4zNECzNL;+dMNU>3a2#=D#ruLU!%xC)q9Ko%%f$@Y)}95=%`$BUdzcxIF zaD%TvmMu1!vqVO;&@s6wciSYn_@Q7^GaV{>3L}(4u%TJtL<87`0YgXPG_g?zqz z++^Cv=XsGee~c>MkAaO=8yp}Ob_S{=UmrPK547Cf-BGE5@j%k0DxRghWw=AoRmwkH z)(7#JO-0)Zn3FZMH)UV14Q8NF4h2%xTPB@aAQ+PXzi<;=e$y8#a$Vgl_97O}bTqyk ziCgsTaM&!^ID2<{%sZ5iQIP00TP+NK0KASrcLaPs*+wVIm7SaIV5w#s6+Hby zC@QoynJydbpULgP_c}R2!i{pslVAB}W%T&L zU@!04OW0NiQ-{-KYX`!B;K~Z z^Xf$o>|EI;gK7StbjGw1GY~6#z(7F9V6|*Qw`4*W{^~P7UCIsEON0h{r8vMo*uT2G zm2kdRv$2ihtZj*XII&}i`@3owfGKZ*-GOLWNe`;*O4B(uF7Dj!bwwDaR4NZG2}_>i zQ6`@4gOke_jTeh3eCu6eHqCPvjp-xd32ud5pqQJ*u}Ru6k@3!Apgk0FS`LF&H#uf7 z?QOoGt~cY8UQ7;N=ry8=mi6T@`&Rd623g)a8*pz*iXql|%|73GM1>Mj@t)tOw59QV zCFtb&S8d_g-PuV<8qh5C)0uhQ=M%YNKU-s--smYRC78G%5^s{w|#)w@^;3mYQw^82<-FHYnYQ5(ZwE8zr&ZP%REtpRDk5db|kEe~A z@0;-MYJt{G$$NN#Afdq!O2{2`b0X1dIIP#j`nG-LPWbmglIGY=^WbIt=b66slRFF? zQp>Lqr}63%G)FK5dc+j~(J&bxlYGI4+omxwkwtM8Z(+8cm3@W?na|D!{OQ*6(FQ^@ zP}~KAYL{$)wzI4FSpe`a+!?^!Jzreu30rfP;`mPA59@>^(K;+F}_?c7>5UJxIH+y0~+_Yu=eZe>Kcoxi@wD= z@PZ05LSG`e`p-Ym>FAfL+s<5+7Ro_JsbM|-e%RF;4Hp1L0QM&t zB{O#4BK!Fu>0|%i>Gh@GJ3fa_UfT~JK9I!}?qYb&?tc`?-gZAgtI-InnDbA6^Z-2R z1DXo*W_ZEuC{_J}glo(GX}~SNc9_@h#QDuUT7!S4_3)AmB&Z&LOsPZib^5{Luevvd z*?~C-XlM$g@V@f*$Mi+~HcSWFwlfb6`U8*vTH-G8>yzzM~ zGW5ShytJMz)HoW3sOkF(wnd+$TIJvpu`(74BE z_bIpGvZ7X)hUe&VuL)oFVSbhEQk3^qc({=5Up`uWB1y1A^JVQ+#WbQVRcjW8=^j2k&;*F}?iFaw8j1G3JjChg zOD}uqXP*_7iRid~nCnE)h$14v@_nCx^60Rr8vzlA(9oa+zJFChVcE)P<9y*OVJ@l` zlwI|BdU0a#DJvP2D`U8<=%|K0vtWJj zql2fvJev;r@-1BKn@1@l)GvsUz&7T|YuO*BO0#r6`ZE`4_9F)ay+ofgBl_}rKpBid zUk^P*nms0GW351nShlfJF<1SV&DxY=L`40%aqGG_ zz~y07qsenf^tJ}Wph9Fs=O!>V%b4BYodCJzqw-zn{+p zrbyM>w%E@nU)WAn`^E@IXpv;_>Bi6Fc&_J$u8hs@C9-rU-~kCzo^0&vCosZ30f3|2 zLPa}^&ez#fN~)IK4MUZhHcBU(@KlDw?OWwMTS3Qt8_Y2z(#vhNd0P(6V|+}$-9KrJ zlz=BkB-5twXtFh=TRz#7Tzd#Xd5MSi?dA0c&X5geK%3t!<0o*4-R>ZMD{abw{UZ3d z>utD%<+2JBaR|8c0~rBX8>xSkaeX)-(NVxVfJ0oIP+cL7;9}qiLva|C&k!=Fiti0R; z4wiin1iAta(UtVsh^LKHeBNP#FNIE{fe8f&@^HO+S$If`@47F% zKX(2&L!Wdym@Vj!ENxm7-E}3GwODgfI``s`mlcdA@QPk%PwVt_gx{6Ji}SUJprGJ% zK9;ck+v#hp&aexq^6B04n|CU3h=|$dbC&z?9PD?eO&^7b;873f$M|gfkSCu(rQH>A z(K$9c&(UVoJgAvB5MoL|0@vx}htdi0R*v!E+aA@gPEiDcyodeo2F>3s^PS=OC=-sh z!NWjD!A(29q>9ja`8FNbcE)vBszms94eZ(Io`QDhW?;Xs*5AsI-Emvx85!C>4H`>F)K80SuY zf{egPykCFF5AE2#WhmL5&9i6a(4FCHQxXC{_P+LoY`DiHI-wp2G+w?R9TxZ)#=IfL zG?cjdomTMi*T@U#dn5qSJGE0ghXY22zW=xbWk*U_ls%_%+n~Q&*Tbv&*7`Z6bE}m{ ztCvQO*hW+sVtF-y z7>fV9(ALh3C7-*Qh(eeJW2NlDc4Lsj0*>o3* z^#D#(4N;U+Jxfr7)vJ8 z1@+$~07yIYyBUCOKhC_>p}VxQ1QDL)LqFpW{J#s8b4j6Gz>c?`2keWMVmo{o)tdDN z1aW*DR98v)F)8l8K8#akHBurBRk|*8=*Z3T`^b44^s~0l|97E!t|IH2rx<|opmom- zk4#33WW-Y`9*-t=amS@=60)IdgH=__b?=zM3yRsX%ho82=MUF=<~j26wvfPu);92tN%PiX_Wv3qbA zhoQv$%vn}emSh5*v$pX>fxNl7dAb$*)yJmH_wBO(7OMg@r(gYxiuhp*8^}HQcu3rI zvnd#bGhWwcK$^rLFLqe>esYQ$p%q)Z_1kPo8;4bp_A94OgdfHCBa4cJza0P1cXhx~ z>E)}+SUa}CjIop88~&wHS~PEXq0W^_;w8|5M+EMH$UoW;;Yi!!ep~LpI;eQ) z3Z~dnH2vhVk6l~i>RkiOl(p4B28KULo^7Vs-ZUb!126P#?{y>gGy~F_DsKza!}F)Z zYHQ+$zGq5)ccavp4R5T=uluyPboT| z$L6U!H7J`g!NX??eu71MvtA?n%zM9#7VU^HQ;s4|!g~>+UOKiM?`iw@a$LM5Y41)T zqrSJ_>)YDvz56!eRyrbkjTC)|Gm;3y8{EB<^U_eQ1YsR389Q`GB<9YQtXqC{kP3(` z^fC8mZ)jN|;oulX$UE9I@;Ihowg5!EufJ#Y`n3{aj{@lWs~`CjGjCcMtnPd2Zw2pN zF}GGi*4|>Gb*B!ji zFS8vRv|o30i_9Au*3X#H(e{ZFawfI3lEB_89`EUF%C;-#mQm<;M0R+h3zV}6$ zeXP+D(d?P15of^W1u)+LfYo#x9J(9kzJBlr;!+0(2QB0mG!r%Q=V40T*#)g1i!9N! z@#FhI3HJ7ksmx71BHSHHIyZWw+!ScPORE2F5mavd27M}U$XE067K zubMk%#_}eNDM>0DNCsjVCCrE@x5yZdk4U;;u&*QC0*&c`Zrbzrc(U9Tq-GFW72@IKmaB%}El5 zMskw<%T8JXGP{EG(C|jHP)Bz`8V(X59~ZbaqWsA9fxxT!PmUf?is~(OSgP{){?o3@ zYX^KD`nk@fnGh|~&VI)Gxd8YCEmO<={4q}8vt!?6KJXin5QQQ_Q=48Qnt)YpxXkp8 z2!ytLS|>Q7#x-;jYpA>T{Mhsb7MvR}9^yZ|&sQ#+Nm>5;oJor`T}dk**N>Jg$0nGz zjHj=r^rMha^2P<6QCf!e%^Y#(-o7jqJhV{MW-28TB1A-|D$AQ4wkx*d3$tS3QlwU1 z7GpJoVM}pD)N;adbuJ;JV@nnz(Yc{^3+gs#XlXSo|M2k-MM+Bgsb0e8vi&o6YHDgY z-{2Xm+FRenH|ItlEAKeol2q#@$HrL{&84Cyqci|&P?T;t+0iDRRh zAd#!#R+>w$7>FxkZvLi)Ws!;XVdcC2v3^wWaFPRnL*+k0y>r*hs@~013E9MsA-I zw8!-K_get$7E8-X3n1B@w|_?H_mpfx0cPKsT`w{c9)oF&q&Z=ieZFS6Y|bT69^$3f zxL{*$QKfBOSG)c8#-r!~%U68&*V(J4;xHk&IPG#S6$I?>0_qUtx_-LL1u8I8gqKv9 zh@y^;3>-Qf%;(RaPdA57Pj^2)gYxkEJyq5&TTI?8XY1y60V~InysTX>XXi~p2(ps5 z;rvF(e%^q_Tv;xsHG?xJRRL?Lxw1kj(}xuBIOiEHiZ-h%1gWL$q5$KiE`Lz00A(z! zE*_sm85Y&27fiWw=u|sCXp|w{3TkQ;XmD=n5cl-8`ZR7=;J&BD{f+&wF`@n--pq-#Kc5{I|M#|0c0mzG$I_2ec00% z$UjH^3|g;OJXP4|R`- z1kTP9%yR}Q%{vQz^sB(iiO}F2`9|HL^*|K<>&a8MQ)_gSzV~j{zbiFwGoYU=Ck| zdE^cL-ixNZITg)L))_cap--_3)wkKb#?0nPXJSbaB0f6^FQ9e&3oW7lPL{uUi-R-J z-K|l^hi#r*&=^jsL%NZlm`%>567t1KhuO+iCZ_Yu!Yv1|nyx%dGsv`DA>CPIKfAuN z)OdLKZ%MGKs``pQx?cCR?XqJCkd1a$B~^<%&B2&}^Z7}k{Kzv+CwcF#V4o<#Pls8+ z&>z4qYRz2xwh|zcIkv84gNnLazsyRO91^kO|EbZtNhBLEo%ymEWrc85kGV&7@ z`kg?Zc}#S)5Yw^#Kp{}fy|*%NIHv&#k?H+@;+eSA9Gv(!SH42bCmYK9FHG-)^OHaD z;|5La6x{srCuo43oa636tECo9oksfOP(;P-AevNERN?sCQ~OgUL&>=cg^hIPj<_h_ zHehGIJ&*sUYn=cGqS8MSGErhnV+$6S#p=D7CEtDWKmTP^VcjCz^}g<;8nUv=orh(q zlsYyDf)499SlMn)iMv(A*)N+AU_KQT6qt|aHO#qHwK(%@y7 zJlJB`lEfph3bk5}Wxl@uLjXVceJ9D0WwVwIo=1fB7VmIAH1qDBQ|`_ip|Iqy%%*r! zBI5hPm5JX1soaf&v|q2v1#o=A2BW1zSb+)_9Nw{cJ#4~<`BE0Iqd8mSh(gNJBXHIC2O<%Lg zkx@4IE$BPS)1#O!k6-)*T`v4op)O&Cr8T~t{YG?=lg^GV@RL-KjM02nYR=7rgE(?Q zJVu`I4>M=$_i^BiFoG#4SLU$F!EiMirWV*ca|MVs2DhKx{KL>Xx`iAWEdVPY5?0$Q za_S^2h@3Bh0p#%`6q{%QK-B)$Xy5|4gYc*A!{J3aJP31JepvEz?%_u)w%i9TAlCas%4%D8?m>JmNB}LiJ2bT`$9R03GWvt}qx!R7be{(N7CYmpo~R;E z6>Gl)?M5f_!=)B>8Z0;%Ea9PKR>@2`Cps+PR5v2>g4vGos!_FT1Vy}R`mV!Kn0Q0o zBHT(gWvMJ&gTnDKz+3aTnx&j~7ZA%~a3YEUBn`mDltVf^+~}V~JK-7ZKM?Vs80&d+ zIS`|llnk0w!G9KbGLs2?M!;|ZrQ%86W=TCJMdYwyAJwAFsGls{3EVjfbSl;n!JDfF zKosSvWQ2-mUQ@?yYX^v48e|6^6s%No`f@thDOm!`tMlf6#yftpTjw_b@%lB=%U~g* zgaJS;x8B)G?FS5r00!iy__(H0T(1gUz^yVdB-~+XufMy;?wAf@VEs!2VRj96=EUDh zy-H9L?lql^(?z|>7_qScCE&DiK>q^2|DNmySzeJ@xg4F9g@YdNRr28Q#xSrN$C@R} z2m^cDW$6Cuv)T#H96N4X5^!i#juErD`wFI_)$;>8F@3+K_kY_F5PuucCjlPSg|Fd) zyy(pGK%N{W{8`JHFyE<^*2(HD13#}EoVx?1>Cvv>GNGWqNee{xD$&V9InqWVVY!Me zw;WV;6~dw#l^FMRnSI zPJm{cl#+mdy!eoG259!25Sev7NoC3+)B@e#ytviw$x8hWn_VeW!YoF`d^n{iSryKa z1sr?Xxir0Ka0o0TR2(bE7X0dmp|{^ETtR8N%(ydPg%# z|2H)|`uyAC{#IXspbBLmK2&f9Jo9tqWr_*B)Pd`IHAyED9K5w=t3)vpaHNXo?K8+*T5v-`8P+(DV=55}Q&(D7${0-@JIi95a_jc=(DoWFeY_TTU#Zok`5EFzN z!*8`4g6up~nd^J(>=~P5&3|cJRFVSU{679CnJ2Y9I}VB;_1|>QYvrFb;rUnCVQ6$* z>9n*mC2hc^6rUnlU?Zq>g38x5yAuCvHV(++Qh>j|6Y@7mY6XXM-fZ?4N>uB&Q&M~ee6N@`r#jw|g$ zfBS2$I-U}j-!JYxs)sV63iagI%pE+yl*=Q(ffxkR1cd>j6uVD&53(d63FJ6l0x&$b=h;CkeqC<-&rjb)MfpZ8XaHlY2lCALycvMVoNtS z*8!`LxX1$PlY+(07oIO)UltAT8$?8ECL!k6)YLRL-*o{^y~AmEydF*x68$rkhNKu; z8Vi~m8yl08lfba3ujX9b+@9+{q5#U_k#ja-#cz+zh4Qc0aFg|3Xoz+=Gk`na%{p?{ z1=VccJHonLLsJwF4#e1TWMw`l#I?_7-h=G8qNJ*dgN+S5SXoI4O+bif3@E<84oG6N zPL{|$u~NJxD4uNezI92HalJX)zPNA^5cBf#($dmWQ1}Tj0CwkVGfi2)x^tAU?LV3g z9grpckO-jjc&N;Dz!?amQ*i_ulAkDkPudK{dnE7?PP0Y{q9*N(JUJ1^d%XYoc;9mk zS=EdhL=qg4N->m3Lckj(6O;Iv|KW;w;2S9^DN3L}#Qo#@uW}Rts08mYFiu7VQP0g4 zZ$AQ~Qj}FxfN*bWa?+VjN?ID2_|b6Kdh0dc_65*<9*@@*{|k@awz=*WwQSM`Km(xq zjQO@mu9#|q%OUa9+)dNdN4wK@2TvFl&xcWYAJKXNbGnt$Wg4;voLZsD;k^)?vQf-a zl^#RDE#21Ew!E`T|tYxVSiLYisS8qW6RaMMZBo9oEOPMeP|G z7T6*Jl=rXmesz&hf=F1*zv@fkgBTZS%el(;U4CB#=EwI74!$-3Ml%qZ6pTbf^4-j% zu{OPN)J;hDo34{f_Ucca+HjZ@aR&JDVB)!4qQFQr1@~Mk9;(%|ZUtxV#!W4z#90aX z(oF$kS#G!VAb0t1v`G;6z)pE(Wmby`isH#Hn!YO+XOmEpt4p+pH%`Z^-NUdMz7L$8 z4Blf!^MdlR3WaCR)KGWm|LBvKE};Zza2N<|bXxTd9^UiuUhoznMOZcY(;TbBY0|TO z{9<^RuDMqFO@ydmuUU;p)m+kJmyT0#Bw-bU@c1$QvPsqC)D(aZH)sKXpw~|p-F+OM zj%%4L!_=hED2oxTSn`bqH9po#b5Hi-Qq8*IYpBaV%t4`P~sdjaIsFD#E^+&T{$qA{SDGfdUp65WGU^nblrO(Tz(Spr-;Ji zm+gzJF|#Ln#OSEqsU(2Gbp{}J?y>TY?w$jZ0?bu=1y?5d3i_j;eqy0wzKF2!HN#Oh zphV}Byg-{L@bm0Lsme$SdwKKkA4ia|JP;mqiPhRrVtt8?jRnF`;3^@Pdt@R$z6W3e zclW4-9r@pj^nMh`XJcSu)@T4-6vY~)D9Fg&FWOu36$;-0Y$KooKQ~7eC8k7$-I%>H z{5$moc+LVr0sx+cwI$tR4Wy-|Dz}Z;qrPx|U^!qnet3WXBb49rpJWR7$2R{zH#b2+ z`ScRNs%261m-py&8jb!FR6(6V0a*(%MzGf+OuhHC^djP-Mzh;-qw}uUA_9~z_>b!x zeU1eOb@r0(?~RQAzA9|O-y89OhmKG^y%pe_;Q!9mfxjJb17*zLKfhf6xk9l0@XtMT zz>b$Q0rUIlVn47`)2&k2Me*)_9T6x$wc4Qi5fm)8Y-ZnUz%#04o6_G4N{oHOsrwS0 zB?SH<0%>Dm7GK}Jcy=}1@CoP9L*N|&5umE4t|PLQDaG!*66V z-B!%Y;d+oneEhP!l(O-yZFR(;ZY2xiYivKXZ29Qxv;KUAv=OA+rSIY}Uj--bN80T9 zL0xiZ-;*27lN{FQG*|bgAKEAj5TLf6bre}%#yz zHS)pstu|Lv2y`gHSN4-V z&O>W0!MzV^FuUiMWkY5wb2p{_Q$Vu5vO33GmJIs-=5p(&k}f-Hd%}8V7PFVxL1M&)N;xuMe`-it5)2(RDn zFDAV|fBpZH=>Mg8uz&7dgMzw40mwnWfBvXQ{m#VvYX$Qu?l|6(tl65(D<+Uooxc8# z<9ws$+SN%(VX-9~$h6jmW4LiXx6Ey5ydmke`mDOTA@jFQx@8U56zjvj$@qzqK56fU zqv6_a8#fjf->UgZCrg4a!;jlH#wn+Q5S!7(*#p2<9=v@oRtIpGoW)3Wd30O7B{&}4F*Y;tUnwsh4-4xPkHPl<|)ON)!*Jl)rB z?0;1M=3#669r09!z~$oYloto<@pcB6O4(g`Nf-aCZ-KhvLq1I>zvf5oTME|K?(!dR z@9)4#mfSaz&Uo*nQ!kAZ7R*d)v`jgSnN;^EHR3wa1dwtqGx~@6hx^~8#63QKnJuR6 zOJiha=eAtRKy(I2b`CH*q-(Y^Q14Eb(r7kZL@)zf{!~s@>dRnMNn~w4Ra41_x@a^3 zIvhG*gQdZ}iHSYcS_`<9T0VUK(+2*bf#hQsMp2fgrSyatZpWU%h18^St1=L{B2X0q zG1`y;n$3oXbQO23iVtRX@*%^6(y~Kt27<_RnPQxg!j)NPEqhGc2q z!J!|ioVF|Dwuh5$Cv5=i^}ekaKvR#r*7BKSF;!HKyt=#zj+}a}kyl~7^2rA7 z3e~zf=;$U;nvsal%`LzC3~}ElubM#gUB}~3i>h$T24aU+gAH(OZa0r^GmG(RKSKKQ zX&^YYjs2wAeMFKnshBEtK85jamUolRvnFl%Dp1PVO<*&XbU+1ruW*73NA-@BdE=Vb zBpq_@89(IiVraMq>kjY8Z@uoG&YnPn7jtBlnMAK0|1SO1h7{OYchTVBbjTpj$mwR* zV@!H$R@Sa)(;UXb-7V)}qOq_?I%EhBr`Yjf>Bsy94_62W z*-bL~g#uPvt&;TP!gvU9z{=x$T8Q=Lr)#N>!&)=osfX%ZEZ)YHwsc->q}EA}mtnet z(m!s$9`7voHam-Vbj4w_r9)~oeG=LSDMvl7+JNHD`?k+d3|2z$1eTXZ?D<4AmVm-5 zdhx}k+F#HhEpdBu0hPRHw2mBF+N;&s*p#Kb^tcS2X8Yps$Zwy*v>u`v*=>{h+{rSm zC@409OiuH9I3*nt>F5>U9UpZj)EbP>W0EpyHRB<J8ie z4J)L=x$vBd6JX#8kWf<6UOadZ2^}+e5?U5DEnVqst=Hzn!a^Z)0s*0wVOX(ca5l3e z(*_ugOatFy${c8*k{Ie!!4&vW*g+({4J*682?&?Bfi-e=aiQV2%|XjM$>C<4r3bqd zx?NXh3nLP%oc1Nl}PKxwZ&c3MuyGlEl6&R>AQlk#zv)5?6e9`sANeC+&=8$H&^Te`IY zbPI_;_tlNJqDkR7EiX68txQfI(|r~tQ)POo;#Me=suY+^Y1MDK=3gsLy=pzCTM?6W zEpt$n)eVi^o*|AoKIx$iiL;p>a2gi~*oKQjk{{7-IbR$s+eLc(YV;-V?7jYq>_F8+ zw0earCkQN87ssW&1djx4Z}I(8C{dxwzxdv#t}v&*VC%j7*vIH-WXTz1%aDf9!L#Jj zCKfQ7gT?t^p>2W#Sgy-UJKV^GW|(sE?qJS(3=u-UP_I8M1qTvJdo)rR;~ueAqEnCd zTHMX0c3?`^&~$h9XU)ZK`~VLxl$4&N&{!%b3de{=pTTw5iTIjxoAvXsC*SO9X>Vdl zrS@g6)QA-2Z1dQ)!}eqA$;DDifZ~psctn7y@oR+tZ`&>04X)+X{(j0kbxSL;p896j2kBc*xOp@7#GU^+`--03iq*FNdHd8Q`*SCL%urORy4S^j zS#qh_Y@5F+dXZl<4{e?LIepKB&1FY!l|Np0JL}b7%ij7~=9fP_oOa!K<{nkc_0L}a zJAX%dm)+(6As^mJpPt?md)A2OA;;tipWmf>2WvRZ`(JRA`~0(>*pmX2HWYl-KAH9O zx3+iujM=|aH7;&`rGBl>V&a5N*|$9_>)xK4_54{{{)DcxX!k{Pfw=2KAS&hN6p(q>C^pB zri!?DU%Fpg-#M#fNvc}@%~xlCem*9qc4YPC_B7YSUg(tgOtv*ZQ_X733rk;c(#q06>(I{Hg>1;IaS!MhF8AI`Y|~X$16v)?8Fn zLD|y$2LMpVddGH3LkOb``hF6A1y>BmzzRu(v0yX^K!M+psFB4$>)&>0#W!#uOh)&H zz@w{O7>7oI-{?_7sqliSt-0@pbpQ)x9UZqdHFY(0B~BENOABy8k=Rq3Dw{`QcDm~Bv6cDQMU0yYUa;R2G`24oaW)d=J9&7Vw(A^R2+n`IPI}bs*nF_>jAq(q z#_CS-;*3D>{RMwE-wu$6$0uNW)aREXnH5q^W~`aLl% z5x?E2JxM)^L1$)ko<83>-QYUg2f&kOc1Y~&Fl=e}zjZ>>!Vh^eb?ZRP{CgA}EE}ID z`{>~}gge^tXL0I+iqbP)7s0Lk?w}IO6S9Rqysm7S@&SUBQ zr=&{q7spOBCgb&CJ^1pi3hKV@uf6`<3CfSz8`~oh-=uWW;d*=f{gyf2Gy3Es@EWMI zaPX|1ZTaVJ`M}Y;%Cb3A(3cQJ1croj&psc|5A>IgM2aH}Nzf|JK0fHMYcO{Ripby0 zALArJC=RCoy;FwTw0jL^%1Yt5ZF&wc8~ULRisBXs{ZP!EILTf0h0Qg|)e7|TnsG&N z`{2NArMy?Jz|~Fwq%TmD-fY>pLdQ_7i7)quQvsiylik`s1=6o*`nC^T`Mc&&FnL)s z<3Ixki#Kn{`f?T~H|=0Jipb&ow&pk(fI=dVwL4Y__!(O#F*QDwPYWwFkO#m6Uyaf@ zWTZgTcEzOhwL~a>==q(DF6>nOXC)t}W4=x!8L#CA~3mH(=b&Ns6ek65_IrsfZ}hA6enZ$rYs8KDO%%}oCD*> z2V>X?mHs;vw-l}yrp}iX*Gk)MX6l^ZsRwq>mKdj8%G(D34Y;>O#CxJD@@a9X zw0B;i`udfi2{Kuu-7PRU-<4gl2m=6eNq1<&SO-O74(;6J_M zYSg<^)9!3izkE@h?NlmIfYY7E(-gaB!lQ^DmMkG^A`Aje4hvAfVaQ@oN-D%+if5&ih?1&I zC3Gm2DCO_sYCtmiD%c*ON?2yW>z4nBHG84hiY!M*H2@l^5gT6L_t!`p2+#}b)VX=X zfGPsh$~wvo>i!(T5ef7S-rfvR7?Ry_<^#|h{{Q8vftK$!D^1pCXJ?3rh=J-*(9kz- z9Zxq0(H6Znl!@gAH=Sy>dXzYs$C}PZ(U{?!R?>(#na>{FV<*@}GZTkubS>&keDnja zifZ?i=y>@wdZ_Fc)-QWF4w#lt?kiu&Gw{~p%2~QIQ`Y0kJZ0UjKdi?GrcWzG@@4Bz z39g#3Wos#*ZlDC~X@hJ`82472tXI6eyyD{HL+EN855}!mnh*(`<-$2A8h<63cxM!& z-7+?*8&Oq#fx$B83q$l_JIbd%864iF|)(zo1wDq|YO2Q|jgQ323AFYr8CEy+Dt0sgc&y8atE-bA85Ure>MBAi zTQGT7UC<#zy*B!>RJ>-XPAONxFgkl^1yNq3eo$-~1&5|)MgP<+_b?IA0HbB^Vj?eo z-I@CgpWiw0=~mY}ANxa7lbdaX(Rv7Md2SkCSRv?Fn{ak>_4;f$QZOb=AkB5r5$a+Y zrzPUNaJY9s-xh{D#4;qRw z8qr^5{Yg5{>odh;IUnNWsnVbo=$O@ThfTc5ROcugBNUH5ke1}>9o)ZLXj2|aO66$c z?{AeQbZN+H$Had}#3+pf$U;QtC_O*mGSrkSMe&o1!g3(VrIbjYw&%)|DSvggxyVZA z1yN?!Hkt;CdqXiKAuO#mq&FK;O{h{Epkr6hO^s*iOeUU8#~;udv4kz|ezQ(Q1nBXU zr<=YXSs#V{e4?cCtJF--MB~(=RPLiJIyjL>ENfRyu9BRecRi!nWBExhUgSnk;aa{V zP*TxZ#PzV$xA-~L%4Kz%y)fxF5l4#nT3SNO5?sF_P3sCn)Vk}=u`EHJL%RU4uA%-> zTw&NEd!qi|NZE0wwG2W|UJWfyr%b@<%0O%%tCNG3f`yUezEoSsJO6#`HsPmzZ8XC; zr;|5sZE9GZ@-_zCPf|t-Ps7GB?n9wxW?RV!o&56EnAXSAzQtDi@Qtd|vcff`=Yj3M z?>|LQ(;owh8lu2*WM1?cQ@a{JJ7C&_?h-JZ>a68rQ6mXg?Bh=?Wq08$ zl}>+BF^!L7-Kai))~gzh)JdsknvnP9;I^@`+Rkn$Qah}!J=6eQXy$(Dcd@1{Frdxh zEjxb4gbt(Do~Ar(EORepnMOIbQc~OYoX17{BaHOQ+R?WE?D@1$TQr?TP=Ld+7*X!% z<|6^WJZ1=^cF0##k9!k)s3i2IzN$ZWB9kD!_2wiGL+rT;jOg_=$+}g?R?T7m87>Vh zXmy5(4f$sVWpc*!Nqc_GdU^A&Jw;u5z%N<_b4bm{{P>x*9tY7xy0m3jpE6k#01#X` zc7dK8gKj!alc~9tW85FNCbC0VThS$szE2vAU znKW^1=5gA$dz+NwwSLQMs+*Kh)1|-{+G40J3nwV0V9F}oz|#th$Jm`FUhF3EB)C(2 z>g|SC_NHThDhzziTsxL#OUEBx7(wtvps1!fBeIk}e#W*-YbbAsoT=mRwwbgYMw`R5 z5HQDAkT5j2@sXX3^F5}0Pb|*4Tl3!(QT|afEVXxBM~@>+(WRr@&@LCmdgUyt@C>T5;Z6Cr;H33SRPUqhSuguaV0$F-uz^r@UmcGxMuY zYP|&>BG5yUBcS1%(3NvlAax}kOhL+YTJqbqEl9h8#uM!MqEyJhuDQW#n;cQX$;c4Mi zB4*@+0R5h8C0SwpZjj=_5_kPsH5)W7rg~Pu4_0h%rJ=Awv}_W!FS13l>E*(t$q4xI zXeGMivYW?_SY_K;(i6Jn4D8=e-{Rup1Xous8dOy3kZJoxBQ-V4BARO48dZRvLX&dU zKj#FaLkv%*QPPs&AsGDh*g7?{*#tE-G!wKmPnL0iq5ZJQJr8vs$1MmLD_723h$RJJ zfq=_`jGh$>|1Ts0nFE?agNinqv40#JjhNq=wRAY5t6of|ef4uM8e4t2esZ zjiu_<_2XM}4vj~Z+M1G>7qEMSeg>f+eic|8hjjuC6q^GlqqSC*h zeDf3SoV|#n*d8XdyauTPArm?PKuY(4r{7^foKa@_M`|X}qXKr2abi+Rp2q!C3C*~mR4fd-D!0%Kv@B0IX?oy-F49KYauFw5dh74JG_(FEIsM8E-gdRQ{Elb#7I zfIf&0jf^^OSEN!-UZONR3e65oQt=Ndh50Prndrr>W{nH9j2kQrBM=?Ow5HOf>CRwS z!?9y3E^Jjs8w9xtS8yEUc{m*QJCGWt6+-<$E9x_iHy14^6yp{n7bsl#KuP2YoH#$z z9L%grxT(8)IlEq}xT16XMM`F72Zf|FZp9A(HS{u%(%X*jag+S00hQi@8nv}2rt?F^ zr05R1YKZpye*|goDob`L!;fl8n+6KBw6q`n`RJG=mUK|>a+I!pYS+^Wkl0STz?Y<9 z71h~Va95ByF0q{!E@Twfez^TE^HneBT{d$C2TttZ`U1a<`Yh+X<;*VX8v=gzH97eA z-@N2sSz|SxhHCpCzDivr)0hs4K{#gSB4e93Q0DhfNq%YO3%ZFGf3Tq(}N(sn| z+SbQ&v=_VViiaC-HE)T(f`eh{}bxZpG! zS)EWyH8aw@{@?)9bTgF_mnae~3OH>^J;A*)+Zppd^<5_&H;EHGb;$BjBMSAL)U*2Z zb~jw|IuRylY*5`9lASW0$j0W0ltwu2%^R>0?e3(0z^pm>)Mh}~6iA>%SFca3bXGK~cbk!RzZLrwG)%a2?WnP3;x6DRBdK9y}e4v)p{7 zl1dZZNrJb4gTq{9-$2 znDOl&#)tzmWt+01xN|OiACaz?q$Kj_;yJ>TRP@Kdl!W~xdq?KgrWR_zn)H>!;zMnf z>k}cbtf9RS6#=h#)QL-`M5) z+B9eKf)h__Q%s50aHsN+bf&f}t^oE*X9EEM5o_air7*_R+Zl)##=r2Ko^Ac%3N{lO z3)^9=3;pw|X1nn};ZS36(MR&z5*pSwBDE`T3YkJ<1AwL#glWsIt#f(i7TnjmpxHer zF}mF*hs>ot&W;;RXT#3M1M4Qvw~S`|-1I+8&wLo5(cDldaHLHPq;iF%OB9KB$=7(T z@iNM0h8m`jA>Y6>Z$fOd*rxMaHjs@{)0;7?U$Sl}^w7$h2d1I>y$$1eWocXw!^)`l zdPO6$T+r5;FlQ4nRhK>&uhlumXHkO01n}Qy`lT#O8T!q~@UGt_qdISbWbJxUJTV?CDvdAMKp}8Wv++PNrb?Cp;Fo(+X$|S@*CChN+p_Si$jh7Pc^$$EuG6vs*qs znW%Z6ZG7E=DX1?v%|hl#wE`l>R1)Ij)Xe@Ah@KA>X22sM5hi{?0j1@22?l?C&;7U`yV$0v%(uxVEd2$}0o{fZyYgFPw0gf_qOQX4zscD9)Xx{ObczCB z>qrY79_w+{-N}#Smynf*=sXN$4p}C3|>pe>eKY?&gzHv*MVcPOzbc-$JTK(=PMr;o7uPy z3V#WQcuY7|hu_WH5eqZq+JIb(SJLFQkHfVdU9bgTsTYgH5&hV=gdqc!p%e3?x(Y}* zVrKI@OX-&+r$iCd?9#xNIc|HwlPbpDq)O;=mT}n^-&Jx+wn`B6fmdxP3;xVc_ znH}_O>7gYi>0eu{>CKHaD@%s%lY(5=#Tfim{_`T1D>=Wv#4Wz*)u zOD-nZ9tXRBt9qIG$8J`cf+i(f*pQ9iU!OqIgXcx(L)F3!0}ijZP`ci@ zyc?b<(w#9YAutrau$BDByg9=RQfd3o9&ga(*jVBFs~=y-ah3yDd8Vc-3yeS)Nvhl&3K+4H|Ami||*bPh6j3qs?EFsfCeIw*@s zwMgRoE7>DE%JiaU^1P)f!=;!S*AA12gC;92B4i42!<3X7?))vz1eL`y#>JYZvA5wZ zymsK5OeL!fU#f~~sl_TQFT7RGJq{}3cR?I@vy_~et3AxOkkQ` zCo2qpiDi+lZfC=fe$9fy)d&+bhPZu=883}w)S+xa$eT{zyE$;0&FLBXiWU-du6FQ9 zF_j?!E`nQ56J>YdXXKirO2{%>C@1srX>jxtJVs?2+mNI->CRm8<}6H%JJ_qXVGEv8 zN7fZE!%oKr+=-O?^zSXPL|7o9IxqL6Ie|PV|f32g?snZC&0zRvim+n(@k6PzoUqJP7e})PTwn?m0-oPUFpCKgglsq%@ zzt5yIP|{x{aQdO1$AcpFVE-IR*9tz)C*iuLS)Qaq!ZEFa)bt59kA(xTwtQoe7!*I7 zJaeks{frrlrzof>F20JJ1O}Mac<}tjs~4;oIGDDQ+upmU>Y9ppC@Q~r<4k=)nP%WJ z@Mq>)QA`X9c<>N6mCkiVMZp0@h>}1)mSdY<(=6`&ZAHEj)1J{NHgX!b2u-qW9AgOw zK69$&7-f9!s1fywTB>r3=F;5FPMGQH$cBcF`|N&^gI#3m7wq! z3LqB!it)J;0E9p{2=Vw_v+s-Pec3dyWu$=xzzh`H(1RR{+}0$=%w8|-)2MYZmq93C z6V2NLSBJ`os>R8~#U-)sYlk`De>`r~%uH+uJ&;b>cpI+KxOB<+M z$E*{RwV9|a)2UM&s7yN1k$f(~`oblRi4W3TgXi}c=RYI#>#@-iomEkZVD&E$E$NBR zb3Mi?!ESvfJqSLS{=qZ0tj@-hro>1miFB~wlTcLJlOPI{i)w%Nyn6PBSU@OV(f99q zYmW`>3@70B^B1LSa;*kE$k&XRn?8ih3Bo9rN5s!PL;}x9TIMOLZ+Oze^Q$%st8QHX z0}ewJ5e)~Mm%)*a-UAB=$>lr(QNiP_gx|ca-)f4zqJ*BE|HGB7o8CMfR^TLmPa zW~8=s6}lU1ZfE^e?}r;{>}&0p_STwP?Mq_-G~j!YEfktLd3V1;Me$P{4jLnLa1W|N zGX$4;c_J8KR@v-yVcF7qIuL-KGp8gE;U=R}-!Ck}I1@kuvgpY6G<~D!q$1!!mX_|r zfl>X}uiWM%3-ef1sC7aNWMDkKeufNM`Tn1WJ9HMnze+~Xm*`=FFYOGI#>;)kMO|pn zn9pGn8HCmZJxVgV2Y{QER#VTr$Ih*cYU}wGkp5;80VhyBX)=P;pIQa`q0Lwm zZDu$*j+|t{!4IF`cpSe5Ec*Uk1MMnpaM%Z04q`M=P)w!dA~~|+`AY+cv6PH-^pdD| zNLtT-(Mqo!sB(>f=!&>@m`%b~&&nwCp%GYJF>&+ltddQ=Q)`o!oD3$_S(A*y zB?+=I|7X|w6gV?KTd7w4rs~Qe7yYtpM))sQ3EXtd_}^?FE4G1uE>Nx>-Rb|!5GJ*J zV`OG(YHEJo<$RSpxbtv6fe4c%B zc*y0rAJN?W@OZV;+0h|B|2KUomP`WBe|@~-Y$E~rcmM$EV|8lE{%X5lDxR|Svoqt} z!SeEQM`tIMTn1O&{#u1(-0fu#m@epf{{HuSPuF|l*i220jc<=T(eLk!-tplw+^!&d zgZI3}&}ghZ)ZNWZALK_*R{!1`N#^I{bK}$1(n=5KKA1jA|B<3)(Sr8x zu6lpz%N*AaO+aB5Ov|&EOtN+b-RoN(a`%Zx{~j#m`rBn5wq6?cFu_>o>L}%?myh`% zq&m^COYhH7t>=yd$ni*jA6j_g|kK z4e~t{BS~lE)i0lRE7oiUz$3G}-}VP4-ZyZPHlf$LiM`#WjZOwO%8{9<*O(`e{Yr<` zI-MkIe=J-}0%nZv9_v{WE*-oF-xRBg3Xa`ad+*>QHBu7qUSQCG@l(dfmEZ}aY45wmwg7WZ2@1iN2C6Yl?3_AsHF6xrtqC2iXy&Q zwXVJL;QC5tZpx?Djh|P+E1oZ1-Ao(2PeagYt{0Y%zvs^}abH3(jAN*PhPP%fnIqks zC6~>op90K!m2E4IzCI?#hheAR;Q(9#ovY@~_^e^ycL907`@j>{5h{}|T*21z<@}4T znx7AUPL7%7JbSUlh%Pv?`4+agZQ|VaMeZu}355oi0<*C$xE`&wLZEE}9&-n=27<4^ zEI3TO{&*T7shkPOeJt*CALZ`Oy8lQ?hRMa-_0Y|>6uf$>GPLu(bs_{%w2@|ykYrzP z_9xT_>{8PZnGOik8r*Kq%gTJa`HQ_B_tPfQA;`#}oI~D05Y2Zaf``;E=iTg7Ahjhe zpDLh8;`z;0`CRbSao)%0v1g0GcC;3I&*qt_r@!rwacfAx^haTJ+4IB7&7v$*=T++) z58)g$7huG5YF!a-BSIjpY4!o@JtIb{JH&v%w7jY0_q+gb@Ze14p6e=0nD;zz9ht2Y!4nOk?(B{Y=T|x{N}%HIH=Pb)4Gwkihh>w&XYLv7Kh2TWIN^_ob6~P*2E%U z2#-qQuQJcby1C}-K37FyF`fE=iXq32@_yHtxfPq3K-dJ2`4K+r`0FiOm0N_Y7qhz;OD(l4ovtekTE6 zt8P{n(0!HObU61)@!)(v$44cZC+ZGl#fws2F)GdwW}L!q(sUStv&}ToarV@EUUW<< zz@?3I@cIihT(tXz?5`ahz;1GHb-5$Uak=lB)f3Z?rrVf7`rWq$JLV#DcoTxyH4|*Vv zX~E(|hRY-5wt)9*7wznU#uU?4|*o+yP|rmuEnxY zn|xU=z8>p4Ea@LiJRSq15-O~{UOn$`M>F?jqlXio={>Og))2%JFMq4XS0<`G!-lvn z?DcJUp#eZ!u-jix|G+z2+Fjq!$3)idQ0K=C`P9S4TqniGO8X5ovb_9+y&-RQ*4fd~ z(G-|^>ciig`}4Bi8Ak*_8`8|O&KZ9r?rAk?U1^6ZJ1|7#BFOq~L)1*GcL?@(xX6#@ zcV6gA+^7{wvEX-;k~Y!A?)0{*$GM13*RXz9sq=Ie>n}vh)?;U{u;`vy7iSW%Ilt$Z zj&AV});hf+sCo+Nn(;}3s`5dD7M1ZClwW~hIq>sQ8-WgeM~$@(3Ua_MB)xUP`x8~M znA}ixsW~E-6CX8cMn}71&D95itxY92x&SK(RZ`yXtTi;*$)y#YJJ(4|@IC$eI=I3L z))D{()i(N9uU92G>)if>^<}f@>O3v^Za@@qKY!37%IChS%U}RLRqDq=zF5|b5)V_? z-5eoL>Dc0=OI_=aSAyEtAr!m1++6R|=G&n5;8w`LxrA;mk-JuzM~8|xTMX{)_X0_Y z_8WI*jG!H>>BRRV1O29sUN*OV8Y_z%so%%#QGj8HD?u6R*RPL4 zLSG?YA12Rxot4is<-mKy+SkTogkz&iW^M$$9*#mon$Njq<+8R9N_eMOiw4;^n{^)y zamBS9l^-hY1vyrFRyOGrAweF z1q|qcM@+ZdZx7t?S|CBV*||K2AzV=Ky=)g>Cm`+4rE_R%Zg#z-4B}@#2tBC(Vle32 zd;v3d^RUA`p4B?3Q;eh9T&AepuSP>)jm1JGXztHXpUPOwHF+cT^#6Qh97-<)4YvE_$Xo5DYd|=+>Us2R9)BrYl47V+1>| z!F0T6D!Xs-KCA846Ax!{hh_pzg`0D)6J5~2XKY-KrrcpS7p1@CKu*BLVabwb0xXt1 zxL;K8nw9|jeLDAa$H7Hv8iT}y3m`OzOm*ZUFX+$tEwoGiQm4N=y3rZn!W|YAghNG^ z49-LYg@Bv`CCK+IgN^cnc~BrKi>8IuVLk0n!cpKkIuUx(bu<1To_q9!l?iP3Bs6w+ ztCh(CRO7Fs2R2_#%(rhKv4n}uU^;Z|HeeLA1AwDBI=(l1^b(nvEaOzkn>oE6kA_Hn zMo&u09_gyxI+AcWBTo6^y?(ra1!|eW-QXRUXdfT{wVc?d|%rsuIG@=a0EmX>C0BEW_bKmV&?szbOD_&HTXZS(Zjd~Fs(4QtixAKgZ7;O)P00>Mi%E|`9iQ<(y zp|RrgY}Olg#v)vqoZPNUC!w>{Hbx-EciqG12>Sc0O*$5~j`(Q|)^9>*nD132T?Uk+@XWKcv( zqGgg9**Q4mGI{0_|2%rhupyYfJW!?kkMuI)iX0Z*Tc#BJ(%#`yYuN4#JPS;6q@+$Z ziS`hztJ=9ZZ*6g`(vxNebEBx2-Zn8tv$ewPC-PZ9Q zNLk7~i8j^b$kr*a`eCTRt(9^?1x04NMdFM+gYfFlL$ZX>HaLQ^e>|(p2-Pno*WgyrbNiTxA z8@5;iD3_CK-Ohy_GH1BNeq7`kw$P z%V-i0N+YIS;C13bUvyHoV@cN@ZoP?cG>R1d*Dy7FDQH4exEU!r6@HJG=;7qeB0QzjXSYsP2h;!j~UU~Apg*~ZHWq^*zGuO%MWah*4nC{ za(Oa5nz zHLQcfV~rT5%W)_Rpbxs+e=IyMn^?+D)I^3XjJmrTul643I&g4idFA(cXk*-u2MYL% zdp5aiU?nZ(zf@QLwmd&f@_*wF0vN#_pB@PW?^WL41rHhdD$=fnE~t7~9QS22m+sI0 zsJ@tVsy;-TSB&Z4T zJFGz{Gwwg}+=W6sy}fL(iv}Hu7^*B^ugGYB&Pjs({`5-_o3S>Tujtve!uMkHH9GAt zj`Bf9GvCMfdvZ5nz0mO>l%EU=?qsg_!{#5pnREN!GKISQcP~=Cx~Mvn9je?X)e=pf zpE|#cq;s1LRU6BF?#}A248?D_Pj=TseP-_gagv~nwZZ2}4+}^;Njn*cY9FljeEPfr z9W?G8lAaE>=`~^_Be9q%uqtEy1f|DN-UV9kyRG^8=jr@dDXpd#XExa8bWZ6xa@u!M zX>b=_5p{ZjhAf>cwZwhAXvx@#qve?pMnK!Z)preCWMdK(98h&x^Vq}YJiQ*t9CW{f z80d@|mcH*3<0n>B^s>&_V2sP%7WzdnL+8R$(a=TD8Sl@#0=zx_@VwtDeO%WC3Lm0h zhAmMY9Jy>lZAeagLY~|Jz=`oSwAM8W%!O+S2|4ee3~MlcSC`K*w|=s4A0AsuPu`CO z^&xcn{HApcqNmp}Z;%_1pN1cQ>$}AW^qEK@5cP1+cqz@lfpUB&^}{}bIv96l@P{Wr zSTNK!75#4NTApF0?wt(e)Qj<_FQ&=_6;laGxV~j66DD|(oC#FjMCjSZA$H#PG2EGv zIl+VQ)8;4{P#=%7m!x2AAWW$`)G*cXfYBej$CghDsYeWuN7`~f(w^AkHVw(d=_NV= zvxDvFov@5}6M=?=Wbh68*lQn%q+yq0^d3=n1IWk*qy1^|2M|TiA(3F0SLx_H z`bj&5qDhWmuJU2{@S8i`uNqPoll`Je^M03pFiZe)H8W*uuybR>x~qgv=h+(mhyVe?hpsxqYEB)GDKj)AkqwTI+3e2bc9YP&4m;F zx-ssq-LmMj{dk0_RY}DNvgwyKgzHO8A{ni=3<-uj+k$(eL{*iK;Qc zv@N)vWzV<5M^k3f<<{%@PW)9~eg?MVHOaxr%eLO^MR%>yB6!;F?K%oJ`S`3N?L2$` z;?vPdCPL|=qzi^8*ua0Ld|52qXK{W)|Fb|J55cuGvr$cJYoh(Q>i&vRP&AgZeKwS3 z<#tBAQs1%kJ^5p$U5zo`k>Ah!DYxd44j^CGeCg=sj7R{t11neSr_6-C53%P4 z(!-KwV>QxSndRnZ|MH~Y_A>vd=h4Cp zypcWa3m0P0r-im@{q4^LcE3(#)xjM+-3fBF($tkakR+ChFIe~M_~|F^rD zIe>PB;|Z`H?2yXzZoYT#nbsS@Eq1$q%F*cJMnvkVpv_coZhaBF4$XzdzoG~cPO=Q! z(EsBaiT}#>`|lN9MA|p%d*;9Q{@Jb`ou`DBxh&NWJsv^;(Puyr=gzci69To|SJTAK zD$;am5c2u$$A2um^~4BsYlCMOh0aEPI)|Qp$PGQ})bzAkYUv&@J2lJw{l(;C5Uowd zuK>E`W^!!Daox=9D)V2%-)j|le#&D?v*x=?m>D-s|8LXy*PdP(u#&6n3_9z$C< z=AB(6rS;?hU^snY`s9^YOplscG^P{>Y&OiWx82zu7&$cHVM9gUZh}IOwQKDW?&3L> z6BNPNqA+4GKvJp8jh%)q02`tQ3b-UK6$-<5(2Aly&JurP4ELxlaRhVB$$NGQE$Cm> z3MPhn2S)>hh;x$YOF0YFagM}{<7O1+6qBdr$4S#`tK_}I6;ebm;f%v;iqRPy- z2U34>HHutqTseenRO5|uR$gAcB}6?!*f=rRU?zDKNG@oGPMx@v*OHVACC`7VsvKjK z7Mu#x!E{4Rnjzywo!P4eYNhKwwcw`)4Re;D7l=2l~aic({K z2sw1@uMRoxkmA4jnW;Sv(q1;7!}AQp6l1h}zdg%>CE?4yxhJ;O8yIsKaKiJU93;heQ~L@3=b9h%1Xk@2*J#ivq}K-6xwN66-LY zOBces;K}kn+x*#jd43q9m*&<|x%HtzjVIgtjWYACs;so_wjN6{K-%l44cWh#HQSO~ z;vdZcMU;S1Nk4A=<99fSzfTx}kH^%hr_@l+<*BXNpwt~+y~cOXh6;dA+(u-(tJyVm zS@dB}wE8kQ@#kL!gcIWbf29&tj^hN=eM3fJ>a-HN=pg(#W@vjpO0 z&2p*1|C5X+F(xakLyQIZk*LR3nnK%bmU~!ws{LZ**EMti4=PTylFZ{-nCuV7#+v5= zE6`};!{pX?43Pi%wKVISvJBM!u=6`q(lRv^Gkhw|S5?2)XxIwu0k*kcbLBk6ary`* zfp%jp;rFCrO}xiXGU!Q0r4+l88<53f>2Ye@`F1n)d9i9gK}&Bx$mqW__;xbm*fbNQ zP!@rHtx;|t4dRP3DLF9voPT0J29KPh-rD>o>G#$Z)-h(!Ob`MC7Lh)mWCq@E{tpyj z#fW3>xN#}6=12bX{g$S3%AGiltO8mo$XfbhGginwThzbZWqhjoGu8G)%d6M;i%sWL z&X@^Q`n5_xE}hdHjbUTrPaLvxNKhTyl-aI!IU}pCAqJ(%m^ICslDYLBykXXmy9Rp+ z5yXER2v}~M(ezIEB!kh>B33_&@N9>>6_&94PC zo}gnVe~(TxM^Ww+I~|y~W!S{)&Lbv^TX|Fr^T=21UMNc25InS^tQ1$ar~{*raueyh ztvX!MLx>$<8gf%2U5u}E>+b>Y*;iS@zJj8_iBnUa;ysaxykn3Pz@$`Xl2wO7ex3m7 zA6mU;+Sz0<0T6a&6^A7XnX!rFCMT}u4jfva66)}7X6nNc7=(w5r)OEZ=J}T^M(<2M z<#e{$x%*dTG5L~E>5$Z@VVL;pgV;0{b9GEyTw-z#_V@FoZM2;nR7n6y${m8MG7(hA z$MFehi7hQxKQJ1_Y<1Fozz%=YxbewH1d$NO)f%)Nwv>oMpI~W#8eaU~L=>j=25--y z<0WvQrkUq6@F!&VfnlqFK@E$GRPi%55O9uh1x9}du};_io_R`2CcBDWokdq?#c+0J zJa6H+PR%N;a(rF!D70L|!rT1^=?AQNtq5=#sb zgvKtev$UmR-y-yEm9)sKjY`m0X#ITsysXKJ7?*?VO@W9~rQ6CD3XW30-@tI2oQ zUmA?5IWwOzTL~%1{1xB6`u0a6ZQSt?cawB}oViCcjG859k&90Mc93N8%Q0P=X zD?{z6IfQ+~Bm=L3CDM(%L!nTVq=u1NBYo!kcvnq7weWJt&-eA)0K=LJ1x)~{Vq1>gaUv~PCa?{xGhM!#V1tTlc zKIF88`uw>7ggyHS#l}Dao54Yl_BpHvEnNj~c8XKMudDDN)D8e#?3j`#pk?-wkmtLP z^fT#CAUAg;M(SCR`s2?Dl^+q6&H6(t@sn(FF3SW2={#g@ZO!)H>>}_rLF7>IQyC zCrHB#`ei_T*lF~AWduO9NpD_4Jvjz;Rg5Etp^t}4Y9fq!cNdQ;PYZHCb_{^jo=@Nh zS;PAs_>=Ctr#OF3Z&bEmimk>avVX8Uj`?RRVAff5&G-kyOoyV{NOIv`X`z6VhKt;i zDo^&m3P8|K?%K}$3whFLmZ;8^u_k@^77@@T$s1ZTw!)GDvHpgQY&>ApBy-I>e^A5D ziF?dTD^K{$S4KCM0WUFSugW_tETKnzFBM6Yy@n-_VGjTf;Qi2cY)<2FKaMR=LVis= zZ;yg1l4vv?T`^+f#lXRPhFTID0U_yv*jFsk+N^yU6Umkg|C7)diF&pD-HOp6ji#^s z>LNPau@!}_<---aaShH;-l9?Fbt#q%ksLr2GkFkl#hlUv;8!@l4TxaOf0zJzVWdDB z{hbQ{ccrC6V`)o$P%G4iaWQQUzXGKGc4q?gsD`>3? zvV7yNB4=SNxX$-j%Z?vIL)|N2(9_b&`1%*TG2&Dp+@ZqQk_|;PwfRKT4<aJXb z*i&1>X!>Yl=!&0?qOxsUlpZw+g=mOEUIAdZ!|dl_s`E%sJ%OKe>QgApDH_>*=h3mA zDr+P@NWb$u6=kFUPI^C&YZ*R0CsBYZOumR0jcdu|S1m$wghc*7`6Ex}0Gv{s&U#L% zBLvvm!5$B(y&0*`Q;%6XAG!0pK!Cw0(Y}c*<4s&iGF6S1<8;$>T=Fp7K72tmZ7IKT zTX)e4Y0KRwx<}d_qT`J-GKy=-uHX8v#IBv*JeI4fh`^@NZyJJ3+2nIm zZ|+GY_0nqe;SLz^o@Z6X*luYYIan^C^t<$7jYTbsyRE=L4xb-k(lH7hvG^cuZ!JMP z!*&Q0^lEk##KHJ;;6$3>aehr}si+|?oM;dya^JR^w59#RcGY`evd2frmIJ4hrh1vC zxo=IgqM*<)NRpAM7E_F6@8{tprO75Xn^?JFh2%jgA5VYfJfCF4zU-!G?kkn}NyOV- zaj9AO*mTbeNIKhK-}*J{{!`q|4S%sQ{al9J`3;o*(EZNWQ;JTa_E*t9WUf1;T|Z=46j_! z3E~pEghX_hv23YrGLjT)_((D~4Crat5qV`mi{t8&HAoyKGAD=-&`Pwt3}vDoib24A z_$N);5PL{NMit05$xt%XS^_Jl%PC zct9k@cqZ>4bMvIAzdPSL2#8?PZrNVA1SP)Dg(#51al0TggP)&YXSENc!-5)&XK?SF zo$>p;x-l_T$Fg6WIPCsK1wIS zq3Bdm74DpLape4bc77mR(543T-G9W!c7HfX1QvXM%_69;MT%mI#5pa#`7OoW6dQ!IT?GT?b&&G zQ5Gc2I!x6hW=3>D4?PLf39NI_U)i8tD#mCys#8NGY6V1wv zHfBs4IBADkXg?{0jy7dg&5X*#p6om>ZVO~5;M28rat{`0+D3l30(zEgUYd^M;~w76 zTS+~U?qu+BK(FhlxbJG*2>RpO{KQ2w7?|tWH>n8n^zn=zV4Hp7&bKmRybkDwdCA`6 z0CQya0fRdqC1`q>++QTy^3B3cwp=~b_4B5I0sk!}x<pg4H?~u>trA{s)nP zumA?=^qhPX!-4P%LaU3V!_5u7QTi{g2wHTYfw8JOxNE&f&%WUK^dKRB00#Wt6UscF z>=XRI`nb-ZCX}`tdJ!%tNV!N85Jjp80i-BW3`IJGUZqG0MS8y%6zQNL3IRkqfl#D{ z00EIuLhnsVLXqA@0)Ml_wPP4JJ0US?m2VzoP`j>UNOK*r}un!@<0i|T_nj? zaShqs$klHndSSrzLOiPC(kN59L#wc#QHu>v+1X6O1ad%{Oz> zPVQI~AHOnNzcDlFR+mpG1<#f#2^{}6wbUqHy#K7EUF&<5nmvV9hc+#!5fpbpBOx-L zZfeYc8MIwi9@Ndr^7{@P#D&+0O|~}Jjrtr4xViC%Yzy%KHtOE;#crh!&;pu~SPp0= z)>>q`YBuv?V86`Iq%g~`B2@OH75Uux>7>_?M$6HDPkg*Yy&GHz0px9%??5zBU{ZUG zhTg0?RRrG`B!_;JhUVEY3M(s!4M()9E=*o`+xYD`ym)|^Lnix=?;*WC`6Qt`H%N{$ls_UMQi-D zO?eT&9%vaQ)KC1q|7pZHpGB!&@(glYL7Mg1+cNE%Wp(DiOCM^Ok%xZwS3T1WP z-)^C1VH8zka2b-g#lr*xq#wneCARk*p|%1f`5oSpalC9<_Ll)Pj?wkyx-%eIWhl@~ zmK6CGc?F*YVt%KFN~$yjxerU*1MDD`O8e~@3#{O4;{rO0HeY*#tA~c=VnsQ8D2MNh zAbWdXSKY~}E!M)bssV;zPfzs0x|Ip8YXugh8*@UQTPwn|XW94~tF3+`5*28nfi2&H z3x9(?tCIb!GZFt!A_17W$nNr*W+!lfjO7DcvvI+?$H*ipBRiBk6MFDPt>uk>gaQpf zC((K86281@Tj%&yx(GD?By<>BQlC31t5LY3r?#%U0_-fnt)#^af@|*r@yTNA?!c_} zLdI1)yIKWqlFAPE^D^^^7FX~pGgMM?#2P1)wcBl0oQH(vaAq9M%9-{vC_cR3i<6mUTxIBY6 zu3PTjQAFz5ex;;dT@wscmU3`z+RFBmQCiCAEov;kee3a0s}O;EREdI;`gmQo;I~X3 zT1BsI<}ZT?otYNa{ngvTn9SqZf7G==aD|&fGSsjUlkhZ?Yw=ZK8%h3{M9)(q5v445 zwuH&yOG@?IzUMf&NMOtFkq}j2pw-o7EUi$;8;>n9ewK4()Pc4omu@%PTalYy?Ox|6EhG6JTK2p`p}e)S#|D% zBhI|H8xWB)j2=Ai{2AY0VvbAAwDK6{gAD zEW_{i^(>8~mOnWI`!PF4=Ea!w*WDv)5^(ao%+K{}ZuuG3@6qZkE3=6UV25%vCU)W9 znrVe?n57tRUm3-IrfGVE4uIL$-+N9^3w7I=kEggjP%1(drD;M>*r%wodR=xWYW>@| zJTAUBGZ+wtXrB^F*GuP@S~E-GP>yIAbEPTA5-bncTWc05+dM_Xi(MnH%Q7-*PJz4Q zCu)Ny z+Ao&ZJnHEME|W-F#iQ|ICg65WW7~_yJ-Oo%a@`QSNEFW7+i0oX@}>RQ!-fjug*SYX zLSpCo4}phk1F8O-4+kHERtF4TK3y!oyqz7Yd{tFdO9Q{_xPEw8^xLuhAUN~{BBAKu z^X$8N8M|06`x5D>!xhphOYGJZxy}x4J~69ek&!ji9s;Ii2!u8Wgkq}TbRWo7Vd4`J z(c=5UI6}+sRK6FaNTPPhDJiE#kFGB6#W3S>_t!`y_V=S+c@j%(P4rD>R*jR$hYS3_ zQXc~DXg;yzJ-1mz65ILby%nN(z=eDITw-zky#y_#X^8~l&=4212MZSy+>tGwMQGp{Cxox1&;+}Y-L1{d8Xr2gkL z$+qfV3`F`AUG5iv=EqLURLqLdO9(za?c&gZDV=x8fy(>A7w#K2Y(s*Y4K^>QcW$nsa=30s?#~tk0`D zD(j&TS9T^C9k{aX$+apQq6@KPK6?q;#jlInX6(g)*NZZgWT-`}Fo1ayc8O|?*tad` zY{=Mf9mr1P8p{=++yhuKyOdm|;H7cNaydbUX~6`pFOp^~xt?y|=GL&C+4H8U->^}2 zW=i6DsW-e7jwT+}Jeq7479gp~&Yi2(Mb~p+x_A+O$jFAHU^;)I5C0BMS z9pV<{0mDjW9P${FL!3;4J_$Z+g6p&K6l*f`Zk!X6d(U|5KrWqYGaF{Dp{u9tF~QRE zY*92mzLNvn(1e6CoYU~NjFIBe<($q6uLHN`yt2|MW{}t6D^U`dT3I1MOa|t(NM0Yx zt}|)v4qj+=gP+Q4(gNCskB^0f0pI4!nNo%P{_Tow|C|=SV&W_fu+%hf(dK0N5hB`Y zi7~$jqyZQ`hdp>IddecwL80UC84?&-Xa7^^nMHY@)npkV8i|O7n0b`46m(L5Zk2Z9 zj_NWG$fHPW_fZ8%%GPo!MNK;&Op!w70FK#U1Hh=tpmRB76iwD}oTXuN^8xprkE~8u zn$O~oVU}bK`L#_631_i*?7NFDZMuD*$6g@p&9%M$FiOBsWEHI8B!#T$94;R1>S~Hh zNvqjm(~J~KnO@4EmX6Yg@}NbOezB83ZHu96BGVAj2$WDUW^CA!diXJ(>Sqg*NYmWU z7+2`sSM#XU9gsS)}MKp>G z4k*Yo9B8-nEy0KvW`BQu4Y9Ex2(4d#ErX>e0Fm3;bljvn1M0cRJ<8L-E^st@CTx91jvKwt9ui`=H zVaQJ`3dtD}#s1Hwypu1c*!_E598W3|s1%cA{JF~Jnum->;FrC)&$x=@-Wu%H5*_Z) zG2+^wgZN@4+5hIxZ0jyY({8V`TW;s*R&Y+$`igCh_qf}pO~vu2*mHajUDkv%S@=t% z(er%g`GnozP? zO4ig^8w`v%!Y!gjf2xL&6AZ8`7v zvVL*@Y1mCwZFW3ctT7EBMuZ6H*;rg$>F zUsD>op7o%#y*!;-%$NW2zdl;Hm}`5sn<s|S z!kQn?hq_iQ0UOkfp`LvQ2G+iU2OsdA*^(O@_HpdxQBqcRs&38wq2n_aC~M;O_IBs} z)zuYLmo1CQ`PKkw%)!<`)M?AjD%SH~zmpjVpU$+WBSVX}r|SaQyj91|kkBU1+dtl9 zilxPxZO^-0FLz@e&lfMxr!UVp9xo0)yb}*-Nr{R6#3UpI$D8+8ha(1ba5FPA>ti** zkh(}H{|zaty4rTR-fGSDVg%3{m3m{fc9(BvW+tGn=M#rEQzN5#`{TuCrwiT;SU7&% zh|tfR*YmnmEtivSH!Do~gVCW&OMy?DT+f?9RIRsw*!YBm_T<=61J75QFIQ2Loa;`l zm6hj`9`{q1`%_J6R{N7VuR@fl)*T!ixZgCbQK;4y>kArx!&F3p&|i?_ImiE;RCmNJz(jC{(JGO zZe9=WVQdocw=>Upp8xMR%%UQ(vq&V^M#bTs8y$PDP$Z0QVJt2y)C} zWo|zZ9+XK^HTi>f>v@rdJ#H$8gJ1YuIf%B>f#pL4B{<7kMdxx~Y~Ea`Y9vw=l!-r3>@)RZ8yK=#*YX81=QHto}wAz zaEL1%XQG=`OH3ymeqDJp8hYKD2^T_!W}7URqA`wp0_0GA=rt(l<{(E zmVqkQ?5E~Fv)MS>vV!uy2SaF{5^z4=S~%mEIf8Bb7tKWE9tV)uhUj;ESci zoj&hd&o_H~#*me7l8XK84`qEhn_-Rzd|Xqz_-8}VN{1xo>=~wHaR0dSq%};9tQ0Y@ zrYOzOc2|k&mGG; zLGPodr@NCdujO{1`4X`o1{s%l199a?G1Y_NCE1$G|7pS(Sgtx17x49iNO{YL)ELC&`_Hh0!_d-b{F4 zG}?xtyu?F`QDsPUg|!e5UB)v0Gk3e6EW0i9EB1S`7iq&G_tSNf618m~O0V*=0~4Zl z(KjS$jXqgd2`uEi&Ru&7y4#e4h4)0R>Ae5g9OEv-R)zVnkgO2sD{ch4-QAQA1)Y%O z_GqLYvb;@?q|nDqC{s^=e>Tn;}x&=2vtzr3ZV3wIqiA|OoJ=>hLfqGdA0bBs+d^%X1 ze^q1W6J(4Dl4yoj{+$TkNhfCLxY*{&TqR&{-H2SW;^*m*Sk`W_QRtkT$y+PRvDmxYC zYN@0s0g?Cx-}F&Zw)345i)zOe4@XldU?~<4j@jLAYHvyx6LH}6kFHoXN5ztG;0c6f z>XMXJv+4r*YU9CD6{CTlj~MZC z9(|5Y1oHb?79IyIRPpc>%ocU2>|$e&XbO~c6i+WM*flq)sAx%ig6&0(8+LiiBX->$ zY-uBNc8_f8)rdsxxv~s=DvNQs#x7iSomSubDr*gU`n_T+?(bo+yDqG=_+`*;NqIV9)(y77_}j zV*Rxq37WuNGnwmB)x%ARo{@ya5Oz#oCVb>MzoMoC;ZMz>$a=0#7oH`PSankiEPLq1 zs%#3ygSE0lODw0VCSb!Q?GQO{{9h2N(xgN}6sO>kzm6E3; zR57Sy6CL}bMp=QxUwWs$%k?zxZCR^j$d?T-D5}ZGM5i&t;S{XS>TceeIit})1~;ua zG$h*(ZJNxef!BmYuX1|+VNrY*@jYQ!l!#MQgSnYKZYm<7SrHvxE`D?n5lta@NSzz} z9qjBfG;V$uBqC5KQ#P);O4Vk0$9w0V6{#KFM!E}#Nwt+nH>_4;FQ58!3Eoz={G1#J zM=B=R#XfeyP}&R*Wp@ymtz>$0V_Egd+W6Ux)mPf0ZG2hX{HAKw#p2b^ct#jU6Xq;F z(mmU^22Rd}kjBRM#GdbfaE}Hxi-s08R`>I3UH60e34SKEVoq51-#f&l+??_%3WEL^DV_%Qkj9!mCgfNmqZkA|K9b3Q>*^H`7GOq_|~Bd z_O-pi1isvwC4K?mM zY+{Nqi$4s74Sq`4t1eDqKxsgJDg%Go9XwXGg%HSHTRS&(t!EC(SsLXyNyqh|;j_6I zd`PxHqof&Rtvhh%Ad`zv+-x(Ls>*iEt$uP9457s#Ni$vBaMlpkX`$%9U_V{U(vPo2 z%fO7B)HqQO5vL*~Nbu zc(8&rh>fzTHa{B~@m?H3D2YO`#1yg8U4Y9?%K@$Rqo!zNVCh}Ch+l7p2& znpF+usgY`yf)X;_us4O7%yVYs@5-IknMu$$+7b$T9Ih0c3iGw?*%Y2639&(xA*a-v z)42*>pNR?go58w#e`(cb_O&Ym=&eas!km_u;;Ti~S7)I05j|zffyMBI-HDC=;N0+7 zt+B_QT5{&G5k(;7!XV(-Nqz~A*2gR0Bj3u}Ao>}r!Ix@|7>ft zp@wVKKrS;DncB|ii|EFOra)fvJfh6;gT=A_d^?j^n-uaF7=+JgU-=MsIzbsx5-54& zxnzr(+2AT6^jnqKKX%kmf)KG|lhgFbeWOF5 zPvR_D^iU3n1bt+9c1$J~SB)A3%2tZ9@Zi#1vyYd{fQ{lpJeng>(5r1B4NS-gmnB9$ zSjA)x%S+Z}IF3p{t1%aLK{=%Gq`Y4{4lpXU(zFWD=U2@lMWpkG1m`nD$n(K`2v+0t zsn>eYFep`+x`v>v5Tnf1A{Oe7Nwf7)s-bLYsmq_N3H0yVKEd&Sr>64x=~fxT@!#s3 zM?)$*I`Wm?KC0WxhJuqWaXFmY2}JTK%`6W6M(fL2qf)Dknb-1c5*h>x*B8;4*ZBC0 ztlLdH{QFU}a{i?vLe3uK_3p=1%3(RA@|(gMGFn?@flY6YX0AD`zfn?zr}cuw5uyP_ z*ES%Bd)oPQE)c#U!N`?hv+7J{Ns1`-FEBwI4{VTPF`Do!CENBpt_UxGA>t^}B?qBw za(>s2+B|49`O&1i#+~!+LDVWl?Z=2B;hLQvUfhzxaB57d{E9I``~d zt5ed5COz)=^Ow}5A+RhrV4UnWwknmD0M49+V*tcu5eV^o7wHGBw zsodDPZz>a*il`5B>BF~kzo}H3bbqhyXT$Frs#u4N%r-=I&-Y#WH*;wX&OIwQ*}f&j z`f(!F{9O3@Bk#$3}<~!T6qPCS(f96x3ApNo~x8B{dZDL-;^*s#}$wZ%&P9p8y zPm(&UtzYY|sNirsJn;(DRx3XAZ_(m_7d=gL9Q;yKNpgQIhHkEVT}j+W!K2yHTZ6VK zwcB+vC0me920=aN(VT5&t~;4Cy)|SNBo(ivmu=9?7?GS8-BNM10%~(!6|X z8-d*_5miOqgoK(?ZhMp6l%rvo2Jt-A5xZ4fMal`2CHEoCf-#j6B~B_f7ndC$Oq0Zv zT)jZ{yrG7g#aNqwnjHrbF%T&ErCk3>wIpWPAb(i)2ezHX(EM$3Ui0~-tNh^t$7eJ1 zP@`SzyHSbl@1Ku;^@VUyrcX&ewK}x?Nv6`%JK3lnQ~l{2qb7!ErL0iw0JTHn%xc>9 zVNVZxh10e_K0cHFF>{HxNa14AaWs}W{C1!;Q- ztna+v9AM80_b0Z@?njf^d2~)Q))qwzWiH)a)8D2=vw~BosP_|Ypg>J9iIJ`ujIYC! zy3Fn^$7^%+<|w-G3}xr%g)4iZm0o%u4A;iReFT4(QtC6w=B(NT))#v;wqsKMg6PP@pZuQFl`M_H4F(rHMVkaA zt#_~)Vl5(bYU2(STWZ{&I&dHOvy2Jdh&Wc8o^S5`i*D276c&CisaQCc_#M)IxM556 zQu;b1Wrsb_**SdY=8o&+@xh28+=fV-$0U6W9-wrUF=|jN^3Mx^R_fR_&T5M zZy+Ip!`kjWZpxA@oLl7&fL1+~&{M{u?K=+6HO6W5?;0$s$s6EGp`*fMstMF_@~+bJ zhIrI2%Kq@?FsgSn1RbF)IXKtm6nFj5eNu@P!0#dO8>`tU=Eh zv+7=HRqD6$Yl@vApRlD^q)I;JuCG-jKIbjYeLRn;W9No%zZ8^CNmatV_F}8SN2jUC4e^xU%KlDYlJ5S?ZIKU#hH zmlx{~zbT?=qgY!ZR8=pm_8dFJP%r(>HvnySc_GTn;c zJrq@#sVcBtkiSgyR?jhXU`_d)(rAZHFeLI@?XKeyS0PL8usZ47_VZklB1Zj)Kuq)n zCe`wNVU!!^6mPc>%PCLQdLWl!iUdi{IDej9Q;>3G*&%1Xa~X|c3WH7D1U5}lEOEUJ zfsg9XXK-m+9XlDC#zB)xcLN;`>2-sR(}5qD8O)kRWi zuLMPbmtWZYp@~evKov{Wrlfy5hin`1vLVP!u(=w$uXZgT+xmxt4W!s&YGXuATBmYre2))v0n5 zC?yjh)Kave*&g@Hmt2;p!(}tzQs}_He7yVa=`(B@pZb| zWCjzTXdK^&kr{M{=-M(FE84Ys-W)A7c-o(VA~(b4bH}smKbxg0DMUH^^ih4qrR_-< zb|a}V1C)DoQj7%$d`f$sa@c|w8)$uT1PZ0f2C7`xqQAtRE~U%nlm~}v8y4DPT*rK7 zo2Ft|lw1-cize@)rp-BVdhqF8N>=YLClNVbWPeB~&HL7Pvt2S%Xiy1Uluf&>(_%Hm zIk#<&f>c~?Mq`3PtmNyjjRa|zdt5R%sg%l8XVx$jJEJ+@cg#^bJJBjND4iviPtC%1 zqw72JtVEc1orN}P(AAT|m z;eW?PI_CbDw0z|{UyuJ1lv=iDNaS!|Sz(2@3ci(4u_GNEa*tlb&Zu*I$Kid!`Nvp# zP6(a_KXvN2y;QDwENEIS8;DqKmog%199^M~D%UR@@XD}u{)gT4l=hDxlhLb0Od#ja zRZ3?#9$*TevLfdOf!_5EC7}C&qOl{1>3tPfaBvGL7>E0-HLQ|Qgk>}>5v22rEnD8$ zj{!ppkIHnrk1-cV>TPNyC;=c`Cm@?BSzU}*-$4EK9}e~ef_DQK1j_h8*kzg#{GnBg zd2glc%8VvH%nE;YNkU~>r)Jx>T&F3q6cJ4k>EqmdbBE<^usRm$G?zLeb|w`>aMGZ> z3wwtp^WLbUlXXbjb?3(5Yt6((wVw#2DMeZpD}2bIW0D`A3Lpqu~Pd!WyP6M_F(WK?qK#(&vAg zr`BrKH05_u<+AJ^o=6CU5Wj&3F!x+*&rgmWXpq0Zm!eR?ZsU)Wl0SpV1@CPh2s0)f ze2g*%&g-Y@h0J9StM^r&(7o+p=q?rMa<%`X3IVJh71f5k%uZQptKrO;%0=P&4dIn7~J9tPaqw4jRrT7l!l6{Z?$`xZ{4&zGN%0l>Zdzw@?E|{?l1-6aYHqwRb zT3Sj}Kac*0pw0?cDs5KGs8`HTO0IHIO+56u^4SgWC*H72xi0!aw{JiT0?nkJr)mro z#ixkuvLl&&$XCN2f6UDKf&yVRELQWJ(7bXQx0IH-!6XtM14Hs3hMc;QWcIk0ynvcZ z{Z9z&*KG)vI|(+o@6zq+f4x?yvOL$u;NZIaiT`k*e3`KhoDsk@q_eR4#GDykXOyMT z(AX}D=!hqqF-mz47=YaIRWkID?AFiVvQtXG|IrAW&ly9|tSRHqGfRBBpF?x0ba@gH z!zwXjB^1@>(-Rm8i6iET1w$&rwdDGXghX+X`W$+~Pt2+;{P;3@TYi_dA6P_i7g&qT z#Hl@Ec=6!_cF?}lR+%Nid;_Ea)?-EJ+wubg>m?5Uf64F*095#=+{Q-MSsWm1%$bCP z|JqK?x9dj(nS#|zZtIR}3zRzE|H7V?ZvWyH@&BW!KsOls`;A$t$Zc)qM1{ImCa0mX z0%}%Wuw(s-va+&@igSiE)u_R+|BPJ=1o_DuDCuaY_2h~tU4MJ|`|b6YH&=6-9@h(o zZpeH=9bbO!H~q6sqkavZl_De$*A21K%6sgUSYx5Jnl^dCy`lT)olq3SO)fBR!Q zJJs2kh}D`_ADe%n54txM{T%g8X?o7G9Kx%4xk|br^&_VIHx5)DUs95kE1Mxv-@C}v z!f&y0^3NlaKJd6A%|vbqTfq;!T?>+&apbDjlDKff$ffZ%4M$UpI1o_(E*A*RNNi0a z7HM87#hBr-s?64}1L49rk#%(d#Kd>up^Qj9tMbZ7A$Cy3t1jD(5KB>(n~@Y{Q5-H5 zzALWTUFvRZe|_G|j{nFwsdg4nriN&@P_MXm-SN`$6wS|Ou5lqybUe#W|x8OtN}bStWJg5*F#z#q;cWY%bIDd z7U?7ORAkKb!-YT~=$M(BDP%EIN;L(A*|T||ptt_5o~=NRl^6FNs=?kPwL!*3S3E;< z%8N-&`GJ6|JTa%Gx)M@wS;I`E!pusxDGzR@Rej+Dy8YP|gL$ArGHG8qmvs@EmDry5Y#lGr#m@iC!3lWAS~XUC_^h3~!E* zUl$Xc+XGr!#`&)0jDO1Z0Ioz zTb6e)5E^3_cH)tU(MV(IYS~u+ci^!GLqW^;HHNmUZyBho$y2wI5*IhaX`&%2eBQ*! zQkNYkiR>+i+>>Ku<%dro44~aqks0Ss=d{cqL6-i|Zi$+iZQG0YB6BM=7b1y#VzH9a zs_o*un}V>*W$+x<=SztGYLciDS0P@2q%lmtBBb%VTZviZl{8em9%xSZF0B%2fPwuOX6xg1( zmTgOf)9>ax*i)_F|MgZ?AHPmgQMszx@hPDNw;{vd7rCHL?uB~^06YTDtolHwOP!g)|2YOV=^q81^#zd87o1ehve5M`8t;#@br78okt zziXh1xUv5NwdCu(Eh_i3AT~}>-QR^?ojW-^MP9G=mt?2z#~jrwnB>QuCxR=BKVckc zr1SpAXK>GT-?y-%H5~*hV4Y6&PyqMINMufBZ9`O?rjH2`OZlEMD3B+FJ4Gm%0Lo4W zgLV1mcm)!22@9VYpH=*%$NyP3NxqTV#i2h?LG>Q|E29R6TJRrvjGmOyqlJGa0|0VIzlOmS|OswCDHOv37*3Zbi9=FA?9~nR=l#4 zx4GG86Mc%y$-t;30MoPFJvcmEF~5n^bYH05KA0&2UCt#`eR zFSzIG;>|r@BZ>G8$BgPN1iC)h)aMkcvWlxaFP41XvAl6>c7DI+CsM~+VwV85OIg!=mTujKp(~%&eosmNwE_IJ2=%?6W-c-L5OD;HPq3IVL&Ry( zgw1p~;UXoI03znm*+EM*R%LNYVpM2lRRd_o{b1~}1&!nMAK(J91M`SGy&z8Z`1)0%xI#%6zG;y_|7G~uV09y!DrTN=+^S($ z9p7713wK6heW8@=474^7CV^#45Up*jA2uDKP-fwwIUf49_W;4kU z``e8xCj~!h>Kh`*DMGKqz2m}eQbu%5uGGns!kUO^ZZK-W1n~^gk6I%v!vLXD88RPG zw@|hiGeBL#lQNjZ`U{c9&Bgi=Z?PTAmdsRwK*9C_lMd}jnE)i|H!NSp>>cKS;(JHc z_uI5d5ZU@l$~$u@z??6>P<=94z0$g1t&*lHTsuCT2vzQ5fJ)!5fnEE%QL95c7~D*u z_)c2Q-+FF(;nq$f^G*cQ0A_p(N}e=%I|{Ez;1x6pDcRvYs}Q%gR!l8n@oy&PN(Rt# z!2ru7Mm*HN7g_~^G(zYH&@t6f2n}Y`Mdh-btfnq*?~*1+M5QX=P;Ovc(&gMPIO)0) z>599-n|unb`o{_Zj)r4f$&EdY1hMADrQ1wdvE9sJL9wzM2?KG~y=O{=4~xhII!{0P z!ZpLHis~VogUn}7&ivqFWiUroG`Px%>aEkuqKDX6EWh9j7+R#;5z=tVWu$d}h@0mVO@ zS15yTHWIOFDrN3mBu%P9Tch;~QdXgjRENPtzk|lmC?qr|{32ekp}!MekQc%Rgb3xc zHMl?ycL%e$@;xsA_GJH^7ia&Ez;Gk;=hx>SLLwpu7It(sDisx5kTO(%mDendQz?FW43HNMY3MSZ zI2f)N;98;#Li?~_*w}qT5+Uv%8Lr~Y!^g=}=RKUG$UA1766mcrXpqH`Ev4Nl8KiWq zmAVKONRkOpNi}m9byz|_!6s4H>Q6AF&UT5mZn!3?TCZohL9!dzR2dO9I7Z+(bg#0@ zA~DR##SZ9qdWu_3wWcJ0Y}IBHk)g>U z-i?Lj_Tdy3`PuTPK1Yh=;Nkx_ZFupYLCu(*Td!?KyfIMEGi-<7a4NuOjR~pFNiRk< z{RIQY$_3T9wWZfV{S52=e79>}*VLzev*MuXe9x`X&xgpYHI6x8+ggA%FZE|7yO#NZ z!2TxmM_kVOa#9V8umbtl*WlT800h%K$+Q#6fzxMf{WMYU-oCRb!n&=r5m9f6*N9G? z3pC()++Xe!NhH_1KRGY;c6WE{55R^Gdu3W!FtC&NZ>FckYzggE)+W5CZ#*u%VRQitApgZ?O40Z3lJCG!Km67I z2I$Vaj0X3%ma_C(VR-}qT6G&H2LLwmD)JIG1CQ(#l+9(V=73}shZh$^6+dkNGM)~v zx8?dtRu^Qs!@I#G{}q#oknpbz<9XJ!CGd>@xK4n)`{#jpe1S)BY@o+Q zW)T0rMlZY^jlC5hlvfaB=LuBAHr{ACPafESNlnV&Cbp-;P@%$sw$YS-kNAL4|HETELGG!9nln^VQ|X3}|FYBPt^x+2HU-GufXKM!1mS%@ z-Sd`VW-j5cpVs(vEe3`7BGJ`a9bQU)0I`sT^frBaafMosJccszQm80>RPrk-xs6CD zD2MTYJeU81l-nOC)~kd)$GcmjC~j7gN&!_o(a>I2VldBlMP+3cMn-_w2(-f<|N8HK zBUedQr>sO8CCCsTAJ;~jYFyV#Zf}+PK7v^as!`5e9nN97T}}Y~q$&TjoqERZ_6UCQ zQ28|?-xEo2&d5|IS3n075v(2a{(Ok4?f!ra*SbLsJ%n&}oty2SY~EVp0Ev(-8uRu2 z1`0{nx0ig%cWn${?fLTR>TW>7zvIDWvm^E&^t}|G4y_>t7#Wy)$~CRaQ6z8~06^OM z>+ho4_yi!pvXtE1o+h#c+03mP)PSC12RY^Tvm@&+3{D6nef)q)#-@f@%+)xCM8#%@ zANt)D8mZbPgc|@pZRO)ozieVW`6+!3->{cA3kwJ56S_?~hvMv~@BXjT)yScW@+2fu z_+>Y2!`GkN4y#UETnNV^*bW%b+CTsTk%@^3tGTg}5wq0>2p9%;5yTrvg_tAp_m3dm zmy+nn^F}rdk~E9u(BVzzKhF+-%&Jj-8v6Som>&5DmqoX-8VqwHmZ90vboe{g5S%Fzhl^06clMJvfsqp9p zw)3hT+k7#Da@OEsIPZm(+5l+_dXZQ}X2zqb02kwIo`3N>pOM`0G%MRi5kA1^r1)Om zLvbj0Qx~u%?lwIQM;zFO5w&I0kV`+<2+#by(`wR8XPOb@mC~J}3(jyNG2<84iT&ak zm7QAmVA!Tf9hU5o=bBbq?@T+>bjz%TwqE&034!FkX8fr~EuT9p{SKbbbs}Tob@j~I zYXw)wlS&KkccmHlk{`fBtnz9f`EhX*v#WkiD}BQ_V!K@Kh%&aA|4(}C}*}?(L`Ds1+VNp+c0A3@bUc%{WJ?-nOPbi_`%Di;aa4H zS$P7A(~FSkCU%J9Lx3L_$WaIF(6;?d;i(xp`Lch7Vs`D{QA@qGaB_AxjHVB8%Y4a$ zb8fyAO{A)AJwMqjhSvj+alOs7>)=b|_Elp2{bNL*VnY&qpt^pucckMAO*3N7{om1J zw)cP0BhFj(LhA@(4id%<|M`5988wANFy}@OvbAlZ?<0ok_+8(OG+; zYuwP%K3bDa1ntdtVT5Y9nuk)hD=QgV7u36VyqgA^*TOCe5EBK<)4NSbqIJjojb!-dY9)>9}tWPc7jeBcX)r*N+*MBVq~;;Zoayd zm?5Qh4c^!iu25lKM2=H_l zP7j{*UGMOwwlt`Q`LWKR8ly4Emof~ljWMK&(UqR`Dd`iV!jnbQ;zBU5THUj3;2zhI zOrsAB=m`4z6WbPI-^~38_2=b0?HNBdy?iM1-y-2-6B9vwtyH0U*E{nBxODFBqTwcz zSPZKv&;cw&vG;p0RC)jy0DB9*vH#_M`BqR`8Y`0HhL~6|6Bt6E8Sc!pd(7)&?AMW7 z8y@Pf*E>g^8gjq=8DFkzAhjHsQwY?ZjbV#XGwU?_h=_~3{i&!Yu0&G?U*wCQege4Z zA_A8|gu+Fn@&jnRaV{{}_C)(5jjR*jZqBJos zgyl;9yd~=EFOy5pSy&Q*ukDElrUj-KhN2{aE@qMc^U&F;*T%A5bA-ADZMs>{bU=s- zdE315fi+Hha-%-?i65;+VkEC2}1JUQ~9ZXy6ip7|E1>)H6TXcPYWeRPRWZT_*A*~| z%JnumAcQ-7NX?T?3kZ!13uF9BDDDra_U@Vf4I2@^MF6eoCU?3M_1*5G8D3l!W}?Tx zVF&OCI+%bY+%IpEp!PVXaz1d+aJC<@tD6Fd$FsnSq>3VF}NF{8n}>p_C|g@~`g#6xe}l3cWXkn4!qs*? zn*4H`=dz({AL!AX@wac}Wzq7wj;fhMnu#cN@Bn?MjKX#Qw1*EKfXeOayVY?l_jzBT z;W|F%8edH&F3?eP1Gq11a=cjCzUPUBqx{mM8-$-)clpa`f#^9k@ad}MDUC|)rV0%N zZD$9KK!}Y8%-Y`4NMk*d2;oy2S0Dzi*F&3To3=PC8ej^+8hmszDwt3b$uuQSM)VrA zPC9?B8Kgzxcss%ZITNqLUfdFL`!c2~)`#lxp?m$DWmy zuS*X9-M8ibfR9@7Z*>!1)|WoRy_GfD`cy*d%Xz+PYP;_f^?(IAG{8;Xt(SIOIF5s{ zqIIHRGF-Mkl=Z==%Ud|6v)m+88*Xz25Shm2isUcWke$Y?iLE4E)CGX#UduG;K$#{3 z!T~#5X8+579|h0qVW#wVRZw`h6d!(~_>@79vIs8d_Vrn95#x93lu^ma-w$E6^w1Lb zncOG)i;hBMkbwX7Zh3We*qI2 zEMeFxvHVoJwH(uJ^;MipRpufnhN%Y^is5x3X&DKK$O47B`pqo5un}eK(x=P$T?FK3 z4-yb`$B=vC^#@_VYW|AxACo@?$DRWQ;k3_G!{xC*aHmtqp?XcQa#1(siw~43JSPa% zsF*J!Zh-*fZ4oVMFcRz4_i@^ z_vD0eL%>$LG#Ea1OE$g>vDaNL=QQk<1vtXXB?DmXlZ z1e6FkfeJr+nI5^v0tfBx(mzkYgO0xc6t%$=CRPaDH$W(us*HKxbhoaJCJpGm6&z+O z-c;P@5K->1->DM+iXrYWduW@|!8~?elkyVOh}B_$B!8sAV)V}O8_K+d-#vLR=BS1T zcd4jiwYiqu*zTc3;&7gTjtc8<(M~|Jc29u%Z#@*duchSV41GEC`WuF_9N489_73dc zdL4q_IZ@o2ggb`mo-g{lw5AE?l2Z_? zW9Mz*DISRk1i!lgl+UH<;BI>TLlN9miE6pUfT8##r@*DHBAysa-AzD}_#dpE9F zhdl}6*evO{$dqsOG-mDc=a9-)Rehzm#M-~5_X{Q)$NHFuwj;a{5&x`_soua_SfFM- z;s7xnI?rp^`INd%-K--JP9_wlI+zXR3S-i8H165Xno!sT`1{YO*2bVJkp2`2x#lU^ z!AW`M;a81ByRUBl+dSqto-6rPS(Pae7pcSLxK^_QvD|>Xa(;F`WCeK?U*~@q*+P3& zLsYY+D+rthO(BM3n!Vbs?UHKq6vL&P=;4RL-a%yMutKzrWh$d!wwmoWnOa3WgGR&V zVfd1R1$f00X{wW2s@%8YQ1^Tc={gX^@)>r}#ULxX{5z-&QXjX$3u)xUXt>$(#R zK<`2viS13Hg|2Z^K^-67qYH5VljD|U%eVX-mTrPL#+`Q6PN4h3YXBiDVaP-#_xdk4 zJQ&#J28r9)($HW&7S$R-L-NVqc9R-0h@4C|_b_JPdDEux$Z27gHY$MFk+N8&1M!r2 zlya~!E1**Bg4l4cL~T>J##n0uv_3EcwabzqEe&oxX}@S4@YL5WOspp+E15j$hoOfH$5tu0oDNELP=be}Cq& z)#Vakp?9la-a9LI7R>HKk|5$82gtm2lt8uRzR?}u(gG3_KSmLPux4gmJ)OIiHBwAMse{9bg%cY3OvH@cCL*M?T~{_VwENY!j6B9=^TU&A zFktT8TGMrc2f6f4*^ZOzMa-=V-=-L(Z&;G(X*Y}Pi(9VYjsO(6y6KjeV$ z|2T2Z(m=I;QEoyj66%Wg0s0(fvF)D=wVIzCW&Zev`%j+iDo~aJ#8-6SJKvA3ciQ8x zwPIiWf}+aGO38Z~4@Jtjm+G|(hYz2j8u1cFnXW#hGGJI0r%C5?%1%xVg?t)2TR!r1 zy4mF5M>#{@gL;lryZd&1wzdEFA6TVc|6lkWa+67_qJ~|UkT)*r)BnOrN=!KHYxso5 zhq$z;Gv=C=Z|AHzO`>9lXzPdF(e64i%r#_>bDq=wUm$9e!}B52=Bk}UvkC=%rqhij z*Tgi+>AZc+10!oqM139qW+4kk>=G$vD_?M%ouuEcjbUe2HjT#&GaoEFjfL?T;0?1aNu2-Dp`LE1?%G;4xzkwheM~dKYWG~Wnki&ogdWE=P zMsJ-?TKUP>w1O}6892CF@JY6bjqv8m;{VeNfVHZM^~&Ob34DJ`roB%M)RUh;ll&g< z;YRK?_;xDMX@Hy)49xkBdDIGbYDK^4=tHRYt?&N$ypABW9t+I8MM z$IWt7bTs{RM=*p@#V_6C}y9M z+IAF{vD!2gkPt&fjqd$=YK(7mp@H5lPqu%VzLsO^sJbw-1Bvuq9dEM^3Lpm??(={DaTb~KnheQL!#l3_#azF3Mx9~L%sDT+P{VUh1v1MfjZcU!QAye48?4&i^IW0 zOyO^ACU_O{YntF%hQ_Fl)w+klmBL~4!`5a z1x2AGg&E~2kob+WURinJhBe2ig0W3>uc^U*Z{5$LUoU_UQ|vTb#@Np8=yZ|Tqyp|e z1ta#a_Ko@qgZm-w_mg&**f% zMX5?Ck?aV(Pk<7mN9W9vpMKKLqT)wJ&!SioV+mIeJi^(hMCAXNl8%nf4f5ex5*BdR zR<^fhKy5IAPE#)9?q*L!t=re!;MMB^-Cb`rn0K>tUNF>dz}&wc|1Vx0@aLu0;q**e z@uu~K%Vq>W0iUj61cV?2#S34k_ED0rIF{HhNZ-OIt3=DizQ?@C)6Bgu;ip;}h_s^iD1wbR%Kk4Ik*xo+=+UAp@gKN9BEmu3+3Wzu!6$J$1h1ynY7jf&KStgFu{rZI6h2 z#DF^j-rC|T1y~3em=sjTTf6c9^9_QDqZ^0YqsS8l+WJ8l+2B#%Nv@J!kjq?*E(}=NxtB&i&qa?vtPAxd$@&{?yDqD{xdy z{TSa#1>jeBc+aZm#Vo$V2Gu;|ctp$a2C?>4WHb;UJn=en*cnz7Pd3iwhoP5D<3U|55f_yZoD`++G_wYve)RjF zciH#{O0gAYhDDa7#9luaH1b!F`a|6p8xl<40=ubJy?_0S@12RR7&5IwzO#W}C}DxI zzZ2zxYE7tepQe%3A~%eWXjSH1EPBQ2WZT*Gn1iCgz{l_vmUveK>*D47^KGv;i{Vbe z+1lIQCY>MKMBS1Nk8lHTK4PB|lZGT;fosJWm?#Ent*JL)O{NW#lViDC--c>z#cse7 zVE2d@xp|=!1(<5*<_73Ct1r6>=iKYR%^jybh8WdG1BpM5Wg*KBXw&hoO2TkLR=$31b~=&_K>o@OLq__Yh60 zIvMPUg?FJvhIKuW0|Rw2tZrW83-m5gSj+jo)2I`Kt6%2POkEKpLwxMpeQs-yz0T~} zKW+n_?KdA2LwCX)SN^Pt>O-MP$;l$}Ki|^1GhJ$@Orm8ELWIRhB0HAJi2R~iFZG*T zm0LYbGQPnFy+mB7O~KN6I$zn<{0qg}42Q7`(jdNTb3tBZPg|4{dNP;m*UgRmRysL* z5aehe+LxwdB;zod1lffwlvmZTaC#Io6c!adJZiPEv7y*omy&aLcaKuP9Lz2tYE1sm zle<}2SQOSs?n1xTWvL5#XwK6=@TsmrM8?KyXdKEWNw;c1b&$lpcf-0GVWF7CJ0i|O z{&l8EOe=reI7Gy(TP0hmwZY>Y?Oi$e@E&og&zZfPi+5w=_xD-l4qCoS5)*kMe2Ioa zku?|K;}^TRUulHVL)Q9-g?nFYZJ}jI%($zqh{P{~_GpmiTQ8@{!{yU9mF z(oZ&3y7%!~`&^sGD88OcV+p25sZN3|!gFi-j) z#zU+8ht=~_Ry$Ii6waO|{$OpT|D>UwnD!srk7s6P=BhJg=D)m0B@#unlv_Men%)0R zP2XL7rjH^jG=jlRX=$43-z~xYY_aS~l<_xWeKmm(Z)A5D7~3Ea8y>CNVJ;@Ri*sY# z_H8uEeVs?t!9yi2CgZ*Mc$-^Q_h2bvxrvv> z=RGvF(!PU$*%tlIYcHstMpVCXp{;#2uhVBGCcgRJ{j$SJ)`$@Y zQ<>UD4@L`=98vgrBl>R*IRF0EM@{^`)1Il9WD=zF;X*3f-9*qbSD;3$#~U~6UCnx) zh5s|Kp1Yj`0vnZI%G-;8@rRS#Z&IJ&{_+1&9Q~K&nQkTlr5QDmUymul7qRK->D=60 z@*p}!Mwzv=G~JB0L`5@WS^odRkgqKx4=VYiny`gsQ6t{fHY}Tz-{JUH5eGGs&ZHiJk87tG$ry&PfPnX zZzlnh5_rJE^VzX7uHPJBElYI^17pZD!Pq1vC6{iC?jf3NXB&rxh9V*&hKAHL^RM6; zed;?~l@?X4{Yua`Jze;F=fEALDJ-l;j0ecpGInGk-f;ey)I@lM(b~%KVQwnP!SoIkI#7QG+>JT zP9$~Zi$~4gy<T zMj$F7At53n&HQ6CWk9m4w>;&|n>U%FW!ISQN>*n%NiZ=noruOJ7B)6ER#v(^-w5z- zsT})GtWG#>?Ck99E2aE4add;Gwha^tb3Al~ls+FY7EdfO>rDo8Vb7;OadvUp9xpfZ zCj}kV8|=glU%_j>D#bvP+%j)&VL^40=yiG+qQJf==H=Be4Wm6tOckZ=NC1`1-jLp7 z;ZYVBZyA4^;R{wY7&Q9T=ym$__g}~Y>i8?dsMNGKSs1s+Z+(>o>cfNAjy*;2%T7Yx zeeOb{*q;yDK4syt#t&kAa;(L_=_lQq$*?7F+bC zv+XDKd_&hI6Jr={Il;ba_d;S_UDU}<=`vO>sBF8_*g8^9rpKoaVJM8qNScPwv28x z$}2X?%ke1oH4fwhqAib{_ut2b&*H*)R<(@=qA^b7n&8}@)cHQ4yryBuJ)V*% zgnu9*+VflYk0`(NE;%R%=iOvDeqTajaQRl~oP)?gl#r;NtH1y2KK4JsCpWMfk;A$e zR)5{6V>3Lf-&d9xy|!L$*~5`1vrW{&O9Uvu|G3{=EoluDh0mU&VH?3R~7;*p2IrYu7OO zD3;B1KnBar+?g#8I#=l28?T@|`NP=xo)x6bI+Gl?LoVvDc-(8r6r*Epp zv6o#zDszuQajRyzJ2fgJ3Q^=XIm@YjRz)&=324H1Wu@P>2UCfACgXnB$si#QFxOOR zZ7YZ*xuDyss;Um5O3hccO&Gkt0WRREzcYrrYgL&u&^L2E9)dM&A&6e=0rzF zCvQM$?oUoYM}Lf6i+Qkf?5?jJYz8W(B-nN_*a5Ks(-~SUfrlYUBa_6R1ws^F!AL27|qzv=&62fYs#l!JO6C3uWF4 z(zUm@2PFcL)}?y34F_G!#p-z_uSiHpqE5{CUVD0;feM0?laqo1h~HNL8?KsiklX*E zz3=~HtTU3nuC^BcVU_lC+^3*&pz0S%mh}EOIDEs755h8nMc9^V!*og>*^dy;?u$Xa z(znNUtHVTy=%{?POc|jZFPPGhNwlO=Vq%|UGgWJENf2xBQETG(Vb=aFW`kl-+zwQc z+uq&=9P{hx*WvN;@!?^>@gcF(1I8`uo10DoNko1v=3Mtf+Rd#>_xGLJuvA1GC2gu| zYE-HZV_N3z>ZX5;{pJUv1jqh|EuAy^6=x}KJgY|;oSl;8*^O!0IU`47KZod>2L?R5 zHG9lH0~8QqS@yfB`^JB_gD+H*`)MdExLyR0?eLGJTXe1HDeVC@_qSMstmdoDf}*T~ zVvP9n3BZJ7l`&Ecbvy`6e$be+zWWrjEIjDgq*9fnS__Ps_S-mXFIGN#qjvG|&@aZ1 zWTB!X6rM6}bX20+KCJ%~4=+j#*m-k%H7>xJV#Y(6Cvx$awEGt={s@}IY+TPjJ9c9#?yWvxIpny8 zXLJK+XRq~7N{c&_zM%k!_u&`__=tcbzt`~B#HH#v@rojrkSK8?TlXbIaLyooL zw{g$;uy-*MvWmRyeW}s)=#R_=>x!;j1Wnv9H*rsq%lL7>HjVcni6HGLkfI*NWs_%6drf2*^}jczwYG-$TiNe9@}AAn8$ zf#Z{wHZ)($r578KqrOXqwZR-aPOOmQIx#9B2KtwBsOF&8sn&$n46VGYD+R3LgkCt&7EzIb7V0${X`TictF1- zppQohs|VZIW40~qVe!wUr+|U4Q9M|5Jy#HWgIg7&9~X}jz~mkmNjGi8bE=Wucnb63 zHEAJOuT;Y=ZF5dv=m6@3sOk7mvFk&EfShs)k?NDf{DUjoPP}Jp#|JyqyFp4M#SN!* z`LM2-D{P(~Hea+!4j_;dtEPj&>np8csup0pSKa`~(uQ0;XR*vl3l9{%-Ysu8+s3S&8DBljTR+Ul6x+ne zO{?Q#Xv=TFUHXyEO0IVOn7@1Y%sjlC|+^n6`?j+O?}e>HO>?eYYwT2mQjv z`X1f02;h>Xe4hBN@3_!}20cR~E8oY>4fk#o*=`cm#L+M-yq}8E#!(>B@p*WvN(evq z`1ruHh-ueiDO*KyVq)}17TbsMj-yQJPBk7&zw1Pybv@hr4+vm2Xgx!gN2!ACEmU5Rn@R}oDw}QN9$2A#<0L# zy=Cxry&fL;XF#(CvzsE4a=fsgNHcpz$?3{I)cZjJ~B9wEU-v zW43<_yIX#zEVkHVL7?21IMZs!Uj$(Q9xM58Xym=lKmAesf~F-^Lk3oBc77ioJaD1D8L)b5Tl={A zQ>Q!s*eU#xx3^TjKj?zAh1^682uhq<&E0!Ri;ynt) zv9P#Rr`jSxn5~bwTVGU~u*=l`rc}#yGQ#-FcxhL0lZm_g8@>s+LN7KheeZg(?KvIb zah85+YiYm{4aCb`!F_i$6gz;i#om|YSWgIxPnj{wIeWd9fQMHa3K;fF>s_TDSCNwv zWNkcCN^kX6VU%H00c-~+#a?bga9ue5+TGpui1{f)2dGTLW;a(q&~-hd-He-+$R zjiZ{3@=*PL4TA(j50wUJE9si{1*7ZaaD!mSNrji2x9Fcbd0Xjpl+}sf+&#JC*Q0cv zjVZr!(Fe;#A4#?&+z48sP3CId>FLNbS)BnZJ#`={aZe$`wRklD^liua?B>}-(qrGp zMJsA3wca%%YMj7-DUX}$2ZNcKa;T{Ga&NDiYpt4r`|y#WZH|xuPWZ^%;kvNXWuU7$ z|9LtUMDgXoy(L*m9t@)>RRuRtQYx^Xc!VqQt__YovOe2S6{OAfYz<^Q7kd}bIN~re z#;wK&#~YamlUh?d804fxen9b&Evh$Vkf(|P*W&U;3zTxM5HG^9$bjm1qu8QdW`Peo z2=a%&RL0RD>8*>$&_yM$xE~2ZtEM5A&c9B{vdnnQLnmm~)zsAVj~Mr_wcHUE@;-YHJV#NC zYEeZdp6@|9>%&i;yrNDU4S zw$RUo+woD?xonYy8@>1q{$~z@VNPeUtPqiu;`H<<6C#(S=cOaTe1V-F@LEYJtYa~r z%OYZcOtS7bS^~1*Qs*Ty8?9xK>m=D<1QsMU^;Pj`ijbS?KduO?`5mo`-bJ#CU%c!lizp=Slkdw38G(I(@ucw!9B;4OSZ?`#Ko{cs2 z!o3S((mZUuvddTtPxn)N*pbh@f+PZU#;NisjE|; z7B)*+aj9cwX6|Sd!fUR6$k#idrQ7+Xu>n52wsOIl3zJ13l~GqZ|Z$HaC15 z=>x~g&F;i5Cii~d34j1UM>RFt6W>eeUa8e6Yf+?-ui~gPQp=UR_pr6iLXn?jW;#>Y zVSlq6(AI3(B|JocvVdwuMFkKtX0)P$xsbH1taeycidQ1JV9IozYf8Dv(N#|oBs!_i&_3bL=1tp1ySdkMV{4OJ4%K_r_vpi%O;qxk8KPNl zCiE&2&BDvKank1Ej)0B3DglYepx^GqYC-Zm!8ST7n>o_!y@|url<&n&ay%=PJ$izt z)&`wwuGMx9Iz@7FWw95&NFbzEBGTooYf{ZCK2~?#k83O**gLeU*X>;8R;5H z$QQ|o!DmQe9~b%>KmOjwD3itoxo)Wz^s+&*t6m$A;rg6RwD0)xNPLxU;Rrh;Qy%ch zVQLn7TdKy0b-27#EG^gL?vV{s6Lko7%uo#(+Xs9V-wNsQwK@F0s68iPRbpei+~HAi zV7z`Vmyo3xp9S~yebdf0ondh?zvvt&m5hv;XD8*zTD_y$si}TC%vQ_QDNj&fc#CE| zR8h{u>}-Q$@BM!1&#J^A0miP*Pc8!j*~1idi6PeSV3 zfD=eoPENWmc@>mqadZh+naIiFKOcWr@FJW!h&MaP~-GdaMB-?}ONl%$7L7Ci~5)WlVqf_R@z3 zzE)HWH7KU-q@M$K4zTCYpDZJhVJ|qp%|8Kiellqty7Z@?)l@%@!$cN1J^vzii_4T$ zRQma~Djz&mNb=m+*DGXfNZ*})+?$R0`jSr>DeB%g>(uPC{~c>y*i?%3^pzErgbOS1 z)+on5ppxwwHdTnr&%@D;Q#w^hyVVNW>Egnfno?7AZW1d{pMhvq(lTX&|veppEnpj0h_?tK56!$6ZKzS zntfW~IZ^lKQK!DyDdO$*CSC(F*9z9`m$8$g-vwmeQZ=zxWM!GoB^UWlxo_Oa8uV*f zS0gIilJHR-PBd4$=9|5vl`n3Q8yY zTqA(pZSK5+Nk5l4_|`N|v%S{Dt6~x-VAQ_DHN9kQvyzD&U>}^Cs`o%|zp`@5&dLIi zA^oN0uGDWU@AP(p4Nq?>=$1mMf&H@4PDOD>+0gU zxoInlJ8g@&NvGcPy(`Oxzk~4Caq@00VBa{Kx2tCCbMN!ne>wXl*Y66;%-^-rj&~Zy zA7Oi3UOUQ`sjR$eq?1<9PS3-G-QBq=8s5&Gze!?^i|-cw9E} zi8Mpoqt63DKkGOzqKeZ#VlF+%P8gQ)8uS|H(vXl?-rYBd zzF#9W>@7C!*8b_sJfGJi&L`#-`*(7_$}`GpJUIW~^vawk;PZ&u`UbTiZpAhlcq-WK zgdSy6Tn)5N&>gG#tePq^nxS}q;U>M1hHF)2g>8HB)@QIh(}SFUKY#mq_s6@dg)uK@ z%`N%(v-GUL=d7Q_QQpX;{H*NG{@zvUB7i9AhD3ik_d91fAI*CBmzVpR^<(~qN6J|f zQ-TS3Df-{LS%#LM<&#QRWPsR4Jf~UcdU5qVz={;G8HRA^ThZJ@_v^`bW&Q8ya$M1g zFH=p10OX-4fPO1&>kXe*IzmC)z~Hh-UoZ7;sJ$GLvE;#2A0@%%qPdT z*7j-c_Tly^yebQOHUF8-97ofaTK)8svM)tIVDoZuQHHeVOdIh>CEk-&6hLR?hG)1h zWEAb@6z#6A`B9Qy8Ts>lc%W*an2y@EdS4bWE{L4CBn&WUDo#_vCNCm9`A5Nk2pc&h zE+(w-0WnLnw|^&7O7rAg=)J?-O)YbdTS^^6Q-BEvtOwnMf~*{%r$Ew1H-L9{WR?2- zfdNB-iv*9tR?==hzgv4&E`;PC2CON!^lRulH>c<04MIWc(7?bz44;59@Sfv}ROPbG zbHw8%(e{50S0xlnKNg?V5N(W#u5Jw+%hMO#&0-m7{E51XYRd ziPi~O(srWK%7ObVxM9Wd*?>Qoy+r33^5*z)>T}?3{h!Yv`@pfF7}Ocl4miMduLdvcxZH46mS*zw8xu~8kKFaSqk|7hh(widcQvBxmwaW>lHrc!i6-mm1y;EEo znYS_%F30>CWIosBkjN(s4-+}bDJp`kW*h!6SK$ig?0Ajr&;~~P|IB*G%9CcPHiKJ- zFji_bse^SN@+6b;d)9k%w#W)o7atbNa<0k%=f55ZD^z}AZbc4GC?&Ed2$&D5R|rJK z+%I{DIaDsBe=HIeagXD^WT6N$QnK^uOx)HPrSNA}!e2N<$z1)PgbcR?Dv_rMDh-1*}+6n974240ZE_Jx1M4{?9c3U~qoS--{Z>*b= z)7|S4z2LXV>86OCIR!Nvm!8hb?ZuAe*IrAXrb}eW6gj>|M1EqFna{|WiOW+B_Db%n37}9&>OWj7Neap{$$tqTs60!i9|~7eOw6 zs9AA4I2WNTtyj{(IkZLOS|=`?G!JvlnN%aY6|)Y%T4A~Jc3#^$K68bU zhnFZ)0Di2^={xf012?C6Ct+qnw8u3(yLg;exS1{&7#W5z-d_cZJo%B=Qz#;+=*|8l z@|QC&SrF7rd@7p3-mXcNji~U&hSM`JrW$sZQ{<6xI@ER7QSa;FfAx?FDL* z2lR=+UTiR!oi(3-FD}h6W>f|BfbKZd2_dw$&mD!hJrw~Rc*eV{$?SaIKM}yi4>~GtXg*_mm*Drtcy?)2N zVdlc5)hE75|1?KUwTyzrfu1hF|MM@L*gg+dP;>6-aO&weNqO<^#r}>ssm>a2Vq!)s z^OX+-QaJEhY(`1RiwGV+?q7ovPc+eJQ`n&h3{jz{HfsfANQ~p}EaCPzUiZxe zOelDu`_c!wpD`~ed@K6@ao;&%c7M~XKcv<3~pIMMz58)^VyEilWFK-XMT3} ztvff0=zWU-gM&!-q6u~TGY(dU8>xO>i7}DYf^%>^OFx-fj0AB!5bHZV+yVr!wZ6XR z-T=}uLChWmAwhhP;>@yQVlGorb zs|hf}cy<;zC*32dT=l%)AF@}UrR-4q@Yz9DgP#sxS}Z!>;H;>+20i>Peug|}v1bBa zwx8KrWSVdi52uQqZSFXy;}ynfkB*Y7gV9 zd^)2}!b2$BJ=X+yec~ED*yB1r{R;+qdxIvm2vhTu-WM^GItreNP&U&>oU|S!t4&-9 zr#)awQi=YS6Uv*n5VC$XovCrPmQ6lIL|7pyB9%QeUxDg=xywCGQ&neIE4{6APH$i| zt|updr2nkJq~V^x%h_O?X(;!C6Z#|AaxMbkMlX~rT7|n8zFQ}6{Xk_tu1D#WV3Mc# zRtZGZ_I~aVJ&;yC-S}6>w~!a!<|Kfj%O^R_zK-s_ttjYNm?dWzF9SG7Y04_C^6-RG zPQBSCnp6{~#D2U)k%iAWAd$YL+D_^Euf}p@{-2pHa^!(x8aX+XPA~2fxqPm}Zy$n% z^w!&zsZCN*eHA9NzVq9y%9e~cI_J-N#%pqU^j#HZH=9puC3d@0G(Nf(h<> z8C|rLPNAZrY(|}{P%(>wnB%R@O`(RD>{8A1b{Sb&OwcbNGH3SY5FE$mxRcHDUW7=F zhJ~s|XYTsa$Lq-26(aqwqg0#JcKjP_-0>%{NWy%{!^@suj+EJ_@qPbu1mX?&;~l z71ffH>;80&fP<40IK39NQ`XLai_Yc(Afu+iV z91d=Iz?k_l!CiFt5$zWoknJj8@eaQ*CdfY**ub-mUI3^<+^}Zb`9QzG?W5H{rFmhHFacXH|yI zvAXtRx+mZynCkr6ZD}29I$LIQsheKh^*mY2{`hj|-a%*DR#rB(IRNldS((JU{xnJ1WmTXXQ5CM$HMZD_pf-{^#31XNU+xq&o?D(b3+l~y zc%P>bIR&gf=bc9XogRG_*O%V!NRla}D={)E*=ju`_v6qX){so-a~sU_I{FQii=3m! z-UkJ>>#ak-No3=%ytTBkDV&B;gp2zT9Uz&bWrqQ;1{c&NB<$-uN4wRZ15KBj zNcz!Tb8~abF=GV!#PO9AnR?Vm=wp zz-OD7CUXXY$g2O-pYt5d8|m`OA*^^FK%EaCW;YCK8--F2zz2gB>!7U+5F94g zX9VQyf|64zj7PsDmFSu&(=WiH#O18DsBF2DAM*%{y@#U2c8NFmwlHe+ml33w{HAyK zsO%=rvp2y9pA@qn&v9Lqp!rry)Ojc1NU|2OE0Oh#QI=%f+dfl~YYj4Z?$AZ2rbK(X z9-eX4*?7sUc+{$DvaYU<%+2h9VbFvTVemrCi^h2+V&d>}UN@qERd=5P0Nj1A6!o0r zrvt@>RsI}+c1O%zz0+4ij2mPNAP`;RLjU<-QlJMah0(m9ztgn#H`}dkku*$e>mcX+ zQcrwcW%8|O*VVQ3dt#*_kZIw@7+1Ytm!_M2AN%w%H(0UdtLHtD4qZYbnfDMeF)=)c zP51h(oy06^+cur}e2x44uO_)H2T(*nvo-b#uVkg$#laVnZ=B`3ruB_;I} z?lI>YF!sk!uTaYUKZS3txChFt0Q&5XlZ8ZV!<^uqS(UqN1EoIQj%+?g=%Bdb^NGCc zFh2BaizxXdV-kx0pr_-=ZYRyo+kq=b=RhoFb9MrhM$A?`|3%T*yk1Al1K;XP6~|q* zc^7#P=#=;FF$@@Qss+B1VvY(WX`3Z|k~Tk0rF`{Y3^*wVMd5hsTQvi7d0Hmh=D1-V&lD zKX`g5+O!Z`+*1P^2F0QR4D~B^PaUIJi6|AeSq)b{4R7o)_wCazDB&6Zs_6Eqv9Iy> zzp6Lmxj@zNi=RYj;ShRIL7!5)c%@pBifXy!QN~5A+*pv0Zrc^6235_84{on_F4s9I#wl*W@)@{|O zJWqNO>3h%aAyV+<%@I)B?G%@eE8zykojQM;wqxRXduqgXX0Uq`W+QN)ro*bM8(RwTteQIpn zo@`q4P->i+BPF)i^zm$U&>+GRzSymHEym9Dx=i>&ActY1uueqpC<^Rqx|z>(c;Y9E zhIsYONuQJ7C$ic8{ySqGr-BYeU8*H~c%tB^t2r&H;c(c zr&m4mm~Xx5Tyi=^T8UWKdZQM1DM z+0B=K_$rq@!X|gT+=dfpDjKJ*V}4+G1w)Sx-21hQ^lH}|H{$CF<{WU281TB+vX84I z{{Jae;I5$cgC-Ku(|`tKgAcN+AcJmF=&g3YNtH*BhD?>M3v`Cw*+!SraNm6RH*EyjyQ#o%`hEhU{$!q!J3}8P$I&e?(z>CZR;?Da@+1E5V#*@?rwTH zt7%MXpYs3=g${7~7@h5&d8x(Q%nw|1Hfa*XmYAiq^NtjHAuo*Q?ShP@Vx3*YuxpNGu;G| zGFS;s>mxb-fG9qOYf~aCfdr&|LpEkN%D&R$VEKy!0v3ON#|P^ zvj+5PmvxQ^dX1JlE^El}+6s+eOWH#+ceR97hk3oK>=%F4N88r82t}D-1~?~^<7h-T zIy_Fz5^F12x?iw)oCn`5OKw{)Woz2Q6E!Q1RF(K$Pk&>81u?UTnQ%7bBJ<8K7#SaQe7_MG|Mk}nwt}8|2E!7$ zrZ@Q{Y^tRB#Rm5D=@e>|tmf+%wjYNgCHCUErGIzx?2e|%G#3{Nh389}91iZa{EAJQ zx8u`CJC&B&Icx0HAXwxS#=EOrlXV8NH%zGt34HcON0Q6Cw{p*3rCK1?xBQZX5fibE z;bw8=MI*E>Fda*7GEof7N{MgtY(Fzojj&BL_qJcl{NAuzd;Nl~?NLVC+U89`*XO5Ju#8E11){7{=6V zP`ep~&mP0t#Od9^tmol3YuVL>QK>%jlOs^TZ;5K#Fc_~rtSoR8{gUc5o}?3PYaJ$3 zvKwL(twzok@0dKRRbqV{t6OCg8vMJqYnFj`w&uss`xSmeZRp`Il3s!;GZTI8Q|4|> zky87~S(}EpUz7I~ig{v0>RsmVMgCN;KFcjDlMcLnX>>%Z%8k5Gr>@!ZF1y#8;|W{x z?P=9Y-bZPqHz{SYHf;sgMP0En;8OES8Hrcwk)3lByIq9TjRexN za_>B!gpt|{3LC#Liz9@5o%*7r#n0^1=Xw*i8(85=mhc0Aj>ukGzQpfYmV%cvvGQF{(g*eXj8OY(Qe z-SR}Vg!Q-iN5%y9*DEHTTfq!<@O`fe342xTW$i06zzXsY)QefxeP(Jzi%?uV4@u+8 zji-f^vyrA`(X4vMKD^Pie8LZSnFYJK=5&NF5#t`8|6+7vR@trQnU>mOGh=OGNMS@| z?C@x%n-=o6jsU<2`UCjhVt^SEEQF9pN+M0lJzDS<#l|;m=at2>8C69XIL5Fbilz=L z6%s19#yG9Up-96Bt=1pr$0Xwhhn3wGj#h4mWy{D1YGl67h+moc4`)jN%=r)&hhD24 zW;<+`-@SvbMbuNx#x5+hz1ZmFL~c|zs=LpeO<{9T)H^=kH3xRbnDMwGYKo%nt@Z7!#t*&e+8+M%h+SO1| z;f2+}Wc=7g!(FP|zG=nLJ3D*9Ti@sLilP>dDMtDcx(;Rr%X*XO#?r;enr?C>s=d+s zars+ zRA5m|d+lKNW$uTtsHwD{o!anN*NW8L!G>%t4a@RzR_TK7y4u%7JB3?5Okq9bI;#wG z_BBFZrxx1oh&0Y)y~++I%eJDokT&8Q@oWnBA8bH%)K0E{k(4NND9c#h?}OPu(}B9d zc_D|*nI`uu-*ozRn<;d5Z=4n%O?FebSHj%8={RFqPQ|9P=y|s*YV@zW6hJGC7qg8? z*v)SzXVnVCb~vsSjOw_ub>>ghn|9NqwsjmvGE{wkJ_6S|>Tkb>aYlJNT8vCujczmP zy7Z2dD&N*jcRalVI$f*GyTYRdU}j-^Jz+)T%7)cPDFkiGwP(rod&m(O#;@CCvhLWA zSqo-yFWq9EHzt18-F=!B?q6-mQ{+)$Kf_CrLguPK&{WZSb~tEdXuI$Ke%-Y|M_v15 zNvGu(zIgrEI??1w9*x0F5|~Wah=>jh+6C*leaNpN08nZ=*$Ls`a&Ky-bekQ{K zV{sG$!znfp37-)LdAIn*-2l4_F z>HS}s8iLrFXC`t4W}>Ph1L_G4PJ<6N0x^wcFP?~q>>Or8gSx$&YL#103KdLT`BMy{ zC}?SEeR|4hMk-81b>3q#1AufL*RA|+Z)30NsXDUNWXFn`9&t7lLhZ8^v3TTFZwHK< zIvT9G>tKG1iNAD5pqu~)eRh$wgpc=f$T7A!(YXmpQNhMye5?%=M*iDX+E?)&wO?yp z%$q!Hi8dJ_i>?X>*$2%g?Lc*I{)VZ{VlX?Ls2xx!E)v;DPy)m)*Y+Q!`l6c6f2HgL i4n7NB|Mj{N7#}sd9aC6C0Pz0e;mJsX3!cS{KK(bPdeapE literal 0 HcmV?d00001 diff --git a/docs/images/rename.png b/docs/images/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..8c10f2a2fdcb3aed38dbbe2aaa7888f12ed11bf5 GIT binary patch literal 15555 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