Source code for koa_middleware.selector_base
from .database import CalibrationDB
__all__ = ['CalibrationSelector']
[docs]
class CalibrationSelector:
"""
Base class for calibration selectors. Can be used to select one or a group (e.g. bracketing etalon exposures) of calibrations.
"""
[docs]
def select(self, input, db : CalibrationDB, **kwargs):
"""
Select the best calibration for the given input. This method should not be overriden by subclasses in most cases.
Args:
input: Input data file or model object to select a calibration for.
db (CalibrationDB): Database session for querying.
kwargs: Additional filtering parameters specific for the selector.
Returns:
Any: Selected calibration file or model.
"""
result = self._select(input, db, **kwargs)
if result is None:
result = self.select_fallback(input, db, **kwargs) # TODO: Implement fallback selection
return result
def _select(self, input, db : CalibrationDB, **kwargs):
"""
Internal method to select the best calibration. Can be overridden by all subclasses. By default, it calls get_candidates followed by select_best.
Args:
input: Input data file or model object to select a calibration for.
db: Database session for querying.
kwargs: Additional filtering parameters
Returns:
Selected calibration file(s).
"""
candidates = self.get_candidates(input, db, **kwargs)
result = self.select_best(input, candidates, **kwargs)
return result
[docs]
def get_candidates(self, input, db : CalibrationDB, **kwargs):
"""
Get initial candidates.
Args:
input: Input data file or model object to select a calibration for.
candidates: Initial query of candidates.
kwargs: Additional filtering parameters.
Returns:
Candidate calibrations.
"""
raise NotImplementedError(f"Class {self.__class__.__name__} must implement method get_candidates.")
[docs]
def select_best(self, input, candidates, **kwargs):
"""
Select the best calibration(s) based on the candidates. By default, it returns the first candidate. This should be overriden by most subclasses.
Args:
input: Input data file or model object to select a calibration for.
candidates: Candidate calibrations returned from self.get_candidates().
kwargs: Additional filtering parameters.
Returns:
Selected calibration file(s).
"""
return candidates[0] if candidates else None
[docs]
def select_fallback(self, input, db : CalibrationDB, **kwargs):
"""
Select a fallback calibration if no suitable candidates are found. By default, it returns None. This should be overriden by most subclasses.
Args:
input: Input data file or model object to select a calibration for.
db: Database session for querying.
kwargs: Additional filtering parameters.
Returns:
Fallback calibration file(s).
"""
return None