docs: def get_interaction_energy(self, assign_ff=True, ff=None, mol2=False,
                                 force_ff_assign=False):
          """Calculates the interaction energy of the AMPAL object.
  
          Parameters
          ----------
          assign_ff: bool, optional
              If true the force field will be updated if required.
          ff: BuffForceField, optional
              The force field to be used for scoring.
          mol2: bool, optional
              If true, mol2 style labels will also be used.
          force_ff_assign: bool, optional
              If true, the force field will be completely reassigned, 
              ignoring the cached parameters.
  
          Returns
          -------
          buff_score: buff.BUFFScore
              A BUFFScore object with information about each of the
              interactions and the `Atoms` involved.
  
          Raises
          ------
          AttributeError
              Raise if a component molecule does not have an `update_ff`
              method.
          """
          if not ff:
              ff = global_settings['buff']['force_field']
          if assign_ff:
              for molecule in self._molecules:
                  if hasattr(molecule, 'update_ff'):
                      molecule.update_ff(
                          ff, mol2=mol2, force_ff_assign=force_ff_assign)
                  else:
                      raise AttributeError(
                          'The following molecule does not have a update_ff'
                          'method:\n{}\nIf this is a custom molecule type it'
                          'should inherit from BaseAmpal:'.format(molecule))
          interactions = find_inter_ampal(self, ff.distance_cutoff)
          buff_score = score_interactions(interactions, ff)
          return buff_score