#! /usr/bin/python -t # _*_ coding: iso-8859-1 _*_ # Last edited on 2009-07-13 13:23:50 by stolfi PROG_NAME = __file__[len(__file__)-3] PROG_DESC = "Outputs an SVG 'roadkill' diagram for said molecule" PROG_VERS = "1.0" PROG_COPYRIGHT = "Copyright © 2009-07-11 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 import mformula_svg; from mformula_svg import MFormula_SVG 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 2009-07-11 by Jorge Stolfi, IC-UNICAMP.\n" \ "\n" \ "MODIFICATION HISTORY\n" \ " 2009-07-11 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 def build_formula() : fh = build_formula_half(); # The left half of the molecule. fm = MFormula(); k0 = fm.add_subformula(fh, 0, 0, [0,0]); # Left half k1 = fm.add_subformula(fh, 1, 0, [0,0]); # Right half fm.add_bond(k0+0,k1+0,1.0); fm.add_bond(k0+2,k1+2,1.0); return fm; def build_formula_half() : "Builds the left half of the molecule, assumed centered at [0,0]." fh = MFormula(); c45 = cos(45*pi/180); s45 = sin(45*pi/180); db = fh.bond_length(2.0); # Relative length of double bonds. p0 = [-0.5, -0.5]; # Lower left carbon. p1 = rn.add(p0, [-db*c45, -db*s45]); # Lower left oxygen. p2 = rn.add(p0, [00.0, +1.0]); # Upper left oxygen. k0 = fh.add_atom("C", p0); k1 = fh.add_atom("O", p1); k2 = fh.add_atom("O", p2); fh.add_bond(k0,k1,2.0); fh.add_bond(k0,k2,1.0); return fh; fm = build_formula(); svg = MFormula_SVG(fm,0); svg.standard_elem_style_1(); svg.output_figure();