From d2d8c91ca7d732203ed9dbb41eacd224ee67f0da Mon Sep 17 00:00:00 2001 From: Tamara Slosarek Date: Wed, 28 Aug 2024 13:07:34 +0200 Subject: [PATCH] feat(app): extend how lookups are matched --- app/lib/common/utilities/genome_data.dart | 32 ++++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/app/lib/common/utilities/genome_data.dart b/app/lib/common/utilities/genome_data.dart index 00e71e0f..bdb51f41 100644 --- a/app/lib/common/utilities/genome_data.dart +++ b/app/lib/common/utilities/genome_data.dart @@ -37,6 +37,10 @@ Future _saveDiplotypeAndActiveDrugsResponse( await CachedDrugs.erase(); } +String formatLookupMapKey(String gene, String variant) { + return '${gene}__$variant'; +} + Future updateGenotypeResults() async { final skipUpdate = !shouldUpdateGenotypeResults(); if (skipUpdate) return; @@ -47,17 +51,31 @@ Future updateGenotypeResults() async { final lookups = json.map(LookupInformation.fromJson); // use a HashMap for better time complexity - final lookupsHashMap = HashMap.fromIterable( - lookups, - key: (lookup) => '${lookup.gene}__${lookup.variant}', - value: (lookup) => lookup, - ); + // also add lookupkey for genes where, e.g., activity scores are reported as + // genotype, such as DPYD or "Indeterminate" + final Map lookupsHashMap = HashMap(); + for (final lookup in lookups) { + final variantKey = formatLookupMapKey(lookup.gene, lookup.variant); + final lookupKey = formatLookupMapKey(lookup.gene, lookup.lookupkey); + lookupsHashMap[variantKey] = lookup; + if (variantKey != lookupKey) lookupsHashMap[lookupKey] = lookup; + } final genotypeResults = {}; // we know that labData is present because we check this in // shouldUpdateGenotypeResults for (final labResult in UserData.instance.labData!) { - final key = '${labResult.gene}__${labResult.variant}'; - final lookup = lookupsHashMap[key]; + final variantAlternatives = [ + labResult.variant, + labResult.phenotype.toLowerCase(), // for HLA matching + ]; + LookupInformation? lookup; + for (final variant in variantAlternatives) { + final potentialLookupMapKey = formatLookupMapKey(labResult.gene, variant); + if (lookupsHashMap.containsKey(potentialLookupMapKey)) { + lookup = lookupsHashMap[potentialLookupMapKey]; + break; + } + } if (lookup == null) continue; final genotypeResult = GenotypeResult.fromGenotypeData(labResult, lookup); genotypeResults[genotypeResult.key.value] = genotypeResult;