Source code for csky.inspect

# inspect.py

"""Find csky objects inside other csky objects."""

from . import pdf, llh, trial

[docs] def get_llh_eval(L, key=0): """Get a specific :class:`csky.llh.LLHEvaluator` from a :class:`csky.llh.MultiLLHEvaluator`.""" if isinstance(key, int): L = L.llhs[key] else: Ls = [l for l in L.llhs if l.llh_model.ana.key == key] if not Ls: raise KeyError('key {} not found'.format(key)) elif len(Ls) > 2: raise KeyError('ambiguous key: {}'.format(key)) L = Ls[0] if not len(L.llhs) == 1: raise TypeError('did not resolve a unique LLHEvaluator') return L
[docs] def get_llh_model(L, key=0): """Get a :class:`csky.llh.LLHModel` from a :class:`csky.llh.MultiLLHEvaluator` or :class:`csky.trial.TrialRunner`.""" if isinstance(L, trial.TrialRunner): llh_models = L.llh_models elif isinstance(L, llh.LLHEvaluatorBase): llh_models = [l.llh_model for l in L.llhs] if isinstance(key, int): llh_model = llh_models[key] else: llh_models = [l for l in llh_models if llh_model.ana.key == key] if not llh_models: raise KeyError('key {} not found'.format(key)) elif len(llh_models) > 2: raise KeyError('ambiguous key: {}'.format(key)) llh_model = llh_models[0] return llh_model
[docs] def get_pdf_ratio_model(L, key=0): """Get the overall :class:`csky.pdf.PDFRatioModel`.""" llh_model = get_llh_model(L, key=key) return llh_model.pdf_ratio_model
[docs] def get_space_model(L, key=0): """Get the spatial :class:`csky.pdf.PDFRatioModel`.""" prm = get_pdf_ratio_model(L, key) acc_model = prm.acc_weighted_model if isinstance(acc_model, pdf.SpaceTimePDFRatioModel): return acc_model.space_model else: assert 'SpacePDF' in acc_model.__class__.__name__, 'space model not found' return acc_model
[docs] def get_time_model(L, key=0): """Get the temporal :class:`csky.pdf.PDFRatioModel`.""" prm = get_pdf_ratio_model(L, key) acc_model = prm.acc_weighted_model if isinstance(acc_model, pdf.SpaceTimePDFRatioModel): return acc_model.time_model else: raise TypeError('time model not found')
[docs] def get_energy_model(L, key=0): """Get the energy :class:`csky.pdf.PDFRatioModel`.""" prm = get_pdf_ratio_model(L, key) models = prm.models[1:] for model in models: if 'EnergyPDF' in model.__class__.__name__: return model raise TypeError('energy model not found')
[docs] def get_pdf_ratio_evals(L, key=0): """Get the overall :class:`csky.pdf.PDFRatioEvaluator`.""" L = get_llh_eval(L, key) return L.evaluators
[docs] def get_space_eval(L, key=0, i=0): """Get the spatial :class:`csky.pdf.PDFRatioEvaluator`.""" eval = get_pdf_ratio_evals(L, key)[i] if isinstance(eval, pdf.MultiPDFRatioEvaluator): eval = eval.evaluators[0] if isinstance(eval, pdf.SpaceTimePDFRatioEvaluator): eval = eval.space_evaluator if 'SpacePDF' in eval.__class__.__name__: return eval else: raise TypeError('space evaluator not found')
[docs] def get_time_eval(L, key=0, i=0): """Get the temporal :class:`csky.pdf.PDFRatioEvaluator`.""" eval = get_pdf_ratio_evals(L, key)[i] if isinstance(eval, pdf.MultiPDFRatioEvaluator): eval = eval.evaluators[0] if isinstance(eval, pdf.SpaceTimePDFRatioEvaluator): eval = eval.time_evaluator if 'TimePDF' in eval.__class__.__name__: return eval else: raise TypeError('time evaluator not found')
[docs] def get_energy_eval(L, key=0, i=0): """Get the energy :class:`csky.pdf.PDFRatioEvaluator`.""" eval = get_pdf_ratio_evals(L, key)[i] if isinstance(eval, pdf.MultiPDFRatioEvaluator): for eval in eval.evaluators: if 'EnergyPDF' in eval.__class__.__name__: return eval raise TypeError('energy evaluator not found')