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))