-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.py
190 lines (146 loc) · 5.92 KB
/
setup.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/usr/bin/env python
"""
axographio is a library that makes it easy to read and write binary data files
in the AxoGraph file format.
AxoGraph X is a commercial software package used for data acquisition and
analysis that is widely used in electrophysiological research (see
http://axographx.com for more details). While it can read and write files in
text format, its binary format is much smaller and faster to load and save;
thus many users preferentially use this format. The company distributes the
details of the file format along with sample C++ code for reading and writing
to these files with AxoGraph X.
Python is a powerful and easy to use general purpose programming language (see
http://python.org for more details). There are many useful python libraries
available for scientific data analysis and data visualization such as scipy,
matplotlib and MayaVI.
This library provides a simple interface for loading AxoGraph data files into
a python program or interactive session. If you want to analyze data you
recorded in AxoGraph using python based tools, this library provides the glue
code you'll need.
Installation
============
Preinstallation Requirements
----------------------------
* A working Python installation
* The setuptools package
* The NumPy package
* The Cython package
Note that NumPy takes a bit of work to build, so it may be easiest to install
it from your linux distribution's repository, or use as pre-built package
such as the Scipy Superpack (http://macinscience.org/?page_id=6) for the mac.
Depending on your OS, you may be able to get away with simply typing:
::
sudo easy_install numpy
sudo easy_install Cython
Installation
------------
Once all the preinstallation requirements have been met, you can download and
install axographio using easy_install by typing the following command in a
terminal window:
::
easy_install axographio
Upgrading
---------
If you have an older version of the package installed, you can update it to
the newest version using easy_install with the "-U" flag:
::
easy_install -U axographio
Usage
=====
Loading a data file is as easy as calling `read`:
>>> import axographio
>>>
>>> f = axographio.read("AxoGraph X File.axgx")
At this point the variable f will contain a file_contents object with the
column names and data from the file. For example, you could now plot the first
two columns using matplotlib:
>>> import matplotlib.pyplot as plt
>>>
>>> plt.plot(f.data[0], f.data[1])
>>> plt.xlabel(f.names[0])
>>> plt.ylabel(f.names[1])
>>> plt.show()
(The plt.show() command may be optional depending on your OS.)
Of course, you probably have grander plans than just plotting the data. The
column data supports the standard sequence interfaces (i.e. indexing,
iteration, etc.) and can be converted to a scipy or numpy array using the
asarray functions in these packages, e.g.:
>>> import scipy as sp
>>>
>>> times = sp.asarray(f.data[0])
Writing files is also relatively easy. You simply create a new file_contents
object (or use one you loaded earlier), and then call write. For example, the
following code creates a file in the current directory called "my60Hz.axgx"
with two channels with 60 Hz sine waves
>>> import axographio
>>> import numpy as np
>>>
>>> times = np.arange(0,10,0.0001)
>>> column1 = np.sin(2*np.pi * 60 * times)
>>> column2 = np.cos(2*np.pi * 60 * times)
>>> f = axographio.file_contents(
... ['time (s)', 'my recording (V)', 'your recording (V)'],
... [times, column1, column2])
>>> f.write("my60Hz.axgx")
Questions and Support
=====================
Please post any questions, problems, comments, or suggestions on the axographio
group on google groups (http://groups.google.com/group/axographio)
News
====
0.1.1
-----
Fixed a rounding error that could create one extra data point in the time
column.
0.1.0
-----
First release
Acknowledgments
===============
This initial version of this project was written in the
Chiel Laboratory at Case Western Reserve University, with support from NIH
grant NS047073, an Ohio Innovation Incentive Award Fellowship, and the
Case Western Reserve MSTP (NIH T32 GM007250). This project builds on a
number of other open source projects, including Python, C++ AxoGraph file
input/output code from AxoGraph Scientific (placed in the public domain; a
modified version is included with the project source code), Cython, and many
others. Thanks also to Dr. Hillel Chiel for providing testing and helpful
suggestions.
"""
from setuptools import setup
from distutils.extension import Extension
# setuptools DWIM monkey-patch madness
# http://mail.python.org/pipermail/distutils-sig/2007-September/thread.html#8204
import sys
import numpy
if 'setuptools.extension' in sys.modules:
m = sys.modules['setuptools.extension']
m.Extension.__dict__ = m._Extension.__dict__
setup(
name = "axographio",
version = "0.1.1b1",
setup_requires = ['setuptools_cython', 'numpy'],
ext_modules = [
Extension('axographio', [
'axographio.pyx',
'axograph_readwrite/fileUtils.cpp',
'axograph_readwrite/byteswap.cpp',
'axograph_readwrite/stringUtils.cpp',
'axograph_readwrite/AxoGraph_ReadWrite.cpp'],
language='c++', include_dirs=[numpy.get_include()],
define_macros=[('NO_CARBON',1)]
)
],
test_suite = 'test_axographio.test_all',
# metatdata
author = "Kendrick Shaw",
author_email = "[email protected]",
license = "BSD License",
keywords = ["physiology","electrophysiology","axograph"],
url = "http://code.google.com/p/axographio/",
description = "A python library for reading and writing AxoGraph data files",
classifiers = ["Development Status :: 4 - Beta", "Intended Audience :: Developers",
"Intended Audience :: Science/Research", "License :: OSI Approved :: BSD License",
"Topic :: Scientific/Engineering :: Bio-Informatics"],
long_description = __doc__
)