docs: def create_node(self, stream_name, channel, plates):
          """
          Create a node in the graph. Note: assumes that the streams already exist
  
          :param stream_name: The name of the stream
          :param channel: The channel where this stream lives
          :param plates: The plates. The stream meta-data will be auto-generated from these
          :return: The streams associated with this node
          """
          streams = {}
  
          plate_values = Plate.get_overlapping_values(plates)
  
          if plates:
              if not plate_values:
                  raise NodeDefinitionError("No overlapping plate values found")
              for pv in plate_values:
                  # Construct stream id
                  stream_id = StreamId(name=stream_name, meta_data=pv)
  
                  # Now try to locate the stream and add it (raises StreamNotFoundError if not found)
                  streams[pv] = channel.get_or_create_stream(stream_id=stream_id)
  
          else:
              streams[None] = channel.get_or_create_stream(stream_id=StreamId(name=stream_name))
  
          if not streams:
              raise NodeDefinitionError("No streams created for node with id {}".format(stream_name))
  
          node = Node(channel, stream_name, streams, plates)
          self._add_node(node)
          return node