Skip to content

Commit

Permalink
Add heatmap page
Browse files Browse the repository at this point in the history
  • Loading branch information
nandooliveira committed Dec 2, 2019
1 parent 21ae1cc commit 9ef7cef
Show file tree
Hide file tree
Showing 20 changed files with 812 additions and 123 deletions.
3 changes: 3 additions & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ psycopg2 = "==2.7.6.1"
psycopg2-binary = "==2.8.1"
pytz = "==2018.7"
django-suit = "*"
django-widget-tweaks = "*"
numpy = "*"
matplotlib = "*"

[requires]
python_version = "2.7"
240 changes: 196 additions & 44 deletions Pipfile.lock

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions easy/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
'django.contrib.messages',
'django.contrib.staticfiles',
'experiments',
'widget_tweaks',
]

MIDDLEWARE = [
Expand Down
51 changes: 45 additions & 6 deletions experiments/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,25 @@

from django import forms

from experiments.models import Experiment, LatinSquare, Participant
from experiments.services.generate_latin_square_rows import GenerateLatinSquareRows
from experiments.services.search_available_latin_square_row import SearchAvailableLatinSquareRow
from experiments.models import Execution, Experiment, HeatMapFeedback,\
LatinSquare, Participant
from experiments.services.search_available_latin_square_row import \
SearchAvailableLatinSquareRow


class ParticipantForm(forms.Form):
name = forms.CharField(required=False)
email = forms.EmailField(help_text='A valid email address, please.', required=False)
experiment_id = forms.IntegerField(widget=forms.HiddenInput(), required=True)
email = forms.EmailField(
help_text='A valid email address, please.', required=False
)
experiment_id = forms.IntegerField(
widget=forms.HiddenInput(), required=True
)

def __init__(self, *args, **kwargs):
super(ParticipantForm, self).__init__(*args, **kwargs)
self.fields['name'].widget.attrs['class'] = 'form-control'
self.fields['email'].widget.attrs['class'] = 'form-control'

def save_participant(self):
name = self.cleaned_data['name']
Expand All @@ -26,11 +36,40 @@ def save_participant(self):
latin_square_row.participant = participant
latin_square_row.save()
else:
latin_square = LatinSquare.objects.create_with_rows(experiment=experiment)
latin_square = LatinSquare.objects.create_with_rows(
experiment=experiment)
latin_square.row1.participant = participant
latin_square.row1.save()

return participant

def __experiment(self, experiment_id):
return Experiment.objects.get(pk=experiment_id)


class HeatMapFeedbackForm(forms.Form):
execution_id = forms.IntegerField(
widget=forms.HiddenInput(), required=True)
corresponds_to_perception = forms.BooleanField(
label='Na sua percepção o gráfico ao lado corresponde a realidade?',
initial=True, required=False)
notes = forms.CharField(
label='Gostaria de deixar algum comentário?',
max_length=500, widget=forms.Textarea, required=False)

def save_heat_map_feedback(self):
corresponds_to_perception = self.cleaned_data[
'corresponds_to_perception'
]
notes = self.cleaned_data['notes']
execution_id = self.cleaned_data['execution_id']
execution = self.__execution(execution_id)

return HeatMapFeedback.objects.create(
corresponds_to_perception=corresponds_to_perception,
notes=notes,
execution=execution
)

def __execution(self, execution_id):
return Execution.objects.get(pk=execution_id)
119 changes: 119 additions & 0 deletions experiments/migrations/0026_auto_20191126_0800.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-11-26 08:00
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('experiments', '0025_auto_20190625_0425'),
]

operations = [
migrations.CreateModel(
name='HeatMapFeedback',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('corresponds_to_perception', models.BooleanField(default=True)),
('notes', models.CharField(max_length=500)),
],
),
migrations.AddField(
model_name='latinsquare',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='latinsquare',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='latinsquarecell',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='latinsquarecell',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='latinsquarerow',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='latinsquarerow',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='pause',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='pause',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='point',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='point',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AlterField(
model_name='execution',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AlterField(
model_name='execution',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AlterField(
model_name='experiment',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AlterField(
model_name='experiment',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AlterField(
model_name='participant',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AlterField(
model_name='participant',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AlterField(
model_name='task',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AlterField(
model_name='task',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='heatmapfeedback',
name='execution',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='experiments.Execution'),
),
]
35 changes: 35 additions & 0 deletions experiments/migrations/0027_auto_20191126_0802.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-11-26 08:02
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('experiments', '0026_auto_20191126_0800'),
]

operations = [
migrations.AddField(
model_name='answer',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='answer',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
migrations.AddField(
model_name='heatmapfeedback',
name='created_at',
field=models.DateTimeField(auto_now_add=True, null=True),
),
migrations.AddField(
model_name='heatmapfeedback',
name='updated_at',
field=models.DateTimeField(auto_now=True, null=True),
),
]
61 changes: 61 additions & 0 deletions experiments/migrations/0028_auto_20191128_0205.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.26 on 2019-11-28 02:05
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('experiments', '0027_auto_20191126_0802'),
]

operations = [
migrations.CreateModel(
name='Survey',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, null=True)),
('updated_at', models.DateTimeField(auto_now=True, null=True)),
('description', models.CharField(max_length=200)),
('experiment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='experiments.Experiment')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SurveyAnswer',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, null=True)),
('updated_at', models.DateTimeField(auto_now=True, null=True)),
('answer', models.CharField(max_length=500)),
('execution', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='experiments.Execution')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SurveyQuestion',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, null=True)),
('updated_at', models.DateTimeField(auto_now=True, null=True)),
('question', models.CharField(max_length=200)),
('input_type', models.CharField(choices=[('text', 'Text'), ('textarea', 'Text Area')], max_length=20)),
('survey', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='experiments.Survey')),
],
options={
'abstract': False,
},
),
migrations.AddField(
model_name='surveyanswer',
name='question',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='experiments.SurveyQuestion'),
),
]
21 changes: 21 additions & 0 deletions experiments/migrations/0029_execution_heatmap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.26 on 2019-12-02 04:05
from __future__ import unicode_literals

from django.db import migrations, models
import experiments.models


class Migration(migrations.Migration):

dependencies = [
('experiments', '0028_auto_20191128_0205'),
]

operations = [
migrations.AddField(
model_name='execution',
name='heatmap',
field=models.ImageField(blank=True, null=True, upload_to=experiments.models.execution_plot_directory_path),
),
]
21 changes: 21 additions & 0 deletions experiments/migrations/0030_auto_20191202_0411.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.26 on 2019-12-02 04:11
from __future__ import unicode_literals

from django.db import migrations, models
import experiments.models


class Migration(migrations.Migration):

dependencies = [
('experiments', '0029_execution_heatmap'),
]

operations = [
migrations.AlterField(
model_name='execution',
name='heatmap',
field=models.ImageField(blank=True, max_length=500, null=True, upload_to=experiments.models.execution_plot_directory_path),
),
]
Loading

0 comments on commit 9ef7cef

Please sign in to comment.