@@ -140,7 +140,7 @@ def _get_vrs_ref_allele_seq(
140140 metadata : TargetGene ,
141141 urn : str ,
142142 tx_select_results : TxSelectResult | None ,
143- ) -> Extension :
143+ ) -> Extension | None :
144144 """Create `vrs_ref_allele_seq` property."""
145145 start , end = _offset_allele_ref_seq (urn , allele .location .start , allele .location .end )
146146 if (
@@ -161,8 +161,12 @@ def _get_vrs_ref_allele_seq(
161161 seq = f"ga4gh:{ allele .location .sequenceReference .refgetAccession } " # type: ignore
162162 sr = get_seqrepo ()
163163 ref = sr .get_sequence (seq , start , end )
164- if ref is None :
165- raise ValueError
164+
165+ if not ref :
166+ msg = f"Could not retrieve reference sequence for allele { allele .id } in urn { urn } with start { start } and end { end } "
167+ _logger .warning (msg )
168+ return None
169+
166170 return Extension (type = "Extension" , name = "vrs_ref_allele_seq" , value = ref )
167171
168172
@@ -256,23 +260,28 @@ def _annotate_allele_mapping(
256260 post_mapped : Allele = mapped_score .post_mapped
257261
258262 # get vrs_ref_allele_seq for pre-mapped variants
259- pre_mapped .extensions = [
260- _get_vrs_ref_allele_seq (pre_mapped , metadata , urn , tx_results )
261- ]
263+ ref_allele_seq_extension = _get_vrs_ref_allele_seq (
264+ pre_mapped , metadata , urn , tx_results
265+ )
266+ if ref_allele_seq_extension is not None :
267+ pre_mapped .extensions = [ref_allele_seq_extension ]
262268
263269 if post_mapped :
264270 # Determine reference sequence
265271 if mapped_score .annotation_layer == AnnotationLayer .GENOMIC :
266272 sequence_id = f"ga4gh:{ mapped_score .post_mapped .location .sequenceReference .refgetAccession } "
267273 accession = get_chromosome_identifier_from_vrs_id (sequence_id )
268274 if accession is None :
269- raise ValueError
270- if accession .startswith ("refseq:" ):
275+ accession = None
276+ mapped_score .error_message = "Could not determine accession for this annotation. No allele expression is available."
277+ elif accession .startswith ("refseq:" ):
271278 accession = accession [7 :]
272279 else :
273280 if tx_results is None or isinstance (tx_results , TxSelectError ):
274- raise ValueError # impossible by definition
275- accession = tx_results .np
281+ accession = None
282+ mapped_score .error_message = "Could not determine accession for this annotation. No allele expression is available."
283+ else :
284+ accession = tx_results .np
276285
277286 sr = get_seqrepo ()
278287 loc = mapped_score .post_mapped .location
@@ -281,8 +290,9 @@ def _annotate_allele_mapping(
281290 post_mapped .extensions = [
282291 Extension (type = "Extension" , name = "vrs_ref_allele_seq" , value = ref )
283292 ]
284- hgvs_string , syntax = _get_hgvs_string (post_mapped , accession )
285- post_mapped .expressions = [Expression (syntax = syntax , value = hgvs_string )]
293+ if accession :
294+ hgvs_string , syntax = _get_hgvs_string (post_mapped , accession )
295+ post_mapped .expressions = [Expression (syntax = syntax , value = hgvs_string )]
286296
287297 if vrs_version == VrsVersion .V_1_3 :
288298 pre_mapped = _allele_to_vod (pre_mapped )
@@ -295,9 +305,7 @@ def _annotate_allele_mapping(
295305 mavedb_id = mapped_score .accession_id ,
296306 score = float (mapped_score .score ) if mapped_score .score else None ,
297307 annotation_layer = mapped_score .annotation_layer ,
298- error_message = mapped_score .error_message
299- if mapped_score .error_message
300- else None , # TODO might not need if statement here
308+ error_message = mapped_score .error_message ,
301309 )
302310
303311
@@ -311,23 +319,32 @@ def _annotate_haplotype_mapping(
311319 """Perform annotations and, if necessary, create VRS 1.3 equivalents for haplotype mappings."""
312320 pre_mapped : Haplotype = mapped_score .pre_mapped # type: ignore
313321 post_mapped : Haplotype = mapped_score .post_mapped # type: ignore
322+
314323 # get vrs_ref_allele_seq for pre-mapped variants
315324 for allele in pre_mapped .members :
316- allele .extensions = [_get_vrs_ref_allele_seq (allele , metadata , urn , tx_results )]
325+ ref_allele_seq_extension = _get_vrs_ref_allele_seq (
326+ allele , metadata , urn , tx_results
327+ )
328+ if ref_allele_seq_extension is not None :
329+ allele .extensions = [ref_allele_seq_extension ]
317330
318331 if post_mapped :
319332 # Determine reference sequence
320333 if mapped_score .annotation_layer == AnnotationLayer .GENOMIC :
321334 sequence_id = f"ga4gh:{ post_mapped .members [0 ].location .sequenceReference .refgetAccession } "
322335 accession = get_chromosome_identifier_from_vrs_id (sequence_id )
323336 if accession is None :
324- raise ValueError
325- if accession .startswith ("refseq:" ):
337+ accession = None
338+ mapped_score .error_message = "Could not determine accession for this annotation. No allele expression is available."
339+ elif accession .startswith ("refseq:" ):
326340 accession = accession [7 :]
327341 else :
328342 if tx_results is None or isinstance (tx_results , TxSelectError ):
329- raise ValueError # impossible by definition
330- accession = tx_results .np
343+ # impossible by definition
344+ accession = None
345+ mapped_score .error_message = "Could not determine accession for this annotation. No allele expression is available."
346+ else :
347+ accession = tx_results .np
331348
332349 sr = get_seqrepo ()
333350 for allele in post_mapped .members :
@@ -337,8 +354,9 @@ def _annotate_haplotype_mapping(
337354 allele .extensions = [
338355 Extension (type = "Extension" , name = "vrs_ref_allele_seq" , value = ref )
339356 ]
340- hgvs , syntax = _get_hgvs_string (allele , accession )
341- allele .expressions = [Expression (syntax = syntax , value = hgvs )]
357+ if accession :
358+ hgvs , syntax = _get_hgvs_string (allele , accession )
359+ allele .expressions = [Expression (syntax = syntax , value = hgvs )]
342360
343361 if vrs_version == VrsVersion .V_1_3 :
344362 pre_mapped = _haplotype_to_haplotype_1_3 (pre_mapped )
@@ -351,9 +369,7 @@ def _annotate_haplotype_mapping(
351369 mavedb_id = mapped_score .accession_id ,
352370 score = float (mapped_score .score ) if mapped_score .score is not None else None ,
353371 annotation_layer = mapped_score .annotation_layer ,
354- error_message = mapped_score .error_message
355- if mapped_score .error_message
356- else None , # TODO might not need if statement here
372+ error_message = mapped_score .error_message ,
357373 )
358374
359375
@@ -388,6 +404,7 @@ def annotate(
388404 ScoreAnnotationWithLayer (
389405 mavedb_id = mapped_score .accession_id ,
390406 score = float (mapped_score .score ) if mapped_score .score else None ,
407+ vrs_version = vrs_version ,
391408 error_message = mapped_score .error_message ,
392409 )
393410 )
@@ -410,8 +427,16 @@ def annotate(
410427 )
411428 )
412429 else :
413- # TODO how to combine this error message with other potential error messages?
414- ValueError ("inconsistent variant structure" )
430+ score_annotations .append (
431+ ScoreAnnotationWithLayer (
432+ pre_mapped = mapped_score .pre_mapped ,
433+ post_mapped = mapped_score .post_mapped ,
434+ vrs_version = vrs_version ,
435+ mavedb_id = mapped_score .accession_id ,
436+ score = float (mapped_score .score ) if mapped_score .score else None ,
437+ error_message = f"Multiple issues with annotation: Inconsistent variant structure (Allele and Haplotype mix).{ ' ' + mapped_score .error_message if mapped_score .error_message else '' } " ,
438+ )
439+ )
415440
416441 return score_annotations
417442
@@ -519,11 +544,6 @@ def _set_scoreset_layer(
519544 expressions. If genomic expressions are available, that's what we'd like to use.
520545 This function tells us how to filter the final annotation objects.
521546 """
522- if urn .startswith ("urn:mavedb:00000097" ):
523- _logger .debug (
524- "Manually selecting protein annotation for scores from urn:mavedb:00000097"
525- )
526- return AnnotationLayer .PROTEIN
527547 for mapping in mappings :
528548 if mapping .annotation_layer == AnnotationLayer .GENOMIC :
529549 return AnnotationLayer .GENOMIC
0 commit comments