commit 483fbb002c21c158f8b49eb5e958af8afeae14e6 Author: Báskay János Date: Mon Dec 20 20:23:59 2021 +0100 first commit diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9b8beff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +ARG pyversion=3.9 +FROM python:${pyversion}-bullseye +ARG pyversion=3.9 +ENV PYVERSION ${pyversion:-3.9} + +# Install packages +RUN apt-get -yqq update && \ + apt-get -yqq install apache2 apache2-dev locales libapache2-mod-wsgi-py3 && \ + apt-get clean + +# Install locale +COPY ./locale.gen /etc/locale.gen +RUN locale-gen + +COPY gerincmet/prog_calc /var/www/html/gerincmet/prog_calc + +RUN chown -R www-data:www-data /var/www/ +RUN chmod -R 755 /var/www/ + +USER www-data + +# Prepare virtualenv +WORKDIR /var/www/html/gerincmet/prog_calc/prog_calc/ +COPY ./requirements.txt . +RUN python3 -m venv ./venv +RUN . ./venv/bin/activate +RUN ./venv/bin/pip install --upgrade pip setuptools +RUN ./venv/bin/pip install -r ./requirements.txt + +# Configure Apache +USER root +COPY ./start-apache.sh / +RUN a2dismod mpm_event && a2enmod mpm_prefork +COPY ./prog-calc.conf /etc/apache2/sites-available/000-default.conf + +# Start Apache +EXPOSE 80 +CMD ["/bin/sh", "/start-apache.sh"] + diff --git a/gerincmet/prog_calc/prog_calc.wsgi b/gerincmet/prog_calc/prog_calc.wsgi new file mode 100644 index 0000000..baf34e8 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc.wsgi @@ -0,0 +1,13 @@ +#!/var/www/html/gerincmet/prog_calc/prog_calc/venv/bin/python +import sys +import logging +import os + +APP_HOME = "/var/www/html/gerincmet/prog_calc/prog_calc/" +sys.path.insert(0,"/var/www/html/gerincmet/prog_calc/prog_calc/venv/lib/python3.9/site-packages") + +logging.basicConfig(stream=sys.stderr) +sys.path.insert(0,APP_HOME) +os.chdir(APP_HOME) + +from main import app as application diff --git a/gerincmet/prog_calc/prog_calc/__pycache__/cox.cpython-39.pyc b/gerincmet/prog_calc/prog_calc/__pycache__/cox.cpython-39.pyc new file mode 100644 index 0000000..b5c4af8 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/__pycache__/cox.cpython-39.pyc differ diff --git a/gerincmet/prog_calc/prog_calc/__pycache__/form.cpython-39.pyc b/gerincmet/prog_calc/prog_calc/__pycache__/form.cpython-39.pyc new file mode 100644 index 0000000..f5a8596 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/__pycache__/form.cpython-39.pyc differ diff --git a/gerincmet/prog_calc/prog_calc/__pycache__/main.cpython-39.pyc b/gerincmet/prog_calc/prog_calc/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000..4793994 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/__pycache__/main.cpython-39.pyc differ diff --git a/gerincmet/prog_calc/prog_calc/__pycache__/tumor_type_to_score.cpython-39.pyc b/gerincmet/prog_calc/prog_calc/__pycache__/tumor_type_to_score.cpython-39.pyc new file mode 100644 index 0000000..165e09b Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/__pycache__/tumor_type_to_score.cpython-39.pyc differ diff --git a/gerincmet/prog_calc/prog_calc/cox.py b/gerincmet/prog_calc/prog_calc/cox.py new file mode 100644 index 0000000..047a368 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/cox.py @@ -0,0 +1,77 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import lifelines as lf +import pickle +import io +import base64 + + +def get_timeline_loc(timeline, val, dur): + typestr = f"timedelta64[{dur}]" + res = timeline[np.equal(timeline.astype('timedelta64[D]').astype(typestr), np.array(val).astype(typestr))] + if len(res) > 0: + res = res[0] + else: + res = np.NaN + return res + + +def get_risk(cox, X, val, dur): + timeline = cox.predict_survival_function(X).index.to_numpy() + l = get_timeline_loc(timeline, val, dur) + risk = 1 - cox.predict_survival_function(X)[0][l] + return risk + + +def cox_model(primer_tumor_score, age_score, mobility_score, metastasis_score, protein_score): + # Predict for this + score = primer_tumor_score + age_score + mobility_score + metastasis_score + protein_score + if 0 <= score <= 17: + nmstpc_category = 1 + elif 18 <= score <= 24: + nmstpc_category = 2 + elif 25 <= score <= 39: + nmstpc_category = 3 + X = {"primer_tumor": np.array([primer_tumor_score]), + "age": np.array([age_score]), + "mobility": np.array([mobility_score]), + "metastasis": np.array([metastasis_score]), + "protein": np.array([protein_score]), + "categories": np.array([nmstpc_category])} + X = pd.DataFrame(X) + # Model is built from this: + + # Get KM-curve for population + label = "population" + km_in = open("km_model.pickle","rb") + km = pickle.load(km_in) + km_in.close() + fig, ax = plt.subplots() + fig.set_figheight(4) + fig.set_figwidth(8) + ax.plot(1 - km.survival_function_, color='b', label="Populáció") + ax.fill_between(km.timeline, 1 - km.confidence_interval_[f"{label}_lower_0.95"], + 1 - km.confidence_interval_[f"{label}_upper_0.95"], color='b', alpha=.1) + + # Fit Cox-modell + cox_in = open("cox_model.pickle","rb") + cox = pickle.load(cox_in) + cox_in.close() + ax.plot(1 - cox.predict_survival_function(X)[0], color="r", label="Jelenlegi beteg") + ax.set_xlabel("Halál ideje (napokban)") + ax.set_ylabel("Halál kockázata") + ax.legend(loc="lower right") + ax.grid() + fig.show() + buf = io.BytesIO() + fig.savefig(buf,format = "png") + encoded_img = base64.b64encode(buf.getvalue()) + + # Recover risk of death for certain times + vals = [1, 3, 6, 1, 2, 4, 8] + durs = ["M", "M", "M", "Y", "Y", "Y", "Y"] + risks = [] + for val, dur in zip(vals, durs): + risks.append(round(get_risk(cox, X, val, dur) * 100, 1)) + return risks,encoded_img diff --git a/gerincmet/prog_calc/prog_calc/cox_model.pickle b/gerincmet/prog_calc/prog_calc/cox_model.pickle new file mode 100644 index 0000000..1ed3875 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/cox_model.pickle differ diff --git a/gerincmet/prog_calc/prog_calc/form.py b/gerincmet/prog_calc/prog_calc/form.py new file mode 100644 index 0000000..d8eb4c2 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/form.py @@ -0,0 +1,109 @@ +from flask_wtf import FlaskForm + +from wtforms import SelectField,SubmitField +from wtforms.validators import DataRequired + +class Prognosis_Form(FlaskForm): + # Prognostic Factors + # Primer tumor + primer_tumor_types = [ + (1, "Hematológiai malginitás"), + (2, "Pajzsmirigy carcinoma"), + (3, "Emlő daganat"), + (4, "Prostata daganat"), + (5, "Angiosarcoma"), + (6, "Chondrosarcoma"), + (7, "Osteosarcoma"), + (8, "Ewing-sarcoma"), + (9, "Húgyhólyag"), + (10, "Colorectalis"), + (11, "Garat"), + (12, "Vese"), + (13, "Máj"), + (14, "Melanoma"), + (15, "Ovarium"), + (16, "Uterus"), + (17, "Parotis"), + (18, "Gyomor"), + (19, "Ismeretlen primer tumor"), + (20, "Méhnyak"), + (21, "Nyelőcső"), + (22, "Gége"), + (23, "Tüdő"), + (24, "Hasnyálmirigy"), + (25, "Orrmelléküreg eredet")] + primer_tumor = SelectField(f"Primer tumor típusa", choices = primer_tumor_types, validators = [DataRequired()]) + + # Age + age_class = [ + (0,"40 év alatt"), + (8,"40 év felett")] + age = SelectField(f"Életkor", choices = age_class, validators = [DataRequired()]) + + # Status + status_calss = [ + (0, "Járóképes"), + (5, "Ágyhoz kötött (járásképtelen)")] + status = SelectField(f"Ambulátoros státusz", choices = status_calss, validators = [DataRequired()]) + + # Metastasis + has_metastasis = [ + (0, "Nincs"), + (4, "Van")] + metastasis = SelectField(f"Belszervi áttétek jelenléte", choices = has_metastasis, validators = [DataRequired()]) + + # Protein levels + protein_class = [ + (0, "Normál tartomány (>6,5 g/dl)"), + (3, "Hypoproteinaemia (<6,5 g/dl)")] + protein_levels = SelectField(f"Szérum fehérje szint", choices = protein_class, validators = [DataRequired()]) + + #------------- + # SINS factors + # Localization + localization_class = [ + (3, "Junctionális (occiput-CII, CVII-ThII, ThII-LI, LV-SI)"), + (2, "Mobilis gerincszakasz (CIII-VI, LII-IV)"), + (1, "Semirigid gerincszakasz (ThIII-X)"), + (0, "Rigid (SII-V)")] + localization = SelectField(f"Lokalizáció", choices = localization_class, validators = [DataRequired()]) + + # Pain + has_pain = [ + (3, "Van"), + (2, "Időszakosan"), + (0, "Nincs")] + pain = SelectField(f"Fájdalom", choices = has_pain, validators = [DataRequired()]) + + # Bone lesion + bone_lesion_class = [ + (2, "Osteolyticus"), + (1, "Kevert"), + (0, "Osteoblasticus")] + bone_lesion = SelectField(f"Csontlézió típusa", choices=bone_lesion_class, validators=[DataRequired()]) + + # Spinal stability + stability_class = [ + (4, "Subluxatio/luxatio"), + (2, "De novo kialakult deformitás (kyphosis, scoliosis)"), + (0, "Normál")] + stability = SelectField(f"Gerincstabilitás", choices=stability_class, validators=[DataRequired()]) + + # Compression + compression_class = [ + (3, ">50% komprimált"), + (2, "<50% komprimált"), + (1, "Nincs kompresszió a csigolyatest 50%-os involváltság mellett"), + (0, "A fentiek közül egyik sem")] + compression = SelectField(f"Csigolyatest kompresszió mértéke", choices=compression_class, validators=[DataRequired()]) + + # Involvement + involvement_class = [ + (3, "Bilateralis"), + (2, "Unilateralis"), + (1, "A fentiek közül egyik sem")] + involvement = SelectField(f"A spinalis elemek postero-lateralis érintettsége", choices=involvement_class, validators=[DataRequired()]) + + #------- + # Result + submit = SubmitField("Eredmény") \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/km_model.pickle b/gerincmet/prog_calc/prog_calc/km_model.pickle new file mode 100644 index 0000000..4058426 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/km_model.pickle differ diff --git a/gerincmet/prog_calc/prog_calc/main.py b/gerincmet/prog_calc/prog_calc/main.py new file mode 100644 index 0000000..57559c7 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/main.py @@ -0,0 +1,24 @@ +from flask import Flask, render_template +from form import Prognosis_Form +from cox import cox_model +from tumor_type_to_score import type_to_score + +app = Flask(__name__) +app.config["SECRET_KEY"] = "S(JK5Re,7*7Rbm#A" + +@app.route("/",methods = ["GET","POST"]) +def index(): + form = Prognosis_Form() + if form.validate_on_submit(): + tumor_score = type_to_score(int(form.primer_tumor.data)) + risks,encoded_img = cox_model(tumor_score , int(form.age.data) , int(form.status.data) , int(form.metastasis.data) , int(form.protein_levels.data)) + nmstpc_score = tumor_score + int(form.age.data) + int(form.status.data) + int(form.metastasis.data) + int(form.protein_levels.data) + sins_score = int(form.localization.data) + int(form.pain.data) + int(form.bone_lesion.data) + int(form.stability.data) + int(form.compression.data) + int(form.involvement.data) + return render_template("prognosis_block.html",nmstpc_score = nmstpc_score,sins_score=sins_score,m1r=risks[0],m3r=risks[1],m6r=risks[2],y1r=risks[3],y2r=risks[4],y4r=risks[5],y8r=risks[6],form=form, tumor_score=tumor_score,encoded_img = encoded_img.decode('utf-8')) + return render_template("form.html",form=form,tumor_score = None) +@app.route("/contact_us") +def contact_us(): + return render_template("contact_us.html") + +if __name__ == "__main__": + app.run() \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/static/elte_logo.png b/gerincmet/prog_calc/prog_calc/static/elte_logo.png new file mode 100644 index 0000000..7132554 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/static/elte_logo.png differ diff --git a/gerincmet/prog_calc/prog_calc/static/head.jpg b/gerincmet/prog_calc/prog_calc/static/head.jpg new file mode 100644 index 0000000..0938bf1 Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/static/head.jpg differ diff --git a/gerincmet/prog_calc/prog_calc/static/sote_emk.png b/gerincmet/prog_calc/prog_calc/static/sote_emk.png new file mode 100644 index 0000000..d01a02c Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/static/sote_emk.png differ diff --git a/gerincmet/prog_calc/prog_calc/static/sote_logo.png b/gerincmet/prog_calc/prog_calc/static/sote_logo.png new file mode 100644 index 0000000..9c2ac3f Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/static/sote_logo.png differ diff --git a/gerincmet/prog_calc/prog_calc/static/sote_phd.png b/gerincmet/prog_calc/prog_calc/static/sote_phd.png new file mode 100644 index 0000000..b2594ff Binary files /dev/null and b/gerincmet/prog_calc/prog_calc/static/sote_phd.png differ diff --git a/gerincmet/prog_calc/prog_calc/static/style.css b/gerincmet/prog_calc/prog_calc/static/style.css new file mode 100644 index 0000000..ee1a7d4 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/static/style.css @@ -0,0 +1,137 @@ +body { + margin: 0; + padding: 0; + font-family: Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif; + color: #808080; +} +/* + * Formatting the header area + */ +header { + padding: 10px 0px 100px 0px; + background-color: #ffffff; + height: 35px; + width: 1200px; + opacity: .9; + margin: 0 auto; + border-style: hidden hidden hidden hidden; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +header div.container { + width: 1200px; + margin-top: 10px; +} + +header img.head { + position: absolute; + z-index: -5; +} + +header h1.logo { + margin-top: 65px; + margin-left: 175px; + font-family: 'neos', Arial, Verdana, Helvetica; + font-size: 1.6em; + text-transform: uppercase; + float: left; +} + +/* + * Centering the body content #F0801A + */ +.container { + width: 1200px; + margin: 0 auto; +} +div.home { + padding: 10px 10px 10px 10px; + background-color: #ffffff; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.result_image { + display: block; + margin-left: auto; + margin-right: auto; + width: 70%; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.emk_logo { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +hr { + border: 1px solid #808080; + border-radius: 0px; +} + +div.about { + padding: 10px 10px 10px 10px; + background-color: #808080; + color: white; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +h2 { + font-size: 1.7em; + margin-top: 10px; + margin-bottom: 10px; + text-align: left; + letter-spacing: -2px; + color: #F0801A; +} +h3 { + font-size: 1.5em; + font-weight: 100; + margin-top: 0px; + margin-bottom: 0px; + text-align: left; + letter-spacing: -1px; + color: #3873BA; +} +h3.about { + color: white; +} + +.menu { + float: right; + margin-top: -105px; + margin-right: 0px; +} +.menu li { + display: inline; +} +.menu li + li { + margin-left: 10px; +} +.menu li a { + color: #3873BA; + background-color: transparent; + text-decoration: none; +} +.menu li a:visited { + color: #3873BA; + background-color: transparent; + text-decoration: none; +} +.menu li a:hover { + color: #F0801A; + background-color: transparent; + text-decoration: none; +} +.menu li a:active { + color: #F0801A; + background-color: transparent; + text-decoration: none; +} \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/templates/contact_us.html b/gerincmet/prog_calc/prog_calc/templates/contact_us.html new file mode 100644 index 0000000..bd8c89a --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/templates/contact_us.html @@ -0,0 +1,7 @@ +{% extends "main.html" %} + +{% block content %} +
+

