def predict_values(self, refresh=False): self.debug('predict values {}'.format(refresh)) try: x, y, z, ze, j, je, sj, sje = self._extract_position_arrays() t = AffineTransform() t.rotate(self.rotation) x, y = t.transforms(x, y) # print(x) except ValueError as e: self.debug('no monitor positions to fit, {}'.format(e)) return # print(x) # print(y) # print(z) # print(ze) n = x.shape[0] if n >= 3 or self.plotter_options.model_kind in (WEIGHTED_MEAN, MATCHING, BRACKETING): # n = z.shape[0] * 10 r = max((max(abs(x)), max(abs(y)))) # r *= 1.25 reg = self._regressor_factory(x, y, z, ze) self._regressor = reg else: msg = 'Not enough monitor positions. At least 3 required. Currently only {} active'.format( n) self.debug(msg) self.information_dialog(msg) return options = self.plotter_options ipositions = self.unknown_positions + self.monitor_positions if options.model_kind == LEAST_SQUARES_1D: k = options.one_d_axis.lower() pts = array([getattr(p, k) for p in ipositions]) else: pts = array([[p.x, p.y] for p in ipositions]) if options.use_monte_carlo and options.model_kind not in (MATCHING, BRACKETING, NN): fe = FluxEstimator(options.monte_carlo_ntrials, reg) split = len(self.unknown_positions) nominals, errors = fe.estimate(pts) if options.position_error: _, pos_errors = fe.estimate_position_err( pts, options.position_error) else: pos_errors = zeros(pts.shape[0]) for positions, s, e in ((self.unknown_positions, 0, split), (self.monitor_positions, split, None)): noms, es, ps = nominals[s:e], errors[s:e], pos_errors[s:e] for p, j, je, pe in zip(positions, noms, es, ps): oj = p.saved_j p.j = j p.jerr = je p.position_jerr = pe p.dev = (oj - j) / j * 100 else: js = reg.predict(pts) jes = reg.predict_error(pts) for j, je, p in zip(js, jes, ipositions): p.j = float(j) p.jerr = float(je) p.dev = (p.saved_j - j) / j * 100 p.mean_dev = (p.mean_j - j) / j * 100 if options.plot_kind == '2D': self._graph_contour(x, y, z, r, reg, refresh) elif options.plot_kind == 'Grid': self._graph_grid(x, y, z, ze, r, reg, refresh) else: if options.model_kind in (LEAST_SQUARES_1D, WEIGHTED_MEAN_1D): self._graph_linear_j(x, y, r, reg, refresh) else: self._graph_hole_vs_j(x, y, r, reg, refresh)
def predict_values(self, refresh=False): self.debug('predict values {}'.format(refresh)) try: x, y, z, ze, j, je, sj, sje = self._extract_position_arrays() t = AffineTransform() t.rotate(self.rotation) x, y = t.transforms(x, y) # print(x) except ValueError as e: self.debug('no monitor positions to fit, {}'.format(e)) return # print(x) # print(y) # print(z) # print(ze) n = x.shape[0] if n >= 3: # n = z.shape[0] * 10 r = max((max(abs(x)), max(abs(y)))) # r *= 1.25 reg = self._regressor_factory(x, y, z, ze) self._regressor = reg else: msg = 'Not enough monitor positions. At least 3 required. Currently only {} active'.format(n) self.debug(msg) self.information_dialog(msg) return options = self.plotter_options ipositions = self.unknown_positions + self.monitor_positions pts = array([[p.x, p.y] for p in ipositions]) if options.use_monte_carlo and options.model_kind not in ['Matching', 'Bracketing']: fe = FluxEstimator(options.monte_carlo_ntrials, reg) split = len(self.unknown_positions) nominals, errors = fe.estimate(pts) if options.position_error: _, pos_errors = fe.estimate_position_err(pts, options.position_error) else: pos_errors = zeros(pts.shape[0]) for positions, s, e in ((self.unknown_positions, 0, split), (self.monitor_positions, split, None)): noms, es, ps = nominals[s:e], errors[s:e], pos_errors[s:e] for p, j, je, pe in zip(positions, noms, es, ps): oj = p.saved_j p.j = j p.jerr = je p.position_jerr = pe p.dev = (oj - j) / j * 100 else: js = reg.predict(pts) jes = reg.predict_error(pts) for j, je, p in zip(js, jes, ipositions): p.j = float(j) p.jerr = float(je) p.dev = (p.saved_j - j) / j * 100 if options.plot_kind == '2D': self._graph_contour(x, y, z, r, reg, refresh) elif options.plot_kind == 'Grid': self._graph_grid(x, y, z, ze, r, reg, refresh) else: self._graph_hole_vs_j(x, y, r, reg, refresh)