code: def get_modifications(self):
          qstr = "$.events.frames[(@.type is 'protein-modification')]"
          res = self.tree.execute(qstr)
          if res is None:
              return
          for r in res:
              modification_type = r.get('subtype')
              epistemics = self._get_epistemics(r)
              if epistemics.get('negated'):
                  continue
              annotations, context = self._get_annot_context(r)
              frame_id = r['frame_id']
              args = r['arguments']
              site = None
              theme = None
              for a in args:
                  if self._get_arg_type(a) == 'theme':
                      theme = a['arg']
                  elif self._get_arg_type(a) == 'site':
                      site = a['text']
              theme_agent, theme_coords = self._get_agent_from_entity(theme)
              if site is not None:
                  mods = self._parse_site_text(site)
              else:
                  mods = [(None, None)]
              for mod in mods:
                  residue, pos = mod
                  qstr = "$.events.frames[(@.type is 'regulation') and " + \
                         "(@.arguments[0].arg is '%s')]" % frame_id
                  reg_res = self.tree.execute(qstr)
                  reg_res = list(reg_res)
                  for reg in reg_res:
                      controller_agent, controller_coords = None, None
                      for a in reg['arguments']:
                          if self._get_arg_type(a) == 'controller':
                              controller = a.get('arg')
                              if controller is not None:
                                  controller_agent, controller_coords = \
                                      self._get_agent_from_entity(controller)
                                  break
                      reg_subtype = reg.get('subtype')
                      if reg_subtype == 'negative-regulation':
                          modification_type = \
                              modtype_to_inverse.get(modification_type)
                          if not modification_type:
                              logger.warning('Unhandled modification type: %s' %
                                             modification_type)
                              continue 
                      sentence = reg['verbose-text']
                      annotations['agents']['coords'] = [controller_coords,
                                                         theme_coords]
                      ev = Evidence(source_api='reach', text=sentence,
                                    annotations=annotations, pmid=self.citation,
                                    context=context, epistemics=epistemics)
                      args = [controller_agent, theme_agent, residue, pos, ev]
                      ModStmt = modtype_to_modclass.get(modification_type)
                      if ModStmt is None:
                          logger.warning('Unhandled modification type: %s' %
                                         modification_type)
                      else:
                          if modification_type == 'autophosphorylation':
                              args = [theme_agent, residue, pos, ev]
                          self.statements.append(ModStmt(*args))