Skip to content

Commit

Permalink
Merge pull request #52 from jmborr/51_load_dave
Browse files Browse the repository at this point in the history
  • Loading branch information
jmborr authored Apr 18, 2018
2 parents dc63e77 + 4581972 commit a880264
Show file tree
Hide file tree
Showing 9 changed files with 6,134 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ Fixes #xxxx. <!-- and fix #xxxx or close #xxxx xor resolves #xxxx -->

- [ ] Do changes function as described? Add comments below that describe the tests performed?
- [ ] Do the changes handle unexpected situations, e.g. bad input?

##### Documentation #####

- [ ] Has the relevant (user and developer) documentation been added/updated?

Does everything look good? Mark the review as **Approve**. A member of `@qef/gatekeepers` will take care of it.
1 change: 1 addition & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ History

0.3.0 ()
--------
* Load DAVE files (PR #51)
* Docs for data repository (PR #45)

0.2.3 (2018-04-10)
Expand Down
1 change: 1 addition & 0 deletions docs/qef.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ Modules

qef/models/models.rst
qef/operators/operators.rst
qef/io/io.rst
10 changes: 10 additions & 0 deletions docs/qef/io/io.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
==============
Input / Ouptut
==============

.. toctree::
:glob:
:maxdepth: 1

loaders

8 changes: 8 additions & 0 deletions docs/qef/io/loaders.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
===============
Data Loaders
===============

.. automodule:: qef.io.loaders
:members:
:undoc-members:
:show-inheritance:
71 changes: 71 additions & 0 deletions qef/io/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import re
import os
import numpy as np
import h5py
import logging

Expand Down Expand Up @@ -110,3 +111,73 @@ def load_nexus(file_name):
else:
raise IOError('No reader found for this HDF5 file')
return data


def load_dave(file_name, to_meV=True):
r"""
Parameters
----------
file_name : str
Path to file
to_meV : bool
Convert energies from micro-eV to mili-eV
Returns
-------
dict
keys are q(momentum transfer), x(energy or time), y(intensities), and
errors(e)
"""
comment_symbol = '#'
entries = dict(n_e='Number of Energy transfer values',
n_q='Number of q values',
e='Energy transfer (micro eV) values',
q='q (1/Angstroms) values',
g='Group')

with open(file_name) as f:
all = f.read()

# Check all entries are present in the file
for entry in entries.values():
if all.find('{} {}'.format(comment_symbol, entry)) < 0:
raise IOError('{} not found in {}'.format(entry, file_name))

# Load number of energies and Q values
def load_number_of_items(key):
pattern = re.compile(r'(\d+)')
# starting position for search
start = all.find(entries[key]) + len(entries[key])
return int(pattern.search(all[start:]).group(1))

n_e = load_number_of_items('n_e') # number of energy values
n_q = load_number_of_items('n_q') # number of Q values

# Load energies and Q values
def load_items(n, key):
pattern = re.compile(r'(\-*\d+\.*\d*)')
start = all.find(entries[key]) + len(entries[key])
matches = pattern.finditer(all[start:])
return np.asarray([float(m.group(1)) for m in matches][: n])

x = load_items(n_e, 'e') # energy values
if to_meV:
x *= 1.0E-03 # assumed data is in micro-eV
q = load_items(n_q, 'q') # Q values

# Load intensities
y = list()
e = list()
pattern = re.compile(r'(\-*\d+\.*\d*)')
for i in range(n_q):
entry = entries['g'] + ' {}'.format(i)
# starting position to search Group "i"
start = all.find(entry) + len(entry)
matches = pattern.finditer(all[start:])
# ye contains both intensities and errors
ye = np.asarray([float(m.group(1)) for m in matches][: 2 * n_e])
y.append(list(ye[::2])) # every other item in the list
e.append(list(ye[1::2])) # shift one, and then every other item

return dict(q=q, x=x, y=np.asarray(y), e=np.asarray(e))
3 changes: 2 additions & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ def io_fix():
q_values=(0.525312757876, 0.7291668809127, 0.9233951329944,
1.105593679447, 1.273206832528, 1.42416584459,
1.556455009584, 1.668282739099, 1.758225254224,
1.825094271503))
1.825094271503),
dave=pjn(data_dir, 'io', 'dave_file.grp'))
Loading

0 comments on commit a880264

Please sign in to comment.