def calculate_total_errors(variable, is_number_list, min_errs, max_errs, values): for i, entry in enumerate(variable['values']): if not is_number_list[i]: continue # skip non-numeric y values if 'value' in entry: values.append(entry['value']) if 'errors' in entry: errors_min = 0.0 errors_max = 0.0 for error in entry['errors']: if 'asymerror' in error: err_minus = error_value_processor(entry['value'], error['asymerror']['minus']) err_plus = error_value_processor(entry['value'], error['asymerror']['plus']) errors_min += pow(min(err_plus, err_minus, 0.0), 2) errors_max += pow(max(err_plus, err_minus, 0.0), 2) elif 'symerror' in error: try: err = error_value_processor(entry['value'], error['symerror']) errors_min += pow(err, 2) errors_max += pow(err, 2) except TypeError: print log.error('TypeError encountered when parsing {0}'.format(error['symerror'])) min_errs.append(sqrt(errors_min)) max_errs.append(sqrt(errors_max)) elif 'low' in entry and 'high' in entry: min_errs.append(entry['value'] - entry['low']) max_errs.append(entry['high'] - entry['value']) else: min_errs.append(0.0) max_errs.append(0.0) else: middle_val = (entry['high'] - entry['low']) * 0.5 + entry['low'] values.append(middle_val) min_errs.append(middle_val - entry['low']) max_errs.append(entry['high'] - middle_val)
def calculate_total_errors(variable, is_number_list, min_errs, max_errs, values, err_breakdown={}): for i, entry in enumerate(variable['values']): if not is_number_list[i]: continue # skip non-numeric y values if 'value' in entry: values.append(entry['value']) if 'errors' in entry: errors_min = 0.0 errors_max = 0.0 err_breakdown[i] = {} # process the error labels to ensure uniqueness ArrayWriter.process_error_labels(entry) for error in entry['errors']: label = error.get('label', 'error') err_breakdown[i][label] = {} if 'asymerror' in error: err_minus = error_value_processor( entry['value'], error['asymerror']['minus']) err_plus = error_value_processor( entry['value'], error['asymerror']['plus']) errors_min += pow(min(err_plus, err_minus, 0.0), 2) errors_max += pow(max(err_plus, err_minus, 0.0), 2) err_breakdown[i][label][ 'up'] = err_plus # want to maintain directionality of errors err_breakdown[i][label][ 'dn'] = err_minus # want to maintain directionality of errors elif 'symerror' in error: try: err = error_value_processor( entry['value'], error['symerror']) errors_min += pow(err, 2) errors_max += pow(err, 2) err_breakdown[i][label]['up'] = err err_breakdown[i][label]['dn'] = -err except TypeError: print log.error( 'TypeError encountered when parsing {0}'. format(error['symerror'])) min_errs.append(sqrt(errors_min)) max_errs.append(sqrt(errors_max)) elif 'low' in entry and 'high' in entry: min_errs.append(entry['value'] - entry['low']) max_errs.append(entry['high'] - entry['value']) else: min_errs.append(0.0) max_errs.append(0.0) else: middle_val = (entry['high'] - entry['low']) * 0.5 + entry['low'] values.append(middle_val) min_errs.append(middle_val - entry['low']) max_errs.append(entry['high'] - middle_val)
def calculate_total_errors(variable, is_number_list, min_errs, max_errs, values): for i, entry in enumerate(variable['values']): if not is_number_list[i]: continue # skip non-numeric y values if 'value' in entry: values.append(entry['value']) if 'errors' in entry: errors_min = 0.0 errors_max = 0.0 for error in entry['errors']: if 'asymerror' in error: err_minus = error_value_processor( entry['value'], error['asymerror']['minus']) err_plus = error_value_processor( entry['value'], error['asymerror']['plus']) errors_min += pow(min(err_plus, err_minus, 0.0), 2) errors_max += pow(max(err_plus, err_minus, 0.0), 2) elif 'symerror' in error: try: err = error_value_processor( entry['value'], error['symerror']) errors_min += pow(err, 2) errors_max += pow(err, 2) except TypeError: print log.error( 'TypeError encountered when parsing {0}'. format(error['symerror'])) min_errs.append(sqrt(errors_min)) max_errs.append(sqrt(errors_max)) elif 'low' in entry and 'high' in entry: min_errs.append(entry['value'] - entry['low']) max_errs.append(entry['high'] - entry['value']) else: min_errs.append(0.0) max_errs.append(0.0) else: middle_val = (entry['high'] - entry['low']) * 0.5 + entry['low'] values.append(middle_val) min_errs.append(middle_val - entry['low']) max_errs.append(entry['high'] - middle_val)
def create_objects(self): self.calculate_total_errors() error_hists = [] error_labels = {} error_indices = {} index = 0 is_number_list = self.is_number_var(self.dependent_variable) for i, value in enumerate(self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values # process the error labels to ensure uniqueness ArrayWriter.process_error_labels(value) for error in value.get('errors', []): if 'label' not in error: error['label'] = 'error' label = error['label'] if label not in error_labels: index += 1 error_indices[index] = label if 'symerror' in error and label not in error_labels: error_labels[label] = 'symerror' elif 'asymerror' in error and error_labels.get( label, 'symerror') == 'symerror': error_labels[label] = 'asymerror' yvals = [] for index in range(1, len(error_labels) + 1): error_label = error_indices[index] if error_labels[error_label] == 'asymerror': yval_plus_label = error_label + '_plus' yval_plus = [] yval_minus_label = error_label + '_minus' yval_minus = [] for i, value in enumerate( self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = [ x for x in value.get('errors', []) if x.get('label') == error_label ] if len(error) == 0: yval_plus.append(0.0) yval_minus.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor( value['value'], error[0]['symerror']) yval_plus.append(err_val) yval_minus.append(-err_val) elif 'asymerror' in error[0]: err_plus = error_value_processor( value['value'], error[0]['asymerror']['plus']) err_min = error_value_processor( value['value'], error[0]['asymerror']['minus']) yval_plus.append(err_plus) yval_minus.append(err_min) else: yval_plus.append(0.0) yval_minus.append(0.0) yvals += [ (yval_plus_label, yval_plus, '%s%s' % (index, 'plus')), (yval_minus_label, yval_minus, '%s%s' % (index, 'minus')) ] else: yval = [] for i, value in enumerate( self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = [ x for x in value.get('errors', []) if x.get('label') == error_label ] if len(error) == 0: yval.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor( value['value'], error[0]['symerror']) yval.append(err_val) else: yval.append(0.0) yvals += [(error_label, yval, index)] for name, vals, index in yvals: try: error_hists.append(self._create_empty_hist(name, index, vals)) except: log.error("Failed to create empty histogram") xval = [] for i in range(self.dim): xval.append([]) i_var = self.independent_variables[i]['values'] for ix, x in enumerate(i_var): if not is_number_list[ ix] and 'labels' not in self.independent_variables[i]: continue # skip defining bins for non-numeric y values unless alphanumeric bin labels are present if x['low'] not in xval[i]: xval[i].append(x['low']) if x['high'] not in xval[i]: xval[i].append(x['high']) try: hist = self._create_hist(xval) except: log.error("Failed to create histogram") return [] + error_hists return [hist] + error_hists
def create_objects(self): self.calculate_total_errors() error_hists = [] error_labels = {} error_indices = {} index = 0 is_number_list = self.is_number_var(self.dependent_variable) for i, value in enumerate(self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values # process the labels to ensure uniqueness observed_error_labels = {} for error in value.get('errors', []): label = error.get('label', '') if label not in observed_error_labels: observed_error_labels[label] = 0 observed_error_labels[label] += 1 if observed_error_labels[label] > 1: error['label'] = label + '_' + str( observed_error_labels[label]) # append "_1" to first error label that has a duplicate if observed_error_labels[label] == 2: for error1 in value.get('errors', []): error1_label = error1.get('label', 'error') if error1_label == label: error1['label'] = label + "_1" break for error in value.get('errors', []): if 'label' not in error: error['label'] = 'error' label = error['label'] if label not in error_labels: index += 1 error_indices[index] = label if 'symerror' in error and label not in error_labels: error_labels[label] = 'symerror' elif 'asymerror' in error and error_labels.get( label, 'symerror') == 'symerror': error_labels[label] = 'asymerror' yvals = [] for index in xrange(1, len(error_labels) + 1): error_label = error_indices[index] if error_labels[error_label] == 'asymerror': yval_plus_label = error_label + '_plus' yval_plus = [] yval_minus_label = error_label + '_minus' yval_minus = [] for i, value in enumerate( self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = filter(lambda x: x.get('label') == error_label, value.get('errors', [])) if len(error) == 0: yval_plus.append(0.0) yval_minus.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor( value['value'], error[0]['symerror']) yval_plus.append(err_val) yval_minus.append(-err_val) elif 'asymerror' in error[0]: err_plus = error_value_processor( value['value'], error[0]['asymerror']['plus']) err_min = error_value_processor( value['value'], error[0]['asymerror']['minus']) yval_plus.append(err_plus) yval_minus.append(err_min) else: yval_plus.append(0.0) yval_minus.append(0.0) yvals += [ (yval_plus_label, yval_plus, '%s%s' % (index, 'plus')), (yval_minus_label, yval_minus, '%s%s' % (index, 'minus')) ] else: yval = [] for i, value in enumerate( self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = filter(lambda x: x.get('label') == error_label, value.get('errors', [])) if len(error) == 0: yval.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor( value['value'], error[0]['symerror']) yval.append(err_val) else: yval.append(0.0) yvals += [(error_label, yval, index)] for name, vals, index in yvals: try: error_hists.append(self._create_empty_hist(name, index, vals)) except: log.error("Failed to create empty histogram") xval = [] for i in xrange(self.dim): xval.append([]) i_var = self.independent_variables[i]['values'] for x in i_var: xval[i].append(x['low']) xval[i].append(i_var[-1]['high']) try: hist = self._create_hist(xval) except: log.error("Failed to create histogram") return [] + error_hists return [hist] + error_hists
def create_objects(self): self.calculate_total_errors() error_hists = [] error_labels = {} error_indices = {} is_number_list = self.is_number_var(self.dependent_variable) for i, value in enumerate(self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values # process the labels to ensure uniqueness observed_error_labels = {} for error in value.get('errors', []): label = error.get('label', '') if label not in observed_error_labels: observed_error_labels[label] = 0 observed_error_labels[label] += 1 if observed_error_labels[label] > 1: error['label'] = label + '_' + str(observed_error_labels[label]) # append "_1" to first error label that has a duplicate if observed_error_labels[label] == 2: for error1 in value.get('errors', []): error1_label = error1.get('label', 'error') if error1_label == label: error1['label'] = label + "_1" break for index, error in enumerate(value.get('errors', []), 1): if 'label' not in error: error['label'] = 'error' label = error['label'] if 'symerror' in error and label not in error_labels: error_labels[label] = 'symerror' elif 'asymerror' in error and error_labels.get(label, 'symerror') == 'symerror': error_labels[label] = 'asymerror' error_indices[index] = label yvals = [] for index in xrange(1, len(error_labels) + 1): error_label = error_indices[index] if error_labels[error_label] == 'asymerror': yval_plus_label = error_label + '_plus' yval_plus = [] yval_minus_label = error_label + '_minus' yval_minus = [] for i, value in enumerate(self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = filter(lambda x: x.get('label') == error_label, value.get('errors', [])) if len(error) == 0: yval_plus.append(0.0) yval_minus.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor(value['value'], error[0]['symerror']) yval_plus.append(err_val) yval_minus.append(-err_val) elif 'asymerror' in error[0]: err_plus = error_value_processor(value['value'], error[0]['asymerror']['plus']) err_min = error_value_processor(value['value'], error[0]['asymerror']['minus']) yval_plus.append(err_plus) yval_minus.append(err_min) else: yval_plus.append(0.0) yval_minus.append(0.0) yvals += [(yval_plus_label, yval_plus, '%s%s' % (index, 'plus')), (yval_minus_label, yval_minus, '%s%s' % (index, 'minus'))] else: yval = [] for i, value in enumerate(self.dependent_variable.get('values', [])): if not is_number_list[i]: continue # skip non-numeric y values error = filter(lambda x: x.get('label') == error_label, value.get('errors', [])) if len(error) == 0: yval.append(0.0) elif 'symerror' in error[0]: err_val = error_value_processor(value['value'], error[0]['symerror']) yval.append(err_val) else: yval.append(0.0) yvals += [(error_label, yval, index)] for name, vals, index in yvals: try: error_hists.append(self._create_empty_hist(name, index, vals)) except: log.error("Failed to create empty histogram") xval = [] for i in xrange(self.dim): xval.append([]) i_var = self.independent_variables[i]['values'] for x in i_var: xval[i].append(x['low']) xval[i].append(i_var[-1]['high']) try: hist = self._create_hist(xval) except: log.error("Failed to create histogram") return [] + error_hists return [hist] + error_hists