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