diff --git a/components/content/MolstarPdbePlugin.vue b/components/content/MolstarPdbePlugin.vue
index 79949bc6f3a142c50ef336ff92337503c501e63f..bfb97d00e8270868bd9240955db9c07836a13a83 100644
--- a/components/content/MolstarPdbePlugin.vue
+++ b/components/content/MolstarPdbePlugin.vue
@@ -4,16 +4,18 @@ import { withTrailingSlash, withLeadingSlash, joinURL } from 'ufo'
import { useRuntimeConfig, computed } from '#imports'
import * as d3 from "d3";
import * as Plot from "@observablehq/plot";
-
-
import PlotFigure from "~/components/PlotFigure";
+import { useDisplay } from "vuetify";
+
export interface Props {
height?: number
dataUrls?: string[]
dataUrl?: string
uniq?: boolean
}
+
+const { mobile } = useDisplay()
// const selectedPdb = ref('')
const refinedDataUrls = computed(() => {
@@ -100,66 +102,63 @@ const pdbeMolstarComponent = ref(null)
const selectedPdb: Ref<string | null> = ref(null)
const selectedPaePath = computed(() => {
- return selectedPdb.value ? `${selectedPdb.value.split(".").slice(0, -1).join('.')}.tsv` : null
+ return selectedPdb.value ? `${selectedPdb.value.split(".").slice(0, -1).join('.')}.png` : null
})
-const paeData = ref([])
-watch(selectedPaePath, async (newPaePath) => {
- if (newPaePath !== null) {
- try {
- const data = await d3.tsv(newPaePath);
- console.log(data.length)
- console.log(data[0][0])
- console.log(data?.[0]?.[0] !== undefined)
- if (data.length > 500) {
- paeError.value = `The PAE is too large to be displayed (${data.length} residus)`
- paeData.value = []
- }
- else if (data?.[0]?.[0] === undefined) {
- paeError.value = "The PAE cannot be downloaded"
- paeData.value = []
- }
- else {
- paeData.value = data
- paeError.value = null
- }
-
- }
- catch (error) {
- console.log(error)
- }
- } else {
- paeData.value = []
- }
-
-})
+// const paeData = ref([])
+// watch(selectedPaePath, async (newPaePath) => {
+// if (newPaePath !== null) {
+// try {
+// const data = await d3.tsv(newPaePath);
+// if (data.length > 500) {
+// paeError.value = `The PAE is too large to be displayed (${data.length} residus)`
+// paeData.value = []
+// }
+// else if (data?.[0]?.[0] === undefined) {
+// paeError.value = "The PAE cannot be downloaded"
+// paeData.value = []
+// }
+// else {
+// paeData.value = data
+// paeError.value = null
+// }
+
+// }
+// catch (error) {
+// console.log(error)
+// }
+// } else {
+// paeData.value = []
+// }
-const sanitizedPaeData = computed(() => {
- return paeData.value.reduce((acc, curr, index) => {
- const scoredResidue = index
- // let newAcc = [...acc]
- for (const [alignedResidue, value] of Object.entries(curr)) {
- // console.log(value)
- acc.push({ alignedResidue: parseInt(alignedResidue), scoredResidue: parseInt(scoredResidue), value: parseFloat(value) })
- // newAcc = [...newAcc, ...[{ alignedResidue: parseInt(alignedResidue), scoredResidue: parseInt(scoredResidue), value: parseFloat(value) }]]
- }
+// })
- return acc
- }, [])
-})
+// const sanitizedPaeData = computed(() => {
+// return paeData.value.reduce((acc, curr, index) => {
+// const scoredResidue = index
+// // let newAcc = [...acc]
+// for (const [alignedResidue, value] of Object.entries(curr)) {
+// // console.log(value)
+// acc.push({ alignedResidue: parseInt(alignedResidue), scoredResidue: parseInt(scoredResidue), value: parseFloat(value) })
+// // newAcc = [...newAcc, ...[{ alignedResidue: parseInt(alignedResidue), scoredResidue: parseInt(scoredResidue), value: parseFloat(value) }]]
+// }
+
+// return acc
+// }, [])
+// })
-const plotPaeOptions = computed(() => {
- return {
- width: 640,
- height: 640,
- color: { scheme: "Greens", legend: true, reverse: true, label: "Expected position error (Ångströms)" },
- y: { reverse: true },
- marks: [
- Plot.dot(sanitizedPaeData.value, { x: "scoredResidue", y: "alignedResidue", stroke: "value" })
- ]
- }
-})
+// const plotPaeOptions = computed(() => {
+// return {
+// width: 640,
+// height: 640,
+// color: { scheme: "Greens", legend: true, reverse: true, label: "Expected position error (Ångströms)" },
+// y: { reverse: true },
+// marks: [
+// Plot.dot(sanitizedPaeData.value, { x: "scoredResidue", y: "alignedResidue", stroke: "value" })
+// ]
+// }
+// })
watch(selectedPdb, (newSelectedPdb, prevSelectPdb) => {
viewPdb(newSelectedPdb)
@@ -171,10 +170,13 @@ function viewPdb(pdbPath: string | null) {
dialog.value = true
const format = toValue(pdbPath)?.split(".").slice(-1)[0]?.toLowerCase() ?? "pdb"
moleculeFormat.value = format
+
if (pdbeMolstarComponent.value?.viewerInstance) {
+ console.log(pdbeMolstarComponent.value)
const viewerInstance = pdbeMolstarComponent.value.viewerInstance
const customData = { url: pdbPath, format: format, binary: false }
viewerInstance.visual.update({ customData })
+
}
}
}
@@ -217,7 +219,7 @@ const moleculeFormat: Ref<string> = ref("pdb")
</v-toolbar>
<v-card-text>
<v-row>
- <v-col cols="auto">
+ <v-col :cols="mobile ? 12 : 'auto'">
<v-sheet v-if="selectedPdb"
class="d-flex align-center justify-center flex-wrap text-center mx-auto px-4 my-3"
:height="computedHeight" :width="computedWidth" position="relative">
@@ -226,12 +228,13 @@ const moleculeFormat: Ref<string> = ref("pdb")
:custom-data-format="moleculeFormat"></pdbe-molstar>
</v-sheet>
</v-col>
- <v-col>
- <PlotFigure v-if="sanitizedPaeData?.length > 0 && paeError === null" defer
+ <v-col :cols="mobile ? 12 : undefined">
+ <v-img :src="selectedPaePath"></v-img>
+
+ <!-- <PlotFigure v-if="sanitizedPaeData?.length > 0 && paeError === null" defer
:options="plotPaeOptions"></PlotFigure>
- <v-alert v-else type="warning" variant="tonal">{{ paeError }}</v-alert>
+ <v-alert v-else type="warning" variant="tonal">{{ paeError }}</v-alert> -->
<v-card flat color="transparent">
-
<v-card-title>Model Confidence</v-card-title>
<v-card-text>
AlphaFold produces a per-residue model
diff --git a/data/system-to-dir.yaml b/data/system-to-dir.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..11208a67017676aaa30afd8ab7670cbc52fa2113
--- /dev/null
+++ b/data/system-to-dir.yaml
@@ -0,0 +1,213 @@
+AVAST_I: avs
+AVAST_II-0: avs
+AVAST_III: avs
+AVAST_IV-0: avs
+AVAST_V-0: avs
+AbiA_large-0: abia_large
+AbiA_small: abia_small
+AbiB-0: abib
+AbiC-0: abic
+AbiD-0: abid
+AbiE: abie
+AbiG: abig
+AbiH-0: abih
+AbiI-0: abii
+AbiJ-0: abij
+AbiK-0: abik
+AbiL: abil
+AbiN-0: abin
+AbiO-0: abio
+AbiP2-0: abip2
+AbiQ-0: abiq
+AbiR: abir
+AbiT: abit
+AbiU-0: abiu
+AbiV-0: abiv
+AbiZ-0: abiz
+Aditi: aditi
+Azaca: azaca
+BREX_I: brex
+BREX_II: brex
+BREX_III: brex
+BREX_IV: brex
+BREX_V: brex
+BREX_VI: brex
+Borvo-0: borvo
+BstA-0: bsta
+BstA-1: bsta
+BstA-2: bsta
+Bunzi: bunzi
+Butters_gp30_gp31-0: butters_gp30_gp31
+Butters_gp57r-0: butters_gp57r
+CBASS_I: cbass
+CBASS_II: cbass
+CBASS_III: cbass
+CBASS_IV: cbass
+CapRel-0: caprel
+Charlie_gp32-0: charlie_gp32
+DISARM_1: disarm
+DISARM_2: disarm
+DRT6-0: drt
+DRT7-0: drt
+DRT8-0: drt
+DRT9-0: drt
+DRT_1: drt
+DRT_2-0: drt
+DRT_3: drt
+DRT_4-0: drt
+DRT_5-0: drt
+DarTG: dartg
+Dazbog: dazbog
+DdmDE: ddmde
+Detocs-0: detocs
+Detocs_hydrolase-0: detocs
+Dnd_ABCDE: dnd
+Dnd_ABCDEFGH: dnd
+Dodola: dodola
+Dpd: dpd
+Druantia_I: druantia
+Druantia_II: druantia
+Druantia_III: druantia
+Dsr_I-0: dsr
+Dsr_II-0: dsr
+Eleos: eleos
+FS_GIY_YIG-0: fs_giy_yig
+FS_HEPN_TM-0: fs_hepn_tm
+FS_HP-0: fs_hp
+FS_HP_SDH_sah-0: fs_hp_sdh_sah
+FS_HsdR_like-0: fs_hsdr_like
+FS_Sma-0: fs_sma
+GAPS1-0: gaps1
+GAPS2-0: gaps2
+GAPS4-0: gaps4
+GAPS6-0: gaps6
+Gabija: gabija
+Gao_Ape-0: gao_ape
+Gao_Her_DUF: gao_her
+Gao_Her_SIR: gao_her
+Gao_Hhe-0: gao_hhe
+Gao_Iet: gao_iet
+Gao_Mza: gao_mza
+Gao_Ppl-0: gao_ppl
+Gao_Qat: gao_qat
+Gao_RL: gao_rl
+Gao_TerY: gao_tery
+Gao_Tmn-0: gao_tmn
+Gao_Upx-0: gao_upx
+GasderMIN-0: gasdermin
+GasderMIN-1: gasdermin
+Hachiman: hachiman
+Hna-0: hna
+ISG15-like: isg15-like
+JukAB-0: jukab
+Kiwa: kiwa
+Lamassu-Amidase: lamassu-fam
+Lamassu-Cap4_nuclease: lamassu-fam
+Lamassu-FMO: lamassu-fam
+Lamassu-Fam_Hydrolase_Protease: lamassu-fam
+Lamassu-Fam_Mrr: lamassu-fam
+Lamassu-Fam_PDDEXK: lamassu-fam
+Lamassu-Hypothetical: lamassu-fam
+Lamassu-Lipase: lamassu-fam
+Lamassu-Sir2: lamassu-fam
+Lit-0: lit
+MADS-0: mads
+MMB_gp29_gp30-0: mmb_gp29_gp30
+Menshen: menshen
+Mok_Hok_Sok-0: mok_hok_sok
+Mokosh_TypeI: mokosh
+Mokosh_TypeII-0: mokosh
+MqsRAC: mqsrac
+NLR_like_bNACHT01-0: nlr
+NLR_like_bNACHT09-0: nlr
+Nhi-0: nhi
+NixI-0: nixi
+Old_exonuclease-0: old_exonuclease
+Olokun: olokun
+PARIS_I: paris
+PARIS_II: paris
+PARIS_II_merge-0: paris
+PARIS_I_merge-0: paris
+PD-Lambda-1-0: pd-lambda-1
+PD-Lambda-2: pd-lambda-2
+PD-Lambda-3: pd-lambda-3
+PD-Lambda-4: pd-lambda-4
+PD-Lambda-5: pd-lambda-5
+PD-Lambda-6-0: pd-lambda-6
+PD-T4-1-0: pd-t4-1
+PD-T4-10: pd-t4-10
+PD-T4-2: pd-t4-2
+PD-T4-3-0: pd-t4-3
+PD-T4-4: pd-t4-4
+PD-T4-5-0: pd-t4-5
+PD-T4-6-0: pd-t4-6
+PD-T4-7-0: pd-t4-7
+PD-T4-8-0: pd-t4-8
+PD-T4-9: pd-t4-9
+PD-T7-1-0: pd-t7-1
+PD-T7-2: pd-t7-2
+PD-T7-3-0: pd-t7-3
+PD-T7-4-0: pd-t7-4
+PD-T7-5-0: pd-t7-5
+Panchino_gp28-0: panchino_gp28
+PfiAT: pfiat
+Pif: pif
+PrrC-0: prrc
+PsyrTA: psyrta
+Pycsar: pycsar
+RT_Ec67_SLATT: retron
+Retron_II: retron
+Retron_III: retron
+Retron_IV: retron
+Retron_IX: retron
+Retron_I_A: retron
+Retron_I_B: retron
+Retron_V: retron
+Retron_VI: retron
+Retron_VIII: retron
+Retron_VII_2: retron
+Retron_X: retron
+Retron_XIII: retron
+RexAB: rexab
+RloC-0: rloc
+RnlAB: rnlab
+RosmerTA: rosmerta
+Rst_2TM_1TM_TIR: rst_2tm_1tm_tir
+Rst_3HP: rst_3hp
+Rst_DUF4238-0: rst_duf4238
+Rst_HelicaseDUF2290: rst_helicaseduf2290
+Rst_Hydrolase-Tm: rst_hydrolase-tm
+Rst_RT-Tm: rst_rt-nitrilase-tm
+Rst_TIR-NLR-0: rst_tir-nlr
+Rst_gop_beta_cll: rst_gop_beta_cll
+SEFIR-0: sefir
+SanaTA: sanata
+Septu: septu
+Shango: shango
+Shedu-0: shedu
+ShosTA: shosta
+SoFic-0: sofic
+SpbK-0: spbk
+SspBCDE: sspbcde
+Stk2-0: stk2
+Thoeris_I: thoeris
+Thoeris_II: thoeris
+Tiamat-0: tiamat
+Uzume-0: uzume
+Viperin-0: viperin
+Wadjet_I: wadjet
+Wadjet_II: wadjet
+Wadjet_III: wadjet
+Zorya_TypeI: zorya
+Zorya_TypeII: zorya
+dCTPdeaminase-0: dctpdeaminase
+dGTPase-0: dgtpase
+gp29_gp30: gp29_gp30
+pAgo_LongA-0: pago
+pAgo_LongB-0: pago
+pAgo_S1A-0: pago
+pAgo_S1B-0: pago
+pAgo_S2B-0: pago
+pAgo_SPARTA-0: pago
+radar_I: radar
+radar_II: radar
diff --git a/packages/df-wiki-cli/df_wiki_cli/content/main.py b/packages/df-wiki-cli/df_wiki_cli/content/main.py
index 32333d1601245e3c17bec85923cd043c05e5f621..bea0f2d4778a98e34d8da8a9b93dcef1f15fb67a 100644
--- a/packages/df-wiki-cli/df_wiki_cli/content/main.py
+++ b/packages/df-wiki-cli/df_wiki_cli/content/main.py
@@ -2,6 +2,8 @@ import typer
import sys
import re
import shutil
+import csv
+import yaml
from typing_extensions import Annotated
from typing import Optional, List
from pathlib import Path
@@ -78,13 +80,35 @@ def lint(
@app.command()
def structure(
+ stat: Annotated[
+ Path,
+ typer.Option(
+ exists=True,
+ file_okay=True,
+ dir_okay=True,
+ writable=False,
+ readable=True,
+ resolve_path=True,
+ ),
+ ],
+ map: Annotated[
+ Path,
+ typer.Option(
+ exists=True,
+ file_okay=True,
+ dir_okay=True,
+ writable=False,
+ readable=True,
+ resolve_path=True,
+ ),
+ ],
dir: Annotated[
Path,
typer.Option(
exists=True,
file_okay=False,
dir_okay=True,
- writable=False,
+ writable=True,
readable=True,
resolve_path=True,
),
@@ -101,13 +125,30 @@ def structure(
),
],
):
- console.rule(f"[bold blue]{dir.name}", style="blue")
- for f in dir.iterdir():
- console.print(f"[green] {f.name}")
- # get the system name
- system = re.split("_|\.|-0", f.name)[0].lower()
-
- console.print(system)
- systemDir = output / system
- systemDir.mkdir(parents=True, exist_ok=True)
- shutil.copy2(f, systemDir)
+ with open(map, "r") as map_f:
+ system_to_dir = yaml.safe_load(map_f)
+
+ with open(stat, "r") as stat_f:
+ reader = csv.DictReader(stat_f)
+
+ for row in reader:
+ dir_name = system_to_dir[row["system"]]
+ # console.rule(f"[bold blue]{dir_name}", style="blue")
+ files = [
+ {"f": Path(row["pdb"]), "d": "PDB"},
+ {"f": Path(row["pae_table"]), "d": "PAE"},
+ {"f": Path(row["fasta_file"]), "d": "Fastas"},
+ {"f": Path(row["Foldseek_name"]), "d": "foldseek_monomers_html"},
+ ]
+ target_dir = output / dir_name
+ target_dir.mkdir(parents=True, exist_ok=True)
+ for f in files:
+ str_f = str(f["f"])
+ if str_f and str_f != "." and str_f != "" and str_f != "na":
+ # console.print("--" + str(f["f"]) + "--")
+ # console.print(f"[green] copy {f['f'].name} to {target_dir}")
+ file_to_copy = dir / f["d"] / f["f"]
+ if file_to_copy.exists():
+ shutil.copy2(file_to_copy, target_dir)
+ else:
+ console.print(f"[red] file {str(file_to_copy.name)} does not exist")
diff --git a/packages/df-wiki-cli/pyproject.toml b/packages/df-wiki-cli/pyproject.toml
index 320115fc3a887382a669362e1118c0a5c2e4f373..236029026cd480779937ff757858d6cf7c8ad037 100644
--- a/packages/df-wiki-cli/pyproject.toml
+++ b/packages/df-wiki-cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "df-wiki-cli"
-version = "0.1.2"
+version = "0.1.3"
description = ""
authors = ["Remi PLANEL <rplanel@pasteur.fr>"]
readme = "README.md"