formal_charge_dict = {
'NHE': [
   (
      'N<0>',
      {
         0: 0,
      },
   ),
],
'NME': [
   (
      'C<0>N<1>',
      {
         0: 0,
         1: 0,
      },
   ),
],
'ACE': [
   (
      'C<0>(=O<1>)C<2>',
      {
         0: 0,
         1: 0,
         2: 0,
      },
   ),
],
'ALA': [
   (
      'N<0>C<1>(C<2>)C<3>=O<4>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
      },
   ),
],
'ARG': [
   (
      'N<0>C<1>(C<2>C<3>C<4>N<5>C<6>(N<7>)=N<8>)C<9>=O<10>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 1,
         9: 0,
        10: 0,
      },
   ),
],
'ASP': [
   (
      'N<0>C<1>(C<2>C<3>(O<4>)=O<5>)C<6>=O<7>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: -1,
         5: 0,
         6: 0,
         7: 0,
      },
   ),
],
'ASN': [
   (
      'N<0>C<1>(C<2>C<3>(=O<4>)N<5>)C<6>=O<7>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
      },
   ),
],
'CYS': [
   (
      'N<0>C<1>(C<2>S<3>)C<4>=O<5>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
      },
   ),
],
'CYX': [
   (
      'N<0>C<1>(C<2>S<3>)C<4>=O<5>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
      },
   ),
],
'GLN': [
   (
      'N<0>C<1>(C<2>C<3>C<4>(=O<5>)N<6>)C<7>=O<8>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
      },
   ),
],
'GLU': [
   (
      'N<0>C<1>(C<2>C<3>C<4>(O<5>)=O<6>)C<7>=O<8>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: -1,
         6: 0,
         7: 0,
         8: 0,
      },
   ),
],
'GLY': [
   (
      'N<0>C<1>C<2>=O<3>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
      },
   ),
],
'HIS': [
   (
      'N<0>C<1>(C<2>C<3>1-N<4>=C<5>N<6>C<7>=1)C<8>=O<9>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
      },
   ),
],
'HIP': [
   (
      'N<0>C<1>(C<2>C<3>1-N<4>=C<5>N<6>C<7>=1)C<8>=O<9>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 1,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
      },
   ),
],
'HID': [
   (
      'N<0>C<1>(C<2>C<3>1-N<4>C<5>=N<6>C<7>=1)C<8>=O<9>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
      },
   ),
],
'ILE': [
   (
      'N<0>C<1>(C<2>(C<3>)C<4>C<5>)C<6>=O<7>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
      },
   ),
],
'LEU': [
   (
      'N<0>C<1>(C<2>C<3>(C<4>)C<5>)C<6>=O<7>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
      },
   ),
],
'LYS': [
   (
      'N<0>C<1>(C<2>C<3>C<4>C<5>N<6>)C<7>=O<8>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 1,
         7: 0,
         8: 0,
      },
   ),
],
'MET': [
   (
      'N<0>C<1>(C<2>C<3>S<4>C<5>)C<6>=O<7>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
      },
   ),
],
'PHE': [
   (
      'N<0>C<1>(C<2>C<3>1C<4>=C<5>C<6>=C<7>C<8>=1)C<9>=O<10>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
        10: 0,
      },
   ),
],
'PRO': [
   (
      'N<0>1C<1>C<2>C<3>C<4>1C<5>=O<6>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
      },
   ),
],
'SER': [
   (
      'N<0>C<1>(C<2>O<3>)C<4>=O<5>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
      },
   ),
],
'THR': [
   (
      'N<0>C<1>(C<2>(O<3>)C<4>)C<5>=O<6>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
      },
   ),
],
'TRP': [
   (
      'N<0>C<1>(C<2>C<3>1=C<4>N<5>C<6>=2C<7>=C<8>C<9>=C<10>C<11>1=2)C<12>=O<13>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
        10: 0,
        11: 0,
        12: 0,
        13: 0,
      },
   ),
],
'TYR': [
   (
      'N<0>C<1>(C<2>C<3>1C<4>=C<5>C<6>(O<7>)=C<8>C<9>=1)C<10>=O<11>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
         7: 0,
         8: 0,
         9: 0,
        10: 0,
        11: 0,
      },
   ),
],
'VAL': [
   (
      'N<0>C<1>(C<2>(C<3>)C<4>)C<5>=O<6>',
      {
         0: 0,
         1: 0,
         2: 0,
         3: 0,
         4: 0,
         5: 0,
         6: 0,
      },
   ),
],
'HOH': [
   (
      'O<0>',
      {
         0: 0,
      },
   ),
],
'WAT': [
   (
      'O<0>',
      {
       0: 0,
      },
   ),
],
'TIP': [
   (
      'O<0>',
      {
       0: 0,
      },
   ),
],
}

for alias in (
    ( 'HIE', 'HIS'), # default HIS is HISE
    ( 'HISE', 'HIS'),
    ( 'HISD', 'HID'),
    ( 'HISP', 'HIP'),
    ( 'GLUM', 'GLU'), # default -1
    ( 'ASPM', 'ASP'), # default -1
    ( 'LYSP', 'LYS'), # default +1
    ( 'ARGP', 'ARG'), # default +1
    ):
    formal_charge_dict[alias[0]] = formal_charge_dict[alias[1]]
