diff --git a/lalburst/python/lalburst/ligolw_burca2.py b/lalburst/python/lalburst/ligolw_burca2.py index db576a70a7be295cba6a50befbe2e092e151d09a..0d7fda2aa0eedc60b7b62af83fb20b6645071e62 100644 --- a/lalburst/python/lalburst/ligolw_burca2.py +++ b/lalburst/python/lalburst/ligolw_burca2.py @@ -51,7 +51,7 @@ from git_version import version as __version__ # -def assign_likelihood_ratios(connection, coinc_def_id, offset_vectors, vetoseglists, events_func, veto_func, ln_likelihood_ratio_func, likelihood_params_func, verbose = False, params_func_extra_args = ()): +def assign_likelihood_ratios(connection, coinc_def_id, offset_vectors, vetoseglists, events_func, veto_func, ln_likelihood_ratio_func, verbose = False): """ Assigns likelihood ratio values to coincidences. """ @@ -77,8 +77,7 @@ def assign_likelihood_ratios(connection, coinc_def_id, offset_vectors, vetosegli def ln_likelihood_ratio(coinc_event_id, time_slide_id): try: - params = likelihood_params_func([event for event in events_func(cursor, coinc_event_id) if veto_func(event, vetoseglists)], offset_vectors[time_slide_id], *params_func_extra_args) - return ln_likelihood_ratio_func(params) if params is not None else None + return ln_likelihood_ratio_func([event for event in events_func(cursor, coinc_event_id) if veto_func(event, vetoseglists)], offset_vectors[time_slide_id]) except: traceback.print_exc() raise @@ -109,7 +108,7 @@ WHERE cursor.close() -def assign_likelihood_ratios_xml(xmldoc, coinc_def_id, offset_vectors, vetoseglists, events_func, veto_func, ln_likelihood_ratio_func, likelihood_params_func, verbose = False, params_func_extra_args = ()): +def assign_likelihood_ratios_xml(xmldoc, coinc_def_id, offset_vectors, vetoseglists, events_func, veto_func, ln_likelihood_ratio_func, verbose = False): """ Assigns likelihood ratio values to coincidences (XML version). """ @@ -129,8 +128,7 @@ def assign_likelihood_ratios_xml(xmldoc, coinc_def_id, offset_vectors, vetosegli progressbar.increment() if coinc_event.coinc_def_id != coinc_def_id: continue - params = likelihood_params_func([event for event in events_func(None, coinc_event.coinc_event_id) if veto_func(event, vetoseglists)], offset_vectors[coinc_event.time_slide_id], *params_func_extra_args) - coinc_event.likelihood = ln_likelihood_ratio_func(params) if params is not None else None + coinc_event.likelihood = ln_likelihood_ratio_func([event for event in events_func(None, coinc_event.coinc_event_id) if veto_func(event, vetoseglists)], offset_vectors[coinc_event.time_slide_id]) del progressbar @@ -166,11 +164,9 @@ def sngl_burst_veto_func(event, vetoseglists): return event.ifo not in vetoseglists or event.peak not in vetoseglists[event.ifo] -def ligolw_burca2(database, ln_likelihood_ratio, params_func, verbose = False, params_func_extra_args = ()): +def ligolw_burca2(database, ln_likelihood_ratio_func, verbose = False): """ Assigns likelihood ratio values to excess power coincidences. - database is lalburst.SnglBurstUtils.CoincDatabase instance, and - ln_likelihood_ratio is a LnLikelihoodRatio class instance. """ # # Run core function @@ -183,10 +179,8 @@ def ligolw_burca2(database, ln_likelihood_ratio, params_func, verbose = False, p vetoseglists = database.vetoseglists, events_func = lambda cursor, coinc_event_id: sngl_burst_events_func(cursor, coinc_event_id, database.sngl_burst_table.row_from_cols), veto_func = sngl_burst_veto_func, - ln_likelihood_ratio_func = ln_likelihood_ratio, - likelihood_params_func = params_func, - verbose = verbose, - params_func_extra_args = params_func_extra_args + ln_likelihood_ratio_func = ln_likelihood_ratio_func, + verbose = verbose ) # diff --git a/lalburst/python/lalburst/snglcoinc.py b/lalburst/python/lalburst/snglcoinc.py index c8ebfd9351ba05a5ca67fba1a038f6d2fc5f63b6..287f8931d2d86cc45b5666c91af1c5d6ed1660b0 100644 --- a/lalburst/python/lalburst/snglcoinc.py +++ b/lalburst/python/lalburst/snglcoinc.py @@ -1535,12 +1535,12 @@ class LnLRDensity(object): histogram of the candidates observed in a search. Typically, the ranking statistic implementation will provide a - function to transform a candidate to a "params" object for use with - the .__call__() implementation, and so in this way a LnLRDensity - object is generally only meaningful in the context of the ranking + function to transform a candidate to the arguments to use with the + .__call__() implementation, and so in this way a LnLRDensity object + is generally only meaningful in the context of the ranking statistic class for which it has been constructed. """ - def __call__(self, params): + def __call__(self, *args, **kwargs): """ Evaluate. Return the natural logarithm of the density evaluated at the given parameters. @@ -1553,10 +1553,10 @@ class LnLRDensity(object): """ raise NotImplementedError - def increment(self, params, weight = 1.0): + def increment(self, *args, **kwargs): """ - Increment the counts defining this density by weight - (default = 1) at the given parameters. + Increment the counts defining this density at the given + parameters. """ raise NotImplementedError @@ -2120,7 +2120,7 @@ class LnLikelihoodRatioMixin(object): warnings.warn("inf/inf encountered") return lnP_signal - lnP_noise - def ln_lr_samples(self, random_params_seq, sampler_coinc_params = None, **kwargs): + def ln_lr_samples(self, random_params_seq, sampler_coinc_params = None): """ Generator that yields an unending sequence of 3-element tuples. Each tuple's elements are a value of the natural @@ -2139,15 +2139,16 @@ class LnLikelihoodRatioMixin(object): the two populations. random_params_seq is a sequence (generator is OK) yielding - 2-element tuples whose first element is a choice of - parameter values and whose second element is the natural + 3-element tuples whose first two elements provide the *args + and **kwargs values passed to the numerator and denominator + density functions, and whose thrid element is the natural logarithm of the probability density from which the parameters have been drawn evaluated at the parameters. - On each iteration, the sample of parameter values yielded - by random_params_seq is passed to our own .__call__() - method to evalute the log likelihood ratio at that choice - of parameter values. If sampler_coinc_params is None the + On each iteration, the *args and **kwargs values yielded by + random_params_seq is passed to our own .__call__() method + to evalute the log likelihood ratio at that choice of + parameter values. If sampler_coinc_params is None the parameters are also passed to the .__call__() mehods of the .numerator and .denominator attributes of self to obtain the signal and noise population densities at those @@ -2166,7 +2167,7 @@ class LnLikelihoodRatioMixin(object): else: lnP_signal_func = sampler_coinc_params.numerator lnP_noise_func = sampler_coinc_params.denominator - for params, lnP_params in random_params_seq: - lnP_signal = lnP_signal_func(params, **kwargs) - lnP_noise = lnP_noise_func(params, **kwargs) - yield self(params, **kwargs), lnP_signal - lnP_params, lnP_noise - lnP_params + for args, kwargs, lnP_params in random_params_seq: + lnP_signal = lnP_signal_func(*args, **kwargs) + lnP_noise = lnP_noise_func(*args, **kwargs) + yield self(*args, **kwargs), lnP_signal - lnP_params, lnP_noise - lnP_params diff --git a/lalinspiral/python/lalinspiral/thinca.py b/lalinspiral/python/lalinspiral/thinca.py index 95ede85be71a79e8e6b56fcd2917ec648ec4cb50..82d770fdac9eadcfefa5854cda026a4ffc481f59 100644 --- a/lalinspiral/python/lalinspiral/thinca.py +++ b/lalinspiral/python/lalinspiral/thinca.py @@ -109,17 +109,14 @@ InspiralCoincDef = lsctables.CoincDef(search = u"inspiral", search_coinc_type = class InspiralCoincTables(snglcoinc.CoincTables): - def __init__(self, xmldoc, likelihood_func = None, likelihood_params_func = None): + def __init__(self, xmldoc, likelihood_func = None): snglcoinc.CoincTables.__init__(self, xmldoc) # # configure the likelihood ratio evaluator # - if likelihood_func is None and likelihood_params_func is not None or likelihood_func is not None and likelihood_params_func is None: - raise ValueError("must provide both a likelihood function and a parameter function or neither") self.likelihood_func = likelihood_func - self.likelihood_params_func = likelihood_params_func # # find the coinc_inspiral table or create one if not found @@ -177,7 +174,7 @@ class InspiralCoincTables(snglcoinc.CoincTables): # if self.likelihood_func is not None: - coinc.likelihood = self.likelihood_func(self.likelihood_params_func(events, offsetvector)) + coinc.likelihood = self.likelihood_func(events, offsetvector) # # done @@ -343,7 +340,6 @@ def ligolw_thinca( seglists = None, veto_segments = None, likelihood_func = None, - likelihood_params_func = None, min_instruments = 2, min_log_L = None, verbose = False @@ -363,7 +359,7 @@ def ligolw_thinca( if verbose: print("indexing ...", file=sys.stderr) - coinc_tables = InspiralCoincTables(xmldoc, likelihood_func = likelihood_func, likelihood_params_func = likelihood_params_func) + coinc_tables = InspiralCoincTables(xmldoc, likelihood_func = likelihood_func) coinc_def_id = ligolw_coincs.get_coinc_def_id(xmldoc, coinc_definer_row.search, coinc_definer_row.search_coinc_type, create_new = True, description = coinc_definer_row.description) instruments = set(coinc_tables.time_slide_table.getColumnByName("instrument"))