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
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()))