code: def get_ptms(self, ptm_df):
          logger.info('Processing PTMs...')
          for ix, row in ptm_df.iterrows():
              ptm_class = _ptm_map[row['MOD_TYPE']]
              if ptm_class is None:
                  continue
              sub_ag = self._make_agent(row['HPRD_ID'],
                                        refseq_id=row['REFSEQ_PROTEIN'])
              if sub_ag is None:
                  continue
              enz_id = _nan_to_none(row['ENZ_HPRD_ID'])
              enz_ag = self._make_agent(enz_id)
              res = _nan_to_none(row['RESIDUE'])
              pos = _nan_to_none(row['POSITION'])
              if pos is not None and ';' in pos:
                  pos, dash = pos.split(';')
                  assert dash == '-'
              assert res
              assert pos
              motif_dict = self._get_seq_motif(row['REFSEQ_PROTEIN'], res, pos)
              ev_list = self._get_evidence(
                      row['HPRD_ID'], row['HPRD_ISOFORM'], row['PMIDS'],
                      row['EVIDENCE'], 'ptms', motif_dict)
              stmt = ptm_class(enz_ag, sub_ag, res, pos, evidence=ev_list)
              self.statements.append(stmt)