def to_operation(self, inputs, conditions={}): outputs = self.output_vars() def fit(arr): arr = np.array(arr) slope, intercept, r_value, p_value, stderr = stats.linregress( arr[:, 0], arr[:, 1]) return arr[:, 0], arr[:, 1], slope * arr[:, 0] + intercept, r_value picked_outputs = [self.name() + "_accumulated"] nodes = [ gn.PickN(name=self.name() + "_picked", condition_needs=conditions, inputs=inputs, outputs=picked_outputs, N=self.values['N'], parent=self.name()), gn.Map(name=self.name() + "_operation", inputs=picked_outputs, outputs=outputs, func=fit, parent=self.name()) ] return nodes
def _collect_global_inputs(self): """ Insert Pick1 for nodes which run global collector but depend on inputs which are only available on worker. """ inputs = [n for n, d in self.graph.in_degree() if d == 0] global_collector_nodes = list( filter( lambda node: getattr(node, 'color', '') == 'globalCollector', self.graph.nodes)) for node in global_collector_nodes: new_inputs = [] update_inputs = False if node in self.global_operations: continue for i in node.inputs: if i in inputs: pickone = gn.PickN(name=i + "_pick1", inputs=[i], outputs=["one_" + i], parent=node.parent) self.global_operations.add(pickone) self.add(pickone) update_inputs = True new_inputs.extend(pickone.outputs) else: new_inputs.append(i) self.graph.remove_node(node) if update_inputs: node.inputs = new_inputs self.add(node)
def to_operation(self, inputs, conditions={}): outputs = self.output_vars() node = gn.PickN(name=self.name() + "_operation", inputs=inputs, outputs=outputs, condition_needs=conditions, N=self.values['N'], parent=self.name()) return node
def to_operation(self, inputs, conditions={}): outputs = self.output_vars() axis = self.values['axis'] accumulated_outputs = [self.name() + '_accumulated_events'] if self.values['infinite']: def reduction(res, *rest): if type(rest[0]) is list: res[0] = np.sum([res[0], rest[0][0]], axis=axis) res[1] += rest[0][1] else: res[0] = np.sum([res[0], rest[0]], axis=axis) res[1] = res[1] + 1 return res def avg(*args, **kwargs): return args[0][0] / args[0][1] nodes = [ gn.Accumulator(name=self.name() + "_accumulated", inputs=inputs, outputs=accumulated_outputs, condition_needs=conditions, res_factory=lambda: [0, 0], reduction=reduction, parent=self.name()), gn.Map(name=self.name() + "_map", inputs=accumulated_outputs, outputs=outputs, func=avg, parent=self.name()) ] else: def func(arrs): return np.sum(arrs, axis=axis) / len(arrs) nodes = [ gn.PickN(name=self.name() + "_accumulated", inputs=inputs, outputs=accumulated_outputs, condition_needs=conditions, N=self.values['N'], parent=self.name()), gn.Map(name=self.name() + "_map", inputs=accumulated_outputs, outputs=outputs, func=func, parent=self.name()) ] return nodes
def to_operation(self, inputs, outputs, **kwargs): accumulated_outputs = [self.name() + '_accumulated_events'] if self.values['infinite']: def reduction(res, *rest): if type(rest[0]) is list: res[0] += rest[0][0] res[1] += rest[0][1] else: res[0] = res[0] + rest[0] res[1] = res[1] + 1 return res def avg(*args, **kwargs): return args[0][0] / args[0][1] nodes = [ gn.Accumulator(name=self.name() + "_accumulated", inputs=inputs, outputs=accumulated_outputs, res_factory=lambda: [0, 0], reduction=reduction, **kwargs), gn.Map(name=self.name() + "_map", inputs=accumulated_outputs, outputs=outputs, func=avg, **kwargs) ] else: def func(arrs): return np.average(arrs) nodes = [ gn.PickN(name=self.name() + "_accumulated", inputs=inputs, outputs=accumulated_outputs, N=self.values['N'], **kwargs), gn.Map(name=self.name() + "_map", inputs=accumulated_outputs, outputs=outputs, func=func, **kwargs) ] return nodes
def to_operation(self, inputs, outputs, **kwargs): outputs = [self.name()+"_unused"] picked_outputs = [self.name()+"_pickedoutput"] if self.values['global']: nodes = [gn.PickN(name=self.name()+"_picked", inputs=inputs, outputs=picked_outputs, N=1, **kwargs), gn.Map(name=self.name()+"_operation", inputs=picked_outputs, outputs=outputs, func=CaputProc(self.values['pvname']), **kwargs)] else: nodes = [gn.Map(name=self.name()+"_operation", inputs=inputs, outputs=outputs, func=CaputProc(self.values['pvname']), **kwargs)] return nodes
def to_operation(self, inputs, outputs, **kwargs): map_outputs = [self.name() + "_map"] threshold = self.values['Threshold'] count = self.values['Count'] nodes = [ gn.Map(name=self.name() + "_operation", inputs=inputs, outputs=map_outputs, **kwargs, func=lambda arr: len(arr[arr > threshold]) > count), gn.PickN(name=self.name() + "_pickN", inputs=map_outputs, outputs=outputs, **kwargs) ] return nodes
def to_operation(self, inputs, conditions={}): outputs = self.output_vars() pickn_outputs = [self.name() + "_picked"] display_outputs = [ self.name() + "_displayX", self.name() + "_displayY" ] def display_func(arr): x, y = zip(*arr) return np.array(x), np.array(y) origin = self.values['origin'] extent = self.values['extent'] def func(arr): arr = np.array(arr) roi = arr[(origin < arr[:, 0]) & (arr[:, 0] < extent)] if roi.size > 0: return roi[:, 0], roi[:, 1] else: return np.array([]), np.array([]) nodes = [ gn.PickN(name=self.name() + "_pickN", condition_needs=conditions, inputs=inputs, outputs=pickn_outputs, parent=self.name(), N=self.values['Num Points']), gn.Map(name=self.name() + "_operation", inputs=pickn_outputs, outputs=outputs, func=func, parent=self.name()), gn.Map(name=self.name() + "_display", inputs=pickn_outputs, outputs=display_outputs, parent=self.name(), func=display_func) ] return nodes
def to_operation(self, inputs, conditions={}): map_outputs = [self.name() + "_map"] outputs = [self.name()] threshold = self.values['Threshold'] count = self.values['Count'] nodes = [ gn.Map(name=self.name() + "_operation", condition_needs=conditions, inputs=inputs, outputs=map_outputs, func=lambda arr: len(arr[arr > threshold]) > count, parent=self.name()), gn.PickN(name=self.name() + "_pickN", inputs=map_outputs, outputs=outputs, parent=self.name()) ] return nodes
def to_operation(self, inputs, outputs, **kwargs): def func(arr): mean = np.mean(arr) rms = np.sqrt(np.mean(np.square(arr))) return mean, rms accumulated_outputs = [self.name() + '_accumulated_events'] nodes = [ gn.PickN(name=self.name() + '_picked', N=self.values['N'], inputs=inputs, outputs=accumulated_outputs, **kwargs), gn.Map(name=self.name() + '_operation', inputs=accumulated_outputs, outputs=outputs, func=func, **kwargs) ] return nodes
def to_operation(self, inputs, outputs, **kwargs): def fit(arr): arr = np.array(arr) slope, intercept, r_value, p_value, stderr = stats.linregress( arr[:, 0], arr[:, 1]) return arr[:, 0], arr[:, 1], slope * arr[:, 0] + intercept, r_value picked_outputs = [self.name() + "_accumulated"] nodes = [ gn.PickN(name=self.name() + "_picked", inputs=inputs, outputs=picked_outputs, N=self.values['N'], **kwargs), gn.Map(name=self.name() + "_operation", inputs=picked_outputs, outputs=outputs, func=fit, **kwargs) ] return nodes
def test_pickn(qtbot): node = PickN('pickn') widget = node.ctrlWidget() # widget.show() qtbot.addWidget(widget) assert node.values['N'] == 2 qtbot.keyPress(node.ctrls['N'], QtCore.Qt.Key_Up) assert node.values['N'] == 3 inputs = {"In": node.name()} outputs = ['pickn.Out'] op = node.to_operation(inputs=inputs, outputs=outputs) pop = gn.PickN(name="pickn_operation", inputs=list(inputs.values()), outputs=[node.name() + '.Out'], N=3) assert op.name == pop.name assert op.inputs == pop.inputs assert op.outputs == pop.outputs assert op.N == pop.N
def to_operation(self, **kwargs): return gn.PickN(name=self.name() + "_operation", N=self.values['N'], **kwargs)
def to_operation(self, **kwargs): return gn.PickN(name=self.name() + "_operation", N=1, **kwargs)