<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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