Given multiple snpEff or VEP or BCFTools consequence annotations for a single variant, get an orderable python object for each annotation.
This will be used in gemini but should also be of general utility.
There is an effect base-class and then a sub-class for
snpEff, one for
VEP, and one for
Effect objects are orderable (via __le__ ) and should have an __eq__ method so that we can use functools.total_ordering to provide the other comparison operators.
Given 2 effects objects,
a < b == True iff the severity of
b is greater than
We will have a classmethod: `Effect.top_severity([eff1, ... effn]) that will return the single highest serverity if that exists or a list of the ties for highest
Rules for severity:
Given 2 annotations, a and b a is more severe than b if:
- b is a pseudogene and a is not
- a is coding and b is not
- a has higher severity than b ( see below)
- polyphen, then sift
- ??? transcript length? (we dont have access to this).