diff --git a/backend/src/api/search.py b/backend/src/api/search.py index 1fa8f60a..b634246a 100644 --- a/backend/src/api/search.py +++ b/backend/src/api/search.py @@ -14,6 +14,9 @@ class SimilarProtein(CamelModel): prob: float evalue: float description: str = "" + qstart: int + qend: int + alntmscore: int class RangeFilter(CamelModel): @@ -131,7 +134,6 @@ def search_proteins(body: SearchProteinsBody): [text_query, text_query, text_query], ) if entries_result is not None: - print(entries_result) return SearchProteinsResults( protein_entries=[ ProteinEntry( @@ -201,14 +203,21 @@ def search_venome_similar(protein_name: str): similar = easy_search( stored_pdb_file_name(protein_name), venome_folder, - out_format="target,prob,evalue", - )[1:] + out_format="target,prob,evalue,qstart,qend", + ) # qend,qstart refer to alignment formatted = [ - SimilarProtein(name=name.rstrip(".pdb"), prob=prob, evalue=evalue) - for [name, prob, evalue] in similar + SimilarProtein( + name=name.rstrip(".pdb"), + prob=prob, + evalue=evalue, + qstart=qstart, + qend=qend, + alntmscore=0, + ) + for [name, prob, evalue, qstart, qend] in similar ] except Exception: - raise HTTPException(404, "Foldseek not found on the system") + raise HTTPException(404, "Error in 'foldseek easy-search' command") try: # populate protein descriptions for the similar proteins diff --git a/backend/src/foldseek.py b/backend/src/foldseek.py index d9a0a706..40373493 100644 --- a/backend/src/foldseek.py +++ b/backend/src/foldseek.py @@ -69,7 +69,7 @@ def parse_easy_search_output(filepath: str) -> list[list]: def easy_search( query: str, target: str, - out_format: str = "query, target, prob", + out_format: str = "query,target,prob", print_loading_info=False, ) -> list[list]: """easy_search just calls foldseek easy-search under the hood diff --git a/frontend/package.json b/frontend/package.json index b222465a..9c8f2a20 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -32,6 +32,7 @@ }, "dependencies": { "bibtex": "^0.9.0", + "d3": "^7.9.0", "js-cookie": "^3.0.5", "marked": "^12.0.0", "svelte-routing": "^2.11.0" diff --git a/frontend/src/app.pcss b/frontend/src/app.pcss index 4f717622..0fbd28ec 100644 --- a/frontend/src/app.pcss +++ b/frontend/src/app.pcss @@ -82,7 +82,7 @@ p { } a { - color: var(--lightblue); + color: var(--primary-600); } a:hover { diff --git a/frontend/src/lib/AlignBlock.svelte b/frontend/src/lib/AlignBlock.svelte new file mode 100644 index 00000000..08400bab --- /dev/null +++ b/frontend/src/lib/AlignBlock.svelte @@ -0,0 +1,42 @@ + + + + + + {qend} + {qstart} + diff --git a/frontend/src/lib/DelayedSpinner.svelte b/frontend/src/lib/DelayedSpinner.svelte index beeacbcf..58da1461 100644 --- a/frontend/src/lib/DelayedSpinner.svelte +++ b/frontend/src/lib/DelayedSpinner.svelte @@ -4,6 +4,7 @@ export let msDelay = 500; export let spinnerProps = {}; export let text = ""; + export let textRight = false; let showSpinner = false; @@ -15,5 +16,9 @@ {#if showSpinner} - {text} + {#if textRight} + {text} + {:else} + {text} + {/if} {/if} diff --git a/frontend/src/lib/Dot.svelte b/frontend/src/lib/Dot.svelte new file mode 100644 index 00000000..ecf185d1 --- /dev/null +++ b/frontend/src/lib/Dot.svelte @@ -0,0 +1,24 @@ + + +
+ + + +
+ + diff --git a/frontend/src/lib/Molstar.svelte b/frontend/src/lib/Molstar.svelte new file mode 100644 index 00000000..6456c48e --- /dev/null +++ b/frontend/src/lib/Molstar.svelte @@ -0,0 +1,59 @@ + + +
+ + diff --git a/frontend/src/lib/ProteinVis.svelte b/frontend/src/lib/ProteinVis.svelte deleted file mode 100644 index 98943dee..00000000 --- a/frontend/src/lib/ProteinVis.svelte +++ /dev/null @@ -1,88 +0,0 @@ - - -
- - diff --git a/frontend/src/lib/SimilarProteins.svelte b/frontend/src/lib/SimilarProteins.svelte index b5e24f74..e4e3acd5 100644 --- a/frontend/src/lib/SimilarProteins.svelte +++ b/frontend/src/lib/SimilarProteins.svelte @@ -1,58 +1,112 @@ -
- - - - - - - - - {#each similarProteins as protein} - - - - - - +{#if similarProteins === undefined && !errorEncountered} + +{:else if similarProteins !== undefined} +
+
Name Probability Match E-Value Description Compare
- - - {undoFormatProteinName(protein.name)} - {protein.prob}{protein.evalue}{protein.description} - Compare -
+ + + + + + - {/each} -
Name E-Value Prob. Match Region of Similarity TMAlign
-
+ {#each similarProteins as protein, i} + + + + + +
+ + {protein.evalue.toExponential()} +
+ +
+ + {protein.prob} +
+ +
+ +
+ + + + + + {/each} + +
+{:else} + Error in the in the backend. Please contact admins. +{/if} diff --git a/frontend/src/lib/openapi/models/SimilarProtein.ts b/frontend/src/lib/openapi/models/SimilarProtein.ts index a222499a..16113600 100644 --- a/frontend/src/lib/openapi/models/SimilarProtein.ts +++ b/frontend/src/lib/openapi/models/SimilarProtein.ts @@ -7,5 +7,8 @@ export type SimilarProtein = { prob: number; evalue: number; description?: string; + qstart: number; + qend: number; + alntmscore: number; }; diff --git a/frontend/src/routes/Compare.svelte b/frontend/src/routes/Compare.svelte index b1866b05..324f5a04 100644 --- a/frontend/src/routes/Compare.svelte +++ b/frontend/src/routes/Compare.svelte @@ -1,31 +1,26 @@