Skip to content

Commit

Permalink
Mfr visualizer: truncate .prt. column names to 25 characters.
Browse files Browse the repository at this point in the history
TRNSYS 18.05.0001 type 25 seems to not truncate it's labels whereas version 18.02.0000 does.
So we truncate the data when reading it in and when going to look for a certain connection
in the read in data.
  • Loading branch information
zuckerruebe committed Nov 2, 2023
1 parent 75c099a commit 20d3d23
Showing 1 changed file with 36 additions and 3 deletions.
39 changes: 36 additions & 3 deletions trnsysGUI/MassFlowVisualizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
# type: ignore

import datetime as _dt
import itertools as _it

import PyQt5.QtCore as _qtc
import PyQt5.QtWidgets as _qtw
import itertools as _it
import numpy as _np
import pandas as _pd
import typing as _tp

import trnsysGUI.TVentil as _tv
import trnsysGUI.connection.connectionBase as _cb
Expand All @@ -17,6 +18,8 @@
import trnsysGUI.massFlowSolver.names as _mnames
import trnsysGUI.massFlowSolver.networkModel as _mfn

_MAX_HEADER_LENGTH = 25


class MassFlowVisualizer(_qtw.QDialog):
def __init__(self, parent, mfrFile, tempFile):
Expand Down Expand Up @@ -167,11 +170,13 @@ def showMassBtn(self):
def loadFile(self):
if not self.loadedFile:
self.massFlowData = _pd.read_csv(self.dataFilePath, sep="\t").rename(columns=lambda x: x.strip())
_truncateColumnNames(self.massFlowData)
self.loadedFile = True

def loadTempFile(self):
if not self.tempLoadedFile:
self.tempMassFlowData = _pd.read_csv(self.tempDatafilePath, sep="\t").rename(columns=lambda x: x.strip())
_truncateColumnNames(self.tempMassFlowData)
self.tempLoadedFile = True

def start(self):
Expand Down Expand Up @@ -256,11 +261,13 @@ def advance(self):
return

def _getMassFlow(self, mfrVariableName: str, timeStep: int) -> float:
mass = self.massFlowData[mfrVariableName[:25]].iloc[timeStep]
truncatedMfrVariableName = _truncateName(mfrVariableName)
mass = self.massFlowData[truncatedMfrVariableName].iloc[timeStep]
return mass

def _getTemperature(self, temperatureVariableName: str, timeStep: int) -> float:
return self.tempMassFlowData[temperatureVariableName[:25]].iloc[timeStep]
truncatedTemperatureVariableName = temperatureVariableName
return self.tempMassFlowData[truncatedTemperatureVariableName].iloc[timeStep]

def pauseVis(self):
self.paused = True
Expand Down Expand Up @@ -460,3 +467,29 @@ def keyPressEvent(self, e):
elif e.key() == _qtc.Qt.Key_Down:
self.logger.debug("Down is pressed")
self.decreaseValue()


def _truncateColumnNames(df: _pd.DataFrame) -> None:
_ensureNamesDontCollideAfterTruncating(df.columns)
df.columns = [_truncateName(n) for n in df.columns]


def _ensureNamesDontCollideAfterTruncating(columnNames: _tp.Sequence[str]) -> None:
sortedColumnNames = sorted(columnNames)
groupedNames = [list(g) for _, g in _it.groupby(sortedColumnNames, key=_truncateName)]
collidingNames = _flatten(g for g in groupedNames if len(g) > 1)
if collidingNames:
formattedCollidingNames = "\n\t".join(collidingNames)
errorMessage = (
f"The following column names collide after truncating them to "
f"{_MAX_HEADER_LENGTH} characters:\n\t{formattedCollidingNames}"
)
raise ValueError(errorMessage)


def _truncateName(name: str):
return name[:_MAX_HEADER_LENGTH]


def _flatten(iterable: _tp.Iterable[_tp.Iterable[str]]) -> _tp.Sequence[str]:
return list(_it.chain.from_iterable(iterable))

0 comments on commit 20d3d23

Please sign in to comment.