A weboldallal kapcsolatos problémákat a baskayj@student.elte.hu címen jelezzék.

+
+{% endblock %} \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/templates/form.html b/gerincmet/prog_calc/prog_calc/templates/form.html new file mode 100644 index 0000000..5eb620b --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/templates/form.html @@ -0,0 +1,60 @@ +{% extends "main.html" %} + +{% block content %} +
+
+ + {{ form.hidden_tag() }} +

+

Prognosztikai faktorok

+ {{ form.primer_tumor.label }}{% if not tumor_score == None %}: {{ tumor_score }} pont{% endif %}
+ {{ form.primer_tumor() }} +

+

+ {{ form.age.label }}{% if not form.age.data == None %}: {{ form.age.data }} pont{% endif %}
+ {{ form.age() }} +

+

+ {{ form.status.label }}{% if not form.status.data == None %}: {{ form.status.data }} pont{% endif %}
+ {{ form.status() }} +

+

+ {{ form.metastasis.label }}{% if not form.metastasis.data == None %}: {{ form.metastasis.data }} pont{% endif %}
+ {{ form.metastasis() }} +

+

+ {{ form.protein_levels.label }}{% if not form.protein_levels.data == None %}: {{ form.protein_levels.data }} pont{% endif %}
+ {{ form.protein_levels() }} +

