docs: def setup(self, input_nodes=None, drop_na=False, **kwargs):
          ''' Set up the Step and construct the design matrix.
  
          Args:
              input_nodes (list): Optional list of Node objects produced by
                  the preceding Step in the analysis. If None, uses any inputs
                  passed in at Step initialization.
              drop_na (bool): Boolean indicating whether or not to automatically
                  drop events that have a n/a amplitude when reading in data
                  from event files.
              kwargs: Optional keyword arguments to pass onto load_variables.
          '''
          self.output_nodes = []
          input_nodes = input_nodes or self.input_nodes or []
  
          # TODO: remove the scan_length argument entirely once we switch tests
          # to use the synthetic dataset with image headers.
          if self.level != 'run':
              kwargs = kwargs.copy()
              kwargs.pop('scan_length', None)
  
          collections = self.layout.get_collections(self.level, drop_na=drop_na,
                                                    **kwargs)
          objects = collections + input_nodes
  
          objects, kwargs = self._filter_objects(objects, kwargs)
          groups = self._group_objects(objects)
  
          # Set up and validate variable lists
          model = self.model or {}
          X = model.get('x', [])
  
          for grp in groups:
              # Split into separate lists of Collections and Nodes
              input_nodes = [o for o in grp if isinstance(o, AnalysisNode)]
              colls = list(set(grp) - set(input_nodes))
  
              if input_nodes:
                  node_coll = self._concatenate_input_nodes(input_nodes)
                  colls.append(node_coll)
  
              coll = merge_collections(colls) if len(colls) > 1 else colls[0]
  
              coll = apply_transformations(coll, self.transformations)
              if X:
                  transform.Select(coll, X)
  
              node = AnalysisNode(self.level, coll, self.contrasts, input_nodes,
                                  self.auto_contrasts)
  
              self.output_nodes.append(node)