Skip to content

Commit c86b398

Browse files
committed
Fix MAC code expansion
- Depending upon whether the expanded alleles contains a : or not, the expansion should be treated differently.
1 parent e7e2c87 commit c86b398

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

pyard/pyard.py

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -178,22 +178,22 @@ def redux_gl(self, glstring: str, redux_type: str) -> str:
178178
return self.redux_gl("/".join(alleles), redux_type)
179179

180180
loc_allele = glstring.split(":")
181-
loc_name, code = loc_allele[0], loc_allele[1]
181+
loc_antigen, code = loc_allele[0], loc_allele[1]
182182

183183
# Handle XX codes
184-
if self.is_mac(glstring) and code == "XX" and loc_name in self.xx_codes:
185-
return self.redux_gl("/".join(self.xx_codes[loc_name]), redux_type)
184+
if self.is_mac(glstring) and code == "XX" and loc_antigen in self.xx_codes:
185+
return self.redux_gl("/".join(self.xx_codes[loc_antigen]), redux_type)
186186

187187
# Handle MAC
188188
if self.is_mac(glstring) and is_valid_mac_code(self.db_connection, code):
189189
if HLA_regex.search(glstring):
190190
# Remove HLA- prefix
191191
allele_name = glstring.split("-")[1]
192-
loc_name, code = allele_name.split(":")
193-
alleles = self._get_alleles(code, loc_name)
192+
loc_antigen, code = allele_name.split(":")
193+
alleles = self._get_alleles(code, loc_antigen)
194194
alleles = ["HLA-" + a for a in alleles]
195195
else:
196-
alleles = self._get_alleles(code, loc_name)
196+
alleles = self._get_alleles(code, loc_antigen)
197197
return self.redux_gl("/".join(alleles), redux_type)
198198

199199
return self.redux(glstring, redux_type)
@@ -242,19 +242,28 @@ def _is_valid_allele(self, allele):
242242
return allele in self.valid_alleles
243243
return True
244244

245-
def _get_alleles(self, code, loc_name) -> Iterable[str]:
245+
def _get_alleles(self, code, locus_antigen) -> Iterable[str]:
246246
"""
247247
Look up allele code in database and generate alleles
248248
:param code: allele code to look up
249-
:param loc_name: locus name for alleles
249+
:param locus_antigen: locus name for alleles
250250
:return: valid alleles corresponding to allele code
251251
"""
252252
alleles = mac_code_to_alleles(self.db_connection, code)
253+
254+
# It's an allelic expansion if any of the alleles have a `:`
255+
# else it's a group expansion
256+
is_allelic_expansion = any([':' in allele for allele in alleles])
257+
if is_allelic_expansion:
258+
locus = locus_antigen.split('*')[0] # Just keep the locus name
259+
alleles = [f'{locus}*{a}' for a in alleles]
260+
else:
261+
alleles = [f'{locus_antigen}:{a}' for a in alleles]
262+
253263
if self._remove_invalid:
254-
return filter(self._is_valid_allele,
255-
[f'{loc_name}:{a}' for a in alleles])
264+
return filter(self._is_valid_allele, alleles)
256265
else:
257-
return [f'{loc_name}:{a}' for a in alleles]
266+
return alleles
258267

259268
def _get_alleles_from_serology(self, serology) -> Iterable[str]:
260269
alleles = db.serology_to_alleles(self.db_connection, serology)
@@ -319,11 +328,11 @@ def mac_toG(self, allele: str) -> str:
319328
:return: ARS reduced allele
320329
:rtype: str
321330
"""
322-
loc_name, code = allele.split(":")
331+
locus_antigen, code = allele.split(":")
323332
if HLA_regex.search(allele):
324-
loc_name = loc_name.split("-")[1]
333+
locus_antigen = locus_antigen.split("-")[1] # Remove HLA- prefix
325334
if is_valid_mac_code(self.db_connection, code):
326-
alleles = self._get_alleles(code, loc_name)
335+
alleles = self._get_alleles(code, locus_antigen)
327336
group = [self.toG(a) for a in alleles]
328337
if "X" in group:
329338
return ''
@@ -358,12 +367,12 @@ def expand_mac(self, mac_code: str):
358367
:return: List
359368
:rtype: List
360369
"""
361-
loc_name, code = mac_code.split(":")
370+
locus_antigen, code = mac_code.split(":")
362371
if is_valid_mac_code(self.db_connection, code):
363372
if HLA_regex.search(mac_code):
364-
loc_name = loc_name.split("-")[1]
365-
return ['HLA-' + a for a in self._get_alleles(code, loc_name)]
373+
locus_antigen = locus_antigen.split("-")[1] # Remove HLA- prefix
374+
return ['HLA-' + a for a in self._get_alleles(code, locus_antigen)]
366375
else:
367-
return list(self._get_alleles(code, loc_name))
376+
return list(self._get_alleles(code, locus_antigen))
368377

369378
return ''

0 commit comments

Comments
 (0)