Exemplo n.º 1
0
def plot_event(coords, label, points=None):
    """
    This removes ghost points. 
    """
    trace = voxels.scatter_label(coords, label, markersize=2)
    if points is not None:
        trace_primaries = go.Scatter3d(x=points[:, 0],
                                       y=points[:, 1],
                                       z=points[:, 2],
                                       mode='markers',
                                       marker=dict(color='red',
                                                   size=4,
                                                   opacity=0.7,
                                                   symbol='diamond'),
                                       name='Points')
        trace.append(trace_primaries)
    plot_labels = {
        'data':
        trace,
        'layout':
        go.Layout(margin={
            'l': 20,
            'b': 20,
            't': 20,
            'r': 20
        },
                  plot_bgcolor="#fff",
                  paper_bgcolor="#fff")
    }
    return plot_labels
Exemplo n.º 2
0
    def draw(self):
        from mlreco.visualization import plotly_layout3d
        from mlreco.visualization.voxels import scatter_voxels, scatter_label
        import plotly.plotly as py
        import plotly.graph_objs as go
        from plotly.offline import init_notebook_mode, iplot
        init_notebook_mode(connected=False)

        # Create labels for the voxels
        # Use a different color for each cluster
        labels = np.full(len(self.output['energy'][:,-1]), -1)
        for i, s in enumerate(self.output['showers']):
            labels[s.voxels] = i

        # Draw voxels with cluster labels
        voxels = self.output['energy'][:,:3]
        graph_voxels = scatter_label(voxels, labels, 2)[0]
        graph_voxels.name = 'Shower ID'
        graph_data = [graph_voxels]

        if len(self.output['showers']):
            # Add EM primary points
            points = np.array([s.start for s in self.output['showers']])
            graph_start = scatter_voxels(points)[0]
            graph_start.name = 'Shower starts'
            graph_data.append(graph_start)
            
            # Add EM primary directions
            dirs = np.array([s.direction for s in self.output['showers']])
            arrows = go.Cone(x=points[:,0], y=points[:,1], z=points[:,2], 
                             u=dirs[:,0], v=dirs[:,1], w=dirs[:,2],
                             sizemode='absolute', sizeref=0.25, anchor='tail',
                             showscale=False, opacity=0.4)
            graph_data.append(arrows)

            # Add a vertex if matches, join vertex to start points
            for i, m in enumerate(self.output['matches']):
                v = self.output['vertices'][i]
                s1, s2 = self.output['showers'][m[0]].start, self.output['showers'][m[1]].start
                points = [v, s1, v, s2]
                line = scatter_voxels(np.array(points))[0]
                line.name = 'Pi0 Decay'
                line.mode = 'lines,markers'
                graph_data.append(line)

        # Draw
        iplot(go.Figure(data=graph_data,layout=plotly_layout3d()))