move data formating scripts into this repo
This commit is contained in:
138
scripts/cellmeta.py
Normal file
138
scripts/cellmeta.py
Normal file
@ -0,0 +1,138 @@
|
||||
from chargefile import ChargeFile, SearchDirection
|
||||
|
||||
CYCLES_PER_STEP = 4
|
||||
STEP_COUNT = 12
|
||||
|
||||
|
||||
def charge_cylces_in_step(globalstep: int):
|
||||
cyclepoint = globalstep % STEP_COUNT
|
||||
if cyclepoint == 0:
|
||||
if (globalstep / STEP_COUNT) % 10 == 0:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
if cyclepoint == 9:
|
||||
return 1
|
||||
if cyclepoint == 11:
|
||||
return CYCLES_PER_STEP
|
||||
return 0
|
||||
|
||||
|
||||
def charge_cycles_at_step(globalstep: int,):
|
||||
count = 0
|
||||
for i in range(globalstep):
|
||||
count += charge_cylces_in_step(i)
|
||||
return count
|
||||
|
||||
|
||||
def thermal_cylces_in_step(globalstep: int, substep: int = -1):
|
||||
cyclepoint = globalstep % STEP_COUNT
|
||||
if cyclepoint == 0:
|
||||
if (globalstep / STEP_COUNT) % 10 == 0:
|
||||
return 0
|
||||
else:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 2:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 4:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 6:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 8:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 10:
|
||||
return CYCLES_PER_STEP
|
||||
if cyclepoint == 11:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def thermal_cycles_at_step(globalstep: int, substep: int):
|
||||
count = 0
|
||||
for i in range(globalstep - 1):
|
||||
count += thermal_cylces_in_step(globalstep)
|
||||
count += thermal_cylces_in_step(globalstep, substep)
|
||||
return count
|
||||
|
||||
|
||||
non_charge_cycle_cell = list(range(4, 7))
|
||||
non_thermal_cycle_cell = list(range(11, 21))
|
||||
cell_thermal_range = {
|
||||
0: [35, 55],
|
||||
1: [35, 55],
|
||||
2: [35, 55],
|
||||
3: [35, 55],
|
||||
4: [35, 55],
|
||||
5: [35, 55],
|
||||
6: [35, 55],
|
||||
7: [35, 45],
|
||||
8: [35, 45],
|
||||
9: [35, 45],
|
||||
10: [35, 45],
|
||||
11: [35, 35],
|
||||
12: [35, 35],
|
||||
13: [35, 35],
|
||||
14: [45, 45],
|
||||
15: [45, 45],
|
||||
16: [45, 45],
|
||||
17: [35, 55],
|
||||
18: [35, 55],
|
||||
19: [35, 55],
|
||||
20: [35, 55],
|
||||
}
|
||||
|
||||
cell_group_table = {
|
||||
0: 0,
|
||||
1: 0,
|
||||
2: 0,
|
||||
3: 0,
|
||||
4: 1,
|
||||
5: 1,
|
||||
6: 1,
|
||||
7: 2,
|
||||
8: 2,
|
||||
9: 2,
|
||||
10: 2,
|
||||
11: 3,
|
||||
12: 3,
|
||||
13: 3,
|
||||
14: 4,
|
||||
15: 4,
|
||||
16: 4,
|
||||
17: 5,
|
||||
18: 5,
|
||||
19: 5,
|
||||
20: 5,
|
||||
}
|
||||
|
||||
|
||||
class CellMeta:
|
||||
def __init__(self, cellid: int, globalstep: int, substep: int, charge_files: list[ChargeFile], total_cells: int):
|
||||
closest_avg = None
|
||||
closest_charge = None
|
||||
if cellid not in non_charge_cycle_cell:
|
||||
closest_avg = ChargeFile.FindClosest(charge_files, globalstep, -1)
|
||||
closest_charge = ChargeFile.FindClosest(charge_files, globalstep, cellid)
|
||||
if closest_charge is not None:
|
||||
assert closest_charge.cell == cellid
|
||||
|
||||
total_charge_cells = 0
|
||||
for i in range(total_cells):
|
||||
if i not in non_charge_cycle_cell:
|
||||
total_charge_cells += 1
|
||||
|
||||
self.cell_group = cell_group_table[cellid]
|
||||
self.charge_cycles = charge_cycles_at_step(globalstep) if cellid not in non_charge_cycle_cell else 0
|
||||
self.thermal_cycles = thermal_cycles_at_step(globalstep, substep) if cellid not in non_thermal_cycle_cell else 0
|
||||
self.last_avg_cap = abs(closest_avg.capacity) / total_charge_cells if closest_avg is not None else -1
|
||||
self.last_avg_cap_step = closest_avg.step if closest_avg is not None else -1
|
||||
self.last_cap = abs(closest_charge.capacity) if closest_charge is not None else -1
|
||||
self.last_cap_step = closest_charge.step if closest_charge is not None else -1
|
||||
self.thermal_range = cell_thermal_range[cellid]
|
||||
if cellid not in non_charge_cycle_cell:
|
||||
self.soc = ChargeFile.GetSoc(charge_files, globalstep, cellid, total_charge_cells)
|
||||
self.cap_esitmate = ChargeFile.GetCapacityEsitmate(charge_files, globalstep, cellid, total_charge_cells)
|
||||
else:
|
||||
self.soc = -1
|
||||
self.cap_esitmate = -1
|
||||
self.soc_estimate = -1
|
Reference in New Issue
Block a user