from enum import Enum
[docs]class ColumnSalience(Enum):
"""An enum that holds the salience levels options that can be used when
specifying data columns. Salience is used to indicate whether it would be best to
store the data in the data store or whether it can be just stored in
the local file-system and discarded after it has been used. This choice
is ultimately specified by the user by defining a salience threshold for
a store.
The salience is also used when providing information on what sinks
are available to avoid cluttering help menus
"""
primary = (
100,
"Primary input data, typically reconstructed by the instrument that "
"collects them",
)
raw = (
90,
"Raw data from the scanner that haven't been reconstructed and are "
"only typically used in advanced analyses",
)
publication = (
80,
"Results that would typically be used as main outputs in publications",
)
supplementary = (
60,
"Derivatives that would typically only be provided in "
"supplementary material",
)
qa = (
40,
"Derivatives that would typically be only kept for quality "
"assurance of analysis workflows",
)
debug = (
20,
"Derivatives that would typically only need to be checked "
"when debugging analysis workflows",
)
temp = (
0,
"Data only temporarily stored to pass between pipelines, e.g. that "
"operate on different row frequencies",
)
def __init__(self, level, desc):
self.level = level
self.desc = desc
def __lt__(self, other):
return self.level < other.level
def __le__(self, other):
return self.level <= other.level
def __str__(self):
return self.name
[docs] @classmethod
def default(self):
return self.supplementary
[docs]class ParameterSalience(Enum):
"""An enum that holds the salience levels options that can be used when
specifying class parameters. Salience is used to indicate whether the
parameter should show up by default when listing the available parameters
of an Analysis class in a menu.
"""
def __str__(self):
return self.name
debug = (0, "typically only needed to be altered for debugging")
recommended = (20, "recommended to keep defaults")
dependent = (
40,
"best value can be dependent on the context of the analysis, but the default "
"should work for most cases",
)
check = (60, "default value should be checked for validity for particular use case")
arbitrary = (80, "a default is provided, but it is not clear which value is best")
required = (100, "No sensible default value, should be provided")
[docs] @classmethod
def default(self):
return self.recommended
[docs]class DataQuality(Enum):
"""The quality of a data item. Can be manually specified or set by
automatic quality control methods
"""
usable = 100
noisy = 75
questionable = 50
artefactual = 25
unusable = 0
def __str__(self):
return self.name
def __eq__(self, other):
return self.value == other.value
def __lt__(self, other):
return self.value < other.value
def __le__(self, other):
return self.value <= other.value
[docs] @classmethod
def default(self):
return self.questionable
class CheckSalience(Enum):
"""An enum that holds the potential values for signifying how critical a check is to
run.
"""
def __str__(self):
return self.name
debug = (0, "typically only used to debug alterations to the pipeline")
potential = (20, "check can be run but not typically necessary")
prudent = (
40,
"it is prudent to run the check the results but you can skip if required",
)
recommended = (
60,
"recommended to run the check as pipeline fails 1~2% of the time",
)
strongly_recommended = (
80,
"strongly recommended to run the check as pipeline fails 5~10% of the time",
)
required = (100, "Pipeline will often fail, checking the results is required")
@classmethod
def default(self):
return self.recommended
class CheckStatus(Enum):
"""An enum that holds the potential values that signify how likely a pipeline has "
"failed"""
def __str__(self):
return self.name
failed = (0, "the pipeline has failed")
probable_fail = (25, "probable that the pipeline has failed")
unclear = (
50,
"cannot ascertain whether the pipeline has failed or not",
)
probable_pass = (75, "probable that the pipeline has run successfully")
passed = (100, "the pipeline has run successfully")
@classmethod
def default(self):
return self.unclear