diff --git a/backend/src/core/annotation.py b/backend/src/core/annotation.py index 6e1165d7..1bed4315 100644 --- a/backend/src/core/annotation.py +++ b/backend/src/core/annotation.py @@ -3,7 +3,10 @@ import logging import queue -from .annotation_task import AnnotationTaskFactory +from ..repository.analysis_collection import AnalysisCollection +from ..repository.genomic_unit_collection import GenomicUnitCollection + +from .annotation_task import AnnotationTaskFactory, VersionAnnotationTask from ..models.analysis import Analysis from ..repository.annotation_config_collection import AnnotationConfigCollection from ..core.annotation_unit import AnnotationUnit @@ -83,7 +86,10 @@ def queue_annotation_tasks(self, analysis: Analysis, annotation_task_queue: Anno annotation_task_queue.put(annotation_unit_queued) @staticmethod - def process_tasks(annotation_queue, genomic_unit_collection): # pylint: disable=too-many-locals + def process_tasks( + annotation_queue: AnnotationQueue, analysis_name: str, genomic_unit_collection: GenomicUnitCollection, + analysis_collection: AnalysisCollection + ): # pylint: disable=too-many-branches,too-many-locals """Processes items that have been added to the queue""" logger.info("%s Processing annotation tasks queue ...", annotation_log_label()) @@ -91,64 +97,85 @@ def process_tasks(annotation_queue, genomic_unit_collection): # pylint: disable annotation_task_futures = {} while not annotation_queue.empty(): annotation_unit = annotation_queue.get() - latest = False - if genomic_unit_collection.annotation_exist(annotation_unit.genomic_unit, annotation_unit.dataset - ) and annotation_unit.is_version_latest(): - logger.info('%s Annotation Exists...', format_annotation_logging(annotation_unit)) - latest = True - continue - ready = True - - if annotation_unit.has_dependencies(): - missing_dependencies = annotation_unit.get_missing_dependencies() - for missing in missing_dependencies: - annotation_value = genomic_unit_collection.find_genomic_unit_annotation_value( - annotation_unit.genomic_unit, missing - ) - ready = annotation_unit.ready_for_annotation(annotation_value, missing) - if not ready and not latest: - if annotation_unit.should_continue_annotation(): - logger.info( - '%s Delaying Annotation, Missing %s Dependencies...', - format_annotation_logging(annotation_unit), annotation_unit.get_missing_dependencies() - ) - annotation_queue.put(annotation_unit) - else: - logger.info( - '%s Canceling Annotation, Missing %s Dependencies...', - format_annotation_logging(annotation_unit), annotation_unit.get_missing_dependencies() - ) + if not annotation_unit.version_exists(): + version_task = AnnotationTaskFactory.create_version_task(annotation_unit) + logger.info('%s Creating Task To Version...', format_annotation_logging(annotation_unit)) + annotation_task_futures[executor.submit(version_task.annotate)] = version_task + else: + if genomic_unit_collection.annotation_exist(annotation_unit): + logger.info('%s Annotation Exists...', format_annotation_logging(annotation_unit)) + continue + + if annotation_unit.has_dependencies(): + missing_dependencies = annotation_unit.get_missing_dependencies() + for missing_dataset_name in missing_dependencies: + analysis_manifest_dataset = analysis_collection.get_manifest_dataset_config( + analysis_name, missing_dataset_name + ) + if analysis_manifest_dataset is None: + continue + + dependency_annotation_unit = AnnotationUnit( + annotation_unit.genomic_unit, analysis_manifest_dataset + ) + dependency_annotation_unit.set_latest_version(analysis_manifest_dataset['version']) + annotation_value = genomic_unit_collection.find_genomic_unit_annotation_value( + dependency_annotation_unit + ) + if annotation_value: + annotation_unit.set_annotation_for_dependency(missing_dataset_name, annotation_value) - continue + if not annotation_unit.conditions_met_to_gather_annotation(): + if annotation_unit.should_continue_annotation(): + logger.info( + '%s Delaying Annotation, Missing %s Dependencies %s/10 times...', + format_annotation_logging(annotation_unit), annotation_unit.get_missing_dependencies(), + annotation_unit.get_delay_count() + 1 + ) + annotation_queue.put(annotation_unit) + else: + logger.info( + '%s Canceling Annotation, Missing %s Dependencies...', + format_annotation_logging(annotation_unit), annotation_unit.get_missing_dependencies() + ) + continue - task = AnnotationTaskFactory.create(annotation_unit) - logger.info('%s Creating Task To Annotate...', format_annotation_logging(annotation_unit)) + annotation_task = AnnotationTaskFactory.create_annotation_task(annotation_unit) + logger.info('%s Creating Task To Annotate...', format_annotation_logging(annotation_unit)) - annotation_task_futures[executor.submit(task.annotate)] = (annotation_unit.genomic_unit, task) + annotation_task_futures[executor.submit(annotation_task.annotate)] = annotation_task for future in concurrent.futures.as_completed(annotation_task_futures): - annotation_unit.genomic_unit, annotation_task = annotation_task_futures[future] - logger.info('%s Query completed...', format_annotation_logging(annotation_unit)) + task = annotation_task_futures[future] try: - result_temp = future.result() - - for annotation in annotation_task.extract(result_temp): + task_process_result = future.result() + if isinstance(task, VersionAnnotationTask): + annotation_unit = task.annotation_unit + version = task.extract_version(task_process_result) + annotation_unit.set_latest_version(version) logger.info( - '%s Saving %s...', - format_annotation_logging( - annotation_unit, annotation_task.annotation_unit.dataset['data_set'] - ), annotation['value'] - ) - genomic_unit_collection.annotate_genomic_unit( - annotation_task.annotation_unit.genomic_unit, annotation + '%s Version Calculated %s...', format_annotation_logging(annotation_unit), version ) + annotation_queue.put(annotation_unit) + else: + for annotation in task.extract(task_process_result): + logger.info( + '%s Saving %s...', + format_annotation_logging(annotation_unit, task.annotation_unit.get_dataset_name()), + annotation['value'] + ) + + genomic_unit_collection.annotate_genomic_unit( + task.annotation_unit.genomic_unit, annotation + ) + analysis_collection.add_dataset_to_manifest(analysis_name, annotation_unit) except FileNotFoundError as error: logger.info( '%s exception happened %s with %s and %s', annotation_log_label(), error, - annotation_unit.genomic_unit, annotation_task + annotation_unit.genomic_unit, task ) del annotation_task_futures[future] diff --git a/backend/src/core/annotation_task.py b/backend/src/core/annotation_task.py index 3f192e96..bfca75b2 100644 --- a/backend/src/core/annotation_task.py +++ b/backend/src/core/annotation_task.py @@ -1,18 +1,16 @@ """Tasks for annotating a genomic unit with datasets""" from abc import abstractmethod +from datetime import date import json from random import randint import time -# pylint: disable=too-few-public-methods -# Disabling too few public metods due to utilizing Pydantic/FastAPI BaseSettings class import logging import jq import requests from ..core.annotation_unit import AnnotationUnit -# create logger logger = logging.getLogger(__name__) @@ -31,7 +29,7 @@ class AnnotationTaskInterface: def __init__(self, annotation_unit: AnnotationUnit): self.annotation_unit = annotation_unit - def aggregate_string_replacements(self, base_string): + def aggregate_string_replacements(self, base_string) -> str: """ Replaces the content 'base_string' where strings within the pattern {item} are replaced, 'item' can be the genomic unit's type such as @@ -39,6 +37,23 @@ def aggregate_string_replacements(self, base_string): The follow are examples of the genomic_unit's dict's attributes like genomic_unit['gene'] or genomic_unit['Entrez Gene Id'] + + example base string: + https://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;CADD=1;refseq=1; + return value: + https://grch37.rest.ensembl.org/vep/human/hgvs/NM_001017980.3:c.164G>T?content-type=application/json;CADD=1;refseq=1; + + example base string: + .[].transcript_consequences[] | select( .transcript_id | contains(\"{transcript}\") ) | { CADD: .cadd_phred } + + return value: + .[].transcript_consequences[] | select( .transcript_id | contains(\"NM_001017980\") ) | { CADD: .cadd_phred } + + genomic unit within the annotation unit in this task to be + { + 'hgvs_variant': "hgvs_variant", + 'transcript': 'NM_001017980', + } """ genomic_unit_string = f"{{{self.annotation_unit.get_genomic_unit_type()}}}" replace_string = base_string.replace(genomic_unit_string, self.annotation_unit.get_genomic_unit()) @@ -56,7 +71,12 @@ def aggregate_string_replacements(self, base_string): def annotate(self): """Interface for implementation of of retrieving the annotation for a genomic unit and its set of datasets""" - def extract(self, json_result): + def __json_extract__(self, jq_query, json_to_parse): + """Private ethod to execute jq to extract JSON""" + jq_results = iter(jq.compile(jq_query).input(json_to_parse).all()) + return jq_results + + def extract(self, incomming_json): """ Interface extraction method for annotation tasks """ annotations = [] @@ -65,19 +85,18 @@ def extract(self, json_result): if 'attribute' in self.annotation_unit.dataset: # pylint: disable=too-many-nested-blocks annotation_unit_json = { "data_set": self.annotation_unit.dataset['data_set'], - "data_source": self.annotation_unit.dataset['data_source'], - "version": "", - "value": "", + "data_source": self.annotation_unit.dataset['data_source'], "value": "", + "version": self.annotation_unit.version } - replaced_attributes = self.aggregate_string_replacements(self.annotation_unit.dataset['attribute']) jq_results = empty_gen() try: - jq_results = iter(jq.compile(replaced_attributes).input(json_result).all()) + replaced_attributes = self.aggregate_string_replacements(self.annotation_unit.dataset['attribute']) + jq_results = self.__json_extract__(replaced_attributes, incomming_json) except ValueError as value_error: logger.info(( 'Failed to annotate "%s" from "%s" on %s with error "%s"', annotation_unit_json['data_set'], - annotation_unit_json['data_source'], json.dumps(json_result), value_error + annotation_unit_json['data_source'], json.dumps(incomming_json), value_error )) jq_result = next(jq_results, None) while jq_result is not None: @@ -102,6 +121,29 @@ def extract(self, json_result): return annotations + def extract_version(self, incoming_version_json): + """ Interface extraction method for Version Annotation tasks""" + + version = "" + + versioning_type = self.annotation_unit.get_dataset_version_type() + if versioning_type == "rosalution": + version = incoming_version_json["rosalution"] + elif versioning_type == "date": + version = incoming_version_json["date"] + else: + jq_query = self.annotation_unit.dataset['version_attribute'] + + jq_result = empty_gen() + try: + jq_result = self.__json_extract__(jq_query, incoming_version_json) + except ValueError as value_error: + logger.info(('Failed to extract version', value_error)) + jq_result = next(jq_result, None) + version = jq_result + + return version + class ForgeAnnotationTask(AnnotationTaskInterface): """ @@ -169,24 +211,6 @@ def annotate(self): json_result = result.json() return json_result - def base_url(self): - """ - Creates the base url for the annotation according to the configuration. Searches for string {genomic_unit_type} - within the 'url' attribute and replaces it with the genomic_unit being annotated. - """ - string_to_replace = f"{{{self.annotation_unit.dataset['genomic_unit_type']}}}" - replace_string = self.annotation_unit.dataset['url'].replace( - string_to_replace, self.annotation_unit.get_genomic_unit() - ) - - if 'dependencies' in self.annotation_unit.dataset: - for depedency in self.annotation_unit.dataset['dependencies']: - depedency_replace_string = f"{{{depedency}}}" - replace_string = replace_string.replace( - depedency_replace_string, self.annotation_unit.genomic_unit[depedency] - ) - return replace_string - def build_url(self): """ Builds the URL from the base_url and then appends the list of query parameters for the list of datasets. @@ -197,43 +221,49 @@ def build_url(self): class VersionAnnotationTask(AnnotationTaskInterface): """An annotation task that gets the version of the annotation""" + version_types = {} + def __init__(self, annotation_unit): """initializes the task with the annotation_unit.genomic_unit""" AnnotationTaskInterface.__init__(self, annotation_unit) + self.version_types = { + "rest": self.get_annotation_version_from_rest, "rosalution": self.get_annotation_version_from_rosalution, + "date": self.get_annotation_version_from_date + } def annotate(self): - """placeholder for annotating a genomic unit with version""" - return "not-implemented" - - def versioning_by_type(self, versioning_type): """Gets version by versioning type and returns the version data to the annotation unit""" + + version_type = self.annotation_unit.dataset['versioning_type'] version = "" - if versioning_type == "rest": - version = self.get_annotation_version_from_rest() - elif versioning_type == "rosalution": - version = self.get_annotation_version_from_rosalution() - elif versioning_type == "date": - version = self.get_annotation_version_from_date() + if version_type not in self.version_types: + logger.error(('Failed versioning: "%s" is an Invalid Version Type', version_type)) + return {} + + version = self.version_types[version_type]() return version def get_annotation_version_from_rest(self): """Gets version for rest type and returns the version data""" - version_from_rest = "" - # getting version from rest - return version_from_rest + version = {"rest": "rosalution-temp-manifest-00"} + + url_to_query = self.annotation_unit.dataset['version_url'] + result = requests.get(url_to_query, verify=False, headers={"Accept": "application/json"}, timeout=30) + version = result.json() + return version def get_annotation_version_from_rosalution(self): """Gets version for rosalution type and returns the version data""" - version_from_rosalution = "" - # getting version from rosalution - return version_from_rosalution + + version = {"rosalution": "rosalution-manifest-00"} + return version def get_annotation_version_from_date(self): """Gets version for date type and returns the version data""" - version_from_date = "" - # getting version from date - return version_from_date + + version = {"date": str(date.today())} + return version class AnnotationTaskFactory: @@ -256,7 +286,7 @@ def register(cls, key: str, annotation_task_interface: AnnotationTaskInterface): cls.tasks[key] = annotation_task_interface @classmethod - def create(cls, annotation_unit: AnnotationUnit): + def create_annotation_task(cls, annotation_unit: AnnotationUnit): """ Creates an annotation task with a genomic_units and dataset json. Instantiates the class according to a datasets 'annotation_source_type' from the datasets configurtion. @@ -267,3 +297,12 @@ def create(cls, annotation_unit: AnnotationUnit): new_task = cls.tasks[annotation_task_type](annotation_unit) # new_task.set(annotation_unit.dataset) return new_task + + @classmethod + def create_version_task(cls, annotation_unit: AnnotationUnit): + """ + Creates an annotation task with a genomic_units and dataset json. Instantiates the class according to + a datasets 'annotation_source_type' from the datasets configurtion. + """ + new_task = cls.tasks["version"](annotation_unit) + return new_task diff --git a/backend/src/core/annotation_unit.py b/backend/src/core/annotation_unit.py index 0cba19f1..9cbadf97 100644 --- a/backend/src/core/annotation_unit.py +++ b/backend/src/core/annotation_unit.py @@ -1,11 +1,13 @@ """ Class to instantiate Annotation Units and support its functions""" +import copy + class AnnotationUnit: """ Annotation Unit Class that houses the Genomic Unit and its corresponding dataset """ def __init__(self, genomic_unit, dataset): - self.genomic_unit = genomic_unit + self.genomic_unit = copy.deepcopy(genomic_unit) self.dataset = dataset self.version = "" @@ -13,14 +15,30 @@ def get_genomic_unit(self): """Returs 'unit' from genomic_unit""" return self.genomic_unit['unit'] - def get_dataset(self): - """Return's 'data_set' from dataset""" + def get_dataset_name(self): + """Return's the name of the dataset from the configuration""" return self.dataset['data_set'] + def get_dataset_source(self): + """Returns the dataset's source""" + return self.dataset['data_source'] + + def get_dataset_version_type(self): + """Returns the dataset's versioning type""" + return self.dataset['versioning_type'] + + def is_transcript_dataset(self): + """Returns true if the dataset is for a transcript""" + return 'transcript' in self.dataset + def get_genomic_unit_type(self): """Return's 'genomic_unit_type' from dataset""" return self.dataset['genomic_unit_type'] + def get_genomic_unit_type_string(self): + """Return's 'genomic_unit_type' from dataset""" + return self.genomic_unit['type'].value + def has_dependencies(self): """Checks if the annotation unit's dataset has dependencies""" return "dependencies" in self.dataset @@ -37,30 +55,29 @@ def get_missing_dependencies(self): if they are missing from the genomic_unit """ missing_dependencies = [] + + if 'dependencies' not in self.dataset: + return missing_dependencies + for dependency in self.dataset['dependencies']: if dependency not in self.genomic_unit: missing_dependencies = [dependency] return missing_dependencies - def ready_for_annotation(self, dependency_annotation, missing_dependency): + def conditions_met_to_gather_annotation(self): """ Checks for annotation unit is ready for annotation and calls the assign_annotation_value_to_dependency() function if ready """ - ready = True - if dependency_annotation: - self.set_annotation_for_dependency(missing_dependency, dependency_annotation) - else: - ready = False - return ready - - def set_annotation_for_dependency(self, missing_dependency, dependency_annotation): + missing_dependencies = self.get_missing_dependencies() + return len(missing_dependencies) == 0 + + def set_annotation_for_dependency(self, missing_dependency_name, dependency_annotation_value): """ Assigns annotation value to the genomic unit's missing dependency """ - self.genomic_unit[missing_dependency] = dependency_annotation - return + self.genomic_unit[missing_dependency_name] = dependency_annotation_value def should_continue_annotation(self): """ @@ -71,6 +88,10 @@ def should_continue_annotation(self): return not self.delay_count_exceeds() + def get_delay_count(self): + """Returns the current annotation delay count""" + return self.dataset['delay_count'] if 'delay_count' in self.dataset else 0 + def increment_delay_count(self): """Sets the delay count of the annotation unit""" delay_count = self.dataset['delay_count'] + 1 if 'delay_count' in self.dataset else 0 @@ -90,7 +111,13 @@ def to_name_string(self): """ Returns the annotation unit's genomic_unit and corresponding dataset. """ - return f"{self.get_genomic_unit()} for {self.get_dataset()}" + return f"{self.get_genomic_unit()} for {self.get_dataset_name()}" + + def get_version(self): + """ + Returns the version of this annotation unit, if none set, returns an empty string. + """ + return self.version def set_latest_version(self, version_details): """Sets the Annotation Unit with the version details""" @@ -100,18 +127,4 @@ def set_latest_version(self, version_details): def version_exists(self): """Checks if the Annotation Unit is versioned or not""" # This is currently a placeholder, and just returning True for now - if self.version == "": - return True - return False - - def is_version_latest(self): - """Checks if the annotated Annotation Unit has the latest version or not""" - # Not implemented currently - # Once we are getting versions, latest will be initialized as False - latest = True - - if self.version_exists(): - # code to be added to check if version is latest - latest = True - - return latest + return self.version != "" diff --git a/backend/src/enums.py b/backend/src/enums.py index 16bc1ad8..2455856e 100644 --- a/backend/src/enums.py +++ b/backend/src/enums.py @@ -22,6 +22,16 @@ class GenomicUnitType(str, Enum): HGVS_VARIANT = "hgvs_variant" INVALID = "invalid" + @classmethod + def string_types(cls): + """ + Provides a Set of each genomic unit type's corresponding string values. + """ + return ( + GenomicUnitType.GENE.value, GenomicUnitType.TRANSCRIPT, GenomicUnitType.VARIANT, + GenomicUnitType.HGVS_VARIANT.value + ) + class AnnotationSourceType(str, Enum): """Enumeration of the different types of annotation sources in the configuration""" diff --git a/backend/src/models/analysis.py b/backend/src/models/analysis.py index 8494e886..95d67bb7 100644 --- a/backend/src/models/analysis.py +++ b/backend/src/models/analysis.py @@ -90,6 +90,7 @@ class Analysis(BaseAnalysis): sections: List[Section] = [] discussions: List = [] supporting_evidence_files: List = [] + manifest: List = [] def units_to_annotate(self): """Returns the types of genomic units within the analysis""" diff --git a/backend/src/repository/analysis_collection.py b/backend/src/repository/analysis_collection.py index 20fcb506..b505e83c 100644 --- a/backend/src/repository/analysis_collection.py +++ b/backend/src/repository/analysis_collection.py @@ -6,12 +6,14 @@ from pymongo import ReturnDocument +from ..core.annotation_unit import AnnotationUnit + from ..models.analysis import Section from ..models.event import Event from ..enums import EventType # pylint: disable=too-many-public-methods -# Disabling too few public metods due to utilizing Pydantic/FastAPI BaseSettings class +# Disabling due to pushing a refactor of Analysis Collection to a later time. class AnalysisCollection: @@ -130,6 +132,45 @@ def get_genomic_units(self, analysis_name: str): return genomic_units_return + def add_dataset_to_manifest(self, analysis_name: str, annotation_unit: AnnotationUnit): + """Adds this dataset and its version to this Analysis.""" + + dataset = { + annotation_unit.get_dataset_name(): { + 'data_source': annotation_unit.get_dataset_source(), 'version': annotation_unit.get_version() + } + } + + updated_document = self.collection.find_one_and_update({"name": analysis_name}, + {"$push": {"manifest": dataset}}, + return_document=ReturnDocument.AFTER) + + return updated_document['manifest'] + + def get_manifest_dataset_config(self, analysis_name: str, dataset_name: str): + """ Returns an individual dataset manifest """ + dataset_attribute = f"manifest.{dataset_name}" + projection = {"manifest.$": 1} + analysis = self.collection.find_one({"name": analysis_name, dataset_attribute: {'$exists': True}}, projection) + + if not analysis: + return None + + manifest_entry = next((dataset for dataset in analysis['manifest'] if dataset_name in dataset), None) + + return { + "data_set": dataset_name, "data_source": manifest_entry[dataset_name]['data_source'], + "version": manifest_entry[dataset_name]['version'] + } + + def get_dataset_manifest(self, analysis_name): + """Returns the analysis' dataset manifest for annotation versions and sources""" + analysis = self.find_by_name(analysis_name) + if analysis is None: + return None + + return analysis['manifest'] + def create_analysis(self, analysis_data: dict): """Creates a new analysis if the name does not already exist""" if self.collection.find_one({"name": analysis_data["name"]}) is not None: diff --git a/backend/src/repository/genomic_unit_collection.py b/backend/src/repository/genomic_unit_collection.py index d8fd2339..47dea5f9 100644 --- a/backend/src/repository/genomic_unit_collection.py +++ b/backend/src/repository/genomic_unit_collection.py @@ -4,14 +4,28 @@ """ import logging -# pylint: disable=too-few-public-methods -# Disabling too few public metods due to utilizing Pydantic/FastAPI BaseSettings class from bson import ObjectId +from pymongo import ReturnDocument + +from src.enums import GenomicUnitType +from src.core.annotation_unit import AnnotationUnit -# create logger logger = logging.getLogger(__name__) +def transcript_unit_exist(dataset, data_source, version, annotation): + """Helper method to evaluate if transcript annotations have existing annotation""" + if dataset not in annotation: + return False + + annotation_unit_match = next( + (unit for unit in annotation[dataset] if unit['data_source'] == data_source and unit['version'] == version), + None + ) + + return annotation_unit_match is not None + + class GenomicUnitCollection: """ Repository for managing genomic units and their annotations """ @@ -19,53 +33,86 @@ def __init__(self, genomic_units_collection): """Initializes with the 'PyMongo' Collection object for the Genomic Units collection""" self.collection = genomic_units_collection + def __find_genomic_unit_query__(self, annotation_unit: AnnotationUnit): + """ + # find_query = { + # 'gene': 'VMA21', + #} + """ + genomic_unit_type_string = annotation_unit.get_genomic_unit_type_string() + genomic_unit_name = annotation_unit.get_genomic_unit() + return {genomic_unit_type_string: genomic_unit_name} + + def __find_annotation_query__(self, annotation_unit: AnnotationUnit): + """ + find_query = { + 'gene': 'VMA21', + 'annotations.CADD': {'$exists': True }, + 'annotations.CADD.data_source': 'Ensembl', + 'annotations.CADD.version': '112' + } + """ + find_query = self.__find_genomic_unit_query__(annotation_unit) + data_set_name = annotation_unit.get_dataset_name() + dataset_attribute_base = f"annotations.{data_set_name}" + datasource_attribute = f"{dataset_attribute_base}.data_source" + version_attribute = f"{dataset_attribute_base}.version" + + find_query[dataset_attribute_base] = {'$exists': True} + find_query[datasource_attribute] = annotation_unit.get_dataset_source() + find_query[version_attribute] = annotation_unit.get_version() + return find_query + def all(self): """ Returns all genomic units that are currently stored """ return self.collection.find() - def annotation_exist(self, genomic_unit, dataset): + def annotation_exist(self, annotation_unit: AnnotationUnit): """ Returns true if the genomic_unit already has that dataset annotated """ - data_set_name = dataset['data_set'] - find_query = { - genomic_unit['type'].value: genomic_unit['unit'], - } + data_set_name = annotation_unit.get_dataset_name() + dataset_version = annotation_unit.get_version() + dataset_source = annotation_unit.get_dataset_source() - if 'transcript' in dataset: + find_query = self.__find_genomic_unit_query__(annotation_unit) + + if annotation_unit.is_transcript_dataset(): hgvs_genomic_unit = self.collection.find_one(find_query) - if not hgvs_genomic_unit['transcripts']: + if 'transcripts' not in hgvs_genomic_unit or len(hgvs_genomic_unit['transcripts']) == 0: return False for transcript in hgvs_genomic_unit['transcripts']: - dataset_in_transcript_annotation = next( - (annotation for annotation in transcript['annotations'] if data_set_name in annotation), None - ) + dataset_in_transcript_annotation = next(( + annotation for annotation in transcript['annotations'] + if transcript_unit_exist(data_set_name, dataset_source, dataset_version, annotation) + ), None) if not dataset_in_transcript_annotation: return False + return True - annotation_field_key = f"annotations.{data_set_name}" - find_query[annotation_field_key] = {'$exists': True} + find_query = self.__find_annotation_query__(annotation_unit) + return bool(self.collection.count_documents(find_query, limit=1)) - def find_genomic_unit_annotation_value(self, genomic_unit, dataset): + def find_genomic_unit_annotation_value(self, annotation_unit: AnnotationUnit): """ Returns the annotation value for a genomic unit according the the dataset""" - data_set_name = dataset - find_query = { - genomic_unit['type'].value: genomic_unit['unit'], - f"annotations.{data_set_name}": {'$exists': True}, - } - result = self.collection.find_one(find_query) + + dataset_name = annotation_unit.get_dataset_name() + + find_query = self.__find_annotation_query__(annotation_unit) + projection = {f"annotations.{dataset_name}.value.$": 1, "_id": 0} + + result = self.collection.find_one(find_query, projection) if result is None: return None - for annotation in result['annotations']: - if dataset in annotation: - for data in annotation[dataset]: - return data['value'] - - return None + return next(( + annotation[dataset_name][0].get('value') + for annotation in result['annotations'] + if dataset_name in annotation + ), None) def find_genomic_unit(self, genomic_unit): """ Returns the given genomic unit from the genomic unit collection """ @@ -80,20 +127,20 @@ def find_genomic_unit_with_transcript_id(self, genomic_unit, transcript_id): 'transcripts.transcript_id': transcript_id, }) - def update_genomic_unit_with_transcript_id(self, genomic_unit, transcript_id): + def add_transcript_to_genomic_unit(self, genomic_unit, transcript_id): """ Takes a genomic unit and transcript id and updates the document with a new transcript """ return self.collection.update_one( {genomic_unit['type'].value: genomic_unit['unit']}, {'$addToSet': {'transcripts': {'transcript_id': transcript_id, 'annotations': []}}}, ) - def update_genomic_unit_with_mongo_id(self, genomic_unit_document): + def update_genomic_unit_annotation_by_mongo_id(self, genomic_unit_document): """ Takes a genomic unit and overwrites the existing object based on the object's id """ genomic_unit_id = genomic_unit_document['_id'] - self.collection.update_one( - {'_id': ObjectId(str(genomic_unit_id))}, - {'$set': genomic_unit_document}, - ) + + return self.collection.find_one_and_update({'_id': ObjectId(str(genomic_unit_id))}, + {'$set': genomic_unit_document}, + return_document=ReturnDocument.AFTER) def annotate_genomic_unit(self, genomic_unit, genomic_annotation): """ @@ -109,13 +156,15 @@ def annotate_genomic_unit(self, genomic_unit, genomic_annotation): }] } + updated_document = None + if 'transcript_id' in genomic_annotation: genomic_unit_document = self.find_genomic_unit_with_transcript_id( genomic_unit, genomic_annotation['transcript_id'] ) if not genomic_unit_document: - self.update_genomic_unit_with_transcript_id(genomic_unit, genomic_annotation['transcript_id']) + self.add_transcript_to_genomic_unit(genomic_unit, genomic_annotation['transcript_id']) genomic_unit_document = self.find_genomic_unit_with_transcript_id( genomic_unit, genomic_annotation['transcript_id'] ) @@ -124,14 +173,14 @@ def annotate_genomic_unit(self, genomic_unit, genomic_annotation): if transcript['transcript_id'] == genomic_annotation['transcript_id']: transcript['annotations'].append(annotation_data_set) - self.update_genomic_unit_with_mongo_id(genomic_unit_document) + updated_document = self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) else: genomic_unit_document = self.find_genomic_unit(genomic_unit) genomic_unit_document['annotations'].append(annotation_data_set) - self.update_genomic_unit_with_mongo_id(genomic_unit_document) + updated_document = self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) - return + return updated_document def annotate_genomic_unit_with_file(self, genomic_unit, genomic_annotation): """ Ensures that an annotation is created for the annotation image upload and only one image is allowed """ @@ -142,8 +191,7 @@ def annotate_genomic_unit_with_file(self, genomic_unit, genomic_annotation): for annotation in genomic_unit_document['annotations']: if data_set in annotation: annotation[data_set][0]['value'].append(genomic_annotation['value']) - self.update_genomic_unit_with_mongo_id(genomic_unit_document) - return + return self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) annotation_data_set = { genomic_annotation['data_set']: [{ @@ -154,9 +202,7 @@ def annotate_genomic_unit_with_file(self, genomic_unit, genomic_annotation): } genomic_unit_document['annotations'].append(annotation_data_set) - self.update_genomic_unit_with_mongo_id(genomic_unit_document) - - return + return self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) def update_genomic_unit_file_annotation(self, genomic_unit, data_set, annotation_value, file_id_old): """ Replaces existing annotation image with new image """ @@ -171,7 +217,7 @@ def update_genomic_unit_file_annotation(self, genomic_unit, data_set, annotation annotation[data_set][0]['value'].append(annotation_value) break - self.update_genomic_unit_with_mongo_id(genomic_unit_document) + self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) return @@ -187,18 +233,26 @@ def remove_genomic_unit_file_annotation(self, genomic_unit, data_set, file_id): annotation[data_set][0]['value'].pop(i) break - self.update_genomic_unit_with_mongo_id(genomic_unit_document) - - return + return self.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) def create_genomic_unit(self, genomic_unit): """ Takes a genomic_unit and adds it to the collection if it doesn't already exist (exact match). """ + type_to_save = GenomicUnitType.string_types() & genomic_unit.keys() + + if len(type_to_save) != 1: + logger.error( + 'Failed to create new Genomic Unit "%s", contains more then one genomic_unit type', genomic_unit + ) + return + + genomic_unit_type = type_to_save.pop() + find_query = {genomic_unit_type: genomic_unit[genomic_unit_type]} - # Make sure the genomic unit doesn't already exist - if self.collection.find_one(genomic_unit): - logging.info("Genomic unit already exists, skipping creation") + if self.collection.find_one(find_query): + logger.info("Genomic unit already exists, skipping creation") + return self.collection.insert_one(genomic_unit) return diff --git a/backend/src/routers/analysis_annotation_router.py b/backend/src/routers/analysis_annotation_router.py new file mode 100644 index 00000000..05429d4d --- /dev/null +++ b/backend/src/routers/analysis_annotation_router.py @@ -0,0 +1,118 @@ +""" Analysis endpoint routes that provide an interface to interact with an Analysis' discussions """ +from fastapi import (APIRouter, Depends, HTTPException) + +from ..dependencies import database +from ..enums import GenomicUnitType + +router = APIRouter(tags=["analysis annotations"], dependencies=[Depends(database)]) + + +@router.get("/{analysis_name}/gene/{gene}") +def get_annotations_by_gene(analysis_name, gene, repositories=Depends(database)): + """Returns annotations data by calling method to find annotations by gene""" + + genomic_unit = { + 'type': GenomicUnitType.GENE, + 'unit': gene, + } + + dataset_manifest = repositories["analysis"].get_dataset_manifest(analysis_name) + genomic_unit_json = repositories["genomic_unit"].find_genomic_unit(genomic_unit) + + if genomic_unit_json is None: + raise HTTPException(status_code=404, detail=f"Gene'{gene}' annotations not found.") + + manifest = AnalysisDatasetManfiest(dataset_manifest) + annotations = manifest.retrieve_annotations(genomic_unit_json['annotations']) + + return annotations + + +@router.get("/{analysis_name}/hgvsVariant/{variant}") +def get_annotations_by_hgvs_variant(analysis_name: str, variant: str, repositories=Depends(database)): + """Returns annotations data by calling method to find annotations for variant and relevant transcripts + by HGVS Variant""" + + genomic_unit = { + 'type': GenomicUnitType.HGVS_VARIANT, + 'unit': variant, + } + + dataset_manifest = repositories["analysis"].get_dataset_manifest(analysis_name) + genomic_unit_json = repositories["genomic_unit"].find_genomic_unit(genomic_unit) + + if genomic_unit_json is None: + raise HTTPException(status_code=404, detail=f"Variant'{variant}' annotations not found.") + + manifest = AnalysisDatasetManfiest(dataset_manifest) + annotations = manifest.retrieve_annotations(genomic_unit_json['annotations']) + + transcript_annotation_list = [] + for transcript_annotation in genomic_unit_json['transcripts']: + transcript_annotations = manifest.retrieve_annotations(transcript_annotation['annotations']) + transcript_annotation_list.append(transcript_annotations) + + return {**annotations, "transcripts": transcript_annotation_list} + + +class AnalysisDatasetManfiest(): + """ + Retrieves dataset annotations based on an analysis' manifest. + + An analysis' manifest comprises of entries for each dataset in the following + example: + { + 'CADD': { + data_source: 'Ensembl', + version: '120' + } + } + """ + + def __init__(self, analysis_dataset_manifest): + """ + Initializes with a list of analysis' dataset manifest entries. + """ + self.manifest = analysis_dataset_manifest + + def retrieve_annotations(self, unit_annotations): + """ + Extracts annotations from the provided list of unit annotations and returns a dictionary + of datasets and their corresponding values. + + unit_annotations is a list of annotations for a genomic unit, where each annotation is structured as the + following example + + { + 'CADD': [{ + 'data_source': 'Ensembl', + 'version': '112', + }] + } + """ + annotations = {} + for annotation_json in unit_annotations: + for dataset in annotation_json: + if len(annotation_json[dataset]) > 0: + analysis_dataset = self.get_value_for_dataset(dataset, annotation_json[dataset]) + annotations[dataset] = analysis_dataset[ + 'value'] if analysis_dataset is not None else annotation_json[dataset][0]['value'] + return annotations + + def get_value_for_dataset(self, dataset_name: str, annotation_json_list: list): + """ + Retrieves the annotation according to the analysis' dataset manifest entry matching the dataset's name, + 'data_source', and 'version'. None is returned when there isn't an entry in the manifest. + """ + dataset_config = next((configuration for configuration in self.manifest if dataset_name in configuration), None) + + if dataset_config is None: + return dataset_config + + configuration = dataset_config[dataset_name] + + return next(( + annotation for annotation in annotation_json_list + if annotation['data_source'] == configuration['data_source'] and + annotation['version'] == configuration['version'] + ), None) diff --git a/backend/src/routers/analysis_discussion_router.py b/backend/src/routers/analysis_discussion_router.py index b7210c44..9d1b6426 100644 --- a/backend/src/routers/analysis_discussion_router.py +++ b/backend/src/routers/analysis_discussion_router.py @@ -1,9 +1,5 @@ -# pylint: disable=too-many-arguments -# Due to adding scope checks, it's adding too many arguments (7/6) to functions, so diabling this for now. -# Need to refactor later. """ Analysis endpoint routes that provide an interface to interact with an Analysis' discussions """ from datetime import datetime, timezone -import logging from uuid import uuid4 from fastapi import (APIRouter, Depends, Form, Security, HTTPException, status) @@ -13,8 +9,6 @@ from ..models.analysis import Analysis from ..security.security import get_current_user -logger = logging.getLogger(__name__) - router = APIRouter(tags=["analysis discussions"], dependencies=[Depends(database)]) @@ -42,9 +36,6 @@ def add_analysis_discussion( client_id: VerifyUser = Security(get_current_user) ): """ Adds a new analysis topic """ - logger.info("Adding the analysis '%s' from user '%s'", analysis_name, client_id) - logger.info("The message: %s", discussion_content) - found_analysis = repositories['analysis'].find_by_name(analysis_name) if not found_analysis: @@ -77,11 +68,6 @@ def update_analysis_discussion_post( client_id: VerifyUser = Security(get_current_user) ): """ Updates a discussion post's content in an analysis by the discussion post id """ - logger.info( - "Editing post '%s' by user '%s' from the analysis '%s' with new content: '%s'", discussion_post_id, client_id, - analysis_name, discussion_content - ) - found_analysis = repositories['analysis'].find_by_name(analysis_name) if not found_analysis: @@ -113,8 +99,6 @@ def delete_analysis_discussion( client_id: VerifyUser = Security(get_current_user) ): """ Deletes a discussion post in an analysis by the discussion post id """ - logger.info("Deleting post %s by user '%s' from the analysis '%s'", discussion_post_id, client_id, analysis_name) - found_analysis = repositories['analysis'].find_by_name(analysis_name) if not found_analysis: diff --git a/backend/src/routers/analysis_router.py b/backend/src/routers/analysis_router.py index 265b95d3..8485a4f0 100644 --- a/backend/src/routers/analysis_router.py +++ b/backend/src/routers/analysis_router.py @@ -1,5 +1,4 @@ """ Analysis endpoint routes that serve up information regarding anaysis cases for rosalution """ -import logging import json from typing import List, Union @@ -17,13 +16,13 @@ from ..models.user import VerifyUser from ..security.security import get_authorization, get_current_user +from . import analysis_annotation_router from . import analysis_attachment_router from . import analysis_discussion_router from . import analysis_section_router -logger = logging.getLogger(__name__) - router = APIRouter(prefix="/analysis", dependencies=[Depends(database)]) +router.include_router(analysis_annotation_router.router) router.include_router(analysis_attachment_router.router) router.include_router(analysis_discussion_router.router) router.include_router(analysis_section_router.router) @@ -67,7 +66,10 @@ async def create_file( analysis = Analysis(**new_analysis) annotation_service = AnnotationService(repositories["annotation_config"]) annotation_service.queue_annotation_tasks(analysis, annotation_task_queue) - background_tasks.add_task(AnnotationService.process_tasks, annotation_task_queue, repositories['genomic_unit']) + background_tasks.add_task( + AnnotationService.process_tasks, annotation_task_queue, analysis.name, repositories['genomic_unit'], + repositories["analysis"] + ) return new_analysis diff --git a/backend/src/routers/annotation_router.py b/backend/src/routers/annotation_router.py index df99b96d..c725f34e 100644 --- a/backend/src/routers/annotation_router.py +++ b/backend/src/routers/annotation_router.py @@ -49,67 +49,11 @@ def annotate_analysis( return {"name": f"{name} annotations queued."} -@router.get("/gene/{gene}") -def get_annotations_by_gene(gene, repositories=Depends(database)): - """Returns annotations data by calling method to find annotations by gene""" - - genomic_unit = { - 'type': GenomicUnitType.GENE, - 'unit': gene, - } - - queried_genomic_unit = repositories["genomic_unit"].find_genomic_unit(genomic_unit) - - if queried_genomic_unit is None: - raise HTTPException(status_code=404, detail="Item not found") - - annotations = {} - for annotation in queried_genomic_unit['annotations']: - for dataset in annotation: - if len(annotation[dataset]) > 0: - annotations[dataset] = annotation[dataset][0]['value'] - - return annotations - - -@router.get("/hgvsVariant/{variant}") -def get_annotations_by_hgvs_variant(variant: str, repositories=Depends(database)): - """Returns annotations data by calling method to find annotations for variant and relevant transcripts - by HGVS Variant""" - - genomic_unit = { - 'type': GenomicUnitType.HGVS_VARIANT, - 'unit': variant, - } - - queried_genomic_unit = repositories["genomic_unit"].find_genomic_unit(genomic_unit) - - if queried_genomic_unit is None: - raise HTTPException(status_code=404, detail="Item not found") - - annotations = {} - for annotation in queried_genomic_unit['annotations']: - for dataset in annotation: - if len(annotation[dataset]) > 0: - annotations[dataset] = annotation[dataset][0]['value'] - - transcript_annotation_list = [] - for transcript_annotation in queried_genomic_unit['transcripts']: - queried_transcript_annotation = {} - for annotation in transcript_annotation['annotations']: - for dataset in annotation: - if len(annotation[dataset]) > 0: - queried_transcript_annotation[dataset] = annotation[dataset][0]['value'] - transcript_annotation_list.append(queried_transcript_annotation) - - return {**annotations, "transcripts": transcript_annotation_list} - - -@router.post("/{genomic_unit}/{data_set}/attachment", response_model=List) +@router.post("/{genomic_unit}/{data_set_name}/attachment", response_model=List) def upload_annotation_section( response: Response, genomic_unit: str, - data_set: str, + data_set_name: str, genomic_unit_type: GenomicUnitType, upload_file: UploadFile = File(...), repositories=Depends(database), @@ -133,30 +77,32 @@ def upload_annotation_section( } annotation_unit = { - "data_set": data_set, + "data_set": data_set_name, "data_source": "rosalution-manual", "version": str(date.today()), "value": {"file_id": str(new_file_object_id), "created_date": str(datetime.now())}, } try: - repositories['genomic_unit'].annotate_genomic_unit_with_file(genomic_unit_json, annotation_unit) + updated_genomic_unit = repositories['genomic_unit'].annotate_genomic_unit_with_file( + genomic_unit_json, annotation_unit + ) except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception response.status_code = status.HTTP_201_CREATED - updated_annotation_value = repositories['genomic_unit'].find_genomic_unit_annotation_value( - genomic_unit_json, data_set + updated_annotation = next( + (annotation for annotation in updated_genomic_unit['annotations'] if data_set_name in annotation), None ) - return updated_annotation_value + return updated_annotation[data_set_name][0]['value'] -@router.put("/{genomic_unit}/{data_set}/attachment/{old_file_id}", response_model=List) +@router.put("/{genomic_unit}/{data_set_name}/attachment/{old_file_id}", response_model=List) def update_annotation_image( genomic_unit: str, - data_set: str, + data_set_name: str, old_file_id: str, genomic_unit_type: GenomicUnitType, upload_file: UploadFile = File(...), @@ -174,13 +120,15 @@ def update_annotation_image( try: repositories['genomic_unit'].update_genomic_unit_file_annotation( - genomic_unit_json, data_set, annotation_value, old_file_id + genomic_unit_json, data_set_name, annotation_value, old_file_id ) except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception try: - repositories["genomic_unit"].remove_genomic_unit_file_annotation(genomic_unit_json, data_set, old_file_id) + updated_genomic_unit = repositories["genomic_unit"].remove_genomic_unit_file_annotation( + genomic_unit_json, data_set_name, old_file_id + ) except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception @@ -189,17 +137,17 @@ def update_annotation_image( except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception - updated_annotation_value = repositories['genomic_unit'].find_genomic_unit_annotation_value( - genomic_unit_json, data_set + updated_annotation = next( + (annotation for annotation in updated_genomic_unit['annotations'] if data_set_name in annotation), None ) - return updated_annotation_value + return updated_annotation[data_set_name][0]['value'] -@router.delete("/{genomic_unit}/{data_set}/attachment/{file_id}", response_model=List) +@router.delete("/{genomic_unit}/{data_set_name}/attachment/{file_id}", response_model=List) def remove_annotation_image( genomic_unit: str, - data_set: str, + data_set_name: str, file_id: str, genomic_unit_type: GenomicUnitType, repositories=Depends(database), @@ -209,7 +157,9 @@ def remove_annotation_image( genomic_unit_json = {'unit': genomic_unit, 'type': genomic_unit_type} try: - repositories["genomic_unit"].remove_genomic_unit_file_annotation(genomic_unit_json, data_set, file_id) + updated_genomic_unit = repositories["genomic_unit"].remove_genomic_unit_file_annotation( + genomic_unit_json, data_set_name, file_id + ) except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception @@ -218,8 +168,8 @@ def remove_annotation_image( except Exception as exception: raise HTTPException(status_code=500, detail=str(exception)) from exception - updated_annotation_value = repositories['genomic_unit'].find_genomic_unit_annotation_value( - genomic_unit_json, data_set + updated_annotation = next( + (annotation for annotation in updated_genomic_unit['annotations'] if data_set_name in annotation), None ) - return updated_annotation_value + return updated_annotation[data_set_name][0]['value'] diff --git a/backend/src/routers/auth_router.py b/backend/src/routers/auth_router.py index 765e1d85..226535d1 100644 --- a/backend/src/routers/auth_router.py +++ b/backend/src/routers/auth_router.py @@ -22,7 +22,6 @@ dependencies=[Depends(database)], ) -# create logger logger = logging.getLogger(__name__) # URLs for interacting with UAB CAS Padlock system for BlazerID @@ -66,7 +65,7 @@ async def login( cas_user, attributes, pgtiou = cas_client.verify_ticket(ticket) if not cas_user: - logging.info("Failed Padlock ticket user verification, redirect back to login page") + logger.info("Failed Padlock ticket user verification, redirect back to login page") # Failed ticket verification, this should be an error page of some kind maybe? redirect_frontend_route_response = settings.web_base_url + settings.auth_web_failure_redirect_route diff --git a/backend/tests/fixtures/analysis-CPAM0002.json b/backend/tests/fixtures/analysis-CPAM0002.json index 19fff387..8d752bca 100644 --- a/backend/tests/fixtures/analysis-CPAM0002.json +++ b/backend/tests/fixtures/analysis-CPAM0002.json @@ -2,6 +2,85 @@ "name": "CPAM0002", "description": "Vacuolar myopathy with autophagy, X-linked vacuolar myopathy with autophagy", "nominated_by": "Dr. Person One", + "manifest": [ + { + "Polyphen Prediction": { + "data_source": "Ensembl", + "version": "112" + } + }, { + "Polyphen Score": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-manifest-00" + } + },{ + "HPO_NCBI_GENE_ID": { + "data_source": "HPO", + "version": "2024-09-06" + } + },{ + "Ensembl Gene Id": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-manifest-00" + } + },{ + "OMIM": { + "data_source": "HPO", + "version": "2024-09-06" + } + },{ + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-manifest-00" + } + },{ + "HGNC_ID": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-manifest-00" + } + }, { + "SIFT Score": + { + "data_source": "Ensembl", + "version": "112" + } + }, { + "Consequences": + { + "data_source": "Ensembl", + "version": "112" + } + }, + { + "SIFT Prediction": + { + "data_source": "Ensembl", + "version": "112" + } + }, + { + "transcript_id": + { + "data_source": "Ensembl", + "version": "112" + } + } + ], "genomic_units": [ { "gene": "VMA21", diff --git a/backend/tests/fixtures/analysis-CPAM0046.json b/backend/tests/fixtures/analysis-CPAM0046.json index 1bee9d45..a0a23122 100644 --- a/backend/tests/fixtures/analysis-CPAM0046.json +++ b/backend/tests/fixtures/analysis-CPAM0046.json @@ -2,6 +2,48 @@ "name":"CPAM0046", "description":": LMNA-related congenital muscular dystropy", "nominated_by":"Dr. Person Two", + "manifest": [ + { + "Polyphen Prediction": { + "data_source": "Ensembl", + "version": "112" + } + }, { + "Entrez Gene Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HPO_NCBI_GENE_ID": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "Ensembl Gene Id": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "ClinGen_gene_url": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "OMIM": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "ClinVar_Variantion_Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HGNC_ID": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + }], "genomic_units":[ { "gene":"LMNA", diff --git a/backend/tests/fixtures/analysis-CPAM0047.json b/backend/tests/fixtures/analysis-CPAM0047.json index 1c88fc9c..81df0bda 100644 --- a/backend/tests/fixtures/analysis-CPAM0047.json +++ b/backend/tests/fixtures/analysis-CPAM0047.json @@ -2,6 +2,48 @@ "name":"CPAM0047", "description":"Congenital variant of Rett syndrome", "nominated_by":"CMT4B3 Foundation", + "manifest": [ + { + "Polyphen Prediction": { + "data_source": "Ensembl", + "version": "112" + } + }, { + "Entrez Gene Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HPO_NCBI_GENE_ID": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "Ensembl Gene Id": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "ClinGen_gene_url": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "OMIM": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "ClinVar_Variantion_Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HGNC_ID": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + }], "genomic_units":[ { "gene":"SBF1", diff --git a/backend/tests/fixtures/analysis-CPAM0112.json b/backend/tests/fixtures/analysis-CPAM0112.json index 3738dec9..bb8d8db9 100644 --- a/backend/tests/fixtures/analysis-CPAM0112.json +++ b/backend/tests/fixtures/analysis-CPAM0112.json @@ -2,6 +2,48 @@ "name": "CPAM0112", "description": "", "nominated_by": "", + "manifest": [ + { + "Polyphen Prediction": { + "data_source": "Ensembl", + "version": "112" + } + }, { + "Entrez Gene Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HPO_NCBI_GENE_ID": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "Ensembl Gene Id": { + "data_source": "Ensembl", + "version": "112" + } + },{ + "ClinGen_gene_url": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "OMIM": { + "data_source": "Ensembl", + "version": "2024-09-06" + } + },{ + "ClinVar_Variantion_Id": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + },{ + "HGNC_ID": { + "data_source": "Ensembl", + "version": "rosalution-manifest-00" + } + }], "genomic_units": [ { "gene": "VMA21", diff --git a/backend/tests/fixtures/annotations-NM001017980_3_c_164G_T.json b/backend/tests/fixtures/annotations-NM001017980_3_c_164G_T.json index 6e74e03b..2bdf113e 100644 --- a/backend/tests/fixtures/annotations-NM001017980_3_c_164G_T.json +++ b/backend/tests/fixtures/annotations-NM001017980_3_c_164G_T.json @@ -9,7 +9,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "NM_001017980.4" } ] @@ -18,7 +18,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": 0.597 } ] @@ -27,7 +27,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "possibly_damaging" } ] @@ -36,7 +36,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": 0.02 } ] @@ -45,7 +45,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": [ "missense_variant", "splice_region_variant" @@ -57,7 +57,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "deleterious" } ] @@ -71,7 +71,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "NM_001363810.1" } ] @@ -80,7 +80,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": 0.998 } ] @@ -89,7 +89,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "probably_damaging" } ] @@ -98,7 +98,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": 0.01 } ] @@ -107,7 +107,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": [ "missense_variant", "splice_region_variant" @@ -119,7 +119,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "112", "value": "deleterious" } ] @@ -129,13 +129,13 @@ ], "annotations": [ { - "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", "version": "", "value": "581244" } ] + "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", "version": "rosalution-manifest-00", "value": "581244" } ] }, { "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/581244" } ] diff --git a/backend/tests/fixtures/annotations-VMA21.json b/backend/tests/fixtures/annotations-VMA21.json index e2d3791b..33de476d 100644 --- a/backend/tests/fixtures/annotations-VMA21.json +++ b/backend/tests/fixtures/annotations-VMA21.json @@ -3,21 +3,43 @@ "gene": "VMA21", "annotations": [ { - "Entrez Gene Id": [ { - "data_source": "HPO", - "version": "", - "value": 203547 } ] - }, - { - "HPO": [ + "Entrez Gene Id": [ { - "data_source": "HPO", - "version": "", - "value": [ - "Myopathy, X-linked, With Excessive Autophagy" - ] + "data_source": "Rosalution", + "version": "rosalution-manifest-00", + "value": 203547 } ] + }, + { + "HPO_NCBI_GENE_ID": [ { + "data_source": "HPO", + "version": "2024-09-06", + "value": "NCBIGene:203547" } ] + }, + { + "Ensembl Gene Id": [ { + "data_source": "Ensembl", + "version": "112", + "value": "NCBIGene:203547" } ] + }, + { + "HGNC_ID": [ { + "data_source": "Ensembl", + "version": "112", + "value": "NCBIGene:203547" } ] + }, + { + "ClinGen_gene_url": [ { + "data_source": "Rosalution", + "version": "112", + "value": "URL_HERE" } ] + }, + { + "OMIM": [ { + "data_source": "HPO", + "version": "2024-09-06", + "value": "URL_HERE" } ] } ] } diff --git a/backend/tests/fixtures/annotations-config.json b/backend/tests/fixtures/annotations-config.json index 5496f51e..5897205d 100644 --- a/backend/tests/fixtures/annotations-config.json +++ b/backend/tests/fixtures/annotations-config.json @@ -1,11 +1,22 @@ [ { "data_set": "Entrez Gene Id", + "data_source": "Rosalution", + "genomic_unit_type": "gene", + "annotation_source_type": "forge", + "base_string": "{HPO_NCBI_GENE_ID}", + "attribute": "{ \"Entrez Gene Id\": .\"Entrez Gene Id\"| sub( \".*:\"; \"\") }", + "dependencies": ["HPO_NCBI_GENE_ID"], + "versioning_type": "rosalution" + }, + { + "data_set": "HPO_NCBI_GENE_ID", "data_source": "HPO", "genomic_unit_type": "gene", "annotation_source_type": "http", - "url": "https://hpo.jax.org/api/hpo/search/?q={gene}&max=-1&offset=0&category=genes", - "attribute": ".genes[] | select( .geneSymbol | contains(\"{gene}\")) | { entrezGeneId: .geneId}" + "url": "https://ontology.jax.org/api/network/search/GENE?q={gene}&page=0&limit=10", + "attribute": "{ \"HPO_NCBI_GENE_ID\": .results[] | select( .name == \"{gene}\") | .id }", + "versioning_type": "date" }, { "data_set": "Ensembl Gene Id", @@ -13,7 +24,10 @@ "genomic_unit_type": "gene", "annotation_source_type": "http", "url": "http://grch37.rest.ensembl.org/lookup/symbol/homo_sapiens/{gene}?content-type=application/json", - "attribute": "{ \"Ensemble Gene Id\": .id }" + "attribute": "{ \"Ensemble Gene Id\": .id }", + "versioning_type": "rest", + "version_url": "https://grch37.rest.ensembl.org/info/data/?content-type=application/json", + "version_attribute": ".releases[]" }, { "data_set": "HGNC_ID", @@ -21,16 +35,10 @@ "genomic_unit_type": "gene", "annotation_source_type": "http", "url": "http://rest.genenames.org/fetch/symbol/{gene}", - "attribute": ".response | .docs[] | select( .symbol | contains(\"{gene}\")) | { HGNC_ID : .\"hgnc_id\"}" - }, - { - "data_set": "Gene Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{HGNC_ID}", - "attribute": "{ \"Gene Summary\": .geneSynopsis}", - "dependencies": ["HGNC_ID"] + "attribute": ".response | .docs[] | select( .symbol | contains(\"{gene}\")) | { HGNC_ID : .\"hgnc_id\"}", + "versioning_type": "rest", + "version_url": "https://grch37.rest.ensembl.org/info/data/?content-type=application/json", + "version_attribute": ".releases[]" }, { "data_set": "ClinGen_gene_url", @@ -39,392 +47,50 @@ "annotation_source_type": "forge", "base_string": "https://search.clinicalgenome.org/kb/genes/{HGNC_ID}", "attribute": "{ \"ClinGen_gene_url\": .ClinGen_gene_url }", - "dependencies": ["HGNC_ID"] - }, - { - "data_set": "ClinVar_variant_url", - "data_source": "Rosalution", - "genomic_unit_type": "hgvs_variant", - "annotation_source_type": "forge", - "base_string": "https://www.ncbi.nlm.nih.gov/clinvar/variation/{ClinVar_Variantion_Id}", - "attribute": "{ \"ClinVar_variant_url\": .ClinVar_variant_url }", - "dependencies": ["ClinVar_Variantion_Id"] - }, - { - "data_set": "ClinVar_Variantion_Id", - "data_source": "Rosalution", - "genomic_unit_type": "hgvs_variant", - "annotation_source_type": "http", - "attribute": ".[] | select(.colocated_variants != null) | .colocated_variants[] | select(.var_synonyms != null) | .var_synonyms | select( .ClinVar != null ) | select(.ClinVar != []) | .ClinVar[] | select(contains(\"VCV\")) | sub(\"VCV0+\"; \"\") | {\"ClinVar_Variantion_Id\": . } ", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;clinvar=1;" - }, - { - "data_set": "NCBI_gene_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term={Entrez Gene Id}", - "attribute": "{ \"NCBI_gene_url\": .NCBI_gene_url }", - "dependencies": ["Entrez Gene Id"] - }, - { - "data_set": "gnomAD_gene_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://gnomad.broadinstitute.org/gene/{Ensembl Gene Id}?dataset=gnomad_r2_1", - "attribute": "{ \"gnomAD_gene_url\": .gnomAD_gene_url }", - "dependencies": ["Ensembl Gene Id"] + "dependencies": ["HGNC_ID"], + "versioning_type": "rosalution" }, { "data_set": "OMIM", "data_source": "HPO", "genomic_unit_type": "gene", "annotation_source_type": "http", - "url": "https://hpo.jax.org/api/hpo/gene/{Entrez Gene Id}", - "attribute": "{ \"diseaseAssoc\": [.diseaseAssoc[].diseaseName]}", - "dependencies": ["Entrez Gene Id"] + "url": "https://ontology.jax.org/api/network/annotation/{HPO_NCBI_GENE_ID}", + "attribute": "{ \"diseaseAssoc\": [.diseases[] | select( .id | contains(\"OMIM\") ) | .name ]}", + "dependencies": ["HPO_NCBI_GENE_ID"], + "versioning_type": "date" }, { - "data_set": "OMIM_gene_search_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search={gene}", - "attribute": "{ \"OMIM_gene_search_url\": .OMIM_gene_search_url }" - }, - { - "data_set": "HPO", - "data_source": "HPO", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://hpo.jax.org/api/hpo/gene/{Entrez Gene Id}", - "attribute": "{ \"termAssoc\": [.termAssoc[] | .ontologyId + \": \" + .name ]}", - "dependencies": ["Entrez Gene Id"] - }, - { - "data_set": "HPO_gene_search_url", + "data_set": "ClinVar_Variantion_Id", "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://hpo.jax.org/app/browse/search?q={gene}&navFilter=all", - "attribute": "{ \"HPO_gene_search_url\": .HPO_gene_search_url }" - }, - { - "data_set": "Rat Gene Identifier", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/search_autocomplete?q={gene}", - "attribute": ".results[] | { \"name_key\": .name_key, \"name\": .name, \"primaryKey\": .primaryKey, \"searchKey\": \"{gene} (Rno)\" } | . + { \"searchKey\": .searchKey | ascii_downcase, \"name_key\": .name_key | ascii_downcase } | select( .name_key == .searchKey) | { \"Rat Gene Identifier\": .primaryKey }" - }, - { - "data_set": "Rat_Alliance_Genome_Automated_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Rat Gene Identifier}", - "attribute": "{ \"Rat_Alliance_Genome_Automated_Summary\": .automatedGeneSynopsis }", - "dependencies": ["Rat Gene Identifier"] - }, - { - "data_set": "Rat_Alliance_Genome_RGD_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Rat Gene Identifier}", - "attribute": "{ \"Rat_Alliance_Genome_RGD_Summary\": .geneSynopsis}", - "dependencies": ["Rat Gene Identifier"] - }, - { - "data_set": "Rat_Alliance_Genome_Models", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Rat Gene Identifier}/models?limit=100", - "attribute": "{ \"Rat_Alliance_Genome_Models\": [.results[]] }", - "dependencies": ["Rat Gene Identifier"] - }, - { - "data_set": "Mouse Gene Identifier", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/search_autocomplete?q={gene}", - "attribute": ".results[] | { \"name_key\": .name_key, \"name\": .name, \"primaryKey\": .primaryKey, \"searchKey\": \"{gene} (Mmu)\" } | . + { \"searchKey\": .searchKey | ascii_downcase, \"name_key\": .name_key | ascii_downcase } | select( .name_key == .searchKey) | { \"Mouse Gene Identifier\": .primaryKey }" - }, - { - "data_set": "Mouse_Alliance_Genome_Automated_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Mouse Gene Identifier}", - "attribute": "{ \"Mouse_Alliance_Genome_Automated_Summary\": .automatedGeneSynopsis }", - "dependencies": ["Mouse Gene Identifier"] - }, - { - "data_set": "Mouse_Alliance_Genome_MGI_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Mouse Gene Identifier}", - "attribute": "{ \"Mouse_Alliance_Genome_MGI_Summary\": .geneSynopsis }", - "dependencies": ["Mouse Gene Identifier"] - }, - { - "data_set": "Mouse_Alliance_Genome_Models", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Mouse Gene Identifier}/models?limit=100", - "attribute": "{ \"Mouse_Alliance_Genome_Models\": [.results[]] }", - "dependencies": ["Mouse Gene Identifier"] - }, - { - "data_set": "Zebrafish Gene Identifier", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/search_autocomplete?q={gene}", - "attribute": ".results[] | { \"name_key\": .name_key, \"name\": .name, \"primaryKey\": .primaryKey, \"searchKey\": \"{gene} (Dre)\" } | . + { \"searchKey\": .searchKey | ascii_downcase, \"name_key\": .name_key | ascii_downcase } | select( .name_key == .searchKey) | { \"Zebrafish Gene Identifier\": .primaryKey }" - }, - { - "data_set": "Zebrafish_Alliance_Genome_Automated_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Zebrafish Gene Identifier}", - "attribute": "{ \"Zebrafish_Alliance_Genome_Automated_Summary\": .automatedGeneSynopsis }", - "dependencies": ["Zebrafish Gene Identifier"] - }, - { - "data_set": "Zebrafish_Alliance_Genome_ZFIN_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Zebrafish Gene Identifier}", - "attribute": "{ \"Zebrafish_Alliance_Genome_ZFIN_Summary\": .geneSynopsis }", - "dependencies": ["Zebrafish Gene Identifier"] - }, - { - "data_set": "Zebrafish_Alliance_Genome_Models", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{Zebrafish Gene Identifier}/models?limit=100", - "attribute": "{ \"Zebrafish_Alliance_Genome_Models\": [.results[]] }", - "dependencies": ["Zebrafish Gene Identifier"] - }, - { - "data_set": "C-Elegens Gene Identifier", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/search_autocomplete?q={gene}", - "attribute": ".results[] | { \"name_key\": .name_key, \"name\": .name, \"primaryKey\": .primaryKey, \"searchKey\": \"{gene} (Cel)\" } | . + { \"searchKey\": .searchKey | ascii_downcase, \"name_key\": .name_key | ascii_downcase } | select( .name_key == .searchKey) | { \"C-Elegens Gene Identifier\": .primaryKey }" - }, - { - "data_set": "C-Elegens_Alliance_Genome_Automated_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{C-Elegens Gene Identifier}", - "attribute": "{ \"C-Elegens_Alliance_Genome_Automated_Summary\": .automatedGeneSynopsis }", - "dependencies": ["C-Elegens Gene Identifier"] - }, - { - "data_set": "C-Elegens_Alliance_Genome_WB_Summary", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", - "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{C-Elegens Gene Identifier}", - "attribute": "{ \"C-Elegens_Alliance_Genome_WB_Summary\": .geneSynopsis }", - "dependencies": ["C-Elegens Gene Identifier"] - }, - { - "data_set": "C-Elegens_Alliance_Genome_Models", - "data_source": "Alliance Genome", - "genomic_unit_type": "gene", + "genomic_unit_type": "hgvs_variant", "annotation_source_type": "http", - "url": "https://www.alliancegenome.org/api/gene/{C-Elegens Gene Identifier}/models?limit=100", - "attribute": "{ \"C-Elegens_Alliance_Genome_Models\": [.results[]] }", - "dependencies": ["C-Elegens Gene Identifier"] + "attribute": ".[] | select(.colocated_variants != null) | .colocated_variants[] | select(.var_synonyms != null) | .var_synonyms | select( .ClinVar != null ) | select(.ClinVar != []) | .ClinVar[] | select(contains(\"VCV\")) | sub(\"VCV0+\"; \"\") | {\"ClinVar_Variantion_Id\": . } ", + "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;clinvar=1;", + "versioning_type": "rosalution" }, { - "data_set": "transcript_id", + "data_set": "Polyphen Prediction", "data_source": "Ensembl", "genomic_unit_type": "hgvs_variant", "transcript": true, "annotation_source_type": "http", "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { transcript_id: .transcript_id }" - }, - { - "data_set": "Polyphen Prediction", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "transcript": true, - "annotation_source_type": "http", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { polyphen_prediction: .polyphen_prediction, transcript_id: .transcript_id }" - }, - { - "data_set": "Polyphen Score", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "transcript": true, - "annotation_source_type": "http", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { polyphen_score: .polyphen_score, transcript_id: .transcript_id }" - }, - { - "data_set": "SIFT Prediction", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "transcript": true, - "annotation_source_type": "http", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { sift_prediction: .sift_prediction, transcript_id: .transcript_id }" - }, - { - "data_set": "SIFT Score", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "transcript": true, - "annotation_source_type": "http", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { sift_score: .sift_score, transcript_id: .transcript_id }" - }, - { - "data_set": "Consequences", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "transcript": true, - "annotation_source_type": "http", - "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { consequence_terms: .consequence_terms, transcript_id: .transcript_id }" - }, - { - "data_set": "CADD", - "data_source": "Ensembl", - "genomic_unit_type": "hgvs_variant", - "annotation_source_type": "http", - "url": "https://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;CADD=1;refseq=1;", - "attribute": ".[].transcript_consequences[] | select( .transcript_id | contains(\"{transcript}\") ) | { CADD: .cadd_phred }", - "dependencies": ["transcript"] + "attribute": ".[].transcript_consequences[] | { polyphen_prediction: .polyphen_prediction, transcript_id: .transcript_id }", + "versioning_type": "rest", + "version_url": "https://grch37.rest.ensembl.org/info/data/?content-type=application/json", + "version_attribute": ".releases[]" }, { - "data_set": "Impact", + "data_set": "transcript_id", "data_source": "Ensembl", "genomic_unit_type": "hgvs_variant", "transcript": true, "annotation_source_type": "http", "url": "http://grch37.rest.ensembl.org/vep/human/hgvs/{hgvs_variant}?content-type=application/json;refseq=1;", - "attribute": ".[].transcript_consequences[] | { impact: .impact, transcript_id: .transcript_id }" - }, - { - "data_set": "Human_Alliance_Genome_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.alliancegenome.org/gene/{HGNC_ID}", - "attribute": "{ \"Human_Alliance_Genome_url\": .Human_Alliance_Genome_url }", - "dependencies": ["HGNC_ID"] - }, - { - "data_set": "Rat_Alliance_Genome_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.alliancegenome.org/gene/{Rat Gene Identifier}", - "attribute": "{ \"Rat_Alliance_Genome_url\": .Rat_Alliance_Genome_url }", - "dependencies": ["Rat Gene Identifier"] - }, - { - "data_set": "Rat_Rat_Genome_Database_url", - "data_source": "Alliance genome", - "annotation_source_type": "http", - "genomic_unit_type": "gene", - "url": "https://www.alliancegenome.org/api/gene/{Rat Gene Identifier}", - "attribute": "{ \"Rat_Rat_Genome_Database_url\": .modCrossRefCompleteUrl }", - "dependencies": ["Rat Gene Identifier"] - }, - { - "data_set": "Mouse_Alliance_Genome_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.alliancegenome.org/gene/{Mouse Gene Identifier}", - "attribute": "{ \"Mouse_Alliance_Genome_url\": .Mouse_Alliance_Genome_url }", - "dependencies": ["Mouse Gene Identifier"] - }, - { - "data_set": "Mouse_Mouse_Genome_Database_url", - "data_source": "Alliance genome", - "annotation_source_type": "http", - "genomic_unit_type": "gene", - "url": "https://www.alliancegenome.org/api/gene/{Mouse Gene Identifier}", - "attribute": "{ \"Mouse_Mouse_Genome_Database_url\": .modCrossRefCompleteUrl }", - "dependencies": ["Mouse Gene Identifier"] - }, - { - "data_set": "Zebrafish_Alliance_Genome_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.alliancegenome.org/gene/{Zebrafish Gene Identifier}", - "attribute": "{ \"Zebrafish_Alliance_Genome_url\": .Zebrafish_Alliance_Genome_url }", - "dependencies": ["Zebrafish Gene Identifier"] - }, - { - "data_set": "Zebrafish_Zebrafish_Information_Network_url", - "data_source": "Alliance genome", - "annotation_source_type": "http", - "genomic_unit_type": "gene", - "url": "https://www.alliancegenome.org/api/gene/{Zebrafish Gene Identifier}", - "attribute": "{ \"Zebrafish_Zebrafish_Information_Network_url\": .modCrossRefCompleteUrl }", - "dependencies": ["Zebrafish Gene Identifier"] - }, - { - "data_set": "C-Elegens_Alliance_Genome_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.alliancegenome.org/gene/{C-Elegens Gene Identifier}", - "attribute": "{ \"C-Elegens_Alliance_Genome_url\": .C-Elegens_Alliance_Genome_url }", - "dependencies": ["C-Elegens Gene Identifier"] - }, - { - "data_set": "C-Elegens_Worm_Base_url", - "data_source": "Alliance genome", - "annotation_source_type": "http", - "genomic_unit_type": "gene", - "url": "https://www.alliancegenome.org/api/gene/{C-Elegens Gene Identifier}", - "attribute": "{ \"C-Elegens_Worm_Base_url\": .modCrossRefCompleteUrl }", - "dependencies": ["C-Elegens Gene Identifier"] - }, - { - "data_set": "GTEx_Human_Gene_Expression_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://gtexportal.org/home/gene/{gene}", - "attribute": "{ \"GTEx_Human_Gene_Expression_url\": .GTEx_Human_Gene_Expression_url }" - }, - { - "data_set": "Human_Protein_Atlas_Protein_Gene_Search_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://www.proteinatlas.org/search/{gene}", - "attribute": "{ \"Human_Protein_Atlas_Protein_Gene_Search_url\": .Human_Protein_Atlas_Protein_Gene_Search_url }" - }, - { - "data_set": "Pharos_Target_url", - "data_source": "Rosalution", - "genomic_unit_type": "gene", - "annotation_source_type": "forge", - "base_string": "https://pharos.nih.gov/targets/{gene}", - "attribute": "{ \"Pharos_Target_url\": .Pharos_Target_url }" - } + "attribute": ".[].transcript_consequences[] | { transcript_id: .transcript_id }", + "versioning_type": "rest", + "version_url": "https://grch37.rest.ensembl.org/info/data/?content-type=application/json", + "version_attribute": ".releases[]" + } ] \ No newline at end of file diff --git a/backend/tests/integration/test_annotation_routers.py b/backend/tests/integration/test_analysis_annotation_routers.py similarity index 60% rename from backend/tests/integration/test_annotation_routers.py rename to backend/tests/integration/test_analysis_annotation_routers.py index 8fae82ed..4b8cc30d 100644 --- a/backend/tests/integration/test_annotation_routers.py +++ b/backend/tests/integration/test_analysis_annotation_routers.py @@ -1,29 +1,37 @@ """Routes dedicated for annotation within the system""" -def test_get_annotations_by_gene(client, mock_access_token, mock_repositories, gene_vma21_annotations_json): +def test_get_annotations_by_gene_in_analysis( + client, mock_access_token, mock_repositories, gene_vma21_annotations_json, cpam0002_analysis_json +): """Testing that the annotations by gene endpoint returns the annotations correctly""" + mock_repositories['analysis'].collection.find_one.return_value = cpam0002_analysis_json mock_repositories['genomic_unit'].collection.find_one.return_value = gene_vma21_annotations_json response = client.get( - "annotation/gene/VMA21", + "/analysis/CPAM0002/gene/VMA21", headers={"Authorization": "Bearer " + mock_access_token}, ) - assert len(response.json()) == 2 + assert response.status_code == 200 + assert len(response.json()) == 6 -def test_get_annotations_by_hgvs_variant( - client, mock_access_token, mock_repositories, variant_nm001017980_3_c_164g_t_annotations_json +def test_get_annotations_by_hgvs_varian_in_analysis( + client, mock_access_token, mock_repositories, variant_nm001017980_3_c_164g_t_annotations_json, + cpam0002_analysis_json ): """Testing that the annotations by HGVS variant endpoint returns the annotations correctly""" + + mock_repositories['analysis'].collection.find_one.return_value = cpam0002_analysis_json mock_repositories['genomic_unit'].collection.find_one.return_value = variant_nm001017980_3_c_164g_t_annotations_json response = client.get( - "annotation/hgvsVariant/NM_001017980.3:c.164G>T", + "/analysis/CPAM0002/hgvsVariant/NM_001017980.3:c.164G>T", headers={"Authorization": "Bearer " + mock_access_token}, ) response_annotations = response.json() + assert response.status_code == 200 assert len(response_annotations['transcripts']) == 2 assert response_annotations['ClinVar_Variantion_Id'] == "581244" assert response_annotations['ClinVar_variant_url'] == "https://www.ncbi.nlm.nih.gov/clinvar/variation/581244" diff --git a/backend/tests/integration/test_analysis_routers.py b/backend/tests/integration/test_analysis_routers.py index 846bdb43..96fd8a8f 100644 --- a/backend/tests/integration/test_analysis_routers.py +++ b/backend/tests/integration/test_analysis_routers.py @@ -67,10 +67,11 @@ def test_import_analysis_with_phenotips_json( # pylint: disable=too-many-argumen phenotips_file.close() - assert mock_annotation_queue.put.call_count == 49 + assert mock_annotation_queue.put.call_count == 9 mock_background_add_task.assert_called_once_with( - AnnotationService.process_tasks, mock_annotation_queue, mock_repositories['genomic_unit'] + AnnotationService.process_tasks, mock_annotation_queue, "CPAM0112", mock_repositories['genomic_unit'], + mock_repositories['analysis'] ) assert response.status_code == 200 diff --git a/backend/tests/unit/conftest.py b/backend/tests/unit/conftest.py index 0ed05b14..5c17eb79 100644 --- a/backend/tests/unit/conftest.py +++ b/backend/tests/unit/conftest.py @@ -3,6 +3,7 @@ from unittest.mock import Mock import pytest +from src.core.annotation_unit import AnnotationUnit from src.config import Settings from src.core.annotation import AnnotationService from src.models.analysis import Analysis @@ -99,15 +100,97 @@ def fixture_genomic_unit_collection(genomic_unit_collection_json): return GenomicUnitCollection(mock_collection) +@pytest.fixture(name="annotation_config_collection_json") +def fixture_annotation_config_collection_json(): + """Returns the json for the annotation configuration""" + + return read_test_fixture("annotations-config.json") + + @pytest.fixture(name="annotation_config_collection") -def fixture_annotation_config_collection(): +def fixture_annotation_config_collection(annotation_config_collection_json): """Returns the annotation collection for the datasets to be mocked""" mock_collection = mock_mongo_collection() - mock_collection.find = Mock(return_value=read_test_fixture("annotations-config.json")) + mock_collection.find = Mock(return_value=annotation_config_collection_json) mock_collection.find_one = Mock(return_value=read_test_fixture("annotations-config.json")) return AnnotationConfigCollection(mock_collection) +@pytest.fixture(name='get_dataset_manifest_config') +def get_dataset_manifest_config(analysis_collection_json): + """Fixture factory method to create an dataset from the genomic unit information and name of the datset.""" + + def _create_dataset_manifest(analysis_name, dataset_name): + """Method to create the dataset manifest config""" + + analysis_json = next((item for item in analysis_collection_json if item['name'] == analysis_name), None) + analysis = Analysis(**analysis_json) + dataset_manifest = next((item for item in analysis.manifest if dataset_name in item), None) + + dataset_config = { + "data_set": dataset_name, "data_source": dataset_manifest[dataset_name]['data_source'], + "version": dataset_manifest[dataset_name]['version'] + } + + return dataset_config + + return _create_dataset_manifest + + +@pytest.fixture(name="genomic_units_with_types") +def fixture_genomic_units_with_types(analysis_collection_json): + """Returns the multiple analyses being mocked as an array""" + + def get_units(analysis_json): + analysis = Analysis(**analysis_json) + return analysis.units_to_annotate() + + genomic_units_lists = list(map(get_units, analysis_collection_json)) + flattened_list = [unit for analysis_units in genomic_units_lists for unit in analysis_units] + types = {unit['unit']: unit['type'] for unit in flattened_list} + return types + + +@pytest.fixture(name='get_annotation_unit') +def get_standard_annotation_unit(annotation_config_collection_json, genomic_units_with_types): + """ + Fixture factory method to create an AnnotationUnit from the available genomic units in the analyses from + 'analysis_collection_json' fixture. It searches the 'annotation_config_collection_json' to pair with + the genomic unit to create an AnnotationUnit. + + { + 'VMA21': GenomicUnitType.GENE, + 'NM_001017980.3:c.164G>T': GenomicUnitType.HGVS_VARIANT + } + """ + + def _create_annotation_unit(genomic_unit_name, dataset_name): + """Method to create the Annotation Unit""" + genomic_unit_type = genomic_units_with_types[genomic_unit_name] + genomic_unit = {'unit': genomic_unit_name, 'type': genomic_unit_type} + dataset_config = next((unit for unit in annotation_config_collection_json if unit['data_set'] == dataset_name), + None) + + return AnnotationUnit(genomic_unit, dataset_config) + + return _create_annotation_unit + + +@pytest.fixture(name='get_annotation_json') +def get_annotation_json(genomic_unit_collection_json): + """Fixture factory method to create an return the JSON from the genomic unit """ + + def _get_annotation_json(genomic_unit_name, genomic_unit_type): + """ Provides a genomic unit from the genomic unit collection, otherwise returns false""" + + unit_type = genomic_unit_type.value + return next(( + unit for unit in genomic_unit_collection_json if unit_type in unit and unit[unit_type] == genomic_unit_name + ), None) + + return _get_annotation_json + + @pytest.fixture(name="cpam0046_annotation_queue") def fixture_cpam0046_annotation_queue(annotation_config_collection, cpam0046_analysis): """ diff --git a/backend/tests/unit/core/test_annotate.py b/backend/tests/unit/core/test_annotate.py index f714d3b3..d3d65246 100644 --- a/backend/tests/unit/core/test_annotate.py +++ b/backend/tests/unit/core/test_annotate.py @@ -4,6 +4,8 @@ from src.core.annotation import AnnotationService from src.enums import GenomicUnitType +from src.repository.analysis_collection import AnalysisCollection +from src.repository.genomic_unit_collection import GenomicUnitCollection def test_queuing_annotations_for_genomic_units(cpam0046_analysis, annotation_config_collection): @@ -11,83 +13,60 @@ def test_queuing_annotations_for_genomic_units(cpam0046_analysis, annotation_con annotation_service = AnnotationService(annotation_config_collection) mock_queue = Mock() annotation_service.queue_annotation_tasks(cpam0046_analysis, mock_queue) - assert mock_queue.put.call_count == 49 - actual_first_annotation_unit_queued = mock_queue.put.call_args[0][0] - expected_genomic_unit_queued = "NM_170707.3:c.745C>T" - assert actual_first_annotation_unit_queued.genomic_unit['unit'] == expected_genomic_unit_queued - - -# The patched method sare done provided in reverse order within the test param arguments. Was accidently getting -# logging mock results instead of non task type annotations. Was causing major failures in verifying values -@patch("src.core.annotation_task.AnnotationTaskInterface.extract") -@patch("src.core.annotation_task.ForgeAnnotationTask.annotate") -@patch("src.core.annotation_task.HttpAnnotationTask.annotate") -@patch("src.core.annotation_task.NoneAnnotationTask.annotate") -def test_processing_cpam0046_annotation_tasks( - none_task_annotate, http_task_annotate, forge_task_annotate, annotate_extract_mock, cpam0046_annotation_queue -): - """Verifies that each item on the annotation queue is read and executed""" - flag = {'dependency_flag_passed': False} - - def dependency_mock_side_effect(*args, **kwargs): # pylint: disable=unused-argument - query, value = args # pylint: disable=unused-variable - if value != 'HGNC_ID': - return 'kfldjsfds' - - if flag['dependency_flag_passed']: - return 'klfjdsfdsfa' + assert mock_queue.put.call_count == 9 - flag['dependency_flag_passed'] = True - return None + actual_queued_genomic_units = [put_call.args[0].genomic_unit['unit'] for put_call in mock_queue.put.call_args_list] - mock_genomic_unit_collection = Mock() - mock_genomic_unit_collection.find_genomic_unit_annotation_value = Mock() - mock_genomic_unit_collection.find_genomic_unit_annotation_value.side_effect = dependency_mock_side_effect - mock_genomic_unit_collection.annotation_exist.return_value = False + assert "NM_170707.3:c.745C>T" in actual_queued_genomic_units - assert not cpam0046_annotation_queue.empty() - AnnotationService.process_tasks(cpam0046_annotation_queue, mock_genomic_unit_collection) - assert cpam0046_annotation_queue.empty() - assert http_task_annotate.call_count == 35 - assert none_task_annotate.call_count == 0 - assert forge_task_annotate.call_count == 14 +def test_processing_cpam0046_annotation_tasks(process_cpam0046_tasks): + """Verifies that each item on the annotation queue is read and executed""" + assert process_cpam0046_tasks['http'].call_count == 7 + assert process_cpam0046_tasks['none'].call_count == 0 + assert process_cpam0046_tasks['forge'].call_count == 2 - assert annotate_extract_mock.call_count == 49 + assert process_cpam0046_tasks['extract'].call_count == 9 -@patch( - "src.core.annotation_task.AnnotationTaskInterface.extract", - return_value=[{ - 'data_set': 'mock_datset', - 'data_source': 'mock_source', - 'version': '0.0', - 'value': '9000', - }] -) -@patch("src.core.annotation_task.ForgeAnnotationTask.annotate") -@patch("src.core.annotation_task.HttpAnnotationTask.annotate") -@patch("src.core.annotation_task.NoneAnnotationTask.annotate") -def test_processing_cpam0002_annotations_tasks( - none_task_annotate, http_task_annotate, forge_task_annotate, annotate_extract_mock, cpam0002_annotation_queue -): +def test_processing_cpam0002_annotations_tasks(process_cpam0002_tasks): """ Verifies that the annotation collection is being sent the proper amount of extracted annotations for CPAM analysis 0002 """ - mock_genomic_unit_collection = Mock() - mock_genomic_unit_collection.annotation_exist.return_value = False + assert process_cpam0002_tasks['http'].call_count == 7 + assert process_cpam0002_tasks['none'].call_count == 0 + assert process_cpam0002_tasks['forge'].call_count == 2 + + assert process_cpam0002_tasks['extract'].call_count == 9 + + process_cpam0002_tasks['genomic_unit_collection'].annotate_genomic_unit.assert_called() + + +def test_processing_cpam0002_annotation_tasks_for_datasets_with_dependencies(process_cpam0002_tasks): + """ + Tests that the dependencies will put the annotation task back onto the processing queue when its missing a + depedency + """ + + assert process_cpam0002_tasks['genomic_unit_collection'].find_genomic_unit_annotation_value.call_count == 4 + + +def test_processing_cpam0002_datasets_with_dependencies(cpam0002_annotation_queue, process_cpam0002_tasks): + """ Confirms that the datasets with dependencies configured to annotate for analysis CPAM0002 are processed """ + assert cpam0002_annotation_queue.empty() - AnnotationService.process_tasks(cpam0002_annotation_queue, mock_genomic_unit_collection) + assert process_cpam0002_tasks['http'].call_count == 7 + assert process_cpam0002_tasks['none'].call_count == 0 + assert process_cpam0002_tasks['forge'].call_count == 2 - assert http_task_annotate.call_count == 35 - assert forge_task_annotate.call_count == 14 - assert none_task_annotate.call_count == 0 + assert process_cpam0002_tasks['extract'].call_count == 9 - assert annotate_extract_mock.call_count == 49 - mock_genomic_unit_collection.annotate_genomic_unit.assert_called() +def test_processing_cpam0002_version_annotation_tasks(process_cpam0002_tasks): + """ Asserts that each dataset configured to annotate for analysis CPAM0002 calculates the datasets version. """ + assert process_cpam0002_tasks['version'].call_count == 9 @pytest.fixture(name="cpam0046_hgvs_variant_json") @@ -100,3 +79,105 @@ def fixture_cpam0046_hgvs_variant(cpam0046_analysis): unit = genomic_unit return unit + + +@pytest.fixture(name="process_cpam0002_tasks") +def fixture_extract_and_annotate_cpam0002(cpam0002_annotation_queue, get_dataset_manifest_config): + """ + Emulates processing the annotations for the configured genomic unit's datasets within the CPAM0002 analysis. + """ + mock_extract_result = [{ + 'data_set': 'mock_datset', + 'data_source': 'mock_source', + 'version': '0.0', + 'value': '9000', + }] + + with ( + patch("src.core.annotation_task.AnnotationTaskInterface.extract", + return_value=mock_extract_result) as extract_task_annotate, + patch("src.core.annotation_task.AnnotationTaskInterface.extract_version", return_value='fake-version') as + extract_task_version_annotate, patch("src.core.annotation_task.VersionAnnotationTask.annotate") as + version_task_annotate, patch("src.core.annotation_task.ForgeAnnotationTask.annotate") as forge_task_annotate, + patch("src.core.annotation_task.HttpAnnotationTask.annotate") as http_task_annotate, + patch("src.core.annotation_task.NoneAnnotationTask.annotate") as none_task_annotate + ): + skip_depends = SkipDepedencies() + mock_genomic_unit_collection = Mock(spec=GenomicUnitCollection) + mock_analysis_collection = Mock(spec=AnalysisCollection) + mock_genomic_unit_collection.find_genomic_unit_annotation_value.side_effect = ( + skip_depends.skip_hgncid_get_value_first_time_mock + ) + mock_analysis_collection.get_manifest_dataset_config.return_value = get_dataset_manifest_config( + "CPAM0002", 'HGNC_ID' + ) + mock_genomic_unit_collection.annotation_exist.return_value = False + + AnnotationService.process_tasks( + cpam0002_annotation_queue, "CPAM0002", mock_genomic_unit_collection, mock_analysis_collection + ) + yield { + 'extract': extract_task_annotate, 'version': version_task_annotate, 'http': http_task_annotate, + 'none': none_task_annotate, 'forge': forge_task_annotate, + 'genomic_unit_collection': mock_genomic_unit_collection, 'extract_version': extract_task_version_annotate + } + + +# Disabling PyLint due to this being a simple Mock adapter as a simple test harness for emulating mising a dependency +class SkipDepedencies: # pylint: disable=too-few-public-methods + """ A skip annotation dependencies helper class that allows tester to dictate which datasets to skip once to + emulate a depedency not existing the first time when preparing an Annotation Task for annotation.""" + + def __init__(self, dependencies_to_skip=None): + """ Dictating the list of of dataset names to emulate that dataset annotation not existing.""" + self.skip_tracker = {} + self.to_skip = dependencies_to_skip if dependencies_to_skip else ["HGNC_ID"] + + def skip_hgncid_get_value_first_time_mock(self, *args): + """ Mock method that tracks if the provided dependencies are one of the ones indicated to skip""" + annotation_unit = args[0] + name = annotation_unit.get_dataset_name() + genomic_unit = annotation_unit.get_genomic_unit() + should_skip = (name in self.to_skip and name not in self.skip_tracker) + return self.skip_tracker.setdefault(name, None) if should_skip else f"{genomic_unit}-{name}-value" + + +@pytest.fixture(name="process_cpam0046_tasks") +def fixture_extract_and_annotate_cpam0046(cpam0046_annotation_queue, get_dataset_manifest_config): + """ + Emulates processing the annotations for the configured genomic unit's datasets within the CPAM0046 analysis. + """ + mock_extract_result = [{ + 'data_set': 'mock_datset', + 'data_source': 'mock_source', + 'version': '0.0', + 'value': '9000', + }] + + with ( + patch("src.core.annotation_task.AnnotationTaskInterface.extract", + return_value=mock_extract_result) as extract_task_annotate, + patch("src.core.annotation_task.AnnotationTaskInterface.extract_version", return_value='fake-version') as + extract_task_version_annotate, patch("src.core.annotation_task.VersionAnnotationTask.annotate") as + version_task_annotate, patch("src.core.annotation_task.ForgeAnnotationTask.annotate") as forge_task_annotate, + patch("src.core.annotation_task.HttpAnnotationTask.annotate") as http_task_annotate, + patch("src.core.annotation_task.NoneAnnotationTask.annotate") as none_task_annotate + ): + skip_depends = SkipDepedencies() + mock_genomic_unit_collection = Mock(spec=GenomicUnitCollection) + mock_analysis_collection = Mock(spec=AnalysisCollection) + mock_genomic_unit_collection.find_genomic_unit_annotation_value.side_effect = ( + skip_depends.skip_hgncid_get_value_first_time_mock + ) + dependency_dataset = get_dataset_manifest_config("CPAM0046", 'HGNC_ID') + mock_analysis_collection.get_manifest_dataset_config.return_value = dependency_dataset + mock_genomic_unit_collection.annotation_exist.return_value = False + + AnnotationService.process_tasks( + cpam0046_annotation_queue, "CPAM0046", mock_genomic_unit_collection, mock_analysis_collection + ) + yield { + 'extract': extract_task_annotate, 'version': version_task_annotate, 'http': http_task_annotate, + 'none': none_task_annotate, 'forge': forge_task_annotate, + 'genomic_unit_collection': mock_genomic_unit_collection, 'extract_version': extract_task_version_annotate + } diff --git a/backend/tests/unit/core/test_annotation_task.py b/backend/tests/unit/core/test_annotation_task.py index 9739d6ae..ccb8362b 100644 --- a/backend/tests/unit/core/test_annotation_task.py +++ b/backend/tests/unit/core/test_annotation_task.py @@ -1,21 +1,23 @@ """Tests Annotation Tasks and the creation of them""" +from datetime import date +from unittest.mock import Mock, patch import pytest +import requests -from src.core.annotation_task import AnnotationTaskFactory, ForgeAnnotationTask, HttpAnnotationTask +from src.core.annotation_task import AnnotationTaskFactory, ForgeAnnotationTask, \ + HttpAnnotationTask, VersionAnnotationTask from src.enums import GenomicUnitType from src.core.annotation_unit import AnnotationUnit -def test_http_annotation_base_url(http_annotation_transcript_id): - """Verifies if the HTTP annotation creates the base url using the url and genomic_unit as expected.""" - actual = http_annotation_transcript_id.base_url() - assert actual == "http://grch37.rest.ensembl.org/vep/human/hgvs/NM_170707.3:c.745C>T?content-type=application/json;refseq=1;" # pylint: disable=line-too-long - - def test_http_annotation_task_build_url(http_annotation_transcript_id): """Verifies that the HTTP annotation task creates the base url using the 'url' and the genomic unit""" actual = http_annotation_transcript_id.build_url() - assert actual == "http://grch37.rest.ensembl.org/vep/human/hgvs/NM_170707.3:c.745C>T?content-type=application/json;refseq=1;" # pylint: disable=line-too-long + + assert ( + actual == + "http://grch37.rest.ensembl.org/vep/human/hgvs/NM_170707.3:c.745C>T?content-type=application/json;refseq=1;" + ) # This link cannot be shortened, will just disable for this one due to the nature of the long URL dependency @@ -27,7 +29,7 @@ def test_http_annotation_task_build_url_with_dependency(http_annotation_task_gen def test_annotation_task_create_http_task(hgvs_variant_annotation_unit): """Verifies that the annotation task factory creates the correct annotation task according to the dataset type""" - actual_task = AnnotationTaskFactory.create(hgvs_variant_annotation_unit) + actual_task = AnnotationTaskFactory.create_annotation_task(hgvs_variant_annotation_unit) assert isinstance(actual_task, HttpAnnotationTask) @@ -89,24 +91,82 @@ def test_annotation_extraction_for_genomic_unit(http_annotation_task_gene, hpo_a } in actual_extractions -# Patching the temporary helper method that is writing to a file, this will be -# removed once that helper method is no longer needed for the development - - def test_annotation_extraction_value_error_exception(http_annotation_task_gene, hpo_annotation_response): - """Verifying annotation failure does not cause crash in application during extraction""" + """ + Verifying annotation failure does not cause crash in application during extraction. Removes the expected value + in the json to force jq parse error to more closelyemulate the failure instead of mocking the jq response to fail. + """ - # Removing the expected value in the json to force a jq parse error to more closely - # emulate the failure instead of mocking the jq response to fail. del hpo_annotation_response['diseaseAssoc'] actual_extractions = http_annotation_task_gene.extract(hpo_annotation_response) assert len(actual_extractions) == 0 +@pytest.mark.parametrize( + "genomic_unit,dataset_name", [('VMA21', 'Entrez Gene Id'), ('NM_001017980.3:c.164G>T', 'ClinVar_Variantion_Id')] +) +def test_annotation_versioning_task_created(genomic_unit, dataset_name, get_annotation_unit): + """Verifies that the annotation task factory creates the correct version annotation task for the annotation unit""" + annotation_unit = get_annotation_unit(genomic_unit, dataset_name) + actual_task = AnnotationTaskFactory.create_version_task(annotation_unit) + assert isinstance(actual_task, VersionAnnotationTask) + + +@pytest.mark.parametrize( + "genomic_unit,dataset_name,expected", [ + ('VMA21', 'Entrez Gene Id', {"rosalution": "rosalution-manifest-00"}), + ('NM_001017980.3:c.164G>T', 'ClinVar_Variantion_Id', {"rosalution": "rosalution-manifest-00"}), + ('VMA21', 'Ensembl Gene Id', {"releases": [112]}), + ('NM_001017980.3:c.164G>T', 'Polyphen Prediction', {"releases": [112]}), + ('VMA21', 'HPO_NCBI_GENE_ID', {"date": "2024-09-16"}), + ('LMNA', 'OMIM', {"date": "2024-09-16"}), + ] +) +def test_process_annotation_versioning_all_types(genomic_unit, dataset_name, expected, get_version_task): + """Verifies that Version Annotation Tasks process and annotate for all 3 versioning types- date, rest, rosalution""" + + mock_response = Mock(spec=requests.Response) + mock_response.json.return_value = {"releases": [112]} + + with (patch("requests.get", return_value=mock_response), patch('src.core.annotation_task.date') as mock_date): + mock_date.today.return_value = date(2024, 9, 16) + + task = get_version_task(genomic_unit, dataset_name) + actual_version_json = task.annotate() + assert actual_version_json == expected + + +@pytest.mark.parametrize( + "genomic_unit,dataset_name,version_to_extract,expected", [ + ('VMA21', 'Entrez Gene Id', {"rosalution": "rosalution-manifest-00"}, "rosalution-manifest-00"), + ('VMA21', 'Ensembl Gene Id', {"releases": [112]}, 112), + ('LMNA', 'OMIM', {"date": "rosalution-temp-manifest-00"}, "rosalution-temp-manifest-00"), + ] +) +def test_version_extraction(genomic_unit, dataset_name, expected, version_to_extract, get_version_task): + """ Verifies extraction for datasets for all 3 versioning types - rest, date, rosalution""" + task = get_version_task(genomic_unit, dataset_name) + actual_version_extraction = task.extract_version(version_to_extract) + assert actual_version_extraction == expected + + ## Fixtures ## +@pytest.fixture(name="get_version_task") +def get_version_annotation_task(get_annotation_unit): + """creating version task""" + + def _create_version_task(genomic_unit, dataset_name): + + annotation_unit = get_annotation_unit(genomic_unit, dataset_name) + + return VersionAnnotationTask(annotation_unit) + + return _create_version_task + + @pytest.fixture(name="gene_ncbi_linkout_dataset") def fixture_ncbi_linkout_dataset(): """ diff --git a/backend/tests/unit/core/test_annotation_unit.py b/backend/tests/unit/core/test_annotation_unit.py index b8a4ff2c..e68d3c3e 100644 --- a/backend/tests/unit/core/test_annotation_unit.py +++ b/backend/tests/unit/core/test_annotation_unit.py @@ -1,5 +1,4 @@ """Tests for annotation unit class""" -from unittest.mock import Mock import pytest from src.core.annotation_unit import AnnotationUnit @@ -11,31 +10,17 @@ def test_annotation_unit_gets_missing_dependencies(annotation_unit_lmna): assert actual == ['HGNC_ID'] -def test_annotation_unit_ready_for_annotation(annotation_unit_lmna): +def test_annotation_unit_ready_for_annotation(annotation_unit_has_dependency): """Verifies if the annotation unit is ready for annotation""" - missing = annotation_unit_lmna.get_missing_dependencies() - missing_dependency = missing[0] - mock_genomic_unit_collection = Mock() - mock_genomic_unit_collection.find_genomic_unit_annotation_value = Mock() - dependency_annotation = mock_genomic_unit_collection.find_genomic_unit_annotation_value( - annotation_unit_lmna.genomic_unit, missing_dependency - ) - - actual = annotation_unit_lmna.ready_for_annotation(dependency_annotation, missing_dependency) + actual = annotation_unit_has_dependency.conditions_met_to_gather_annotation() assert actual is True def test_annotation_unit_not_ready_for_annotation(annotation_unit_lmna): """Verifies if the annotation unit is not ready for annotation""" - missing = annotation_unit_lmna.get_missing_dependencies() - missing_dependency = missing[0] - mock_genomic_unit_collection = Mock() - mock_genomic_unit_collection.find_genomic_unit_annotation_value = Mock() - dependency_annotation = "" - - actual = annotation_unit_lmna.ready_for_annotation(dependency_annotation, missing_dependency) + actual = annotation_unit_lmna.conditions_met_to_gather_annotation() assert actual is False @@ -69,13 +54,15 @@ def fixture_annotation_unit_lmna(): return AnnotationUnit(genomic_unit, dataset) +@pytest.fixture(name="annotation_unit_has_dependency") +def fixture_annotation_unit_lmna_has_dependencies(annotation_unit_lmna): + """Provides annotation unit that has all of its dependencies gathered""" + annotation_unit_lmna.set_annotation_for_dependency("HGNC_ID", "FAKE_HGNC_ID_VALUE") + return annotation_unit_lmna + + @pytest.fixture(name="annotation_unit_lmna_exceeded_delay_count") -def fixture_annotation_unit_lmna_with_annotated_dependency(): +def fixture_annotation_unit_lmna_with_annotated_dependency(annotation_unit_lmna): """Returns the annotation unit for the genomic unit LMNA and the dataset Clingen gene url""" - genomic_unit = {'unit': 'LMNA'} - dataset = { - "data_set": "ClinGen_gene_url", "data_source": "Rosalution", "genomic_unit_type": "gene", - "annotation_source_type": "forge", "base_string": "https://search.clinicalgenome.org/kb/genes/{HGNC_ID}", - "attribute": "{ \"ClinGen_gene_url\": .ClinGen_gene_url }", "dependencies": ["HGNC_ID"], "delay_count": 10 - } - return AnnotationUnit(genomic_unit, dataset) + annotation_unit_lmna.dataset['delay_count'] = 10 + return annotation_unit_lmna diff --git a/backend/tests/unit/repository/test_annotation_collection.py b/backend/tests/unit/repository/test_annotation_collection.py index 70a32c34..2fb67b54 100644 --- a/backend/tests/unit/repository/test_annotation_collection.py +++ b/backend/tests/unit/repository/test_annotation_collection.py @@ -8,14 +8,14 @@ def test_get_datasets_configuration_by_type(annotation_config_collection): """Tests getting the datasets for the provided types of genomic units""" types = set({GenomicUnitType.GENE, GenomicUnitType.HGVS_VARIANT}) datasets = annotation_config_collection.datasets_to_annotate_by_type(types) - assert len(datasets) == 49 + assert len(datasets) == 9 def test_get_datasets_to_annotate_for_units(annotation_config_collection, genomic_units_for_annotation): """Tests if the configuration for datasets is return as expected""" actual_configuration = annotation_config_collection.datasets_to_annotate_for_units(genomic_units_for_annotation) - assert len(actual_configuration["gene"]) == 39 - assert len(actual_configuration["hgvs_variant"]) == 10 + assert len(actual_configuration["gene"]) == 6 + assert len(actual_configuration["hgvs_variant"]) == 3 @pytest.fixture(name="genomic_units_for_annotation") diff --git a/backend/tests/unit/repository/test_genomic_unit_collection.py b/backend/tests/unit/repository/test_genomic_unit_collection.py index cc9722d5..ab09b966 100644 --- a/backend/tests/unit/repository/test_genomic_unit_collection.py +++ b/backend/tests/unit/repository/test_genomic_unit_collection.py @@ -1,6 +1,7 @@ """ Manages the genomic unit collection. Including reading, writing, fetching various genomic units. """ from unittest.mock import Mock import copy +from pymongo import ReturnDocument import pytest from bson import ObjectId @@ -14,91 +15,52 @@ def test_find_genomic_units(genomic_unit_collection): assert len(all_genomic_units) == 2 -def test_transcript_annotation_not_exist_with_no_annotations(genomic_unit_collection, hgvs_variant_genomic_unit_json): - """ Tests if a transcript that has no annotations will return false on a test""" - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} - dataset = {'data_set': 'fake_annotation_not_exist', 'transcript': True} - - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json - - actual = genomic_unit_collection.annotation_exist(genomic_unit, dataset) - - assert actual is False - - -def test_transcript_annotation_not_exist(genomic_unit_collection, hgvs_variant_genomic_unit_json): +@pytest.mark.parametrize( + "transcript_annotation_unit", [ + ('Polyphen Prediction', 'Ensembl', '112', '120', False), + ('Polyphen Prediction', 'Ensembl', '112', '112', True), + ('transcript_id', 'Ensembl', '', '120', False), + ('Polyphen Prediction', 'Ensembl', '', '120', False), + ], + indirect=True, + ids=["polyphen_exists_different_version", "polyphen_exists", "no_transcripts_yet", "polyphen_not_exists"] +) +def test_transcripts_annotations_exists(transcript_annotation_unit, genomic_unit_collection): """ Tests if a transcript annotation does not exist """ - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} - dataset = {'data_set': 'Polyphen Prediction', 'transcript': True} - - hgvs_variant_genomic_unit_json['transcripts'] = [{ - 'transcript_id': 'NM_001017980.3', - 'annotations': [{'transcript_id': { - 'data_source': 'Ensembl', - 'version': '0.0', - 'value': 'NM_001017980.3', - }}] - }] - - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json - - actual = genomic_unit_collection.annotation_exist(genomic_unit, dataset) - - assert actual is False - - -def test_transcript_annotation_exist(genomic_unit_collection, hgvs_variant_genomic_unit_json): - """ Tests if there is an annotation for a transcript """ - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} - dataset = {'data_set': 'transcript_id', 'transcript': True} - - hgvs_variant_genomic_unit_json['transcripts'] = [{ - 'transcript_id': 'NM_001017980.3', - 'annotations': [{'transcript_id': { - 'data_source': 'Ensembl', - 'version': '0.0', - 'value': 'NM_001017980.3', - }}] - }] - - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json - - actual = genomic_unit_collection.annotation_exist(genomic_unit, dataset) - - assert actual is True - - -def test_annotation_exists_for_gene(genomic_unit_collection): + annotation_unit, variant_in_database_json, expected = transcript_annotation_unit + genomic_unit_collection.collection.find_one.return_value = variant_in_database_json + actual = genomic_unit_collection.annotation_exist(annotation_unit) + assert actual is expected + + +@pytest.mark.parametrize( + "genomic_unit,dataset_name,expected", [('VMA21', 'Entrez Gene Id', True), ('VMA21', 'Entrez Gene Id', False), + ('NM_001017980.3:c.164G>T', 'ClinVar_Variantion_Id', True)] +) +def test_genomic_units_annotations_exists( + genomic_unit, dataset_name, expected, genomic_unit_collection, get_annotation_unit +): """ Tests if an annotation exists for a gene. This test does not utilize the JSON fixtures to verify if exists""" - genomic_unit = {'unit': 'VMA21', 'type': GenomicUnitType.GENE} - dataset = {'data_set': "Entrez Gene Id"} + annotation_unit = get_annotation_unit(genomic_unit, dataset_name) - genomic_unit_collection.collection.count_documents.return_value = 1 + genomic_unit_collection.collection.count_documents.return_value = int(expected) - actual = genomic_unit_collection.annotation_exist(genomic_unit, dataset) + actual = genomic_unit_collection.annotation_exist(annotation_unit) - genomic_unit_collection.collection.count_documents.assert_called_with( - {"gene": "VMA21", "annotations.Entrez Gene Id": {'$exists': True}}, - limit=1, - ) - assert actual is True - - -def test_annotation_does_not_exist_for_gene(genomic_unit_collection): - """ - Tests if an annotation does not exist for a gene. This test does not utilize the JSON fixtures to verify if exists - """ - genomic_unit = {'unit': 'VMA21', 'type': GenomicUnitType.GENE} - dataset = {'data_set': "HPO"} + dataset_attribute = f"annotations.{dataset_name}" + datasource_attribute = f"{dataset_attribute}.data_source" + version_attribute = f"{dataset_attribute}.version" - genomic_unit_collection.collection.count_documents.return_value = 0 + expected_find_query = { + annotation_unit.get_genomic_unit_type_string(): genomic_unit, dataset_attribute: {'$exists': True}, + datasource_attribute: annotation_unit.get_dataset_source(), version_attribute: annotation_unit.get_version() + } - actual = genomic_unit_collection.annotation_exist(genomic_unit, dataset) genomic_unit_collection.collection.count_documents.assert_called_with( - {"gene": "VMA21", "annotations.HPO": {'$exists': True}}, + expected_find_query, limit=1, ) - assert actual is False + assert actual is expected def test_find_genomic_unit_with_transcript_id(genomic_unit_collection): @@ -119,53 +81,39 @@ def test_find_genomic_unit_with_transcript_id(genomic_unit_collection): }) -def test_find_genomic_unit_annotation_value_when_exists(genomic_unit_collection, vma21_genomic_unit): +@pytest.mark.parametrize( + "genomic_unit,dataset_name,expected", [('VMA21', 'Entrez Gene Id', 'wup'), ('VMA21', 'Entrez Gene Id', None), + ('NM_001017980.3:c.164G>T', 'ClinVar_Variantion_Id', 'wup2')] +) +def test_find_genomic_unit_annotation_values( + genomic_unit, dataset_name, expected, genomic_unit_collection, get_annotation_unit +): """ Finds the Genomic Unit's Annotation when the value exists within the mongo collection """ - genomic_unit = {'unit': 'VMA21', 'type': GenomicUnitType.GENE} - dataset = "Eat-Tacos" - - genomic_unit_collection.collection.find_one.return_value = vma21_genomic_unit - - actual_value = genomic_unit_collection.find_genomic_unit_annotation_value(genomic_unit, dataset) - - genomic_unit_collection.collection.find_one.assert_called_with({ - "gene": "VMA21", - 'annotations.Eat-Tacos': {'$exists': True}, - }) - - expected_vma21_entrez_gene_id = None - assert actual_value == expected_vma21_entrez_gene_id - - -def test_find_genomic_unit_annotation_value_when_unit_not_exist(genomic_unit_collection): - """ - Fails to find the Genomic Unit's Annotation when the value does not exist within the mongo collection - """ - genomic_unit = {'unit': 'PEX10', 'type': GenomicUnitType.GENE} - dataset = "Entrez Gene Id" + annotation_unit = get_annotation_unit(genomic_unit, dataset_name) + genomic_unit_collection.collection.find_one.return_value = { + 'annotations': [{dataset_name: [{'value': expected}]}] + } if expected else None - genomic_unit_collection.collection.find_one.return_value = None + actual_value = genomic_unit_collection.find_genomic_unit_annotation_value(annotation_unit) - actual_value = genomic_unit_collection.find_genomic_unit_annotation_value(genomic_unit, dataset) - - genomic_unit_collection.collection.find_one.assert_called_with({ - "gene": "PEX10", - 'annotations.Entrez Gene Id': {'$exists': True}, - }) + genomic_unit_collection.collection.find_one.assert_called_with( + genomic_unit_collection.__find_annotation_query__(annotation_unit), + {f"annotations.{dataset_name}.value.$": 1, "_id": 0} + ) - assert actual_value is None + assert actual_value == expected -def test_update_genomic_unit_with_transcript_id(genomic_unit_collection): +def test_add_transcript_to_genomic_unit(genomic_unit_collection): """ - Verifies that the update_genomic_unit_with_transcript_id function makes the pymongo call with the correct params + Verifies adding the transcript to an HGVS variant in the collection. """ genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} transcript_id = "NM_001363810.1" - genomic_unit_collection.update_genomic_unit_with_transcript_id(genomic_unit, transcript_id) + genomic_unit_collection.add_transcript_to_genomic_unit(genomic_unit, transcript_id) genomic_unit_collection.collection.update_one.assert_called_once_with( {'hgvs_variant': 'NM_001017980.3:c.164G>T'}, @@ -173,7 +121,7 @@ def test_update_genomic_unit_with_transcript_id(genomic_unit_collection): ) -def test_update_genomic_unit_with_mongo_id(genomic_unit_collection): +def test_update_genomic_unit_annotation_by_mongo_id(genomic_unit_collection): """ Verifies that the update genomic unit with mongo id function makes the pymongo call with the correct params """ @@ -184,12 +132,12 @@ def test_update_genomic_unit_with_mongo_id(genomic_unit_collection): "annotations": {}, } - genomic_unit_collection.update_genomic_unit_with_mongo_id(genomic_unit_document) + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id(genomic_unit_document) - genomic_unit_collection.collection.update_one.assert_called_once_with( - {'_id': ObjectId('62fbfa5f616a9799131174c8')}, - {'$set': genomic_unit_document}, - ) + genomic_unit_collection.collection.find_one_and_update.assert_called_once_with({ + '_id': ObjectId('62fbfa5f616a9799131174c8') + }, {'$set': genomic_unit_document}, + return_document=ReturnDocument.AFTER) def test_annotate_transcript_genomic_unit(genomic_unit_collection): @@ -214,20 +162,23 @@ def test_annotate_transcript_genomic_unit(genomic_unit_collection): genomic_unit_collection.annotate_genomic_unit(genomic_unit, transcript_annotation_unit) - genomic_unit_collection.collection.update_one.assert_called_once_with({'_id': - ObjectId("62fbfa5f616a9799131174ca")}, { - '$set': { - "_id": ObjectId("62fbfa5f616a9799131174ca"), - "hgvs_variant": "NM_001017980.3:c.164G>T", - "transcripts": [{'transcript_id': 'NM_001363810.1', 'annotations': []}], - "annotations": {}, - } - }) + genomic_unit_collection.collection.find_one_and_update.assert_called_once_with({ + '_id': ObjectId("62fbfa5f616a9799131174ca") + }, { + '$set': { + "_id": ObjectId("62fbfa5f616a9799131174ca"), + "hgvs_variant": "NM_001017980.3:c.164G>T", + "transcripts": [{'transcript_id': 'NM_001363810.1', 'annotations': []}], + "annotations": {}, + } + }, + return_document=ReturnDocument.AFTER) -def test_annotation_genomic_unit_with_file(genomic_unit_collection, hgvs_variant_genomic_unit_json): +def test_annotation_genomic_unit_with_file(genomic_unit_collection, get_annotation_json): """ Accepts a file and adds it as an annotation to the given genomic unit """ - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} + genomic_unit = get_annotation_json('NM_001017980.3:c.164G>T', GenomicUnitType.HGVS_VARIANT) + incoming_genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} annotation_unit = { "data_set": 'GeneHomology_Multi-SequenceAlignment', "data_source": "rosalution_manual", "version": "1979-01-01", "value": {"file_id": "fake-image-id-1", "created_date": "1979-01-01 00:00:00"} @@ -240,34 +191,35 @@ def test_annotation_genomic_unit_with_file(genomic_unit_collection, hgvs_variant }] } - expected_genomic_unit = hgvs_variant_genomic_unit_json + expected_genomic_unit = genomic_unit expected_genomic_unit['annotations'].append(expected_annotation_update) - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json - genomic_unit_collection.update_genomic_unit_with_mongo_id = Mock() + genomic_unit_collection.collection.find_one.return_value = genomic_unit + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id = Mock() - genomic_unit_collection.annotate_genomic_unit_with_file(genomic_unit, annotation_unit) + genomic_unit_collection.annotate_genomic_unit_with_file(incoming_genomic_unit, annotation_unit) - genomic_unit_collection.update_genomic_unit_with_mongo_id.assert_called_once_with(expected_genomic_unit) + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id.assert_called_once_with(expected_genomic_unit) -def test_update_existing_genomic_unit_file_annotation(genomic_unit_collection, hgvs_variant_genomic_unit_json): +def test_update_existing_genomic_unit_file_annotation(genomic_unit_collection, get_annotation_json): """ Updates an existing file annotation with a new file annotation in place""" - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} + genomic_unit = get_annotation_json('NM_001017980.3:c.164G>T', GenomicUnitType.HGVS_VARIANT) + incoming_genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} annotation_unit_value = {"file_id": "fake-image-id-2", "created_date": "1979-01-01 00:00:00"} data_set = 'GeneHomology_Multi-SequenceAlignment' file_id_old = "fake-image-id-1" - expected_genomic_unit = copy.copy(hgvs_variant_genomic_unit_json) + expected_genomic_unit = copy.copy(genomic_unit) - hgvs_variant_genomic_unit_json['annotations'].append({ + genomic_unit['annotations'].append({ "GeneHomology_Multi-SequenceAlignment": [{ "data_source": "rosalution_maual", "version": "1979-01-01", "value": [{"file_id": "fake-image-id-1", "created_date": "1979-01-01 00:00:00"}] }] }) - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json + genomic_unit_collection.collection.find_one.return_value = genomic_unit expected_annotation_update = { "GeneHomology_Multi-SequenceAlignment": [{ @@ -278,31 +230,32 @@ def test_update_existing_genomic_unit_file_annotation(genomic_unit_collection, h expected_genomic_unit['annotations'].append(expected_annotation_update) - genomic_unit_collection.update_genomic_unit_with_mongo_id = Mock() + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id = Mock() genomic_unit_collection.update_genomic_unit_file_annotation( - genomic_unit, data_set, annotation_unit_value, file_id_old + incoming_genomic_unit, data_set, annotation_unit_value, file_id_old ) - genomic_unit_collection.update_genomic_unit_with_mongo_id.assert_called_once_with(expected_genomic_unit) + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id.assert_called_once_with(expected_genomic_unit) -def test_remove_existing_genomic_unit_file_annotation(genomic_unit_collection, hgvs_variant_genomic_unit_json): +def test_remove_existing_genomic_unit_file_annotation(genomic_unit_collection, get_annotation_json): """ Accepts a request to remove an existing file annotation """ - genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} + genomic_unit_json = get_annotation_json('NM_001017980.3:c.164G>T', GenomicUnitType.HGVS_VARIANT) + incoming_genomic_unit = {'unit': 'NM_001017980.3:c.164G>T', 'type': GenomicUnitType.HGVS_VARIANT} data_set = 'GeneHomology_Multi-SequenceAlignment' file_id = "fake-image-id-1" - expected_genomic_unit = copy.deepcopy(hgvs_variant_genomic_unit_json) + expected_genomic_unit = copy.deepcopy(genomic_unit_json) - hgvs_variant_genomic_unit_json['annotations'].append({ + genomic_unit_json['annotations'].append({ "GeneHomology_Multi-SequenceAlignment": [{ "data_source": "rosalution_maual", "version": "1979-01-01", "value": [{"file_id": "fake-image-id-1", "created_date": "1979-01-01 00:00:00"}] }] }) - genomic_unit_collection.collection.find_one.return_value = hgvs_variant_genomic_unit_json + genomic_unit_collection.collection.find_one.return_value = genomic_unit_json expected_genomic_unit['annotations'].append({ "GeneHomology_Multi-SequenceAlignment": [{ @@ -310,23 +263,34 @@ def test_remove_existing_genomic_unit_file_annotation(genomic_unit_collection, h }] }) - genomic_unit_collection.update_genomic_unit_with_mongo_id = Mock() + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id = Mock() + + genomic_unit_collection.remove_genomic_unit_file_annotation(incoming_genomic_unit, data_set, file_id) + + genomic_unit_collection.update_genomic_unit_annotation_by_mongo_id.assert_called_once_with(expected_genomic_unit) - genomic_unit_collection.remove_genomic_unit_file_annotation(genomic_unit, data_set, file_id) - genomic_unit_collection.update_genomic_unit_with_mongo_id.assert_called_once_with(expected_genomic_unit) +@pytest.fixture(name="transcript_annotation_unit", scope="function") +def variant_with_datasets_annotation_unit(request, get_annotation_unit, get_annotation_json): + """ Fixture that creates generates the test data for verifying transcript annotation operations""" + dataset, data_source, existing_version, calculated_version, expected = request.param + annotation_unit = get_annotation_unit('NM_001017980.3:c.164G>T', dataset) + annotation_unit.version = calculated_version -@pytest.fixture(name="hgvs_variant_genomic_unit_json") -def fixture_hgvs_genomic_unit_json(genomic_unit_collection_json): - """ Returns the genomic unit for VMA21 Gene""" - return next(( - unit for unit in genomic_unit_collection_json - if 'hgvs_variant' in unit and unit['hgvs_variant'] == "NM_001017980.3:c.164G>T" - ), None) + variant_in_database_json = get_annotation_json("NM_001017980.3:c.164G>T", GenomicUnitType.HGVS_VARIANT) + if existing_version: + for transcript_annotation in variant_in_database_json['transcripts']: + if dataset in transcript_annotation: + transcript_annotation[dataset].data_source = data_source + transcript_annotation[dataset].version = existing_version + elif dataset == 'transcript_id': + variant_in_database_json['transcripts'] = [] + else: + for transcript in variant_in_database_json['transcripts']: + transcript['annotations'] = [ + annotation for annotation in transcript['annotations'] if dataset not in annotation + ] -@pytest.fixture(name="vma21_genomic_unit") -def fixture_vma21_genomic_unit_json(genomic_unit_collection_json): - """ Returns the genomic unit for VMA21 Gene""" - return next((unit for unit in genomic_unit_collection_json if 'gene' in unit and unit['gene'] == "VMA21"), None) + return (annotation_unit, variant_in_database_json, expected) diff --git a/etc/fixtures/create-annotation-manifest.js b/etc/fixtures/create-annotation-manifest.js new file mode 100755 index 00000000..ddf26838 --- /dev/null +++ b/etc/fixtures/create-annotation-manifest.js @@ -0,0 +1,89 @@ +const usage = ` +mongosh /tmp/database/create-annotation-manifests.js + Script Options: + help: if true print this help message + + Run mongosh help for mongosh connection and authentication usage. + + Example: + + mongosh --host localhost --port 27017 --eval "var help=true;" /tmp/fixtures/create-annotation-manifest.js + + docker exec -it mongosh /tmp/fixtures/create-annotation-manifest.js +` + +if (help === true) { + print(usage); + quit(1); +} + +if (typeof databaseName === 'undefined') { + databaseName = "rosalution_db"; +} else if (typeof databaseName !== 'string') { + print("databaseName must be a string"); + quit(1); +} + +db = db.getSiblingDB(databaseName); + +const annotationSectionsRename = { + 'Modelability': 'Orthology', + 'Protein Expression': 'Human_Gene_Expression', +} + +let yourDate = new Date() +yourDate.toISOString().split('T')[0] + +version = { + 'rest': 'rosalution-temp-manifest-00', + 'rosalution': 'rosalution-temp-manifest-00', + 'date': 'rosalution-temp-manifest-00', +} + + +usernameMapping = { + 'amoss01': '00bqd0d6r0dqpwptyuo8p6h3mnnumzee', + 'afoksin': 'h3bnr2uh1bo4oe0cs1rdyh3n5hrg71ej', + 'aeunoant': '00bqd0d6r0dqpwptyuo8p6h3mnnumzee', +} + +usersToUpdate = Object.keys(usernameMapping); + + +try { + const analyses = db.analyses.find(); + analyses.forEach(element => { + print(`Creating analysis' '${element.name}' manifest ...`); + const annotation_configuration = db.annotations_config.find(); + + if (!('manifest' in element)) + element['manifest']= [] + + annotation_configuration.forEach(dataset => { + dataset_name = dataset['data_set'] + if (element.manifest.some(e => dataset_name in e)){ + print("Dataset already in manifest", dataset_name) + return + } + + dataset_manifest = { + } + version_string = version[config.versioning_type] + dataset_manifest[dataset_name] = { + 'data_source': dataset['data_source'], + 'version': 'rosalution-temp-manifest-00', + } + element['manifest'].push(dataset_manifest) + }); + print(element['manifest']) + const updated = db.analyses.updateOne( + {'_id': element._id}, + {'$set': element} + ) + print(updated) + }); +} catch (err) { + console.log(err.stack); + console.log(usage); + quit(1); +} diff --git a/etc/fixtures/initial-seed/analyses.json b/etc/fixtures/initial-seed/analyses.json index 72476602..feeeb43e 100644 --- a/etc/fixtures/initial-seed/analyses.json +++ b/etc/fixtures/initial-seed/analyses.json @@ -394,7 +394,276 @@ "timestamp":"2022-10-09T21:16:22.687000", "username":"vrr-prep" } - ] + ], + "manifest": [ + { + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] }, { "name":"CPAM0046", @@ -708,7 +977,276 @@ "timestamp":"2022-10-09T21:16:22.687000", "username":"vrr-prep" } - ] + ], + "manifest": [ + { + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] }, { "name":"CPAM0047", @@ -1009,57 +1547,326 @@ "timestamp":"2022-10-09T21:16:22.687000", "username":"vrr-prep" } - ] - }, - { - "name":"CPAM0053", - "description":"Mild Zellweger Spectrum Disorder, a Peroxisome Biogenesis Disorder", - "nominated_by":"Precision Medicine Institute", - "genomic_units":[ + ], + "manifest": [ { - "gene":"PEX10", - "transcripts":[ - { - "transcript":"NM_153818.2" - } - ], - "variants":[ - { - "hgvs_variant":"NM_153818.2:c.28dup", - "c_dot":"c.28dup", - "p_dot":"p.Glu10fs", - "build":"hg19", - "case":[ - { - "field":"Evidence", - "value":[ - "PVS1", - "PM2", - "PP5" - ] - }, - { - "field":"Interpretation", - "value":[ - "Pathogenic" - ] - }, - { - "field":"Zygosity", - "value":[ - "Compound Hetrozygous" - ] - }, - { - "field":"Inheritance", - "value":[ - "Autosomal Recesive" - ] - } - ] - }, - { - "hgvs_variant":"NM_153818.2:c.928C>G", + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] + }, + { + "name":"CPAM0053", + "description":"Mild Zellweger Spectrum Disorder, a Peroxisome Biogenesis Disorder", + "nominated_by":"Precision Medicine Institute", + "genomic_units":[ + { + "gene":"PEX10", + "transcripts":[ + { + "transcript":"NM_153818.2" + } + ], + "variants":[ + { + "hgvs_variant":"NM_153818.2:c.28dup", + "c_dot":"c.28dup", + "p_dot":"p.Glu10fs", + "build":"hg19", + "case":[ + { + "field":"Evidence", + "value":[ + "PVS1", + "PM2", + "PP5" + ] + }, + { + "field":"Interpretation", + "value":[ + "Pathogenic" + ] + }, + { + "field":"Zygosity", + "value":[ + "Compound Hetrozygous" + ] + }, + { + "field":"Inheritance", + "value":[ + "Autosomal Recesive" + ] + } + ] + }, + { + "hgvs_variant":"NM_153818.2:c.928C>G", "c_dot":"c.928G>G", "p_dot":"p.His310Asp", "build":"hg19", @@ -1333,7 +2140,276 @@ "timestamp":"2022-10-09T21:14:22.687000", "username":"vrr-prep" } - ] + ], + "manifest": [ + { + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] }, { "name":"CPAM0065", @@ -1596,7 +2672,276 @@ "timestamp":"2022-11-09T21:13:22.687004", "username":"vrr-prep" } - ] + ], + "manifest": [ + { + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] }, { "name":"CPAM0084", @@ -1937,6 +3282,275 @@ } ], "discussions":[], - "supporting_evidence_files":[] + "supporting_evidence_files":[], + "manifest": [ + { + "Entrez Gene Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO_NCBI_GENE_ID": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "Ensembl Gene Id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "HGNC_ID": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Gene Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinGen_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_variant_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "ClinVar_Variantion_Id": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "NCBI_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "gnomAD_gene_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "OMIM": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "OMIM_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "HPO": { "data_source": "HPO", "version": "rosalution-temp-manifest-00" } + }, + { + "HPO_gene_search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_RGD_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_MGI_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_ZFIN_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens Gene Identifier": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Automated_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_WB_Summary": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_Models": { + "data_source": "Alliance Genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "transcript_id": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Polyphen Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Prediction": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "SIFT Score": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Consequences": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "CADD": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Impact": { "data_source": "Ensembl", "version": "rosalution-temp-manifest-00" } + }, + { + "Human_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Rat_Rat_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Mouse_Mouse_Genome_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Zebrafish_Zebrafish_Information_Network_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Alliance_Genome_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "C-Elegens_Worm_Base_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Frog_General_Xenbase_Database_url": { + "data_source": "Alliance genome", + "version": "rosalution-temp-manifest-00" + } + }, + { + "GTEx_Human_Gene_Expression_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Human_Protein_Atlas_Protein_Gene_Search_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + }, + { + "Pharos_Target_url": { + "data_source": "Rosalution", + "version": "rosalution-temp-manifest-00" + } + } + ] } ] \ No newline at end of file diff --git a/etc/fixtures/initial-seed/genomic-units.json b/etc/fixtures/initial-seed/genomic-units.json index 01fd55b0..1f5b893a 100644 --- a/etc/fixtures/initial-seed/genomic-units.json +++ b/etc/fixtures/initial-seed/genomic-units.json @@ -6,7 +6,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 203547 } ] @@ -15,7 +15,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Myopathy, X-linked, with excessive autophagy" ] @@ -26,7 +26,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0001270: Motor delay", "HP:0003677: Slowly progressive", @@ -59,7 +59,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000160131" } ] @@ -68,7 +68,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:1566155" } ] @@ -77,7 +77,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to be involved in vacuolar proton-transporting V-type ATPase complex assembly. Predicted to be located in lysosome. Predicted to be active in endoplasmic reticulum membrane. Human ortholog(s) of this gene implicated in X-linked myopathy with excessive autophagy. Orthologous to human VMA21 (vacuolar ATPase assembly factor VMA21)." } ] @@ -86,7 +86,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=VMA21" } ] @@ -95,7 +95,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to be involved in vacuolar proton-transporting V-type ATPase complex assembly. Predicted to be located in lysosome. Predicted to be active in endoplasmic reticulum membrane. Human ortholog(s) of this gene implicated in X-linked myopathy with excessive autophagy. Orthologous to human VMA21 (vacuolar ATPase assembly factor VMA21); INTERACTS WITH 2,3,7,8-Tetrachlorodibenzofuran; 3-chloropropane-1,2-diol; bisphenol A." } ] @@ -104,7 +104,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -113,7 +113,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:22082" } ] @@ -122,7 +122,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:22082" } ] @@ -131,7 +131,7 @@ "Zebrafish Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ZFIN:ZDB-GENE-081104-272" } ] @@ -140,7 +140,7 @@ "Zebrafish_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to be involved in vacuolar proton-transporting V-type ATPase complex assembly. Predicted to be located in ER to Golgi transport vesicle membrane; endoplasmic reticulum membrane; and endoplasmic reticulum-Golgi intermediate compartment membrane. Human ortholog(s) of this gene implicated in X-linked myopathy with excessive autophagy. Orthologous to human VMA21 (vacuolar ATPase assembly factor VMA21)." } ] @@ -149,7 +149,7 @@ "Zebrafish_Alliance_Genome_ZFIN_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -158,7 +158,7 @@ "Zebrafish_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -167,7 +167,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:1914298" } ] @@ -176,7 +176,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=VMA21&navFilter=all" } ] @@ -185,7 +185,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=203547" } ] @@ -194,7 +194,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This gene encodes a chaperone for assembly of lysosomal vacuolar ATPase.[provided by RefSeq, Jul 2012]" } ] @@ -203,7 +203,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000160131?dataset=gnomad_r2_1" } ] @@ -212,7 +212,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -221,7 +221,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -230,7 +230,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to be involved in vacuolar proton-transporting V-type ATPase complex assembly. Predicted to be located in lysosome. Predicted to be active in endoplasmic reticulum membrane. Human ortholog(s) of this gene implicated in X-linked myopathy with excessive autophagy. Orthologous to human VMA21 (vacuolar ATPase assembly factor VMA21)." } ] @@ -239,7 +239,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:1566155" } ] @@ -248,7 +248,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:1566155" } ] @@ -257,7 +257,7 @@ "Zebrafish_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/ZFIN:ZDB-GENE-081104-272" } ] @@ -266,7 +266,7 @@ "Zebrafish_Zebrafish_Information_Network_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://zfin.org/ZDB-GENE-081104-272" } ] @@ -275,7 +275,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:1914298" } ] @@ -284,7 +284,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:1914298" } ] @@ -301,7 +301,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001017980.4" } ] @@ -310,7 +310,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "possibly_damaging" } ] @@ -319,7 +319,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.597 } ] @@ -328,7 +328,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -337,7 +337,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.02 } ] @@ -346,7 +346,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant", "splice_region_variant" @@ -358,7 +358,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -372,7 +372,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001363810.1" } ] @@ -381,7 +381,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -390,7 +390,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.998 } ] @@ -399,7 +399,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -408,7 +408,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.01 } ] @@ -417,7 +417,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant", "splice_region_variant" @@ -429,7 +429,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -442,7 +442,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "581244" } ] @@ -451,7 +451,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 33 } ] @@ -460,7 +460,7 @@ "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/581244" } ] @@ -482,7 +482,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_005249.5" } ] @@ -491,7 +491,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -500,7 +500,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -509,7 +509,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -518,7 +518,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "stop_gained" ] @@ -529,7 +529,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -538,7 +538,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_005249.5" } ] @@ -547,7 +547,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -561,7 +561,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_026731.1" } ] @@ -570,7 +570,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -579,7 +579,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -588,7 +588,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -597,7 +597,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -606,7 +606,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "upstream_gene_variant" ] @@ -617,7 +617,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -626,7 +626,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_026731.1" } ] @@ -635,7 +635,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -649,7 +649,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -658,7 +658,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -667,7 +667,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -676,7 +676,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -685,7 +685,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "upstream_gene_variant" ] @@ -696,7 +696,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -705,7 +705,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_026732.1" } ] @@ -714,7 +714,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -728,7 +728,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -737,7 +737,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -746,7 +746,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -755,7 +755,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -764,7 +764,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "upstream_gene_variant" ] @@ -775,7 +775,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -784,7 +784,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_125758.1" } ] @@ -793,7 +793,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -806,7 +806,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "13871" } ] @@ -815,7 +815,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 37 } ] @@ -824,7 +824,7 @@ "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/13871" } ] @@ -841,7 +841,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_005249.5" } ] @@ -850,7 +850,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -859,7 +859,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -868,7 +868,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -877,7 +877,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -886,7 +886,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -897,7 +897,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -911,7 +911,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_125758.1" } ] @@ -920,7 +920,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -929,7 +929,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -938,7 +938,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -947,7 +947,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -956,7 +956,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "upstream_gene_variant" ] @@ -967,7 +967,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -980,7 +980,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 25.2 } ] @@ -997,7 +997,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001257374.3" } ] @@ -1006,7 +1006,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1015,7 +1015,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.999 } ] @@ -1024,7 +1024,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1033,7 +1033,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1042,7 +1042,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1053,7 +1053,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1067,7 +1067,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001282624.2" } ] @@ -1076,7 +1076,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1085,7 +1085,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1 } ] @@ -1094,7 +1094,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1103,7 +1103,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1112,7 +1112,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1123,7 +1123,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1137,7 +1137,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001282625.2" } ] @@ -1146,7 +1146,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1155,7 +1155,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1 } ] @@ -1164,7 +1164,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1173,7 +1173,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1182,7 +1182,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1193,7 +1193,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1207,7 +1207,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001282626.2" } ] @@ -1216,7 +1216,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1225,7 +1225,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1 } ] @@ -1234,7 +1234,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1243,7 +1243,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1252,7 +1252,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1263,7 +1263,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1277,7 +1277,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_005572.4" } ] @@ -1286,7 +1286,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1295,7 +1295,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1 } ] @@ -1304,7 +1304,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1313,7 +1313,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1322,7 +1322,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1333,7 +1333,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1347,7 +1347,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_170707.4" } ] @@ -1356,7 +1356,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1365,7 +1365,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1 } ] @@ -1374,7 +1374,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1383,7 +1383,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1392,7 +1392,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1403,7 +1403,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1417,7 +1417,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_170708.4" } ] @@ -1426,7 +1426,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1435,7 +1435,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.999 } ] @@ -1444,7 +1444,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1453,7 +1453,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1462,7 +1462,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1473,7 +1473,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1486,7 +1486,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "14524" } ] @@ -1495,7 +1495,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "14524" } ] @@ -1504,7 +1504,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 26.5 } ] @@ -1513,7 +1513,7 @@ "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/14524" } ] @@ -1530,7 +1530,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374425.1" } ] @@ -1539,7 +1539,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1548,7 +1548,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1557,7 +1557,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1568,7 +1568,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1577,7 +1577,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1586,7 +1586,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1600,7 +1600,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374426.1" } ] @@ -1609,7 +1609,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1618,7 +1618,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1627,7 +1627,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1638,7 +1638,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1647,7 +1647,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1656,7 +1656,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1670,7 +1670,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374427.1" } ] @@ -1679,7 +1679,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1688,7 +1688,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1697,7 +1697,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1708,7 +1708,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1717,7 +1717,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1726,7 +1726,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1740,7 +1740,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_002617.4" } ] @@ -1749,7 +1749,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.999 } ] @@ -1758,7 +1758,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1767,7 +1767,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1778,7 +1778,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1787,7 +1787,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1796,7 +1796,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1810,7 +1810,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_007033.5" } ] @@ -1819,7 +1819,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1828,7 +1828,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1837,7 +1837,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -1848,7 +1848,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1857,7 +1857,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1866,7 +1866,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -1880,7 +1880,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_153818.2" } ] @@ -1889,7 +1889,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.999 } ] @@ -1898,7 +1898,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "probably_damaging" } ] @@ -1907,7 +1907,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -1918,7 +1918,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -1927,7 +1927,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -1936,7 +1936,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -1950,7 +1950,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_164636.1" } ] @@ -1959,7 +1959,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1968,7 +1968,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1977,7 +1977,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "non_coding_transcript_exon_variant" ] @@ -1988,7 +1988,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -1997,7 +1997,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2006,7 +2006,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2019,7 +2019,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "552930" } ] @@ -2028,7 +2028,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 27.4 } ] @@ -2037,7 +2037,7 @@ "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/552930" } ] @@ -2054,7 +2054,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001365819.1" } ] @@ -2063,7 +2063,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2072,7 +2072,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2081,7 +2081,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2090,7 +2090,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2099,7 +2099,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant", "splice_region_variant" @@ -2111,7 +2111,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -2125,7 +2125,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_002972.4" } ] @@ -2134,7 +2134,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2143,7 +2143,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2152,7 +2152,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2161,7 +2161,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2170,7 +2170,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant", "splice_region_variant" @@ -2182,7 +2182,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -2195,7 +2195,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2212,7 +2212,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374425.1" } ] @@ -2221,7 +2221,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2230,7 +2230,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2239,7 +2239,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2248,7 +2248,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2257,7 +2257,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -2268,7 +2268,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -2282,7 +2282,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374426.1" } ] @@ -2291,7 +2291,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2300,7 +2300,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2309,7 +2309,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2318,7 +2318,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2327,7 +2327,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "intron_variant" ] @@ -2338,7 +2338,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2352,7 +2352,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001374427.1" } ] @@ -2361,7 +2361,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2370,7 +2370,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2379,7 +2379,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2388,7 +2388,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2397,7 +2397,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "intron_variant" ] @@ -2408,7 +2408,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2422,7 +2422,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_002617.4" } ] @@ -2431,7 +2431,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2440,7 +2440,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2449,7 +2449,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2458,7 +2458,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2467,7 +2467,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -2478,7 +2478,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -2492,7 +2492,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_153818.2" } ] @@ -2501,7 +2501,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2510,7 +2510,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2519,7 +2519,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2528,7 +2528,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2537,7 +2537,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -2548,7 +2548,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -2562,7 +2562,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_164636.1" } ] @@ -2571,7 +2571,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2580,7 +2580,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2589,7 +2589,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2598,7 +2598,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2607,7 +2607,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "intron_variant", "non_coding_transcript_variant" @@ -2619,7 +2619,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2632,7 +2632,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2649,7 +2649,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001242898.2" } ] @@ -2658,7 +2658,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2667,7 +2667,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2676,7 +2676,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2685,7 +2685,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2694,7 +2694,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -2705,7 +2705,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2719,7 +2719,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001242899.2" } ] @@ -2728,7 +2728,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2737,7 +2737,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2746,7 +2746,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2755,7 +2755,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2764,7 +2764,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -2775,7 +2775,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2789,7 +2789,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001242900.2" } ] @@ -2798,7 +2798,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2807,7 +2807,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2816,7 +2816,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2825,7 +2825,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2834,7 +2834,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -2845,7 +2845,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2859,7 +2859,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351641.2" } ] @@ -2868,7 +2868,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2877,7 +2877,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2886,7 +2886,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2895,7 +2895,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2904,7 +2904,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -2915,7 +2915,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2929,7 +2929,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351642.2" } ] @@ -2938,7 +2938,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2947,7 +2947,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2956,7 +2956,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2965,7 +2965,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -2974,7 +2974,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -2985,7 +2985,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -2999,7 +2999,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351643.2" } ] @@ -3008,7 +3008,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3017,7 +3017,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3026,7 +3026,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3035,7 +3035,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3044,7 +3044,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3055,7 +3055,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3069,7 +3069,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351644.2" } ] @@ -3078,7 +3078,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3087,7 +3087,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3096,7 +3096,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3105,7 +3105,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3114,7 +3114,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3125,7 +3125,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3139,7 +3139,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351645.2" } ] @@ -3148,7 +3148,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3157,7 +3157,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3166,7 +3166,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3175,7 +3175,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3184,7 +3184,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3195,7 +3195,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3209,7 +3209,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351646.2" } ] @@ -3218,7 +3218,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3227,7 +3227,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3236,7 +3236,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3245,7 +3245,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3254,7 +3254,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3265,7 +3265,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3279,7 +3279,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351647.2" } ] @@ -3288,7 +3288,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3297,7 +3297,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3306,7 +3306,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3315,7 +3315,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3324,7 +3324,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3335,7 +3335,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3349,7 +3349,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001351648.2" } ] @@ -3358,7 +3358,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3367,7 +3367,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3376,7 +3376,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3385,7 +3385,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3394,7 +3394,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3405,7 +3405,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3419,7 +3419,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001365819.1" } ] @@ -3428,7 +3428,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3437,7 +3437,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3446,7 +3446,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3455,7 +3455,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3464,7 +3464,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -3475,7 +3475,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -3489,7 +3489,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001365836.1" } ] @@ -3498,7 +3498,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3507,7 +3507,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3516,7 +3516,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3525,7 +3525,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3534,7 +3534,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3545,7 +3545,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3559,7 +3559,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_002972.4" } ] @@ -3568,7 +3568,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3577,7 +3577,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3586,7 +3586,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3595,7 +3595,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3604,7 +3604,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -3615,7 +3615,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -3629,7 +3629,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_014678.5" } ] @@ -3638,7 +3638,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3647,7 +3647,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3656,7 +3656,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3665,7 +3665,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3674,7 +3674,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "downstream_gene_variant" ] @@ -3685,7 +3685,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -3698,7 +3698,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -3713,7 +3713,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 5192 } ] @@ -3722,7 +3722,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:1591776" } ] @@ -3731,7 +3731,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=PEX10" } ] @@ -3740,7 +3740,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000157911" } ] @@ -3749,7 +3749,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable ubiquitin protein ligase activity. Predicted to be involved in cellular response to reactive oxygen species; protein import into peroxisome matrix, receptor recycling; and protein polyubiquitination. Located in peroxisomal membrane. Human ortholog(s) of this gene implicated in peroxisomal biogenesis disorder and peroxisome biogenesis disorder 6A. Orthologous to human PEX10 (peroxisomal biogenesis factor 10)." } ] @@ -3758,7 +3758,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable protein C-terminus binding activity. Predicted to be involved in protein import into peroxisome matrix. Located in peroxisomal membrane. Human ortholog(s) of this gene implicated in peroxisomal biogenesis disorder and peroxisome biogenesis disorder 6A. Orthologous to human PEX10 (peroxisomal biogenesis factor 10); INTERACTS WITH 2,3,7,8-tetrachlorodibenzodioxine; bisphenol A; paracetamol." } ] @@ -3767,7 +3767,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -3776,7 +3776,7 @@ "Zebrafish Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ZFIN:ZDB-GENE-041010-71" } ] @@ -3785,7 +3785,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=PEX10&navFilter=all" } ] @@ -3794,7 +3794,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:2684988" } ] @@ -3803,7 +3803,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:8851" } ] @@ -3812,7 +3812,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=5192" } ] @@ -3821,7 +3821,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This gene encodes a protein involved in import of peroxisomal matrix proteins. This protein localizes to the peroxisomal membrane. Mutations in this gene result in phenotypes within the Zellweger spectrum of peroxisomal biogenesis disorders, ranging from neonatal adrenoleukodystrophy to Zellweger syndrome. Alternative splicing results in two transcript variants encoding different isoforms. [provided by RefSeq, Jul 2008]" } ] @@ -3830,7 +3830,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000157911?dataset=gnomad_r2_1" } ] @@ -3839,7 +3839,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Neonatal adrenoleukodystrophy", "Peroxisome biogenesis disorder 6B", @@ -3855,7 +3855,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:8851" } ] @@ -3864,7 +3864,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "MGI:5639146", @@ -4120,7 +4120,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0000952: Jaundice", "HP:0000268: Dolichocephaly", @@ -4264,7 +4264,7 @@ "Zebrafish_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable metal ion binding activity. Predicted to be involved in protein import into peroxisome matrix. Predicted to be located in peroxisome. Predicted to be active in peroxisomal membrane. Human ortholog(s) of this gene implicated in peroxisomal biogenesis disorder and peroxisome biogenesis disorder 6A. Orthologous to human PEX10 (peroxisomal biogenesis factor 10)." } ] @@ -4273,7 +4273,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "PHENOTYPE: Mice homozygous for an ENU-induced allele exhibit partial neonatal mortality due to respiratory distress, loss of embryonic movement, and prenatal pathology including altered biochemistry, defects in axonal integrity, decreased Schwann cell number, and defects at the neuromuscular junction. [provided by MGI curators]" } ] @@ -4282,7 +4282,7 @@ "Zebrafish_Alliance_Genome_ZFIN_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -4291,7 +4291,7 @@ "Zebrafish_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -4300,7 +4300,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable ubiquitin protein ligase activity. Predicted to be involved in cellular response to reactive oxygen species; protein import into peroxisome matrix, receptor recycling; and protein polyubiquitination. Predicted to act upstream of or within protein transport. Predicted to be located in peroxisome. Predicted to be active in peroxisomal membrane. Is expressed in dorsal grey horn; medulla oblongata alar plate mantle layer; medulla oblongata basal plate mantle layer; midbrain mantle layer; and pons mantle layer. Human ortholog(s) of this gene implicated in peroxisomal biogenesis disorder and peroxisome biogenesis disorder 6A. Orthologous to human PEX10 (peroxisomal biogenesis factor 10)." } ] @@ -4309,7 +4309,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:1591776" } ] @@ -4318,7 +4318,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:1591776" } ] @@ -4327,7 +4327,7 @@ "Zebrafish_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/ZFIN:ZDB-GENE-041010-71" } ] @@ -4336,7 +4336,7 @@ "Zebrafish_Zebrafish_Information_Network_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://zfin.org/ZDB-GENE-041010-71" } ] @@ -4345,7 +4345,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:2684988" } ] @@ -4354,7 +4354,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:2684988" } ] @@ -4376,7 +4376,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001128827.4" } ] @@ -4385,7 +4385,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4394,7 +4394,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4403,7 +4403,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4412,7 +4412,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4421,7 +4421,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4432,7 +4432,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4446,7 +4446,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001321074.1" } ] @@ -4455,7 +4455,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4464,7 +4464,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4473,7 +4473,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4482,7 +4482,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4491,7 +4491,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4502,7 +4502,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4516,7 +4516,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001321075.3" } ] @@ -4525,7 +4525,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4534,7 +4534,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4543,7 +4543,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4552,7 +4552,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4561,7 +4561,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4572,7 +4572,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4586,7 +4586,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001321076.3" } ] @@ -4595,7 +4595,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4604,7 +4604,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4613,7 +4613,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4622,7 +4622,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4631,7 +4631,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4642,7 +4642,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4656,7 +4656,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001321077.3" } ] @@ -4665,7 +4665,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4674,7 +4674,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4683,7 +4683,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4692,7 +4692,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4701,7 +4701,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4712,7 +4712,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4726,7 +4726,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001365.4" } ] @@ -4735,7 +4735,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4744,7 +4744,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4753,7 +4753,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4762,7 +4762,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4771,7 +4771,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4782,7 +4782,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4796,7 +4796,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001369566.3" } ] @@ -4805,7 +4805,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4814,7 +4814,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4823,7 +4823,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4832,7 +4832,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4841,7 +4841,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "frameshift_variant" ] @@ -4852,7 +4852,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HIGH" } ] @@ -4866,7 +4866,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NR_135527.1" } ] @@ -4875,7 +4875,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4884,7 +4884,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4893,7 +4893,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4902,7 +4902,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4911,7 +4911,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "non_coding_transcript_exon_variant" ] @@ -4922,7 +4922,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODIFIER" } ] @@ -4935,7 +4935,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": null } ] @@ -4950,7 +4950,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 6305 } ] @@ -4959,7 +4959,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:1307090" } ] @@ -4968,7 +4968,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000100241" } ] @@ -4977,7 +4977,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=SBF1" } ] @@ -4986,7 +4986,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable guanyl-nucleotide exchange factor activity. Involved in spermatid development. Predicted to be located in cytoplasm and nuclear body. Human ortholog(s) of this gene implicated in Charcot-Marie-Tooth disease type 4B3. Orthologous to human SBF1 (SET binding factor 1)." } ] @@ -4995,7 +4995,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable guanyl-nucleotide exchange factor activity. Involved in spermatid development. Located in cytoplasm. Human ortholog(s) of this gene implicated in Charcot-Marie-Tooth disease type 4B3. Orthologous to human SBF1 (SET binding factor 1); INTERACTS WITH 2,3,7,8-tetrachlorodibenzodioxine; 2,6-dinitrotoluene; 6-propyl-2-thiouracil." } ] @@ -5004,7 +5004,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "RGD:631848", @@ -5194,7 +5194,7 @@ "Zebrafish Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ZFIN:ZDB-GENE-040718-139" } ] @@ -5203,7 +5203,7 @@ "Zebrafish_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable guanyl-nucleotide exchange factor activity and phosphatase regulator activity. Predicted to act upstream of or within regulation of GTPase activity. Human ortholog(s) of this gene implicated in Charcot-Marie-Tooth disease type 4B3. Orthologous to human SBF1 (SET binding factor 1)." } ] @@ -5212,7 +5212,7 @@ "Zebrafish_Alliance_Genome_ZFIN_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -5221,7 +5221,7 @@ "Zebrafish_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -5230,7 +5230,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:1925230" } ] @@ -5239,7 +5239,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=SBF1&navFilter=all" } ] @@ -5248,7 +5248,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:10542" } ] @@ -5257,7 +5257,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=6305" } ] @@ -5266,7 +5266,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This gene encodes a member of the protein-tyrosine phosphatase family. However, the encoded protein does not appear to be a catalytically active phosphatase because it lacks several amino acids in the catalytic pocket. This protein contains a Guanine nucleotide exchange factor (GEF) domain which is necessary for its role in growth and differentiation. Mutations in this gene have been associated with Charcot-Marie-Tooth disease 4B3. Pseudogenes of this gene have been defined on chromosomes 1 and 8. [provided by RefSeq, Dec 2014]" } ] @@ -5275,7 +5275,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000100241?dataset=gnomad_r2_1" } ] @@ -5284,7 +5284,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Charcot-Marie-Tooth disease, type 4B3" ] @@ -5295,7 +5295,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:10542" } ] @@ -5304,7 +5304,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0001763: Pes planus", "HP:0003676: Progressive", @@ -5338,7 +5338,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "MGI:7316771", @@ -5802,7 +5802,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "PHENOTYPE: Male homozygotes for a targeted null mutation exhibit male infertility associated with azoospermia, vacuolation of Sertoli cells, reduced spermatid formation, and eventual depletion of germ cells. [provided by MGI curators]" } ] @@ -5811,7 +5811,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable guanyl-nucleotide exchange factor activity. Acts upstream of or within spermatogenesis. Predicted to be located in cytoplasm and nuclear body. Is expressed in craniocervical region bone; nervous system; and neural retina. Used to study Charcot-Marie-Tooth disease type 4B3. Human ortholog(s) of this gene implicated in Charcot-Marie-Tooth disease type 4B3. Orthologous to human SBF1 (SET binding factor 1)." } ] @@ -5820,7 +5820,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:1307090" } ] @@ -5829,7 +5829,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:1307090" } ] @@ -5838,7 +5838,7 @@ "Zebrafish_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/ZFIN:ZDB-GENE-040718-139" } ] @@ -5847,7 +5847,7 @@ "Zebrafish_Zebrafish_Information_Network_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://zfin.org/ZDB-GENE-040718-139" } ] @@ -5856,7 +5856,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:1925230" } ] @@ -5865,7 +5865,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:1925230" } ] @@ -5887,7 +5887,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_000402.4" } ] @@ -5896,7 +5896,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "benign" } ] @@ -5905,7 +5905,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.018 } ] @@ -5914,7 +5914,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -5923,7 +5923,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -5932,7 +5932,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -5943,7 +5943,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -5957,7 +5957,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001042351.3" } ] @@ -5966,7 +5966,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "benign" } ] @@ -5975,7 +5975,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.03 } ] @@ -5984,7 +5984,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -5993,7 +5993,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -6002,7 +6002,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -6013,7 +6013,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -6027,7 +6027,7 @@ "transcript_id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "NM_001360016.2" } ] @@ -6036,7 +6036,7 @@ "Polyphen Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "benign" } ] @@ -6045,7 +6045,7 @@ "Polyphen Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0.03 } ] @@ -6054,7 +6054,7 @@ "SIFT Prediction": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "deleterious" } ] @@ -6063,7 +6063,7 @@ "SIFT Score": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 0 } ] @@ -6072,7 +6072,7 @@ "Consequences": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "missense_variant" ] @@ -6083,7 +6083,7 @@ "Impact": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MODERATE" } ] @@ -6096,7 +6096,7 @@ "ClinVar_Variantion_Id": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "100057" } ] @@ -6105,7 +6105,7 @@ "CADD": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 24.5 } ] @@ -6114,7 +6114,7 @@ "ClinVar_variant_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/clinvar/variation/100057" } ] @@ -6129,7 +6129,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 1742 } ] @@ -6138,7 +6138,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Intellectual developmental disorder 62" ] @@ -6149,7 +6149,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0003593: Infantile onset", "HP:0012771: Increased arm span", @@ -6173,7 +6173,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000132535" } ] @@ -6182,7 +6182,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:68424" } ] @@ -6191,7 +6191,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables several functions, including PDZ domain binding activity; enzyme binding activity; and signaling receptor binding activity. A structural constituent of postsynaptic density. Involved in several processes, including modulation of chemical synaptic transmission; positive regulation of cellular component organization; and postsynapse organization. Located in several cellular components, including dendrite; juxtaparanode region of axon; and postsynaptic density. Is active in glutamatergic synapse and postsynaptic density membrane. Colocalizes with postsynaptic membrane. Biomarker of Parkinson's disease and temporal lobe epilepsy. Human ortholog(s) of this gene implicated in autosomal dominant intellectual developmental disorder. Orthologous to human DLG4 (discs large MAGUK scaffold protein 4)." } ] @@ -6200,7 +6200,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=DLG4" } ] @@ -6209,7 +6209,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables several functions, including PDZ domain binding activity; enzyme binding activity; and signaling receptor binding activity. A structural constituent of postsynaptic density. Involved in several processes, including modulation of chemical synaptic transmission; positive regulation of cellular component organization; and postsynapse organization. Located in several cellular components, including dendrite; juxtaparanode region of axon; and postsynaptic density. Is active in glutamatergic synapse. Colocalizes with postsynaptic membrane. Biomarker of Parkinson's disease and temporal lobe epilepsy. Human ortholog(s) of this gene implicated in autosomal dominant intellectual developmental disorder. Orthologous to human DLG4 (discs large MAGUK scaffold protein 4); PARTICIPATES IN glutamate signaling pathway; Huntington's disease pathway; INTERACTS WITH (S)-nicotine; 17beta-estradiol; 2,2',4,4',5,5'-hexachlorobiphenyl." } ] @@ -6218,7 +6218,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -6227,7 +6227,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:2903" } ] @@ -6236,7 +6236,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:2903" } ] @@ -6245,7 +6245,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:1277959" } ] @@ -6254,7 +6254,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=DLG4&navFilter=all" } ] @@ -6263,7 +6263,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=1742" } ] @@ -6272,7 +6272,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This gene encodes a member of the membrane-associated guanylate kinase (MAGUK) family. It heteromultimerizes with another MAGUK protein, DLG2, and is recruited into NMDA receptor and potassium channel clusters. These two MAGUK proteins may interact at postsynaptic sites to form a multimeric scaffold for the clustering of receptors, ion channels, and associated signaling proteins. Multiple transcript variants encoding different isoforms have been found for this gene. [provided by RefSeq, Jul 2008]" } ] @@ -6281,7 +6281,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000132535?dataset=gnomad_r2_1" } ] @@ -6290,7 +6290,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "MGI:5295223", @@ -7381,7 +7381,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "PHENOTYPE: Homozygotes for a targeted null mutation exhibit severely impaired spatial learning, alterations in long-term potentiation and depression, and lack of hyperalgesia responses in a neuropathic pain model. [provided by MGI curators]" } ] @@ -7390,7 +7390,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables ionotropic glutamate receptor binding activity and scaffold protein binding activity. Involved in several processes, including dendritic spine morphogenesis; locomotory exploration behavior; and neurotransmitter receptor localization to postsynaptic specialization membrane. Acts upstream of or within protein localization to synapse; regulation of long-term neuronal synaptic plasticity; and synaptic vesicle maturation. Located in several cellular components, including axon; postsynaptic density membrane; and synaptic vesicle. Part of AMPA glutamate receptor complex. Is active in glutamatergic synapse. Colocalizes with postsynaptic membrane. Is expressed in central nervous system; dorsal root ganglion; olfactory epithelium; and retina. Used to study Williams-Beuren syndrome and autism spectrum disorder. Human ortholog(s) of this gene implicated in autosomal dominant intellectual developmental disorder. Orthologous to human DLG4 (discs large MAGUK scaffold protein 4)." } ] @@ -7399,7 +7399,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:68424" } ] @@ -7408,7 +7408,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:68424" } ] @@ -7417,7 +7417,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:1277959" } ] @@ -7426,7 +7426,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:1277959" } ] @@ -7441,7 +7441,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 2539 } ] @@ -7450,7 +7450,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Hemolytic anemia, G6PD deficient (favism)" ] @@ -7461,7 +7461,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0003593: Infantile onset", "HP:0000952: Jaundice", @@ -7493,7 +7493,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000160211" } ] @@ -7502,7 +7502,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=G6PD" } ] @@ -7511,7 +7511,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:2645" } ] @@ -7520,7 +7520,7 @@ "Zebrafish Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ZFIN:ZDB-GENE-070508-4" } ] @@ -7529,7 +7529,7 @@ "Zebrafish_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables UDP-glucose 6-dehydrogenase activity and glucose-6-phosphate dehydrogenase activity. Acts upstream of or within epiboly. Predicted to be active in cytosol. Used to study hemolytic anemia. Human ortholog(s) of this gene implicated in several diseases, including anemia (multiple); cerebrovascular disease; favism; malaria (multiple); and neonatal jaundice. Orthologous to human G6PD (glucose-6-phosphate dehydrogenase)." } ] @@ -7538,7 +7538,7 @@ "Zebrafish_Alliance_Genome_ZFIN_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -7547,7 +7547,7 @@ "Zebrafish_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "ZFIN:ZDB-FISH-190605-7", @@ -8262,7 +8262,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=G6PD&navFilter=all" } ] @@ -8271,7 +8271,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:4057" } ] @@ -8280,7 +8280,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=2539" } ] @@ -8289,7 +8289,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This gene encodes glucose-6-phosphate dehydrogenase. This protein is a cytosolic enzyme encoded by a housekeeping X-linked gene whose main function is to produce NADPH, a key electron donor in the defense against oxidizing agents and in reductive biosynthetic reactions. G6PD is remarkable for its genetic diversity. Many variants of G6PD, mostly produced from missense mutations, have been described with wide ranging levels of enzyme activity and associated clinical symptoms. G6PD deficiency may cause neonatal jaundice, acute hemolysis, or severe chronic non-spherocytic hemolytic anemia. Two transcript variants encoding different isoforms have been found for this gene. [provided by RefSeq, Jul 2008]" } ] @@ -8298,7 +8298,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000160211?dataset=gnomad_r2_1" } ] @@ -8307,7 +8307,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables NADP binding activity; glucose binding activity; and glucose-6-phosphate dehydrogenase activity. Involved in several processes, including negative regulation of cell growth involved in cardiac muscle cell development; pentose-phosphate shunt, oxidative branch; and positive regulation of calcium ion transmembrane transport via high voltage-gated calcium channel. Predicted to be located in several cellular components, including centriolar satellite; cytoplasmic side of plasma membrane; and intracellular membrane-bounded organelle. Predicted to be active in cytosol. Used to study cataract and transient cerebral ischemia. Biomarker of several diseases, including artery disease (multiple); hepatic encephalopathy; hyperhomocysteinemia; obesity; and phenylketonuria. Human ortholog(s) of this gene implicated in several diseases, including anemia (multiple); cerebrovascular disease; favism; malaria (multiple); and neonatal jaundice. Orthologous to human G6PD (glucose-6-phosphate dehydrogenase)." } ] @@ -8316,7 +8316,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables NADP binding activity; glucose binding activity; and glucose-6-phosphate dehydrogenase activity. Involved in several processes, including negative regulation of cell growth involved in cardiac muscle cell development; pentose-phosphate shunt, oxidative branch; and positive regulation of calcium ion transmembrane transport via high voltage-gated calcium channel. Located in cytosol and nucleus. Used to study cataract and transient cerebral ischemia. Biomarker of several diseases, including artery disease (multiple); hepatic encephalopathy; hyperhomocysteinemia; obesity; and phenylketonuria. Human ortholog(s) of this gene implicated in several diseases, including anemia (multiple); cerebrovascular disease; favism; malaria (multiple); and neonatal jaundice. Orthologous to human G6PD (glucose-6-phosphate dehydrogenase); PARTICIPATES IN pentose phosphate pathway; pentose phosphate pathway - oxidative phase; ribose 5-phosphate isomerase deficiency pathway; INTERACTS WITH (+)-schisandrin B; (+)-taxifolin; (R)-noradrenaline." } ] @@ -8325,7 +8325,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:4057" } ] @@ -8334,7 +8334,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -8343,7 +8343,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:2645" } ] @@ -8352,7 +8352,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:2645" } ] @@ -8361,7 +8361,7 @@ "Zebrafish_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/ZFIN:ZDB-GENE-070508-4" } ] @@ -8370,7 +8370,7 @@ "Zebrafish_Zebrafish_Information_Network_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://zfin.org/ZDB-GENE-070508-4" } ] @@ -8385,7 +8385,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 2290 } ] @@ -8394,7 +8394,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:2619" } ] @@ -8403,7 +8403,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000176165" } ] @@ -8412,7 +8412,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=FOXG1" } ] @@ -8421,7 +8421,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable sequence-specific double-stranded DNA binding activity. Predicted to be involved in negative regulation of DNA-templated transcription and regulation of transcription by RNA polymerase II. Predicted to act upstream of or within several processes, including neuron differentiation; positive regulation of neuroblast proliferation; and regulation of neuron differentiation. Predicted to be active in nucleus. Orthologous to human FOXG1 (forkhead box G1)." } ] @@ -8430,7 +8430,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable sequence-specific double-stranded DNA binding activity. Involved in aging and brain development. Predicted to be active in nucleus. Orthologous to human FOXG1 (forkhead box G1); INTERACTS WITH Cuprizon; dexamethasone; flavonoids." } ] @@ -8439,7 +8439,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -8448,7 +8448,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:1347464" } ] @@ -8457,7 +8457,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=FOXG1&navFilter=all" } ] @@ -8466,7 +8466,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:3811" } ] @@ -8475,7 +8475,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=2290" } ] @@ -8484,7 +8484,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000176165?dataset=gnomad_r2_1" } ] @@ -8493,7 +8493,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "This locus encodes a member of the fork-head transcription factor family. The encoded protein, which functions as a transcriptional repressor, is highly expressed in neural tissues during brain development. Mutations at this locus have been associated with Rett syndrome and a diverse spectrum of neurodevelopmental disorders defined as part of the FOXG1 syndrome. This gene is disregulated in many types of cancer and is the target of multiple microRNAs that regulate the proliferation of tumor cells. [provided by RefSeq, Jul 2020]" } ] @@ -8502,7 +8502,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:3811" } ] @@ -8511,7 +8511,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0002020: Gastroesophageal reflux", "HP:0003781: Excessive salivation", @@ -8582,7 +8582,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "FOXG1 syndrome due to 14q12 microdeletion", "Rett syndrome, congenital variant" @@ -8594,7 +8594,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "MGI:3530074", @@ -14069,7 +14069,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables sequence-specific DNA binding activity. Acts upstream of or within several processes, including neuron differentiation; positive regulation of neuroblast proliferation; and regulation of neuron differentiation. Located in nucleus. Is expressed in several structures, including central nervous system; embryo ectoderm; embryo endoderm; hemolymphoid system; and sensory organ. Used to study Rett syndrome. Orthologous to human FOXG1 (forkhead box G1)." } ] @@ -14078,7 +14078,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "PHENOTYPE: Homozygous mutants exhibit dramatically reduced cerebral hemispheres, missing ventral telencephalic structures, impaired migration of efferent thalamocortical axons, and multiple eye defects. Mutants die at birth from respiratory failure. [provided by MGI curators]" } ] @@ -14087,7 +14087,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:2619" } ] @@ -14096,7 +14096,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:2619" } ] @@ -14105,7 +14105,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:1347464" } ] @@ -14114,7 +14114,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:1347464" } ] @@ -14129,7 +14129,7 @@ "Entrez Gene Id": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": 4000 } ] @@ -14138,7 +14138,7 @@ "Rat Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "RGD:620456" } ] @@ -14147,7 +14147,7 @@ "Ensembl Gene Id": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ENSG00000160789" } ] @@ -14156,7 +14156,7 @@ "OMIM_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.omim.org/search?index=entry&start=1&sort=score+desc%2C+prefix_sort+desc&search=LMNA" } ] @@ -14165,7 +14165,7 @@ "Rat_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables protein phosphatase 1 binding activity. Involved in several processes, including cellular senescence; negative regulation of adipose tissue development; and positive regulation of osteoblast differentiation. Located in nuclear envelope and nuclear matrix. Used to study transient cerebral ischemia. Biomarker of arteriosclerosis. Human ortholog(s) of this gene implicated in several diseases, including Charcot-Marie-Tooth disease type 2B1; intrinsic cardiomyopathy (multiple); lipodystrophy (multiple); muscular dystrophy (multiple); and type 2 diabetes mellitus (multiple). Orthologous to human LMNA (lamin A/C)." } ] @@ -14174,7 +14174,7 @@ "Rat_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [] } ] @@ -14183,7 +14183,7 @@ "Rat_Alliance_Genome_RGD_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Enables protein phosphatase 1 binding activity. Involved in several processes, including cellular senescence; negative regulation of adipose tissue development; and positive regulation of osteoblast differentiation. Located in nuclear envelope and nuclear matrix. Used to study transient cerebral ischemia. Biomarker of arteriosclerosis. Human ortholog(s) of this gene implicated in several diseases, including Charcot-Marie-Tooth disease type 2B1; intrinsic cardiomyopathy (multiple); lipodystrophy (multiple); muscular dystrophy (multiple); and type 2 diabetes mellitus (multiple). Orthologous to human LMNA (lamin A/C); PARTICIPATES IN atherosclerosis pathway; arrhythmogenic right ventricular cardiomyopathy pathway; dilated cardiomyopathy pathway; INTERACTS WITH (+)-schisandrin B; 1,1,1-trichloro-2,2-bis(4-hydroxyphenyl)ethane; 1,1,1-Trichloro-2-(o-chlorophenyl)-2-(p-chlorophenyl)ethane." } ] @@ -14192,7 +14192,7 @@ "Zebrafish Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "ZFIN:ZDB-GENE-020424-3" } ] @@ -14201,7 +14201,7 @@ "Mouse Gene Identifier": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "MGI:96794" } ] @@ -14210,7 +14210,7 @@ "HPO_gene_search_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://hpo.jax.org/app/browse/search?q=LMNA&navFilter=all" } ] @@ -14219,7 +14219,7 @@ "HGNC_ID": [ { "data_source": "Ensembl", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "HGNC:6636" } ] @@ -14228,7 +14228,7 @@ "NCBI_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.ncbi.nlm.nih.gov/gene?Db=gene&Cmd=DetailsSearch&Term=4000" } ] @@ -14237,7 +14237,7 @@ "Gene Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "The protein encoded by this gene is part of the nuclear lamina, a two-dimensional matrix of proteins located next to the inner nuclear membrane. The lamin family of proteins make up the matrix and are highly conserved in evolution. During mitosis, the lamina matrix is reversibly disassembled as the lamin proteins are phosphorylated. Lamin proteins are thought to be involved in nuclear stability, chromatin structure and gene expression. Vertebrate lamins consist of two types, A and B. Alternative splicing results in multiple transcript variants. Mutations in this gene lead to several diseases: Emery-Dreifuss muscular dystrophy, familial partial lipodystrophy, limb girdle muscular dystrophy, dilated cardiomyopathy, Charcot-Marie-Tooth disease, and Hutchinson-Gilford progeria syndrome. [provided by RefSeq, May 2022]" } ] @@ -14246,7 +14246,7 @@ "gnomAD_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://gnomad.broadinstitute.org/gene/ENSG00000160789?dataset=gnomad_r2_1" } ] @@ -14255,7 +14255,7 @@ "OMIM": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "Familial isolated dilated cardiomyopathy", "LMNA-related congenital muscular dystrophy", @@ -14292,7 +14292,7 @@ "ClinGen_gene_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://search.clinicalgenome.org/kb/genes/HGNC:6636" } ] @@ -14301,7 +14301,7 @@ "HPO": [ { "data_source": "HPO", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ "HP:0011968: Feeding difficulties", "HP:0004492: Widely patent fontanelles and sutures", @@ -14793,7 +14793,7 @@ "Mouse_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "MGI:4459466", @@ -22384,7 +22384,7 @@ "Mouse_Alliance_Genome_MGI_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "PHENOTYPE: Homozygotes for targeted mutations exhibit retarded postnatal growth, muscular dystrophy, reduced fat stores, micrognathy, abnormal dentition, impaired gonadal development, malformed scapulae, hyperkeratosis, and die by 8 weeks of age. [provided by MGI curators]" } ] @@ -22393,7 +22393,7 @@ "Zebrafish_Alliance_Genome_ZFIN_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "" } ] @@ -22402,7 +22402,7 @@ "Zebrafish_Alliance_Genome_Models": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": [ { "id": "ZFIN:ZDB-FISH-230123-3", @@ -23102,7 +23102,7 @@ "Mouse_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to enable identical protein binding activity and protein phosphatase 1 binding activity. Predicted to be a structural constituent of cytoskeleton. Involved in several processes, including establishment or maintenance of microtubule cytoskeleton polarity; negative regulation of cardiac muscle hypertrophy in response to stress; and protein localization to nucleus. Acts upstream of or within several processes, including negative regulation of apoptotic signaling pathway; protein import into nucleus; and ventricular cardiac muscle cell development. Located in lamin filament and nuclear membrane. Is expressed in several structures, including embryo mesenchyme; epithelium; heart; immune system; and musculature. Used to study several diseases, including Charcot-Marie-Tooth disease type 2B1; achalasia; dilated cardiomyopathy 1A; muscular dystrophy (multiple); and progeria. Human ortholog(s) of this gene implicated in several diseases, including Charcot-Marie-Tooth disease type 2B1; intrinsic cardiomyopathy (multiple); lipodystrophy (multiple); muscular dystrophy (multiple); and type 2 diabetes mellitus (multiple). Orthologous to human LMNA (lamin A/C)." } ] @@ -23111,7 +23111,7 @@ "Zebrafish_Alliance_Genome_Automated_Summary": [ { "data_source": "Alliance Genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "Predicted to be a structural constituent of cytoskeleton. Acts upstream of or within several processes, including heart contraction; regulation of cellular senescence; and skeletal muscle tissue development. Predicted to be located in intermediate filament. Predicted to be active in nuclear envelope and nuclear lamina. Is expressed in several structures, including fin; head; mesoderm; musculature system; and pleuroperitoneal region. Used to study muscle tissue disease. Human ortholog(s) of this gene implicated in several diseases, including Charcot-Marie-Tooth disease type 2B1; intrinsic cardiomyopathy (multiple); lipodystrophy (multiple); muscular dystrophy (multiple); and type 2 diabetes mellitus (multiple). Orthologous to human LMNA (lamin A/C)." } ] @@ -23120,7 +23120,7 @@ "Rat_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/RGD:620456" } ] @@ -23129,7 +23129,7 @@ "Rat_Rat_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://rgd.mcw.edu/rgdweb/report/gene/main.html?id=RGD:620456" } ] @@ -23138,7 +23138,7 @@ "Zebrafish_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/ZFIN:ZDB-GENE-020424-3" } ] @@ -23147,7 +23147,7 @@ "Zebrafish_Zebrafish_Information_Network_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://zfin.org/ZDB-GENE-020424-3" } ] @@ -23156,7 +23156,7 @@ "Mouse_Alliance_Genome_url": [ { "data_source": "Rosalution", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "https://www.alliancegenome.org/gene/MGI:96794" } ] @@ -23165,7 +23165,7 @@ "Mouse_Mouse_Genome_Database_url": [ { "data_source": "Alliance genome", - "version": "", + "version": "rosalution-temp-manifest-00", "value": "http://www.informatics.jax.org/marker/MGI:96794" } ] diff --git a/frontend/src/models/annotations.js b/frontend/src/models/annotations.js index 65cff864..78648416 100644 --- a/frontend/src/models/annotations.js +++ b/frontend/src/models/annotations.js @@ -2,7 +2,7 @@ import Requests from '@/requests.js'; export default { async getAnnotations(analysisName, gene, variant) { - const baseUrl = '/rosalution/api/annotation'; + const baseUrl = '/rosalution/api/analysis'; const variantWithoutProtein = variant.replace(/\(.*/, ''); @@ -19,8 +19,8 @@ export default { } const [geneAnnotations, variantAnnotations] = await Promise.all([ - Requests.get(`${baseUrl}/gene/${gene}`), - ...insertIf(variant !== '', Requests.get(`${baseUrl}/hgvsVariant/${variantWithoutProtein}`)), + Requests.get(`${baseUrl}/${analysisName}/gene/${gene}`), + ...insertIf(variant !== '', Requests.get(`${baseUrl}/${analysisName}/hgvsVariant/${variantWithoutProtein}`)), ]); return {...geneAnnotations, ...variantAnnotations}; },