unitpackage.cv.cv_collection

A Collection of Cyclic Voltammograms. It provides additional functionalities compared to the Collection specific to Cyclic Voltammograms and electrochemical data.

EXAMPLES:

Create a collection from local frictionless data packages in the data/ directory:

>>> from unitpackage.cv.cv_collection import CVCollection
>>> collection = CVCollection.from_local('data/')

Create a collection from the data packages published in the echemdb:

>>> collection = CVCollection.from_remote()  

Search the collection for entries from a single publication:

>>> collection.filter(lambda entry: entry.source.url == 'https://doi.org/10.1039/C0CP01001D')  
[CVEntry('alves_2011_electrochemistry_6010_f1a_solid'), ...
class unitpackage.cv.cv_collection.CVCollection(data_packages=None)

A collection of frictionless data packages.

Essentially this is just a list of data packages with some additional convenience wrap for use in the echemdb.

EXAMPLES:

An empty collection:

>>> collection = CVCollection([])
>>> len(collection)
0
class CVEntry(package)

A frictionless data packages describing a Cyclic Voltammogram.

EXAMPLES:

An entry can be created directly from a datapackage that has been created with svgdigitizer’s cv command. However, entries are normally obtained by opening a CVCollection of entries:

>>> from unitpackage.cv.cv_collection import CVCollection
>>> collection = CVCollection.create_example()
>>> entry = next(iter(collection))
get_electrode(name)

Returns an electrode with the specified name.

EXAMPLES:

>>> entry = CVEntry.create_examples()[0]
>>> entry.get_electrode('WE') 
{'name': 'WE', 'function': 'working electrode', 'type': 'single crystal',
'crystallographic orientation': '0001', 'material': 'Ru',
'preparation procedure': 'Sputtering and flash annealing under UHV
conditions with repeated cycles of oxygen adsorption and desorption.',
'shape': {'height': {'unit': 'mm', 'value': 2}, 'type': 'hat shaped'},
'source': {'supplier': 'Mateck'}}

TESTS:

>>> entry.get_electrode('foo') 
Traceback (most recent call last):
...
KeyError: "Electrode with name 'foo' does not exist"
plot(x_label='E', y_label='j', name=None)

Return a plot of this entry. The default plot is a Cyclic Voltammogram (‘j vs E’). When j is not present in the data, I is used instead.

EXAMPLES:

>>> entry = CVEntry.create_examples()[0]
>>> entry.plot()
Figure(...)

The plot can also be returned with custom axis dimensions (field names) available in the resource:

>>> entry.plot(x_label='t', y_label='E')
Figure(...)

A plot resembling the original figure can be obtained by first rescaling:

>>> rescaled_entry = entry.rescale('original')
>>> rescaled_entry.plot()
Figure(...)
rescale(units)

Return a rescaled CVEntry with axes in the specified units.

Usage is essentially the same as for unitpackage.entry.Entry.rescale(), i.e., new units are expected as dict, where the key is the axis name and the value the new unit, such as {'j': 'uA / cm2', 't': 'h'}.

Additionally, the entry can be rescaled to the axes’ units of the original data. These units must be defined in the metadata of the resource, within the key figure_description.fields:

>>> entry = CVEntry.create_examples()[0]
>>> rescaled_entry = entry.rescale(units='original')
>>> rescaled_entry.package.get_resource('echemdb').schema.fields 
[{'name': 't', 'type': 'number', 'unit': 's'},
{'name': 'E', 'type': 'number', 'unit': 'V', 'reference': 'RHE'},
{'name': 'j', 'type': 'number', 'unit': 'mA / cm2'}]
thumbnail(width=96, height=72, dpi=72, **kwds)

Return a thumbnail of the entry’s curve as a PNG byte stream.

EXAMPLES:

>>> entry = CVEntry.create_examples()[0]
>>> entry.thumbnail()
b'\x89PNG...'

The PNG’s width and height can be specified in pixels. Additional keyword arguments are passed to the data frame plotting method:

>>> entry.thumbnail(width=4, height=2, color='red', linewidth=2)
b"\x89PNG..."
Entry

alias of unitpackage.cv.cv_entry.CVEntry

describe()

Return some statistics about the collection.

EXAMPLES:

>>> collection = CVCollection.create_example()
>>> collection.describe() == \
... {'number of references': 2,
... 'number of entries': 3,
... 'materials': {'Cu', 'Ru'}}
True
materials()

Return the substrate materials in the collection.

EXAMPLES:

>>> collection = CVCollection.create_example()
>>> collection.materials() == {'Cu', 'Ru'}
True