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 specifiedunits
.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
andheight
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