docs: def tag_secondary_structure(self, force=False):
          """Tags each `Residue` of the `Polypeptide` with secondary structure.
  
          Notes
          -----
          DSSP must be available to call. Check by running
          `isambard.external_programs.dssp.test_dssp`. If DSSP is not
          available, please follow instruction here to add it:
          https://github.com/woolfson-group/isambard#external-programs
  
          For more information on DSSP see [1].
  
          References
          ----------
          .. [1] Kabsch W, Sander C (1983) "Dictionary of protein
             secondary structure: pattern recognition of hydrogen-bonded
             and geometrical features", Biopolymers, 22, 2577-637.
  
          Parameters
          ----------
          force : bool, optional
              If `True` the tag will be run even if `Residues` are
              already tagged.
          """
          tagged = ['secondary_structure' in x.tags.keys()
                    for x in self._monomers]
          if (not all(tagged)) or force:
              dssp_out = run_dssp(self.pdb, path=False)
              if dssp_out is None:
                  return
              dssp_ss_list = extract_all_ss_dssp(dssp_out, path=False)
              for monomer, dssp_ss in zip(self._monomers, dssp_ss_list):
                  monomer.tags['secondary_structure'] = dssp_ss[1]
          return