docs: def get_freesasa_annotations(self, outdir, include_hetatms=False, force_rerun=False):
          """Run ``freesasa`` on this structure and store the calculated properties in the corresponding ChainProps
          """
          if self.file_type != 'pdb':
              log.error('{}: unable to run freesasa with "{}" file type. Please change file type to "pdb"'.format(self.id,
                                                                                                                  self.file_type))
              return
  
          # Parse the structure to store chain sequences
          if self.structure:
              parsed = self.structure
          else:
              parsed = self.parse_structure()
  
          if not parsed:
              log.error('{}: unable to open structure to run freesasa'.format(self.id))
              return
  
          # Set outfile name
          log.debug('{}: running freesasa'.format(self.id))
          if include_hetatms:
              outfile = '{}.freesasa_het.rsa'.format(self.id)
          else:
              outfile = '{}.freesasa_nohet.rsa'.format(self.id)
  
          # Run freesasa
          result = fs.run_freesasa(infile=self.structure_path,
                                   outfile=outfile,
                                   include_hetatms=include_hetatms,
                                   outdir=outdir,
                                   force_rerun=force_rerun)
  
          # Parse results
          result_parsed = fs.parse_rsa_data(result)
          prop_dict = defaultdict(lambda: defaultdict(list))
          for k, v in result_parsed.items():
              chain = k[0]
              for prop, calc in v.items():
                  prop_dict[chain][prop].append(calc)
  
          # Reorganize and store results
          all_props = ['all_atoms_abs', 'all_atoms_rel', 'side_chain_abs', 'side_chain_rel', 'main_chain_abs',
                       'main_chain_rel', 'non_polar_abs', 'non_polar_rel', 'all_polar_abs', 'all_polar_rel']
          all_props_renamed = {'all_atoms_abs' : 'ASA_ALL-freesasa',
                               'all_atoms_rel' : 'RSA_ALL-freesasa',
                               'all_polar_abs' : 'ASA_POLAR-freesasa',
                               'all_polar_rel' : 'RSA_POLAR-freesasa',
                               'main_chain_abs': 'ASA_BACKBONE-freesasa',
                               'main_chain_rel': 'RSA_BACKBONE-freesasa',
                               'non_polar_abs' : 'ASA_NONPOLAR-freesasa',
                               'non_polar_rel' : 'RSA_NONPOLAR-freesasa',
                               'side_chain_abs': 'ASA_RESIDUE-freesasa',
                               'side_chain_rel': 'RSA_RESIDUE-freesasa'}
  
          ## Rename dictionary keys based on if HETATMs were included
          if include_hetatms:
              suffix = '_het'
          else:
              suffix = '_nohet'
  
          for k, v in all_props_renamed.items():
              all_props_renamed[k] = v + suffix
  
          for chain in self.chains:
              for prop in all_props:
                  prop_list = ssbio.protein.structure.properties.residues.match_structure_sequence(orig_seq=chain.seq_record,
                                                                                                   new_seq=prop_dict[chain.id][prop],
                                                                                                   fill_with=float('Inf'),
                                                                                                   ignore_excess=True)
                  chain.seq_record.letter_annotations[all_props_renamed[prop]] = prop_list
              log.debug('{}: stored freesasa calculations in chain seq_record letter_annotations'.format(chain))