import numpy as np
import goofi

class CookbookEeg(goofi.Node):
    """Four synthetic channels, in fresh four-second windows; not a recording."""
    PRODUCER = True
    OUTPUTS = {"out": goofi.DataType.ARRAY, "trigger": goofi.DataType.ARRAY}
    PARAMS = {"signal": {"alpha": goofi.FloatParam(15.0, 0.0, 40.0)}}
    def setup(self):
        self.index = 0
    def process(self):
        rng = np.random.default_rng(100 + self.index)
        t = np.arange(1024) / 256.0
        carrier = self.params.signal.alpha * np.sin(2*np.pi*10*t)
        x = np.stack([carrier + 5*np.sin(2*np.pi*6*t),
                      .8*carrier + 4*np.sin(2*np.pi*20*t),
                      10*np.sin(2*np.pi*10*t + 1.0),
                      8*np.sin(2*np.pi*18*t)])
        x += rng.normal(0, 3, x.shape)
        x += 8*np.exp(-((t-1.5)/.12)**2)
        self.index += 1
        return {"out": (x.astype(np.float32), {"sfreq": 256.0,
                "channels": {"dim0": ["A", "B", "C", "D"]}}),
                "trigger": (np.array([1], dtype=np.float32), {})}
