docs: def get_dssp_annotations(self, outdir, force_rerun=False):
          """Run DSSP on this structure and store the DSSP annotations in the corresponding ChainProp SeqRecords
  
          Calculations are stored in the ChainProp's ``letter_annotations`` at the following keys:
  
              * ``SS-dssp``
              * ``RSA-dssp``
              * ``ASA-dssp``
              * ``PHI-dssp``
              * ``PSI-dssp``
  
          Args:
              outdir (str): Path to where DSSP dataframe will be stored.
              force_rerun (bool): If DSSP results should be recalculated
  
          TODO:
              * Also parse global properties, like total accessible surface area. Don't think Biopython parses those?
  
          """
          if self.structure:
              parsed = self.structure
          else:
              parsed = self.parse_structure()
  
          if not parsed:
              log.error('{}: unable to open structure to run DSSP'.format(self.id))
              return
  
          log.debug('{}: running DSSP'.format(self.id))
          dssp_results = ssbio.protein.structure.properties.dssp.get_dssp_df(model=parsed.first_model,
                                                                             pdb_file=self.structure_path,
                                                                             outdir=outdir,
                                                                             force_rerun=force_rerun)
  
          if dssp_results.empty:
              log.error('{}: unable to run DSSP'.format(self.id))
              return
  
          chains = dssp_results.chain.unique()
          dssp_summary = ssbio.protein.structure.properties.dssp.secondary_structure_summary(dssp_results)
  
          for chain in chains:
              ss = dssp_results[dssp_results.chain == chain].ss.tolist()
              exposure_rsa = dssp_results[dssp_results.chain == chain].exposure_rsa.tolist()
              exposure_asa = dssp_results[dssp_results.chain == chain].exposure_asa.tolist()
              phi = dssp_results[dssp_results.chain == chain].phi.tolist()
              psi = dssp_results[dssp_results.chain == chain].psi.tolist()
  
              chain_prop = self.chains.get_by_id(chain)
              chain_seq = chain_prop.seq_record
  
              # Making sure the X's are filled in
              ss = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain_seq,
                                                                                        new_seq=ss,
                                                                                        fill_with='-')
              exposure_rsa = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain_seq,
                                                                                                  new_seq=exposure_rsa,
                                                                                                  fill_with=float('Inf'))
              exposure_asa = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain_seq,
                                                                                                  new_seq=exposure_asa,
                                                                                                  fill_with=float('Inf'))
              phi = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain_seq,
                                                                                         new_seq=phi,
                                                                                         fill_with=float('Inf'))
              psi = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain_seq,
                                                                                         new_seq=psi,
                                                                                         fill_with=float('Inf'))
  
              chain_prop.seq_record.annotations.update(dssp_summary[chain])
  
              chain_prop.seq_record.letter_annotations['SS-dssp'] = ss
              chain_prop.seq_record.letter_annotations['RSA-dssp'] = exposure_rsa
              chain_prop.seq_record.letter_annotations['ASA-dssp'] = exposure_asa
              chain_prop.seq_record.letter_annotations['PHI-dssp'] = phi
              chain_prop.seq_record.letter_annotations['PSI-dssp'] = psi
              log.debug('{}: stored DSSP annotations in chain seq_record letter_annotations'.format(chain))