#! /usr/bin/python3 -t PROG_DESC = "Tests the SVG 'roadkill' diagram drawings for poly-C3O2" import math; from math import sqrt,sin,cos,pi import rn import re, sys import mformula import mformula_carbon_suboxide import mformula_carbon_suboxide; from mformula_carbon_suboxide import \ build_formula_poly_carbon_suboxide_terminator, \ build_formula_poly_carbon_suboxide_hemimer, \ build_formula_poly_carbon_suboxide_monomer import mformula_svg def image_name(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) + \ "_style" + style return imgname def image_descr(style): fname = __file__ imgname = re.sub(r'.*[/]', "", fname[0:-3]) descr = "Structural formula of " + re.sub(r'[_]', " ", imgname) descr += "\n" + \ "\n" + \ mformula_svg.style_descr(style) return descr def build_formula(svg): fm = mformula.obj() sb = svg.rel_bond_length(1.0) # Single bond length. db = svg.rel_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(svg,".",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(svg,".",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(svg,".",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(svg,".",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(svg,".",".",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(svg,".",".",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(svg,".",".",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(svg,".",".",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(svg,".",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(svg,".",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(svg,".",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(svg,".",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(svg,".",0,0) fR = build_formula_poly_carbon_suboxide_terminator(svg,".",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(svg,".",0,0) fR = build_formula_poly_carbon_suboxide_terminator(svg,".",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(svg,".",bang,0) fH = build_formula_poly_carbon_suboxide_hemimer(svg,".",".",bang,bang) fR = build_formula_poly_carbon_suboxide_terminator(svg,".",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(svg,".",bang,1) fH = build_formula_poly_carbon_suboxide_hemimer(svg,".",".",bang,bang) fR = build_formula_poly_carbon_suboxide_terminator(svg,".",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