ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/utilities/mdShrink
Revision: 2013
Committed: Wed Aug 13 17:21:02 2014 UTC (10 years, 8 months ago) by gezelter
File size: 4082 byte(s)
Log Message:
AUtorev fix

File Contents

# User Rev Content
1 gezelter 2012 #!@PYTHON_EXECUTABLE@
2     """MetaData File Trimmer
3    
4     Skips every n frames of an OpenMD dump file and loads it into new dump file
5    
6     Usage: mdSplit
7    
8     Options:
9     -h, --help show this help
10     -m, --meta-data=... use specified meta-data (.dump) file
11     -o, --output-file=... use specified output file
12     -s, --split-frame=... split every n frames
13    
14    
15     Example:
16     mdShrink -s 10 -m long.md -o short.md
17    
18     """
19    
20     __author__ = "Dan Gezelter (gezelter@nd.edu)"
21 gezelter 2013 __version__ = "$Revision$"
22     __date__ = "$Date$"
23 gezelter 2012 __copyright__ = "Copyright (c) 2014 by the University of Notre Dame"
24     __license__ = "OpenMD"
25    
26     import sys
27     import getopt
28     import string
29     import os
30    
31     _haveMDFileName = 0
32     _haveOutFileName = 0
33     _haveSplitFrame = 0
34    
35     def usage():
36     print __doc__
37    
38     def shrinkFile(mdFileName,outputFileName,skipFrameNumber):
39     mdFile = open(mdFileName, 'r')
40     outFile = open(outputFileName, 'w')
41    
42     metaDataFrame = []
43     haveMetaData = 0
44     haveMetaDataEnd = 0
45     # Find OpenMD version info first
46     line = mdFile.readline()
47     while 1:
48     if '<OOPSE version=' in line or '<OpenMD version=' in line:
49     OpenMDversion = line
50     break
51     line = mdFile.readline()
52    
53     # Rewind file and find start of MetaData block
54    
55     mdFile.seek(0)
56     breakLoop = False
57     line = mdFile.readline()
58    
59     while 1:
60     if '<MetaData>' in line:
61     while 2:
62     metaDataFrame.append(line)
63     line = mdFile.readline()
64     if '</MetaData>' in line:
65     metaDataFrame.append(line)
66     breakLoop = True
67     break
68     if breakLoop:
69     break
70     line = mdFile.readline()
71    
72     outFile.write(OpenMDversion)
73     for metaline in metaDataFrame:
74     if 'sampleTime' in metaline:
75     metasplit = metaline.split()
76     sampleTime = float(metasplit[2].strip(';'))
77     newSampleTime = sampleTime * int(skipFrameNumber)
78     outFile.write('sampleTime = %10d;\n' % (newSampleTime))
79     else:
80     outFile.write(metaline)
81    
82     mdFile.seek(0)
83     framePos = 0
84     foundFrames = 0;
85     line = mdFile.readline()
86     while 1:
87     if '<Snapshot>' in line:
88     foundFrames += 1
89     division,remainder=divmod(foundFrames,int(skipFrameNumber))
90     if (remainder == 0):
91     while not '</Snapshot>' in line:
92     outFile.write(line)
93     line = mdFile.readline()
94     outFile.write(line)
95     line = mdFile.readline()
96     if not line: break
97    
98     outFile.write("</OpenMD>")
99     outFile.close()
100     mdFile.close()
101    
102    
103     def main(argv):
104     try:
105     opts, args = getopt.getopt(argv, "hm:o:s:", ["help", "meta-data=","output-file=","split-frame", ""])
106     except getopt.GetoptError:
107     usage()
108     sys.exit(2)
109     for opt, arg in opts:
110     if opt in ("-h", "--help"):
111     usage()
112     sys.exit()
113     elif opt in ("-m", "--meta-data"):
114     mdFileName = arg
115     global _haveMDFileName
116     _haveMDFileName = 1
117     elif opt in ("-o", "--output-file"):
118     outputFileName = arg
119     global _haveOutFileName
120     _haveOutFileName = 1
121     elif opt in ("-s", "--split-frame"):
122     skipFrameNumber = arg
123     global _haveSplitFrame
124     _haveSplitFrame = 1
125     if (_haveMDFileName != 1):
126     usage()
127     print "No meta-data file was specified"
128     sys.exit()
129     if (_haveOutFileName != 1):
130     usage()
131     print "No output file was specified"
132     sys.exit()
133     if (_haveSplitFrame != 1):
134     usage()
135     print "Frames to split was not specified"
136     sys.exit()
137     shrinkFile(mdFileName,outputFileName,skipFrameNumber);
138    
139     if __name__ == "__main__":
140     if len(sys.argv) == 1:
141     usage()
142     sys.exit()
143     main(sys.argv[1:])
144    

Properties

Name Value
svn:executable *