docs: def dssps(self):
          """ Dict of filepaths for all dssp files associated with code.
  
          Notes
          -----
          Runs dssp and stores writes output to files if not already present.
          Also downloads mmol files if not already present.
          Calls isambard.external_programs.dssp and so needs dssp to be installed.
  
          Returns
          -------
          dssps_dict : dict, or None.
              Keys : int
                  mmol number
              Values : str
                  Filepath for the corresponding dssp file.
  
          Raises
          ------
          Warning
              If any of the dssp files are empty.
          """
          dssps_dict = {}
          dssp_dir = os.path.join(self.parent_dir, 'dssp')
          if not os.path.exists(dssp_dir):
              os.makedirs(dssp_dir)
          for i, mmol_file in self.mmols.items():
              dssp_file_name = '{0}.dssp'.format(os.path.basename(mmol_file))
              dssp_file = os.path.join(dssp_dir, dssp_file_name)
              if not os.path.exists(dssp_file):
                  dssp_out = run_dssp(pdb=mmol_file, path=True, outfile=dssp_file)
                  if len(dssp_out) == 0:
                      raise Warning("dssp file {0} is empty".format(dssp_file))
              dssps_dict[i] = dssp_file
          return dssps_dict