From 1e76012bc8dcdd1e9c3a9fb1220f074ae1064e6c Mon Sep 17 00:00:00 2001 From: Remi PLANEL <rplanel@pasteur.fr> Date: Thu, 8 Feb 2024 17:17:07 +0100 Subject: [PATCH] Normalize by given clade --- components/content/RefseqDb.vue | 102 ++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 17 deletions(-) diff --git a/components/content/RefseqDb.vue b/components/content/RefseqDb.vue index 230e0dce..cff70486 100644 --- a/components/content/RefseqDb.vue +++ b/components/content/RefseqDb.vue @@ -25,26 +25,29 @@ onBeforeMount(async () => { index: toValue(dbName), query: "", params: { facets: ["*"], filter: [], - page: 1, - hitsPerPage: 25, + limit: 500000, + sort: ["type:asc"] } }) autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution + allHitsDb.value = toValue(data)?.hits }) - +const allHitsDb = ref<Record<string, any>[] | undefined>(undefined) onMounted(async () => { const { data } = await useAsyncMeiliSearch({ index: toValue(dbName), query: "", params: { facets: ["*"], filter: [], - page: 1, - hitsPerPage: 25, + // page: 1, + // hitsPerPage: 25, + limit: 500000, + sort: ["type:asc"] } }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution + allHitsDb.value = toValue(data)?.hits }) @@ -238,11 +241,12 @@ const computedDistriSystemOptions = computed(() => { // Taxo distri const computedTaxonomyDistribution = computed(() => { - const toValNormalizePerAssembly = toValue(normalizePerAssembly) - if (toValNormalizePerAssembly?.length > 0) { - return Object.entries(toValue(msResult).facetDistribution[selectedTaxoRank.value]).map(([key, value]) => { + const toValSelectedTaxoRank = toValue(selectedTaxoRank) + const toValFacetsPerRank = toValue(msResult)?.facetDistribution?.[toValSelectedTaxoRank] + if (toValFacetsPerRank) { + return Object.entries(toValFacetsPerRank).map(([key, value]) => { return { - [selectedTaxoRank.value]: key, + [toValSelectedTaxoRank]: key, count: value } }).sort() @@ -298,11 +302,27 @@ const binPlotOptions = ref({ grid: true, x: { tickRotate: 90, tip: true, label: "Systems" }, // y: { tickFormat: 's' }, - color: { scheme: "plasma", legend: true }, + color: { scheme: "plasma", legend: true, domain: [0, 100] }, +}) + + +const binPlotGroup = computed(() => { + return Plot.group( + { + fill: "count" + }, + { + x: "type", + y: selectedTaxoRank.value, + tip: true, + inset: 0.5, + sort: { y: "fill" } + }) }) const binPlotDataOptions = computed(() => { const toValueAllHits = toValue(allHits) + const data = toValueAllHits?.hits ?? [] return toValueAllHits?.hits?.length > 0 ? { ...binPlotOptions.value, width: width.value, @@ -312,9 +332,47 @@ const binPlotDataOptions = computed(() => { type: scaleType.value, tickFormat: '~s', ticks: scaleType.value === 'symlog' ? 3 : 5, + }, marks: [ - Plot.cell(toValueAllHits?.hits ?? [], Plot.group({ fill: "count" }, { x: "type", y: selectedTaxoRank.value, tip: true, inset: 0.5, sort: { y: "fill" } })), + Plot.cell(data, Plot.group( + { + fill: { + label: `Normalize by ${selectedTaxoRank.value} clade`, + reduceIndex: function (I, X) { + const toValAssemblyPerRank = toValue(assemblyPerRank) + if (toValAssemblyPerRank?.size > 0) { + const clade = X[I[0]][selectedTaxoRank.value] + const system = X[I[0]].type + console.log(I) + console.log(X) + // Get the list of item for this group + const itemsPerGroup = d3.rollup(I.map(index => { + return X[index] + }), D => D.length, d => d.type, d => d.Assembly) + console.log(itemsPerGroup) + // console.log(clade) + // console.log(toValAssemblyPerRank.get(clade)) + const countForClade = toValAssemblyPerRank.get(clade).size + // console.log(countForClade) + // console.log(I); + // console.log(X); + + const frequency = (itemsPerGroup.get(system).size / countForClade) * 100 + console.log(frequency) + return frequency + } + return I.length + } + } + }, + { + x: "type", + y: selectedTaxoRank.value, + tip: true, + inset: 0.5, + sort: { y: "fill" } + })) ] } : null @@ -357,11 +415,21 @@ const systemPerAssemblyPerRank = computed(() => { } }) -const assemblyPerRank = computed(() => { +const systemPerRankPerAssembly = computed(() => { const toValueAllHits = toValue(allHits) - + console.log("all hits dans system per...") + console.log(toValueAllHits) if (toValueAllHits && toValueAllHits?.hits?.length > 0) { - return d3.rollup(toValueAllHits.hits, D => D.length, d => d[toValue(selectedTaxoRank)], d => d.Assembly) + return d3.rollup(toValueAllHits.hits, D => D.length, d => d[toValue(selectedTaxoRank)], d => d.type, d => d.Assembly) + } +}) + + +const assemblyPerRank = computed(() => { + const toValueAllHits = toValue(allHitsDb) + + if (toValueAllHits && toValueAllHits?.length > 0) { + return d3.rollup(toValueAllHits, D => D.length, d => d[toValue(selectedTaxoRank)], d => d.Assembly) } }) @@ -585,8 +653,8 @@ async function downloadPng(component: ComponentPublicInstance | null, filename: </v-chip> </template> <template #[`item.replicon`]="{ item }"> - <v-chip color="info" link size="small" - :href="`https://www.ncbi.nlm.nih.gov/nuccore/${item.replicon}`" target="_blank"> {{ + <v-chip color="info" link size="small" :href="`https://www.ncbi.nlm.nih.gov/nuccore/${item.replicon}`" + target="_blank"> {{ item.replicon }} </v-chip> </template> -- GitLab