[3028] | 1 | #!/usr/bin/env python |
---|
| 2 | # -*- coding: utf-8 -*- |
---|
| 3 | # Author: Jackson O'Donnell |
---|
| 4 | # jacksonhodonnell@gmail.com |
---|
| 5 | |
---|
| 6 | # An example script collecting data from a number of .gpx files |
---|
| 7 | # and plotting some aggregate |
---|
| 8 | |
---|
| 9 | from __future__ import division, print_function |
---|
| 10 | import glob |
---|
| 11 | import matplotlib.pyplot as plt |
---|
| 12 | import pandas as pd |
---|
| 13 | # Add GSASII to PYTHONPATH so this can iport |
---|
| 14 | import GSASIIscriptable as G2sc |
---|
| 15 | |
---|
| 16 | |
---|
| 17 | def name(p): |
---|
| 18 | return int(p.filename[-9:-4]) |
---|
| 19 | |
---|
| 20 | |
---|
| 21 | def get_info(p): |
---|
| 22 | """Get the desired info from a project. Returns a dictionary""" |
---|
| 23 | phase = p.phases()[0] |
---|
| 24 | hist = p.histograms()[0] |
---|
| 25 | # Output unit cell information |
---|
| 26 | output = phase.get_cell() |
---|
| 27 | # Gather histogram residuals, occupancy of a given atom, |
---|
| 28 | # goodness of fit |
---|
| 29 | output.update(hist.residuals) |
---|
| 30 | output.update({'O5 occupancy': phase.atom('O5').occupancy}) |
---|
| 31 | output['Rf^2'] = hist.data['data'][0]['0:0:Rf^2'] |
---|
| 32 | output['chisq'] = p['Covariance']['data']['Rvals']['chisq'] |
---|
| 33 | output['GOF'] = p['Covariance']['data']['Rvals']['GOF'] |
---|
| 34 | return output |
---|
| 35 | |
---|
| 36 | if __name__ == '__main__': |
---|
| 37 | files = glob.glob('carbon_output/*.gpx') |
---|
| 38 | projs = [G2sc.G2Project(f) for f in files] |
---|
| 39 | projs.sort(key=name) |
---|
| 40 | |
---|
| 41 | index = [name(p) for p in projs] |
---|
| 42 | df = pd.DataFrame([get_info(p) for p in projs], index=index) |
---|
| 43 | |
---|
| 44 | # Plot volume and occupancy together |
---|
| 45 | plt.rc('text', usetex=True) |
---|
| 46 | plt.rc('font', weight='bold', size='20') |
---|
| 47 | fig, (ax1, axbot1) = plt.subplots(2) |
---|
| 48 | df['O5 occupancy'].plot(ax=ax1, color='r') |
---|
| 49 | ax1.set_ylabel('Oxygen occupancy, [0,1]', color='r') |
---|
| 50 | ax1.tick_params('y', colors='r') |
---|
| 51 | |
---|
| 52 | ax2 = ax1.twinx() |
---|
| 53 | df['volume'].plot(ax=ax2, color='b') |
---|
| 54 | ax2.set_ylabel(r'Unit Cell Volume, A$^3$', color='b') |
---|
| 55 | ax2.tick_params('y', colors='b') |
---|
| 56 | |
---|
| 57 | # Plot residuals on same scale |
---|
| 58 | df['wR'].plot(ax=axbot1, label='wR') |
---|
| 59 | df['Rf^2'].plot(ax=axbot1, label='Rf^2') |
---|
| 60 | axbot1.set_ylabel(r'Residual (\%)') |
---|
| 61 | axbot1.set_xlabel('Data set number') |
---|
| 62 | |
---|
| 63 | axbot2 = axbot1.twinx() |
---|
| 64 | df['GOF'].plot(ax=axbot2, label='GOF', color='r') |
---|
| 65 | axbot2.set_ylabel(r'GOF') |
---|
| 66 | |
---|
| 67 | lns = axbot1.lines + axbot2.lines |
---|
| 68 | labs = [l.get_label() for l in lns] |
---|
| 69 | axbot1.legend(lns, labs, loc=0) |
---|
| 70 | |
---|
| 71 | fig.suptitle(r'Refined $\alpha$-MnO$_2$ at U$_{iso}$ = 0.01') |
---|
| 72 | |
---|
| 73 | plt.show() |
---|