#! /usr/bin/python -t # _*_ coding: iso-8859-1 _*_ # Last edited on 2013-02-20 00:46:04 by stolfilocal PROG_NAME = __file__[len(__file__)-3] PROG_DESC = "Tests the SVG 'roadkill' diagram drawings for poly-C3O2" PROG_VERS = "1.0" PROG_COPYRIGHT = "Copyright © 2009-07-13 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_poly_carbon_suboxide_terminator, \ build_formula_poly_carbon_suboxide_hemimer, \ build_formula_poly_carbon_suboxide_monomer 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 2009-07-13 by Jorge Stolfi, IC-UNICAMP.\n" \ "\n" \ "MODIFICATION HISTORY\n" \ " 2009-07-13 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); sb = fm.bond_length(1.0); # Single bond length. db = fm.bond_length(2.0); # Double bond length. dX = 0; # Compute the proper bend angle {bang} for terminator-hemimer fitting: tilt = math.acos(0.5*sb/db); # Angle of C0-C1 bond in hemimer. sys.stderr.write("tilt = %.2f\n" % (tilt*180/pi)); beta = (120*pi/180); n = 0; while math.fabs(db/2.0 - cos(beta) - cos(beta/3.0)) > 0.001 and n < 100 : beta = math.acos(db/2.0 - cos(beta/3.0)); sys.stderr.write(" beta = %.2f\n" % (beta*180/pi)); assert n < 100; alfa = pi - 2*beta/3.0; bang = pi - beta - tilt; sys.stderr.write("beta = %.2f\n" % (beta*180/pi)); sys.stderr.write("alfa = %.2f\n" % (alfa*180/pi)); sys.stderr.write("bang = %.2f\n" % (bang*180/pi)); # # Left terminators of various kinds: # dX += 1.0*sb # fL = build_formula_poly_carbon_suboxide_terminator(style,".",0,0) # fm.add_subformula(fL, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 1.0*sb # fL = build_formula_poly_carbon_suboxide_terminator(style,".",0,1) # fm.add_subformula(fL, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 1.0*sb # fL = build_formula_poly_carbon_suboxide_terminator(style,".",bang,0) # fm.add_subformula(fL, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 1.0*sb # fL = build_formula_poly_carbon_suboxide_terminator(style,".",bang,1) # fm.add_subformula(fL, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # # Hemimers: # dX += 0.75*sb # fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",0,0) # fm.add_subformula(fH, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 0.75*sb # fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",bang,0) # fm.add_subformula(fH, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 0.75*sb # fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",0,bang) # fm.add_subformula(fH, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # dX += 0.75*sb # fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",bang,bang) # fm.add_subformula(fH, 0, 0, [dX, 0]) # dX += 0.75*sb # # dX += 0.5*sb # # # Right terminators of various kinds: # dX += 0.75*sb # fR = build_formula_poly_carbon_suboxide_terminator(style,".",0,0) # fm.add_subformula(fR, 0, 180, [dX, 0]) # dX += 1.0*sb # # dX += 0.5*sb # # dX += 0.75*sb # fR = build_formula_poly_carbon_suboxide_terminator(style,".",0,1) # fm.add_subformula(fR, 0, 180, [dX, 0]) # dX += 1.0*sb # # dX += 0.5*sb # # dX += 0.75*sb # fR = build_formula_poly_carbon_suboxide_terminator(style,".",bang,0) # fm.add_subformula(fR, 0, 180, [dX, 0]) # dX += 1.0*sb # # dX += 0.5*sb # # dX += 0.75*sb # fR = build_formula_poly_carbon_suboxide_terminator(style,".",bang,1) # fm.add_subformula(fR, 0, 180, [dX, 0]) # dX += 1.0*sb # # dX += 0.5*sb # Dimers dX += 1.0*sb fL = build_formula_poly_carbon_suboxide_terminator(style,".",0,0) fR = build_formula_poly_carbon_suboxide_terminator(style,".",0,0) fm.add_subformula(fL, 0, 0, [dX, 0]) fm.add_subformula(fR, 1, 0, [dX+1.5*sb, 0]) dX += 3.0*sb dX += 1.0*sb dX += 0.5*sb dX += 1.0*sb fL = build_formula_poly_carbon_suboxide_terminator(style,".",0,0) fR = build_formula_poly_carbon_suboxide_terminator(style,".",0,1) fm.add_subformula(fL, 0, 0, [dX, 0]) fm.add_subformula(fR, 1, 0, [dX+1.5*sb, 0]) dX += 3.0*sb dX += 1.0*sb dX += 0.5*sb # Trimers dX += 1.0*sb fL = build_formula_poly_carbon_suboxide_terminator(style,".",bang,0) fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",bang,bang) fR = build_formula_poly_carbon_suboxide_terminator(style,".",bang,0) fm.add_subformula(fL, 0, 0, [dX, 0]) fm.add_subformula(fH, 0, 0, [dX+1.5*sb, 0]) fm.add_subformula(fR, 0, 180, [dX+3.0*sb, 0]) dX += 4.5*sb dX += 1.0*sb dX += 0.5*sb dX += 1.0*sb fL = build_formula_poly_carbon_suboxide_terminator(style,".",bang,1) fH = build_formula_poly_carbon_suboxide_hemimer(style,".",".",bang,bang) fR = build_formula_poly_carbon_suboxide_terminator(style,".",bang,1) fm.add_subformula(fL, 0, 0, [dX, 0]) fm.add_subformula(fH, 0, 0, [dX+1.5*sb, 0]) fm.add_subformula(fR, 0, 180, [dX+3.0*sb, 0]) dX += 4.5*sb dX += 1.0*sb return fm; fm = build_formula(); svg = MFormula_SVG(fm,0); svg.standard_elem_style_1(); svg.output_figure();