diff --git a/README.md b/README.md index 0c18f1ac..9b7a3df3 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ The HydRA app is hosted in the BC Gov GitHub organization and is available at PL ## Managing the app packages -After cloning the repository, use the `poetry` python package manager to install the dependencies by running `poetry install` from the `frontend` directory. To update the dependencies, run `poetry update` or editate the `pyproject.toml` file. +After cloning the repository, use the `poetry` python package manager to install the dependencies by running `poetry install` from the `frontend` directory. To update the dependencies, run `poetry update` or edit the `pyproject.toml` file. To export the dependencies to a `requirements.txt` file for the docker image, run `poetry export -f requirements.txt --output requirements.txt`. ## Running the app locally diff --git a/frontend/nginx.conf b/frontend/nginx.conf index fe5a0538..b82caec0 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -4,7 +4,7 @@ events { } http { include mime.types; - # allow csv files and pdf files to be served + # allow csv files. Seems to also allow .dat files types { text/csv csv; } diff --git a/frontend/rctool/forms.py b/frontend/rctool/forms.py index 412ea9b5..e1bbad53 100644 --- a/frontend/rctool/forms.py +++ b/frontend/rctool/forms.py @@ -1,40 +1,173 @@ from django import forms from django.core import validators + class DatePickerInput(forms.DateInput): - input_type = 'date' + input_type = "date" + class import_rc_data(forms.Form): - # csv_upload = forms.FileField(label="csv file", widget=forms.FileInput(attrs={'class': 'form-control form-control-sm'})) - csv_upload = forms.FileField(label="csv file", widget=forms.FileInput(attrs={'class': 'form-control form-control-sm', 'style': 'font-size: 11.5px;'})) - header_row = forms.IntegerField(label="header row number", widget=forms.NumberInput(attrs={'class': 'form-control form-control-sm', 'min':1, 'value':1, 'id':'form-header-row', 'style': 'font-size: 11.5px;'})) - csv_upload.required = False - header_row.required = False + input_session_type = forms.ChoiceField( + label="import type", + widget=forms.Select( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px;", + } + ), + choices=[ + ("new", "new session"), + ("load", "load previous session"), + ], + ) + + csv_content = forms.CharField( + label="csv content", + widget=forms.Textarea( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px; height: 200px;", + } + ), + required=False, + ) + + session_content = forms.CharField( + label="session content", + widget=forms.Textarea( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px; height: 200px;", + } + ), + required=False, + ) + + csv_separator = forms.ChoiceField( + label="separator", + widget=forms.Select( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px;", + } + ), + choices=[ + (",", "comma"), + (";", "semicolon"), + ("\t", "tab"), + ], + ) + + header_row = forms.IntegerField( + label="header row number", + widget=forms.NumberInput( + attrs={ + "class": "form-control form-control-sm", + "min": 1, + "value": 1, + "id": "form-header-row", + "style": "font-size: 11.5px;", + } + ), + ) + class develop_rc(forms.Form): - set_offset1 = forms.FloatField(label="offset 1", widget=forms.NumberInput(attrs={'class': 'form-control form-control-sm', 'id':'offset1', 'style': 'font-size: 11.5px;'})) - set_offset2 = forms.FloatField(label="offset 2", widget=forms.NumberInput(attrs={'class': 'form-control form-control-sm', 'id':'offset2', 'style': 'font-size: 11.5px;'})) - set_breakpoint1 = forms.IntegerField(label="number of breakpoints", widget=forms.NumberInput(attrs={'class form-control-sm': 'form-control','id':'breakpoint1', 'value':1, 'style': 'font-size: 11.5px;'})) - set_breakpoint2 = forms.IntegerField(label="number of breakpoints", widget=forms.NumberInput(attrs={'class form-control-sm': 'form-control', 'id':'breakpoint2', 'value':1, 'style': 'font-size: 11.5px;'})) + set_offset1 = forms.FloatField( + label="offset 1", + widget=forms.NumberInput( + attrs={ + "class": "form-control form-control-sm", + "id": "offset1", + "style": "font-size: 11.5px;", + } + ), + ) + set_offset2 = forms.FloatField( + label="offset 2", + widget=forms.NumberInput( + attrs={ + "class": "form-control form-control-sm", + "id": "offset2", + "style": "font-size: 11.5px;", + } + ), + ) + set_breakpoint1 = forms.IntegerField( + label="number of breakpoints", + widget=forms.NumberInput( + attrs={ + "class form-control-sm": "form-control", + "id": "breakpoint1", + "value": 1, + "style": "font-size: 11.5px;", + } + ), + ) + set_breakpoint2 = forms.IntegerField( + label="number of breakpoints", + widget=forms.NumberInput( + attrs={ + "class form-control-sm": "form-control", + "id": "breakpoint2", + "value": 1, + "style": "font-size: 11.5px;", + } + ), + ) + class export_rc_data(forms.Form): - export_filetype = forms.ChoiceField(label='export type', widget=forms.Select(attrs={'class': 'form-control form-control-sm', 'style': 'font-size: 11.5px;'}), choices=[('session settings', 'session settings'), ('session results (pdf)', 'session results (pdf)'), ('session results (csv)', 'session results (csv)')]) - export_filetype.widget.attrs['onchange'] = 'toggleExportForm(this.value)' - export_filename = forms.CharField(label="file name", widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'style': 'font-size: 11.5px;' }), max_length=200) - export_station_name = forms.CharField(label="station name", widget=forms.TextInput(attrs={'class': 'form-control form-control-sm', 'style': 'font-size: 11.5px;'}), max_length=200) + export_filetype = forms.ChoiceField( + label="export type", + widget=forms.Select( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px;", + } + ), + choices=[ + ("session settings", "session settings"), + ("session results (pdf)", "session results (pdf)"), + ("session results (csv)", "session results (csv)"), + ], + ) + export_filetype.widget.attrs["onchange"] = "toggleExportForm(this.value)" + export_filename = forms.CharField( + label="file name", + widget=forms.TextInput( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px;", + } + ), + max_length=200, + ) + export_station_name = forms.CharField( + label="station name", + widget=forms.TextInput( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px;", + } + ), + max_length=200, + ) export_station_name.required = False - export_comments = forms.CharField(label="comments", widget=forms.Textarea(attrs={'class': 'form-control form-control-sm', 'style': 'font-size: 11.5px; height:60px;'}), max_length=1000) + export_comments = forms.CharField( + label="comments", + widget=forms.Textarea( + attrs={ + "class": "form-control form-control-sm", + "style": "font-size: 11.5px; height:60px;", + } + ), + max_length=1000, + ) export_comments.required = False export_date_applic_init = forms.DateField(widget=DatePickerInput) - export_date_applic_init.widget.attrs['class'] = 'form-control form-control-sm' + export_date_applic_init.widget.attrs["class"] = "form-control form-control-sm" export_date_applic_init.required = False export_date_applic_final = forms.DateField(widget=DatePickerInput) - export_date_applic_final.widget.attrs['class'] = 'form-control form-control-sm' + export_date_applic_final.widget.attrs["class"] = "form-control form-control-sm" export_date_applic_final.required = False - - - - - - - diff --git a/frontend/rctool/functions/fit_linear_model.py b/frontend/rctool/functions/fit_linear_model.py index 90677d10..bde96ce2 100644 --- a/frontend/rctool/functions/fit_linear_model.py +++ b/frontend/rctool/functions/fit_linear_model.py @@ -54,6 +54,7 @@ def fit_linear_model(df, offset, label, weighted=None, intersect_points=None, *a df_data["U"] = df_data["U"].apply(lambda x: x / 100.0) # set weights as 1 - % unc df_data["W"] = df_data["U"].apply(lambda x: 1 - x) + # try weighting result = plm.fit(df_data["Q"], params, x=df_data["H0"], weights=df_data["W"]) wgt_const = result.best_values["amplitude"] diff --git a/frontend/rctool/templates/rctool/rctool/import/rctool_import.html b/frontend/rctool/templates/rctool/rctool/import/rctool_import.html index c672847a..25414d2e 100644 --- a/frontend/rctool/templates/rctool/rctool/import/rctool_import.html +++ b/frontend/rctool/templates/rctool/rctool/import/rctool_import.html @@ -14,90 +14,88 @@
-
-
Import Data
+
+
Import Data
-
-
+
+
{% csrf_token %} -
- -
- + +
+
+ {{form.input_session_type}} +
+ +
+ {{form.header_row}}
- - {{form.csv_upload}} + +
+ + {{form.csv_separator}} +
- - *csv format only, download sample file here: sample_data.csv - -
-
- +
+ +
+ + *csv format only, download sample file here: sample_data.csv. Separator: comma, Header row: 1 + +
+ + + + + +
+ +
-
- {% if not table_data %} -

- Please upload in csv format with the specific column names and format specified below. -

-
- - - - - - - - - - - - - - - - - - - - - - -
datetimedischargestageuncertaintycomments
YYYY-MM-DD HH:MMnumbernumberdecimal fraction (optional)text (optional)
YYYY-MM-DD HH:MMnumbernumberdecimal fraction (optional)text (optional)
-
- {% endif %} - {% if messages %} - {% for message in messages %} -
- {{message|safe}} +
+
+ Please upload in csv format with the specific column names and format specified below.
- {% endfor %} - {% endif %} - {% if table_data %} - {% include 'rctool/components/table.html' %} -
-
-
- {% csrf_token %} - - - -
-
-
- cancel -
+ +
+ + + + + + + + + + + + + + + +
datetimedischargestageuncertaintycomments
YYYY-MM-DD HH:MMnumbernumberdecimal fraction (optional)text (optional)
+
+ +
+ {% if messages %} + {% for message in messages %} +
+ {{message|safe}} +
+ {% endfor %} + {% endif %}
- {% endif %}
@@ -112,18 +110,45 @@