Skip to content

Commit

Permalink
Update to the documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
viogp committed Jun 10, 2019
1 parent a435eb1 commit 554d2cb
Show file tree
Hide file tree
Showing 13 changed files with 320 additions and 200 deletions.
17 changes: 9 additions & 8 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,21 @@
Preparing Novonix Data
======================

**preparenovonix** is a Python package that handles common issues encountered in files generated with a range of software versions from the `Novonix`_
battery-testers. The code can also add extra information that makes
easier coulombic counting and relating a measurement to the experimental
protocol. The code provides a master function, *prepare_novonix*, that can run at once all the available features, providing also flexibility to choose only some.
**preparenovonix** is a Python package that handles common issues encountered in data files generated with a range of software versions from the `Novonix`_ battery-testers. This package can also add extra information that makes easier coulombic counting and relating a measurement to the experimental protocol. The package provides a master function, *prepare_novonix*, that can run at once the cleaning and adding derived information, with flexibility to choose only some features. There is a separate function to simply read a column by its given name.


Example
-------

The **example.py** runs over the given example data. To run this
The **example.py** runs over the given example data, producing a new file and a plot that compares the original and the prepared data. To run this
example, simply type: :code:`python example.py`.

Requirements and Installation
-----------------------------

This code has been developed in Python 3.7.1 and it is compatible with Python above 3.5 versions. The code has been tested to run in Windows, OSX and Linux operating systems.

This code uses numpy and pathlib as specified in docs/requirements.txt.
This code uses numpy as specified in docs/requirements.txt. The ploting routine from the *example.py* also requires the use of matplotlib.

The code can be run directly from a cloned GitHub `repository`_ or it can also be installed as a python `package`_ through pip:

Expand All @@ -47,7 +45,7 @@ In your code you can add the following lines that will call the master function
.. code-block:: Matlab
try
py.preparenovonix.novonix_add.prepare_novonix(file_to_open,...
py.preparenovonix.novonix_prep.prepare_novonix(file_to_open,...
pyargs('addstate','True',...
'lprotocol','True',...
'overwrite','True',...
Expand All @@ -59,6 +57,9 @@ In your code you can add the following lines that will call the master function
end
end
.. _compability:

Compatibility
-------------

Expand Down Expand Up @@ -86,7 +87,7 @@ List of the `Novonix`_ software versions the code has been tested against:
.. |build| image:: https://travis-ci.org/BatLabLancaster/preparenovonix.svg?branch=master
:target: https://travis-ci.org/BatLabLancaster/preparenovonix

.. |coverage| image:: https://codecov.io/gh/codecov/preparenovonix/branch/master/graph/badge.svg
.. |coverage| image:: https://codecov.io/gh/BatLabLancaster/preparenovonix/branch/master/graph/badge.svg
:target: https://codecov.io/gh/BatLabLancaster/preparenovonix

.. |docs| image:: https://readthedocs.org/projects/prepare-novonix-data/badge/?version=latest
Expand Down
226 changes: 117 additions & 109 deletions docs/features.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,62 +2,44 @@
Code Features
=============

The `preparenovonix`_ package prepares exported files produced by
`Novonix`_ battery-testers (or ’Novonix files’) by (i) cleaning them and (ii) adding
derived information to the file. The package also allows reading a
column given its name. The list of functions available in the package
can be found below in alphabetical order. This functions are presented
with the expected input parameters in brackets and further details are
given here for some of them and otherwise go to the `module index`_ for full details and examples of usage.

- ``cleannovonix(infile)``: Given a ’Novonix file’ clean it as it is
described below.

- ``isnovonix(infile)``: Given a file, check if it is or not a ’Novonix
file’.

- ``icolumn(infile,column_name)``: Given the name of a column, find the
position of this column within a cleaned ’Novonix file’.

- ``novonix_add_loopnr(infile,verbose=False)``: Given a cleaned
’Novonix file’, add a reduced protocol to the header and the columns
’Protocol line’ and ’Loop number’.

- ``novonix_add_state(infile,verbose=False)``: Given a cleaned ’Novonix
file’, add the ’State’.

- ``prepare_novonix(infile,addstate=False,lprotocol=False,``\ ``overwrite=False,verbose=False)``:
Master function of the package that can call the cleaning and adding
derived information functions directly. This function follows the
flow chart presented in the :ref:`chart`. Running all the
available features from the `preparenovonix`_ package can take form
The main functions available in the `preparenovonix`_ package are
listed below in alphabetical order. The list contains the module name
followed by the function name with the expected input parameters in
brackets.

- ``novonix_add.create_reduced_protocol(infile,verbose=False)``: Given
a cleaned Novonix data file, ``infile``, generate a reduced protocol.

- ``novonix_add.novonix_add_loopnr(infile,verbose=False)``: Given a
cleaned Novonix data file, ``infile``, add a reduced protocol to the
header and the columns Protocol line and Loop number.

- ``novonix_add.novonix_add_state(infile,verbose=False)``: Given a
cleaned Novonix data file, ``infile``, add the State column.

- ``novonix_clean.cleannovonix(infile)``: Given a Novonix data file,
``infile``, clean it as it is described below.

- ``novonix_io.isnovonix(infile)``: Given a file, ``infile``, check if
it is or not a Novonix data file.

- ``novonix_io.read_column(infile,column_name,outtype=’float’)``: Given
a column name, ``column_name``, read it from a cleaned Novonix data
file, ``infile``, as a numpy array of the type given in ``outtype``.

- ``novonix_prep.prepare_novonix(infile,addstate=False,lprotocol=False,``\ ``overwrite=False,verbose=False)``:
Master function of the ``preparenovonix`` package that prepares a
Novonix data file by cleaning it and adding to it derived
information. This function follows the flow chart presented in
:ref:`chart`. Running all the available features from
the `preparenovonix`_ package through this function can take form
few seconds to up to few minutes depending on the size of the input
file.
- ``read_column(infile,column_name,outtype=’float’)``: Given a column
name, read it from a cleaned ’Novonix file’ as a numpy array of the
type given in ``outtype``.

- ``reduced_protocol(infile,verbose=False)``: Given a cleaned ’Novonix
file’, generate a reduced protocol.

- ``select_com_val(index)``: Auxiliary function of
``novonix_add_loopnr``.

As it is shown in the :ref:`chart`, the derived information
is only added on ’cleaned’ files and only files that the code considers
as ’Novonix files’ can be cleaned. The master function
``prepare_novonix`` allows the user to call either the cleaning process
or the addition of extra columns ensuring that the dependencies
previously defined are taken into account. This function requires as
input parameters: the path to a file and four boolean optional
parameters. These boolean parameters are: ``addstate``, ``lprotocol``,
``overwrite`` and ``verbose``. The last parameter provides the option to
output more information about the run. If the ``overwrite`` parameter is
set to False, a new file will be generated with a name similar to the
input one, except for the addition of ``_prep`` before the extension of
the file.
In what follows, the above functions will be referred by simply their
name, without stating the modules they belong to.
.. _chart:
Flow chart
Expand All @@ -67,40 +49,66 @@ Flow chart
:align: center
:alt: Flow chart
Flow chart for the ``prepare_novonix`` function. Besides the name of the input file, this function has four optional boolean input parameters: ``addstate``, ``lprotocol``, ``overwrite`` and ``verbose``. The last two parameters are not included in the flow chart, but they are described in the text. In this chart rectangle shapes indicate a process, rounder rectangles the end of a process and diamonds a decision. Note that for simplicity not all the decisions made in the code are shown here.
Flow chart for the ``prepare_novonix`` function (within the
``novonix_prep`` module) which contains all the functionality of the
`preparenovonix`_ package presented here. Besides the name of the input
file, this function has four optional boolean input parameters:
``addstate``, ``lprotocol``, ``overwrite`` and ``verbose``. The last two
parameters are not included in the flow chart, but they are described in
the text. In this chart rectangle shapes indicate processes, rounder
rectangles end of processes and diamonds decisions. Note that for
simplicity not all the decisions made in the code are shown here.

.. _prepare_novonix:

The ``prepare_novonix`` function
--------------------------------
As it is shown in :ref:`chart`, the `preparenovonix`_ package only cleans data files that are consider to
be exported from the Novonix battery-testers and it only derives
information for cleaned Novonix files. The master function ``prepare_novonix`` allows the user to
call either the cleaning process or the addition of extra columns
ensuring that these dependencies are taken into account. The input
parameters for this function are the path to a file and four boolean
optional parameters: ``addstate``, ``lprotocol``, ``overwrite`` and
``verbose``. The last parameter provides the option to output more
information about the run. If the ``overwrite`` parameter is set to
``False``, a new file will be generated with a name similar to the input
one, except for the addition of ``_prep`` before the extension of the
file.


The ``isnovonix`` function
--------------------------
The function ``isnovonix`` decides if a file has the expected structure
(including a full header) for an exported file produced by the Novonix
battery-testers (or ’Novonix files’). If the file is lacking the header
or if it has not been exported with a Novonix battery-tester using the
covered software (see section ’Quality control’), the code will exit
with an error message and without generating a new file.
The function ``isnovonix`` decides if a file has the expected structure (including a full header)
for an exported file produced by the Novonix battery-testers. If the
file is lacking the header or if it has not been exported with a Novonix
battery-tester using the covered software (see the section :ref:`compability`), the code will exit with
an error message and without generating a new file.


The ``cleannovonix`` function
-----------------------------
The function ``cleannovonix`` produces a new ’Novonix type’ file after
performing the following tasks:
The function ``cleannovonix`` produces a new Novonix type file after performing the following tasks:

- Delete failed tests within a single file, adding the final capacity
of all failed tests to the capacity column of the finished test.

- Delete failed tests within one file, adding the final capacity of all
failed tests to the capacity column of the finished test.
- Remove individual measurements for which the run time goes backwards.

- Remove blank lines from the header.

- Remove eventual trailing characters from the header produced when the
file was previously open with certain programs, such as Excel.
- Remove any trailing characters from the header produced when the file
has been previously open with certain programs, such as Excel.

- Add a dummy header name (``dum[number]``) for each data column
lacking a header name.

The State column
------------------
A State column can be added to a cleaned Novonix file by calling the
function ``novonix_add_state`` or setting to True the parameter
``addstate`` when calling the function ``prepare_novonix``. This State
column can have the following values:
The ``State`` column
--------------------
A ``State`` column can be added to a cleaned Novonix file by calling the function
``novonix_add_state`` or setting to ``True`` the parameter ``addstate``
when calling the function ``prepare_novonix``. This State column can
have the following values:

- 0 for the first measurement of a given type (for example, a constant
current charge).
Expand All @@ -110,29 +118,29 @@ column can have the following values:
- 2 for the last measurement of a given type.

- -1 for single measurements. This can happen under different
conditions. A type of measurement can end after a single measurement
when some conditions are met (this usually happens while the time
resolution is coarse). At times, the current can overshoot from
negative to positive values at the beginning of a measurement. A bug
in the Novonix software that locks certain values, etc. If two single
measurements happen together, the two lines are discarded in the new
file containing the additional State column.

The State column is generated based on the quantities provided in
Novonix files’: ’Step(integer indicating the type of measurement) and
Step time’ (time that resets to 0 each time a new type of measurement
starts).
circumstances. A type of measurement can end after a single
measurement when some experimental conditions are met, this usually
happens while the time resolution is coarse. At times, the current
can overshoot from negative to positive values at the beginning of a
measurement. A bug in the Novonix software that locks certain values,
etc. If two single measurements happen together, the two lines are
discarded in the new file containing the additional State column.

The State column is generated based on the following quantities provided
in the raw Novonix data files: Step number (integer indicating the type
of measurement) and Step time (this time is assumed to reset to 0 each
time a new type of measurement starts).

The ``reduced_protocol`` function
---------------------------------
The ``reduced_protocol`` function reads the complete header from the
input file and generates (or reads) the reduced protocol. This function
returns the reduce protocol itself and a boolean flag, ``viable_prot``.
The reduced protocol consist of an array of strings. Each string
contains a line of the experimental protocol with a structure as
follows: line number,’:’,command,’:’,trip conditions. An example:
``[4 : Repeat 49 times :]``. Only commands referring to the following
processes will appear in the reduced protocol (note that commands that do not produce measurements are ignored here):
The ``reduced_protocol`` function reads the complete header from the input file and generates (or reads)
the reduced protocol. This function returns the reduce protocol itself
and a boolean flag, ``viable_prot``. The reduced protocol consist of an
array of strings. Each string contains a line number, a command from the
experimental protocol and the corresponding experimental conditions (if
aplicable); for example: ``[4 : Repeat 49 times :]``. Only commands
referring to the following processes will appear in the reduced
protocol (note that the commands corresponding to incrementing the cycle counter and global emergency limits are ignored in the reduced protocol as there are no measurements associated with those):

- Open circuit storage (or rest)

Expand All @@ -143,25 +151,25 @@ processes will appear in the reduced protocol (note that commands that do not pr
- (End) Repeat

The reduced protocol is tested against the number of unique measurements
in the file, determined using the column State. If the number of
in the file, determined using the column State. If the number of
measurements expected from the protocol is less than the actual number
of measurements, the flag ``viable_prot`` is set to false, indicating
that the construction of the reduced protocol was not viable.

The Protocol line and Loop number columns
---------------------------------------------
The Protocol line and Loop number columns can be generated by either
calling directly the function ``novonix_add_loopnr`` or by setting to
True the parameter ``lprotocol`` when calling the function
``prepare_novonix``. The column ’Protocol line associates a measurment
with the its corresponding line in the reduced protocol previously
produced. The ’Loop number’ column has a value of 0 if a measurement
does not correspond to any repetition statement in the protocol and
otherwise it grows monotonically with each repetition.

If the flag ``viable_prot`` was set to false by the ``reduced_protocol``
function, the Protocol line and Loop number columns are populated
with the value -999.
of measurements, the flag ``viable_prot`` is set to ``False``,
indicating that the construction of the reduced protocol was not viable.

The ``Protocol line`` and ``Loop number`` columns
-------------------------------------------------
The ``Protocol line`` and ``Loop number`` columns can be generated by either calling directly the function
``novonix_add_loopnr`` or by setting to ``True`` the parameter
``lprotocol`` when calling the function ``prepare_novonix``. The column
Protocol line associates a measurment with its corresponding line in the
reduced protocol. The Loop number column has a value of 0 if a
measurement does not correspond to any repetition statement in the
protocol and otherwise it grows monotonically with each repetition (see
:ref:`chart`).

If the flag ``viable_prot`` was set to ``False`` by the
``reduced_protocol`` function, the Protocol line and Loop number columns
are populated with the value -999.

.. _preparenovonix: https://github.com/BatLabLancaster/preparenovonix

Expand Down
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ Documentation for ``preparenovonix``
:maxdepth: 2

readme_include.rst
overview.rst
features.rst
source/modules.rst

Expand Down
Loading

0 comments on commit 554d2cb

Please sign in to comment.