Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
ratal committed Nov 26, 2018
2 parents cc1fca2 + 3f14c53 commit bfde2de
Show file tree
Hide file tree
Showing 22 changed files with 7,073 additions and 6,774 deletions.
17 changes: 0 additions & 17 deletions .idea/inspectionProfiles/Project_Default.xml

This file was deleted.

43 changes: 24 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,25 +83,30 @@ Command example in ipython:
```python
import mdfreader
# loads whole mdf file content in yop mdf object.
yop=mdfreader.mdf('NameOfFile')
yop=mdfreader.Mdf('NameOfFile')
# you can print file content in ipython with a simple:
yop
# alternatively, for max speed and smaller memory footprint, read only few channels
yop=mdfreader.mdf('NameOfFile',channelList=['channel1', 'channel2'],convertAfterRead=False)
yop=mdfreader.Mdf('NameOfFile', channelList=['channel1', 'channel2'], convertAfterRead=False)
# also possible to keep data compressed for small memory footprint, using Blosc module
yop=mdfreader.mdf('NameOfFile',compression=True)
yop=mdfreader.Mdf('NameOfFile', compression=True)
# for interactive file exploration, possible to read the file but not its data to save memory
yop=mdfreader.mdf('NameOfFile',noDataLoading=True) # channel data will be loaded from file if needed
yop=mdfreader.Mdf('NameOfFile', noDataLoading=True) # channel data will be loaded from file if needed
# parsing xml metadata from mdf4.x for many channels can take more than just reading data.
# You can reduce to minimum metadata reading with below argument (no source information, attachment, etc.)
yop=mdfreader.Mdf('NameOfFile', metadata=0) # 0: full, 2: minimal
# only for mdf4.x, you can search for the mdf key of a channel name that can have been recorded by different sources
yop.get_channel_name4('channelName', 'source path or name') # returns list of mdf keys
# to yield one channel and keep its content in mdf object
yop.getChannel('channelName')
yop.get_channel('channelName')
# to yield one channel numpy array
yop.getChannelData('channelName')
yop.get_channel_data('channelName')
# to get file mdf version
yop.MDFVersionNumber
# to get file structure or attachments, you can create a mdfinfo instance
info=mdfreader.mdfinfo()
info.listChannels('NameOfFile') # returns only the list of channels
info.readinfo('NameOfFile') # complete file structure object
info=mdfreader.MdfInfo()
info.list_channels('NameOfFile') # returns only the list of channels
info.read_info('NameOfFile') # complete file structure object
yop.info # same class is stored in mdfreader class
# to list channels names after reading
yop.keys()
Expand All @@ -113,22 +118,22 @@ Command example in ipython:
# file manipulations
yop.resample(0.1)
# or
yop.resample(masterChannel='master3')
yop.resample(master_channel='master3')
# keep only data between begin and end
yop.cut(begin=10, end=15)
# export to other file formats :
yop.exporToCSV(sampling=0.01)
yop.exportToNetCDF()
yop.exportToHDF5()
yop.exportToMatlab()
yop.exportToXlsx()
yop.export_to_csv(sampling=0.01)
yop.export_to_NetCDF()
yop.export_to_hdf5()
yop.export_to_matlab()
yop.export_to_xlsx()
# converts data groups into pandas dataframes
yop.convertToPandas()
yop.convert_to_pandas()
# drops all the channels except the one in argument
yop.keepChannels({'channel1','channel2','channel3'})
yop.keep_channels({'channel1','channel2','channel3'})
# merge 2 files
yop2=mdfreader.mdf('NameOfFile_2')
yop=mergeMDF(yop2)
yop2=mdfreader.Mdf('NameOfFile_2')
yop.merge_mdf(yop2)
# can write mdf file after modifications or creation from scratch
# write4 and write3 also allow to convert file versions
yop.write('NewNameOfFile') # write in same version as original file after modifications
Expand Down
6,495 changes: 3,184 additions & 3,311 deletions dataRead.c

Large diffs are not rendered by default.

808 changes: 397 additions & 411 deletions dataRead.pyx

Large diffs are not rendered by default.

12 changes: 8 additions & 4 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@

# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'numpydoc', 'rst2pdf.pdfbuilder']
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon', 'numpydoc', 'sphinx.ext.intersphinx',
'sphinx.ext.coverage']

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
Expand All @@ -41,16 +42,16 @@

# General information about the project.
project = u'mdfreader'
copyright = u'2015, Aymeric Rateau'
copyright = u'2018, Aymeric Rateau'

# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '2.7.5'
version = '2.8'
# The full version, including alpha/beta/rc tags.
release = '2.7.5'
release = '2.8'

# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
Expand Down Expand Up @@ -247,3 +248,6 @@
# rst2pdf - name of the generated pdf
# Sample rst2pdf doc - title of the pdf
# Your Name - author name in the pdf

napoleon_numpy_docstring = True
numpydoc_show_class_members = False
4 changes: 2 additions & 2 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ Contents:
.. toctree::
:maxdepth: 3

mdf/index

mdfreader/index

mdf/index

mdf3reader/index

mdfinfo3/index
Expand Down
Binary file modified docs/mdfreader.pdf
Binary file not shown.
20 changes: 10 additions & 10 deletions mdfForVeuszPlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
from veusz.plugins.datasetplugin import Dataset1D as ImportDataset1D
from veusz.plugins.field import FieldFloat as ImportFieldFloat
try:
from mdfreader import mdf
from mdfreader import mdfinfo
from mdfreader import Mdf
from mdfreader import MdfInfo
except ImportError:
try:
from veusz.plugins.mdfreader import mdf
Expand All @@ -29,11 +29,11 @@
import os.path
sys.path.append(os.getcwdu())
print(os.path.join(os.getcwdu(), 'plugins'))
from mdfreader import mdf
from mdfreader import mdfinfo
from mdfreader import Mdf
from mdfreader import MdfInfo


class ImportPlugin(mdfinfo):
class ImportPlugin(MdfInfo):

"""Define a plugin to read data in a particular format.
Expand All @@ -58,7 +58,7 @@ def getPreview(self, params):
Returns (text, okaytoimport)
"""

info = mdfinfo(fileName=params.filename)
info = MdfInfo()

if info.mdfversion < 400:
f = ''
Expand All @@ -85,7 +85,7 @@ def getPreview(self, params):
f += 'Project Name: ' + Comment['project'] + '\n'
if 'subject' in Comment:
f += 'Subject: ' + Comment['subject'] + '\n' + 'Channel List:\n'
for channelName in info.listChannels():
for channelName in info.list_channels():
f += ' ' + channelName + '\n'
return f, True

Expand All @@ -97,7 +97,7 @@ def doImport(self, params):
return []


class MdfImportPlugin(ImportPlugin, mdf):
class MdfImportPlugin(ImportPlugin, Mdf):

"""Plugin to import mdf (Mostly ETAS INCA or CANape files)"""

Expand All @@ -115,8 +115,8 @@ def doImport(self, params):
Return a list of ImportDataset1D, ImportDataset2D objects
"""

data = mdf(params.filename)
data.resample(samplingTime=params.field_results['mult'])
data = Mdf(params.filename)
data.resample(sampling_time=params.field_results['mult'])
List = []
for channelName in list(data.keys()):
if len(data[channelName]['data']) > 0 and not data[channelName]['data'].dtype.kind in ['S', 'U']:
Expand Down
2 changes: 1 addition & 1 deletion mdfconverter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# along with this program. If not, see http://www.gnu.org/licenses.
#
# ----------------------------------------------------------------------
__version__ = "2.7.8"
__version__ = "3.0"
38 changes: 19 additions & 19 deletions mdfconverter/mdfreaderui4.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.fileNames = [] # files to convert
self.mdfClass = mdf() # instance of mdf
self.mdfinfoClass = mdfinfo() # instance of mdfinfo
self.mdfClass = Mdf() # instance of mdf
self.mdfinfoClass = MdfInfo() # instance of mdfinfo
self.convertSelection = 'Matlab' # by default Matlab conversion is selected
self.MergeFiles = False # by default
self.labFileName = [] # .lab file name
Expand Down Expand Up @@ -66,7 +66,7 @@ def on_browse_clicked(self):
self.mdfinfoClass.__init__()
self.cleanChannelList()
self.cleanSelectedChannelList()
ChannelList = convertChannelList(self.mdfinfoClass.listChannels(str(self.fileNames[0])))
ChannelList = convertChannelList(self.mdfinfoClass.list_channels(str(self.fileNames[0])))
self.SelectedChannelList.addItems(ChannelList)
self.FileList.setItemSelected(self.FileList.item(0), True)

Expand Down Expand Up @@ -145,20 +145,20 @@ def on_Convert_clicked(self):
buffer.update(res[0]) # assigns next class to buffer
buffer.masterChannelList = res[1]
fileNameList.append(res[2])
self.mdfClass.mergeMdf(buffer) # merge buffer to merged class mdfClass
self.mdfClass.merge_mdf(buffer) # merge buffer to merged class mdfClass
# Export
if self.convertSelection == 'Matlab':
self.mdfClass.exportToMatlab()
self.mdfClass.export_to_matlab()
elif self.convertSelection == 'csv':
self.mdfClass.exportToCSV()
self.mdfClass.export_to_csv()
elif self.convertSelection == 'netcdf':
self.mdfClass.exportToNetCDF()
self.mdfClass.export_to_NetCDF()
elif self.convertSelection == 'hdf5':
self.mdfClass.exportToHDF5()
self.mdfClass.export_to_hdf5()
elif self.convertSelection == 'excel':
self.mdfClass.exportToExcel()
self.mdfClass.export_to_excel()
elif self.convertSelection == 'excel2010':
self.mdfClass.exportToXlsx()
self.mdfClass.export_to_xlsx()
elif self.convertSelection == 'mdf3':
self.mdfClass.write(fileName + '_new')
self.cleanChannelList()
Expand All @@ -176,7 +176,7 @@ def on_FileList_itemClicked(self, item):
self.mdfinfoClass.__init__()
# self.mdfinfoClass.readinfo(item)
self.cleanChannelList()
ChannelList = convertChannelList(self.mdfinfoClass.listChannels(str(item.text())))
ChannelList = convertChannelList(self.mdfinfoClass.list_channels(str(item.text())))
self.channelList.addItems(ChannelList)
self.mdfinfoClass.__init__() # clean object to free memory

Expand Down Expand Up @@ -301,26 +301,26 @@ def on_MergeFiles_toggled(self, checked):

def processMDF(fileName, channelist, resampleFlag, resampleValue, convertFlag, convertSelection):
# Will process file according to defined options
yop = mdf()
yop = Mdf()
yop.multiProc = False # already multiprocessed
yop.convertAfterRead = True
yop.read(fileName) # reads complete file
yop.keepChannels(channelist) # removes unnecessary channels
yop.keep_channels(channelist) # removes unnecessary channels
if resampleFlag:
yop.resample(resampleValue)
if convertFlag:
if convertSelection == 'Matlab':
yop.exportToMatlab()
yop.export_to_matlab()
elif convertSelection == 'csv':
yop.exportToCSV()
yop.export_to_csv()
elif convertSelection == 'netcdf':
yop.exportToNetCDF()
yop.export_to_NetCDF()
elif convertSelection == 'hdf5':
yop.exportToHDF5()
yop.export_to_hdf5()
elif convertSelection == 'excel':
yop.exportToExcel()
yop.export_to_excel()
elif convertSelection == 'excel2010':
yop.exportToXlsx()
yop.export_to_xlsx()
elif convertSelection == 'mdf3':
yop.write(fileName + '_new')
yopPicklable = {} # picklable dict and not object
Expand Down
38 changes: 19 additions & 19 deletions mdfconverter/mdfreaderui5.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.setupUi(self)
self.fileNames = [] # files to convert
self.mdfClass = mdfreader.mdf() # instance of mdf
self.mdfinfoClass = mdfreader.mdfinfo() # instance of mdfinfo
self.mdfClass = mdfreader.Mdf() # instance of mdf
self.mdfinfoClass = mdfreader.MdfInfo() # instance of mdfinfo
self.convertSelection = 'Matlab' # by default Matlab conversion is selected
self.MergeFiles = False # by default
self.labFileName = [] # .lab file name
Expand Down Expand Up @@ -64,7 +64,7 @@ def on_browse_clicked(self):
self.mdfinfoClass.__init__()
self.cleanChannelList()
self.cleanSelectedChannelList()
ChannelList = convertChannelList(self.mdfinfoClass.listChannels(str(self.fileNames[0])))
ChannelList = convertChannelList(self.mdfinfoClass.list_channels(str(self.fileNames[0])))
self.SelectedChannelList.addItems(ChannelList)
self.FileList.item(0).setSelected(True)

Expand Down Expand Up @@ -142,20 +142,20 @@ def on_Convert_clicked(self):
buffer.update(res[0]) # assigns next class to buffer
buffer.masterChannelList = res[1]
fileNameList.append(res[2])
self.mdfClass.mergeMdf(buffer) # merge buffer to merged class mdfClass
self.mdfClass.merge_mdf(buffer) # merge buffer to merged class mdfClass
# Export
if self.convertSelection == 'Matlab':
self.mdfClass.exportToMatlab()
self.mdfClass.export_to_matlab()
elif self.convertSelection == 'csv':
self.mdfClass.exportToCSV()
self.mdfClass.export_to_csv()
elif self.convertSelection == 'netcdf':
self.mdfClass.exportToNetCDF()
self.mdfClass.export_to_NetCDF()
elif self.convertSelection == 'hdf5':
self.mdfClass.exportToHDF5()
self.mdfClass.export_to_hdf5()
elif self.convertSelection == 'excel':
self.mdfClass.exportToExcel()
self.mdfClass.export_to_excel()
elif self.convertSelection == 'excel2010':
self.mdfClass.exportToXlsx()
self.mdfClass.export_to_xlsx()
elif self.convertSelection == 'mdf3':
self.mdfClass.write(fileName + '_new')
self.cleanChannelList()
Expand All @@ -172,7 +172,7 @@ def on_FileList_itemClicked(self, item):
self.mdfinfoClass.__init__()
# self.mdfinfoClass.readinfo(item)
self.cleanChannelList()
ChannelList = convertChannelList(self.mdfinfoClass.listChannels(str(item.text())))
ChannelList = convertChannelList(self.mdfinfoClass.list_channels(str(item.text())))
self.channelList.addItems(ChannelList)
self.mdfinfoClass.__init__() # clean object to free memory

Expand Down Expand Up @@ -288,26 +288,26 @@ def on_MergeFiles_toggled(self):

def processMDF(fileName, channelist, resampleFlag, resampleValue, convertFlag, convertSelection):
# Will process file according to defined options
yop = mdfreader.mdf()
yop = mdfreader.Mdf()
yop.multiProc = False # already multiprocessed
yop.convertAfterRead = True
yop.read(fileName) # reads complete file
yop.keepChannels(channelist) # removes unnecessary channels
yop.keep_channels(channelist) # removes unnecessary channels
if resampleFlag:
yop.resample(resampleValue)
if convertFlag:
if convertSelection == 'Matlab':
yop.exportToMatlab()
yop.export_to_matlab()
elif convertSelection == 'csv':
yop.exportToCSV()
yop.export_to_csv()
elif convertSelection == 'netcdf':
yop.exportToNetCDF()
yop.export_to_NetCDF()
elif convertSelection == 'hdf5':
yop.exportToHDF5()
yop.export_to_hdf5()
elif convertSelection == 'excel':
yop.exportToExcel()
yop.export_to_excel()
elif convertSelection == 'excel2010':
yop.exportToXlsx()
yop.export_to_xlsx()
elif convertSelection == 'mdf3':
yop.write(fileName + '_new')
yopPicklable = {} # picklable dict and not object
Expand Down
Loading

0 comments on commit bfde2de

Please sign in to comment.