import os import json import re import subprocess import nibabel import shutil import sys import datetime if len(sys.argv)<2: print("Usage {} version(v1 or similar)".format(sys.argv[0])) sys.exit(0) #sourceDir=sys.argv[1] ver=sys.argv[1] 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"]) import labkeyInterface import labkeyDatabaseBrowser import labkeyFileBrowser #sys.path.insert(1,shome+'/software/src/IPNUMM/dicomUtils') #import loadDicom #onko configOnko=os.path.join(fhome,'.labkey','onko-nix.json') netOnko=labkeyInterface.labkeyInterface() netOnko.init(configOnko) dbOnko=labkeyDatabaseBrowser.labkeyDB(netOnko) fbOnko=labkeyFileBrowser.labkeyFileBrowser(netOnko) #merlin configMerlin=os.path.join(fhome,'.labkey','merlin.json') netMerlin=labkeyInterface.labkeyInterface() netMerlin.init(configMerlin) dbMerlin=labkeyDatabaseBrowser.labkeyDB(netMerlin) fbMerlin=labkeyFileBrowser.labkeyFileBrowser(netMerlin) projectOnko='iPNUMMretro/Study' datasetOnko='Imaging1' projectMerlin='iPNUMMretro/Study' datasetMerlin='Imaging1' tempBase=os.path.join(fhome,'temp') #all images from database #imageSelector={"CT":"CT","PET":"PETWB"}; imageResampledField={"Segm":"Segmentation"} fileCode="Segm" participantField='PatientId' visitCode='visitCode' #for prosepective #participantField='ParticipantId' #generate key from known imaging dates def getImagingDates(db,project,dataset,participant,\ participantField='PatientId'): idFilter={'variable':participantField,\ 'value':participant, 'oper':'eq'} ds=db.selectRows(project,'study',dataset,[idFilter]) return [datetime.datetime.strptime(row['studyDate'], '%Y/%m/%d %H:%M:%S')\ for row in ds['rows']] def getImagingDatesDictionary(db,project,dataset,\ participantField='PatientId'): ds=db.selectRows(project,'study',dataset,[]) participants=[row[participantField] for row in ds['rows']] #unique participants=list(set(participants)) return {p:getImagingDates(db,project,dataset,p,participantField)\ for p in participants} def imagingDatesMatch(dateList1,dateList2): n=min(len(dateList1),len(dateList2)) datesEqual=[abs(d2-d1)