| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | 
							- import os
 
- import json
 
- import re
 
- import subprocess
 
- import nibabel
 
- import shutil
 
- import sys
 
- if len(sys.argv)<2:
 
-     print("Usage {} sourceDir version(v1 or similar)".format(sys.argv[0]))
 
-     sys.exit(0)
 
- sourceDir=sys.argv[1]
 
- ver=sys.argv[2]
 
- 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
 
- fconfig=os.path.join(fhome,'.labkey','network.json')
 
- net=labkeyInterface.labkeyInterface()
 
- net.init(fconfig)
 
- db=labkeyDatabaseBrowser.labkeyDB(net)
 
- fb=labkeyFileBrowser.labkeyFileBrowser(net)
 
- project='iPNUMMretro/Study'
 
- dataset='Imaging'
 
- tempBase=os.path.join(fhome,'temp')
 
- #all images from database
 
- ds=db.selectRows(project,'study',dataset,[])
 
- #imageSelector={"CT":"CT","PET":"PETWB"};
 
- imageResampledField={"Segm":"Segmentation"}
 
- participantField='PatientId'
 
- #for prosepective
 
- #participantField='ParticipantId'
 
- #projectNIfTIBase=os.path.join(labkeyBase,'files',project,'@files/nifti')
 
- #use webdav to transfer file (even though it is localhost)
 
- 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):
 
-     for im in imageResampledField:
 
-         row[imageResampledField[im]]=gzFileNames[im]
 
-     db.modifyRows('update',project,'study',dataset,[row])
 
-  
 
- i=0
 
- for row in ds["rows"]:
 
-     #interesting files are processedDir/studyName_CT_notCropped_2mmVoxel.nii
 
-     #asn processedDir/studyName_PET_notCropped_2mmVoxel.nii
 
-     #standard names provided by Zan and Daniel
 
-     baseFileNames={im:\
 
-             getStudyLabel(row,participantField)+'_'+im \
 
-                 for im in imageResampledField}
 
-     
 
-     #append suffix to base name for source files
 
-     gzSrcFileNames={im:baseFileNames[im]+'.nii.gz'\
 
-             for im in baseFileNames}
 
-     #add version to out files
 
-     gzOutFileNames={im:baseFileNames[im]+'_'+ver+'.nii.gz'\
 
-             for im in baseFileNames}
 
-     #build/check remote directory structure
 
-     remoteDir=fb.buildPathURL(project,\
 
-             ['preprocessedImages',getPatientLabel(row,participantField),\
 
-             getVisitLabel(row)])
 
-     #target files
 
-     gzRemoteFiles={im:remoteDir+'/'+f\
 
-             for (im,f) in gzOutFileNames.items()}
 
-     remoteFilePresent=[fb.entryExists(f)\
 
-             for f in gzRemoteFiles.values()]
 
-     for f in gzRemoteFiles.values():
 
-         print("[{}]: [{}]".format(f,fb.entryExists(f)))
 
-     if all(remoteFilePresent):
 
-         print("Entry for row done.")
 
-         updateRow(project,dataset,row,imageResampledField,\
 
-                 gzOutFileNames)
 
-         continue
 
-     inputDir=fb.buildPathURL(project,[sourceDir]) 
 
-     inputFiles={im:inputDir+'/'+f for (im,f) in gzSrcFileNames.items()}
 
-     
 
-     for im in inputFiles:
 
-         f=inputFiles[im]
 
-         if not fb.entryExists(f):
 
-             print("Input file {} not found".format(f))
 
-             continue
 
-         print("Found {}".format(f))
 
-         localFile=os.path.join(tempBase,gzSrcFileNames[im])
 
-         print("Local {}".format(localFile))
 
-         fb.readFileToFile(f,localFile)
 
-         fb.writeFileToFile(localFile,gzRemoteFiles[im])
 
-         print("Remote {}".format(gzRemoteFiles[im]))
 
-         os.remove(localFile)
 
-     #update row and let it know where the processed files are
 
-     updateRow(project,dataset,row,imageResampledField,gzOutFileNames)
 
-    
 
-     if i==-1:
 
-         break
 
-     i=i+1
 
- print("Done")
 
 
  |