NIX User пре 3 година
родитељ
комит
1cb816f9f9

+ 584 - 0
pythonScripts/fillClinicalDataInternational.ipynb

@@ -0,0 +1,584 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Using: /home/studen/.labkey/astuden/astuden.crt\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/lib/python3/dist-packages/urllib3/connection.py:391: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "User: andrej studen CSRF: 52cd68383b7a832e93e7d9b5801002e5\n"
+     ]
+    }
+   ],
+   "source": [
+    "import sys\n",
+    "import os\n",
+    "import SimpleITK\n",
+    "import numpy\n",
+    "import matplotlib.pyplot\n",
+    "import chardet\n",
+    "import json\n",
+    "sys.path.append(os.path.join(os.path.expanduser('~'),'software','src','nixSuite','wrapper'))\n",
+    "import nixWrapper\n",
+    "nixWrapper.loadLibrary('labkeyInterface')\n",
+    "import labkeyInterface\n",
+    "net=labkeyInterface.labkeyInterface()\n",
+    "fconfig=os.path.join(os.path.expanduser('~'),'.labkey','network.json')\n",
+    "net.init(fconfig)\n",
+    "print('Using: {}'.format(net.connectionConfig['SSL']['user']))\n",
+    "net.getCSRF()\n",
+    "import labkeyFileBrowser\n",
+    "sys.path.append(os.getcwd())\n",
+    "fb=labkeyFileBrowser.labkeyFileBrowser(net)\n",
+    "project='iPNUMMretro/Study'\n",
+    "import labkeyDatabaseBrowser\n",
+    "db=labkeyDatabaseBrowser.labkeyDB(net)\n",
+    "ds=db.selectRows(project,'study','ClinicalData',[])\n",
+    "patients=[row['PatientId'] for row in ds['rows']]\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 61,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/lib/python3/dist-packages/urllib3/connection.py:391: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "User: andrej studen CSRF: da3766ebe339095e3a6098173e1021be\n",
+      "User: andrej studen CSRF: f6a2f89d2f85bab544539a2a6369623f\n",
+      "User: andrej studen CSRF: 9f326c3dcb4b44d6a7e5ab4f8a7ad8e5\n",
+      "NIX-LJU-D2002-IRAE-A002: Row 1 Could not convert 'Brez simptomov' for field pneumonitisDate, should be of type Timestamp\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/lib/python3/dist-packages/urllib3/connection.py:391: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "User: andrej studen CSRF: 23dc8fd59e280d53b02bbe070154ddfd\n",
+      "User: andrej studen CSRF: a5262b1412a1eee7c4b89b1125cae433\n",
+      "User: andrej studen CSRF: 43860ad987c603df25731d108a6f8001\n",
+      "User: andrej studen CSRF: af866c8085460ff91530b735e3c736dd\n",
+      "User: andrej studen CSRF: 24f34a00e4376366740efe2e187fa4e2\n",
+      "User: andrej studen CSRF: 933ce18a272115a2183d751a91dba4e3\n",
+      "User: andrej studen CSRF: cf62df2f5e93ae8f4585e1180edd81d2\n",
+      "User: andrej studen CSRF: 35fbfe403566416581defd2efb709fba\n",
+      "User: andrej studen CSRF: f73fbbe1e541cd5ede1ff09b7f5807be\n",
+      "User: andrej studen CSRF: 882aac6ea404860faab770ae320df827\n",
+      "User: andrej studen CSRF: bfdb52f52cae66c27d88d93dc2dbe2bf\n",
+      "User: andrej studen CSRF: 3c48c8bec64e886deb27ee07d7f100c7\n",
+      "NIX-LJU-D2002-IRAE-A014: Row 1 Could not convert '2 (bolj gradus 1)' for field colitisGrade, should be of type Integer\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/lib/python3/dist-packages/urllib3/connection.py:391: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "User: andrej studen CSRF: 753d6094324a2cf7b0c2183a58efc7f5\n",
+      "User: andrej studen CSRF: f062199d4b6f0ae27c79ae8419d14d78\n",
+      "User: andrej studen CSRF: 008a3f6d93aa90095b3583f755820351\n",
+      "User: andrej studen CSRF: afdb1f8aaf40d60beaba5b3bdb7a1e5e\n",
+      "User: andrej studen CSRF: eaf924935c314c9e900ee44e4cfbc01f\n",
+      "User: andrej studen CSRF: a4bbb057b0b857b171f1d64df73f4ece\n",
+      "User: andrej studen CSRF: 762f91b1c9d5660a47e9db009c5ef3dd\n",
+      "User: andrej studen CSRF: b4bf09d3c6253cf1778cf469ae44e835\n",
+      "User: andrej studen CSRF: efb18145b40fc1f1bd11eb1453d29eef\n",
+      "User: andrej studen CSRF: 850ae1edf1e364273f7a61a115e3a6b1\n",
+      "User: andrej studen CSRF: b776dca81c5e8a4229c1cfaf9271e14a\n",
+      "User: andrej studen CSRF: 8beff4a7833d3ab9038e39b03e10a6ce\n",
+      "User: andrej studen CSRF: 9ff9519885f76f6915d9882745416f3c\n",
+      "User: andrej studen CSRF: 6d04cf5aa9301790c5f88f358f016954\n",
+      "User: andrej studen CSRF: e6340e8bded2d34150a4c897288477af\n",
+      "User: andrej studen CSRF: 351d0f95a8414060f042fd76a6668417\n"
+     ]
+    }
+   ],
+   "source": [
+    "rows=ds['rows']\n",
+    "for row in rows:\n",
+    "    idFilter={'variable':'PatientId','value':row['PatientId'],'oper':'eq'}\n",
+    "    dsQ=db.selectRows(project,'study','ClinicalDataInternational',[idFilter])\n",
+    "    \n",
+    "    if len(dsQ['rows'])==0:\n",
+    "        fields=['PatientId','SequenceNum']\n",
+    "        qrow={f:row[f] for f in fields}\n",
+    "        mode='insert' \n",
+    "    else:\n",
+    "        qrow=dsQ['rows'][0]\n",
+    "        mode='update'\n",
+    "    \n",
+    "    copyFields=['itStartAge']\n",
+    "    for f in copyFields:\n",
+    "        qrow[f]=row[f]\n",
+    "    \n",
+    "    if row['sex']==0:\n",
+    "        qrow['gender']=1\n",
+    "    if row['sex']==1:\n",
+    "        qrow['gender']=2\n",
+    "    qrow['aeStartDate']=row['aeIdentificationDate']\n",
+    "    \n",
+    "    if row['origoCode']==0:\n",
+    "        qrow['melanomaPrimaryAnatomicSite']=3\n",
+    "    if row['origoCode']==1:\n",
+    "        qrow['melanomaPrimaryAnatomicSite']=1\n",
+    "    if row['origoCode']==2:\n",
+    "        qrow['melanomaPrimaryAnatomicSite']=2\n",
+    "    if row['origoCode']==3:\n",
+    "        qrow['melanomaPrimaryAnatomicSite']=4\n",
+    "    \n",
+    "    qrow['psECOGStartIT']=row['psAtITIntroduction']\n",
+    "    if row['mutations']==0:\n",
+    "        qrow ['actionableMutation']=1\n",
+    "    if row['mutations']==1:\n",
+    "        qrow ['actionableMutation']=2\n",
+    "    if row['mutations']==2:\n",
+    "        qrow ['actionableMutation']=3\n",
+    "    if row['mutations']==3:\n",
+    "        qrow ['actionableMutation']=4\n",
+    "    if row['mutations']==9:\n",
+    "        qrow ['actionableMutation']=5\n",
+    "        \n",
+    "    qrow['itTreatmentSetting']=2\n",
+    "    qrow['itStartDate']=row['itStart']\n",
+    "    qrow['firstITStartDate']=row['itStart']\n",
+    "    \n",
+    "    if row['bora']==0:#CR\n",
+    "        qrow ['bestResponse']=4\n",
+    "    if row['bora']==1:#PR\n",
+    "        qrow ['bestResponse']=2 #radiographic response\n",
+    "    if row['bora']==2:#SD\n",
+    "        qrow ['bestResponse']=3 #mixed radiographic response\n",
+    "    if row['bora']==9:#PD\n",
+    "        qrow ['bestResponse']=1\n",
+    "    \n",
+    "    if row['pneumonitis']==0:\n",
+    "        qrow['pneumonitisGrade']=7\n",
+    "    else:\n",
+    "        qrow['pneumonitisGrade']=row['pneumonitis']\n",
+    "        qrow['pneumonitisDate']=row['aeIdentificationDate']\n",
+    "        \n",
+    "    \n",
+    "    if row['diarrhea']==\"0\":\n",
+    "        qrow['colitisGrade']=7\n",
+    "    else:\n",
+    "        qrow['colitisGrade']=row['diarrhea']\n",
+    "        qrow['colitisDate']=row['aeIdentificationDate']\n",
+    "        \n",
+    "        \n",
+    "    if row['hypotirosis']==0:\n",
+    "        qrow['thyroiditisGrade']=7\n",
+    "    else:\n",
+    "        qrow['thyroiditisGrade']=row['hypotirosis']\n",
+    "        qrow['thyroiditisDate']=row['aeIdentificationDate']\n",
+    "        \n",
+    "    \n",
+    "    if row['sistemicKS']==0:\n",
+    "        qrow['immunosupressionFlag']=2\n",
+    "    if row['sistemicKS']==1:\n",
+    "        qrow['immunosupressionFlag']=1\n",
+    "    \n",
+    "    qrow['firstITInfusionDate']=row['itStart']\n",
+    "    qrow['itLine']=2\n",
+    "    #qrow['durationOfCurrentIT']=\n",
+    "    \n",
+    "    statusResponse=db.modifyRows(mode,project,'study','ClinicalDataInternational',[qrow])\n",
+    "    encoding=chardet.detect(statusResponse)['encoding']\n",
+    "    status=json.loads(statusResponse.decode(encoding))\n",
+    "    try:\n",
+    "        print('{}: {}'.format(row['PatientId'],status['exception']))\n",
+    "    except KeyError:\n",
+    "        pass\n",
+    "    #qrow['itType']=\n",
+    "\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "{}:{} NIX-LJU-D2002-IRAE-A014 True\n",
+      "User: andrej studen CSRF: 14eef5230ef9055ca662e626545b47a3\n"
+     ]
+    }
+   ],
+   "source": [
+    "dset='ClinicalDataInternational'\n",
+    "#dset='Imaging1'\n",
+    "idFilter={'variable':'PatientId','value':'NIX-LJU-D2002-IRAE-A014','oper':'eq'}\n",
+    "ds=db.selectRows(project,'study',dset,[idFilter])\n",
+    "\n",
+    "rows=ds['rows']\n",
+    "for row in rows:\n",
+    "   print('{}:{}',row['PatientId'],row['valid'])\n",
+    "   row['valid']=0\n",
+    "   db.modifyRows('update',project,'study',dset,[row])    \n",
+    "        "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "/usr/lib/python3/dist-packages/urllib3/connection.py:391: SubjectAltNameWarning: Certificate for merlin.fmf.uni-lj.si has no `subjectAltName`, falling back to check for a `commonName` for now. This feature is being removed by major browsers and deprecated by RFC 2818. (See https://github.com/urllib3/urllib3/issues/497 for details.)\n",
+      "  warnings.warn(\n"
+     ]
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A000\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: e6ddccd420b2c45a98f4448be951ccef\n",
+      "DA\n",
+      "NE\n",
+      "N/A\n",
+      "ID: NIX-LJU-D2002-IRAE-A001\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 9e7dbdb1cdac31d0864826f400101393\n",
+      "DA\n",
+      "DA\n",
+      "DA\n",
+      "ID: NIX-LJU-D2002-IRAE-A002\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 1\n",
+      "User: andrej studen CSRF: c0bbc36da5070408e01f64bab3080f1b\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A003\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: e7ca4b3cd6c8d27d543fff197b90a032\n",
+      "DA\n",
+      "DA\n",
+      "DA\n",
+      "ID: NIX-LJU-D2002-IRAE-A004\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 1\n",
+      "User: andrej studen CSRF: fa458a4c0e96331402bdd87f8a7f710a\n",
+      "NE?\n",
+      "?\n",
+      "N/A\n",
+      "ID: NIX-LJU-D2002-IRAE-A005\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 59fb9bedb5feef9f13b413f6c8c5df38\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A006\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 58159ae265b106dd58482a3712cc4d7a\n",
+      "DA\n",
+      "NE\n",
+      "N/A\n",
+      "ID: NIX-LJU-D2002-IRAE-A007\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: d183cf6807cc174b9938c50af7e02cf4\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A008\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: f0c31176678928d65da70372149b6526\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A009\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 88dac5d71b7c07b8d81a24a63ce42988\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A010\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 5681d301d8ae4f91211f0a809d161dc4\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A011\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: d55c8dc31a662a73ecf05f8e5db480d9\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A012\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: dc01e50e6657c46e98953eefca1ebf45\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A013\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: c7436d74e009397cbde3617e504dbbb4\n",
+      "DA\n",
+      "NE\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A014\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 8dad9e03f6e363ca3203d1e6fa331a6a\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A015\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 13d60528591a5ee6bf769e5377a75a40\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A016\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 08f475ab641d385e7d41627fd0009aba\n",
+      "DA\n",
+      "DA\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A017\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: b97cdd281b69c27093080fe96fe5dfb3\n",
+      "DA\n",
+      "NE\n",
+      "N/A\n",
+      "ID: NIX-LJU-D2002-IRAE-A018\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 681751b836021ac4b9823468b0d567b4\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A019\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 46bdbb07c59514955ef84ccd34fc9349\n",
+      "DA\n",
+      "DA\n",
+      "DA\n",
+      "ID: NIX-LJU-D2002-IRAE-A020\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 1\n",
+      "User: andrej studen CSRF: 1bb520ede2c623366a00e51d0c716cbd\n",
+      "DA\n",
+      "DA\n",
+      "DA\n",
+      "ID: NIX-LJU-D2002-IRAE-A021\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 1\n",
+      "User: andrej studen CSRF: b218a6de9bbf877d662dc97a0e8aad7c\n",
+      "NE?\n",
+      "NE\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A021\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 6057ac8cf59a41bb4363ec935884a95b\n",
+      "DA\n",
+      "DA\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A022\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: c388fa864554c83d0fd3774f14a7a76d\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A023\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 0dd3c771579e964cc9f30d36e2c76be9\n",
+      "NE?\n",
+      "?\n",
+      "N/A\n",
+      "ID: NIX-LJU-D2002-IRAE-A024\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 675b2897a02eb1e4aa400d4cfd362605\n",
+      "?\n",
+      "NE\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A025\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: eccd25fec46ab30e9c663469cfdc5dae\n",
+      "DA\n",
+      "DA\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A026\n",
+      "petDetectedAE: 1\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: cc46e5322f1a0118a140756345ca26f8\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A027\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: afdb95dcf8e9a7ebf37890d082bf18d7\n",
+      "DA- hepatalna fleksura?\n",
+      "DA\n",
+      "NE\n",
+      "ID: NIX-LJU-D2002-IRAE-A028\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 1\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 10fc4b1aa9f13aea658b41faede0b857\n",
+      "None\n",
+      "None\n",
+      "None\n",
+      "ID: NIX-LJU-D2002-IRAE-A029\n",
+      "petDetectedAE: 2\n",
+      "earlyPETAEDetection: 2\n",
+      "petRelatedAction: 2\n",
+      "User: andrej studen CSRF: 1b70124a2a0ca3e3f36bd084b4da0033\n"
+     ]
+    }
+   ],
+   "source": [
+    "rows=ds['rows']\n",
+    "for row in rows:\n",
+    "    idFilter={'variable':'PatientId','value':row['PatientId'],'oper':'eq'}\n",
+    "    dsQ=db.selectRows(project,'study','ClinicalDataInternational',[idFilter])\n",
+    "    \n",
+    "    vals={'petDetectedAE':2,'earlyPETAEDetection':2,'petRelatedAction':2}#No\n",
+    "    for v in vals:\n",
+    "        print(row[v])\n",
+    "        if row[v]=='DA':\n",
+    "            vals[v]=1 #Yes\n",
+    "    for qrow in dsQ['rows']:\n",
+    "        print('ID: {}'.format(qrow['PatientId']))\n",
+    "        for v in vals:\n",
+    "            qrow[v]=vals[v]\n",
+    "            print('{}: {}'.format(v,qrow[v]))\n",
+    "    db.modifyRows('update',project,'study','ClinicalDataInternational',[qrow])    \n",
+    "        "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.8.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

Разлика између датотеке није приказан због своје велике величине
+ 22 - 0
pythonScripts/iraemmUploadTestPatients.ipynb


+ 7 - 3
pythonScripts/preprocess.py

@@ -88,17 +88,21 @@ def updateRow(db,project,dataset,row,imageResampledField,gzFileNames,\
  
 
 def main(parameterFile):
-    shome=os.path.expanduser('~nixUser')
     fhome=os.path.expanduser('~')
     with open(os.path.join(fhome,".labkey","setup.json")) as f:
         setup=json.load(f)
 
-    sys.path.insert(0,setup["paths"]["labkeyInterface"])
+    sys.path.insert(0,setup["paths"]["nixWrapper"])
+    import nixWrapper
+
+    nixWrapper.loadLibrary("labkeyInterface")
+
     import labkeyInterface
     import labkeyDatabaseBrowser
     import labkeyFileBrowser
 
-    sys.path.insert(0,setup["paths"]["orthancInterface"])
+    nixWrapper.loadLibrary("orthancInterface")
+    
     import orthancInterface
     import orthancFileBrowser
 

+ 0 - 1
pythonScripts/runPython.sh

@@ -1,4 +1,3 @@
 #!/bin/bash
 
-
 nohup python3 -u $@  0<&- &> $HOME/logs/runPython.log &

+ 5 - 0
pythonScripts/runPythonnnUNet.sh

@@ -0,0 +1,5 @@
+#!/bin/bash
+LOG=$HOME/logs/runPython.log
+rm $LOG;
+. ~/venv/nnUNet/bin/activate
+nohup python -u $@  0<&- &> $LOG &

+ 54 - 115
pythonScripts/runSegmentation.py → pythonScripts/runSegmentationDM.py

@@ -45,11 +45,6 @@ def valueSubstitution(pars,val):
 
     return path
 
-def getCroppedImagePath(tempFile,crop):
-    p=pathlib.Path(tempFile)
-    sfx=''.join(p.suffixes)
-    return re.sub(sfx,crop+sfx,str(p))
-
 def getSuffix(tempFile):
     p=pathlib.Path(tempFile)
     return ''.join(p.suffixes)
@@ -78,28 +73,6 @@ def normalizeCT(ctFile,maskFile):
     im1.SetDirection(im.GetDirection())
     SimpleITK.WriteImage(im1,ctFile)
 
-def cropImage(tempFile,crop, cropData):
-
-    im=SimpleITK.ReadImage(tempFile)
-    sz=im.GetSize()
-    ax=int(cropData['axis'])
-    rng=[float(v) for v in cropData['range']]
-    #update cropData['n']
-    if cropData['n']=="NONE":
-        cropData['n']=sz[ax]
-    if not sz[ax]==cropData['n']:
-        print('Size mismatch {}:{}'.format(sz[ax],cropData['n']))
-    n=sz[ax]
-    ii=[int(x*n) for x in rng]
-    slc=[slice(None) for v in sz]
-    slc[ax]=slice(ii[0],ii[1])
-    im1=im[slc]
-    #im1=im.take(indices=range(i1,i2),axis=cropData['axis'])
-    SimpleITK.WriteImage(im1,getCroppedImagePath(tempFile,crop))
-    print("Written {}".format(getCroppedImagePath(tempFile,crop)))
-
-
-
 def runDeepMedic(setup,pars):
     args=[]
     args.append(os.path.join(setup['paths']['deepMedicVE'],'bin','python'))
@@ -113,121 +86,87 @@ def runDeepMedic(setup,pars):
     print(args) 
     print(subprocess.run(args,check=True,stdout=subprocess.PIPE).stdout)
 
-def getSegmentationFile(pars,crop):
+def runDeepMedicDocker(setup,pars):
+    args=[]
+    args.extend(['docker-compose','-f',pars['deepmedic']['segmentationdmYAML'],'up'])
+    print(args) 
+    print(subprocess.run(args,check=True,stdout=subprocess.PIPE).stdout)
+
+
+def getSegmentationFile(pars):
     #this is how deep medic stores files
     return getSegmImagePath(\
-            getCroppedImagePath(\
             os.path.join(pars['tempBase'],'output','predictions','currentSession','predictions',\
-                pars['images']['images']['segmentations']['tempFile']),crop)
+            pars['images']['segmentations']['tempFile'])
             )
 
-def getWeight(x,w):
-    for r in w:
-        fw=[float(v) for v in r['range']]
-        if x>fw[1]:
-            continue
-        if x<fw[0]:
-            continue
-        n=float(r['n'])
-        if not 'k' in r:
-            return n 
-
-        k=float(r['k'])
-        return k*x+n
-    return 0
-
 def runSegmentation(fb,row,pars,setup):
     
-    if False:
-        images=pars['images']['images']
-        outImg=mergeSegmentations(pars)
-        segFile=os.path.join(pars['tempBase'],images['segmentations']['tempFile'])
-        SimpleITK.WriteImage(outImg,segFile)
-        return segFile
      
     #download to temp file (could be a fixed name)
     project=pars['project']
-    images=pars['images']['images']
+    images=pars['images']
     participantField=pars['participantField']
     baseDir=fb.formatPathURL(project,pars['imageDir']+'/'+\
         getPatientLabel(row,participantField)+'/'+\
         getVisitLabel(row))
-    cropData=pars['images']['crop']
-    #reset n
-    for crop in cropData:
-        cropData[crop]['n']="NONE"
     
     #download 
+    fullFile={key:os.path.join(pars['tempBase'],images[key]['tempFile']) for key in images}
     for im in images:
-        tmpFile=images[im]['tempFile']
         if 'queryField' in images[im]:
-            fb.readFileToFile(baseDir+'/'+row[images[im]['queryField']],tmpFile)
+            fb.readFileToFile(baseDir+'/'+row[images[im]['queryField']],fullFile[im])
+   
     #normalize 
-    normalizeCT(images['CT']['tempFile'],images['patientmask']['tempFile'])
 
-    #crop and store file names
-    for im in images:
-        tmpFile=images[im]['tempFile']
-            
-        with open(images[im]['fileList'],'w') as f:
-            for crop in cropData:
-                print('n={}'.format(cropData[crop]['n']))
-                if os.path.isfile(tmpFile):
-                    cropImage(tmpFile,crop,cropData[crop])
-                print('n={}'.format(cropData[crop]['n']))
-                f.write(getCroppedImagePath(tmpFile,crop)+'\n')
-
-    #normalize crops
-    for crop in cropData:
-        normalizeCT(getCroppedImagePath(images['CT']['tempFile'],crop),
-                getCroppedImagePath(images['patientmask']['tempFile'],crop))
-    
-    #run deep medic
-    runDeepMedic(setup,pars)
+    normalizeCT(fullFile['CT'],fullFile['patientmask'])
+
+    #update templates to know which files to process
 
-    #merge segmentations
-    outImg=mergeSegmentations(pars)
-    segFile=os.path.join(pars['tempBase'],images['segmentations']['tempFile'])
-    SimpleITK.WriteImage(outImg,segFile)
-    return segFile
-        #
 
-def mergeSegmentations(pars):
+    #run deep medic
+    runDeepMedicDocker(setup,pars)
     
-    cropData=pars['images']['crop']
-    start=True
-    for c in cropData:
-        segFile=getSegmentationFile(pars,c)
-        si=SimpleITK.ReadImage(segFile)
-        rng=[float(v) for v in cropData[c]['range']]
-        n=cropData[c]['n']
-        print(n)
-        img=SimpleITK.ConstantPad(si,[0,0,int(rng[0]*n)],[0,0,n-int(rng[1]*n)],-1)
-        print(img.GetSize())
-        ni=SimpleITK.GetArrayFromImage(img)
-        print(ni.shape)
-        w1=numpy.zeros(ni.shape)
-        aw=[getWeight((x+0.5)/n,cropData[c]['w']) for x in numpy.arange(n)]
-        for k in numpy.arange(len(aw)):
-            w1[k,:,:]=aw[k]
-        if start:
-            w0=w1
-            imgTmpl=img
-            nout=ni
-            start=False
-            continue
-        nout[w1>w0]=ni[w1>w0]
-        w0[w1>w0]=w1[w1>w0]
-    iout=SimpleITK.GetImageFromArray(nout)
-    iout.SetDirection(img.GetDirection())
-    iout.SetOrigin(img.GetOrigin())
-    iout.SetSpacing(img.GetSpacing())
-    return iout
+    #processed file is
+    segFile=getSegmentationFile(pars)
+    #SimpleITK.WriteImage(outImg,segFile)
+    return segFile
 
         
 def main(parameterFile):
     
     fhome=os.path.expanduser('~')
+
+
+    with open(os.path.join(fhome,".labkey","setup.json")) as f:
+        setup=json.load(f)
+
+    sys.path.insert(0,setup["paths"]["labkeyInterface"])
+    import labkeyInterface
+    import labkeyDatabaseBrowser
+    import labkeyFileBrowser
+
+    sys.path.append(setup['paths']['parseConfig'])
+    import parseConfig
+
+    with open(parameterFile) as f:
+        pars=json.load(f)
+    
+    pars=parseConfig.convert(pars)
+    pars=parseConfig.convertValues(pars)
+    print(pars)
+    #images=pars['images']
+    #ctFile=os.path.join(pars['tempBase'],images['CT']['tempFile'])
+    #maskFile=os.path.join(pars['tempBase'],images['patientmask']['tempFile'])
+    #normalizeCT(ctFile,maskFile)
+
+
+    
+
+def doSegmentation(parameterFile):
+    fhome=os.path.expanduser('~')
+
+
     with open(os.path.join(fhome,".labkey","setup.json")) as f:
         setup=json.load(f)
 
@@ -301,7 +240,7 @@ def main(parameterFile):
             #copy file to file
             #normally I would update the targetQuery, but it contains previously set images
             #copy to labkey
-            fb.writeFileToFile(segFile,outFile)
+            #fb.writeFileToFile(segFile,outFile)
 
         
 

+ 259 - 0
pythonScripts/runSegmentationnnUNet.py

@@ -0,0 +1,259 @@
+import os
+import json
+import re
+import subprocess
+import nibabel
+import shutil
+import sys
+import pathlib
+import SimpleITK
+import numpy
+
+#nothing gets done if you do import
+
+def getPatientLabel(row,participantField='PatientId'):
+    return row[participantField].replace('/','_') 
+
+def getVisitLabel(row):
+    return 'VISIT_'+str(int(row['SequenceNum']))
+
+def getStudyLabel(row,participantField='PatientId'):
+    return getPatientLabel(row,participantField)+'-'+getVisitLabel(row)
+
+
+def updateRow(project,dataset,row,imageResampledField,gzFileNames,\
+        participantField='PatientId'):
+    row['patientCode']=getPatientLabel(row,participantField)
+    row['visitCode']=getVisitLabel(row)
+    for im in imageResampledField:
+        row[imageResampledField[im]]=gzFileNames[im]
+    db.modifyRows('update',project,'study',dataset,[row])
+ 
+def replacePatterns(infile,outfile,replacePatterns):
+    of=open(outfile,'w')
+    with open(infile,'r') as f:
+        data=f.read()
+        for p in replacePatterns:
+            val=replacePatterns[p]
+            data=re.sub(p,val,data)
+    of.write(data)
+    of.close()
+    
+def valueSubstitution(pars,val):
+    if val.find('__home__')>-1:
+        val=re.sub(r'__home__',os.path.expanduser('~'),val)
+
+    return path
+
+def getSuffix(tempFile):
+    p=pathlib.Path(tempFile)
+    return ''.join(p.suffixes)
+
+def getSegmImagePath(tempFile):
+    sfx=getSuffix(tempFile)
+    return re.sub(sfx,'_Segm'+sfx,tempFile)
+
+def addVersion(tempFile,version):
+    sfx=getSuffix(tempFile)
+    return re.sub(sfx,'_'+version+sfx,tempFile)
+
+def addnnUNetCode(tempFile,fileNumber=0):
+    sfx=getSuffix(tempFile)
+    return re.sub(sfx,'_'+'{:04d}'.format(fileNumber)+sfx,tempFile)
+
+def runnnUNet(setup,pars):
+    args=[]
+    #set the environment
+    args.append(setup['paths']['nnUNetRunInference'])
+    #location of input images
+    args.extend(['-i',os.path.join(pars['tempBase'],'CT')])
+    #output path is segmentations
+    args.extend(['-o',os.path.join(pars['tempBase'],'segmentations')])
+    #modelid, nnUNet internal rules.
+    args.extend(['-t',pars['nnUNet']['ModelId']])
+    #specify configuration (3d_fullres)
+    args.extend(['-m',pars['nnUNet']['configuration']])
+    print(args) 
+    my_env = os.environ
+    for key in pars['nnUNet']['env']:
+        my_env[key]=pars['nnUNet']['env'][key]
+      
+    print(subprocess.run(args,env=my_env,check=True,stdout=subprocess.PIPE).stdout)
+
+def getSegmentationFile(pars):
+    #this is how deep medic stores files
+    return os.path.join(pars['tempBase'],'segmentations',\
+            pars['images']['CT']['tempFile'])
+            
+
+def runSegmentation(fb,row,pars,setup):
+    
+     
+    #download to temp file (could be a fixed name)
+    project=pars['project']
+    images=pars['images']
+    participantField=pars['participantField']
+    baseDir=fb.formatPathURL(project,pars['imageDir']+'/'+\
+        getPatientLabel(row,participantField)+'/'+\
+        getVisitLabel(row))
+    
+    #download CT
+    ctDir=os.path.join(pars['tempBase'],'CT')
+    if not os.path.isdir(ctDir):
+        os.mkdir(ctDir)
+    fullFile=os.path.join(ctDir,images['CT']['tempFile']) 
+
+    fullFile=addnnUNetCode(fullFile)
+    fb.readFileToFile(baseDir+'/'+row[images['CT']['queryField']],fullFile)
+    
+    #debug
+
+    #run deep medic
+    runnnUNet(setup,pars)
+
+    #processed file is
+    segFile=getSegmentationFile(pars)
+    #SimpleITK.WriteImage(outImg,segFile)
+    return segFile
+
+        
+def test(parameterFile):
+    
+    fhome=os.path.expanduser('~')
+
+    
+    with open(os.path.join(fhome,".labkey","setup.json")) as f:
+        setup=json.load(f)
+
+    sys.path.insert(0,setup["paths"]["nixWrapper"])
+    
+    import nixWrapper
+    
+    nixWrapper.loadLibrary("labkeyInterface")#force reload
+    import labkeyInterface
+    import labkeyDatabaseBrowser
+    import labkeyFileBrowser
+
+    nixWrapper.loadLibrary("parseConfig")
+    import parseConfig
+
+    with open(parameterFile) as f:
+        pars=json.load(f)
+    
+    pars=parseConfig.convert(pars)
+    pars=parseConfig.convertValues(pars)
+    #print(pars)
+
+
+    
+
+def doSegmentation(parameterFile):
+    fhome=os.path.expanduser('~')
+
+    
+    with open(os.path.join(fhome,".labkey","setup.json")) as f:
+        setup=json.load(f)
+
+    sys.path.insert(0,setup["paths"]["nixWrapper"])
+    
+    import nixWrapper
+    
+    nixWrapper.loadLibrary("labkeyInterface")#force reload
+    import labkeyInterface
+    import labkeyDatabaseBrowser
+    import labkeyFileBrowser
+
+    nixWrapper.loadLibrary("parseConfig")
+    import parseConfig
+
+    with open(parameterFile) as f:
+        pars=json.load(f)
+    
+    pars=parseConfig.convert(pars)
+    pars=parseConfig.convertValues(pars)
+    
+    project=pars['project']
+    dataset=pars['targetQuery']
+    schema=pars['targetSchema']
+    view=pars['viewName']
+
+
+    tempBase=pars['tempBase']
+    if not os.path.isdir(tempBase):
+        os.makedirs(tempBase)
+
+    #start the database interface
+    fconfig=os.path.join(fhome,'.labkey','network.json')
+    net=labkeyInterface.labkeyInterface()
+    net.init(fconfig)
+    db=labkeyDatabaseBrowser.labkeyDB(net)
+    fb=labkeyFileBrowser.labkeyFileBrowser(net)
+
+
+    #all images from database
+    ds=db.selectRows(project,schema,dataset,[],view)
+    
+    #input
+    #use webdav to transfer file (even though it is localhost)
+
+ 
+    i=0
+    rows=[ds['rows'][0]]
+    rows=ds['rows']
+    for row in rows:
+       
+
+        #check if file is already there
+        #dummy tf to get the suffix
+        sfx=pars['images']['segmentation']['suffix']
+        outpath=fb.buildPathURL(pars['project'],[pars['imageDir'],row['patientCode'],row['visitCode']])
+        outName=addVersion(\
+                getSegmImagePath(\
+                    getStudyLabel(row,pars['participantField'])+sfx),\
+                pars['version'])
+
+        outFile=outpath+'/'+outName
+
+        #check if file is there
+        if not fb.entryExists(outFile):
+
+            
+            segFile=getSegmentationFile(pars)
+            #remove existing file
+            if os.path.isfile(segFile):
+                os.remove(segFile)
+            
+            segFile=runSegmentation(fb,row,pars,setup)
+            #copy file to file
+            #normally I would update the targetQuery, but it contains previously set images
+            #copy to labkey
+            fb.writeFileToFile(segFile,outFile)
+            print(segFile)
+        #debug 
+
+        #update database
+        copyFields=[pars['participantField'],'SequenceNum','patientCode','visitCode']
+        row['SequenceNum']+=0.001*float(pars['versionNumber'])
+        filters=[{'variable':v,'value':str(row[v]),'oper':'eq'} for v in copyFields]
+        filters.append({'variable':'Version','value':pars['version'],'oper':'eq'})
+
+        ds1=db.selectRows(pars['project'],pars['segmentationSchema'],pars['segmentationQuery'],filters)
+
+        if len(ds1['rows'])>0:
+            mode='update'
+            outRow=ds1['rows'][0]
+        else:
+            mode='insert'
+            outRow={v:row[v] for v in copyFields}
+        outRow['Version']= pars['version']
+        outRow['Segmentation']= outName
+        print(db.modifyRows(mode,pars['project'],pars['segmentationSchema'],pars['segmentationQuery'],[outRow]))
+        #pull results back to LabKey
+    print("Done")
+
+
+if __name__ == '__main__':
+    #test(sys.argv[1])
+    doSegmentation(sys.argv[1])
+    #sys.exit()
+

+ 41 - 0
pythonScripts/test.py

@@ -0,0 +1,41 @@
+import sys
+import os
+import json
+
+def main(parameterFile):
+    fhome=os.path.expanduser('~')
+    fsetup=os.path.join(fhome,'.labkey','setup.json')
+    with open(fsetup) as f:
+        setup=json.load(f)
+
+    sys.path.append(setup['paths']['labkeyInterface'])
+    import labkeyInterface
+    import labkeyDatabaseBrowser
+
+    net=labkeyInterface.labkeyInterface()
+    fconfig=os.path.join(fhome,'.labkey','network.json')
+    net.init(fconfig)
+
+    with open(parameterFile) as f:
+        pars=json.load(f)
+    
+    id=net.getUserId()  
+    print('User id: {}'.format(id))
+    db=labkeyDatabaseBrowser.labkeyDB(net)
+
+    fv={'PatientId':'NIX-LJU-D2002-IRAE-A011',
+            'visitCode':'VISIT_0',
+            'ModifiedBy':str(id)}
+
+    fv={'ModifiedBy':str(id)}
+    filters=[{'variable':v,'value':fv[v],'oper':'eq'} for v in fv]
+    ds=db.selectRows(pars['project'],pars['schemaName'],pars['queryName'],filters)
+    
+    for r in ds['rows']:
+        print(r)
+    print('here')
+    return 0
+
+
+if __name__=="__main__":
+    main(sys.argv[1])

BIN
segmentation/saved_models/DM_defaults.DM_train_VISCERAL16_Fold1.final.2019-10-01.07.46.19.932616.model.ckpt.data-00000-of-00001


BIN
segmentation/saved_models/DM_defaults.DM_train_VISCERAL16_Fold1.final.2019-10-01.07.46.19.932616.model.ckpt.index


BIN
segmentation/saved_models/DM_defaults.DM_train_qtii_LABELMASKS4.final.2020-10-31.05.59.36.425298.model.ckpt.data-00000-of-00001


BIN
segmentation/saved_models/DM_defaults.DM_train_qtii_LABELMASKS4.final.2020-10-31.05.59.36.425298.model.ckpt.index


+ 0 - 6
segmentation/saved_models/INFO_ABOUT_MODELS.txt

@@ -1,6 +0,0 @@
-Retrained on more patients, improved thyroid performance, only for 4 organs, labels are changed to 1-4!
-DM_defaults.DM_train_qtii_LABELMASKS4.final.2020-10-31.05.59.36.425298.model.ckpt
-
-Old model on which all results are obtained, labels 1-16, poor thyroid performance.
-DM_defaults.DM_train_VISCERAL16_Fold1.final.2019-10-01.07.46.19.932616.model.ckpt
-

+ 1 - 1
segmentation/test/testConfig.cfg.template

@@ -9,7 +9,7 @@ sessionName = "currentSession"
 folderForOutput = "__workDir__/output"
 
 #  [Optional] Path to a saved model, to load parameters from in the beginning of the session. If one is also specified using the command line, the latter will be used.
-cnnModelFilePath = "/home/nixUser/software/src/irAEMM/segmentation/saved_models/__model__"
+cnnModelFilePath = "/home/nixUser/software/src/irAEMMSegmentationModels/deepmedic/__model__"
 
 #  +++++++++++ Input +++++++++++
 #  [Required] A list that should contain as many entries as the channels of the input image (eg multi-modal MRI). The entries should be paths to files. Those files should be listing the paths to the corresponding channels for each test-case. (see example files).

+ 3 - 3
slicerModules/iraemmBrowser.py

@@ -83,7 +83,7 @@ class iraemmBrowserWidget(ScriptedLoadableModuleWidget):
 
     
 
-    ds=self.db.selectRows(self.project,self.schema,self.dataset,[])
+    ds=self.db.selectRows(self.project,self.schema,self.dataset,[],"segmentationReview")
     ids=[row['PatientId'] for row in ds['rows']]
     ids=list(set(ids))
 
@@ -225,7 +225,7 @@ class iraemmBrowserWidget(ScriptedLoadableModuleWidget):
 
   def onPatientListChanged(self,i):
       idFilter={'variable':'PatientId','value':self.patientList.currentText,'oper':'eq'}
-      ds=self.db.selectRows(self.project,self.schema,self.dataset, [idFilter])
+      ds=self.db.selectRows(self.project,self.schema,self.dataset, [idFilter],"segmentationReview")
       seq=[int(row['SequenceNum']) for row in ds['rows']]
       self.visitList.clear()  
             
@@ -242,7 +242,7 @@ class iraemmBrowserWidget(ScriptedLoadableModuleWidget):
       idFilter={'variable':'PatientId',\
               'value':self.patientList.currentText,'oper':'eq'}
       sFilter={'variable':'SequenceNum','value':s,'oper':'eq'}
-      ds=self.db.selectRows(self.project,self.schema,self.dataset,[idFilter,sFilter])
+      ds=self.db.selectRows(self.project,self.schema,self.dataset,[idFilter,sFilter],"segmentationReview")
       if not len(ds['rows'])==1:
           print("Found incorrect number {} of matches for [{}]/[{}]".\
                   format(len(ds['rows']),\

+ 2 - 2
templates/segmentation.json.sample

@@ -1,8 +1,8 @@
 {
  "setVariables":["__tempBase__","__segBase__","__roiFile__","__petFile__","__ctFile__","__segFile__","__modelName__"],
  "setVariablesComment":"this variables will get updated with local values like home and can be used to set variables further on",
- "__tempBase__":"__home__/temp/segmentation",
- "__segBase__":"/home/nixUser/software/src/irAEMM/segmentation",
+ "__tempBase__":"__home__/temp/segmentationdm",
+ "__segBase__":"/home/studen/software/src/irAEMM/segmentation",
  "__roiFile__":"testMask.nii.gz",
  "__ctFile__":"testCT.nii.gz",
  "__petFile__":"testPET.nii.gz",

+ 84 - 0
templates/segmentationIRAEMM.json

@@ -0,0 +1,84 @@
+{
+ "setVariables":["__tempBase__","__segBase__","__roiFile__","__petFile__","__ctFile__","__segFile__","__modelName__"],
+ "setVariablesComment":"this variables will get updated with local values like home and can be used to set variables further on",
+ "__tempBase__":"__home__/temp/segmentationdm",
+ "__segBase__":"/home/studen/software/src/iraemm/segmentation",
+ "__roiFile__":"testMask.nii.gz",
+ "__ctFile__":"testCT.nii.gz",
+ "__petFile__":"testPET.nii.gz",
+ "__segFile__":"segmentation.nii.gz",
+ "__modelName__":"DM_defaults.DM_train_VISCERAL16_Fold1.final.2019-10-01.07.46.19.932616.model.ckpt",
+ "tempBase":"__tempBase__",
+ "model":"__model__",
+ "project":"/iPNUMMretro/Study",
+ "targetSchema":"study",
+ "targetQuery":"Imaging1",
+ "viewName":"segmentationReview",
+ "participantField":"PatientId",
+ "segmentationSchema":"study",
+ "segmentationQuery":"Segmentations",
+ "imageDir":"preprocessedImages",
+ "version":"v5",
+ "versionNumber":"5",
+ "images":{
+	"CT":{
+		"queryField":"ctResampled",
+		"tempFile":"__ctFile__"},
+	"PET":{
+		"queryField":"petResampled",
+		"tempFile":"__petFile__"},
+	"patientmask":{
+		"queryField":"ROImask",
+		"tempFile":"__roiFile__"},
+	"segmentation":{
+		"suffix":".nii.gz"
+	}
+ },
+ "replacePattern":{
+	 "__workDir__":"__tempBase__",
+	 "__roi__":"__tempBase__/__roiFile__",
+	 "__pet__":"__tempBase__/__petFile__",
+	 "__ct__":"__tempBase__/__ctFile__",
+	 "__seg__":"__tempBase__/__segFile__",
+	 "__model__":"__modelName__"
+ },
+ "nnUNet":{
+	 "ModelId":"501",
+	 "configuration":"3d_fullres",
+	 "env":{
+		"nnUNet_raw_data_base":"__tempBase__",
+		"nnUNet_preprocessed":"__tempBase__",
+		"RESULTS_FOLDER":"/home/studen/software/src/iraemmsegmentationmodels"
+	 }
+ },
+ "deepmedic": {
+	 "config":{
+		 "model":{
+		 	"template":"__segBase__/model/modelConfig.cfg.template",
+		 	"out":"__tempBase__/modelConfig.cfg"
+	 	},
+	 	"test":{
+			"template":"__segBase__/test/testConfig.cfg.template",
+		 	"out":"__tempBase__/testConfig.cfg"
+	 	},
+		"predictions":{
+			"template":"__segBase__/test/testNamesOfPredictions.cfg.template",
+			"out":"__tempBase__/testNamesOfPredictions.cfg"
+		},
+		"CT":{
+			"template":"__segBase__/test/testChannels_CT.cfg.template",
+			"out":"__tempBase__/testChannels_CT.cfg"
+		},
+		"ROI":{
+			"template":"__segBase__/test/testRoiMasks.cfg.template",
+			"out":"__tempBase__/testRoiMasks.cfg"
+		}
+
+
+
+	 }
+ }
+
+
+
+}

+ 84 - 0
templates/segmentationTCIA.json

@@ -0,0 +1,84 @@
+{
+ "setVariables":["__tempBase__","__segBase__","__roiFile__","__petFile__","__ctFile__","__segFile__","__modelName__"],
+ "setVariablesComment":"this variables will get updated with local values like home and can be used to set variables further on",
+ "__tempBase__":"__home__/temp/segmentationdm",
+ "__segBase__":"/home/studen/software/src/iraemm/segmentation",
+ "__roiFile__":"testMask.nii.gz",
+ "__ctFile__":"testCT.nii.gz",
+ "__petFile__":"testPET.nii.gz",
+ "__segFile__":"segmentation.nii.gz",
+ "__modelName__":"DM_defaults.DM_train_VISCERAL16_Fold1.final.2019-10-01.07.46.19.932616.model.ckpt",
+ "tempBase":"__tempBase__",
+ "model":"__model__",
+ "project":"/Test/segmentationTest",
+ "targetSchema":"study",
+ "targetQuery":"Imaging1",
+ "viewName":"segmentationReview",
+ "participantField":"ParticipantId",
+ "segmentationSchema":"study",
+ "segmentationQuery":"Segmentations",
+ "imageDir":"preprocessedImages",
+ "version":"v5",
+ "versionNumber":"5",
+ "images":{
+	"CT":{
+		"queryField":"ctResampled",
+		"tempFile":"__ctFile__"},
+	"PET":{
+		"queryField":"petResampled",
+		"tempFile":"__petFile__"},
+	"patientmask":{
+		"queryField":"ROImask",
+		"tempFile":"__roiFile__"},
+	"segmentation":{
+		"suffix":".nii.gz"
+	}
+ },
+ "replacePattern":{
+	 "__workDir__":"__tempBase__",
+	 "__roi__":"__tempBase__/__roiFile__",
+	 "__pet__":"__tempBase__/__petFile__",
+	 "__ct__":"__tempBase__/__ctFile__",
+	 "__seg__":"__tempBase__/__segFile__",
+	 "__model__":"__modelName__"
+ },
+ "nnUNet":{
+	 "ModelId":"501",
+	 "configuration":"3d_fullres",
+	 "env":{
+		"nnUNet_raw_data_base":"__tempBase__",
+		"nnUNet_preprocessed":"__tempBase__",
+		"RESULTS_FOLDER":"/home/studen/software/src/iraemmsegmentationmodels"
+	 }
+ },
+ "deepmedic": {
+	 "config":{
+		 "model":{
+		 	"template":"__segBase__/model/modelConfig.cfg.template",
+		 	"out":"__tempBase__/modelConfig.cfg"
+	 	},
+	 	"test":{
+			"template":"__segBase__/test/testConfig.cfg.template",
+		 	"out":"__tempBase__/testConfig.cfg"
+	 	},
+		"predictions":{
+			"template":"__segBase__/test/testNamesOfPredictions.cfg.template",
+			"out":"__tempBase__/testNamesOfPredictions.cfg"
+		},
+		"CT":{
+			"template":"__segBase__/test/testChannels_CT.cfg.template",
+			"out":"__tempBase__/testChannels_CT.cfg"
+		},
+		"ROI":{
+			"template":"__segBase__/test/testRoiMasks.cfg.template",
+			"out":"__tempBase__/testRoiMasks.cfg"
+		}
+
+
+
+	 }
+ }
+
+
+
+}

Неке датотеке нису приказане због велике количине промена