Skip to content

Instantly share code, notes, and snippets.

@AdmiralPotato
Last active June 7, 2023 00:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AdmiralPotato/d5a6d8e2c9fb6dae739f02f6f846b537 to your computer and use it in GitHub Desktop.
Save AdmiralPotato/d5a6d8e2c9fb6dae739f02f6f846b537 to your computer and use it in GitHub Desktop.
Trying a 3D scene with 2D overlays
const canvas = document.getElementById('3d')
const svg = document.getElementById('2d')
const xmlns = svg.getAttribute('xmlns')
const xlinkns = 'http://www.w3.org/1999/xlink';
const renderer = new THREE.WebGLRenderer({
canvas,
alpha: true,
antialias: true
})
const camera = new THREE.PerspectiveCamera(
45,
window.innerWidth / window.innerHeight,
0.1,
10000
)
const scene = new THREE.Scene()
const group = new THREE.Group()
scene.add(group)
const directionalLight = new THREE.DirectionalLight(0xffffff, .5)
directionalLight.position.set(-2, 2, 2)
directionalLight.castShadow = true
scene.add(directionalLight)
const directionalLight2 = new THREE.DirectionalLight(0xffffff, .5)
directionalLight2.position.set(1, 2, 1)
directionalLight2.castShadow = true
scene.add( directionalLight2 )
const ambientLight = new THREE.AmbientLight(0x808080, .5)
scene.add(ambientLight)
const light = new THREE.HemisphereLight( 0xcefeff, 0xb3eaf0, .5 )
scene.add( light )
scene.fog = new THREE.Fog('#262626', 7, 9)
camera.position.set(0, 0, 8)
camera.lookAt(new THREE.Vector3(0,0,0))
camera.rotation.z = Math.PI
renderer.shadowMap.enabled = true
renderer.shadowMap.type = THREE.PCFSoftShadowMap
let width
let height
let square
let center = new THREE.Vector2()
const deg = Math.PI / 180
const resize = () => {
const clientWidth = canvas.clientWidth
const clientHeight = canvas.clientHeight
const dpr = window.devicePixelRatio
width = clientWidth * dpr
height = clientHeight * dpr
square = Math.min(width, height)
if (
canvas.width !== width ||
canvas.height !== height
) {
const aspect = width / height
const desiredMinimumFov = Math.PI / 4 //90 deg
// this ensures that I always have a 90deg square in the center of both landscape and portrait viewports
camera.fov = (
aspect >= 1 ? desiredMinimumFov : 2 * Math.atan(Math.tan(desiredMinimumFov / 2) / aspect)
) / deg
camera.aspect = aspect
camera.updateProjectionMatrix()
renderer.setPixelRatio(dpr)
renderer.setSize(
clientWidth,
clientHeight,
false
)
svg.setAttribute('viewBox', `0 0 ${width} ${height}`)
center.set(width / 2, height / 2)
reziseDefs()
}
}
let go = true
const loop = (time) => {
if (go) {
requestAnimationFrame(loop)
resize()
animate(time)
}
}
const start = async () => {
await makeObjects()
requestAnimationFrame(loop)
}
const vector = new THREE.Vector3()
const getScreenXY = (object) => {
vector.setFromMatrixPosition(object.matrixWorld)
vector.project(camera);
return new THREE.Vector3(
((( vector.x + 1 ) * 0.5)) * width,
(1 - (( vector.y + 1 ) * 0.5)) * height,
(( vector.z + 1 ) * 0.5) * square
)
}
// now to get creative
const defs = document.createElementNS(xmlns, 'defs')
const overlayDef = document.createElementNS(xmlns, 'g')
const circle = document.createElementNS(xmlns, 'circle')
const line = document.createElementNS(xmlns, 'path')
overlayDef.setAttributeNS(null, 'id', 'overlay')
circle.setAttributeNS(null, 'class', 'stroke')
line.setAttributeNS(null, 'class', 'stroke')
overlayDef.appendChild(circle)
overlayDef.appendChild(line)
defs.appendChild(overlayDef)
svg.appendChild(defs)
let circleRadius
let fontSize
const reziseDefs = () => {
const strokeWidth = '' + (square / 300)
circleRadius = square / 15
fontSize = (circleRadius * 0.35) + 'px'
const lsa = circleRadius * 0.575
const lsb = circleRadius * 0.525
circle.setAttributeNS(null, 'r', circleRadius)
line.setAttributeNS(null, 'd', `
M-${lsa},-${lsa} L-${lsb},-${lsb}Z
M${lsa},-${lsa} L${lsb},-${lsb}Z
M-${lsa},${lsa} L-${lsb},${lsb}Z
M${lsa},${lsa} L${lsb},${lsb}Z
`)
document.querySelectorAll('.stroke').forEach((element) => {
element.setAttributeNS(null, 'stroke-width', strokeWidth)
})
}
const materialBase = {metalness: 0.1, roughness: 0.5}
const atomDataMap = {
h: {scale: 0.5, material: new THREE.MeshStandardMaterial(Object.assign({color: '#b1cbbf'}, materialBase))},
c: {scale: 1.0, material: new THREE.MeshStandardMaterial(Object.assign({color: '#425d61'}, materialBase))},
o: {scale: 1.1, material: new THREE.MeshStandardMaterial(Object.assign({color: '#c41715'}, materialBase))},
n: {scale: 1.1, material: new THREE.MeshStandardMaterial(Object.assign({color: '#0b5366'}, materialBase))},
cl: {scale: 1.2, material: new THREE.MeshStandardMaterial(Object.assign({color: '#216359'}, materialBase))},
na: {scale: 1.2, material: new THREE.MeshStandardMaterial(Object.assign({color: '#474a9c'}, materialBase))},
}
const molecules = [
{name: 'Sucrose', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5988/sdf?record_type=3d'},
{name: 'Nicotine', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/89594/sdf?record_type=3d'},
{name: 'Cholesterol', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5997/sdf?record_type=3d', rotation: new THREE.Euler(0, 0, -Math.PI / 2)},
{name: 'Methylphenidate', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/4158/sdf?record_type=3d'},
{name: 'Salt', path: 'https://cactus.nci.nih.gov/chemical/structure/[Cl-][Na+]/file?format=sdf&get3d=True'},
{name: 'Alcohol', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5798/sdf?record_type=3d'},
{name: 'THC', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/16078/sdf?record_type=3d'},
{name: 'Caffeine', path: 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2519/sdf?record_type=3d'}
]
let objects = []
const completeSets = 2
const makeObjects = () => {
molecules.forEach((molecule) => {
molecule.sdfText = sdfData[molecule.path]
const parsedMolecule = sdfTextToThreeSnatom(molecule.sdfText, atomDataMap, molecule.rotation)
molecule.data = parsedMolecule.data
molecule.model = parsedMolecule.model
})
let moleculeScale = -Infinity
let moleculeScaleVector = new THREE.Vector3()
molecules.forEach((molecule) => {
molecule.data.bounds.getSize(moleculeScaleVector)
moleculeScale = Math.max(moleculeScale, moleculeScaleVector.length())
molecule.model.children[0].position.sub(
molecule.data.bounds.getCenter(moleculeScaleVector)
)
})
for (let i = 0; i < molecules.length * completeSets; i++) {
const moleculeIndex = i % molecules.length
const pivotA = new THREE.Group()
const pivotB = new THREE.Group()
const molecule = molecules[moleculeIndex].model.clone(true)
const overlay = document.createElementNS(xmlns, 'g')
const use = document.createElementNS(xmlns, 'use')
const text = document.createElementNS(xmlns, 'text')
const line = document.createElementNS(xmlns, 'path')
pivotA.position.x = 1.25
molecule.scale.multiplyScalar(1 / moleculeScale)
molecule.position.x = 0.75
pivotA.add(molecule)
pivotB.add(pivotA)
group.add(pivotB)
use.setAttributeNS(xlinkns, 'xlink:href', '#overlay')
text.setAttributeNS(null, 'class', 'text')
text.setAttributeNS(null, 'text-anchor', 'middle')
text.setAttributeNS(null, 'alignment-baseline', 'central')
line.setAttributeNS(null, 'class', 'stroke')
text.textContent = molecules[moleculeIndex].name
overlay.appendChild(use)
overlay.appendChild(text)
overlay.appendChild(line)
svg.appendChild(overlay)
objects.push({
pivotA,
pivotB,
molecule,
line,
use,
text,
overlay
})
}
}
const loopDuration = 20
const tau = Math.PI * 2
const diff = new THREE.Vector2()
const pointA = new THREE.Vector2()
const pointB = new THREE.Vector2()
const pointC = new THREE.Vector2()
const rotatedRadius = new THREE.Vector2()
const circleRadiusVector = new THREE.Vector2()
const emptyVector = new THREE.Vector2(0, 0)
const clamp = (n) => { return Math.min(Math.max(0, n), 1) }
const animate = (time) => {
const phase = time / 1000 / loopDuration / completeSets
const objectFrac = 1 / objects.length
// 3D loop
objects.forEach((object, index) => {
const frac = index * objectFrac
object.pivotB.rotation.z = ((phase * completeSets) + 0.5 + frac) * tau
object.pivotA.rotation.y = (phase + frac) * tau * 4
object.molecule.rotation.z = (phase + frac) * tau * -2
})
renderer.render(scene, camera)
// 2D loop needs to be run after the 3D render so all matrices are "baked"
circleRadiusVector.set(circleRadius, 0)
objects.forEach((object) => {
const position = getScreenXY(object.molecule)
diff.copy(position).sub(center)
const angle = diff.angle()
rotatedRadius.copy(circleRadiusVector).rotateAround(emptyVector, angle)
pointA.copy(rotatedRadius).multiplyScalar(1.000)
pointB.copy(rotatedRadius).multiplyScalar(1.500)
pointC.copy(rotatedRadius).multiplyScalar(2.000)
object.line.setAttributeNS(null, 'd', `M${pointA.x},${pointA.y} L${pointB.x},${pointB.y}Z`)
object.use.setAttributeNS(null, 'transform', `rotate(${-(angle / deg) * 2})`)
object.overlay.setAttributeNS(null, 'opacity', `${1 - clamp(((position.z / square) - 0.9863) * 1000) }`)
object.overlay.setAttributeNS(null, 'transform', `translate(${position.x}, ${position.y})`)
object.text.setAttributeNS(null, 'x', pointC.x)
object.text.setAttributeNS(null, 'y', pointC.y)
object.text.setAttributeNS(null, 'font-size', fontSize)
})
}
start()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<link href="https://fonts.googleapis.com/css?family=Exo+2" rel="stylesheet">
<link rel="stylesheet" href="./styles.css" />
<title>2D Overlay on to 3D</title>
</head>
<body>
<canvas id="3d"></canvas>
<svg id="2d" xmlns="http://www.w3.org/2000/svg"></svg>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/95/three.js"></script>
<script src="./sdf_data.js"></script>
<script src="./sdf_to_three.js"></script>
<script src="./2d_overlay_3d.js"></script>
</body>
</html>
const sdfData = {
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5988/sdf?record_type=3d": "5988\n -OEChem-10052106453D\n\n 45 46 0 1 0 0 0 0 0999 V2000\n -1.4680 0.4385 -0.9184 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6033 -0.8919 0.8122 O 0 0 0 0 0 0 0 0 0 0 0 0\n 0.9285 0.4834 -0.3053 O 0 0 0 0 0 0 0 0 0 0 0 0\n -3.0702 -2.0054 1.1933 O 0 0 0 0 0 0 0 0 0 0 0 0\n -4.6200 0.6319 0.7326 O 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2231 0.2156 2.5658 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6108 -1.7286 0.6379 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1500 1.8347 1.1537 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9582 -1.8480 -2.4300 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3845 3.2450 -0.8933 O 0 0 0 0 0 0 0 0 0 0 0 0\n 3.8369 0.2057 -2.5044 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4947 -0.8632 -0.3037 C 0 0 1 0 0 0 0 0 0 0 0 0\n -2.9301 -1.0229 0.1866 C 0 0 2 0 0 0 0 0 0 0 0 0\n -3.2290 0.3737 0.6887 C 0 0 1 0 0 0 0 0 0 0 0 0\n -2.5505 1.2243 -0.3791 C 0 0 1 0 0 0 0 0 0 0 0 0\n 0.7534 -0.7453 0.3971 C 0 0 1 0 0 0 0 0 0 0 0 0\n 1.6462 -0.7853 1.6390 C 0 0 1 0 0 0 0 0 0 0 0 0\n 3.1147 -0.5553 1.2746 C 0 0 2 0 0 0 0 0 0 0 0 0\n 3.2915 0.6577 0.3521 C 0 0 1 0 0 0 0 0 0 0 0 0\n 2.2579 0.7203 -0.7858 C 0 0 1 0 0 0 0 0 0 0 0 0\n -1.0903 -1.9271 -1.3122 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0027 2.5323 0.1653 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5886 -0.1903 -1.9666 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.6217 -1.2732 -0.6273 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.8148 0.5301 1.6917 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.2289 1.4361 -1.2150 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0588 -1.5992 -0.2109 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5257 -1.7530 2.1409 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6908 -0.4029 2.1956 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3100 0.6750 -0.0511 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2441 1.7505 -1.1644 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1311 -2.9324 -0.8803 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0995 -1.7686 -1.7400 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2448 2.3605 0.9369 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7990 3.1543 0.5841 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8210 -0.1132 -2.7443 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6532 -1.2446 -1.6891 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.9800 -1.9485 1.5318 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.7364 1.5664 0.9746 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2787 0.0666 2.7433 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5490 -1.5769 0.4327 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.3427 2.6011 0.5871 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.6962 -2.5508 -3.0488 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6790 2.6806 -1.2535 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7489 1.1234 -2.8135 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 12 1 0 0 0 0\n 1 15 1 0 0 0 0\n 2 12 1 0 0 0 0\n 2 16 1 0 0 0 0\n 3 16 1 0 0 0 0\n 3 20 1 0 0 0 0\n 4 13 1 0 0 0 0\n 4 38 1 0 0 0 0\n 5 14 1 0 0 0 0\n 5 39 1 0 0 0 0\n 6 17 1 0 0 0 0\n 6 40 1 0 0 0 0\n 7 18 1 0 0 0 0\n 7 41 1 0 0 0 0\n 8 19 1 0 0 0 0\n 8 42 1 0 0 0 0\n 9 21 1 0 0 0 0\n 9 43 1 0 0 0 0\n 10 22 1 0 0 0 0\n 10 44 1 0 0 0 0\n 11 23 1 0 0 0 0\n 11 45 1 0 0 0 0\n 12 13 1 0 0 0 0\n 12 21 1 0 0 0 0\n 13 14 1 0 0 0 0\n 13 24 1 0 0 0 0\n 14 15 1 0 0 0 0\n 14 25 1 0 0 0 0\n 15 22 1 0 0 0 0\n 15 26 1 0 0 0 0\n 16 17 1 0 0 0 0\n 16 27 1 0 0 0 0\n 17 18 1 0 0 0 0\n 17 28 1 0 0 0 0\n 18 19 1 0 0 0 0\n 18 29 1 0 0 0 0\n 19 20 1 0 0 0 0\n 19 30 1 0 0 0 0\n 20 23 1 0 0 0 0\n 20 31 1 0 0 0 0\n 21 32 1 0 0 0 0\n 21 33 1 0 0 0 0\n 22 34 1 0 0 0 0\n 22 35 1 0 0 0 0\n 23 36 1 0 0 0 0\n 23 37 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n5988\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.8\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n5\n7\n3\n6\n2\n4\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n31\n1 -0.56\n10 -0.68\n11 -0.68\n12 0.56\n13 0.28\n14 0.28\n15 0.28\n16 0.56\n17 0.28\n18 0.28\n19 0.28\n2 -0.56\n20 0.28\n21 0.28\n22 0.28\n23 0.28\n3 -0.56\n38 0.4\n39 0.4\n4 -0.68\n40 0.4\n41 0.4\n42 0.4\n43 0.4\n44 0.4\n45 0.4\n5 -0.68\n6 -0.68\n7 -0.68\n8 -0.68\n9 -0.68\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n7.2\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n21\n1 1 acceptor\n1 10 acceptor\n1 10 donor\n1 11 acceptor\n1 11 donor\n1 2 acceptor\n1 3 acceptor\n1 4 acceptor\n1 4 donor\n1 5 acceptor\n1 5 donor\n1 6 acceptor\n1 6 donor\n1 7 acceptor\n1 7 donor\n1 8 acceptor\n1 8 donor\n1 9 acceptor\n1 9 donor\n5 1 12 13 14 15 rings\n6 3 16 17 18 19 20 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n23\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n9\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n0000176400000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n77.6043\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n106.726\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10498660 4 18408044026397964117\n10922523 26 18270957947412558034\n12173636 292 18187639206870113283\n13224815 77 17458622358473311570\n13538477 17 18113339708453955071\n14787075 74 16953691508025939297\n16752209 62 18263631888762839941\n16945 1 18335425621479279865\n18186145 218 17274547520514330359\n18981168 100 18268423530044661341\n21069387 34 14261360128088530127\n21486144 27 17060339638598854669\n21524375 3 18051681158311593581\n23557571 272 18058448883949780938\n23598288 3 18263344932996233811\n3286 77 13046208503433749912\n3797600 57 17024331783845889456\n45790113 50 17748831773987668583\n474 4 16660656180029715844\n5161694 15 17275108284303089140\n5845 1 17700395143258406769\n7097593 13 17606669223978608523\n81228 2 17772737510739799175\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n408.77\n6.87\n2.31\n2.04\n0.35\n1.13\n-0.51\n0.41\n0.45\n-1.56\n-0.45\n1.48\n-0.52\n-0.16\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n844.863\n\n> <PUBCHEM_SHAPE_VOLUME>\n231.2\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/89594/sdf?record_type=3d": "89594\n -OEChem-10052106453D\n\n 26 27 0 1 0 0 0 0 0999 V2000\n -1.7023 -0.7962 -0.0339 N 0 0 1 0 0 0 0 0 0 0 0 0\n 2.2968 -0.7091 1.2171 N 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8846 0.3095 -0.5713 C 0 0 1 0 0 0 0 0 0 0 0 0\n -1.4955 1.5824 0.0436 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6857 1.0984 0.8596 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.0281 -0.2382 0.2329 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5872 0.1544 -0.2513 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.7618 -1.9503 -0.9217 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5569 0.7025 -1.0791 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.0008 -0.5357 0.8738 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.9009 0.5451 -0.7593 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.2156 -0.1627 0.3895 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0084 0.3665 -1.6624 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.8454 2.2456 -0.7571 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8018 2.1528 0.6709 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.3896 0.9650 1.9076 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.5220 1.8029 0.8293 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.6094 -0.8662 0.9151 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.6021 -0.0880 -0.6903 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.3643 -2.7460 -0.4698 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7627 -2.3668 -1.0885 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1975 -1.7036 -1.8965 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2798 1.2544 -1.9728 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3027 -0.9778 1.5770 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6775 0.9638 -1.3890 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2491 -0.3134 0.6833 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 1 0 0 0 0\n 1 6 1 0 0 0 0\n 1 8 1 0 0 0 0\n 2 10 1 0 0 0 0\n 2 12 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 7 1 0 0 0 0\n 3 13 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 14 1 0 0 0 0\n 4 15 1 0 0 0 0\n 5 6 1 0 0 0 0\n 5 16 1 0 0 0 0\n 5 17 1 0 0 0 0\n 6 18 1 0 0 0 0\n 6 19 1 0 0 0 0\n 7 9 1 0 0 0 0\n 7 10 2 0 0 0 0\n 8 20 1 0 0 0 0\n 8 21 1 0 0 0 0\n 8 22 1 0 0 0 0\n 9 11 2 0 0 0 0\n 9 23 1 0 0 0 0\n 10 24 1 0 0 0 0\n 11 12 1 0 0 0 0\n 11 25 1 0 0 0 0\n 12 26 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n89594\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.6\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n3\n8\n5\n2\n1\n4\n6\n7\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n14\n1 -0.81\n10 0.16\n11 -0.15\n12 0.16\n2 -0.62\n23 0.15\n24 0.15\n25 0.15\n26 0.15\n3 0.41\n6 0.27\n7 -0.14\n8 0.27\n9 -0.15\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n2\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n4\n1 1 cation\n1 2 acceptor\n5 1 3 4 5 6 rings\n6 2 7 9 10 11 12 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n12\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n1\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n00015DFA00000003\n\n> <PUBCHEM_MMFF94_ENERGY>\n28.7208\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n20.297\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10857977 72 17775003526630995877\n11031198 65 15195570112767051744\n124424 183 16630243602600998766\n12716758 59 17917438587693076950\n12932764 1 18260546727622590676\n13024252 1 16226046682879912029\n13538477 17 18408885174204472783\n13581323 91 18343582940815744751\n14144814 61 18408043996021716112\n15669948 3 18342177807847078535\n15775835 57 18335709325059071392\n16945 1 18272369771797619637\n17844478 74 16200440186260247257\n19422 9 18261119568669312802\n20645464 45 17275099513985106371\n20871998 184 18059580243045283455\n21061003 4 15791740684565994036\n21930827 45 17775288257134836167\n22445834 79 18114461171538339858\n23236772 104 18187931711079941641\n23402539 116 17917418822849705989\n23552423 10 18046347710651554349\n2748010 2 17832141619578997365\n276578 36 17986406502870703379\n3248919 1 18131066030632652660\n369184 2 17385724686165187853\n63268167 104 17603863420775935508\n77492 1 18260548934961214197\n8030462 33 18186801408873701612\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n236.99\n5.05\n1.44\n1.11\n1.12\n0.29\n-0.05\n-0.19\n-0.59\n-1.11\n0.21\n0.41\n0.08\n-0.79\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n494.786\n\n> <PUBCHEM_SHAPE_VOLUME>\n134.9\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5997/sdf?record_type=3d": "5997\n -OEChem-10052106453D\n\n 74 77 0 1 0 0 0 0 0999 V2000\n 7.4996 1.5828 -0.3199 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8177 -1.1082 -0.2032 C 0 0 1 0 0 0 0 0 0 0 0 0\n -0.1192 -0.4371 0.9962 C 0 0 2 0 0 0 0 0 0 0 0 0\n 1.4069 -0.5652 0.9577 C 0 0 1 0 0 0 0 0 0 0 0 0\n 1.9478 0.0601 -0.3611 C 0 0 1 0 0 0 0 0 0 0 0 0\n -2.2919 -0.8444 0.1890 C 0 0 2 0 0 0 0 0 0 0 0 0\n -0.3507 -0.3835 -1.4733 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5192 -0.0819 -0.4669 C 0 0 2 0 0 0 0 0 0 0 0 0\n -0.8724 -0.9821 2.2059 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.1802 -0.4327 -1.6188 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.3228 -1.1293 1.7092 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0419 0.1295 2.1715 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3507 -1.6209 -0.5805 C 0 0 1 0 0 0 0 0 0 0 0 0\n -0.5360 -2.6262 -0.3284 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.1902 0.2693 0.8685 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0250 0.9005 -1.5654 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5099 0.3709 2.0236 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.9298 -1.5261 -0.8427 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.6816 0.5131 0.8483 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.5422 1.0788 -1.6005 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.7871 -1.2758 -0.1342 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0799 1.5067 -0.2396 C 0 0 2 0 0 0 0 0 0 0 0 0\n -3.2110 -1.3511 -2.0841 C 0 0 0 0 0 0 0 0 0 0 0 0\n -5.1857 0.2026 -0.2341 C 0 0 0 0 0 0 0 0 0 0 0 0\n -6.5950 0.4923 0.2927 C 0 0 0 0 0 0 0 0 0 0 0 0\n -7.0210 1.9641 0.1265 C 0 0 0 0 0 0 0 0 0 0 0 0\n -6.9608 2.4322 -1.3284 C 0 0 0 0 0 0 0 0 0 0 0 0\n -6.1320 2.8612 0.9919 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.3420 0.6430 0.9624 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.6832 -1.6247 1.0013 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.7287 1.1384 -0.2924 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4681 0.2316 0.0536 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6679 0.6670 -1.4515 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.7587 -0.8152 -2.3872 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8128 -0.3057 3.0646 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.4762 -1.9538 2.5211 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4682 -1.4584 -1.8669 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4577 0.1809 -2.4834 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6868 -2.1380 1.9354 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.9829 -0.4196 2.2204 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8749 -0.4861 3.0637 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.5596 1.0968 2.3598 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.2280 -2.6991 -0.4184 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9839 -3.0472 -1.2333 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.5324 -2.8514 -0.3834 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9299 -3.1942 0.5205 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5741 1.8900 -1.4087 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6971 0.5660 -2.5568 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.0374 0.6439 2.9344 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6098 -1.7868 -1.8567 H 0 0 0 0 0 0 0 0 0 0 0 0\n 5.0153 -1.6694 -0.8217 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5014 -2.2625 -0.1550 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0427 0.8850 1.8160 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2092 -0.4372 0.6979 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0327 0.1540 -1.9285 H 0 0 0 0 0 0 0 0 0 0 0 0\n 5.8095 1.8311 -2.3531 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.4968 -1.8725 -0.7224 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.9223 -1.6028 0.9045 H 0 0 0 0 0 0 0 0 0 0 0 0\n 5.7045 2.5078 0.0055 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.0371 -0.2938 -2.3068 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.1284 -1.6408 -2.6111 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4266 -1.9624 -2.5342 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.4754 0.8060 0.3359 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.1073 0.5076 -1.2817 H 0 0 0 0 0 0 0 0 0 0 0 0\n 7.8276 1.8603 0.5525 H 0 0 0 0 0 0 0 0 0 0 0 0\n -6.6571 0.2080 1.3505 H 0 0 0 0 0 0 0 0 0 0 0 0\n -7.3119 -0.1425 -0.2432 H 0 0 0 0 0 0 0 0 0 0 0 0\n -8.0556 2.0552 0.4799 H 0 0 0 0 0 0 0 0 0 0 0 0\n -7.5096 1.7460 -1.9817 H 0 0 0 0 0 0 0 0 0 0 0 0\n -7.4214 3.4218 -1.4250 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.9346 2.5173 -1.6989 H 0 0 0 0 0 0 0 0 0 0 0 0\n -6.1070 2.5091 2.0285 H 0 0 0 0 0 0 0 0 0 0 0 0\n -6.5260 3.8837 1.0014 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.1039 2.9156 0.6205 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 22 1 0 0 0 0\n 1 65 1 0 0 0 0\n 2 3 1 0 0 0 0\n 2 6 1 0 0 0 0\n 2 7 1 0 0 0 0\n 2 14 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 9 1 0 0 0 0\n 3 29 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 12 1 0 0 0 0\n 4 30 1 0 0 0 0\n 5 8 1 0 0 0 0\n 5 10 1 0 0 0 0\n 5 31 1 0 0 0 0\n 6 11 1 0 0 0 0\n 6 13 1 0 0 0 0\n 6 32 1 0 0 0 0\n 7 10 1 0 0 0 0\n 7 33 1 0 0 0 0\n 7 34 1 0 0 0 0\n 8 15 1 0 0 0 0\n 8 16 1 0 0 0 0\n 8 18 1 0 0 0 0\n 9 11 1 0 0 0 0\n 9 35 1 0 0 0 0\n 9 36 1 0 0 0 0\n 10 37 1 0 0 0 0\n 10 38 1 0 0 0 0\n 11 39 1 0 0 0 0\n 11 40 1 0 0 0 0\n 12 17 1 0 0 0 0\n 12 41 1 0 0 0 0\n 12 42 1 0 0 0 0\n 13 21 1 0 0 0 0\n 13 23 1 0 0 0 0\n 13 43 1 0 0 0 0\n 14 44 1 0 0 0 0\n 14 45 1 0 0 0 0\n 14 46 1 0 0 0 0\n 15 17 2 0 0 0 0\n 15 19 1 0 0 0 0\n 16 20 1 0 0 0 0\n 16 47 1 0 0 0 0\n 16 48 1 0 0 0 0\n 17 49 1 0 0 0 0\n 18 50 1 0 0 0 0\n 18 51 1 0 0 0 0\n 18 52 1 0 0 0 0\n 19 22 1 0 0 0 0\n 19 53 1 0 0 0 0\n 19 54 1 0 0 0 0\n 20 22 1 0 0 0 0\n 20 55 1 0 0 0 0\n 20 56 1 0 0 0 0\n 21 24 1 0 0 0 0\n 21 57 1 0 0 0 0\n 21 58 1 0 0 0 0\n 22 59 1 0 0 0 0\n 23 60 1 0 0 0 0\n 23 61 1 0 0 0 0\n 23 62 1 0 0 0 0\n 24 25 1 0 0 0 0\n 24 63 1 0 0 0 0\n 24 64 1 0 0 0 0\n 25 26 1 0 0 0 0\n 25 66 1 0 0 0 0\n 25 67 1 0 0 0 0\n 26 27 1 0 0 0 0\n 26 28 1 0 0 0 0\n 26 68 1 0 0 0 0\n 27 69 1 0 0 0 0\n 27 70 1 0 0 0 0\n 27 71 1 0 0 0 0\n 28 72 1 0 0 0 0\n 28 73 1 0 0 0 0\n 28 74 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n5997\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.8\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n7\n5\n8\n4\n3\n2\n6\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n9\n1 -0.68\n12 0.14\n15 -0.28\n17 -0.29\n19 0.14\n22 0.28\n49 0.15\n65 0.4\n8 0.14\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n7\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n9\n1 1 acceptor\n1 1 donor\n1 23 hydrophobe\n3 26 27 28 hydrophobe\n5 13 21 24 25 26 hydrophobe\n5 2 3 6 9 11 rings\n6 2 3 4 5 7 10 rings\n6 4 5 8 12 15 17 rings\n6 8 15 16 19 20 22 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n28\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n8\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n0000176D00000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n82.553\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n45.771\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10 15 14201398317544894844\n10554248 39 18199174101953245359\n10674148 151 18114187432842097806\n10693767 8 14548746058220655756\n10763959 59 17846497071130424904\n10906281 52 17676499366678374398\n11456790 92 17530959199002116096\n11578080 2 18129671794048770365\n11646440 116 15791729715594053676\n12011746 2 16702310087321501690\n12035758 1 14490475287696122777\n12236239 1 17967809478914911594\n12596602 18 17530688727435562617\n12788726 201 18040703771474481796\n12838862 33 15913321408802949984\n13140716 1 15431175757926876262\n13540713 4 16055169497864760667\n13690498 29 16987705965868870375\n13914758 101 18342460322649070642\n14251764 18 17386006217161245607\n14251764 30 8502655891874380677\n14765038 42 16950288428821426101\n14849402 71 17168435985638482997\n14931854 50 16988575610561587846\n15183329 4 16630528406409440099\n15196674 1 15625960754516932474\n15238133 3 18333725836347762376\n15840311 113 17822853057797274213\n17349148 13 13038919857996304966\n17980427 23 17967535700941478639\n18222031 100 14405187257277350666\n20105231 36 15068620466676381880\n20511986 3 17917986187750276934\n20775438 99 12676311884408373973\n21033648 29 18200865270647027048\n21267235 1 15625393462087966950\n21279426 13 16487252213924147391\n21424621 283 18407760322496464899\n21521239 73 14476956787811061861\n21623969 137 14345793842346874809\n21756936 100 18113336432095723219\n21781055 127 17458634398395783884\n21792961 116 17274830168344647799\n21859007 373 17560505236312641768\n22122407 14 18042137586055571521\n221357 26 15410623592460290010\n2215653 11 15913331307642354906\n22393880 68 16773787139040921655\n23559900 14 16056880286053780946\n23569914 152 15836511509965455149\n23576562 1 16844434098215242269\n2838139 119 18336546109696149021\n3004659 81 16415479384839559866\n312425 54 12974155234818435261\n3178227 256 15068343419394461636\n3633792 109 18059303063262761046\n3882209 13 16194826947298677463\n392239 28 15719396157206857359\n4058900 60 18343027649132611883\n4093350 32 18187080646932444458\n4098825 35 18412826850544501902\n4340502 62 14996282517783219032\n465052 167 11169916086851966654\n474113 269 17131275628731627422\n5104073 3 14635410659827713573\n5385378 56 17022899021542622650\n59755656 215 16988847167741490984\n999808 66 12612750220459161881\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n570.36\n18.22\n2.24\n2.01\n9.38\n0.64\n-0.38\n16.13\n3.09\n3.43\n0.33\n-0.76\n-0.09\n-0.4\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n1181.228\n\n> <PUBCHEM_SHAPE_VOLUME>\n325.9\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/4158/sdf?record_type=3d": "4158\n -OEChem-10052106453D\n\n 36 37 0 1 0 0 0 0 0999 V2000\n 0.2042 -2.1333 0.9271 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1037 -2.7833 -1.2609 O 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3120 1.6427 -0.3159 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.2425 0.2183 0.0339 C 0 0 1 0 0 0 0 0 0 0 0 0\n -2.5386 -0.5031 -0.3606 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.0430 -0.4113 -0.6720 C 0 0 1 0 0 0 0 0 0 0 0 0\n -3.7572 0.1638 0.2717 C 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7666 1.6585 -0.0300 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4360 2.3066 0.3450 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.2688 0.2663 -0.3052 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0026 -1.9122 -0.4071 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4350 0.7493 0.9768 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2536 0.3781 -1.2657 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.6376 1.3708 1.3130 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4563 0.9995 -0.9295 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6483 1.4958 0.3598 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2932 -3.5068 1.3197 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.1596 0.1181 1.1229 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5234 -1.5509 -0.0405 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.6558 -0.5040 -1.4525 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.1887 -0.3014 -1.7576 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.7372 0.0096 1.3575 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.6763 -0.3004 -0.1025 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.9644 1.8142 -1.0982 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.5822 2.1416 0.5195 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4173 1.7366 -1.3264 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4476 3.3617 0.0505 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.2936 2.2862 1.4322 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.6947 0.6496 1.7611 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.1138 -0.0075 -2.2711 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.7907 1.7511 2.3188 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2437 1.0961 -1.6713 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.5855 1.9781 0.6221 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.1404 -3.9885 0.8224 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6404 -4.0278 1.0870 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.4545 -3.5413 2.4004 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 11 1 0 0 0 0\n 1 17 1 0 0 0 0\n 2 11 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 9 1 0 0 0 0\n 3 26 1 0 0 0 0\n 4 5 1 0 0 0 0\n 4 6 1 0 0 0 0\n 4 18 1 0 0 0 0\n 5 7 1 0 0 0 0\n 5 19 1 0 0 0 0\n 5 20 1 0 0 0 0\n 6 10 1 0 0 0 0\n 6 11 1 0 0 0 0\n 6 21 1 0 0 0 0\n 7 8 1 0 0 0 0\n 7 22 1 0 0 0 0\n 7 23 1 0 0 0 0\n 8 9 1 0 0 0 0\n 8 24 1 0 0 0 0\n 8 25 1 0 0 0 0\n 9 27 1 0 0 0 0\n 9 28 1 0 0 0 0\n 10 12 2 0 0 0 0\n 10 13 1 0 0 0 0\n 12 14 1 0 0 0 0\n 12 29 1 0 0 0 0\n 13 15 2 0 0 0 0\n 13 30 1 0 0 0 0\n 14 16 2 0 0 0 0\n 14 31 1 0 0 0 0\n 15 16 1 0 0 0 0\n 15 32 1 0 0 0 0\n 16 33 1 0 0 0 0\n 17 34 1 0 0 0 0\n 17 35 1 0 0 0 0\n 17 36 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n4158\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.6\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n5\n32\n24\n31\n14\n49\n17\n30\n39\n19\n51\n34\n45\n13\n9\n11\n41\n42\n26\n7\n20\n37\n27\n4\n36\n33\n44\n16\n35\n40\n18\n38\n6\n48\n10\n8\n29\n21\n25\n52\n50\n12\n2\n3\n15\n23\n22\n46\n28\n43\n47\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n20\n1 -0.43\n10 -0.14\n11 0.66\n12 -0.15\n13 -0.15\n14 -0.15\n15 -0.15\n16 -0.15\n17 0.28\n2 -0.57\n26 0.36\n29 0.15\n3 -0.9\n30 0.15\n31 0.15\n32 0.15\n33 0.15\n4 0.27\n6 0.2\n9 0.27\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n5.2\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n5\n1 2 acceptor\n1 3 cation\n1 3 donor\n6 10 12 13 14 15 16 rings\n6 3 4 5 7 8 9 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n17\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n2\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n0000103E00000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n33.3157\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n25.371\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10498660 4 18412540999017839093\n10922049 32 18411707586034940766\n11578080 2 11983202641268361197\n12532896 13 18338514243904318222\n12788726 201 17537733465812068146\n13132413 78 17617090313793228182\n13294875 104 18128802071998635144\n13538477 17 17751638990603554108\n13878862 14 17689429391989729989\n14178342 30 18334585611944736097\n14787075 74 18057318612178083833\n15309172 13 18261109690323776661\n15490181 7 18343010090967974591\n15775835 57 18413388734939903649\n15906896 17 18192433193299426270\n16945 1 18129089198862150316\n17980427 23 17407924749437572813\n18186145 218 17846227656374206768\n201361 129 18266183824848416361\n20510252 161 18267872863745140281\n20600515 1 16820750759296398752\n20645476 183 17968100888330046412\n20671657 1 18124032334564486137\n20711985 344 18050561047851860866\n21069387 34 13695874765958571177\n21501502 16 18124594185402113369\n21524375 3 18412263917417352822\n23402539 116 18271796969289812164\n23419403 2 17402674705631994618\n23526113 38 17774183244049625830\n23557571 272 17908151228376174388\n23558518 356 17980185706298501080\n25 1 17988371390089469268\n2748010 2 18340215115230311997\n276578 36 18334293167230804136\n305870 269 18336821992181971121\n3071541 236 18190173684003282602\n43471831 8 18335135380274163523\n5104073 3 18049735023406131881\n57177213 63 18335425608357261021\n6138700 20 18050858719725790774\n633830 44 18273215278991471405\n68419 9 17485323921139529391\n7364860 26 18054508006642727527\n77492 1 17459182040104515044\n81228 2 17978780538969920742\n81539 233 18334573491214392669\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n333.13\n5.83\n3.14\n1.21\n1.08\n3.21\n0.07\n-4.87\n0.04\n0.54\n0.84\n-0.77\n0.38\n-0.01\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n691.966\n\n> <PUBCHEM_SHAPE_VOLUME>\n188.4\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://cactus.nci.nih.gov/chemical/structure/[Cl-][Na+]/file?format=sdf&get3d=True": "ClNa\nAPtclcactv10042123193D 0 0.00000 0.00000\n \n 2 1 0 0 0 0 0 0 0 0999 V2000\n -0.9245 0.0000 0.0000 Cl 0 4 0 0 0 0 0 0 0 0 0 0\n 1.4255 0.0000 0.0000 Na 0 4 0 0 0 0 0 0 0 0 0 0\n 1 2 1 0 0 0 0\nM CHG 2 1 -1 2 1\nM RAD 2 1 2 2 2\nM END\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/5798/sdf?record_type=3d": "5798\n -OEChem-10052106453D\n\n 15 16 0 0 0 0 0 0 0999 V2000\n 1.5466 1.1309 -0.0001 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.6283 -1.0902 0.0001 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2393 0.7166 -0.0001 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3170 -0.6734 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9675 1.4168 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8699 -1.4256 -0.0001 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1388 0.6524 0.0002 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.3379 0.0161 0.0001 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.0930 -0.7436 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8680 2.0898 -0.0002 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0004 2.5004 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n -0.8451 -2.5106 -0.0001 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.4166 0.0792 0.0002 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.1028 1.1552 0.0002 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.0205 -1.3105 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 3 1 0 0 0 0\n 1 8 1 0 0 0 0\n 1 10 1 0 0 0 0\n 2 4 1 0 0 0 0\n 2 8 2 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 2 0 0 0 0\n 4 6 2 0 0 0 0\n 5 7 1 0 0 0 0\n 5 11 1 0 0 0 0\n 6 9 1 0 0 0 0\n 6 12 1 0 0 0 0\n 7 9 2 0 0 0 0\n 7 14 1 0 0 0 0\n 8 13 1 0 0 0 0\n 9 15 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n5798\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.4\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n15\n1 0.03\n10 0.27\n11 0.15\n12 0.15\n13 0.15\n14 0.15\n15 0.15\n2 -0.57\n3 -0.15\n4 0.23\n5 -0.15\n6 -0.15\n7 -0.15\n8 0.04\n9 -0.15\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n0\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n4\n1 1 donor\n3 1 2 8 cation\n5 1 2 3 4 8 rings\n6 3 4 5 6 7 9 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n9\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n000016A600000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n14.039\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n20.404\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n16945 1 18410573985162007143\n18185500 45 18194681690298610967\n21040471 1 18338517430527374272\n23552423 10 18260832609146004622\n2748010 2 18410855503220253223\n29004967 10 18261960759488928083\n369184 2 18410849962585860283\n5084963 1 18272367538303765043\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n175.25\n2.95\n1.52\n0.6\n0.35\n0\n0\n-0.01\n0\n-0.25\n0\n-0.03\n0\n0\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n387.656\n\n> <PUBCHEM_SHAPE_VOLUME>\n96.5\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/16078/sdf?record_type=3d": "16078\n -OEChem-10052106453D\n\n 53 55 0 1 0 0 0 0 0999 V2000\n -0.5787 -1.9919 0.4990 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.3951 2.6957 -0.8292 O 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7626 -0.9279 0.1684 C 0 0 2 0 0 0 0 0 0 0 0 0\n -2.1208 0.3156 -0.4942 C 0 0 2 0 0 0 0 0 0 0 0 0\n -1.8900 -2.1827 -0.0737 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.2255 -1.0355 -0.2831 C 0 0 0 0 0 0 0 0 0 0 0 0\n -0.6628 0.3922 -0.0810 C 0 0 0 0 0 0 0 0 0 0 0 0\n -5.0238 0.1842 0.1928 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.9653 1.5429 -0.2199 C 0 0 0 0 0 0 0 0 0 0 0 0\n -4.2731 1.4881 0.0931 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0013 -0.7572 0.3763 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.4784 -3.4921 0.4747 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.6307 -2.3886 -1.5769 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0890 1.5706 -0.2281 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.3498 -0.7035 0.7501 C 0 0 0 0 0 0 0 0 0 0 0 0\n -5.0789 2.7258 0.3636 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0651 0.4844 0.6346 C 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4370 1.6193 0.1358 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5035 0.5330 1.0232 C 0 0 0 0 0 0 0 0 0 0 0 0\n 4.4822 0.1832 -0.1131 C 0 0 0 0 0 0 0 0 0 0 0 0\n 5.9447 0.1800 0.3428 C 0 0 0 0 0 0 0 0 0 0 0 0\n 6.8816 -0.1965 -0.8055 C 0 0 0 0 0 0 0 0 0 0 0 0\n 8.3316 -0.2391 -0.3500 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7678 -0.7687 1.2599 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.1239 0.2077 -1.5874 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.7027 -1.9361 0.1170 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.2831 -1.1023 -1.3765 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.3102 0.0339 1.2415 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.9523 0.2416 -0.3877 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5384 2.5337 -0.2992 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.7071 -3.3855 1.5409 H 0 0 0 0 0 0 0 0 0 0 0 0\n -3.3910 -3.7904 -0.0496 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.7529 -4.3100 0.3960 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0447 -3.3038 -1.7339 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5631 -2.5009 -2.1391 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0362 -1.5994 -2.0459 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1.8418 -1.6018 1.1174 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.5017 2.6890 1.3728 H 0 0 0 0 0 0 0 0 0 0 0 0\n -5.9006 2.8083 -0.3551 H 0 0 0 0 0 0 0 0 0 0 0 0\n -4.4775 3.6379 0.2882 H 0 0 0 0 0 0 0 0 0 0 0 0\n 2.0084 2.5365 0.0105 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.7439 1.5317 1.4116 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.6714 -0.1492 1.8673 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.3559 0.8995 -0.9348 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.2275 -0.8046 -0.5182 H 0 0 0 0 0 0 0 0 0 0 0 0\n 0.2871 3.3882 -0.8427 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.2111 1.1713 0.7286 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.0679 -0.5326 1.1673 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.7804 0.5287 -1.6213 H 0 0 0 0 0 0 0 0 0 0 0 0\n 6.6037 -1.1779 -1.2071 H 0 0 0 0 0 0 0 0 0 0 0 0\n 8.4722 -0.9806 0.4429 H 0 0 0 0 0 0 0 0 0 0 0 0\n 8.9839 -0.5086 -1.1865 H 0 0 0 0 0 0 0 0 0 0 0 0\n 8.6519 0.7361 0.0304 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 5 1 0 0 0 0\n 1 11 1 0 0 0 0\n 2 14 1 0 0 0 0\n 2 46 1 0 0 0 0\n 3 4 1 0 0 0 0\n 3 5 1 0 0 0 0\n 3 6 1 0 0 0 0\n 3 24 1 0 0 0 0\n 4 7 1 0 0 0 0\n 4 9 1 0 0 0 0\n 4 25 1 0 0 0 0\n 5 12 1 0 0 0 0\n 5 13 1 0 0 0 0\n 6 8 1 0 0 0 0\n 6 26 1 0 0 0 0\n 6 27 1 0 0 0 0\n 7 11 1 0 0 0 0\n 7 14 2 0 0 0 0\n 8 10 1 0 0 0 0\n 8 28 1 0 0 0 0\n 8 29 1 0 0 0 0\n 9 10 2 0 0 0 0\n 9 30 1 0 0 0 0\n 10 16 1 0 0 0 0\n 11 15 2 0 0 0 0\n 12 31 1 0 0 0 0\n 12 32 1 0 0 0 0\n 12 33 1 0 0 0 0\n 13 34 1 0 0 0 0\n 13 35 1 0 0 0 0\n 13 36 1 0 0 0 0\n 14 18 1 0 0 0 0\n 15 17 1 0 0 0 0\n 15 37 1 0 0 0 0\n 16 38 1 0 0 0 0\n 16 39 1 0 0 0 0\n 16 40 1 0 0 0 0\n 17 18 2 0 0 0 0\n 17 19 1 0 0 0 0\n 18 41 1 0 0 0 0\n 19 20 1 0 0 0 0\n 19 42 1 0 0 0 0\n 19 43 1 0 0 0 0\n 20 21 1 0 0 0 0\n 20 44 1 0 0 0 0\n 20 45 1 0 0 0 0\n 21 22 1 0 0 0 0\n 21 47 1 0 0 0 0\n 21 48 1 0 0 0 0\n 22 23 1 0 0 0 0\n 22 49 1 0 0 0 0\n 22 50 1 0 0 0 0\n 23 51 1 0 0 0 0\n 23 52 1 0 0 0 0\n 23 53 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n16078\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.8\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n10\n9\n2\n4\n3\n7\n8\n6\n5\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n19\n1 -0.36\n10 -0.28\n11 0.08\n14 0.08\n15 -0.15\n16 0.14\n17 -0.14\n18 -0.15\n19 0.14\n2 -0.53\n30 0.15\n37 0.15\n4 0.28\n41 0.15\n46 0.45\n5 0.28\n7 -0.14\n8 0.14\n9 -0.29\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n4.8\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n8\n1 1 acceptor\n1 2 donor\n1 23 hydrophobe\n3 5 12 13 hydrophobe\n4 19 20 21 22 hydrophobe\n6 1 3 4 5 7 11 rings\n6 3 4 6 8 9 10 rings\n6 7 11 14 15 17 18 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n23\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n2\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n9\n\n> <PUBCHEM_CONFORMER_ID>\n00003ECE00000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n60.7777\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n40.642\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10165383 225 18339924806171102705\n10382601 240 18048040671259510633\n10411042 1 18049443948729322315\n10493431 412 18338516344554984201\n10730089 173 18334013874440565932\n10835480 77 18202277035968949360\n11036077 3 18411421670394297057\n11524674 6 17275099527418953630\n12011746 2 18336536179836846437\n12236239 1 17603303739767393064\n12390115 104 18270967847644556561\n12553582 1 18188753037897430376\n12643181 29 18341892975166310846\n13140716 1 18264760133252392913\n13288520 33 18411701010766986748\n13583140 156 15911906448163276298\n13914758 101 14548747161958230154\n14251752 14 18408886231404717962\n14617045 38 18412829071243300558\n14790565 3 18193840344755048457\n14856354 85 16443358575671451651\n15042514 8 18193839469489042379\n15183329 4 18408036304458040506\n15230672 131 18337954472976587790\n15927050 60 18411416177095358427\n16945 1 18335988674812882451\n17093844 174 18273210920189873138\n17492 89 17978228592760089778\n17804303 29 18340201994142308193\n19141452 34 18201999979727277718\n19591789 44 18121495748270077939\n20681677 155 18410007732753327432\n21033648 29 17774988120435619441\n21236236 1 18411980277750718648\n21267235 1 18335986466941132195\n21279426 13 18198909102027632254\n21781055 127 17772781358050478273\n23035841 295 18335137584109136624\n23402539 116 18341888597697746596\n23557571 272 18342462551831867566\n23559900 14 18272363214037070088\n2748010 2 18265048029938174023\n293599 30 18338796715176564465\n3004659 81 18334858329989337400\n335352 9 18408600383887400349\n34934 24 18334853879300769874\n350125 39 18409447003841680561\n4073 2 18262238932696286386\n437815 12 17847063281586398968\n484989 97 18191013712016142463\n5104073 3 18337379561169391800\n5265222 85 18270405022524488798\n559249 180 18412544306152485390\n59755656 215 18271528607417779894\n6328613 192 18408888460124116068\n7226269 152 18059859432677601073\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n461.59\n14.6\n2.92\n0.92\n33.68\n1.08\n0.12\n-2.36\n1.41\n-4.78\n0.15\n0.21\n0.22\n0\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n968.897\n\n> <PUBCHEM_SHAPE_VOLUME>\n260.6\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n",
"https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/2519/sdf?record_type=3d": "2519\n -OEChem-10052106453D\n\n 24 25 0 0 0 0 0 0 0999 V2000\n 0.4700 2.5688 0.0006 O 0 0 0 0 0 0 0 0 0 0 0 0\n -3.1271 -0.4436 -0.0003 O 0 0 0 0 0 0 0 0 0 0 0 0\n -0.9686 -1.3125 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0\n 2.2182 0.1412 -0.0003 N 0 0 0 0 0 0 0 0 0 0 0 0\n -1.3477 1.0797 -0.0001 N 0 0 0 0 0 0 0 0 0 0 0 0\n 1.4119 -1.9372 0.0002 N 0 0 0 0 0 0 0 0 0 0 0 0\n 0.8579 0.2592 -0.0008 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.3897 -1.0264 -0.0004 C 0 0 0 0 0 0 0 0 0 0 0 0\n 0.0307 1.4220 -0.0006 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.9061 -0.2495 -0.0004 C 0 0 0 0 0 0 0 0 0 0 0 0\n 2.5032 -1.1998 0.0003 C 0 0 0 0 0 0 0 0 0 0 0 0\n -1.4276 -2.6960 0.0008 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.1926 1.2061 0.0003 C 0 0 0 0 0 0 0 0 0 0 0 0\n -2.2969 2.1881 0.0007 C 0 0 0 0 0 0 0 0 0 0 0 0\n 3.5163 -1.5787 0.0008 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0451 -3.1973 -0.8937 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.5186 -2.7596 0.0011 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.0447 -3.1963 0.8957 H 0 0 0 0 0 0 0 0 0 0 0 0\n 4.1992 0.7801 0.0002 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0468 1.8092 -0.8992 H 0 0 0 0 0 0 0 0 0 0 0 0\n 3.0466 1.8083 0.9004 H 0 0 0 0 0 0 0 0 0 0 0 0\n -1.8087 3.1651 -0.0003 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.9322 2.1027 0.8881 H 0 0 0 0 0 0 0 0 0 0 0 0\n -2.9346 2.1021 -0.8849 H 0 0 0 0 0 0 0 0 0 0 0 0\n 1 9 2 0 0 0 0\n 2 10 2 0 0 0 0\n 3 8 1 0 0 0 0\n 3 10 1 0 0 0 0\n 3 12 1 0 0 0 0\n 4 7 1 0 0 0 0\n 4 11 1 0 0 0 0\n 4 13 1 0 0 0 0\n 5 9 1 0 0 0 0\n 5 10 1 0 0 0 0\n 5 14 1 0 0 0 0\n 6 8 1 0 0 0 0\n 6 11 2 0 0 0 0\n 7 8 2 0 0 0 0\n 7 9 1 0 0 0 0\n 11 15 1 0 0 0 0\n 12 16 1 0 0 0 0\n 12 17 1 0 0 0 0\n 12 18 1 0 0 0 0\n 13 19 1 0 0 0 0\n 13 20 1 0 0 0 0\n 13 21 1 0 0 0 0\n 14 22 1 0 0 0 0\n 14 23 1 0 0 0 0\n 14 24 1 0 0 0 0\nM END\n> <PUBCHEM_COMPOUND_CID>\n2519\n\n> <PUBCHEM_CONFORMER_RMSD>\n0.4\n\n> <PUBCHEM_CONFORMER_DIVERSEORDER>\n1\n\n> <PUBCHEM_MMFF94_PARTIAL_CHARGES>\n15\n1 -0.57\n10 0.69\n11 0.04\n12 0.3\n13 0.26\n14 0.3\n15 0.15\n2 -0.57\n3 -0.42\n4 0.05\n5 -0.42\n6 -0.57\n7 -0.24\n8 0.29\n9 0.71\n\n> <PUBCHEM_EFFECTIVE_ROTOR_COUNT>\n0\n\n> <PUBCHEM_PHARMACOPHORE_FEATURES>\n5\n1 1 acceptor\n1 2 acceptor\n3 4 6 11 cation\n5 4 6 7 8 11 rings\n6 3 5 7 8 9 10 rings\n\n> <PUBCHEM_HEAVY_ATOM_COUNT>\n14\n\n> <PUBCHEM_ATOM_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ATOM_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_DEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_BOND_UDEF_STEREO_COUNT>\n0\n\n> <PUBCHEM_ISOTOPIC_ATOM_COUNT>\n0\n\n> <PUBCHEM_COMPONENT_COUNT>\n1\n\n> <PUBCHEM_CACTVS_TAUTO_COUNT>\n1\n\n> <PUBCHEM_CONFORMER_ID>\n000009D700000001\n\n> <PUBCHEM_MMFF94_ENERGY>\n22.901\n\n> <PUBCHEM_FEATURE_SELFOVERLAP>\n25.487\n\n> <PUBCHEM_SHAPE_FINGERPRINT>\n10967382 1 18338799025773621285\n11132069 177 18339075025094499008\n12524768 44 18342463625094026902\n13140716 1 17978511158789908153\n16945 1 18338517550775811621\n193761 8 15816500986559935910\n20588541 1 18339082691204868851\n21501502 16 18338796715286957384\n22802520 49 18128840606503503494\n2334 1 18338516344016692929\n23402539 116 18270382932679789735\n23552423 10 18262240993325675966\n23559900 14 18199193898169584358\n241688 4 18266458702623303353\n2748010 2 18266180539182415717\n5084963 1 17698433339235542986\n528886 8 18267580380709240570\n53812653 166 18198902694142226312\n66348 1 18339079396917369615\n\n> <PUBCHEM_SHAPE_MULTIPOLES>\n256.45\n4.01\n2.83\n0.58\n0.71\n0.08\n0\n-0.48\n0\n-0.81\n0\n0.01\n0\n0\n\n> <PUBCHEM_SHAPE_SELFOVERLAP>\n550.88\n\n> <PUBCHEM_SHAPE_VOLUME>\n143.9\n\n> <PUBCHEM_COORDINATE_TYPE>\n2\n5\n10\n\n$$$$\n"
}
const atomGeometry = new THREE.IcosahedronGeometry(1, 1)
const instructionHandlers = {
// atom
'16': (args, data) => {
if(args[0] !== 'M'){
data.atoms.push({
vector: new THREE.Vector3(
parseFloat(args[0]),
parseFloat(args[1]),
parseFloat(args[2])
),
symbol: args[3]
})
}
},
// bond
'7': (args, data) => {
if(args[0] !== 'M'){
data.bonds.push({
a: parseInt(args[0]) - 1,
b: parseInt(args[1]) - 1,
bonds: parseInt(args[2])
})
}
}
}
const sdfTextToThreeSnatom = (sdfText, atomDataMap, rotation) => {
let data = {
atoms: [],
bonds: [],
maxBondLength: -Infinity,
minBondLength: Infinity,
bounds: new THREE.Box3()
}
let model = new THREE.Group()
let molecule = new THREE.Group()
const instructions = sdfText.split('M END').shift().split('\n')
instructions.forEach((instructionLine) => {
const args = instructionLine
.replace(/[ \t]+/g, ' ')
.replace(/^ /, '')
.split(' ')
const instrunctionHandler = instructionHandlers[args.length.toString()]
if (instrunctionHandler) {
instrunctionHandler(args, data)
}
})
data.bonds.forEach((bond) => {
const atomA = data.atoms[bond.a]
const atomB = data.atoms[bond.b]
bond.length = atomA.vector.distanceTo(atomB.vector)
data.maxBondLength = Math.max(data.maxBondLength, bond.length)
data.minBondLength = Math.min(data.minBondLength, bond.length)
})
const baseAtomScale = ((data.maxBondLength - data.minBondLength) * 0.5) + data.minBondLength * 0.6
data.atoms.forEach((atom) => {
const atomData = atomDataMap[atom.symbol.toLocaleLowerCase()]
if(!atomData) {
console.error('Could not find material for: ', atom.symbol)
}
let ball = new THREE.Mesh(atomGeometry, atomData.material)
ball.position.add(atom.vector)
ball.castShadow = ball.receiveShadow = true
ball.scale.multiplyScalar(baseAtomScale * atomData.scale)
molecule.add(ball)
})
data.bounds.expandByObject(molecule)
molecule.scale.multiplyScalar(1 / baseAtomScale)
if (rotation) {
molecule.rotation.copy(rotation)
}
// console.log(data)
model.add(molecule)
return {
data,
model
}
}
* {
margin: 0;
padding: 0;
border: 0;
outline: 0;
vertical-align: inherit;
font-size: inherit;
line-height: inherit;
font-weight: inherit;
font-style: inherit;
font-family: inherit;
text-align: inherit;
text-decoration: inherit;
color: inherit;
background-color: transparent;
}
html, body{
height: 100%;
}
html {
font-size: 16px;
-webkit-text-size-adjust: 100%;
}
body {
background-color: #262626;
font-size: 1rem;
line-height: 1.5rem;
font-weight: 400;
font-style: normal;
vertical-align: top;
font-family: 'Exo 2', sans-serif;
text-align: left;
text-decoration: none;
color: #ccc;
position: relative;
}
canvas,
svg {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.stroke{
stroke-linecap: round;
stroke-linejoin: round;
stroke: #888;
fill: transparent;
}
.text{
stroke: none;
fill: #888;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment