#! /usr/bin/python -t # _*_ coding: iso-8859-1 _*_ # Last edited on 2013-02-21 13:56:48 by stolfilocal PROG_NAME = __file__[len(__file__)-3] PROG_DESC = "Outputs an SVG 'roadkill' diagram for said molecule" PROG_VERS = "1.0" PROG_COPYRIGHT = "Copyright © 2013-02-19 by the State University of Campinas (UNICAMP)" import sys import os import re import math; from math import sqrt,sin,cos,pi sys.path[1:0] = [ '.', '..', sys.path[0] + '/../lib', os.path.expandvars('${STOLFIHOME}/lib') ] # sys.stderr.write(re.sub('[,]', ',\n', "%s: path = %r\n" % (PROG_NAME, sys.path))); import rn import mformula; from mformula import MFormula import mformula_oxocarbon; from mformula_oxocarbon import build_formula_COOH; import mformula_svg; from mformula_svg import MFormula_SVG import mformula_args; import argparser PROG_HELP = \ PROG_NAME + " \\\n" \ + argparser.help_info_HELP + " \\\n" \ " > {FIGURE}.svg" PROG_INFO = \ "NAME\n" \ " " + PROG_NAME + " - " + PROG_DESC + ".\n" \ "\n" \ "DESCRIPTION\n" \ " " + PROG_HELP + ".\n" \ "\n" \ "DOCUMENTATION OPTIONS\n" \ + argparser.help_info_INFO + "\n" \ "\n" \ "AUTHOR\n" \ " Created 2010-02-19 by Jorge Stolfi, IC-UNICAMP.\n" \ "\n" \ "MODIFICATION HISTORY\n" \ " 2010-02-19 by J. Stolfi, IC-UNICAMP: created.\n" \ "\n" \ "WARRANTY\n" \ " " + argparser.help_info_NO_WARRANTY + "\n" \ "\n" \ "RIGHTS\n" \ " " + PROG_COPYRIGHT + ".\n" \ "\n" \ " " + argparser.help_info_STANDARD_RIGHTS style = mformula_args.parse(None); def build_formula() : fm = MFormula(style); a130 = 130*pi/180; c130 = cos(a130); s130 = sin(a130); a200 = 200*pi/180; c200 = cos(a200); s200 = sin(a200); a270 = 270*pi/180; c270 = cos(a270); s270 = sin(a270); occ = fm.bond_length(3.0/2.0); # Relative length of C-C bond. och = fm.bond_length(1.0); # Relative length of C-H (peripheral) bond. ocp = fm.bond_length(1.0/2.0); # Relative length of C-H (central) bond. p0a = [0,0]; # Position of left C. p1a = rn.add(p0a, rn.scale(och, [+c130, +s130])); # Position of top left H. p2a = rn.add(p0a, rn.scale(och, [+c200, +s200])); # Position of mid left H. p3a = rn.add(p0a, rn.scale(och, [+c270, +s270])); # Position of bot left H. p0b = rn.add(p0a, [occ,0]); # Position of right C. p1b = rn.add(p0b, rn.scale(och, [-c130, +s130])); # Position of top right H. p2b = rn.add(p0b, rn.scale(och, [-c200, +s200])); # Position of mid right H. p3b = rn.add(p0b, rn.scale(och, [-c270, +s270])); # Position of bot left H. phm = rn.add(p0a, [occ/2, sqrt(ocp*ocp - occ*occ/4)]); # Position of middle H. k0a = fm.add_atom("C", p0a, 1,2); # Left C. k0b = fm.add_atom("C", p0b, 1,2); # Right C. khm = fm.add_atom("H", phm, 0,1); # Middle H. k1a = fm.add_atom("H", p1a, 0,1); # Top left H. k2a = fm.add_atom("H", p2a, 0,1); # Mid left H. k3a = fm.add_atom("H", p3a, 0,1); # Bot left H. k1b = fm.add_atom("H", p1b, 0,1); # Top right H. k2b = fm.add_atom("H", p2b, 0,1); # Mid right H. k3b = fm.add_atom("H", p3b, 0,1); # Bot right H. if (style == 'S') : # Add the "+" symbol in the triangle: pq = rn.scale(1.0/3.0, rn.add(phm, rn.add(p0a, p0b))); kq = fm.add_atom("+", pq, +1,1); fm.add_bond(k0a,k0b,1.0); fm.add_bond(k0a,k1a,1.0); fm.add_bond(k0a,k2a,1.0); fm.add_bond(k0a,k3a,1.0); fm.add_bond(k0a,khm,0.5); fm.add_bond(k0b,k1b,1.0); fm.add_bond(k0b,k2b,1.0); fm.add_bond(k0b,k3b,1.0); fm.add_bond(k0b,khm,0.5); return fm; fm = build_formula(); svg = MFormula_SVG(fm,0); svg.standard_elem_style_1(); svg.output_figure();