-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPriorStripper.py
64 lines (52 loc) · 1.88 KB
/
PriorStripper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# prior stripper
# strips out prior information equations for all fixed parameters in a PEST control file
import numpy as np
from collections import OrderedDict
infile = 'rc_final3.pst'
outfile= 'rc_final3a.pst'
alldata = OrderedDict()
indat = open(infile,'r').readlines()
killpars = list()
# first find the divider lines in the input data
for i,line in enumerate(indat):
if '* parameter data' in line:
pardatSTART = i+1
elif '* observation groups' in line:
pardatEND = i
elif '* prior information' in line:
priordatSTART = i+1
elif '* regulari' in line:
priordatEND = i
# parse up the input into chunks for later output
# first (KEY THING!) is to pull off the counters
counters = indat[3].strip().split()
alldata['begindat'] = indat[:pardatSTART]
alldata['pardat'] = indat[pardatSTART:pardatEND]
alldata['middat'] = indat[pardatEND:priordatSTART]
alldata['priordat'] = np.array(indat[priordatSTART:priordatEND])
alldata['enddat'] = indat[priordatEND:]
ofp = open(outfile,'w')
# read in the parameter data to see what is fixed
for line in alldata['pardat']:
if line.split()[1].lower() == 'fixed':
killpars.append(line.split()[0].lower())
# slow loops, but quicker to code!
for cv in killpars:
kill = list()
print 'removing prior information for --> %s' %cv
for i,line in enumerate(alldata['priordat']):
if cv in line.lower():
kill.append(i)
alldata['priordat'] = np.delete(alldata['priordat'],kill)
# update the counters
counters[3] = len(alldata['priordat'])
alldata['begindat'][3] = ' '.join(str(l) for l in counters)
# update the output file
print 'updating the output file --> %s' %outfile
for csec in alldata:
for line in alldata[csec]:
ofp.write(line.strip() + '\r\n')
ofp.close()
print '\n' + '#' * 30
print 'Adjustable parameters = %d' %(int(counters[0])-len(killpars))
print '#' * 30 + '\n'