+

+

SINS (Spinal Instability Neoplastic Score)1

+ {{ form.localization.label }}{% if not form.localization.data == None %}: {{ form.localization.data }} pont{% endif %}
+ {{ form.localization() }} +

+

+ {{ form.pain.label }}{% if not form.pain.data == None %}: {{ form.pain.data }} pont{% endif %}
+ {{ form.pain() }} +

+

+ {{ form.bone_lesion.label }}{% if not form.bone_lesion.data == None %}: {{ form.bone_lesion.data }} pont{% endif %}
+ {{ form.bone_lesion() }} +

+

+ {{ form.stability.label }}{% if not form.stability.data == None %}: {{ form.stability.data }} pont{% endif %}
+ {{ form.stability() }} +

+

+ {{ form.compression.label }}{% if not form.compression.data == None %}: {{ form.compression.data }} pont{% endif %}
+ {{ form.compression() }} +

+

+ {{ form.involvement.label }}{% if not form.involvement.data == None %}: {{ form.involvement.data }} pont{% endif %}
+ {{ form.involvement() }} +

+

+ {{ form.submit() }} +

+
+
+ {% block results %}{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/templates/main.html b/gerincmet/prog_calc/prog_calc/templates/main.html new file mode 100644 index 0000000..a95abc8 --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/templates/main.html @@ -0,0 +1,46 @@ + + + + + + OMIII MGPK + + + +
+ +
+

+ Országos Mentális, Ideggyógyászati és Idegsebészeti Intézet + Metasztatikus Gerincdaganat Prognózis Kalkulátor +

+ +
+
+ {% block content %}{% endblock %} +
+

+ + + + +

+

+ Amennyiben kutatásunkat, pontrendszerünket hasznosnak találta, kérjük hivatkozza kéziratainkat a további fejlődés elősegítése céljából. +

    +
  • Czigléczki G., Mezei T., Pollner P., Horváth A., Banczerowski P. (2018) Prognostic factors of surgical complications and overall survival of patients with metastatic spinal tumor World Neurosurgery, 113:e20-e28. DOI:10.1016/j.wneu.2018.01.092
  • +
  • Pollner P.*, Horváth A.*, Mezei T., Banczerowski P., Czigléczki G. (2018) Analysis of four scoring systems for the prognosis of patients with metastasis of the vertebral column World Neurosurgery, 112:e675-e682. DOI:10.1016/j.wneu.2018.01.124
  • +
  • Mezei T., Horváth A., Pollner P., Czigléczki G., Banczerowski P. (2020) Research on the predicting power of the revised Tokuhashi system: how much time can surgery give to patients with short life expectancy? International Journal of Clinical Oncology, 25 (4):755-764. DOI:10.1007/s10147-019-01612-w
  • +
+

+

+

Felhasznált Irodalom

+ [1.] Fisher, C.G. et al. (2010) A novel classification system for spinal instability in neoplastic disease: an evidence-based approach and expert consensus from the Spine Oncology Study Group. Spine (Phila Pa 1976) 35 (22):E1221-1229. DOI:10.1097/BRS.0b013e3181e16ae2 +

+
+ + \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/templates/prognosis_block.html b/gerincmet/prog_calc/prog_calc/templates/prognosis_block.html new file mode 100644 index 0000000..2856edf --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/templates/prognosis_block.html @@ -0,0 +1,61 @@ +{% extends "form.html" %} + +{% block results %} +
+

Eredmény

+
+

Prognosztikai csoportok

+ {% if 0 <= nmstpc_score <= 17 %} +

Kedvező életkilátású csoport (0-17: {{ nmstpc_score }} pont) Műtéti kezelés javasolt. A radiológiai morfológia alapján választandó meg a pontos műtéttechnika, javasoljuk a maximálisan lehetséges radikális eltávolítást („excízionális műtét").

+ {% elif 18 <= nmstpc_score <= 24 %} +

Közepes életkilátású csoport (18-24: {{ nmstpc_score }} pont) Műtéti ellátás javasolt, azonban „kevésbé invazív beavatkozást” preferálandó ebben a csoportban.

+ {% elif 25 <= nmstpc_score <= 39 %} +

Gyenge életkilátású csoport (24-39: {{ nmstpc_score }} pont) Elsősorban palliatív onko-radioterápia javasolt, amennyiben minimal invazív beavatkozással jelentős funkciójavulást, életminőség növekedést, fájdalomcsillapítást érhetünk el, abban az esetben műtéti ellátás is szóba jön.

+ {% else %} +

ERROR: nmstpc_score > 39

+ {% endif %} +

Stabilizáció szükségességének megítéléséhez SINS nyújthat segítséget.

+

A feltételezett instabilitás mértéke

+ {% if 0 <= sins_score <= 6 %} +

Stabil gerincszakasz. (0-6: {{ sins_score }} pont)

+ {% elif 7 <= sins_score <= 12 %} +

Pontenciálisan instabil gerincszakasz. (7-12: {{ sins_score }} pont)

+ {% elif 13 <= sins_score <= 18 %} +

Instabil gerincszakasz. (13-18: {{ sins_score }} pont)

+ {% else %} +

ERROR: sins_score > 18

+ {% endif %} +

Halál kockázata

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1 hónap:{{ m1r }} %
3 hónap:{{ m3r }} %
6 hónap:{{ m6r }} %
1 év:{{ y1r }} %
2 év:{{ y2r }} %
4 év:{{ y4r }} %
8 év:{{ y8r }} %
+ +
+{% endblock %} \ No newline at end of file diff --git a/gerincmet/prog_calc/prog_calc/tumor_type_to_score.py b/gerincmet/prog_calc/prog_calc/tumor_type_to_score.py new file mode 100644 index 0000000..74a8ece --- /dev/null +++ b/gerincmet/prog_calc/prog_calc/tumor_type_to_score.py @@ -0,0 +1,33 @@ +primer_tumor_score = [ + (0, 1), + (0, 2), + (6, 3), + (6, 4), + (12, 5), + (12, 6), + (12, 7), + (12, 8), + (12, 9), + (12, 10), + (12, 11), + (12, 12), + (12, 13), + (12, 14), + (12, 15), + (12, 16), + (12, 17), + (12, 18), + (12, 19), + (19, 20), + (19, 21), + (19, 22), + (19, 23), + (19, 24), + (19, 25)] + +def type_to_score(typ): + score = 0 + for i in range(len(primer_tumor_score)): + if typ == primer_tumor_score[i][1]: + score = primer_tumor_score[i][0] + return int(score) \ No newline at end of file diff --git a/locale.gen b/locale.gen new file mode 100644 index 0000000..68b6ef6 --- /dev/null +++ b/locale.gen @@ -0,0 +1 @@ +hu_HU.UTF-8 UTF-8 diff --git a/prog-calc.conf b/prog-calc.conf new file mode 100644 index 0000000..e44ba25 --- /dev/null +++ b/prog-calc.conf @@ -0,0 +1,23 @@ + + ServerAdmin baskayj + DocumentRoot /var/www/html/gerincmet + +WSGIDaemonProcess prog_calc python-home=/var/www/html/gerincmet/prog_calc/prog_calc/venv python-path=/var/www/html/gerincmet/prog_calc/prog_calc:/var/www/html/gerincmet/prog_calc/prog_calc/venv/local/lib/python3.9/site-packages threads=5 +# WSGIScriptAlias /omiiimgpk /var/www/html/gerincmet/prog_calc/prog_calc.wsgi + WSGIScriptAlias /gerincmet /var/www/html/gerincmet/prog_calc/prog_calc.wsgi + WSGIApplicationGroup %{GLOBAL} + + WSGIProcessGroup prog_calc + WSGIApplicationGroup %{GLOBAL} + Order deny,allow + Allow from all + + Alias /static /var/www/html/gerincmet/prog_calc/prog_calc/static + + Order allow,deny + Allow from all + + ErrorLog ${APACHE_LOG_DIR}/error.log + LogLevel warn + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7004d1e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,36 @@ +Flask==2.0.2 +Flask-WTF==1.0.0 +Jinja2==3.0.3 +MarkupSafe==2.0.1 +Pillow==8.4.0 +WTForms==3.0.0 +Werkzeug==2.0.2 +altgraph==0.17.2 +astor==0.8.1 +autograd==1.3 +autograd-gamma==0.5.0 +click==8.0.3 +cycler==0.11.0 +fonttools==4.28.1 +formulaic==0.2.4 +future==0.18.2 +interface-meta==1.2.4 +itsdangerous==2.0.1 +kiwisolver==1.3.2 +lifelines==0.26.3 +matplotlib==3.5.0 +numpy==1.21.4 +packaging==21.2 +pandas==1.3.4 +pip==20.0.2 +pyinstaller==4.7 +pyinstaller-hooks-contrib==2021.3 +pyparsing==2.4.7 +python-dateutil==2.8.2 +pytz==2021.3 +scipy==1.7.2 +setuptools==44.0.0 +setuptools-scm==6.3.2 +six==1.16.0 +tomli==1.2.2 +wrapt==1.13.3 diff --git a/start-apache.sh b/start-apache.sh new file mode 100644 index 0000000..f7b1cef --- /dev/null +++ b/start-apache.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +. /etc/apache2/envvars +ulimit -n 8192 +chown root:www-data /var/lock/apache2 +chown -R www-data:www-data /var/www/html +exec /usr/sbin/apache2 -k start -DFOREGROUND