# Created 2014, Zack Gainsforth import matplotlib matplotlib.use('Qt4Agg') import matplotlib.pyplot as plt import numpy as np #import QuickPlot import re from StringIO import StringIO import glob import os def GetalphaMELTSSection(FileName, SectionName): # Read the alphaMELTS file that has all the output. try: with open (FileName, 'r') as myfile: data=myfile.read() except: print 'Failed to open ' + FileName + '. Skipping.' return DataLines = StringIO(data) reout = re.compile(r'%s.*?(?:\n\n|\Z)' % (SectionName), re.S) # reout = re.compile(r'%s.*?%s' % (SectionName, stop), re.S) try: SectionStr = reout.search(data).group(0) except: # It is possible that this MELTS computation didn't produce this mineral. If so, just bail. return None # Convert it into a numpy array. SectionData = np.genfromtxt(StringIO(SectionStr), skip_header=1, skip_footer=0, names=True) return SectionData def ListalphaMELTSSections(FileName): # Read the alphaMELTS file that has all the output. try: with open (FileName, 'r') as myfile: data=myfile.read() except: print 'Failed to open ' + FileName + '. Skipping.' return DataLines = StringIO(data) SectionNames = list() while True: try: Line = DataLines.readline() if Line == '\n': s = DataLines.readline() snames = s.split() SectionNames.append(snames[0]) if Line == '': break except: break return SectionNames def ListAllMeltsFiles(PathName=os.getcwd()): fnames = glob.glob(os.path.join(PathName, '*.txt')) for f in fnames: _, filename = os.path.split(f) print filename + ': ' + str(ListalphaMELTSSections(f)) # P = GetalphaMELTSSection('Phase_mass_tbl.txt', 'Phase') # P = GetalphaMELTSSection('Phase_main_tbl.txt', 'clinopyroxene_1') print 'Example code: ' _, filename = os.path.split(f) print 's = GetalphaMELTSSection(\'' + filename + '\', \'' + ListalphaMELTSSections(f)[0] + '\')' s = GetalphaMELTSSection(f, ListalphaMELTSSections(f)[0]) print 'plot(s[\'' + s.dtype.names[0] + '\'], s[\'' + s.dtype.names[1] + '\'])' return #ListAllMeltsFiles(os.getcwd())