sdf.spec.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { parseSdf } from '../sdf/parser';
  2. const SdfString = `
  3. Mrv1718007121815122D
  4. 5 4 0 0 0 0 999 V2000
  5. 0.0000 0.8250 0.0000 O 0 5 0 0 0 0 0 0 0 0 0 0
  6. -0.8250 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
  7. 0.0000 -0.8250 0.0000 O 0 5 0 0 0 0 0 0 0 0 0 0
  8. 0.0000 0.0000 0.0000 P 0 0 0 0 0 0 0 0 0 0 0 0
  9. 0.8250 0.0000 0.0000 O 0 5 0 0 0 0 0 0 0 0 0 0
  10. 4 1 1 0 0 0 0
  11. 4 2 2 0 0 0 0
  12. 4 3 1 0 0 0 0
  13. 4 5 1 0 0 0 0
  14. M CHG 3 1 -1 3 -1 5 -1
  15. M END
  16. > <DATABASE_ID>
  17. DB14523
  18. > <DATABASE_NAME>
  19. drugbank
  20. > <SMILES>
  21. [O-]P([O-])([O-])=O
  22. > <INCHI_IDENTIFIER>
  23. InChI=1S/H3O4P/c1-5(2,3)4/h(H3,1,2,3,4)/p-3
  24. > <INCHI_KEY>
  25. NBIIXXVUZAFLBC-UHFFFAOYSA-K
  26. > <FORMULA>
  27. O4P
  28. > <MOLECULAR_WEIGHT>
  29. 94.9714
  30. > <EXACT_MASS>
  31. 94.95342
  32. > <JCHEM_ACCEPTOR_COUNT>
  33. 4
  34. > <JCHEM_ATOM_COUNT>
  35. 5
  36. > <JCHEM_AVERAGE_POLARIZABILITY>
  37. 4.932162910070488
  38. > <JCHEM_BIOAVAILABILITY>
  39. 1
  40. > <JCHEM_DONOR_COUNT>
  41. 0
  42. > <JCHEM_FORMAL_CHARGE>
  43. -3
  44. > <JCHEM_GHOSE_FILTER>
  45. 0
  46. > <JCHEM_IUPAC>
  47. phosphate
  48. > <JCHEM_LOGP>
  49. -1.0201038226666665
  50. > <JCHEM_MDDR_LIKE_RULE>
  51. 0
  52. > <JCHEM_NUMBER_OF_RINGS>
  53. 0
  54. > <JCHEM_PHYSIOLOGICAL_CHARGE>
  55. -2
  56. > <JCHEM_PKA>
  57. 6.951626889535468
  58. > <JCHEM_PKA_STRONGEST_ACIDIC>
  59. 1.7961261340181292
  60. > <JCHEM_POLAR_SURFACE_AREA>
  61. 86.25
  62. > <JCHEM_REFRACTIVITY>
  63. 11.2868
  64. > <JCHEM_ROTATABLE_BOND_COUNT>
  65. 0
  66. > <JCHEM_RULE_OF_FIVE>
  67. 1
  68. > <JCHEM_TRADITIONAL_IUPAC>
  69. phosphate
  70. > <JCHEM_VEBER_RULE>
  71. 0
  72. > <DRUGBANK_ID>
  73. DB14523
  74. > <DRUG_GROUPS>
  75. experimental
  76. > <GENERIC_NAME>
  77. Phosphate ion
  78. > <SYNONYMS>
  79. Orthophosphate; Phosphate
  80. $$$$`;
  81. describe('sdf reader', () => {
  82. it('basic', async () => {
  83. const parsed = await parseSdf(SdfString).run();
  84. if (parsed.isError) {
  85. throw new Error(parsed.message);
  86. }
  87. const compound = parsed.result.compounds[0];
  88. const { molFile, dataItems } = compound;
  89. const { atoms, bonds } = molFile;
  90. // number of structures
  91. expect(atoms.count).toBe(5);
  92. expect(bonds.count).toBe(4);
  93. expect(atoms.x.value(0)).toBeCloseTo(0, 0.001);
  94. expect(atoms.y.value(0)).toBeCloseTo(0.8250, 0.0001);
  95. expect(atoms.z.value(0)).toBeCloseTo(0, 0.0001);
  96. expect(atoms.type_symbol.value(0)).toBe('O');
  97. expect(bonds.atomIdxA.value(3)).toBe(4);
  98. expect(bonds.atomIdxB.value(3)).toBe(5);
  99. expect(bonds.order.value(3)).toBe(1);
  100. expect(dataItems.dataHeader.value(0)).toBe('DATABASE_ID');
  101. expect(dataItems.data.value(0)).toBe('DB14523');
  102. expect(dataItems.dataHeader.value(1)).toBe('DATABASE_NAME');
  103. expect(dataItems.data.value(1)).toBe('drugbank');
  104. expect(dataItems.dataHeader.value(31)).toBe('SYNONYMS');
  105. expect(dataItems.data.value(31)).toBe('Orthophosphate; Phosphate');
  106. });
  107. });