Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Foldseek driver + Structure base Pangenome #2364

Open
wants to merge 215 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
215 commits
Select commit Hold shift + click to select a range
ae84460
foldseek driver init
metehaansever Sep 6, 2024
331ee05
Add generic weight path
metehaansever Sep 9, 2024
8f239e7
Fix easy-search params
metehaansever Sep 20, 2024
e22b7ef
fixy fix
metehaansever Sep 20, 2024
cc08224
Add path & dir controls
metehaansever Sep 23, 2024
c77da2f
Add utils and filesnpaths func
metehaansever Sep 23, 2024
14ca89a
Add PROSTT5 dir
metehaansever Sep 23, 2024
c6b1870
fixy
metehaansever Sep 23, 2024
09ec37b
Add Process func
metehaansever Sep 24, 2024
53a28c5
Add constant prostt5 weight dir
metehaansever Oct 7, 2024
d831632
Add FoldseekSetupWeight Class
metehaansever Oct 7, 2024
bca8002
Add anvi-setup-foldseek
metehaansever Oct 7, 2024
68ed3c2
Add Prostt5 weights dir to git ignore
metehaansever Oct 8, 2024
6794a7e
Add prostt5 dir to git ignore
metehaansever Oct 8, 2024
4d8b09a
fixy
metehaansever Oct 14, 2024
7702f9e
Update __init__.py with foldseek-weight-dir
metehaansever Oct 14, 2024
747c798
Delete README for foldseek
metehaansever Oct 14, 2024
1aecf3a
Update argument name
metehaansever Oct 14, 2024
c37be1f
Fix anvi-setup-foldseek
metehaansever Oct 14, 2024
c2bb89d
Add anvi-setup-foldseek doc
metehaansever Oct 15, 2024
0530515
Add foldseek-model-data artifact
metehaansever Oct 15, 2024
a8a0baa
fixy
metehaansever Oct 15, 2024
1e49e96
fixy
metehaansever Oct 16, 2024
0267422
Add mcl_network func
metehaansever Oct 16, 2024
97193c6
Add dev notes
metehaansever Oct 16, 2024
7e7c1b3
Update foldseek driver with only driver related methods
metehaansever Oct 17, 2024
0e63240
Add structurepan methods
metehaansever Oct 17, 2024
b5472ee
Update anvi-setup-foldseek with structurepan
metehaansever Oct 17, 2024
5b469d6
Update structure pan
metehaansever Oct 17, 2024
b505058
Fix process problem and file check
metehaansever Oct 18, 2024
267c4e0
Update Structure pan base on args
metehaansever Oct 21, 2024
a11babe
Update weight_dir
metehaansever Oct 21, 2024
e444c62
Add anvi-run-foldseek
metehaansever Oct 21, 2024
3ce2d00
Update anvi-run-foldseek to anvi-structural-pan-genome
metehaansever Oct 22, 2024
8f6640a
Fixy for parameters
metehaansever Oct 22, 2024
dc3f008
merge master
metehaansever Oct 23, 2024
04c54cf
fixy
metehaansever Oct 23, 2024
f3b7199
Add get_gene_clusters_based_on_structure func
metehaansever Oct 27, 2024
07693bd
Add mode params
metehaansever Oct 27, 2024
bbc181d
Add mode param
metehaansever Oct 28, 2024
67d3a39
Add process and get_foldseek_results method
metehaansever Oct 28, 2024
2079578
Add foldseek changes
metehaansever Oct 28, 2024
27d1b03
Add mode to anvi-pan-genome
metehaansever Oct 28, 2024
a1c53bf
Remove mode in anvi-display-pan
metehaansever Oct 28, 2024
53eab53
Update metavar
metehaansever Oct 28, 2024
4675073
fixy
metehaansever Oct 28, 2024
0c56412
better group for mode
metehaansever Oct 28, 2024
2aea34c
Update default params in foldseek driver
metehaansever Oct 29, 2024
a4b36e4
Add output_file_path to init
metehaansever Oct 29, 2024
cf3593c
fix result directory
FlorianTrigodet Oct 29, 2024
39d6fa4
foldseek db name fix
Oct 29, 2024
8e37a55
Add prostt5-weight-dir
metehaansever Oct 30, 2024
bf45ce9
Update naming
metehaansever Oct 30, 2024
df6a2f9
Update naming
metehaansever Oct 30, 2024
2e2321b
Remove redundant codes
metehaansever Oct 30, 2024
51cbab1
Add anvi-setup-prostt5
metehaansever Oct 30, 2024
8a09f0c
Add new parameter for weight dir
metehaansever Oct 30, 2024
d900a06
Fix downloading of prostt5 issue
metehaansever Oct 30, 2024
a52e504
Add prostt5-weight-dir option
metehaansever Oct 30, 2024
19144a2
Update docs for prostt5
metehaansever Oct 30, 2024
fde01bf
Fix prostt5-weight-dir param
metehaansever Oct 30, 2024
c0f5a57
Update Prostt5setupWeight dir
metehaansever Nov 1, 2024
d7f09b6
Delete structurepan.py
metehaansever Nov 1, 2024
7fe73b5
Update driver with prostt5 class
metehaansever Nov 1, 2024
8056929
Update mode to pan-mode
metehaansever Nov 1, 2024
bfd5d1e
Add choice_of_pangenome to constant
metehaansever Nov 1, 2024
652592d
Update mode to pan-mode
metehaansever Nov 1, 2024
0d56d7f
Update mode
metehaansever Nov 1, 2024
3bdc7b5
Add user_defined_gene_clusters control
metehaansever Nov 1, 2024
8271b6d
Update prostt5-weight-dir to data-dir
metehaansever Nov 1, 2024
9bcbf28
Fixy for user_defined_gene_cluster and pan-mode structure
metehaansever Nov 4, 2024
fa75a8b
Update error message
metehaansever Nov 4, 2024
dd81660
fixy
metehaansever Nov 4, 2024
8e38827
fixy for ProstT5 naming
metehaansever Nov 4, 2024
52e7579
Add get_gene_clusters_structure
metehaansever Nov 5, 2024
bb2dd60
Add classical pangenome for structural pangenome
metehaansever Nov 6, 2024
5b2ab9b
Changes from meeting
metehaansever Nov 7, 2024
56b6ff0
fixy
metehaansever Nov 7, 2024
007c04d
get gene cluster representatives now works
meren Nov 7, 2024
81664e8
generate FASTA file for foldseek analysis
meren Nov 7, 2024
5fa6d4f
cosmetics
meren Nov 7, 2024
3f8449a
Merge branch 'master' into foldseek-driver
meren Nov 11, 2024
3f6c30c
critical updates to get things to run
meren Nov 11, 2024
1224a21
Update PSGC dict
metehaansever Nov 11, 2024
fbe6ebe
new param: --foldseek-search-results
meren Nov 12, 2024
5eedc71
use existing search results when provided
meren Nov 12, 2024
a735594
fix typo
meren Nov 12, 2024
1f771ef
Fix file path of foldseek db
metehaansever Nov 12, 2024
f01cd63
fixy
metehaansever Nov 12, 2024
e882ae4
Merge branch 'foldseek-driver' of https://github.com/merenlab/anvio i…
metehaansever Nov 12, 2024
c513b1b
Add functions for PSGC
metehaansever Nov 12, 2024
82ed1b0
fixy
metehaansever Nov 12, 2024
26d2f13
fixy
metehaansever Nov 13, 2024
e71fb92
Add self.output_file
metehaansever Nov 13, 2024
36d1390
Fix gene_functions empty state
metehaansever Nov 13, 2024
d751bcc
de_novo_compute_mode -> pan_mode
meren Nov 13, 2024
2faf2a2
update meta values with mode
meren Nov 13, 2024
1aa9bd4
new table to track gc <-> psgc associations
meren Nov 13, 2024
e1a48f9
TableForPSGCGCAssociations table class
meren Nov 13, 2024
e9f71b2
dict building tracks psgc <-> gc associations
meren Nov 13, 2024
a659637
keep user up to date with what is going on
meren Nov 13, 2024
2af4f83
populate TableForPSGCGCAssociations
meren Nov 13, 2024
2b44fa8
oops. TableForPSGCGCAssociations table -> dbops
meren Nov 13, 2024
3f63af2
Merge branch 'foldseek-driver' of github.com:merenlab/anvio into fold…
meren Nov 13, 2024
cef9c65
typo
metehaansever Nov 13, 2024
07dc9f6
Remove functions in PSGC data
metehaansever Nov 13, 2024
44e76c7
Add num GCs in PSGC as additional layer
metehaansever Nov 13, 2024
4cf944f
Add num genes and gcs in PSGC
metehaansever Nov 13, 2024
cbb78b8
Add default names of psgc
metehaansever Nov 13, 2024
7a1c30a
add constants of core|singleton|else
metehaansever Nov 13, 2024
4090e66
add all additional layers
metehaansever Nov 13, 2024
9294ca6
fixy
metehaansever Nov 15, 2024
6040059
Merge branch 'master' into foldseek-driver
metehaansever Nov 15, 2024
efa8a22
Add de novo gene type classification to PSGCs
metehaansever Nov 15, 2024
db35551
Fix naming
metehaansever Nov 15, 2024
93443bc
fixy
metehaansever Nov 15, 2024
73d7f7c
fixy :)
metehaansever Nov 15, 2024
ab303aa
Merge branch 'master' into foldseek-driver
meren Nov 18, 2024
034ff04
on a second thought, probably better to allow
meren Nov 18, 2024
18b1874
better tracking of modes and terms
meren Nov 18, 2024
b8d5df5
better mode tracking in panops
meren Nov 18, 2024
e1d93c2
link mode to db-variant for posterity
meren Nov 18, 2024
3519e4c
no more `pan_mode` variable in self
meren Nov 18, 2024
7538405
ensure the file is not there prior
meren Nov 18, 2024
d5210a8
cosmetics
meren Nov 18, 2024
8e8421e
a new pan_gc_tracker table
meren Nov 18, 2024
6b8e077
populate de novo gc tracker table
meren Nov 18, 2024
7bcf530
TablesForGeneClusters can handle default and tracker modes
meren Nov 18, 2024
449509e
tables specific to db-variant structure-informed
meren Nov 18, 2024
f0d9a74
Add GC info for each gene
metehaansever Nov 19, 2024
bb04d6d
remove console.log
metehaansever Nov 19, 2024
f5a3440
Add GC info popover
metehaansever Nov 19, 2024
e1c7321
Add no gene lenghts overflow in GC popover
metehaansever Nov 19, 2024
e1b24f0
fixy
meren Nov 20, 2024
a09b3bc
update pan-db version
meren Nov 20, 2024
bb44bff
pan-db migration script from v21 to v22
meren Nov 20, 2024
5c17330
add gc_tracker and gc_psgc_associations to interactive
metehaansever Nov 20, 2024
85ec5cc
Update gene entries by gene_caller_id
metehaansever Nov 20, 2024
0a1fd14
Add get_psgc_data endpoint
metehaansever Nov 20, 2024
3f0cb64
Update gene cluster table on inspection page
metehaansever Nov 20, 2024
222465f
Merge branch 'foldseek-driver' of https://github.com/merenlab/anvio i…
metehaansever Nov 20, 2024
6766d90
Merge branch 'master' into foldseek-driver
meren Nov 21, 2024
de657c6
Update NGGC and NgGC float to int
metehaansever Nov 21, 2024
2f20e1c
Fix gcSequence width and wrap bug
metehaansever Nov 21, 2024
3084b8f
store gc_psgc_associations only in STRUCTURE_MODE
meren Nov 22, 2024
45e9915
Add get_psgc_type_data
metehaansever Nov 25, 2024
c54c086
Add gc type data to item_additional_data table
metehaansever Nov 25, 2024
104b89d
Add GC type letter to inspection page
metehaansever Nov 25, 2024
9a0ac37
Add color to GC type
metehaansever Nov 25, 2024
f1fcd64
fixy
metehaansever Nov 25, 2024
da1bb03
Add gc type info into GC table
metehaansever Nov 25, 2024
7110763
fixy
metehaansever Nov 25, 2024
e52cc64
Fix for resizing related console bug
metehaansever Nov 25, 2024
593f85e
Fix psgc_composition display table bug
metehaansever Nov 25, 2024
ce306b9
Update search table
metehaansever Nov 26, 2024
983a85f
Fix performance on inspection
metehaansever Nov 27, 2024
4f6a850
Add gene types in PSGC into gc_types table
metehaansever Nov 28, 2024
0355958
Fix gc_types search problem
metehaansever Nov 29, 2024
12abcd6
Update search result table with json parser
metehaansever Nov 29, 2024
b75f524
Fix performance issue on larger content
metehaansever Dec 6, 2024
98f8387
fix sequence drawing bottleneck
metehaansever Dec 6, 2024
72f3844
Update minimize dom manipulation
metehaansever Dec 6, 2024
bc0fe4e
Add tspan element to dom once
metehaansever Dec 9, 2024
56b916a
Fix make geneclusters page looks same for firefox
metehaansever Dec 9, 2024
c037cc3
Add bg to gc_type table
metehaansever Dec 10, 2024
b2af915
Add search btn css
metehaansever Dec 12, 2024
d994c57
Add search functionality
metehaansever Dec 12, 2024
6ce773f
Add search elements
metehaansever Dec 12, 2024
2c679be
Add additional control for classical pangenome
metehaansever Dec 12, 2024
4e5a782
Merge branch 'master' into foldseek-driver
meren Dec 13, 2024
142ca31
Update buttons to bs4 buttons
metehaansever Dec 16, 2024
56cd53c
Add psgc_data length check
metehaansever Dec 16, 2024
6cd3532
Update genome filtering with include option
metehaansever Dec 16, 2024
b67455d
Update naming
metehaansever Dec 16, 2024
20579b6
Update color settings buttons
metehaansever Dec 16, 2024
9e50567
Update color coding of genes
metehaansever Dec 16, 2024
ebbec68
Add foldseek citation
metehaansever Dec 16, 2024
427941b
Add structure-informed-pangenomics into test
metehaansever Dec 16, 2024
d6bec6b
Add structure-informed-pangenomics script
metehaansever Dec 16, 2024
824c305
Update dir name
metehaansever Dec 16, 2024
2279452
fixy
metehaansever Dec 16, 2024
997cd4d
Revert gene colors
metehaansever Dec 17, 2024
12e622e
Update prostt5 doc
metehaansever Dec 17, 2024
51cf4fe
Remove homogeneity check in structure-informed-pangenomics script
metehaansever Dec 17, 2024
537e892
Create mock data for component test
metehaansever Dec 19, 2024
b0810e2
Update component test with collection
metehaansever Dec 19, 2024
2b85184
psgc_composition -> GCs in PSCG
meren Jan 7, 2025
61e358b
Merge branch 'master' into foldseek-driver
metehaansever Jan 7, 2025
b91eee1
Update mouse_hover_table to parse Json
metehaansever Jan 7, 2025
55d949a
some cosmetics in the summary output
meren Jan 7, 2025
6715c38
Add navbar opacity
metehaansever Jan 7, 2025
fd55909
Add structure-informed summary
metehaansever Jan 8, 2025
b29b619
Update data type to list
metehaansever Jan 8, 2025
0816f73
Add gc_id info
metehaansever Jan 8, 2025
c933733
Prettify
metehaansever Jan 8, 2025
9505c6b
Remove num_genes_in_psgc
metehaansever Jan 15, 2025
b1146cb
Update func params
metehaansever Jan 15, 2025
7326756
Update add_layers_to_view params
metehaansever Jan 15, 2025
56a78f8
Remove redundant code
metehaansever Jan 15, 2025
8a26079
fixy
metehaansever Jan 15, 2025
c9a8e64
Add PSGC info into Gene Cluster bin modal
metehaansever Jan 20, 2025
0d9f2fe
Fix Gene Cluster table overflow behavior
metehaansever Jan 20, 2025
011fd7e
Update GC tables col size
metehaansever Jan 20, 2025
2db643d
Add additional control for mode structure
metehaansever Jan 23, 2025
15614bc
fixy
metehaansever Jan 23, 2025
c857765
Add temp mode
metehaansever Jan 24, 2025
2083b3c
Update bin mode with structure
metehaansever Jan 24, 2025
da880a4
Update GC bins mode
metehaansever Jan 24, 2025
46944a4
Typo
metehaansever Jan 24, 2025
28f62d7
Fix Layer Order
metehaansever Jan 24, 2025
d1ac701
Revert
metehaansever Jan 27, 2025
d02eb16
Add init-pan-mode for anvi-summarize
metehaansever Jan 30, 2025
4d7eea3
Add new args for structure-pan
metehaansever Jan 30, 2025
0756fde
Add gc_psgc_associations data into gz summary
metehaansever Jan 30, 2025
9b9a65c
Add gene cluster matches info into .gz
metehaansever Feb 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@ anvio/data/misc/SCG_TAXONOMY/GTDB/SCG_SEARCH_DATABASES/*.dmnd
anvio/tests/sandbox/update-contigs-and-bams-for-mini-test/output
anvio/tests/sandbox/test_visualize_split_coverages/TEST_OUTDIR
anvio/data/misc/KEGG/
anvio/data/misc/PROSTT5/
anvio/data/misc/TRNA_TAXONOMY/
anvio/data/interactive/node_modules
anvio/data/interactive/package-lock.json
41 changes: 40 additions & 1 deletion anvio/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3687,7 +3687,46 @@ def TABULATE(table, header, numalign="right", max_width=0):
"a comma-separated list. The default stats are 'detection' and "
"'mean_coverage_Q2Q3'. To see a list of available stats, use this flag "
"and provide an absolutely ridiculous string after it (we suggest 'cattywampus', but you do you)."}
)
),
'pan-mode': (
['--pan-mode'],
{'default': constants.pangenome_mode_default,
'choices': constants.pangenome_modes_available,
'type': str,
'help': f"Computation mode for the pangenome. Default mode is '{constants.pangenome_mode_default}'."}
),
'prostt5-data-dir': (
['--prostt5-data-dir'],
{'default': None,
'type': str,
'metavar': 'PATH',
'help': "The path for the PROSTT5 Weights to be stored. "
"If you leave it as is without specifying anything, anvi'o will set up everything in "
"a pre-defined default directory. The advantage of using "
"the default directory at the time of set up is that every user of anvi'o on a computer "
"system will be using a single data directory, but then you may need to run the setup "
"program with superuser privileges. If you don't have superuser privileges, then you can "
"use this parameter to tell anvi'o the location you wish to use to setup your weights."}
),
'foldseek-search-results': (
['--foldseek-search-results'],
{'default': None,
'type': str,
'metavar': 'FILE PATH',
'help': "File path for foldseek search results generated by anvi'o during a previous run. When "
"a file path is provided, anvi'o will try to utilize that output file rather than "
"re-running foldseek. This is mostly for debugging purposes and we strongly advice "
"you to not use it unless you consider yourself to be a hacker-type."}
),
'init-pan-mode': (
['--init-pan-mode'],
{'default': constants.pangenome_mode_default,
'choices': constants.pangenome_modes_available,
'type': str,
'help': "Specify the structure type to include additional data tables for the Structural Pangenome summary. "
"This option allows you to enhance the analysis by integrating specific structural data, "
"which can provide deeper insights into the pangenomic relationships among the samples."}
),
}

# two functions that works with the dictionary above.
Expand Down
51 changes: 51 additions & 0 deletions anvio/bottleroutes.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,8 @@ def register_routes(self):
self.route('/data/get_gene_info/<gene_callers_id>', callback=self.get_gene_info)
self.route('/data/get_metabolism', callback=self.get_metabolism)
self.route('/data/get_scale_bar', callback=self.get_scale_bar, method='POST')
self.route('/data/get_psgc_data/<psgc_name>', callback=self.get_psgc_data)
self.route('/data/get_psgc_type_data/<psgc_name>', callback=self.get_psgc_type_data)


def run_application(self, ip, port):
Expand Down Expand Up @@ -1434,6 +1436,55 @@ def get_additional_gc_data(self, gc_id, gc_key):
except:
return json.dumps({'status': 1})


def get_psgc_data(self, psgc_name):
"""Gets PSGC data for the inspection page"""

try:
psgc_data = {
psgc_name: []
}

associated_gcs = []
for gc_id, psgc_id in self.interactive.gc_psgc_associations.items():
if psgc_id == psgc_name:
associated_gcs.append(gc_id)

for gene_id, gene_entries in self.interactive.gc_tracker.items():
for gene_data in gene_entries:
gc_id = gene_data['gene_cluster_id']

# Skip if this gene's cluster is not associated with our PSGC
# Its important to do this before we add the gene info to psgc_data
if gc_id not in associated_gcs:
continue

gene_info = {
'gene_callers_id': gene_id,
'gene_cluster_id': gc_id,
'genome_name': gene_data['genome_name'],
'alignment_summary': gene_data['alignment_summary']
}
psgc_data[psgc_name].append(gene_info)

return json.dumps({'status': 0, 'data': psgc_data})

except Exception as e:
return json.dumps({'status': 1, 'message': f"Error getting PSGC data: {str(e)}"})


def get_psgc_type_data(self, psgc_name):
"""Gets GC type classification data for PSGC (core/singleton/accessory)"""
try:
gc_types = {}
if psgc_name in self.interactive.items_additional_data_dict:
gc_types = json.loads(self.interactive.items_additional_data_dict[psgc_name].get('gc_types', '{}'))

return json.dumps({'status': 0, 'data': {psgc_name: gc_types}})
except Exception as e:
return json.dumps({'status': 1, 'message': f"Error getting PSGC type data: {str(e)}"})


def reroot_tree(self):
# Get the Newick tree string from the form data
newick = request.forms.get('newick')
Expand Down
11 changes: 11 additions & 0 deletions anvio/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,23 @@
# and other purposes
IS_ESSENTIAL_FIELD = lambda f: (not f.startswith('__')) and (f not in ["contig", "GC_content", "length"])

# MODELLER / PDF file paths
default_pdb_database_path = os.path.join(os.path.dirname(anvio.__file__), 'data/misc/PDB.db')
default_modeller_database_dir = os.path.join(os.path.dirname(anvio.__file__), 'data/misc/MODELLER/db')
default_modeller_scripts_dir = os.path.join(os.path.dirname(anvio.__file__), 'data/misc/MODELLER/scripts')

# Interacdome data path
default_interacdome_data_path = os.path.join(os.path.dirname(anvio.__file__), 'data/misc/Interacdome')

# ProstT5 data files
default_prostt5_weight_path = os.path.join(os.path.dirname(anvio.__file__), 'data/misc/PROSTT5/weights')

# Pangenome mode trackers
PAN_STRUCTURE_MODE = 'structure-informed'
PAN_SEQUENCE_MODE = 'sequence-based'
pangenome_modes_available = [PAN_SEQUENCE_MODE, PAN_STRUCTURE_MODE]
pangenome_mode_default = PAN_SEQUENCE_MODE

clustering_configs_dir = os.path.join(os.path.dirname(anvio.__file__), 'data/clusterconfigs')
clustering_configs = {}

Expand Down
43 changes: 43 additions & 0 deletions anvio/data/interactive/css/geneclusters.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@import url('normalize.css');
@import url('variable.css');

#chart-container {
width: 1200px;
Expand Down Expand Up @@ -227,6 +228,48 @@ td {
padding-bottom: 10px;
}

.type-core {
fill: var(--success-600);
}

.type-accessory {
fill: var(--warning-600);
}

.type-singleton {
fill: var(--info-600);
}

#display-search-controls {
padding: 12px;
margin-left: auto;
margin-right: auto;
background-color: #f5f5f5;
border-radius: 9px;
margin-bottom: 17px;
}

.btn-link {
background: none;
border: none;
padding: 0;
color: inherit;
font-size: 1.5rem;
cursor: pointer;
}

.btn-link:hover {
color: var(--warning-600);
}

.display-text {
font-size: 1rem;
}

#info-icon {
font-size: 1.2rem;
}

@media (min-width: 768px) {
.gc-container {
padding: 0 2rem;
Expand Down
68 changes: 60 additions & 8 deletions anvio/data/interactive/geneclusters.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<meta name="google" value="notranslate">
<link rel="stylesheet" type="text/css" href="css/loading.css" />
<link rel="stylesheet" href="./node_modules/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="./node_modules/bootstrap-icons/font/bootstrap-icons.min.css" />
<link rel="stylesheet" type="text/css" href="css/geneclusters.css" />
<link rel="stylesheet" href="./node_modules/toastr/build/toastr.min.css" type="text/css" />
<link href='https://fonts.googleapis.com/css?family=Lato:300,700' rel='stylesheet' type='text/css' />
Expand Down Expand Up @@ -40,19 +41,45 @@ <h1 id="header"></h1>

<section class="main">
<div id="display-controls">
Wrap: <input type="text" id="wrap_length" value="1042" size="5" onchange="createDisplay(); "/>
<input type="button" value="-" onclick="increaseVal('wrap_length', -5); createDisplay();" />
<input type="button" value="+" onclick="increaseVal('wrap_length', 5); createDisplay();" />
<span style="display: inline-block; width: 20px;">&nbsp;</span>
Font Size: <input type="text" id="font_size" value="12" size="5" onchange="createDisplay(); "/>
<input type="button" value="-" onclick="increaseVal('font_size', -1); createDisplay();" />
<input type="button" value="+" onclick="increaseVal('font_size', 1); createDisplay();" />
<input type="button" value="Color Settings" onclick="$('#display-conservation-controls').toggle(); " />
<span class="display-text">Wrap:</span>
<input type="text" class="btn btn-outline-secondary btn-sm" id="wrap_length" value="1042" size="4" onchange="createDisplay(); "/>
<input type="button" class="btn btn-outline-secondary btn-sm" value="-" onclick="increaseVal('wrap_length', -5); createDisplay();" />
<input type="button" class="btn btn-outline-secondary btn-sm" value="+" onclick="increaseVal('wrap_length', 5); createDisplay();" />
<span style="display: inline-block; width: 20px;">&nbsp;</span>
<span class="display-text">Font Size:</span>
<input type="text" class="btn btn-outline-secondary btn-sm" id="font_size" value="12" size="2" onchange="createDisplay(); "/>
<input type="button" class="btn btn-outline-secondary btn-sm" value="-" onclick="increaseVal('font_size', -1); createDisplay();" />
<input type="button" class="btn btn-outline-secondary btn-sm" value="+" onclick="increaseVal('font_size', 1); createDisplay();" />
<input type="button" class="btn btn-outline-secondary btn-sm" value="Color Settings" onclick="$('#display-conservation-controls').toggle(); " />
<input type="button" class="btn btn-outline-secondary btn-sm" value="Filter" onclick="$('#display-search-controls').toggle();" />
</div>

<div class="d-flex justify-content-center">
<div class="col-6" id="display-conservation-controls" style="display: none"></div>
</div>
<div class="d-flex justify-content-center align-items-center">
<div class="col-4" id="display-search-controls" style="display: none">
<div class="d-flex justify-content-center">
<div class="d-flex">
<div class="d-flex justify-content-center align-items-center mr-3">
<span type="button" class="btn btn-link" data-toggle="modal" data-target="#infoModal" data-help="info">
<span id="info-icon" class="bi bi-info-circle" aria-hidden="true"></span>
</span>
</div>
<div class="d-flex">
<div class="input-group">
<span class="input-group-text" style="cursor: pointer;" onclick="filterGenome();">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-search" viewBox="0 0 16 16">
<path d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0"></path>
</svg>
</span>
<input type="text" id="filter-genome" class="form-control d-flex" placeholder="Filter Genomes" onchange="filterGenome(); "/>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="display-gcc-acc" class="d-flex justify-content-center">
<div id="display-gcc-inner-div">
<table id="gc-acc-main" class="table table-responsive col-12">
Expand Down Expand Up @@ -80,5 +107,30 @@ <h1 id="header"></h1>
$('#' + id).val(Math.max(1,parseInt($('#' + id).val()) + delta));
}
</script>

<!-- Searc GC Modal -->
<div class="modal fade" id="infoModal" tabindex="-1" role="dialog" aria-labelledby="infoModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="infoModalLabel">Genome Search</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>To use the genome search, you can enter one or more genome names separated by commas. For example:</p>
<ul>
<li>Single entry: <code>GENOME_NAME1</code></li>
<li>Multiple entries: <code>GENOME_NAME1, GENOME_NAME2</code></li>
</ul>
<p>This allows you to search for specific genomes in the dataset.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</body>
</html>
12 changes: 6 additions & 6 deletions anvio/data/interactive/js/bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,24 +76,24 @@ Bins.prototype.NewBin = function(id, binState) {

var template = `<tr bin-id="${id}" class="bin-row">
<td><input type="radio" name="active_bin" value="${id}"></td>
<td><div id="bin_color_${id}" class="colorpicker" color="${color}" style="background-color: ${color}"></td>
<td><div id="bin_color_${id}" class="colorpicker" color="${color}" style="background-color: ${color}"></div></td>
<td data-value="${name}">
<input type="text" class="bin-name" oninput="this.value = event.target.value.replaceAll(' ', '_');" onChange="emit('bin-settings-changed'); this.parentNode.setAttribute('data-value', this.value);" size="21" id="bin_name_${id}" value="${name}">
</td>
${mode != 'pan' ? `
${mode !== 'pan' && mode !== 'structure' ? `
<td data-value="${contig_count}" class="num-items"><input type="button" value="${contig_count}" title="Click for contig names" onClick="showContigNames(${id});"></td>
<td data-value="${contig_length}" class="length-sum"><span>${contig_length}</span></td>
` : ''}
${mode == 'pan' ? `
${mode === 'pan' || mode === 'structure' ? `
<td data-value="${num_gene_clusters}" class="num-gene-clusters"><input type="button" value="${num_gene_clusters}" title="Click for quick gene cluster summaries" onClick="showGeneClusterDetails(${id});"></td>
<td data-value="${num_gene_calls}" class="num-gene-calls"><input type="button" value="${num_gene_calls}"></td>
` : `
<td data-value="${completeness}" class="completeness"><input type="button" value="${completeness}" title="Click for completeness table" onClick="showCompleteness(${id});"></td>
<td data-value="${redundancy}" class="redundancy"><input type="button" value="${redundancy}" title="Click for redundant hits" onClick="showRedundants(${id}); "></td>
<td data-value="${redundancy}" class="redundancy"><input type="button" value="${redundancy}" title="Click for redundant hits" onClick="showRedundants(${id});"></td>
`}
<td><center><span class="default-bin-icon bi bi-trash-fill fa-lg" aria-hidden="true" alt="Delete this bin" title="Delete this bin" onClick="bins.DeleteBin(${id});"></span></center></td>
</tr>
${ mode === 'full' || mode === 'refine' || mode === 'manual' || mode === 'pan' ? `<tr style="${ $('#estimate_taxonomy').is(':checked') ? `` : `display: none;`}" data-parent="${id}">
${ mode === 'full' || mode === 'refine' || mode === 'manual' || mode === 'pan' || mode === 'structure' ? `<tr style="${ $('#estimate_taxonomy').is(':checked') ? `` : `display: none;`}" data-parent="${id}">
<td style="border-top: 0px;">&nbsp;</td>
<td style="border-top: 0px;">&nbsp;</td>
<td colspan="6" style="border-top: 0px; padding-top: 0px;">
Expand Down Expand Up @@ -470,7 +470,7 @@ Bins.prototype.UpdateBinsWindow = function(bin_list) {
for (let i = 0; i < bin_list.length; i++) {
let bin_id = bin_list[i];

if (mode == 'pan') {
if (mode === 'pan' || mode === 'structure') {
let num_gene_clusters = 0;
let num_gene_calls = 0;

Expand Down
2 changes: 2 additions & 0 deletions anvio/data/interactive/js/color-coding.js
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,7 @@ function initializeCheckBoxes(){

var all = document.createElement("button");
all.innerHTML = "Check All";
all.className = "btn btn-outline-secondary btn-sm";
all.style = "margin-right:20px;"
all.onclick = (function() {
for (i = 0; i < labels.length; i++){
Expand All @@ -341,6 +342,7 @@ function initializeCheckBoxes(){

var none = document.createElement("button")
none.innerHTML = "Uncheck All"
none.className = "btn btn-outline-secondary btn-sm";
none.onclick = (function() {
for (i = 0; i < labels.length; i++){
var letter = String(labels[i]);
Expand Down
Loading