OpenREM 1.0.0b2__py3-none-any.whl → 1.0.0b3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openrem/locale/de/LC_MESSAGES/django.po +1060 -1059
- openrem/locale/django.pot +973 -972
- openrem/locale/es_MX/LC_MESSAGES/django.po +1049 -1048
- openrem/locale/it/LC_MESSAGES/django.po +1044 -1043
- openrem/locale/lt/LC_MESSAGES/django.po +989 -988
- openrem/locale/nb_NO/LC_MESSAGES/django.po +985 -984
- openrem/locale/pt_BR/LC_MESSAGES/django.po +1003 -1002
- openrem/manage.py +10 -10
- openrem/openremproject/__init__.py +1 -1
- openrem/openremproject/local_settings.py.linux +128 -128
- openrem/openremproject/local_settings.py.windows +144 -144
- openrem/openremproject/local_settings.py.windows-sqlite3 +129 -129
- openrem/openremproject/settings.py +278 -278
- openrem/openremproject/urls.py +32 -32
- openrem/openremproject/wsgi.py.example +28 -28
- openrem/remapp/__init__.py +2 -2
- openrem/remapp/admin.py +31 -31
- openrem/remapp/exports/ct_export.py +780 -753
- openrem/remapp/exports/dx_export.py +817 -805
- openrem/remapp/exports/export_common.py +931 -951
- openrem/remapp/exports/export_common_pandas.py +2422 -0
- openrem/remapp/exports/exportviews.py +815 -860
- openrem/remapp/exports/mg_csv_nhsbsp.py +292 -292
- openrem/remapp/exports/mg_export.py +673 -510
- openrem/remapp/exports/nm_export.py +796 -575
- openrem/remapp/exports/rf_export.py +1418 -1431
- openrem/remapp/extractors/ct_philips.py +424 -414
- openrem/remapp/extractors/ct_toshiba.py +2116 -2108
- openrem/remapp/extractors/dx.py +1033 -952
- openrem/remapp/extractors/extract_common.py +817 -817
- openrem/remapp/extractors/import_views.py +426 -426
- openrem/remapp/extractors/mam.py +685 -672
- openrem/remapp/extractors/nm_image.py +439 -431
- openrem/remapp/extractors/ptsizecsv2db.py +368 -368
- openrem/remapp/extractors/rdsr.py +667 -654
- openrem/remapp/extractors/rdsr_methods.py +1771 -1768
- openrem/remapp/extractors/rrdsr_methods.py +630 -622
- openrem/remapp/fixtures/openskin_safelist.json +11 -11
- openrem/remapp/forms.py +2286 -2277
- openrem/remapp/interface/chart_functions.py +2412 -2393
- openrem/remapp/interface/mod_filters.py +1241 -1243
- openrem/remapp/migrations/0001_initial.py.1-0-upgrade +1043 -1043
- openrem/remapp/models.py +3418 -3407
- openrem/remapp/netdicom/dicomviews.py +681 -683
- openrem/remapp/netdicom/qrscu.py +2646 -2646
- openrem/remapp/netdicom/tools.py +134 -134
- openrem/remapp/static/css/bootstrap-theme.css +587 -587
- openrem/remapp/static/css/bootstrap-theme.min.css +4 -4
- openrem/remapp/static/css/bootstrap.css +6800 -6800
- openrem/remapp/static/css/bootstrap.min.css +4 -4
- openrem/remapp/static/css/datepicker3.css +790 -790
- openrem/remapp/static/css/jquery.qtip.min.css +2 -2
- openrem/remapp/static/css/openrem-extra.css +442 -442
- openrem/remapp/static/css/openrem.css +96 -96
- openrem/remapp/static/css/registration.css +34 -34
- openrem/remapp/static/fonts/glyphicons-halflings-regular.svg +287 -287
- openrem/remapp/static/js/bootstrap-datepicker.js +1671 -1671
- openrem/remapp/static/js/bootstrap.js +2363 -2363
- openrem/remapp/static/js/bootstrap.min.js +6 -6
- openrem/remapp/static/js/charts/chartCommonFunctions.js +75 -75
- openrem/remapp/static/js/charts/chartFullScreen.js +41 -41
- openrem/remapp/static/js/charts/ctChartAjax.js +331 -331
- openrem/remapp/static/js/charts/dxChartAjax.js +290 -290
- openrem/remapp/static/js/charts/mgChartAjax.js +144 -144
- openrem/remapp/static/js/charts/nmChartAjax.js +64 -64
- openrem/remapp/static/js/charts/plotly-2.35.2.min.js +8 -0
- openrem/remapp/static/js/charts/rfChartAjax.js +128 -128
- openrem/remapp/static/js/chroma.min.js +32 -32
- openrem/remapp/static/js/datepicker.js +5 -5
- openrem/remapp/static/js/dicom.js +115 -115
- openrem/remapp/static/js/django_reverse/reverse.js +13 -13
- openrem/remapp/static/js/formatDate.js +7 -7
- openrem/remapp/static/js/html5shiv.min.js +8 -8
- openrem/remapp/static/js/jquery-1.11.0.min.js +4 -4
- openrem/remapp/static/js/npm.js +12 -12
- openrem/remapp/static/js/respond.min.js +4 -4
- openrem/remapp/static/js/skin-dose-maps/jquery.qtip.min.js +4 -4
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMap3dHUDObject.js +112 -112
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMap3dObject.js +367 -367
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMap3dPersonObject.js +158 -158
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMapColourScaleObject.js +153 -153
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMapObject.js +367 -367
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMapping.js +584 -584
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMapping3d.js +255 -255
- openrem/remapp/static/js/skin-dose-maps/rfSkinDoseMappingAjax.js +267 -212
- openrem/remapp/static/js/skin-dose-maps/three.min.js +835 -835
- openrem/remapp/static/js/sorttable.js +495 -495
- openrem/remapp/templates/base.html +253 -253
- openrem/remapp/templates/registration/changepassword.html +25 -25
- openrem/remapp/templates/registration/changepassworddone.html +12 -12
- openrem/remapp/templates/registration/login.html +42 -42
- openrem/remapp/templates/remapp/backgroundtaskmaximumrows_form.html +29 -29
- openrem/remapp/templates/remapp/base.html +1 -1
- openrem/remapp/templates/remapp/ctdetail.html +235 -235
- openrem/remapp/templates/remapp/ctfiltered.html +310 -310
- openrem/remapp/templates/remapp/dicomdeletesettings_form.html +31 -31
- openrem/remapp/templates/remapp/dicomqr.html +147 -147
- openrem/remapp/templates/remapp/dicomquerydetails.html +83 -83
- openrem/remapp/templates/remapp/dicomqueryimages.html +49 -49
- openrem/remapp/templates/remapp/dicomqueryseries.html +109 -109
- openrem/remapp/templates/remapp/dicomquerysummary.html +48 -48
- openrem/remapp/templates/remapp/dicomremoteqr_confirm_delete.html +60 -60
- openrem/remapp/templates/remapp/dicomremoteqr_form.html +32 -32
- openrem/remapp/templates/remapp/dicomstorescp_confirm_delete.html +53 -53
- openrem/remapp/templates/remapp/dicomstorescp_form.html +48 -48
- openrem/remapp/templates/remapp/dicomsummary.html +257 -257
- openrem/remapp/templates/remapp/displaychartoptions.html +184 -184
- openrem/remapp/templates/remapp/displayhomepageoptions.html +57 -57
- openrem/remapp/templates/remapp/displayname-count.html +6 -6
- openrem/remapp/templates/remapp/displayname-last-date.html +3 -3
- openrem/remapp/templates/remapp/displayname-modality.html +86 -105
- openrem/remapp/templates/remapp/displayname-skinmap.html +18 -18
- openrem/remapp/templates/remapp/displaynameupdate.html +100 -100
- openrem/remapp/templates/remapp/displaynameview.html +222 -219
- openrem/remapp/templates/remapp/dxdetail.html +176 -176
- openrem/remapp/templates/remapp/dxfiltered.html +324 -324
- openrem/remapp/templates/remapp/exports-active.html +25 -25
- openrem/remapp/templates/remapp/exports-complete.html +35 -35
- openrem/remapp/templates/remapp/exports-error.html +26 -26
- openrem/remapp/templates/remapp/exports-queue.html +18 -18
- openrem/remapp/templates/remapp/exports.html +191 -191
- openrem/remapp/templates/remapp/failed_summary_list.html +27 -27
- openrem/remapp/templates/remapp/filteredbase.html +162 -162
- openrem/remapp/templates/remapp/highdosemetricalertsettings_form.html +76 -76
- openrem/remapp/templates/remapp/home-list-modalities.html +94 -94
- openrem/remapp/templates/remapp/home.html +202 -202
- openrem/remapp/templates/remapp/list_filters.html +24 -24
- openrem/remapp/templates/remapp/mgdetail.html +160 -138
- openrem/remapp/templates/remapp/mgfiltered.html +311 -311
- openrem/remapp/templates/remapp/nmdetail.html +300 -300
- openrem/remapp/templates/remapp/nmfiltered.html +255 -255
- openrem/remapp/templates/remapp/notpatient.html +190 -190
- openrem/remapp/templates/remapp/notpatientindicators_form_base.html +81 -81
- openrem/remapp/templates/remapp/notpatientindicatorsid_confirm_delete.html +54 -54
- openrem/remapp/templates/remapp/notpatientindicatorsid_form.html +23 -23
- openrem/remapp/templates/remapp/notpatientindicatorsname_confirm_delete.html +54 -54
- openrem/remapp/templates/remapp/notpatientindicatorsname_form.html +23 -23
- openrem/remapp/templates/remapp/notpatientindicatorsname_form_base.html +85 -85
- openrem/remapp/templates/remapp/openskinsafelist_add.html +130 -130
- openrem/remapp/templates/remapp/openskinsafelist_confirm_delete.html +100 -100
- openrem/remapp/templates/remapp/openskinsafelist_form.html +207 -207
- openrem/remapp/templates/remapp/patientidsettings_form.html +83 -83
- openrem/remapp/templates/remapp/populate_summary_progress.html +83 -83
- openrem/remapp/templates/remapp/populate_summary_progress_error.html +36 -36
- openrem/remapp/templates/remapp/review_failed_imports.html +157 -157
- openrem/remapp/templates/remapp/review_failed_study.html +41 -41
- openrem/remapp/templates/remapp/review_studies_delete_button.html +20 -20
- openrem/remapp/templates/remapp/review_study.html +19 -19
- openrem/remapp/templates/remapp/review_summary_list.html +245 -245
- openrem/remapp/templates/remapp/rf_dose_alert_email_template.html +14 -1
- openrem/remapp/templates/remapp/rfalertnotificationsview.html +59 -59
- openrem/remapp/templates/remapp/rfdetail.html +547 -543
- openrem/remapp/templates/remapp/rfdetailbase.html +18 -18
- openrem/remapp/templates/remapp/rffiltered.html +404 -404
- openrem/remapp/templates/remapp/sizeimports.html +119 -119
- openrem/remapp/templates/remapp/sizeprocess.html +96 -96
- openrem/remapp/templates/remapp/sizeupload.html +110 -110
- openrem/remapp/templates/remapp/skindosemapcalcsettings_form.html +28 -28
- openrem/remapp/templates/remapp/standardname-modality.html +69 -69
- openrem/remapp/templates/remapp/standardnames_confirm_delete.html +71 -71
- openrem/remapp/templates/remapp/standardnames_form.html +87 -87
- openrem/remapp/templates/remapp/standardnamesettings_form.html +41 -41
- openrem/remapp/templates/remapp/standardnamesrefreshall.html +92 -92
- openrem/remapp/templates/remapp/standardnameview.html +103 -103
- openrem/remapp/templates/remapp/study_confirm_delete.html +147 -147
- openrem/remapp/templates/remapp/task_admin.html +265 -265
- openrem/remapp/templates/remapp/tasks.html +76 -76
- openrem/remapp/templatetags/formfilters.py +13 -13
- openrem/remapp/templatetags/proper_paginate.py +38 -38
- openrem/remapp/templatetags/remappduration.py +36 -36
- openrem/remapp/templatetags/sigdig.py +38 -38
- openrem/remapp/templatetags/sort_class_property_value.py +15 -15
- openrem/remapp/templatetags/update_variable.py +20 -20
- openrem/remapp/templatetags/url_replace.py +25 -25
- openrem/remapp/tests/test_charts_common.py +202 -202
- openrem/remapp/tests/test_charts_ct.py +7111 -7111
- openrem/remapp/tests/test_charts_dx.py +3513 -3513
- openrem/remapp/tests/test_charts_mg.py +1116 -1115
- openrem/remapp/tests/test_dcmdatetime.py +189 -189
- openrem/remapp/tests/test_dicom_qr.py +2580 -2580
- openrem/remapp/tests/test_display_name.py +274 -274
- openrem/remapp/tests/test_export_ct_xlsx.py +272 -248
- openrem/remapp/tests/test_export_dx_xlsx.py +137 -134
- openrem/remapp/tests/test_export_mammo_csv.py +242 -242
- openrem/remapp/tests/test_export_rf_xlsx.py +246 -246
- openrem/remapp/tests/test_files/DX-Im-DRGEM.dcm +0 -0
- openrem/remapp/tests/test_files/MG-RDSR-GEPristina-2D.dcm +0 -0
- openrem/remapp/tests/test_files/MG-RDSR-GEPristina-DBT.dcm +0 -0
- openrem/remapp/tests/test_files/MG-RDSR-Giotto-DBT.dcm +0 -0
- openrem/remapp/tests/test_files/skin_map_alphenix.py +590 -590
- openrem/remapp/tests/test_files/skin_map_zee.py +354 -354
- openrem/remapp/tests/test_filters_ct.py +321 -321
- openrem/remapp/tests/test_filters_dx.py +92 -92
- openrem/remapp/tests/test_filters_mammo.py +183 -183
- openrem/remapp/tests/test_filters_rf.py +118 -118
- openrem/remapp/tests/test_get_values.py +72 -72
- openrem/remapp/tests/test_hash_id.py +65 -65
- openrem/remapp/tests/test_import_ct_esr_ge.py +3034 -3034
- openrem/remapp/tests/test_import_ct_philips_rdsr.py +42 -42
- openrem/remapp/tests/test_import_ct_rdsr_multiple.py +256 -256
- openrem/remapp/tests/test_import_ct_rdsr_siemens.py +827 -827
- openrem/remapp/tests/test_import_ct_rdsr_spectrumdynamics.py +91 -91
- openrem/remapp/tests/test_import_ct_rdsr_toshiba_dosecheck.py +67 -67
- openrem/remapp/tests/test_import_ct_rdsr_toshiba_multivaluesd.py +33 -33
- openrem/remapp/tests/test_import_ct_rdsr_toshiba_pixelmed.py +118 -118
- openrem/remapp/tests/test_import_ct_sc_philips.py +44 -44
- openrem/remapp/tests/test_import_dual_rdsr.py +110 -110
- openrem/remapp/tests/test_import_dx.py +1267 -1191
- openrem/remapp/tests/test_import_dx_rdsr.py +1250 -1253
- openrem/remapp/tests/test_import_mam.py +438 -438
- openrem/remapp/tests/test_import_mg_im_hol_proj.py +46 -46
- openrem/remapp/tests/test_import_mg_rdsr.py +586 -586
- openrem/remapp/tests/test_import_nm_image.py +420 -420
- openrem/remapp/tests/test_import_nm_siemens_rdsr.py +396 -396
- openrem/remapp/tests/test_import_px.py +161 -161
- openrem/remapp/tests/test_import_rf_rdsr.py +420 -418
- openrem/remapp/tests/test_missing_date.py +42 -42
- openrem/remapp/tests/test_not_patient.py +60 -60
- openrem/remapp/tests/test_openskin.py +272 -272
- openrem/remapp/tests/test_patient_id_settings.py +72 -72
- openrem/remapp/tests/test_pt_size_import.py +232 -232
- openrem/remapp/tests/test_rf_detail.py +113 -113
- openrem/remapp/tests/test_rf_high_dose_alert.py +361 -361
- openrem/remapp/tools/background.py +361 -361
- openrem/remapp/tools/check_standard_name_status.py +47 -0
- openrem/remapp/tools/check_uid.py +70 -70
- openrem/remapp/tools/dcmdatetime.py +248 -248
- openrem/remapp/tools/default_import.py +44 -47
- openrem/remapp/tools/get_values.py +230 -230
- openrem/remapp/tools/hash_id.py +58 -58
- openrem/remapp/tools/make_skin_map.py +448 -406
- openrem/remapp/tools/not_patient_indicators.py +72 -72
- openrem/remapp/tools/openskin/calc_exp_map.py +173 -173
- openrem/remapp/tools/openskin/geomclass.py +475 -475
- openrem/remapp/tools/openskin/geomfunc.py +433 -432
- openrem/remapp/tools/openskin/skinmap.py +417 -417
- openrem/remapp/tools/populate_summary.py +185 -193
- openrem/remapp/tools/save_skin_map_structure.py +73 -73
- openrem/remapp/tools/send_high_dose_alert_emails.py +238 -207
- openrem/remapp/urls.py +456 -448
- openrem/remapp/version.py +11 -11
- openrem/remapp/views.py +1147 -1052
- openrem/remapp/views_admin.py +3876 -3936
- openrem/remapp/views_charts_ct.py +2110 -2058
- openrem/remapp/views_charts_dx.py +1906 -1836
- openrem/remapp/views_charts_mg.py +1349 -1196
- openrem/remapp/views_charts_nm.py +535 -535
- openrem/remapp/views_charts_rf.py +1219 -1241
- openrem/remapp/views_openskin.py +379 -384
- openrem/sample-config/openrem-consumer.service +12 -12
- openrem/sample-config/openrem-gunicorn.service +13 -13
- openrem/sample-config/openrem-server +14 -13
- openrem/sample-config/openrem_orthanc_config_linux.lua +454 -454
- openrem/sample-config/openrem_orthanc_config_windows.lua +455 -455
- openrem/sample-config/queue-init.bat +73 -73
- openrem/scripts/openrem_ctphilips.py +25 -25
- openrem/scripts/openrem_cttoshiba.py +28 -28
- openrem/scripts/openrem_dx.py +22 -22
- openrem/scripts/openrem_mg.py +22 -22
- openrem/scripts/openrem_nm.py +22 -22
- openrem/scripts/openrem_ptsizecsv.py +17 -17
- openrem/scripts/openrem_qr.py +12 -12
- openrem/scripts/openrem_rdsr.py +25 -25
- {OpenREM-1.0.0b2.dist-info → openrem-1.0.0b3.dist-info}/METADATA +39 -29
- openrem-1.0.0b3.dist-info/RECORD +379 -0
- {OpenREM-1.0.0b2.dist-info → openrem-1.0.0b3.dist-info}/WHEEL +1 -1
- {OpenREM-1.0.0b2.dist-info → openrem-1.0.0b3.dist-info/licenses}/COPYING-GPLv3 +674 -674
- {OpenREM-1.0.0b2.dist-info → openrem-1.0.0b3.dist-info/licenses}/LICENSE +22 -22
- OpenREM-1.0.0b2.dist-info/RECORD +0 -373
- openrem/remapp/static/js/charts/plotly-2.17.1.min.js +0 -8
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_ctphilips.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_cttoshiba.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_dx.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_mg.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_nm.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_ptsizecsv.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_qr.py +0 -0
- {OpenREM-1.0.0b2.data → openrem-1.0.0b3.data}/scripts/openrem_rdsr.py +0 -0
- {OpenREM-1.0.0b2.dist-info → openrem-1.0.0b3.dist-info}/top_level.txt +0 -0
|
@@ -1,193 +1,185 @@
|
|
|
1
|
-
# This Python file uses the following encoding: utf-8
|
|
2
|
-
# OpenREM - Radiation Exposure Monitoring tools for the physicist
|
|
3
|
-
# Copyright (C) 2012-2019 The Royal Marsden NHS Foundation Trust
|
|
4
|
-
#
|
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
# (at your option) any later version.
|
|
9
|
-
#
|
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
# GNU General Public License for more details.
|
|
14
|
-
#
|
|
15
|
-
# Additional permission under section 7 of GPLv3:
|
|
16
|
-
# You shall not make any use of the name of The Royal Marsden NHS
|
|
17
|
-
# Foundation trust in connection with this Program in any press or
|
|
18
|
-
# other public announcement without the prior written consent of
|
|
19
|
-
# The Royal Marsden NHS Foundation Trust.
|
|
20
|
-
#
|
|
21
|
-
# You should have received a copy of the GNU General Public License
|
|
22
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
|
|
24
|
-
"""
|
|
25
|
-
.. module:: populate_summary.
|
|
26
|
-
:synopsis: Populates new summary study-level fields on upgrade to 0.10.
|
|
27
|
-
|
|
28
|
-
.. moduleauthor:: Ed McDonagh
|
|
29
|
-
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
33
|
-
import logging
|
|
34
|
-
from remapp.models import GeneralStudyModuleAttr, SummaryFields
|
|
35
|
-
|
|
36
|
-
logger = logging.getLogger(__name__)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def populate_summary_study_level(modality, study_pk):
|
|
40
|
-
"""Enables the summary level data to be sent as a task at study level
|
|
41
|
-
|
|
42
|
-
:param modality: Modality type
|
|
43
|
-
:param study_pk: GeneralStudyModuleAttr database object primary key
|
|
44
|
-
:return:
|
|
45
|
-
"""
|
|
46
|
-
from remapp.extractors.extract_common import (
|
|
47
|
-
populate_mammo_agd_summary,
|
|
48
|
-
populate_dx_rf_summary,
|
|
49
|
-
populate_rf_delta_weeks_summary,
|
|
50
|
-
ct_event_type_count,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
study = GeneralStudyModuleAttr.objects.get(
|
|
55
|
-
except ObjectDoesNotExist:
|
|
56
|
-
logger.error(
|
|
57
|
-
f"Attempt to get {modality} study with pk {study_pk} failed - presumably deleted?"
|
|
58
|
-
)
|
|
59
|
-
return
|
|
60
|
-
try:
|
|
61
|
-
if modality in ["DX", "RF"]:
|
|
62
|
-
study.number_of_events = (
|
|
63
|
-
study.projectionxrayradiationdose_set.get().irradeventxraydata_set.count()
|
|
64
|
-
)
|
|
65
|
-
study.save()
|
|
66
|
-
populate_dx_rf_summary(study)
|
|
67
|
-
if modality in "RF":
|
|
68
|
-
populate_rf_delta_weeks_summary(study)
|
|
69
|
-
elif "MG" in modality:
|
|
70
|
-
study.number_of_events = (
|
|
71
|
-
study.projectionxrayradiationdose_set.get().irradeventxraydata_set.count()
|
|
72
|
-
)
|
|
73
|
-
study.save()
|
|
74
|
-
populate_mammo_agd_summary(study)
|
|
75
|
-
elif modality in "CT":
|
|
76
|
-
study.number_of_events = (
|
|
77
|
-
study.ctradiationdose_set.get().ctirradiationeventdata_set.count()
|
|
78
|
-
)
|
|
79
|
-
study.total_dlp = (
|
|
80
|
-
study.ctradiationdose_set.get()
|
|
81
|
-
.ctaccumulateddosedata_set.get()
|
|
82
|
-
.ct_dose_length_product_total
|
|
83
|
-
)
|
|
84
|
-
study.save()
|
|
85
|
-
ct_event_type_count(study)
|
|
86
|
-
except ObjectDoesNotExist:
|
|
87
|
-
logger.warning(
|
|
88
|
-
"{0} {1} with study UID {2}: unable to set summary data.".format(
|
|
89
|
-
study.modality_type, study.pk, study.study_instance_uid
|
|
90
|
-
)
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def populate_summary_ct():
|
|
95
|
-
"""Populate the CT summary fields in GeneralStudyModuleAttr table for existing studies
|
|
96
|
-
|
|
97
|
-
:return:
|
|
98
|
-
"""
|
|
99
|
-
|
|
100
|
-
try:
|
|
101
|
-
task = SummaryFields.objects.get(
|
|
102
|
-
except ObjectDoesNotExist:
|
|
103
|
-
task = SummaryFields.objects.create(
|
|
104
|
-
all_ct = GeneralStudyModuleAttr.objects.filter(
|
|
105
|
-
|
|
106
|
-
)
|
|
107
|
-
task.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
task = SummaryFields.objects.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
:
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
"""
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
"pk
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
to_process_rf = all_rf.filter(number_of_events_a__isnull=True)
|
|
187
|
-
task.current_study = task.total_studies - to_process_rf.count()
|
|
188
|
-
task.save()
|
|
189
|
-
logger.debug("Starting migration of RF to summary fields")
|
|
190
|
-
for study in to_process_rf:
|
|
191
|
-
populate_summary_study_level("RF", study.pk)
|
|
192
|
-
task.current_study += 1
|
|
193
|
-
task.save()
|
|
1
|
+
# This Python file uses the following encoding: utf-8
|
|
2
|
+
# OpenREM - Radiation Exposure Monitoring tools for the physicist
|
|
3
|
+
# Copyright (C) 2012-2019 The Royal Marsden NHS Foundation Trust
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# Additional permission under section 7 of GPLv3:
|
|
16
|
+
# You shall not make any use of the name of The Royal Marsden NHS
|
|
17
|
+
# Foundation trust in connection with this Program in any press or
|
|
18
|
+
# other public announcement without the prior written consent of
|
|
19
|
+
# The Royal Marsden NHS Foundation Trust.
|
|
20
|
+
#
|
|
21
|
+
# You should have received a copy of the GNU General Public License
|
|
22
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
|
|
24
|
+
"""
|
|
25
|
+
.. module:: populate_summary.
|
|
26
|
+
:synopsis: Populates new summary study-level fields on upgrade to 0.10.
|
|
27
|
+
|
|
28
|
+
.. moduleauthor:: Ed McDonagh
|
|
29
|
+
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from django.core.exceptions import ObjectDoesNotExist
|
|
33
|
+
import logging
|
|
34
|
+
from remapp.models import GeneralStudyModuleAttr, SummaryFields
|
|
35
|
+
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def populate_summary_study_level(modality, study_pk):
|
|
40
|
+
"""Enables the summary level data to be sent as a task at study level
|
|
41
|
+
|
|
42
|
+
:param modality: Modality type
|
|
43
|
+
:param study_pk: GeneralStudyModuleAttr database object primary key
|
|
44
|
+
:return:
|
|
45
|
+
"""
|
|
46
|
+
from remapp.extractors.extract_common import (
|
|
47
|
+
populate_mammo_agd_summary,
|
|
48
|
+
populate_dx_rf_summary,
|
|
49
|
+
populate_rf_delta_weeks_summary,
|
|
50
|
+
ct_event_type_count,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
study = GeneralStudyModuleAttr.objects.get(pk=study_pk)
|
|
55
|
+
except ObjectDoesNotExist:
|
|
56
|
+
logger.error(
|
|
57
|
+
f"Attempt to get {modality} study with pk {study_pk} failed - presumably deleted?"
|
|
58
|
+
)
|
|
59
|
+
return
|
|
60
|
+
try:
|
|
61
|
+
if modality in ["DX", "RF"]:
|
|
62
|
+
study.number_of_events = (
|
|
63
|
+
study.projectionxrayradiationdose_set.get().irradeventxraydata_set.count()
|
|
64
|
+
)
|
|
65
|
+
study.save()
|
|
66
|
+
populate_dx_rf_summary(study)
|
|
67
|
+
if modality in "RF":
|
|
68
|
+
populate_rf_delta_weeks_summary(study)
|
|
69
|
+
elif "MG" in modality:
|
|
70
|
+
study.number_of_events = (
|
|
71
|
+
study.projectionxrayradiationdose_set.get().irradeventxraydata_set.count()
|
|
72
|
+
)
|
|
73
|
+
study.save()
|
|
74
|
+
populate_mammo_agd_summary(study)
|
|
75
|
+
elif modality in "CT":
|
|
76
|
+
study.number_of_events = (
|
|
77
|
+
study.ctradiationdose_set.get().ctirradiationeventdata_set.count()
|
|
78
|
+
)
|
|
79
|
+
study.total_dlp = (
|
|
80
|
+
study.ctradiationdose_set.get()
|
|
81
|
+
.ctaccumulateddosedata_set.get()
|
|
82
|
+
.ct_dose_length_product_total
|
|
83
|
+
)
|
|
84
|
+
study.save()
|
|
85
|
+
ct_event_type_count(study)
|
|
86
|
+
except ObjectDoesNotExist:
|
|
87
|
+
logger.warning(
|
|
88
|
+
"{0} {1} with study UID {2}: unable to set summary data.".format(
|
|
89
|
+
study.modality_type, study.pk, study.study_instance_uid
|
|
90
|
+
)
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def populate_summary_ct():
|
|
95
|
+
"""Populate the CT summary fields in GeneralStudyModuleAttr table for existing studies
|
|
96
|
+
|
|
97
|
+
:return:
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
task = SummaryFields.objects.get(modality_type="CT")
|
|
102
|
+
except ObjectDoesNotExist:
|
|
103
|
+
task = SummaryFields.objects.create(modality_type="CT")
|
|
104
|
+
all_ct = GeneralStudyModuleAttr.objects.filter(modality_type="CT").order_by("pk")
|
|
105
|
+
task.total_studies = all_ct.count()
|
|
106
|
+
to_process_ct = all_ct.filter(number_of_const_angle__isnull=True)
|
|
107
|
+
task.current_study = task.total_studies - to_process_ct.count()
|
|
108
|
+
task.save()
|
|
109
|
+
logger.debug("Starting migration of CT to summary fields")
|
|
110
|
+
for study in to_process_ct:
|
|
111
|
+
populate_summary_study_level("CT", study.pk)
|
|
112
|
+
task.current_study += 1
|
|
113
|
+
task.save()
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def populate_summary_mg():
|
|
117
|
+
"""Populate the MG summary fields in GeneralStudyModuleAttr table for existing studies
|
|
118
|
+
|
|
119
|
+
:return:
|
|
120
|
+
"""
|
|
121
|
+
|
|
122
|
+
try:
|
|
123
|
+
task = SummaryFields.objects.get(modality_type="MG")
|
|
124
|
+
except ObjectDoesNotExist:
|
|
125
|
+
task = SummaryFields.objects.create(modality_type="MG")
|
|
126
|
+
all_mg = GeneralStudyModuleAttr.objects.filter(modality_type="MG").order_by("pk")
|
|
127
|
+
task.total_studies = all_mg.count()
|
|
128
|
+
to_process_mg = (
|
|
129
|
+
all_mg.filter(total_agd_right__isnull=True)
|
|
130
|
+
.filter(total_agd_left__isnull=True)
|
|
131
|
+
.filter(total_agd_both__isnull=True)
|
|
132
|
+
)
|
|
133
|
+
task.current_study = task.total_studies - to_process_mg.count()
|
|
134
|
+
task.save()
|
|
135
|
+
logger.debug("Starting migration of MG to summary fields")
|
|
136
|
+
for study in to_process_mg:
|
|
137
|
+
populate_summary_study_level("MG", study.pk)
|
|
138
|
+
task.save()
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def populate_summary_dx():
|
|
142
|
+
"""Populate the DX summary fields in GeneralStudyModuleAttr table for existing studies
|
|
143
|
+
|
|
144
|
+
:return:
|
|
145
|
+
"""
|
|
146
|
+
from django.db.models import Q
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
task = SummaryFields.objects.get(modality_type="DX")
|
|
150
|
+
except ObjectDoesNotExist:
|
|
151
|
+
task = SummaryFields.objects.create(modality_type="DX")
|
|
152
|
+
all_dx = GeneralStudyModuleAttr.objects.filter(
|
|
153
|
+
Q(modality_type__in=["DX", "CR", "PX"])
|
|
154
|
+
).order_by("pk")
|
|
155
|
+
task.total_studies = all_dx.count()
|
|
156
|
+
to_process_dx = all_dx.filter(number_of_events_a__isnull=True)
|
|
157
|
+
task.current_study = task.total_studies - to_process_dx.count()
|
|
158
|
+
task.save()
|
|
159
|
+
logger.debug("Starting migration of DX to summary fields")
|
|
160
|
+
for study in to_process_dx:
|
|
161
|
+
populate_summary_study_level("DX", study.pk)
|
|
162
|
+
task.current_study += 1
|
|
163
|
+
task.save()
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def populate_summary_rf():
|
|
167
|
+
"""Populate the RF summary fields in GeneralStudyModuleAttr table for existing studies
|
|
168
|
+
|
|
169
|
+
:return:
|
|
170
|
+
"""
|
|
171
|
+
|
|
172
|
+
try:
|
|
173
|
+
task = SummaryFields.objects.get(modality_type="RF")
|
|
174
|
+
except ObjectDoesNotExist:
|
|
175
|
+
task = SummaryFields.objects.create(modality_type="RF")
|
|
176
|
+
all_rf = GeneralStudyModuleAttr.objects.filter(modality_type="RF").order_by("pk")
|
|
177
|
+
task.total_studies = all_rf.count()
|
|
178
|
+
to_process_rf = all_rf.filter(number_of_events_a__isnull=True)
|
|
179
|
+
task.current_study = task.total_studies - to_process_rf.count()
|
|
180
|
+
task.save()
|
|
181
|
+
logger.debug("Starting migration of RF to summary fields")
|
|
182
|
+
for study in to_process_rf:
|
|
183
|
+
populate_summary_study_level("RF", study.pk)
|
|
184
|
+
task.current_study += 1
|
|
185
|
+
task.save()
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
# This Python file uses the following encoding: utf-8
|
|
2
|
-
# OpenREM - Radiation Exposure Monitoring tools for the physicist
|
|
3
|
-
# Copyright (C) 2012,2013 The Royal Marsden NHS Foundation Trust
|
|
4
|
-
#
|
|
5
|
-
# This program is free software: you can redistribute it and/or modify
|
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
-
# (at your option) any later version.
|
|
9
|
-
#
|
|
10
|
-
# This program is distributed in the hope that it will be useful,
|
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
-
# GNU General Public License for more details.
|
|
14
|
-
#
|
|
15
|
-
# Additional permission under section 7 of GPLv3:
|
|
16
|
-
# You shall not make any use of the name of The Royal Marsden NHS
|
|
17
|
-
# Foundation trust in connection with this Program in any press or
|
|
18
|
-
# other public announcement without the prior written consent of
|
|
19
|
-
# The Royal Marsden NHS Foundation Trust.
|
|
20
|
-
#
|
|
21
|
-
# You should have received a copy of the GNU General Public License
|
|
22
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
-
|
|
24
|
-
"""
|
|
25
|
-
.. module:: save_skin_map_structure.
|
|
26
|
-
:synopsis: Module to save openskin structure
|
|
27
|
-
|
|
28
|
-
.. moduleauthor:: Ed McDonagh, David Platten, Wens Kong
|
|
29
|
-
|
|
30
|
-
"""
|
|
31
|
-
import gzip
|
|
32
|
-
import os
|
|
33
|
-
import pickle
|
|
34
|
-
|
|
35
|
-
from django.conf import settings
|
|
36
|
-
|
|
37
|
-
from remapp.models import HighDoseMetricAlertSettings
|
|
38
|
-
from .send_high_dose_alert_emails import send_rf_high_dose_alert_email
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def save_openskin_structure(study, return_struct):
|
|
42
|
-
# Save the return_structure as a pickle in a skin_maps sub-folder of the MEDIA_ROOT folder
|
|
43
|
-
if study:
|
|
44
|
-
study_date = study.study_date
|
|
45
|
-
if study_date:
|
|
46
|
-
skin_map_path = os.path.join(
|
|
47
|
-
settings.MEDIA_ROOT,
|
|
48
|
-
"skin_maps",
|
|
49
|
-
f"{study_date.year:0>4}",
|
|
50
|
-
f"{study_date.month:0>2}",
|
|
51
|
-
f"{study_date.day:0>2}",
|
|
52
|
-
)
|
|
53
|
-
else:
|
|
54
|
-
skin_map_path = os.path.join(settings.MEDIA_ROOT, "skin_maps")
|
|
55
|
-
|
|
56
|
-
if not os.path.exists(skin_map_path):
|
|
57
|
-
os.makedirs(skin_map_path)
|
|
58
|
-
|
|
59
|
-
with gzip.open(
|
|
60
|
-
os.path.join(skin_map_path, "skin_map_" + str(study.pk) + ".p"), "wb"
|
|
61
|
-
) as pickle_file:
|
|
62
|
-
pickle.dump(return_struct, pickle_file)
|
|
63
|
-
|
|
64
|
-
# send alert email if option toggled on
|
|
65
|
-
HighDoseMetricAlertSettings.objects.get()
|
|
66
|
-
send_alert_emails_skin = HighDoseMetricAlertSettings.objects.values_list(
|
|
67
|
-
"send_high_dose_metric_alert_emails_skin", flat=True
|
|
68
|
-
)[0]
|
|
69
|
-
send_alert_emails_ref = HighDoseMetricAlertSettings.objects.values_list(
|
|
70
|
-
"send_high_dose_metric_alert_emails_ref", flat=True
|
|
71
|
-
)[0]
|
|
72
|
-
if send_alert_emails_skin or send_alert_emails_ref:
|
|
73
|
-
send_rf_high_dose_alert_email(study.pk)
|
|
1
|
+
# This Python file uses the following encoding: utf-8
|
|
2
|
+
# OpenREM - Radiation Exposure Monitoring tools for the physicist
|
|
3
|
+
# Copyright (C) 2012,2013 The Royal Marsden NHS Foundation Trust
|
|
4
|
+
#
|
|
5
|
+
# This program is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# Additional permission under section 7 of GPLv3:
|
|
16
|
+
# You shall not make any use of the name of The Royal Marsden NHS
|
|
17
|
+
# Foundation trust in connection with this Program in any press or
|
|
18
|
+
# other public announcement without the prior written consent of
|
|
19
|
+
# The Royal Marsden NHS Foundation Trust.
|
|
20
|
+
#
|
|
21
|
+
# You should have received a copy of the GNU General Public License
|
|
22
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
23
|
+
|
|
24
|
+
"""
|
|
25
|
+
.. module:: save_skin_map_structure.
|
|
26
|
+
:synopsis: Module to save openskin structure
|
|
27
|
+
|
|
28
|
+
.. moduleauthor:: Ed McDonagh, David Platten, Wens Kong
|
|
29
|
+
|
|
30
|
+
"""
|
|
31
|
+
import gzip
|
|
32
|
+
import os
|
|
33
|
+
import pickle
|
|
34
|
+
|
|
35
|
+
from django.conf import settings
|
|
36
|
+
|
|
37
|
+
from remapp.models import HighDoseMetricAlertSettings
|
|
38
|
+
from .send_high_dose_alert_emails import send_rf_high_dose_alert_email
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def save_openskin_structure(study, return_struct):
|
|
42
|
+
# Save the return_structure as a pickle in a skin_maps sub-folder of the MEDIA_ROOT folder
|
|
43
|
+
if study:
|
|
44
|
+
study_date = study.study_date
|
|
45
|
+
if study_date:
|
|
46
|
+
skin_map_path = os.path.join(
|
|
47
|
+
settings.MEDIA_ROOT,
|
|
48
|
+
"skin_maps",
|
|
49
|
+
f"{study_date.year:0>4}",
|
|
50
|
+
f"{study_date.month:0>2}",
|
|
51
|
+
f"{study_date.day:0>2}",
|
|
52
|
+
)
|
|
53
|
+
else:
|
|
54
|
+
skin_map_path = os.path.join(settings.MEDIA_ROOT, "skin_maps")
|
|
55
|
+
|
|
56
|
+
if not os.path.exists(skin_map_path):
|
|
57
|
+
os.makedirs(skin_map_path)
|
|
58
|
+
|
|
59
|
+
with gzip.open(
|
|
60
|
+
os.path.join(skin_map_path, "skin_map_" + str(study.pk) + ".p"), "wb"
|
|
61
|
+
) as pickle_file:
|
|
62
|
+
pickle.dump(return_struct, pickle_file)
|
|
63
|
+
|
|
64
|
+
# send alert email if option toggled on
|
|
65
|
+
HighDoseMetricAlertSettings.objects.get()
|
|
66
|
+
send_alert_emails_skin = HighDoseMetricAlertSettings.objects.values_list(
|
|
67
|
+
"send_high_dose_metric_alert_emails_skin", flat=True
|
|
68
|
+
)[0]
|
|
69
|
+
send_alert_emails_ref = HighDoseMetricAlertSettings.objects.values_list(
|
|
70
|
+
"send_high_dose_metric_alert_emails_ref", flat=True
|
|
71
|
+
)[0]
|
|
72
|
+
if send_alert_emails_skin or send_alert_emails_ref:
|
|
73
|
+
send_rf_high_dose_alert_email(study.pk)
|