make_simple.py (pymol-v1.8.6.0.tar.bz2) | : | make_simple.py (pymol-v2.1.0.tar.bz2) | ||
---|---|---|---|---|
from __future__ import print_function | ||||
import string | import string | |||
import os | import os | |||
import sys | import sys | |||
# ChemPy Simple Forcefield (CSFF) Generator Script | # ChemPy Simple Forcefield (CSFF) Generator Script | |||
# | # | |||
# A simplified force field based on Amber Parm99 | # A simplified force field based on Amber Parm99 | |||
# =================================================== | # =================================================== | |||
# This force field is designed to be used to answer | # This force field is designed to be used to answer | |||
# general questions about shape and size of small | # general questions about shape and size of small | |||
skipping to change at line 58 | skipping to change at line 60 | |||
# skip | # skip | |||
l = f.readline() | l = f.readline() | |||
# read names & molecular weights | # read names & molecular weights | |||
self.type = [] | self.type = [] | |||
self.mw = {} | self.mw = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
a2 = string.strip(l[0:2]) | a2 = string.strip(l[0:2]) | |||
self.type.append(a2) | self.type.append(a2) | |||
if not self.mw.has_key(a2): | if a2 not in self.mw: | |||
self.mw[a2] = [] | self.mw[a2] = [] | |||
self.mw[a2].append([l[3:]]) | self.mw[a2].append([l[3:]]) | |||
# skip 1 | # skip 1 | |||
l = f.readline() | l = f.readline() | |||
# read bonds | # read bonds | |||
self.bond = {} | self.bond = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
a5 = l[0:5] | a5 = l[0:5] | |||
if a5[0:2]>a5[3:5]: | if a5[0:2]>a5[3:5]: | |||
a5 = a5[3:5]+'-'+a5[0:2] | a5 = a5[3:5]+'-'+a5[0:2] | |||
if not self.bond.has_key(a5): | if a5 not in self.bond: | |||
self.bond[a5] = [] | self.bond[a5] = [] | |||
self.bond[a5].append([l[5:]]) | self.bond[a5].append([l[5:]]) | |||
# read angles | # read angles | |||
self.angle = {} | self.angle = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
a5 = l[0:8] | a5 = l[0:8] | |||
if a5[0:2]>a5[6:8]: | if a5[0:2]>a5[6:8]: | |||
a5 = a5[6:8]+'-'+a5[3:5]+'-'+a5[0:2] | a5 = a5[6:8]+'-'+a5[3:5]+'-'+a5[0:2] | |||
if not self.angle.has_key(a5): | if a5 not in self.angle: | |||
self.angle[a5] = [] | self.angle[a5] = [] | |||
self.angle[a5].append([l[8:]]) | self.angle[a5].append([l[8:]]) | |||
# read torsion | # read torsion | |||
self.torsion = {} | self.torsion = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
a5 = l[0:11] | a5 = l[0:11] | |||
if not self.torsion.has_key(a5): | if a5 not in self.torsion: | |||
self.torsion[a5] = [] | self.torsion[a5] = [] | |||
self.torsion[a5].append([l[11:]]) | self.torsion[a5].append([l[11:]]) | |||
# read impropers | # read impropers | |||
self.improper = {} | self.improper = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
a5 = l[0:11] | a5 = l[0:11] | |||
if not self.improper.has_key(a5): | if a5 not in self.improper: | |||
self.improper[a5] = [] | self.improper[a5] = [] | |||
self.improper[a5].append([l[11:]]) | self.improper[a5].append([l[11:]]) | |||
# skip | # skip | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
if not len(l): break | if not len(l): break | |||
# read vdw equivalents | # read vdw equivalents | |||
self.vdw_eq = {} | self.vdw_eq = {} | |||
while 1: | while 1: | |||
l = string.strip(f.readline()) | l = string.strip(f.readline()) | |||
skipping to change at line 165 | skipping to change at line 167 | |||
"tmp3.dat > tmp4.dat") | "tmp3.dat > tmp4.dat") | |||
os.system("sed 's/SO/T4/g;s/SX/TA/g;s/SH/T2/g;s/-S /-T2/g;s/S -/T2-/g;' "+ | os.system("sed 's/SO/T4/g;s/SX/TA/g;s/SH/T2/g;s/-S /-T2/g;s/S -/T2-/g;' "+ | |||
"tmp4.dat > tmp5.dat") | "tmp4.dat > tmp5.dat") | |||
os.system("sed 's/-F /-R1/g;s/F -/R1-/g;s/-I /-R4/g;s/I -/R4-/g;"+ | os.system("sed 's/-F /-R1/g;s/F -/R1-/g;s/-I /-R4/g;s/I -/R4-/g;"+ | |||
"s/Cl/R2/g;s/Br/R3/g;' tmp5.dat > tmp6.dat") | "s/Cl/R2/g;s/Br/R3/g;' tmp5.dat > tmp6.dat") | |||
tmp = BlankObject() | tmp = BlankObject() | |||
print "CSFF: Chemical Python Simplified Force Field by Warren L. DeLano" | print("CSFF: Chemical Python Simplified Force Field by Warren L. DeLano") | |||
load(tmp,'tmp6.dat') | load(tmp,'tmp6.dat') | |||
kees = tmp.mw.keys() | kees = list(tmp.mw.keys()) | |||
kees.sort() | kees.sort() | |||
for a in kees: | for a in kees: | |||
c = '' | c = '' | |||
lst = '' | lst = '' | |||
for b in tmp.mw[a]: | for b in tmp.mw[a]: | |||
if lst!=b[0][0:8]: | if lst!=b[0][0:8]: | |||
print "%s%-2s %s" %(c,a,b[0]) | print("%s%-2s %s" %(c,a,b[0])) | |||
c = ' ' | c = ' ' | |||
lst = b[0][0:8] | lst = b[0][0:8] | |||
l = [ | l = [ | |||
'QA 16.00 0.434 delocalized, cationic oxygen', | 'QA 16.00 0.434 delocalized, cationic oxygen', | |||
'T1 32.06 2.900 Thiocarbonyl', | 'T1 32.06 2.900 Thiocarbonyl', | |||
] | ] | |||
for a in l: | for a in l: | |||
print a | print(a) | |||
print() | ||||
print "A J1 J2 J3 J4 JN Q1 Q2 QN" | print("A J1 J2 J3 J4 JN Q1 Q2 QN") | |||
kees = tmp.bond.keys() | kees = list(tmp.bond.keys()) | |||
kees.sort() | kees.sort() | |||
for a in kees: | for a in kees: | |||
if len(tmp.bond[a])==1: | if len(tmp.bond[a])==1: | |||
print "%-1s%s" %(a,tmp.bond[a][0][0]) | print("%-1s%s" %(a,tmp.bond[a][0][0])) | |||
else: | else: | |||
f1 = 0.0 | f1 = 0.0 | |||
f2 = 0.0 | f2 = 0.0 | |||
c = 0 | c = 0 | |||
for b in tmp.bond[a]: | for b in tmp.bond[a]: | |||
f1 = f1 + float(b[0][0:9]) | f1 = f1 + float(b[0][0:9]) | |||
f2 = f2 + float(b[0][9:18]) | f2 = f2 + float(b[0][9:18]) | |||
c = c + 1 | c = c + 1 | |||
f1 = f1 / c | f1 = f1 / c | |||
f2 = f2 / c | f2 = f2 / c | |||
print "%-1s%7.1f%9.3f combination of %d"%(a,f1,f2,c) | print("%-1s%7.1f%9.3f combination of %d"%(a,f1,f2,c)) | |||
# missing bond terms | # missing bond terms | |||
l = [ | l = [ | |||
'A -QN 434.0 1.010 INCORRECT HYDROGEN', | 'A -QN 434.0 1.010 INCORRECT HYDROGEN', | |||
'A -JN 434.0 1.010 INCORRECT HYDROGEN', | 'A -JN 434.0 1.010 INCORRECT HYDROGEN', | |||
'A -JA 434.0 1.010 WLD from A -J3', | 'A -JA 434.0 1.010 WLD from A -J3', | |||
'D2-DJ 428.0 1.425 WLD from CA-D2', | 'D2-DJ 428.0 1.425 WLD from CA-D2', | |||
'D2-D3 450.0 1.331 WLD gross estimate', | 'D2-D3 450.0 1.331 WLD gross estimate', | |||
'D2-Q2 480.0 1.240 WLD from D3-Q2', | 'D2-Q2 480.0 1.240 WLD from D3-Q2', | |||
skipping to change at line 287 | skipping to change at line 289 | |||
'Q2-Q2 453.7 1.370 WLD gross estimate', | 'Q2-Q2 453.7 1.370 WLD gross estimate', | |||
'Q2-T4 525.0 1.500 WLD gross estimate', | 'Q2-T4 525.0 1.500 WLD gross estimate', | |||
'TA-TA 166.0 2.038 WLD from T2-T2', | 'TA-TA 166.0 2.038 WLD from T2-T2', | |||
'TA-T4 166.0 2.038 WLD from T2-T2', | 'TA-T4 166.0 2.038 WLD from T2-T2', | |||
'T2-T4 166.0 2.038 WLD from T2-T2', | 'T2-T4 166.0 2.038 WLD from T2-T2', | |||
] | ] | |||
for a in l: | for a in l: | |||
if tmp.bond.has_key(a[0:5]): | if a[0:5] in tmp.bond: | |||
sys.stderr.write("Duplicate bond: %s\n"%a) | sys.stderr.write("Duplicate bond: %s\n"%a) | |||
print a | print(a) | |||
print() | ||||
kees = tmp.angle.keys() | kees = list(tmp.angle.keys()) | |||
kees.sort() | kees.sort() | |||
for a in kees: | for a in kees: | |||
if len(tmp.angle[a])==1: | if len(tmp.angle[a])==1: | |||
print "%-1s%s" %(a,tmp.angle[a][0][0]) | print("%-1s%s" %(a,tmp.angle[a][0][0])) | |||
else: | else: | |||
f1 = 0.0 | f1 = 0.0 | |||
f2 = 0.0 | f2 = 0.0 | |||
c = 0 | c = 0 | |||
for b in tmp.angle[a]: | for b in tmp.angle[a]: | |||
f1 = f1 + float(b[0][0:10]) | f1 = f1 + float(b[0][0:10]) | |||
f2 = f2 + float(b[0][10:22]) | f2 = f2 + float(b[0][10:22]) | |||
c = c + 1 | c = c + 1 | |||
f1 = f1 / c | f1 = f1 / c | |||
f2 = f2 / c | f2 = f2 / c | |||
print "%-1s%8.1f%12.2f combination of %d"%(a,f1,f2,c) | print("%-1s%8.1f%12.2f combination of %d"%(a,f1,f2,c)) | |||
# missing angle terms | # missing angle terms | |||
l = [ | l = [ | |||
'A -QN-J3 50.0 109.50 INCORRECT HYDROGEN', | 'A -QN-J3 50.0 109.50 INCORRECT HYDROGEN', | |||
'A -JN-J3 50.0 109.50 INCORRECT HYDROGEN', | 'A -JN-J3 50.0 109.50 INCORRECT HYDROGEN', | |||
'A -D3-D2 50.0 119.10 WLD from A -D3-J3', | 'A -D3-D2 50.0 119.10 WLD from A -D3-J3', | |||
'A -D3-J1 50.0 119.10 WLD from A -D3-J3', | 'A -D3-J1 50.0 119.10 WLD from A -D3-J3', | |||
'A -D3-JA 50.0 119.10 WLD from A -D3-J3', | 'A -D3-JA 50.0 119.10 WLD from A -D3-J3', | |||
'A -D3-R1 50.0 119.10 WLD from A -D3-J3', | 'A -D3-R1 50.0 119.10 WLD from A -D3-J3', | |||
'A -D3-R2 50.0 119.10 WLD from A -D3-J3', | 'A -D3-R2 50.0 119.10 WLD from A -D3-J3', | |||
'A -D3-R3 50.0 119.10 WLD from A -D3-J3', | 'A -D3-R3 50.0 119.10 WLD from A -D3-J3', | |||
skipping to change at line 979 | skipping to change at line 981 | |||
'TA-D3-TA 70.0 118.00 WLD gross estimate', | 'TA-D3-TA 70.0 118.00 WLD gross estimate', | |||
'TA-DA-TA 70.0 120.00 WLD from DA-DA-TA', | 'TA-DA-TA 70.0 120.00 WLD from DA-DA-TA', | |||
'TA-D4-TA 70.0 109.00 WLD gross estimate', | 'TA-D4-TA 70.0 109.00 WLD gross estimate', | |||
'TA-DJ-TA 70.0 120.00 WLD from DA-DA-TA', | 'TA-DJ-TA 70.0 120.00 WLD from DA-DA-TA', | |||
] | ] | |||
for a in l: | for a in l: | |||
if tmp.angle.has_key(a[0:8]): | if a[0:8] in tmp.angle: | |||
sys.stderr.write("Duplicate angle: %s\n"%a) | sys.stderr.write("Duplicate angle: %s\n"%a) | |||
print a | print(a) | |||
print() | ||||
# missing generalized torsions (divisors/forces need to be checked...) | # missing generalized torsions (divisors/forces need to be checked...) | |||
l = [ | l = [ | |||
'X -D2-DJ-X 2 0.00 0.0 2. WLD null', | 'X -D2-DJ-X 2 0.00 0.0 2. WLD null', | |||
'X -D2-D3-X 2 0.00 0.0 2. WLD null', | 'X -D2-D3-X 2 0.00 0.0 2. WLD null', | |||
'X -D2-J3-X 2 0.00 0.0 2. WLD null', | 'X -D2-J3-X 2 0.00 0.0 2. WLD null', | |||
'X -D2-JA-X 2 0.00 0.0 2. WLD null', | 'X -D2-JA-X 2 0.00 0.0 2. WLD null', | |||
'X -D2-T2-X 2 0.00 0.0 2. WLD null', | 'X -D2-T2-X 2 0.00 0.0 2. WLD null', | |||
'X -D2-Q2-X 2 0.00 0.0 2. WLD null', | 'X -D2-Q2-X 2 0.00 0.0 2. WLD null', | |||
'X -D3-JA-X 4 8.70 180.0 2. WLD from X -DJ-D3-X ', | 'X -D3-JA-X 4 8.70 180.0 2. WLD from X -DJ-D3-X ', | |||
'X -D3-J1-X 1 0.0 0.0 2. WLD null', | 'X -D3-J1-X 1 0.0 0.0 2. WLD null', | |||
skipping to change at line 1033 | skipping to change at line 1035 | |||
'X -Q2-T4-X 4 2.40 0.0 3. WLD from X -J4-T4-X ', | 'X -Q2-T4-X 4 2.40 0.0 3. WLD from X -J4-T4-X ', | |||
'X -Q2-Q2-X 9 1.40 0.0 3. WLD from X -D4-D4-X ', | 'X -Q2-Q2-X 9 1.40 0.0 3. WLD from X -D4-D4-X ', | |||
'X -T2-T2-X 1 3.50 0.0 -2. WLD from D4-T2-T2-D 4', | 'X -T2-T2-X 1 3.50 0.0 -2. WLD from D4-T2-T2-D 4', | |||
'X -T2-T2-X 1 0.60 0.0 3. WLD from D4-T2-T2-D 4', | 'X -T2-T2-X 1 0.60 0.0 3. WLD from D4-T2-T2-D 4', | |||
'X -T2-T4-X 1 0.0 0.0 2. WLD null', | 'X -T2-T4-X 1 0.0 0.0 2. WLD null', | |||
'X -TA-TA-X 1 0.0 0.0 2. WLD null', | 'X -TA-TA-X 1 0.0 0.0 2. WLD null', | |||
'X -TA-T4-X 1 0.0 0.0 2. WLD null', | 'X -TA-T4-X 1 0.0 0.0 2. WLD null', | |||
] | ] | |||
for a in l: | for a in l: | |||
if tmp.torsion.has_key(a[0:11]): | if a[0:11] in tmp.torsion: | |||
sys.stderr.write("Duplicate torsion: %s\n"%a) | sys.stderr.write("Duplicate torsion: %s\n"%a) | |||
print a | print(a) | |||
kees = tmp.torsion.keys() | kees = list(tmp.torsion.keys()) | |||
kees.sort() | kees.sort() | |||
kees.reverse() | kees.reverse() | |||
for a in kees: | for a in kees: | |||
if len(tmp.torsion[a])==1: | if len(tmp.torsion[a])==1: | |||
print "%-1s%s" %(a,tmp.torsion[a][0][0]) | print("%-1s%s" %(a,tmp.torsion[a][0][0])) | |||
else: | else: | |||
b = tmp.torsion[a][0] | b = tmp.torsion[a][0] | |||
f1 = float(b[0][0:6]) | f1 = float(b[0][0:6]) | |||
f2 = float(b[0][6:14]) | f2 = float(b[0][6:14]) | |||
f3 = float(b[0][14:27]) | f3 = float(b[0][14:27]) | |||
f4 = float(b[0][27:42]) | f4 = float(b[0][27:42]) | |||
c = 1 | c = 1 | |||
flag = 0 | flag = 0 | |||
for b in tmp.torsion[a][1:]: | for b in tmp.torsion[a][1:]: | |||
if ((f1 != float(b[0][0:6])) or | if ((f1 != float(b[0][0:6])) or | |||
(f3 != float(b[0][14:27])) or | (f3 != float(b[0][14:27])) or | |||
(f4 != float(b[0][27:42]))): | (f4 != float(b[0][27:42]))): | |||
flag=1 | flag=1 | |||
break | break | |||
f2 = f2 + float(b[0][6:14]) | f2 = f2 + float(b[0][6:14]) | |||
c = c + 1 | c = c + 1 | |||
if not flag: | if not flag: | |||
f2 = f2 / c | f2 = f2 / c | |||
print "%-1s%4d%8.2f%13.1f%14d. combination of %d"%(a,f1,f2,f3,f 4,c) | print("%-1s%4d%8.2f%13.1f%14d. combination of %d"%(a,f1,f2,f3,f 4,c)) | |||
else: | else: | |||
flag = 0 | flag = 0 | |||
ck = {} | ck = {} | |||
for b in tmp.torsion[a]: | for b in tmp.torsion[a]: | |||
f4 = float(b[0][27:42]) | f4 = float(b[0][27:42]) | |||
if ck.has_key(f4): | if f4 in ck: | |||
flag=1 | flag=1 | |||
break | break | |||
ck[f4] = 1 | ck[f4] = 1 | |||
if not flag: | if not flag: | |||
for b in tmp.torsion[a]: | for b in tmp.torsion[a]: | |||
print "%-1s%s" %(a,b[0]) | print("%-1s%s" %(a,b[0])) | |||
else: # known special cases | else: # known special cases | |||
if a == 'X -D4-J4-X ': | if a == 'X -D4-J4-X ': | |||
print "%-1s%s" %(a,tmp.torsion[a][1][0]) | print("%-1s%s" %(a,tmp.torsion[a][1][0])) | |||
elif a == 'X -D4-J3-X ': | elif a == 'X -D4-J3-X ': | |||
print "%-1s%s" %(a,tmp.torsion[a][1][0]) | print("%-1s%s" %(a,tmp.torsion[a][1][0])) | |||
elif a == 'Q2-D4-D4-Q2': | elif a == 'Q2-D4-D4-Q2': | |||
print "%-1s%s" %(a,tmp.torsion[a][1][0]) | print("%-1s%s" %(a,tmp.torsion[a][1][0])) | |||
print "%-1s%s" %(a,tmp.torsion[a][2][0]) | print("%-1s%s" %(a,tmp.torsion[a][2][0])) | |||
elif a == 'A -D4-DJ-Q1': | elif a == 'A -D4-DJ-Q1': | |||
print "%-1s%s" %(a,tmp.torsion[a][1][0]) | print("%-1s%s" %(a,tmp.torsion[a][1][0])) | |||
print "%-1s%s" %(a,tmp.torsion[a][2][0]) | print("%-1s%s" %(a,tmp.torsion[a][2][0])) | |||
else: | else: | |||
for b in tmp.torsion[a]: | for b in tmp.torsion[a]: | |||
print " %-1s%s" %(a,b[0]) | print(" %-1s%s" %(a,b[0])) | |||
# missing specific torsions | # missing specific torsions | |||
l = [ | l = [ | |||
'A -T2-T2-D4 1 3.50 0.0 -2. WLD from D4-T2-T2-D 4', | 'A -T2-T2-D4 1 3.50 0.0 -2. WLD from D4-T2-T2-D 4', | |||
'A -T2-T2-D4 1 0.60 0.0 3. WLD from D4-T2-T2-D 4', | 'A -T2-T2-D4 1 0.60 0.0 3. WLD from D4-T2-T2-D 4', | |||
] | ] | |||
for a in l: | for a in l: | |||
if tmp.torsion.has_key(a[0:11]): | if a[0:11] in tmp.torsion: | |||
sys.stderr.write("Duplicate torsion: %s\n"%a) | sys.stderr.write("Duplicate torsion: %s\n"%a) | |||
print a | print(a) | |||
print() | ||||
# missing general impropers | # missing general impropers | |||
l = [ | l = [ | |||
'X -X -DJ-JA 10.5 180. 2. WLD from X -X -DJ-Q 1', | 'X -X -DJ-JA 10.5 180. 2. WLD from X -X -DJ-Q 1', | |||
'X -X -DJ-QN 10.5 180. 2. WLD from X -X -DJ-Q 1', | 'X -X -DJ-QN 10.5 180. 2. WLD from X -X -DJ-Q 1', | |||
] | ] | |||
for a in l: | for a in l: | |||
if tmp.improper.has_key(a[0:11]): | if a[0:11] in tmp.improper: | |||
sys.stderr.write("Duplicate improper: %s\n"%a) | sys.stderr.write("Duplicate improper: %s\n"%a) | |||
print a | print(a) | |||
print() | ||||
kees = tmp.improper.keys() | kees = list(tmp.improper.keys()) | |||
kees.sort() | kees.sort() | |||
kees.reverse() | kees.reverse() | |||
for a in kees: # no major redundancy, just print the first record | for a in kees: # no major redundancy, just print the first record | |||
print "%-1s%s" %(a,tmp.improper[a][0][0]) | print("%-1s%s" %(a,tmp.improper[a][0][0])) | |||
print ''' | print(''' | |||
A Q2 0000. 0000. 4. flag for fast water | A Q2 0000. 0000. 4. flag for fast water | |||
J1 J1 J2 J3 J4 | J1 J1 J2 J3 J4 | |||
D2 D2 D3 D4 | D2 D2 D3 D4 | |||
MOD4 RE | MOD4 RE | |||
A 1.3870 0.0157 A Venstra et al JCC,8,(1992),963 | A 1.3870 0.0157 A Venstra et al JCC,8,(1992),963 | |||
QN 1.6612 0.2100 O OPLS | QN 1.6612 0.2100 O OPLS | |||
QA 1.6612 0.2100 O OPLS | QA 1.6612 0.2100 O OPLS | |||
Q2 1.6612 0.2100 O OPLS | Q2 1.6612 0.2100 O OPLS | |||
skipping to change at line 1182 | skipping to change at line 1184 | |||
# oxygen | # oxygen | |||
TINKER QA 8 3 | TINKER QA 8 3 | |||
TINKER Q2 8 2 | TINKER Q2 8 2 | |||
TINKER Q1 8 1 | TINKER Q1 8 1 | |||
TINKER QN 8 1 | TINKER QN 8 1 | |||
# sulfer | # sulfer | |||
TINKER T4 16 4 | TINKER T4 16 4 | |||
TINKER TA 16 2 | TINKER TA 16 2 | |||
TINKER T2 16 2 | TINKER T2 16 2 | |||
TINKER T1 16 1 | TINKER T1 16 1 | |||
''' | ''') | |||
os.unlink('tmp1.dat') | os.unlink('tmp1.dat') | |||
os.unlink('tmp2.dat') | os.unlink('tmp2.dat') | |||
os.unlink('tmp3.dat') | os.unlink('tmp3.dat') | |||
os.unlink('tmp4.dat') | os.unlink('tmp4.dat') | |||
os.unlink('tmp5.dat') | os.unlink('tmp5.dat') | |||
os.unlink('tmp6.dat') | os.unlink('tmp6.dat') | |||
End of changes. 37 change blocks. | ||||
47 lines changed or deleted | 49 lines changed or added |