Skip to content
Snippets Groups Projects

Make transferFlags a multivariate function

Merged David Schäfer requested to merge multi-transfer into develop
All threads resolved!
Files
5
+ 42
18
@@ -17,9 +17,16 @@ from typing_extensions import Literal
from saqc import BAD, FILTER_ALL, UNFLAGGED
from saqc.core import DictOfSeries, flagging, register
from saqc.core.flags import Flags
from saqc.core.history import History
from saqc.lib.checking import validateChoice, validateWindow
from saqc.lib.tools import initializeTargets, isflagged, isunflagged, toSequence
from saqc.lib.tools import (
initializeTargets,
isflagged,
isunflagged,
multivariateParameters,
toSequence,
)
if TYPE_CHECKING:
from saqc import SaQC
@@ -290,6 +297,7 @@ class FlagtoolsMixin:
demask=[],
squeeze=[],
handles_target=True, # function defines a target parameter, so it needs to handle it
multivariate=True,
)
def transferFlags(
self: "SaQC",
@@ -349,16 +357,8 @@ class FlagtoolsMixin:
0 -inf -inf -inf
1 255.0 255.0 255.0
"""
history = self._flags.history[field]
if target is None:
target = field
if overwrite is False:
mask = isflagged(self._flags[target], thresh=kwargs["dfilter"])
history._hist[mask] = np.nan
# append a dummy column
fields, targets, broadcasting = multivariateParameters(field, target)
meta = {
"func": f"transferFlags",
"args": (),
@@ -371,15 +371,39 @@ class FlagtoolsMixin:
},
}
if squeeze:
flags = history.squeeze(raw=True)
# init an empty history to which we later append the squeezed flags
history = History(index=history.index)
else:
for field, target in zip(fields, targets):
# initialize non existing targets
if target not in self._data:
self._data[target] = pd.Series(np.nan, index=self._data[field].index)
self._flags._data[target] = History(self._data[target].index)
history = self._flags.history[field].copy(deep=True)
if overwrite is False:
mask = isflagged(self._flags[target], thresh=kwargs["dfilter"])
history._hist[mask] = np.nan
if squeeze:
# add squeezed flags
flags = history.squeeze(raw=True)
history = History(index=history.index).append(flags, meta)
elif broadcasting is False:
# add an empty flags
flags = pd.Series(np.nan, index=history.index, dtype=float)
history.append(flags, meta)
# else:
# broadcasting -> multiple fields will be written to one target
# only add the fields' histories and add an empty column later
self._flags.history[target].append(history)
if broadcasting and not squeeze:
# add one final history column
# all targets are identical, if we broadcast fields -> target
target = targets[0]
history = self._flags.history[target]
flags = pd.Series(np.nan, index=history.index, dtype=float)
history.append(flags, meta)
self._flags.history[target].append(history)
self._flags.history[target].append(flags, meta)
return self
Loading