apps, analysis, indicators

apps, analysis, indicators

tools to analyze

//coming soon

import Foundation

/// One raw sample at time t (Hz = samplingRate)
public struct NIRSSample: Sendable {
    public let t: TimeInterval          // seconds from session start
    public let hbo: Double?
    public let hbr: Double?
    public let hbt: Double?
    public let heartRate: Double?
    public let flowActivity: Double?    // use this as “micro-expression” channel

    public init(t: TimeInterval, hbo: Double?, hbr: Double?, hbt: Double?,
                heartRate: Double?, flowActivity: Double?) {
        self.t = t; self.hbo = hbo; self.hbr = hbr; self.hbt = hbt
        self.heartRate = heartRate; self.flowActivity = flowActivity
    }
}

public struct WindowFeatures: Sendable {
    public let vector: [Double]   // feature vector for the window (order matches extractor)
    public let startT: TimeInterval
    public let endT: TimeInterval
}

public enum LikelihoodState: String, Sendable {
    case low, medium, high
}

public struct LikelihoodResult: Sendable {
    public let window: WindowFeatures
    /// Probability that the state == nback3/high-load (0...1)
    public let probHighLoad: Double
    public let state: LikelihoodState
}

public enum MicroEventKind: String, Sendable { case blink, smile }

public struct MicroEvent: Sendable {
    public let kind: MicroEventKind
    public let t: TimeInterval
    public let confidence: Double // 0...1
}

//coming soon

import Foundation

/// One raw sample at time t (Hz = samplingRate)
public struct NIRSSample: Sendable {
    public let t: TimeInterval          // seconds from session start
    public let hbo: Double?
    public let hbr: Double?
    public let hbt: Double?
    public let heartRate: Double?
    public let flowActivity: Double?    // use this as “micro-expression” channel

    public init(t: TimeInterval, hbo: Double?, hbr: Double?, hbt: Double?,
                heartRate: Double?, flowActivity: Double?) {
        self.t = t; self.hbo = hbo; self.hbr = hbr; self.hbt = hbt
        self.heartRate = heartRate; self.flowActivity = flowActivity
    }
}

public struct WindowFeatures: Sendable {
    public let vector: [Double]   // feature vector for the window (order matches extractor)
    public let startT: TimeInterval
    public let endT: TimeInterval
}

public enum LikelihoodState: String, Sendable {
    case low, medium, high
}

public struct LikelihoodResult: Sendable {
    public let window: WindowFeatures
    /// Probability that the state == nback3/high-load (0...1)
    public let probHighLoad: Double
    public let state: LikelihoodState
}

public enum MicroEventKind: String, Sendable { case blink, smile }

public struct MicroEvent: Sendable {
    public let kind: MicroEventKind
    public let t: TimeInterval
    public let confidence: Double // 0...1
}

//coming soon

import Foundation

/// One raw sample at time t (Hz = samplingRate)
public struct NIRSSample: Sendable {
    public let t: TimeInterval          // seconds from session start
    public let hbo: Double?
    public let hbr: Double?
    public let hbt: Double?
    public let heartRate: Double?
    public let flowActivity: Double?    // use this as “micro-expression” channel

    public init(t: TimeInterval, hbo: Double?, hbr: Double?, hbt: Double?,
                heartRate: Double?, flowActivity: Double?) {
        self.t = t; self.hbo = hbo; self.hbr = hbr; self.hbt = hbt
        self.heartRate = heartRate; self.flowActivity = flowActivity
    }
}

public struct WindowFeatures: Sendable {
    public let vector: [Double]   // feature vector for the window (order matches extractor)
    public let startT: TimeInterval
    public let endT: TimeInterval
}

public enum LikelihoodState: String, Sendable {
    case low, medium, high
}

public struct LikelihoodResult: Sendable {
    public let window: WindowFeatures
    /// Probability that the state == nback3/high-load (0...1)
    public let probHighLoad: Double
    public let state: LikelihoodState
}

public enum MicroEventKind: String, Sendable { case blink, smile }

public struct MicroEvent: Sendable {
    public let kind: MicroEventKind
    public let t: TimeInterval
    public let confidence: Double // 0...1
}

Interested in working together?