def FirstActiveGeneral(activities, timepoints):
    """Given a list of temporal activities in the coded activity state from
    ConvertWindowState, return the time point at which the protein is first
    active (not in the 0 inactive state) or 'Not active'.  Does not assume
    any knowledge of the time points.  Returns the 0-based index.
    """
    assert len(list(activities)) == len(
        list(timepoints)), "Must have same length activities and time points"

    for t in range(len(list(activities))):
        if not activities[t] == "0":
            return str(timepoints[t])
    return "Not active"