nmdp-bioinformatics / py-ard

HLA ARD Reduction in Python
https://py-ard.org/
GNU Lesser General Public License v3.0
17 stars 13 forks source link

Proposal to add new reduction type - U2: Unambiguous Reduction to 2 fields #121

Closed pbashyal-nmdp closed 2 years ago

pbashyal-nmdp commented 3 years ago

We propose a new reduction mode, U2 for Unambiguous Reduction. This is a request made in collaboration with CVG.

We lose typing precision when we reduce to 2 fields with lgx and lg as it reduces to G group before reducing to 2 fields.

>>> ard.redux_gl('B*44:27:01:01', 'lgx')
'B*44:02'
>>> ard.redux_gl('B*44:27:01:02', 'lgx')
'B*44:02'

U2 type of reduction: For cases when want 2 field reduction but we don't want additional ambiguity with G group reduction.
In general:

With U2:

>>> ard.redux_gl('B*44:27:01:01', 'U2')
'B*44:27'

Use case as specified by CVG:

lgragert commented 3 years ago

Make sure to include logic to determine if expression characters should propagate downward.

DRB5*01:08N is valid nomenclature, per Steve Marsh.

DRB5*01:08:01N and DRB5*01:08:02N are currently the only allelic variants of DRB5*01:08N.

pbashyal-nmdp commented 2 years ago

Make sure to include logic to determine if expression characters should propagate downward. DRB5*01:08N is valid nomenclature, per Steve Marsh.

I don't see DRB5*01:08N in Allelelist.txt file ? How do we know it's valid ?

lgragert commented 2 years ago

From: Marsh, Steven Date: Tuesday, September 21, 2021 at 3:51 PM To: Gragert, Loren Subject: Re: DRB5*01:08N - Valid Nomenclature?

External Sender. Be aware of links, attachments and requests. Hi Loren

I suppose it is a valid truncation of DRB501:08:01N or DRB501:08:02N.

On another matter, are you ready to review papers again? I saw something submitted today and thought of you 😉

Steve


Professor Steven GE Marsh, BSc PhD ARCS FRCPath Chief Bioinformatics and Immunogenetics Officer & Deputy Director of Research, Anthony Nolan Research Institute Professor of Immunogenetics, Cancer Institute, University College London Anthony Nolan Research Institute, Royal Free Campus, Pond Street, London NW3 2QG, United Kingdom P: +44 20 7284 8321 | M: +44 7391 016866 |

HLA Informatics Group | www.anthonynolan.org/HIG/ IPD-IMGT/HLA Database | www.ebi.ac.uk/ipd/imgt/hla/ IPD Databases | www.ebi.ac.uk/ipd/ HLA Nomenclature | hla.alleles.org

On 21 Sep 2021, at 21:48, Gragert, Loren wrote:

Hi Steve,

Is “DRB5*01:08N” is valid nomenclature?

DRB501:08:01N and DRB501:08:02N are the only three-field variants of this allele.

Loren

pbashyal-nmdp commented 2 years ago

Haha ok. Are there other exceptions that are not listed ?

lgragert commented 2 years ago

The general rule is that expression characters can propagate up to two field level if all three-field and/or four-field alleles have the same expression character.

mmaiers-nmdp commented 2 years ago

The key term is “all”. If one of the possibilities doesn’t have the expression character then it can’t propagate up.

pbashyal-nmdp commented 2 years ago

There seem to be 70 such reductions. Some Examples:

A*01:04:01:01N
A*01:04:01:02N

A*01:52:01N
A*01:52:02N

A*02:314:01N
A*02:314:02N

A*02:468:01N
A*02:468:02N

A*02:696:01N
A*02:696:02N

A*03:01:01:02N

B*15:245:01Q
B*15:245:02Q

B*18:01:01:12Q
B*18:01:01:42Q

B*56:01:01:05S

Broken down by expression character counts:

pbashyal-nmdp commented 2 years ago

See PR #129 for the U2 mode:

Here's the feature test for the U2 cases. See tests/features/u2_reduction.feature

Feature: U2 Reduction # tests/features/u2_reduction.feature:1
  Unambiguous Reduction to 2 fields
  For cases when we want 2 field reduction, but we don't want additional
  ambiguity with G group reduction.
  In general:
  - If the 2 field reduction is unambiguous, reduce to 2 field level
  - If ambiguous, reduce to G group level
  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.1 Unambiguous Reductions  # tests/features/u2_reduction.feature:18
    Given the allele as A*01:04:01:01N                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be A*01:04N                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.2 Unambiguous Reductions  # tests/features/u2_reduction.feature:19
    Given the allele as A*01:04:01:02N                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be A*01:04N                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.3 Unambiguous Reductions  # tests/features/u2_reduction.feature:21
    Given the allele as A*01:52:01N                                                # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be A*01:52N                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.4 Unambiguous Reductions  # tests/features/u2_reduction.feature:22
    Given the allele as A*01:52:02N                                                # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be A*01:52N                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.5 Unambiguous Reductions  # tests/features/u2_reduction.feature:24
    Given the allele as DRB5*01:08:01N                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be DRB5*01:08N                             # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.6 Unambiguous Reductions  # tests/features/u2_reduction.feature:25
    Given the allele as DRB5*01:08:02N                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be DRB5*01:08N                             # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.7 Unambiguous Reductions  # tests/features/u2_reduction.feature:27
    Given the allele as B*56:01:01:05S                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*56:01S                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @1.8 Unambiguous Reductions  # tests/features/u2_reduction.feature:28
    Given the allele as B*39:01:01:02L                                             # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                  # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*39:01L                                # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @2.1 Ambiguous Reductions  # tests/features/u2_reduction.feature:33
    Given the allele as B*44:66                                                  # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*44:66                               # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @2.2 Ambiguous Reductions  # tests/features/u2_reduction.feature:34
    Given the allele as B*44:270:01                                              # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*44:270                              # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @2.3 Ambiguous Reductions  # tests/features/u2_reduction.feature:36
    Given the allele as B*44:270:01/B*44:270:02                                  # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*44:270                              # tests/steps/redux_allele.py:27

  Scenario Outline: Reduce to 2 Unambiguous feilds -- @2.4 Ambiguous Reductions  # tests/features/u2_reduction.feature:38
    Given the allele as B*44:66:01/B*44:66:02                                    # tests/steps/redux_allele.py:7
    When reducing on the U2 level                                                # tests/steps/redux_allele.py:12
    Then the reduced allele is found to be B*44:66                               # tests/steps/redux_allele.py:27

1 feature passed, 0 failed, 0 skipped
12 scenarios passed, 0 failed, 0 skipped
36 steps passed, 0 failed, 0 skipped, 0 undefined
Took 0m0.006s