From 2153783936a07796eace6c6b793b2388a92b3ed3 Mon Sep 17 00:00:00 2001 From: Ben Capodanno Date: Mon, 3 Mar 2025 12:22:04 -0800 Subject: [PATCH] Base Editor support for target accessions Adds base editor support during creation and editing of score sets. Adds a note to the score set viewer under the targets when a score set represents base editor data. --- src/components/screens/ScoreSetCreator.vue | 19 ++++++++++++++++ src/components/screens/ScoreSetEditor.vue | 25 +++++++++++++++++++--- src/components/screens/ScoreSetView.vue | 5 +++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/components/screens/ScoreSetCreator.vue b/src/components/screens/ScoreSetCreator.vue index 32084320..e51907a7 100644 --- a/src/components/screens/ScoreSetCreator.vue +++ b/src/components/screens/ScoreSetCreator.vue @@ -551,6 +551,20 @@ +
+
+ +
+ Base editor data is a type of functional assay that is similar in many respects to MAVE data. When uploading base editor data, you must + also include a 'guide_sequence' column in your uploaded scores (and counts) file(s). +
+
+
+ +
{{ isBaseEditor ? 'Yes, this score set represents base editor data.' : 'No, this score set does not represent base editor data.' }}
+
+
+
@@ -1341,6 +1355,7 @@ export default { validationErrors: {}, isTargetSequence: true, + isBaseEditor: false, isMultiTarget: false, isProvidingScoreRanges: false, @@ -2238,6 +2253,10 @@ export default { targetGene.targetAccession.gene = targetGene.targetAccession.gene.name } + if (!this.isTargetSequence) { + targetGene.targetAccession.isBaseEditor = this.isBaseEditor + } + return targetGene } ) diff --git a/src/components/screens/ScoreSetEditor.vue b/src/components/screens/ScoreSetEditor.vue index 328df301..e7a5dd1b 100644 --- a/src/components/screens/ScoreSetEditor.vue +++ b/src/components/screens/ScoreSetEditor.vue @@ -640,6 +640,13 @@ + +
+
+ + {{ isBaseEditor ? 'This score set represents base editor data.' : 'This score set does not represent base editor data.' }} +
+
{{validationErrors['targetGenes']}}
@@ -720,6 +727,7 @@ import InputGroupAddon from 'primevue/inputgroupaddon' import InputNumber from 'primevue/inputnumber' import InputText from 'primevue/inputtext' + import InputSwitch from 'primevue/inputswitch' import Message from 'primevue/message' import Multiselect from 'primevue/multiselect' import ProgressSpinner from 'primevue/progressspinner' @@ -784,7 +792,7 @@ import { TARGET_GENE_CATEGORIES, textForTargetGeneCategory } from '@/lib/target- export default { name: 'ScoreSetEditor', - components: { AutoComplete, Button, Card, Chips, Column, Checkbox, DataTable, DefaultLayout, Dropdown, EmailPrompt, EntityLink, FileUpload, InputGroup, InputGroupAddon, InputNumber, InputText, Message, Multiselect, ProgressSpinner, SelectButton, TabPanel, TabView, Textarea }, + components: { AutoComplete, Button, Card, Chips, Column, Checkbox, DataTable, DefaultLayout, Dropdown, EmailPrompt, EntityLink, FileUpload, InputGroup, InputGroupAddon, InputNumber, InputText, InputSwitch, Message, Multiselect, ProgressSpinner, SelectButton, TabPanel, TabView, Textarea }, setup: () => { const publicationIdentifierSuggestions = useItems({ itemTypeName: 'publication-identifier-search' }) @@ -899,7 +907,9 @@ import { TARGET_GENE_CATEGORIES, textForTargetGeneCategory } from '@/lib/target- metaAnalyzesScoreSetSuggestions: [], supersededScoreSetSuggestions: [], targetGeneAccessionSuggestions: [], - validationErrors: {} + validationErrors: {}, + + isBaseEditor: false }), computed: { @@ -1551,6 +1561,10 @@ import { TARGET_GENE_CATEGORIES, textForTargetGeneCategory } from '@/lib/target- this.scoreRangeBoundaryHelper[idx].upperBoundIsInfinity = this.scoreRanges.ranges[idx].range[1] === null }) this.extraMetadata = this.item.extraMetadata + + if (this.targetGenes[0]?.targetAccession) { + this.isBaseEditor = this.targetGenes[0].targetAccession.isBaseEditor + } } else { this.experiment = null this.licenseId = this.defaultLicenseId @@ -1660,7 +1674,12 @@ import { TARGET_GENE_CATEGORIES, textForTargetGeneCategory } from '@/lib/target- dataUsagePolicy: this.dataUsagePolicy, extraMetadata: {}, // eslint-disable-next-line no-unused-vars - targetGenes: this.targetGenes.map(({ index, ...target }) => target), // drop index property from target genes before save + targetGenes: this.targetGenes.map(({ index, ...target }) => { // drop index property from target genes before save + if (target.targetAccession) { + target.targetAccession.isBaseEditor = this.isBaseEditor + } + return target + }), scoreRanges: this.scoreRanges } if (!this.item) { diff --git a/src/components/screens/ScoreSetView.vue b/src/components/screens/ScoreSetView.vue index 9a4f268a..cb888cca 100644 --- a/src/components/screens/ScoreSetView.vue +++ b/src/components/screens/ScoreSetView.vue @@ -290,6 +290,11 @@

+
+
+ *This score set represents base editor data. +
+
Score Ranges