code: def add_selection(self, indexes, reference=None, atom_indices=None, ref_atom_indices=None):
          
          from .misc import SelectionFeature, AlignFeature
          if reference is None:
              f = SelectionFeature(self.topology, indexes)
          else:
              if not isinstance(reference, mdtraj.Trajectory):
                  raise ValueError('reference is not a mdtraj.Trajectory object, but {}'.format(reference))
              f = AlignFeature(reference=reference, indexes=indexes,
                               atom_indices=atom_indices, ref_atom_indices=ref_atom_indices)
          self.__add_feature(f)
docs: Adds the coordinates of the selected atom indexes to the feature list.
          The coordinates of the selection [1, 2, ...] are flattened as follows: [x1, y1, z1, x2, y2, z2, ...]
  
          Parameters
          ----------
          indexes : ndarray((n), dtype=int)
              array with selected atom indexes
          reference: mdtraj.Trajectory or None, default=None
              if given, all data is being aligned to the given reference with Trajectory.superpose
          atom_indices : array_like, or None
              The indices of the atoms to superpose. If not
              supplied, all atoms will be used.
          ref_atom_indices : array_like, or None
              Use these atoms on the reference structure. If not supplied,
              the same atom indices will be used for this trajectory and the
              reference one.