Exemple #1
0
def del_raw(viewer, start, end):
    start_time = str_to_datetime(start, UTC)
    end_time = str_to_datetime(end, UTC)
    raws = Raw.objects.filter(subject_id=viewer,
                              start_time__range=(start_time, end_time))
    print raws[0].subject_id, raws[0].start_time, raws[0].end_time
    raws.delete()
Exemple #2
0
def add_session(start, end, content_name, viewers):
    start_time = str_to_datetime(start, UTC)
    end_time = str_to_datetime(end, UTC)
    duration = end_time - start_time
    content = Content.objects.get(name=content_name)
    session_name = content_name + str(
        len(Session.objects.filter(content=content)))
    session = Session.objects.create(content=content,
                                     name=session_name,
                                     start_time=start_time,
                                     end_time=end_time,
                                     content_start_sec=0,
                                     content_end_sec=duration.total_seconds())
    viewers = Viewer.objects.filter(user__username__in=viewers)
    session.viewers.add(*viewers)
Exemple #3
0
def create_tags_from_file(f):
    viewers = {}
    label_types = {}
    reader = csv.reader(f, delimiter=",")
    reader.next()
    for row in reader:
        viewer_name, start, end, label_type_name, label_str = row
        start = str_to_datetime(start.strip(), UTC)
        end = str_to_datetime(end.strip(), UTC)
        if not viewer_name in viewers:
            print viewer_name
            viewers[viewer_name] = Viewer.objects.get(user__username=viewer_name.strip())
        if not label_type_name in label_types:
            label_types[label_type_name] = LabelType.objects.get(name=label_type_name.strip())
        tag=Tag.objects.create(subject=viewers[viewer_name], start_time=start, end_time=end)
        Label.objects.create(label_type=label_types[label_type_name], true=-1, predicted=int(label_str), tag=tag)
Exemple #4
0
def fill_db(now=None):
    # fill in default params
    if now is None:
        now = timefixer.now()
    # clear the db
    LabelType.objects.all().delete()
    Label.objects.all().delete()
    Tag.objects.all().delete()
    Raw.objects.all().delete()
    User.objects.all().delete()
    ContentGroup.objects.all().delete()
    Content.objects.all().delete()
    VideoContent.objects.all().delete()
    Session.objects.all().delete()

    # create label type
    confusion_label_type = LabelType.objects.create(name='confusion')

    # create prof
    user = User.objects.create(username='******')
    user.set_password('essor')
    user.save()
    owner = Owner.objects.create(user=user, marketer=False)

    # create students
    viewer_names = ['bic1', 'alice']
    viewers = []
    for name in viewer_names:
        user = User.objects.create(username=name)
        user.set_password('thomas')
        user.save()
        viewer = Viewer.objects.create(user=user)
        viewers.append(viewer)

    # create classes
    content_group_names = ['software_management', 'bic_capstone']
    lecture_length = 60 * 2
    for content_group_name in content_group_names:
        content_group = ContentGroup.objects.create(name=content_group_name)
        content_group.owners.add(owner)
        content_group.viewers.add(*viewers)
        content_group.save()
        # create lecture 1
        content1 = Content.objects.create(group=content_group,
                                          duration=lecture_length,
                                          name='lecture 1')
        content1.invited_viewers.add(*viewers)
        content1.save()
        d = now + datetime.timedelta(minutes=1)
        session1 = Session.objects.create(
            content=content1,
            start_time=d,
            end_time=d + datetime.timedelta(seconds=lecture_length),
            content_start_sec=0,
            content_end_sec=lecture_length)
        session1.viewers.add(*viewers)
        session1.save()
        # create lecture 2
        content2 = Content.objects.create(group=content_group,
                                          duration=lecture_length,
                                          name='lecture 2')
        content1.invited_viewers.add(*viewers)
        content2.save()
        start_18 = timefixer.str_to_datetime('2018-01-01 00:00:00')
        end_18 = start_18 + datetime.timedelta(lecture_length)
        session2 = Session.objects.create(content=content2,
                                          start_time=start_18,
                                          end_time=end_18,
                                          content_start_sec=0,
                                          content_end_sec=lecture_length)
        session2.viewers.add(*viewers)
        session2.save()
        # gen data for each student
        for viewer in viewers:
            step = 10  # seconds
            for i, t in enumerate(range(0, 300, step)):
                d = session1.start_time
                start_time = d + datetime.timedelta(seconds=t)
                end_time = start_time + datetime.timedelta(seconds=step)
                confusion = i % 2
                predicted_confusion = 1 - i
                tag = Tag.objects.create(subject=viewer,
                                         start_time=start_time,
                                         end_time=end_time)
                label = Label.objects.create(label_type=confusion_label_type,
                                             tag=tag,
                                             true=confusion,
                                             predicted=predicted_confusion)
                raw_data = Raw.objects.create(subject=viewer,
                                              start_time=start_time,
                                              end_time=end_time,
                                              sensor="center",
                                              rawwave='1 2 3 4 5')
Exemple #5
0
def input(request):

    """
     :Args:
          | request:Http post request storing student's confusion information

     :Returns:
          |  returns "EEG" if OK
    """

    POST = request.POST
    ok = True

    student = POST.get('student')
    viewer = Viewer.objects.filter(user__username=student).get()
    start_time = str_to_datetime(POST.get("start_time"), UTC)
    end_time = str_to_datetime(POST.get("end_time"), UTC)

    sensor = POST.get("sensor")
    raw = POST.get("raw")

    label_names = POST.get("label_names")
    label_values = POST.get("label_values")

    print start_time

    if label_names is not None:
        label_names = json.loads(label_names)
        label_values = json.loads(label_values)
        for ln, lv in zip(label_names, label_values):
            label_type = LabelType.objects.filter(name=ln).get()
            tag = Tag.objects.create(subject=viewer,
                                     start_time=start_time,
                                     end_time=end_time)
            label = Label.objects.create(label_type=label_type,
                                         tag=tag,
                                         true=lv,
                                         predicted=-1)
        # uncomment to apply classifier
        # task_qs = ConfusionTask.objects.get(pk=conf_data.pk)
        # classify.classifySingleTask(task_qs, 'default.model', 'confusion')

    elif raw is not None:
        rawToks = raw.split(' ')
        waves = []
        att = -1
        sig = -1
        for raw in rawToks:
            if raw[0] == 'S':
                sig = int(raw[3:])
            elif raw[0] == 'A':
                att = int(raw[3:])
            else:
                waves.append(raw)
        waves = ' '.join(waves)
        raw_data = Raw(subject=viewer,
                       start_time=start_time,
                       end_time=end_time,
                       sensor=sensor,
                       attention=att,
                       sigqual=sig,
                       rawwave=waves)
        if sig == 200:
            ok = False
        raw_data.save()

    return HttpResponse('ok' if ok else 'not ok')