diff --git a/nmdc_server/ingest/omics_processing.py b/nmdc_server/ingest/omics_processing.py
index 3cc1f755..4f6bc561 100644
--- a/nmdc_server/ingest/omics_processing.py
+++ b/nmdc_server/ingest/omics_processing.py
@@ -148,7 +148,13 @@ def get_poolable_replicate_manifest(
return omics_processing_id
-def load_omics_processing(db: Session, obj: Dict[str, Any], mongodb: Database, logger, config_map):
+def load_omics_processing( # noqa: C901
+ db: Session,
+ obj: Dict[str, Any],
+ mongodb: Database,
+ logger,
+ config_map,
+):
logger = get_logger(__name__)
input_ids: list[str] = obj.pop("has_input", [""])
biosample_input_ids: set[str] = set()
@@ -172,8 +178,18 @@ def load_omics_processing(db: Session, obj: Dict[str, Any], mongodb: Database, l
data_objects = obj.pop("has_output", [])
obj["study_id"] = obj.pop("associated_studies", [None])[0]
- obj["analyte_category"] = omics_types[obj["analyte_category"].lower()]
- obj["omics_type"] = omics_types[obj["analyte_category"].lower()]
+ original_analyte_category = obj["analyte_category"].lower()
+ obj["analyte_category"] = omics_types[original_analyte_category]
+ obj["omics_type"] = omics_types[original_analyte_category]
+
+ # Get amplicon specific fields
+ if obj["omics_type"] == "Amplicon":
+ obj["target_gene"] = obj.pop("target_gene", None)
+ target_subfragment = obj.pop("target_subfragment", None)
+ if isinstance(target_subfragment, dict) and "has_raw_value" in target_subfragment:
+ obj["target_subfragment"] = target_subfragment["has_raw_value"]
+ else:
+ obj["target_subfragment"] = target_subfragment
# Get instrument name
instrument_id = obj.pop("instrument_used", [])
diff --git a/web/src/components/AmpliconObjectDataTable.vue b/web/src/components/AmpliconObjectDataTable.vue
new file mode 100644
index 00000000..3f835ee4
--- /dev/null
+++ b/web/src/components/AmpliconObjectDataTable.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+ {{ BioprojectLinkBase + item.insdc_experiment_identifiers }}
+
+
+
+
diff --git a/web/src/components/SampleListExpansion.vue b/web/src/components/SampleListExpansion.vue
index b9c70210..d362fe09 100644
--- a/web/src/components/SampleListExpansion.vue
+++ b/web/src/components/SampleListExpansion.vue
@@ -4,6 +4,7 @@ import { computed, defineComponent, PropType } from '@vue/composition-api';
import { fieldDisplayName } from '@/util';
import { BiosampleSearchResult } from '@/data/api';
import DataObjectTable from './DataObjectTable.vue';
+import AmpliconObjectDataTable from './AmpliconObjectDataTable.vue';
const buttonOrder = [
'metagenome',
@@ -11,11 +12,13 @@ const buttonOrder = [
'proteomics',
'metabolomics',
'organic matter characterization',
+ 'amplicon',
];
export default defineComponent({
components: {
DataObjectTable,
+ AmpliconObjectDataTable,
},
props: {
@@ -38,6 +41,11 @@ export default defineComponent({
return props.expanded.resultId === props.result.id
&& props.expanded.omicsProcessingId === omicsProcessingId;
}
+ function isDisabled(omicsType: string, projects: any[]) {
+ // TODO this is a temporary fix for the amplicon button
+ // until we have a proper way to handle amplicon data.
+ return projects[0].omics_data.length === 0 && omicsType !== 'Amplicon';
+ }
const filteredOmicsProcessing = computed(() => Object.entries(groupBy(
props.result.omics_processing,
@@ -47,9 +55,9 @@ export default defineComponent({
const bi = buttonOrder.indexOf(bgroup.toLowerCase());
return ai - bi;
}));
-
return {
isOpen,
+ isDisabled,
filteredOmicsProcessing,
fieldDisplayName,
};
@@ -69,7 +77,7 @@ export default defineComponent({
x-small
:outlined="!isOpen(projects[0].id)"
:color="isOpen(projects[0].id) ? 'primary' : 'default'"
- :disabled="projects[0].omics_data.length == 0 ? true : false"
+ :disabled="isDisabled(omicsType, projects)"
class="mr-2 mt-2"
@click="() => $emit('open-details', projects[0].id)"
@@ -80,7 +88,16 @@ export default defineComponent({
+