Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
        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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
Arquivo: Roi.py Projeto: Tubbz-alt/ami
    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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
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
Exemplo n.º 13
0
 def to_operation(self, **kwargs):
     return gn.PickN(name=self.name() + "_operation",
                     N=self.values['N'],
                     **kwargs)
Exemplo n.º 14
0
 def to_operation(self, **kwargs):
     return gn.PickN(name=self.name() + "_operation", N=1, **kwargs)