{ "cells": [ { "cell_type": "code", "execution_count": 73, "id": "7e76ae72-eb3f-4b8f-891e-5dd5d8fa1304", "metadata": {}, "outputs": [], "source": [ "import getData\n", "import loadData\n", "import fitData\n", "import fitModel\n", "import plotData\n", "import config\n", "import segmentation\n", "import geometry\n", "import workflow\n", "import matplotlib.pyplot\n", "import importlib\n", "import time\n", "import numpy\n", "import os\n", "import traceback\n", "import SimpleITK\n", "import functools\n", "import scipy.optimize\n", "import scipy.linalg\n", "import sklearn.cluster\n", "import sklearn.metrics\n", "import sklearn.mixture\n", "importlib.reload(loadData)\n", "importlib.reload(fitData)\n", "importlib.reload(fitModel)\n", "importlib.reload(plotData)\n", "importlib.reload(config)\n", "importlib.reload(segmentation)\n", "importlib.reload(geometry)\n", "importlib.reload(workflow)\n", "import datetime\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "b899273f-c9a0-4db5-bce4-e3be4c12659d", "metadata": {}, "outputs": [], "source": [ "def loadImageData(setup):\n", " \n", " #loadData.saveCenters(r,setup)\n", " #img=SimpleITK.ReadImage(os.path.join(config.getLocalDir(r,setup),config.getCenterWeight(r,setup,30,0,4)))\n", " #data=SimpleITK.GetArrayFromImage(img)\n", " #matplotlib.pyplot.imshow(data[17,:,:])\n", " #db,fb=getData.connectDB(setup['network'])\n", " fb,r=getRow(setup,True)\n", " getData.downloadFiles(fb,r,setup)\n", " return r\n", "\n", "def getRow(setup,returnFB=False):\n", " qFilter=config.getFilter(setup)\n", " db,fb=getData.connectDB(setup['network'])\n", " rows=getData.getPatients(db,setup,qFilter)\n", " #print(rows)\n", " if returnFB:\n", " return fb,db,rows[0]\n", " return rows[0]\n", "\n", "def getRows(setup,returnFB=False):\n", " qFilter=config.getFilter(setup)\n", " db,fb=getData.connectDB(setup['network'])\n", " rows=getData.getPatients(db,setup,qFilter)\n", " #print(rows)\n", " if returnFB:\n", " return fb,db,rows\n", " return rows\n", "\n", "\n", "def saveCenters(setup, r=None):\n", " if not r:\n", " r=getRow(setup)\n", " nr=setup['nr']\n", " for ir in range(nr):\n", " loadData.saveCenters(r,setup,ir=ir)\n", " \n", "def fitIVF(setup,r=None):\n", " if not r:\n", " r=getRow(setup)\n", " nr=setup['nr']\n", " for ir in range(nr):\n", " centers=loadData.loadCenters(r,setup,ir)\n", " loadData.saveIVF(r,setup,ir=ir,nfit=30,nbatch=60)\n", " \n", "def checkFitIVF(setup,r=None,ir=0):\n", " if not r:\n", " r=getRow(setup)\n", " fit=loadData.readIVF(r,setup,ir=ir)\n", " print(fit.mu)\n", " print(fit.cov)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " t,dt=loadData.loadTime(r,setup)\n", " qf=centers[fit.m]\n", " t1=numpy.linspace(0,numpy.max(t),300)\n", " fv=fitData.fIVF(t1,fit.mu)\n", " \n", " fun=functools.partial(fitData.fDiff,fitData.fIVF,t,qf,numpy.ones(t.shape))\n", " df=fun(fit.mu)\n", " \n", " \n", " \n", " matplotlib.pyplot.plot(t,qf)\n", " matplotlib.pyplot.plot(t1,fv)\n", " matplotlib.pyplot.plot(t,df)\n", " \n", " \n", "def fitCompartments(setup,m,r=None, ir=0,useJac=True):\n", " if not r:\n", " r=getRow(setup)\n", " \n", " #par=fit.mu\n", " #n=10\n", " #samples=fitData.generateGauss(fit,n)\n", " #c1=numpy.cov(samples)\n", " #print(fit.cov)\n", " #print(c1)\n", " \n", " cPar=numpy.ones(4)\n", " cPar[0]=0.1/60\n", " cPar[1]=0.00005\n", " cPar[2]=0.03/60\n", " cPar[3]=17\n", " #fv=fitData.fCompartment(ivfPar,t,cPar)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " t,dt=loadData.loadTime(r,setup)\n", " #ivf=centers[fit.m]\n", " qf=centers[m]\n", " #xs=numpy.zeros((4,n))\n", " #for i in range(n):\n", " #ivfPar=samples[:,i]\n", " \n", " fitC=fitData.fitCompartment(fit,t,qf,nfit=10,nbatch=30,useJac=useJac)\n", " cPar=fitC.mu\n", " \n", " print(cPar)\n", " try:\n", " print(fitC.cov)\n", " except NameError:\n", " pass\n", " #fun=functools.partial(fitData.fDiff,fitData.fIVF,t,ivf,numpy.ones(t.shape))\n", " \n", " fc1=functools.partial(fitData.fCompartment,fit.mu)\n", " fun=functools.partial(fitData.fDiff,fc1,t,qf,numpy.ones(t.shape))\n", " \n", " #result=scipy.optimize.least_squares(fun,par)\n", " #print(result.x)\n", " t1=numpy.linspace(0,numpy.max(t),300)\n", " fv=fitData.fCompartment(fit.mu,t1,cPar)\n", " #fv=fitData.fIVF(t1,par)\n", " df=fun(cPar)\n", " matplotlib.pyplot.plot(t,qf)\n", " matplotlib.pyplot.plot(t1,fv)\n", " matplotlib.pyplot.plot(t,df)\n", " \n", " \n", "#SimpleITK.ReadImage(os.path.join(config.GetLocalDir(r,setup)" ] }, { "cell_type": "code", "execution_count": 6, "id": "d986dc32-5d88-4083-82d3-ff0d8c2c233c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loadLibrary\n", "remoteSourcesURL https://git0.fmf.uni-lj.si/studen/nixSuite/raw/master/remoteResources/resources.json\n", "{'labkeyInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'irAEMM': {'url': 'https://git0.fmf.uni-lj.si/studen/iraemm/archive/master.zip', 'branch': 'master', 'modules': ['iraemmBrowser']}, 'SlicerLabkeyExtension': {'url': 'https://git0.fmf.uni-lj.si/studen/SlicerLabkeyExtension/archive/SlicerExtensionIndex.zip', 'branch': 'SlicerExtensionIndex', 'modules': ['labkeyBrowser']}, 'limfomiPET': {'url': 'https://git0.fmf.uni-lj.si/studen/limfomiPET/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser', 'segmentationBrowser']}, 'parseConfig': {'url': 'https://git0.fmf.uni-lj.si/studen/parseConfig/archive/master.zip', 'branch': 'master', 'modules': []}, 'orthancInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/orthancInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'dynamicSPECT': {'url': 'https://git0.fmf.uni-lj.si/studen/dynamicSPECT/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser']}}\n", "{'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}\n", "File /home/studen/temp/labkeyInterface.zip: True\n", "User: andrej studen CSRF: de7353d7d64353ad57a98110fec08b80\n", "53\n" ] } ], "source": [ "setup={'tempDir':'temp/dynamicSPECT',\n", " 'ParticipantField':'PatientId',\n", " 'visitField':'visitCode',\n", " 'nclass':[30],\n", " 'nr':1,\n", " 'PatientId':'NONE',\n", " 'visitCode':'NONE',\n", " 'project':'dynamicSPECT/cardiacSPECT',\n", " 'schemaName':'study',\n", " 'queryName':'Imaging1',\n", " 'baseDir':'processedImages',\n", " 'network':'labkey-ukc.json'}\n", "\n", "rows=getRows(setup,False)\n", "print(len(rows))\n", "#r1=getRow(setup)\n", "#loadData(setup)\n", "#fitIVF(setup)\n", "#fitIVF(setup,r)\n", "#checkFitIVF(setup,r)\n", "#checkFitIVF(setup,r1)\n", "#fitCompartments(setup,3,r,0,True)" ] }, { "cell_type": "code", "execution_count": null, "id": "6c908f66-a08f-438d-b0c2-3513471a0158", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loadLibrary\n", "remoteSourcesURL https://git0.fmf.uni-lj.si/studen/nixSuite/raw/master/remoteResources/resources.json\n", "{'labkeyInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'irAEMM': {'url': 'https://git0.fmf.uni-lj.si/studen/iraemm/archive/master.zip', 'branch': 'master', 'modules': ['iraemmBrowser']}, 'SlicerLabkeyExtension': {'url': 'https://git0.fmf.uni-lj.si/studen/SlicerLabkeyExtension/archive/SlicerExtensionIndex.zip', 'branch': 'SlicerExtensionIndex', 'modules': ['labkeyBrowser']}, 'limfomiPET': {'url': 'https://git0.fmf.uni-lj.si/studen/limfomiPET/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser', 'segmentationBrowser']}, 'parseConfig': {'url': 'https://git0.fmf.uni-lj.si/studen/parseConfig/archive/master.zip', 'branch': 'master', 'modules': []}, 'orthancInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/orthancInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'dynamicSPECT': {'url': 'https://git0.fmf.uni-lj.si/studen/dynamicSPECT/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser']}}\n", "{'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}\n", "File /home/studen/temp/labkeyInterface.zip: True\n", "User: andrej studen CSRF: 2a1c00884b619935390e8ee1c286c7e9\n", "[True] MB1965_MIR_30_0_center0_center.txt\n", "[True] MB1965_MIR_30_0_center1_center.txt\n", "[True] MB1965_MIR_30_0_center2_center.txt\n", "[True] MB1965_MIR_30_0_center3_center.txt\n", "[True] MB1965_MIR_30_0_center4_center.txt\n", "[True] MB1965_MIR_30_0_center5_center.txt\n", "[True] MB1965_MIR_30_0_center6_center.txt\n", "[True] MB1965_MIR_30_0_center7_center.txt\n", "[True] MB1965_MIR_30_0_center8_center.txt\n", "[True] MB1965_MIR_30_0_center9_center.txt\n", "[True] MB1965_MIR_30_0_center10_center.txt\n", "[True] MB1965_MIR_30_0_center11_center.txt\n", "[True] MB1965_MIR_30_0_center12_center.txt\n", "[True] MB1965_MIR_30_0_center13_center.txt\n", "[True] MB1965_MIR_30_0_center14_center.txt\n", "[True] MB1965_MIR_30_0_center15_center.txt\n", "[True] MB1965_MIR_30_0_center16_center.txt\n", "[True] MB1965_MIR_30_0_center17_center.txt\n", "[True] MB1965_MIR_30_0_center18_center.txt\n", "[True] MB1965_MIR_30_0_center19_center.txt\n", "[True] MB1965_MIR_30_0_center20_center.txt\n", "[True] MB1965_MIR_30_0_center21_center.txt\n", "[True] MB1965_MIR_30_0_center22_center.txt\n", "[True] MB1965_MIR_30_0_center23_center.txt\n", "[True] MB1965_MIR_30_0_center24_center.txt\n", "[True] MB1965_MIR_30_0_center25_center.txt\n", "[True] MB1965_MIR_30_0_center26_center.txt\n", "[True] MB1965_MIR_30_0_center27_center.txt\n", "[True] MB1965_MIR_30_0_center28_center.txt\n", "[True] MB1965_MIR_30_0_center29_center.txt\n", "[True] MB1965_MIR_30_0_centerMap.txt\n", "[True] MB1965_MIR_30_0_0p050_fitParIVF.txt\n", "[True] Segmentation_MB1965-MIR_luka_lezaic_38.nrrd\n", "(64, 64, 64)\n", "[1, 4, 3, 2]\n", "[0/20]\n", "1 9.693030553101009 [3.19366453e-03 8.04845985e-01 9.99519401e-02 2.33201121e+01]\n", "[1/20]\n", "1 4.700953163069098 [1.05111276e-03 3.41895341e-01 2.15695016e-03 2.90966751e+01]\n", "[2/20]\n", "1 7.178892220153296 [2.32148317e-03 8.29518310e-01 9.96387461e-02 2.08915806e+01]\n", "[3/20]\n", "1 84.78739999284353 [7.89336862e-05 6.42451218e-01 1.14871662e-07 2.00000557e+01]\n", "[4/20]\n", "1 8.368061634370905 [2.78514911e-03 8.21293489e-01 9.99537121e-02 2.47051224e+01]\n", "[5/20]\n", "1 4.273073088004507 [5.72124652e-04 5.30921273e-01 6.18235231e-05 2.63240362e+01]\n", "[6/20]\n", "1 4.583694560948002 [5.44498643e-04 6.41516563e-01 2.66912875e-05 2.33530661e+01]\n", "[7/20]\n", "1 4.33379579494306 [7.99861009e-04 5.55737831e-01 7.05329973e-05 2.62142685e+01]\n", "[8/20]\n", "1 3.98926557149236 [5.59194435e-04 5.23611355e-01 1.32013470e-04 2.23730815e+01]\n", "[9/20]\n", "1 4.112761851099831 [4.45241054e-04 6.47231287e-01 8.65290460e-05 2.39511526e+01]\n", "[10/20]\n", "1 12.694819169947024 [3.16456159e-04 4.26800536e-01 1.11473664e-05 1.99999594e+01]\n", "[11/20]\n", "1 3.937325444631684 [7.85085175e-04 5.38811913e-01 1.24519437e-04 2.76259569e+01]\n", "[12/20]\n", "1 4.468238552564913 [5.35565924e-04 5.01539710e-01 4.77485644e-04 2.33602327e+01]\n", "[13/20]\n", "1 8.186417682684676 [1.61040789e-03 8.41104737e-01 9.99096391e-02 2.13415675e+01]\n", "[14/20]\n", "1 4.028342907466232 [4.38010526e-04 5.02315430e-01 1.64971906e-04 2.19938330e+01]\n", "[15/20]\n", "1 3.9888996015531126 [4.83837977e-04 5.37895970e-01 8.84942656e-05 2.38951954e+01]\n", "[16/20]\n", "1 5.102744540157616 [1.17130956e-03 4.09654734e-01 2.25499506e-03 2.83084561e+01]\n", "[17/20]\n", "1 4.177864966209804 [4.71703504e-04 4.15625863e-01 1.24046689e-03 2.34066199e+01]\n", "[18/20]\n", "1 4.778826954229983 [9.94486175e-04 3.25118343e-01 2.08475531e-03 2.85188100e+01]\n", "[19/20]\n", "1 4.4018667080512355 [5.20520495e-04 5.96348327e-01 1.05297156e-04 2.41065394e+01]\n", "[0/20]\n", "1 5.7943573847942105 [9.09886054e-04 5.47835415e-01 4.05706106e-05 2.05655394e+01]\n", "[1/20]\n", "1 5.891344949461054 [1.07668129e-03 5.06122442e-01 1.64001447e-05 2.26153430e+01]\n", "[2/20]\n", "1 14.47933135486202 [1.04488197e-02 8.62479546e-01 3.31375807e-04 2.49058963e+01]\n", "[3/20]\n", "1 5.992017206912975 [1.49559887e-03 4.70160695e-01 1.85867040e-04 2.46068528e+01]\n", "[4/20]\n", "1 5.610163785688999 [1.31794108e-03 4.15953078e-01 1.90837856e-04 2.45794772e+01]\n", "[5/20]\n", "1 5.1692373497292685 [8.17525691e-04 4.34499761e-01 1.66759280e-05 2.13734418e+01]\n", "[6/20]\n", "1 5.4063272907797195 [1.24419082e-03 4.84576608e-01 7.81682583e-05 2.49659885e+01]\n", "[7/20]\n", "1 5.776147085218883 [1.04815900e-03 4.79800066e-01 4.75340494e-05 2.14630185e+01]\n", "[8/20]\n", "1 6.104027666713624 [1.40736405e-03 4.89736467e-01 1.07970625e-04 2.43176881e+01]\n", "[9/20]\n", "1 5.638162798906661 [7.84785186e-04 4.18309529e-01 7.93766953e-05 2.22067221e+01]\n", "[10/20]\n", "1 6.387470200254514 [1.25389198e-03 6.44703068e-01 3.49404638e-05 2.07042270e+01]\n", "[11/20]\n", "1 6.278575275510282 [8.52117866e-04 2.67715064e-01 6.34729477e-04 2.56313282e+01]\n", "[12/20]\n", "1 5.839045744789101 [1.03234331e-03 4.73123881e-01 2.28431159e-05 2.18203878e+01]\n", "[13/20]\n", "1 5.832821272501247 [1.37872753e-03 5.15112731e-01 1.04642432e-04 2.45253657e+01]\n", "[14/20]\n", "1 6.0375579588810355 [1.16165467e-03 4.61603915e-01 1.15179977e-04 2.24154911e+01]\n", "[15/20]\n", "1 5.642294099187772 [1.92779832e-03 4.77461962e-01 9.84142379e-05 2.65031672e+01]\n", "[16/20]\n", "1 5.806020895748584 [2.01553741e-03 4.71035588e-01 1.20823270e-04 2.64727606e+01]\n", "[17/20]\n", "1 3.932377282356477 [1.36378034e-03 3.81600929e-01 8.09333961e-06 3.38521581e+01]\n", "[18/20]\n", "1 5.7697065642428695 [1.28260740e-03 4.74259099e-01 1.19254317e-04 2.36647273e+01]\n", "[19/20]\n", "1 5.6418468712258125 [1.66930578e-03 5.10119164e-01 6.85038465e-05 2.60252328e+01]\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_localFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansTAC_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_localTAC_0p100.txt\n", "[0/20]\n", "1 4.169225138108447 [5.33688000e-03 8.08231083e-01 9.96349024e-02 1.99479618e+01]\n", "[1/20]\n", "1 9.413973627836702 [1.79568064e-02 7.16645849e-01 9.99603174e-02 1.99167523e+01]\n", "[2/20]\n", "1 6.693277927004221 [9.43513664e-03 7.39875981e-01 9.97167043e-02 1.99430495e+01]\n", "[3/20]\n", "1 6.28730095668048 [1.24161445e-02 6.92273910e-01 9.98627853e-02 1.99643002e+01]\n", "[4/20]\n", "1 18.206575442724308 [ 0.02541558 0.05977557 0.08648597 18.30165248]\n", "[5/20]\n", "1 13.333677339406648 [1.37254839e-02 3.34052550e-01 9.24973494e-02 1.97871236e+01]\n", "[6/20]\n", "1 24.542643244935096 [8.55356741e-03 1.32276569e-01 8.12131598e-02 1.86526450e+01]\n", "[7/20]\n", "1 2.4646804906505237 [5.36445490e-04 7.12453399e-01 3.13914507e-05 1.95929032e+01]\n", "[8/20]\n", "1 2.650874776325665 [7.36825909e-03 8.19623758e-01 9.95798129e-02 1.99326239e+01]\n", "[9/20]\n", "1 13.744313056266586 [ 0.04633002 0.59721397 0.09998249 19.86598563]\n", "[10/20]\n", "1 17.147831502461564 [8.06998666e-03 2.77967712e-01 9.14551387e-02 1.96608239e+01]\n", "[11/20]\n", "1 11.400919066553321 [ 0.03275594 0.27641986 0.09987426 19.65936986]\n", "[12/20]\n", "1 1.8676133490625875 [3.99276694e-04 7.34207246e-01 6.53153254e-04 1.98406045e+01]\n", "[13/20]\n", "1 8.371740307766919 [1.74095817e-02 6.53923200e-01 9.99532007e-02 1.99183339e+01]\n", "[14/20]\n", "1 4.480818875877208 [1.29158795e-02 7.29121675e-01 9.98110406e-02 1.99275697e+01]\n", "[15/20]\n", "1 20.362616722411516 [ 0.0249677 0.02524931 0.07776242 18.06080473]\n", "[16/20]\n", "1 7.43586553793968 [ 0.02210899 0.62064427 0.09987731 19.90367429]\n", "[17/20]\n", "1 2.712316955481734 [4.93522431e-04 5.46813449e-01 7.07883017e-05 1.89286002e+01]\n", "[18/20]\n", "1 17.379278529746692 [1.88627164e-02 1.33145199e-01 8.20946297e-02 1.96028134e+01]\n", "[19/20]\n", "1 15.786620437025194 [ 0.04514602 0.40393042 0.09997477 19.76772658]\n", "[0/20]\n", "1 9.632276321463218 [1.36179111e-03 7.75782495e-01 1.15328832e-04 1.99087452e+01]\n", "[1/20]\n", "1 28.187153635694205 [1.38531211e-02 9.55790611e-01 1.51811091e-04 1.99690503e+01]\n", "[2/20]\n", "1 47.283018991466065 [ 0.07997473 0.33874287 0.09992683 19.57269984]\n", "[3/20]\n", "1 30.249060797975044 [1.02884380e-02 9.51276867e-01 3.70827076e-05 1.99666116e+01]\n", "[4/20]\n", "1 19.832866702694865 [9.44776919e-02 9.97406214e-01 1.19684054e-06 1.99823495e+01]\n", "[5/20]\n", "1 34.65034590239112 [ 0.08952965 0.94206848 0.09979471 19.98498514]\n", "[6/20]\n", "1 29.85842932200312 [ 0.0535349 0.94764265 0.09997269 19.97838943]\n", "[7/20]\n", "1 18.80980246636321 [5.09999395e-02 9.94199297e-01 2.60400655e-04 1.99731554e+01]\n", "[8/20]\n", "1 9.460401567478948 [1.32507166e-03 6.92168071e-01 5.90394147e-05 1.98606590e+01]\n", "[9/20]\n", "1 21.35524275205437 [2.91044822e-02 9.87871190e-01 1.19791421e-04 1.99679411e+01]\n", "[10/20]\n", "1 28.27031543072391 [ 0.09591068 0.97252554 0.09998101 19.97090728]\n", "[11/20]\n", "1 7.609513777987572 [8.54449654e-04 5.25175311e-01 4.11202911e-04 1.93790440e+01]\n", "[12/20]\n", "1 13.481736725206588 [1.74114518e-03 8.30256165e-01 8.44342325e-05 1.99621907e+01]\n", "[13/20]\n", "1 23.751200075610267 [ 0.09633766 0.95066801 0.09998256 19.97257398]\n", "[14/20]\n", "1 11.07327872116242 [1.47286621e-03 7.67701596e-01 2.46108344e-04 1.99213355e+01]\n", "[15/20]\n", "1 14.885650624695778 [3.08472040e-02 9.91890032e-01 4.78286848e-05 1.99716172e+01]\n", "[16/20]\n", "1 7.956579763624328 [1.05528975e-03 6.72252419e-01 3.20128838e-04 1.98549069e+01]\n", "[17/20]\n", "1 14.960580025282061 [4.67587574e-03 9.13305369e-01 2.48834923e-05 1.99463382e+01]\n", "[18/20]\n", "1 21.894066731579493 [1.59466534e-02 9.73096179e-01 2.37326950e-04 1.99749794e+01]\n", "[19/20]\n", "1 46.21680640748112 [8.11737511e-02 1.85422599e-04 9.99538598e-02 1.80558653e+01]\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_kmeansFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_localFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_kmeansTAC_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_localTAC_0p100.txt\n", "[0/20]\n", "1 2.796678231336395 [1.07898222e-03 1.61811995e-01 9.86632663e-04 2.65476880e+01]\n", "[1/20]\n", "1 2.581145034859358 [1.83109369e-03 1.31113439e-01 9.19542550e-04 3.34774133e+01]\n", "[2/20]\n", "1 3.098470554873277 [1.82170561e-03 1.47837735e-01 1.23426218e-03 2.87292096e+01]\n", "[3/20]\n", "1 2.8843726010344883 [1.41978530e-03 1.80962330e-01 9.43890196e-04 2.58598179e+01]\n", "[4/20]\n", "1 3.5210316384648648 [2.07275950e-03 2.87435487e-01 1.13218159e-03 2.51997032e+01]\n", "[5/20]\n", "1 3.2596234490296654 [2.52995523e-03 1.81625920e-01 1.46753545e-03 3.38491826e+01]\n", "[6/20]\n", "1 2.4708741987698875 [1.50809324e-03 1.61934307e-01 1.32512266e-03 3.37566904e+01]\n", "[7/20]\n", "1 2.46470616230954 [7.03822792e-04 1.47986535e-01 9.10876588e-04 2.42565322e+01]\n", "[8/20]\n", "1 3.5177732187976236 [2.45109073e-03 1.51447445e-01 1.51175262e-03 3.16260249e+01]\n", "[9/20]\n", "1 1.56137110779122 [7.19945074e-04 1.58627748e-01 7.29796392e-04 3.37641625e+01]\n", "[10/20]\n", "1 2.2149440112740093 [9.54882950e-04 2.53213977e-01 1.14209933e-04 2.37530978e+01]\n", "[11/20]\n", "1 2.4305499391094307 [1.09248994e-03 2.35885076e-01 6.58704049e-04 2.43267607e+01]\n", "[12/20]\n", "1 4.262874327097319 [1.04436183e-03 5.81245363e-02 1.96147924e-03 3.32336549e+01]\n", "[13/20]\n", "1 4.144019314574304 [1.19868388e-03 2.99759377e-01 1.10072249e-03 2.07771044e+01]\n", "[14/20]\n", "1 2.497824805451763 [8.77448484e-04 2.82226740e-01 6.95020313e-04 1.99999100e+01]\n", "[15/20]\n", "1 1.5959333673530656 [7.11613550e-04 2.25823765e-01 7.26144495e-04 1.99999715e+01]\n", "[16/20]\n", "1 2.4261017595565484 [1.19982543e-03 2.66896337e-01 4.48462961e-04 2.31368098e+01]\n", "[17/20]\n", "1 2.3298622511900793 [9.71865036e-04 2.03916808e-01 6.04284212e-04 2.37270657e+01]\n", "[18/20]\n", "1 4.655574980783053 [1.67743863e-03 1.56176628e-01 1.75281364e-03 2.67855281e+01]\n", "[19/20]\n", "1 2.458794426677438 [2.04589383e-03 1.75990814e-01 9.78672008e-04 3.36903152e+01]\n", "[0/20]\n", "1 15.5344460131117 [8.65461144e-04 7.25339830e-02 3.08256826e-03 2.88531571e+01]\n", "[1/20]\n", "1 12.152650658270224 [2.13009510e-03 3.89517297e-01 8.35242797e-04 2.37156017e+01]\n", "[2/20]\n", "1 13.864149709932315 [1.63902050e-03 2.98315792e-01 1.56404977e-03 2.40791001e+01]\n", "[3/20]\n", "1 11.799271886725599 [9.52841746e-04 2.64285458e-01 1.74704332e-03 1.99999072e+01]\n", "[4/20]\n", "1 13.50868122601181 [8.99374840e-04 2.13882838e-01 1.51202684e-03 2.07810037e+01]\n", "[5/20]\n", "1 11.405633463353432 [8.75472603e-04 2.56117321e-01 1.44936294e-03 1.99999053e+01]\n", "[6/20]\n", "1 11.399693077025493 [1.01705753e-03 3.31227698e-01 9.13822769e-04 2.00000000e+01]\n", "[7/20]\n", "1 11.471202899084169 [1.54035040e-03 3.29801051e-01 1.10658422e-03 1.99999984e+01]\n", "[8/20]\n", "1 12.26659763674967 [1.50750847e-03 4.59311646e-01 5.62274389e-04 2.05895180e+01]\n", "[9/20]\n", "1 12.333616194939 [1.71213810e-03 4.09892787e-01 6.02977995e-04 2.24445923e+01]\n", "[10/20]\n", "1 12.26814658574531 [2.89173637e-03 4.32028159e-01 8.10509139e-04 2.47809912e+01]\n", "[11/20]\n", "1 11.793073261903189 [9.98979977e-04 1.91442028e-01 1.34854271e-03 1.99225045e+01]\n", "[12/20]\n", "1 11.964861879635045 [1.27115289e-03 4.55381996e-01 2.08505111e-04 2.00002066e+01]\n", "[13/20]\n", "1 14.221667949646436 [8.97206500e-04 1.50186630e-01 2.00637027e-03 2.46306903e+01]\n", "[14/20]\n", "1 11.806344171487615 [1.37272473e-03 4.77066904e-01 4.95092336e-05 2.00006766e+01]\n", "[15/20]\n", "1 11.742396478978716 [1.03594992e-03 2.95004955e-01 1.48257478e-03 1.99998744e+01]\n", "[16/20]\n", "1 13.615603230148661 [1.54482891e-03 2.63421418e-01 2.55625210e-03 1.99999051e+01]\n", "[17/20]\n", "1 12.67266982185119 [2.19545032e-03 4.15515846e-01 9.91235545e-04 2.43613696e+01]\n", "[18/20]\n", "1 11.476973114244165 [1.12512952e-03 3.11640540e-01 1.21262502e-03 1.99999595e+01]\n", "[19/20]\n", "1 12.123020424800158 [1.95966292e-03 4.46066021e-01 5.09929793e-04 2.25910391e+01]\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_localFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansTAC_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_localTAC_0p100.txt\n", "[0/20]\n", "1 61.27601624301395 [9.21430518e-05 5.14344432e-01 2.23440811e-05 1.99999981e+01]\n", "[1/20]\n", "1 5.196936475841944 [8.05275808e-04 2.89848788e-01 2.51656719e-03 2.69322262e+01]\n", "[2/20]\n", "1 4.409526195342508 [8.22666255e-04 5.87044009e-01 1.52938969e-04 2.48851211e+01]\n", "[3/20]\n", "1 4.544962388721493 [1.42352913e-03 5.38289348e-01 9.08627537e-05 2.95620479e+01]\n", "[4/20]\n", "1 4.211839004737266 [4.11041174e-04 6.48537845e-01 5.35925847e-05 2.23424128e+01]\n", "[5/20]\n", "1 4.5885458078828965 [1.22850522e-03 4.94255158e-01 3.94489329e-04 2.81406213e+01]\n", "[6/20]\n", "1 4.262964187246275 [8.64787493e-04 5.33283594e-01 6.80554693e-05 2.65698905e+01]\n", "[7/20]\n", "1 4.25293605827895 [8.05067137e-04 5.53140861e-01 4.98960832e-06 2.76105961e+01]\n", "[8/20]\n", "1 4.338805860947329 [8.54140713e-04 5.33089972e-01 3.13557199e-05 2.77726373e+01]\n", "[9/20]\n", "1 17.673432106395087 [2.85737861e-04 5.02850275e-01 2.40638780e-05 1.99999338e+01]\n", "[10/20]\n", "1 4.221306513926249 [1.53883786e-03 5.06191056e-01 8.08727923e-05 3.36766093e+01]\n", "[11/20]\n", "1 4.621888595772101 [4.75363962e-04 6.62265634e-01 7.15997273e-05 2.18345045e+01]\n", "[12/20]\n", "1 4.547991826957075 [6.05258644e-04 3.59568219e-01 1.57268743e-03 2.65135653e+01]\n", "[13/20]\n", "1 4.343006755018029 [6.04166189e-04 5.73986450e-01 1.35385046e-04 2.49241863e+01]\n", "[14/20]\n", "1 8.75298600277636 [3.40460981e-04 5.09466799e-01 6.08459786e-05 1.99999102e+01]\n", "[15/20]\n", "1 5.462446165366455 [1.74882500e-03 3.85853317e-01 2.12447314e-03 2.85408790e+01]\n", "[16/20]\n", "1 4.108410670122947 [4.18851768e-04 5.59152282e-01 5.46471816e-05 2.31754791e+01]\n", "[17/20]\n", "1 4.367221453407733 [3.88889756e-04 6.29544179e-01 8.24235023e-05 2.25516281e+01]\n", "[18/20]\n", "1 4.716036168296022 [9.10910538e-04 6.20768927e-01 1.02676113e-04 2.58403141e+01]\n", "[19/20]\n", "1 4.403461713094289 [7.50523656e-04 5.51012474e-01 5.99268098e-05 2.74993087e+01]\n", "[0/20]\n", "1 27.129095753128855 [1.33838382e-03 4.44072156e-01 2.29629460e-04 2.47885650e+01]\n", "[1/20]\n", "1 38.126209260930835 [4.33117210e-02 9.92438341e-01 1.69639620e-05 2.26547070e+01]\n", "[2/20]\n", "1 26.884639101432906 [8.08153004e-04 5.02509926e-01 2.69798593e-04 1.99998517e+01]\n", "[3/20]\n", "1 41.3175824258377 [8.75423144e-02 9.95674796e-01 3.56531659e-05 2.36600207e+01]\n", "[4/20]\n", "1 25.348909874203578 [3.12111051e-03 4.60268852e-01 1.64169760e-04 3.17194528e+01]\n", "[5/20]\n", "1 60.241177218429286 [1.04461229e-03 5.73144619e-01 1.20860111e-04 1.99998752e+01]\n", "[6/20]\n", "1 26.370145158181064 [8.40205910e-04 3.28828094e-01 2.91139900e-04 2.70009206e+01]\n", "[7/20]\n", "1 26.707828463623848 [1.52633825e-03 4.82020035e-01 7.70951619e-05 2.64200235e+01]\n", "[8/20]\n", "1 40.671918511068554 [1.04044012e-02 9.47807346e-01 7.43372251e-05 2.29141746e+01]\n", "[9/20]\n", "1 26.45194251221583 [1.33601394e-03 4.22428679e-01 1.74862763e-04 2.65206996e+01]\n", "[10/20]\n", "1 42.286716357024595 [8.62576109e-02 9.94602347e-01 2.38347286e-04 2.44579293e+01]\n", "[11/20]\n", "1 40.124613146539 [6.20486207e-03 9.45753580e-01 2.14054734e-05 2.27193350e+01]\n", "[12/20]\n", "1 45.81099347506302 [1.95535031e-02 9.65025884e-01 2.74750675e-04 2.52026743e+01]\n", "[13/20]\n", "1 26.083414936393382 [1.33153157e-03 4.15940835e-01 1.19702537e-04 2.68232497e+01]\n", "[14/20]\n", "1 26.74404262002895 [7.44853845e-04 4.53122997e-01 4.40889691e-05 2.23586520e+01]\n", "[15/20]\n", "1 40.228552857853614 [5.66752209e-03 9.19134235e-01 1.34331814e-04 2.32506018e+01]\n", "[16/20]\n", "1 26.992977874045362 [9.11075810e-04 4.11938025e-01 1.16657001e-04 2.61504830e+01]\n", "[17/20]\n", "1 26.847943481321998 [1.85750204e-03 4.11180809e-01 1.25184169e-04 3.17352851e+01]\n", "[18/20]\n", "1 26.537919182290047 [9.43421131e-04 4.20476160e-01 5.70448603e-05 2.61020304e+01]\n", "[19/20]\n", "1 26.223306642805188 [2.34899481e-03 4.24639351e-01 2.44741607e-04 2.89504418e+01]\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_localFit_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansTAC_0p100.txt\n", "Saving samples to /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_localTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_center0_center.txt\n", "[True] MB1965_MIR_30_0_center1_center.txt\n", "[True] MB1965_MIR_30_0_center2_center.txt\n", "[True] MB1965_MIR_30_0_center3_center.txt\n", "[True] MB1965_MIR_30_0_center4_center.txt\n", "[True] MB1965_MIR_30_0_center5_center.txt\n", "[True] MB1965_MIR_30_0_center6_center.txt\n", "[True] MB1965_MIR_30_0_center7_center.txt\n", "[True] MB1965_MIR_30_0_center8_center.txt\n", "[True] MB1965_MIR_30_0_center9_center.txt\n", "[True] MB1965_MIR_30_0_center10_center.txt\n", "[True] MB1965_MIR_30_0_center11_center.txt\n", "[True] MB1965_MIR_30_0_center12_center.txt\n", "[True] MB1965_MIR_30_0_center13_center.txt\n", "[True] MB1965_MIR_30_0_center14_center.txt\n", "[True] MB1965_MIR_30_0_center15_center.txt\n", "[True] MB1965_MIR_30_0_center16_center.txt\n", "[True] MB1965_MIR_30_0_center17_center.txt\n", "[True] MB1965_MIR_30_0_center18_center.txt\n", "[True] MB1965_MIR_30_0_center19_center.txt\n", "[True] MB1965_MIR_30_0_center20_center.txt\n", "[True] MB1965_MIR_30_0_center21_center.txt\n", "[True] MB1965_MIR_30_0_center22_center.txt\n", "[True] MB1965_MIR_30_0_center23_center.txt\n", "[True] MB1965_MIR_30_0_center24_center.txt\n", "[True] MB1965_MIR_30_0_center25_center.txt\n", "[True] MB1965_MIR_30_0_center26_center.txt\n", "[True] MB1965_MIR_30_0_center27_center.txt\n", "[True] MB1965_MIR_30_0_center28_center.txt\n", "[True] MB1965_MIR_30_0_center29_center.txt\n", "[True] MB1965_MIR_30_0_centerMap.txt\n", "[True] MB1965_MIR_30_0_0p050_fitParIVF.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_0_kmeansFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_0_localFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_0_kmeansTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_0_localTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_1_localFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_1_localTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_2_localFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_2_localTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_3_localFit_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansTAC_0p100.txt\n", "[True] MB1965_MIR_30_0_0p050_fitCompartment_3_localTAC_0p100.txt\n", "[True] Segmentation_MB1965-MIR_luka_lezaic_38.nrrd\n", "[True] MB1965_MIR_CT.nrrd\n", "[True] MB1965_MIR_Dummy.mcsv\n", "[True] MB1965_MIR_Volume0.nrrd\n", "[True] MB1965_MIR_Volume1.nrrd\n", "[True] MB1965_MIR_Volume2.nrrd\n", "[True] MB1965_MIR_Volume3.nrrd\n", "[True] MB1965_MIR_Volume4.nrrd\n", "[True] MB1965_MIR_Volume5.nrrd\n", "[True] MB1965_MIR_Volume6.nrrd\n", "[True] MB1965_MIR_Volume7.nrrd\n", "[True] MB1965_MIR_Volume8.nrrd\n", "[True] MB1965_MIR_Volume9.nrrd\n", "[True] MB1965_MIR_Volume10.nrrd\n", "[True] MB1965_MIR_Volume11.nrrd\n", "[True] MB1965_MIR_Volume12.nrrd\n", "[True] MB1965_MIR_Volume13.nrrd\n", "[True] MB1965_MIR_Volume14.nrrd\n", "[True] MB1965_MIR_Volume15.nrrd\n", "[True] MB1965_MIR_Volume16.nrrd\n", "[True] MB1965_MIR_Volume17.nrrd\n", "[True] MB1965_MIR_Volume18.nrrd\n", "[True] MB1965_MIR_Volume19.nrrd\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_localFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_kmeansTAC_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_1_localTAC_0p100.txt\n", "User: andrej studen CSRF: 1767379f3d82dfb538a48bdb5dfa367d\n", "9.693030553101009/9.612545954558673\n", "4.700953163069098/4.666763628920126\n", "7.178892220153296/7.095940389161539\n", "84.78739999284353/84.72315487103569\n", "8.368061634370905/8.28593228548045\n", "4.273073088004507/4.219980960709486\n", "4.583694560948002/4.5195428796132475\n", "4.33379579494306/4.2782220118176735\n", "3.98926557149236/3.9369044360084913\n", "4.112761851099831/4.048038722380726\n", "12.694819169947024/12.652139116342605\n", "3.937325444631684/3.883444253340253\n", "4.468238552564913/4.418084581603173\n", "8.186417682684676/8.102307208954812\n", "4.028342907466232/3.978111364434858\n", "3.9888996015531126/3.93511000456685\n", "5.102744540157616/5.0617790664466344\n", "4.177864966209804/4.136302379925997\n", "4.778826954229983/4.746315119974861\n", "4.4018667080512355/4.342231875372145\n", "5.7943573847942105/5.739573843278957\n", "5.891344949461054/5.840732705250455\n", "14.47933135486202/14.393083400240481\n", "5.992017206912975/5.945001137389303\n", "5.610163785688999/5.568568477320433\n", "5.1692373497292685/5.125787373649583\n", "5.4063272907797195/5.357869630015834\n", "5.776147085218883/5.728167078260992\n", "6.104027666713624/6.055054019978746\n", "5.638162798906661/5.596331846011875\n", "6.387470200254514/6.322999893442547\n", "6.278575275510282/6.251803769096506\n", "5.839045744789101/5.791733356693794\n", "5.832821272501247/5.781309999421699\n", "6.0375579588810355/5.99139756739196\n", "5.642294099187772/5.594547902422212\n", "5.806020895748584/5.758917336976584\n", "3.932377282356477/3.8942171894259436\n", "5.7697065642428695/5.7222806542999205\n", "5.6418468712258125/5.590834954839619\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_localFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_kmeansTAC_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_2_localTAC_0p100.txt\n", "User: andrej studen CSRF: 5c0a201210e0b3f1d2b6f18e1c288c1a\n", "61.27601624301395/61.224581799825984\n", "5.196936475841944/5.167951597067121\n", "4.409526195342508/4.350821794471791\n", "4.544962388721493/4.491133453967037\n", "4.211839004737266/4.146985220217222\n", "4.5885458078828965/4.5391202920748785\n", "4.262964187246275/4.2096358278344645\n", "4.25293605827895/4.197621972179126\n", "4.338805860947329/4.285496863756813\n", "17.673432106395087/17.623147078928426\n", "4.221306513926249/4.170687408291633\n", "4.621888595772101/4.555662032385068\n", "4.547991826957075/4.512035005080871\n", "4.343006755018029/4.285608110022449\n", "8.75298600277636/8.702039322852375\n", "5.462446165366455/5.42386083367447\n", "4.108410670122947/4.052495441536645\n", "4.367221453407733/4.304267035533148\n", "4.716036168296022/4.653959275468309\n", "4.403461713094289/4.348360465728863\n", "27.129095753128855/27.084688537561643\n", "38.126209260930835/38.02696542681689\n", "26.884639101432906/26.834388108816228\n", "41.3175824258377/41.21801494619776\n", "25.348909874203578/25.302882989003788\n", "60.241177218429286/60.18386275651289\n", "26.370145158181064/26.3372623487822\n", "26.707828463623848/26.659626460121675\n", "40.671918511068554/40.5771377765168\n", "26.45194251221583/26.40969964428102\n", "42.286716357024595/42.187256122368595\n", "40.124613146539/40.03003778856095\n", "45.81099347506302/45.71449088668132\n", "26.083414936393382/26.041820852854862\n", "26.74404262002895/26.698730317202866\n", "40.228552857853614/40.13663943434917\n", "26.992977874045362/26.951784071494377\n", "26.847943481321998/26.806825400409956\n", "26.537919182290047/26.495871566321682\n", "26.223306642805188/26.180842707682434\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_localFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_kmeansTAC_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_3_localTAC_0p100.txt\n", "User: andrej studen CSRF: 03262d57859109c3a6023e02a37d034f\n", "2.796678231336395/2.7804970318611644\n", "2.581145034859358/2.568033690977789\n", "3.098470554873277/3.083686781375899\n", "2.8843726010344883/2.866276367990154\n", "3.5210316384648648/3.4922880897368307\n", "3.2596234490296654/3.241460857048893\n", "2.4708741987698875/2.454680768119388\n", "2.46470616230954/2.449907508783853\n", "3.5177732187976236/3.502628474314622\n", "1.56137110779122/1.5455083329925825\n", "2.2149440112740093/2.1896226135846515\n", "2.4305499391094307/2.4069614315005654\n", "4.262874327097319/4.257061873469508\n", "4.144019314574304/4.114043376833494\n", "2.497824805451763/2.46960213148803\n", "1.5959333673530656/1.5733509908675718\n", "2.4261017595565484/2.3994121258799987\n", "2.3298622511900793/2.3094705703512757\n", "4.655574980783053/4.63995731800061\n", "2.458794426677438/2.4411953452487785\n", "15.5344460131117/15.527192614815306\n", "12.152650658270224/12.113698928601691\n", "13.864149709932315/13.834318130699915\n", "11.799271886725599/11.772843339790429\n", "13.50868122601181/13.487292942209058\n", "11.405633463353432/11.380021731290476\n", "11.399693077025493/11.366570307253983\n", "11.471202899084169/11.4382227939974\n", "12.26659763674967/12.220666472150867\n", "12.333616194939/12.292626916242789\n", "12.26814658574531/12.224943769797152\n", "11.793073261903189/11.77392905912253\n", "11.964861879635045/11.919323680012171\n", "14.221667949646436/14.206649286638187\n", "11.806344171487615/11.75863748105385\n", "11.742396478978716/11.712895982389584\n", "13.615603230148661/13.589261088305914\n", "12.67266982185119/12.631118237282369\n", "11.476973114244165/11.445809060196558\n", "12.123020424800158/12.07841382272305\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_kmeansFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_localFit_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_kmeansTAC_0p100.txt\n", "Reading from /home/studen/temp/dynamicSPECT/MB1965_MIR/MB1965_MIR_30_0_0p050_fitCompartment_4_localTAC_0p100.txt\n", "User: andrej studen CSRF: 7c0509427f13d57f532690bb23f6a3ae\n", "4.169225138108447/4.088402029786878\n", "9.413973627836702/9.34230904295216\n", "6.693277927004221/6.619290328868899\n", "6.28730095668048/6.218073565666721\n", "18.206575442724308/18.200597885988085\n", "13.333677339406648/13.300272084365197\n", "24.542643244935096/24.52941558801674\n", "2.4646804906505237/2.3934351507610643\n", "2.650874776325665/2.5689124005570787\n", "13.744313056266586/13.684591658777492\n", "17.147831502461564/17.120034731238082\n", "11.400919066553321/11.373277080692064\n", "1.8676133490625875/1.7941926244375483\n", "8.371740307766919/8.30634798773526\n", "4.480818875877208/4.407906708404255\n", "20.362616722411516/20.360091791578476\n", "7.43586553793968/7.373801110761483\n", "2.712316955481734/2.6576356094306766\n", "17.379278529746692/17.365964009840372\n", "15.786620437025194/15.746227394691385\n", "9.632276321463218/9.55469807192073\n", "28.187153635694205/28.09157457454512\n", "47.283018991466065/47.24914470438468\n", "30.249060797975044/30.15393311129326\n", "19.832866702694865/19.733126081246134\n", "34.65034590239112/34.55613905404283\n", "29.85842932200312/29.76366505736946\n", "18.80980246636321/18.710382536706348\n", "9.460401567478948/9.391184760329583\n", "21.35524275205437/21.256455633090592\n", "28.27031543072391/28.173062876266343\n", "7.609513777987572/7.556996246873842\n", "13.481736725206588/13.398711108668266\n", "23.751200075610267/23.65613327507522\n", "11.07327872116242/10.996508561568067\n", "14.885650624695778/14.786461621482623\n", "7.956579763624328/7.889354521769726\n", "14.960580025282061/14.86924948842968\n", "21.894066731579493/21.796757113679487\n", "46.21680640748112/46.21678786522119\n", "[True] MB1965_MIR_30_0_center0_center.txt\n", "[True] MB1965_MIR_30_0_center1_center.txt\n", "[True] MB1965_MIR_30_0_center2_center.txt\n", "[True] MB1965_MIR_30_0_center3_center.txt\n", "[True] MB1965_MIR_30_0_center4_center.txt\n", "[True] MB1965_MIR_30_0_center5_center.txt\n", "[True] MB1965_MIR_30_0_center6_center.txt\n", "[True] MB1965_MIR_30_0_center7_center.txt\n", "[True] MB1965_MIR_30_0_center8_center.txt\n", "[True] MB1965_MIR_30_0_center9_center.txt\n", "[True] MB1965_MIR_30_0_center10_center.txt\n", "[True] MB1965_MIR_30_0_center11_center.txt\n", "[True] MB1965_MIR_30_0_center12_center.txt\n", "[True] MB1965_MIR_30_0_center13_center.txt\n", "[True] MB1965_MIR_30_0_center14_center.txt\n", "[True] MB1965_MIR_30_0_center15_center.txt\n", "[True] MB1965_MIR_30_0_center16_center.txt\n", "[True] MB1965_MIR_30_0_center17_center.txt\n", "[True] MB1965_MIR_30_0_center18_center.txt\n", "[True] MB1965_MIR_30_0_center19_center.txt\n", "[True] MB1965_MIR_30_0_center20_center.txt\n", "[True] MB1965_MIR_30_0_center21_center.txt\n", "[True] MB1965_MIR_30_0_center22_center.txt\n", "[True] MB1965_MIR_30_0_center23_center.txt\n", "[True] MB1965_MIR_30_0_center24_center.txt\n", "[True] MB1965_MIR_30_0_center25_center.txt\n", "[True] MB1965_MIR_30_0_center26_center.txt\n", "[True] MB1965_MIR_30_0_center27_center.txt\n", "[True] MB1965_MIR_30_0_center28_center.txt\n", "[True] MB1965_MIR_30_0_center29_center.txt\n", "[True] MB1965_MIR_30_0_centerMap.txt\n", "[True] MB1965_MIR_30_0_0p050_fitParIVF.txt\n", "[True] Segmentation_MB1965-MIR_luka_lezaic_38.nrrd\n", "(64, 64, 64)\n", "[1, 4, 3, 2]\n", "[0/20]\n", "1 4.259108539755925 [5.47896860e-04 2.33853424e-01 2.28344020e-03 2.78683929e+01]\n", "[1/20]\n", "1 5.505240448019288 [1.42641213e-03 2.90221558e-01 2.97626359e-03 3.00942443e+01]\n", "[2/20]\n", "1 4.517833707776547 [6.41432987e-04 4.38323893e-01 7.29508132e-04 2.60759881e+01]\n", "[3/20]\n", "1 4.739238483484525 [6.19544401e-04 5.22886072e-01 8.51558233e-05 2.64942367e+01]\n", "[4/20]\n", "1 5.166673373077514 [9.01381824e-04 5.72374027e-01 1.40161191e-04 2.59337682e+01]\n", "[5/20]\n", "1 4.090027910063446 [8.16928405e-04 3.17070870e-01 1.21745303e-03 3.36070745e+01]\n", "[6/20]\n", "1 4.763231449311955 [8.69652429e-04 5.24706122e-01 5.00737293e-05 2.44703164e+01]\n", "[7/20]\n", "1 8.767264820161323 [2.47874138e-04 8.09478096e-01 8.46789469e-02 2.07003153e+01]\n", "[8/20]\n", "1 4.91900275692423 [7.01672310e-04 5.46469398e-01 3.81142639e-04 2.61554269e+01]\n", "[9/20]\n", "1 5.250007290438971 [1.14976785e-03 5.62483738e-01 1.04202801e-04 2.76137077e+01]\n", "[10/20]\n", "1 4.913821140986414 [5.26395478e-04 4.45454258e-01 1.30062464e-03 2.50963899e+01]\n", "[11/20]\n", "1 4.477497582058742 [7.37788009e-04 5.10873409e-01 5.81884969e-05 2.78977326e+01]\n", "[12/20]\n", "1 5.101088633084105 [2.24284676e-03 5.43790784e-01 5.87847513e-05 3.34256720e+01]\n", "[13/20]\n", "1 4.397779031033215 [7.18143407e-04 2.61445581e-01 2.27096320e-03 3.31953885e+01]\n", "[14/20]\n", "1 8.100190390876241 [7.34668379e-04 7.53723657e-01 3.17296496e-03 2.30484726e+01]\n", "[15/20]\n", "1 4.570225487316667 [1.25207846e-03 5.03424237e-01 1.66321514e-04 3.03307684e+01]\n" ] } ], "source": [ "\n", "def doIVF(xsetup,r,ir=0,nfit=1,nbatch=1,doDraw=False):\n", " nclass=xsetup['nclass'][0]\n", " t,dt=loadData.loadTime(r,xsetup)\n", " centers=loadData.loadCenters(r,xsetup,ir)\n", " \n", " return fitData.fitIVF(t,centers,nfit,nbatch)\n", " \n", "def doCompartment(setup,r,ivfFit,m, useJac=False,nfit=1,nbatch=1,ir=0,useScalar=True):\n", " nclass=setup['nclass'][0]\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " qf=centers[m]\n", " return fitData.fitCompartment(ivfFit,t,qf,nfit,nbatch,useJac)\n", " \n", "\n", "def doCompartmentGlobal(setup,r,ivfFit,m, useJac=False,nfit=1,ir=0):\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " qf=centers[m]\n", " return fitData.fitCompartmentGlobal(ivfFit,t,qf,nfit,useJac)\n", " \n", "def doIVFGlobal(xsetup,r,ir=0,nfit=1):\n", " nclass=xsetup['nclass'][0]\n", " t,dt=loadData.loadTime(r,xsetup)\n", " centers=loadData.loadCenters(r,xsetup,ir)\n", " m=numpy.unravel_index(numpy.argmax(centers),centers.shape)[0]\n", " #treat it as ivf sample\n", " ivf=centers[m]\n", " return fitData.fitIVFGlobal(t,centers,nfit)\n", " \n", "def plotIVF(r,setup,m,samples,threshold,file0=None,file1=None,ir=0):\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " ivf=centers[m]\n", " \n", " plotData.plotIVF(t,ivf,samples,threshold,file0,file1)\n", " \n", "def plotIVFRealizations(r,setup,m,samples,threshold,nplot=50,file=None,ir=0):\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " ivf=centers[m]\n", " plotData.plotIVFRealizations(t,ivf,samples,threshold,nplot,file)\n", " \n", "def plotSamples(r,setup,m,samples,file0=None,file1=None,ir=0):\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir)\n", " qf=centers[m]\n", " plotData.plotSamples(t,qf,samples,file0,file1)\n", "\n", "def checkDF(setup,pts,qLambda):\n", " ir=0\n", " outputDF=numpy.zeros((len(pts),len(qLambda)))\n", " outputErr=numpy.zeros((len(pts),len(qLambda)))\n", " for i in range(len(pts)):\n", " p=pts[i]\n", " setup.update(p)\n", " fb,db,r=getRow(setup,True) \n", " for k in range(len(qLambda)):\n", " qLam=qLambda[k]\n", " setup['qLambda']=qLam\n", " #get samples\n", " m,samples=loadData.readIVF(r,setup,qLambda=qLam)\n", " t,dt=loadData.loadTime(r,setup)\n", " centers=loadData.loadCenters(r,setup,ir=ir)\n", " ivf=centers[m]\n", " w=numpy.ones(t.shape)\n", " fun=functools.partial(fitModel.fDiff,fitModel.fIVF,t,ivf,w)\n", " chi2=numpy.zeros(samples.shape[1])\n", " for j in range(samples.shape[1]):\n", " cPar=samples[1:,j]\n", " df=fun(cPar)\n", " chi2[j]=(df*df).sum()\n", " print('[{} {} {}]: {:.2f} / {:.2f} ({:.2f})'.format(p['PatientId'],p['visitCode'],qLam,samples[0,j],numpy.mean(chi2),numpy.std(chi2)))\n", " outputDF[i,k]=numpy.mean(chi2)\n", " outputErr[i,k]=numpy.std(chi2)/numpy.sqrt(samples.shape[1])\n", " #break\n", " #break\n", " return outputDF,outputErr\n", "\n", "def checkDFC(setup,pts,qLambdaC):\n", " ir=0\n", " ig=fitData.generateCModel()\n", " npar=ig.getN()\n", " outputDF=numpy.zeros((len(pts)*npar,len(qLambdaC)))\n", " outputErr=numpy.zeros((len(pts)*npar,len(qLambdaC)))\n", " qLambda=workflow.getRobust(setup,'qLambda')\n", " \n", " for i in range(len(pts)):\n", " p=pts[i]\n", " setup.update(p)\n", " fb,db,r=getRow(setup,True)\n", " t,dt=loadData.loadTime(r,setup)\n", " w=numpy.ones(t.shape)\n", " for k in range(len(qLambdaC)):\n", " qLamC=qLambdaC[k]\n", " setup['qLambdaC']=qLamC\n", " for s in range(setup['nseg']):\n", " iseg=s+1\n", " #get samples\n", " m,samples=loadData.readSamples(r,setup,'kmeansFit',iseg=iseg,ir=ir,qLambda=qLambda,qLambdaC=qLamC)\n", " qc=samples[0,:]\n", " threshold=numpy.median(qc)\n", " fit=fitData.getFit(samples[0:(npar+1),:],threshold)\n", " print('[{} {} {} {}]: {})'.format(p['PatientId'],p['visitCode'],qLamC,s, fit.mu))\n", " \n", " \n", " tac=loadData.readTAC(r,setup,'kmeansTAC',iseg=iseg,ir=ir,qLambda=qLambda,qLambdaC=qLamC)\n", " chi2=numpy.zeros(samples.shape[1])\n", " for j in range(samples.shape[1]):\n", " ivfPar=samples[(1+npar):,j]\n", " fc1=functools.partial(fitModel.fCompartment,ivfPar)\n", " fun=functools.partial(fitModel.fDiff,fc1,t,tac,w)\n", " cPar=samples[1:(1+npar),j]\n", " df=fun(cPar)\n", " chi2[j]=(df*df).sum()\n", " print('[{} {} {} {}]: {:.2f} / {:.2f} ({:.2f})'.format(p['PatientId'],p['visitCode'],qLamC,s, \n", " numpy.mean(qc),numpy.mean(chi2),numpy.std(chi2)))\n", " outputDF[i*npar+s,k]=numpy.mean(chi2)\n", " outputErr[i*npar+s,k]=numpy.std(chi2)/numpy.sqrt(samples.shape[1])\n", " #break\n", " #break\n", " return outputDF,outputErr\n", "\n", "def generateDF(setup,pts,qLambda):\n", " for p in pts:\n", " setup.update(p)\n", " fb,db,r=getRow(setup,True) \n", " for j in range(len(qLambda)):\n", " qLam=qLambda[j]\n", " setup['qLambda']=qLam\n", " #print(r['visitCode'])\n", " if j==0:\n", " workflow.workflow(r,setup,'setCenters',fb=fb,db=db)\n", " workflow.workflow(r,setup,'fitIVF',fb=fb,db=db)\n", " workflow.workflow(r,setup,'plotIVF',fb=fb,db=db)\n", " #seg=workflow(r,setup,'fitCompartment',fb=fb,db=db)\n", " #seg=workflow(r,setup,'plotCompartment',fb=fb,db=db)\n", "\n", "def generateDFC(setup,pts,qLambdaC):\n", " for p in pts:\n", " setup.update(p)\n", " fb,db,r=getRow(setup,True) \n", " for j in range(len(qLambda)):\n", " qLam=qLambdaC[j]\n", " setup['qLambdaC']=qLam\n", " workflow.workflow(r,setup,'fitCompartment',fb=fb,db=db)\n", " workflow.workflow(r,setup,'plotCompartment',fb=fb,db=db)\n", "\n", " \n", " \n", "def uploadFiles(setup,pts,qLambda):\n", " for p in pts:\n", " setup.update(p)\n", " fb,db,r=getRow(setup,True) \n", " for j in range(len(qLambda)):\n", " qLam=qLambda[j]\n", " setup['qLambda']=qLam\n", " if j==0:\n", " workflow.uploadCreatedFiles('setCenters',fb,r,setup)\n", " workflow.uploadCreatedFiles('fitIVF',fb,r,setup)\n", " workflow.uploadCreatedFiles('plotIVF',fb,r,setup)\n", " categories=['fits','diff','generatedIVF','centerIVFSPECT','centerIVFCT']\n", " workflow.updateDatabase(r,setup,'plotIVF',db=db,fb=fb,categories=categories)\n", " \n", "\n", "setup={'tempDir':'temp/dynamicSPECT',\n", " 'ParticipantField':'PatientId',\n", " 'visitField':'visitCode',\n", " 'nclass':[30],\n", " 'nr':1,\n", " 'PatientId':'MB1965',\n", " 'visitCode':'MIR',\n", " 'project':'dynamicSPECT/cardiacSPECT',\n", " 'schemaName':'study',\n", " 'queryName':'Imaging1',\n", " 'baseDir':'processedImages',\n", " 'network':'labkey-ukc.json',\n", " 'segmentationMode':'NRRD',\n", " 'targetUser':'1007',\n", " 'segmentationQueryName':'Segmentations',\n", " 'qLambda':0.05,\n", " 'qLambdaC':10\n", " } \n", "pts=[{'PatientId':'MB1965','visitCode':'MIR'},\n", " {'PatientId':'MB1965','visitCode':'MIR1'},\n", " {'PatientId':'MB1965','visitCode':'MIR2'},\n", " {'PatientId':'MM','visitCode':'MIR1'},\n", " {'PatientId':'TT1998','visitCode':'MIR'},\n", " {'PatientId':'VV1984','visitCode':'MIR'},\n", " {'PatientId':'VV1984','visitCode':'MIR1'}]\n", "\n", "ptsC=[{'PatientId':'MB1965','visitCode':'MIR'},\n", " {'PatientId':'MB1965','visitCode':'MIR2'},\n", " {'PatientId':'TT1998','visitCode':'MIR'},\n", " {'PatientId':'VV1984','visitCode':'MIR'},\n", " {'PatientId':'VV1984','visitCode':'MIR1'}]\n", "\n", "\n", "def getSegFName(r,setup,db):\n", " copyFields=['PatientId','visitCode']\n", " qFilter=[{'variable':x,'value':r[x],'oper':'eq'} for x in copyFields]\n", " qFilter.append({'variable':'User','value':setup['targetUser'],'oper':'eq'})\n", " print(qFilter)\n", " #rows=getData.getSegmentation(db,setup,qFilter)\n", " #r=rows[0]\n", " #return r['latestFile']\n", "\n", "#qLambda=[0,0.01,0.05,0.1,1]\n", "#fb,db,rows=workflow.getRows(setup,returnFB=True)\n", "#r=rows[0]\n", "#workflow.workflow(r,setup,'fitCompartment',fb=fb,db=db)\n", "setup['nseg']=4\n", "qLambdaC=[0.1,1,10]\n", "#outputDF,outputErr=checkDFC(setup,pts[0:1],[0,1,10])\n", "#print(outputDF)\n", "#print(outputErr)\n", "#setup['nseg']=4\n", "#workflow.workflow(r,setup,'plotCompartment',fb=fb,db=db)\n", "#segmentation.getSegmentationFileName(r,setup,db=db)\n", "#generateDF(setup,pts,qLambda)\n", "generateDFC(setup,pts,qLambdaC)\n", "#uploadFiles(setup,pts,qLambda)\n", "#outputDF,outputErr=checkDF(setup,pts,qLambda)\n", "#fb,db,r=getRow(setup,True) \n", "#workflow.workflow(r,setup,'plotIVF',fb=fb,db=db)" ] }, { "cell_type": "code", "execution_count": 81, "id": "66948a2d-c14e-4694-a39a-fd019faa7dbd", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG1CAYAAAAFuNXgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYzElEQVR4nO3dd1hTh/7H8U/YQ5bK3iMiiiioVLROsOAetXoVqtbRa+tAbfV37a1atbfY4bZq3aOOumqprQvEjXXvqiwBWU72TvL7IxqlohJISAif1/PwXHNycs43XmvenpycCCQSiQREREREGkJL1QMQERERKRLjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDSKjqoHqG1isRjp6ekwMTGBQCBQ9ThERERUBRKJBHl5ebCzs4OW1puPzdS7uElPT4ejo6OqxyAiIqJqSE1NhYODwxvXqXdxY2JiAkD6m2NqaqriaYiIiKgqcnNz4ejoKHsdf5N6FzfP34oyNTVl3BAREdUxVTmlhCcUExERkUZh3BAREZFGqXdvSxERkeqJRCKUlZWpegxSM3p6em/9JFRVMG6IiKjWSCQSZGZmIjs7W9WjkBrS0tKCq6sr9PT0arQdxg0REdWa52FjZWUFIyMjXm+MZJ5fhy4jIwNOTk41+rPBuCEiolohEolkYdOoUSNVj0NqyNLSEunp6SgvL4eurm61t8MTiomIqFY8P8fGyMhIxZOQunr+dpRIJKrRdhg3RERUq/hWFL2Oov5sMG6IiKjOKSwth8t//oDLf/5AYWm5qschNaPSuHFxcYFAIHjlZ/z48ZWuv3HjxlfWNTAwqOWpiYiISJ2p9ITi8+fPV3hf7caNG+jevTs++OCD1z7G1NQUd+7ckd3m4U0iIiJ6mUqP3FhaWsLGxkb2s3//fri7u6Nz586vfYxAIKjwGGtr61qcmIiI6qORI0dCIBBg3Lhxr9w3fvx4CAQCjBw58pX1n/80atQIISEhuHbtWoXH/u9//0P79u1hZGQEc3PzSvcdHR2N9u3bw8TEBDY2Nvi///s/lJdXfCtOIpHghx9+QJMmTaCvrw97e3v873//k91/7NixSt8pyczMfO1zfv4YCwsLFBcXV7jv/Pnzsm38c/3n1zD65z4tLS3Rs2dPXL9+/bX7VBS1OeemtLQUP//8M0aNGvXGozH5+flwdnaGo6Mj+vXrh5s3b75xuyUlJcjNza3wQ0REJC9HR0fs2LEDRUVFsmXFxcXYtm0bnJycXlk/JCQEGRkZyMjIQHR0NHR0dNC7d+8K65SWluKDDz7AJ598Uuk+r169ip49eyIkJASXL1/GL7/8gsjISPznP/+psF54eDjWrl2LH374Abdv30ZkZCT8/f1f2d6dO3dkM2VkZMDKyuqtz9vExAS//vprhWXr1q2r9DlX5vk+Dx06hJKSEvTq1QulpaVVemx1qU3c7Nu3D9nZ2RXK9588PT2xfv16/Pbbb/j5558hFovRvn173L9//7WPiYiIgJmZmezH0dFRCdMTEVF1SCQSFJaWV+vnueo+XiKRyDWrn58fHB0dsXfvXtmyvXv3wsnJCb6+vq+sr6+vL3uXoVWrVvjPf/6D1NRUPHz4ULbOnDlzMGXKFLRo0aLSff7yyy/w8fHBrFmz4OHhgc6dO+O7777Djz/+iLy8PADA33//jZUrV+K3335D37594erqitatW6N79+6vbM/KyqrCux9V+aqDESNGYP369bLbRUVF2LFjB0aMGFHp+jfScnDtfjZEYkmFffr5+WHy5MlITU3F7du337rfmlCbi/itW7cOPXr0gJ2d3WvXCQgIQEBAgOx2+/bt4eXlhZ9++gnz5s2r9DEzZszA1KlTZbdzc3MZOEREaqKoTIRmsw7VaBttvo6u1uNuzQ2GkZ58L4OjRo3Chg0bEBoaCgBYv349PvroIxw7duyNj8vPz8fPP/8MDw8PuS5gWFJS8soHZwwNDVFcXIyLFy+iS5cu+P333+Hm5ob9+/cjJCQEEokEQUFB+O6779CwYcMKj23VqhVKSkrg7e2Nr776Ch06dHjrDB9++CG+//57pKSkwMnJCXv27IGLiwv8/Pyq/DwAICcnBzt27ACAGn+9wtuoxZGb5ORkREVFYcyYMXI9TldXF76+voiPj3/tOvr6+jA1Na3wQ0REVB1hYWE4deoUkpOTkZycjNOnTyMsLKzSdffv348GDRqgQYMGMDExQWRkJH755Re5vhgyODgYZ86cwfbt2yESiZCWloa5c+cCADIyMgAAiYmJSE5Oxq5du7B582Zs3LgRFy9exKBBg2TbsbW1xapVq7Bnzx7s2bMHjo6O6NKlCy5duvTWGaysrNCjRw9s3LgRgDToRo0aVeXn4ODggAYNGsDc3Bzbtm1D37590bRp0yo/vjrU4sjNhg0bYGVlhV69esn1OJFIhOvXr6Nnz55KmoyIiJTJUFcbt+YGy/24wtJy2RGbC18Gyn0E5vm+5WVpaYlevXph48aNkEgk6NWrFxo3blzpul27dsXKlSsBAE+fPsWKFSvQo0cPnDt3Ds7OzlXa33vvvYfvv/8e48aNw4cffgh9fX3MnDkTJ0+elEWSWCxGSUkJNm/ejCZNmgCQvhvSunVr3LlzB56enrKf59q3b4+EhAQsWrQIW7Zseesco0aNQnh4OMLCwhAbG4tdu3bh5MmTVXoOJ0+ehJGREc6ePYtvvvkGq1atqtLjakLlR27EYjE2bNiAESNGQEen4h/O4cOHY8aMGbLbc+fOxeHDh5GYmIhLly4hLCwMycnJch/xISIi9SAQCGCkp1Otn+eq+/jqXkpk1KhR2LhxIzZt2vTGIxjGxsbw8PCAh4cH2rZti7Vr16KgoABr1qyRa39Tp05FdnY2UlJS8OjRI/Tr1w8A4ObmBkB6VEZHR0cWNgDg5eUFAEhJSXntdv39/d/4zsfLevTogaKiIowePRp9+vSR6601V1dXeHp6YsSIERgzZgyGDBlS5cdWl8rjJioqCikpKZX+AUlJSZEddgOk5Tt27Fh4eXmhZ8+eyM3NxZkzZ9CsWbPaHJmIiOqxkJAQlJaWoqysDMHBVT/qJBAIoKWlVeHTVvI81s7ODoaGhti+fTscHR1l57x06NAB5eXlSEhIkK1/9+5dAHjjEaIrV67A1ta2SvvX0dHB8OHDcezYMbnekvqn8ePH48aNG698+krRVP621HvvvffaM9b/eYLWokWLsGjRolqYioiIqHLa2tr4+++/Zb9+nZKSEtl1ZJ4+fYrly5cjPz8fffr0ka2TkpKCJ0+eICUlBSKRCFeuXAEAeHh4oEGDBgCA77//HiEhIdDS0sLevXsxf/587Ny5U7bvoKAg+Pn5YdSoUVi8eDHEYjHGjx+P7t27y47mLF68GK6urmjevDmKi4uxdu1aHD16FIcPH67y8543bx6mTZtWo290NzIywtixYzF79mz0799faRfiVXncEBER1TVV+XDKwYMHZUdGTExM0LRpU+zatQtdunSRrTNr1ixs2rRJdvv5R8pjYmJk6x04cAD/+9//UFJSgpYtW+K3335Djx49ZI/R0tLC77//jokTJ6JTp04wNjZGjx49sGDBAtk6paWl+Oyzz5CWlgYjIyP4+PggKioKXbt2rfJz1tPTe+35RfKYMGECFi5ciF27dmHw4ME13l5lBBJ5P+hfx+Xm5sLMzAw5OTn85BQRUS0qLi5GUlISXF1da/y9gIWl5bKPkFfnI92kHCKxBDfTcwAAze3MoK0l35GZN/0Zkef1m38aiIiozjHS08G9+fJ9wpbqD5WfUExERESkSIwbIiIi0iiMGyIiItIojBsiIqpV9exzLCQHRf3ZYNwQEVGt0NXVBQAUFhaqeBJSV6WlpQDefP2gquCnpYiIqFZoa2vD3NwcDx48ACC9oJuyLuJGqiESSyAplwZKcXGxXB8FF4vFePjwIYyMjF75OiZ5MW6IiKjW2NjYAIAscEiziCUSPMguBgDoFBpAS8541dLSgpOTU42jl3FDRES1RiAQwNbWFlZWVigrK1P1OKRgRaXl+PjXUwCA/RPfhaGcF1fU09OTfdt5TTBuiIio1mlra9f4vApSP2KtcqTliQAA+gYGMFDRlaN5QjERERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUxg0RERFpFMYNERERaRTGDREREWkUlcaNi4sLBALBKz/jx49/7WN27dqFpk2bwsDAAC1atMCff/5ZixMTERGRulNp3Jw/fx4ZGRmynyNHjgAAPvjgg0rXP3PmDIYOHYrRo0fj8uXL6N+/P/r3748bN27U5thERESkxlQaN5aWlrCxsZH97N+/H+7u7ujcuXOl6y9ZsgQhISGYNm0avLy8MG/ePPj5+WH58uW1PDkRERGpK7U556a0tBQ///wzRo0aBYFAUOk6sbGxCAoKqrAsODgYsbGxr91uSUkJcnNzK/wQERGR5lKbuNm3bx+ys7MxcuTI166TmZkJa2vrCsusra2RmZn52sdERETAzMxM9uPo6KiokYmIiEgNqU3crFu3Dj169ICdnZ1Ctztjxgzk5OTIflJTUxW6fSIi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iIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0io6qB9AURno6uDe/l6rHICIiqvd45IaIiIg0CuOGiIiINArjhoiIiDQK44aIiIg0CuOGiIiINIraxM38+fMhEAgwefLkN663a9cuNG3aFAYGBmjRogX+/PPP2hmQiIiI6gS1iJvz58/jp59+go+PzxvXO3PmDIYOHYrRo0fj8uXL6N+/P/r3748bN27U0qRERESk7lQeN/n5+QgNDcWaNWtgYWHxxnWXLFmCkJAQTJs2DV5eXpg3bx78/PywfPnyWpqWiIiI1J3K42b8+PHo1asXgoKC3rpubGzsK+sFBwcjNjb2tY8pKSlBbm5uhR8iIiLSXCq9QvGOHTtw6dIlnD9/vkrrZ2ZmwtrausIya2trZGZmvvYxERERmDNnTo3mJCIiorpDZUduUlNTER4ejq1bt8LAwEBp+5kxYwZycnJkP6mpqUrbFxEREameyo7cXLx4EQ8ePICfn59smUgkwokTJ7B8+XKUlJRAW1u7wmNsbGyQlZVVYVlWVhZsbGxeux99fX3o6+srdngiIiJSWyo7chMYGIjr16/jypUrsp82bdogNDQUV65ceSVsACAgIADR0dEVlh05cgQBAQG1NTYRERGpOZUduTExMYG3t3eFZcbGxmjUqJFs+fDhw2Fvb4+IiAgAQHh4ODp37owFCxagV69e2LFjBy5cuIDVq1fX+vxERESknlT+aak3SUlJQUZGhux2+/btsW3bNqxevRotW7bE7t27sW/fvlciiYiIiOovgUQikah6iNqUk5MDc3NzpKamwtTUVNXjEBERURXk5ubC0dER2dnZMDMze+O6Kv0ouCrk5eUBABwdHVU8CREREckrLy/vrXFT747ciMVipKenw8TEBP7+/lW+xk5VPK9KHhWi12nbtq1C/8zVJ5r+e1fXnp+6zauqeWprv8rcj6K3razXQolEgry8PNjZ2UFL681n1dS7IzdaWlpwcHAAAGhrayslQkxNTRk3VCll/ZmrDzT9966uPT91m1dV89TWfpW5n7r0Wvi2IzbPqfUJxco2fvx4VY9A9Qz/zFWfpv/e1bXn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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#matplotlib.pyplot.plot(qLambda,outputDF.transpose())\n", "for i in range(len(pts[0:1])):\n", " p=pts[i]\n", " matplotlib.pyplot.errorbar(qLambda,outputDF[i,:],yerr=outputErr[i,:],label='{} {}'.format(p['PatientId'],p['visitCode']))\n", "matplotlib.pyplot.xscale('log')\n", "matplotlib.pyplot.xlabel('lambda (unitless)')\n", "matplotlib.pyplot.ylabel('residual (Bq/ms/voxel volume)')\n", "\n", "matplotlib.pyplot.legend()\n", "matplotlib.pyplot.savefig('LambdaOptimization.png')\n" ] }, { "cell_type": "code", "execution_count": 21, "id": "6ef5548e-b697-491e-8521-e2297facf1bc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "loadLibrary\n", "remoteSourcesURL https://git0.fmf.uni-lj.si/studen/nixSuite/raw/master/remoteResources/resources.json\n", "{'labkeyInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'irAEMM': {'url': 'https://git0.fmf.uni-lj.si/studen/iraemm/archive/master.zip', 'branch': 'master', 'modules': ['iraemmBrowser']}, 'SlicerLabkeyExtension': {'url': 'https://git0.fmf.uni-lj.si/studen/SlicerLabkeyExtension/archive/SlicerExtensionIndex.zip', 'branch': 'SlicerExtensionIndex', 'modules': ['labkeyBrowser']}, 'limfomiPET': {'url': 'https://git0.fmf.uni-lj.si/studen/limfomiPET/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser', 'segmentationBrowser']}, 'parseConfig': {'url': 'https://git0.fmf.uni-lj.si/studen/parseConfig/archive/master.zip', 'branch': 'master', 'modules': []}, 'orthancInterface': {'url': 'https://git0.fmf.uni-lj.si/studen/orthancInterface/archive/master.zip', 'branch': 'master', 'modules': []}, 'dynamicSPECT': {'url': 'https://git0.fmf.uni-lj.si/studen/dynamicSPECT/archive/master.zip', 'branch': 'master', 'modules': ['imageBrowser']}}\n", "{'url': 'https://git0.fmf.uni-lj.si/studen/labkeyInterface/archive/master.zip', 'branch': 'master', 'modules': []}\n", "File /home/studen/temp/labkeyInterface.zip: True\n", "User: andrej studen CSRF: 3007b97ba2c86c982e4ed834e4b64f22\n", "Got 0 lines.\n", "insert {'patientCode': None, 'visitCode': 'MIR1', 'PatientId': 'JD1971', 'SequenceNum': 1.0, 'convertToNRRD': False}\n", "User: andrej studen CSRF: 93f97227366a33d37cc514ab1d98150c\n" ] } ], "source": [ "def checkStatus(r,setup,var='convertToNRRD',status=False,db=None,modify=False):\n", " fVars=['patientCode','visitCode']\n", " qFilter=[{'variable':x,'value':'{}'.format(r[x]),'oper':'eq'} for x in fVars]\n", " if not db:\n", " return\n", " ds=db.selectRows(setup['project'],'study','processingStatus',qFilter)\n", " try:\n", " rows=ds['rows']\n", " print('Got {} lines.'.format(len(rows)))\n", " except KeyError:\n", " #no rows returned, possibly the dataset does not exist\n", " return\n", " mode='update'\n", " try:\n", " entry=rows[0]\n", " except IndexError:\n", " fVars.extend([config.getPatientField(setup), \"SequenceNum\"])\n", " entry={x:r[x] for x in fVars}\n", " mode='insert'\n", " entry[var]=status\n", " print(f'{mode} {entry}')\n", " if modify:\n", " db.modifyRows(mode,setup['project'],'study','processingStatus',[entry])\n", "\n", "setup={'tempDir':'temp/dynamicSPECT',\n", " 'ParticipantField':'PatientId',\n", " 'visitField':'visitCode',\n", " 'nclass':[30],\n", " 'nr':1,\n", " 'PatientId':'JD1971',\n", " 'visitCode':'MIR1',\n", " 'project':'dynamicSPECT/cardiacSPECT',\n", " 'schemaName':'study',\n", " 'queryName':'Imaging1',\n", " 'baseDir':'processedImages',\n", " 'network':'labkey-ukc.json',\n", " 'segmentationMode':'NRRD',\n", " 'targetUser':'1007',\n", " 'segmentationQueryName':'Segmentations',\n", " 'qLambda':0.05\n", " }\n", "fb,db,r=getRow(setup,True)\n", "checkStatus(r,setup,'convertToNRRD',status=False, db=db,modify=True)" ] }, { "cell_type": "code", "execution_count": 57, "id": "b59a66c5-e2cd-4b6e-83b1-8c7820d6989d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "53073" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numpy.sum(u1==7)" ] }, { "cell_type": "code", "execution_count": null, "id": "9159f501-e1da-4a35-a5fa-d6a389c6fc57", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }