Thanks all for the enjoyable discussion yesterday.
On units
What you say above @DrSimonClark makes sense to me. Presumably avoiding special unicode characters would also be valid if written in a way processable by pint i.e. Specific Capacity / mA*h*g^-1
.
On definition of step
I think the current definition of StepIndex is actually correct for what I was trying to explain in the call:
StepIndex: the currently running step number in the procedure
This should correspond directly to the program written by the cycler:
This is an example from Neware, the resulting StepIndex column would only contain numbers from 1-13 and would repeat numbers from 4-7 and 9-12 because of the cycle instructions.
In PyProBE, cycle number is then inferred when the StepIndex decreases i.e. when it decreases from 7 to 4 in the first cycle. Alternatively you can explicitly break up the Procedure into named sections and specify cycles (allowing for nested loops) in the .yaml
file I mentioned:
Initial Charge: # Experiment title
Steps: # Steps list, descriptions are PyBaMM experiment strings
1: Rest for 4 hours # Start with index 1
# CC-CV charge provided as two seperate PyBaMM experiment strings
2: Charge at 4mA until 4.2 V, Hold at 4.2 V until 0.04 A
3: Rest for 2 hours
Break-in Cycles:
Steps:
4: Discharge at 4 mA until 3 V
5: Rest for 2 hours
6: Charge at 4 mA until 4.2 V, Hold at 4.2 V until 0.04 A
7: Rest for 2 hours
Cycle: # Cycle instruction, contains start, end and count
Start: 4 # loop starts with step 4 (inclusive)
End: 7 # loop ends with step 7 (inclusive)
Count: 5
This then leaves defining the continuously increasing step count:
StepCount: a count of the number of steps since the beginning of the procedure
Iāve come around to this continuously increasing value being the column specified as the ābare minimumā, as long as StepCount and StepIndex are separately defined.
Further to this, when defining a standard it may be important to avoid the misconception that the four required columns are an acceptable reduction from detailed cycler data. There are plenty of columns that cyclers write out that are redundant e.g. all the different variations of Capacity (āChargeā, āDischargeā, āStepā etc.) which can be derived very simply from a single Capacity column which could be defined as:
NetCapacity: the net charge passed into a cell since the beginning of a procedure
However, there are columns that, if present in data retrieved from a cycler, shouldnāt be removed:
- StepIndex (as defined above) - as it is more directly useful than StepCount as I have described before
- NetCapacity - as cyclers coloumb-count internally faster than they log data so this will be more accurate than integrating current with time
Perhaps these could be added to the recommended columns to store alongside DateTime?