mirror of
https://github.com/fjosw/pyerrors.git
synced 2025-05-15 20:13:41 +02:00
Merge pull request #22 from s-kuberski/feature/rw
Reweighting is now possible if the observable is defined only on a su…
This commit is contained in:
commit
37e93f754c
1 changed files with 5 additions and 5 deletions
|
@ -1238,22 +1238,22 @@ def reweight(weight, obs, **kwargs):
|
||||||
for i in range(len(obs)):
|
for i in range(len(obs)):
|
||||||
if len(obs[i].cov_names):
|
if len(obs[i].cov_names):
|
||||||
raise Exception('Error: Not possible to reweight an Obs that contains covobs!')
|
raise Exception('Error: Not possible to reweight an Obs that contains covobs!')
|
||||||
if sorted(weight.names) != sorted(obs[i].names):
|
if not set(obs[i].names).issubset(weight.names):
|
||||||
raise Exception('Error: Ensembles do not fit')
|
raise Exception('Error: Ensembles do not fit')
|
||||||
for name in weight.names:
|
for name in obs[i].names:
|
||||||
if not set(obs[i].idl[name]).issubset(weight.idl[name]):
|
if not set(obs[i].idl[name]).issubset(weight.idl[name]):
|
||||||
raise Exception('obs[%d] has to be defined on a subset of the configs in weight.idl[%s]!' % (i, name))
|
raise Exception('obs[%d] has to be defined on a subset of the configs in weight.idl[%s]!' % (i, name))
|
||||||
new_samples = []
|
new_samples = []
|
||||||
w_deltas = {}
|
w_deltas = {}
|
||||||
for name in sorted(weight.names):
|
for name in sorted(obs[i].names):
|
||||||
w_deltas[name] = _reduce_deltas(weight.deltas[name], weight.idl[name], obs[i].idl[name])
|
w_deltas[name] = _reduce_deltas(weight.deltas[name], weight.idl[name], obs[i].idl[name])
|
||||||
new_samples.append((w_deltas[name] + weight.r_values[name]) * (obs[i].deltas[name] + obs[i].r_values[name]))
|
new_samples.append((w_deltas[name] + weight.r_values[name]) * (obs[i].deltas[name] + obs[i].r_values[name]))
|
||||||
tmp_obs = Obs(new_samples, sorted(weight.names), idl=[obs[i].idl[name] for name in sorted(weight.names)])
|
tmp_obs = Obs(new_samples, sorted(obs[i].names), idl=[obs[i].idl[name] for name in sorted(obs[i].names)])
|
||||||
|
|
||||||
if kwargs.get('all_configs'):
|
if kwargs.get('all_configs'):
|
||||||
new_weight = weight
|
new_weight = weight
|
||||||
else:
|
else:
|
||||||
new_weight = Obs([w_deltas[name] + weight.r_values[name] for name in sorted(weight.names)], sorted(weight.names), idl=[obs[i].idl[name] for name in sorted(weight.names)])
|
new_weight = Obs([w_deltas[name] + weight.r_values[name] for name in sorted(obs[i].names)], sorted(obs[i].names), idl=[obs[i].idl[name] for name in sorted(obs[i].names)])
|
||||||
|
|
||||||
result.append(derived_observable(lambda x, **kwargs: x[0] / x[1], [tmp_obs, new_weight], **kwargs))
|
result.append(derived_observable(lambda x, **kwargs: x[0] / x[1], [tmp_obs, new_weight], **kwargs))
|
||||||
result[-1].reweighted = True
|
result[-1].reweighted = True
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue