1 | #!@PYTHON@
|
---|
2 | #
|
---|
3 | # if a given block from a PDB was cut out, water molecules may have been cut through. This is bad for the neighbour numbers in the TIP3 potential.
|
---|
4 | # Hence, this script removes all dangling atoms.
|
---|
5 |
|
---|
6 | import sys, string, re, math
|
---|
7 | wrerr = sys.stderr.write
|
---|
8 | wrout = sys.stdout.write
|
---|
9 |
|
---|
10 | # check for parameters
|
---|
11 | if len(sys.argv) < 3:
|
---|
12 | wrerr("Usage: "+sys.argv[0]+" <datafile> <offset to SeqID>\n")
|
---|
13 | sys.exit(1)
|
---|
14 |
|
---|
15 | input = open(sys.argv[1], "r")
|
---|
16 | output = open(sys.argv[1]+".new", "w")
|
---|
17 | offsetID=int(sys.argv[2])
|
---|
18 |
|
---|
19 | ids={}
|
---|
20 | for line in input:
|
---|
21 | if "#" in line:
|
---|
22 | continue
|
---|
23 | if "END" in line:
|
---|
24 | break
|
---|
25 | entries=line.split()
|
---|
26 | if "TIP3" in line:
|
---|
27 | id=int(entries[offsetID])
|
---|
28 | if ids.has_key(id):
|
---|
29 | ids[id]=ids[id]+1
|
---|
30 | else:
|
---|
31 | ids[id]=1
|
---|
32 | #wrout("for key %d: %d present\n" % (id, ids[id]))
|
---|
33 |
|
---|
34 | wrout("The following ids will be removed: ")
|
---|
35 | for key in ids.keys():
|
---|
36 | if ids[key] < 3:
|
---|
37 | wrout("(%d = %d) " % (key, ids[key]))
|
---|
38 | wrout("\n")
|
---|
39 |
|
---|
40 | input.seek(0)
|
---|
41 | origin=[0., 0., 0.]
|
---|
42 | id=1
|
---|
43 | for line in input:
|
---|
44 | if "#" in line:
|
---|
45 | output.write(line)
|
---|
46 | continue
|
---|
47 | if "END" in line:
|
---|
48 | output.write(line)
|
---|
49 | break
|
---|
50 | entries=line.split()
|
---|
51 | if "TIP3" in line:
|
---|
52 | if (ids[int(entries[offsetID])] == 3):
|
---|
53 | #wrout("%d present, keeping line: %s" % (ids[id], line))
|
---|
54 | output.write("ATOM %6d %-4s%3s%2s %4s %8.3f%8.3f%8.3f%6.2f%6.2f %4s%2s \n" % (id, entries[2], entries[3], entries[4], entries[5], float(entries[6])-origin[0], float(entries[7])-origin[1], float(entries[8])-origin[2], float(entries[9]), float(entries[10]), entries[11], entries[2][0]))
|
---|
55 | id+=1
|
---|
56 | else:
|
---|
57 | wrout("Only %d present, dropping line: %s" % (ids[int(entries[offsetID])], line))
|
---|
58 | else:
|
---|
59 | output.write("ATOM %6d %-4s %3s%3s%4s %8.3f%8.3f%8.3f%6.2f%6.2f %4s%2s \n" % (id, entries[2], entries[3], entries[4], entries[5], float(entries[6])-origin[0], float(entries[7])-origin[1], float(entries[8])-origin[2], float(entries[9]), float(entries[10]), entries[11], entries[2][0]))
|
---|
60 | id+=1
|
---|
61 | input.close()
|
---|
62 | output.close()
|
---|