def run_frequency_phase_correction(population, workspace_dir, study_id, voxel_name, svs_type): for subject in population: print '###################################################################' print 'Running Frequency and phase drift Correction for subject:', subject subject_dir = mkdir_path(os.path.join(workspace_dir, subject, study_id)) twx_dir = os.path.join(subject_dir, 'SVS', voxel_name, 'TWIX') # Run frequency and phase drift correction os.chdir(twx_dir) if svs_type == 'PRESS': preproc = [ 'matlab', '-nodesktop', '-nosplash', '-noFigureWindows', '-r "run_pressproc_auto(\'%s\') ; quit;"' % voxel_name ] fpd_name = '%s_lcm' % voxel_name elif svs_type == 'MEGA_PRESS': preproc = [ 'matlab', '-nodesktop', '-nosplash', '-noFigureWindows', '-r "run_megapressproc_auto(\'%s\') ; quit;"' % voxel_name ] fpd_name = '%s_diff_lcm' % voxel_name if not os.path.isfile(os.path.join(twx_dir, voxel_name, fpd_name)): subprocess.call(preproc)
def init_data(): # list数据保存路径 # 日志保存路径 utils.mkdir_path(DATA_LIST_PATH) utils.mkdir_path(LOG_PATH) # 日志配置 log_name = LOG_PATH + "/get_data_list.log" utils.logConfig(log_name) #数据获取总量初始化 #用于程序中断后重新启动,其初始页码应该等于当前已经获取最大页码数+1 startIndex = utils.get_curr_max_pageno(DATA_LIST_PATH) + 1 endIndex = total_page_count + 1 for x in range(startIndex, endIndex): temp_queue.put(x) info = "加入队列总页数:" + str(temp_queue.qsize()) logging.info(info) print(info)
def make_svs_anatomical(population, workspace, voxel_name): for subject in population: subject_dir = os.path.join(workspace, subject) dicom_dir = os.path.join(subject_dir, 'DICOM') svs_dir = os.path.join(subject_dir, 'SVS') nifti_dir = mkdir_path(os.path.join(subject_dir, 'NIFTI')) ########## Get MP2RAGE UNI if not os.path.isfile( os.path.join(nifti_dir, 'ANATOMICAL.nii')): print 'Converting MP2RAGE ' dicoms = [os.path.join(dicom_dir, dicom) for dicom in os.listdir(dicom_dir)] T1_list = [] for dicom in dicoms: try: dcm_read = pydicom.read_file(dicom, force=True) sequence = dcm_read.SeriesDescription except AttributeError: continue if 'mp2rage_p3_602B_UNI_Images' in sequence: T1_list.append(dicom) # convert T1 anatomical to NIFTI with SPM print 'Converting Dicom to Nifti for %s' % subject spm_dicom_convert = spmu.DicomImport() spm_dicom_convert.inputs.format = 'nii' spm_dicom_convert.inputs.in_files = T1_list spm_dicom_convert.inputs.output_dir = nifti_dir spm_dicom_convert.run() # rename output file os.system('mv %s/*nii %s/ANATOMICAL.nii' %(nifti_dir, nifti_dir)) # make svs mask rda =[] if not os.path.isfile(os.path.join(svs_dir, voxel_name, 'RDA', '.nii')): for root, dirs, files, in os.walk(os.path.join(svs_dir, voxel_name, 'RDA'), topdown=False): for name in files: if 'supp' in name and 'edit1' in name: rda.append(os.path.join(name)) if rda is []: print 'RDA metabolite data does not exist for subject %s' % subject T1Path = os.path.join(subject_dir, 'NIFTI' + '/') T1Image = 'ANATOMICAL.nii' svs_path = os.path.join(svs_dir, voxel_name, 'RDA' + '/') svs_file = rda[0] matlab_command = ['matlab', '--version', '8.2', '-nodesktop', '-nosplash', '-nojvm', '-r "RDA_TO_NIFTI(\'%s\', \'%s\', \'%s\', \'%s\') ; quit;"' % (T1Path, T1Image, svs_path, svs_file)] subprocess.call(matlab_command) os.system('mv %s/*Mask.nii %s' % (nifti_dir, os.path.join(svs_dir, voxel_name, 'RDA'))) os.system('mv %s/*coord.txt %s' % (nifti_dir, os.path.join(svs_dir, voxel_name, 'RDA')))
def make_report(population, workspace, voxel_name): for subject in population: subdir = os.path.join(workspace_dir, subject) rdadir = os.path.join(subdir, 'SVS', voxel_name, 'RDA') twxdir = os.path.join(subdir, 'SVS', voxel_name, 'TWIX') lcmdir = mkdir_path(os.path.join(twxdir, 'lcmodel')) rda = [] for root, dirs, files, in os.walk(rdadir, topdown=False): for name in files: if 'supp' in name and 'edit1' in name: rda.append(os.path.join(rdadir, name)) reader = open(rda[0], 'r') for line in reader: if 'SeriesDescription' in line: Series = line[19:30] elif 'TR:' in line: TR = line[4:8] elif 'TE:' in line: TE = line[4:6] elif 'VectorSize' in line: nfil = line[12:16] elif 'NumberOfAverages' in line: NS = line[18:21] elif 'PatientSex' in line: Sex = line[12:13] elif 'PatientAge' in line: # Age = line[13:15] elif 'PixelSpacingRow' in line: PSR = float(line[17:19]) elif 'PixelSpacingCol' in line: PSC = float(line[17:20]) elif 'PixelSpacing3D:' in line: PS3d = float(line[16:19]) elif 'StudyDate' in line: datex = line[0:19] lcm_plot = os.path.join(twxdir, '%s_lcmodel-0.png' % voxel_name[0:3]) if not os.path.isfile(lcm_plot): lcmodel = os.path.join(twxdir, 'lcmodel', 'ps.pdf') make_png = ['convert', '-density', '300', '-trim', '%s' % lcmodel,# '-quality', '300', '-sharpen', '0x1.0', '%s/%s_lcmodel.png' % (twxdir,voxel_name[0:3])] subprocess.call(make_png) #make report anat = os.path.join(subdir, 'NIFTI', 'ANATOMICAL.nii') svs = os.path.join(subdir, 'SVS', voxel_name, 'RDA/RDA_Mask.nii') # get data into matrix anat_load = nb.load(anat) svs_load = nb.load(svs) anat_data = anat_load.get_data() svs_data = svs_load.get_data() # get svs cut coords coords = np.round(find_cut_coords(svs_load)) print coords # convert zeros to nans for visualization purposes svs_data[svs_data == 0] = np.nan # plot voxel on anat fig = plt.figure() fig.set_size_inches(6.5, 6.5) fig.subplots_adjust(wspace=0.005) # 1 ax1 = plt.subplot2grid((1, 3), (0, 0), colspan=1, rowspan=1) ax1.imshow(anat_data[int(coords[0]), :, :], matplotlib.cm.bone_r) ax1.imshow(svs_data[int(coords[0]), :, :], matplotlib.cm.rainbow_r, alpha=0.7) ax1.set_xlim(23, 157) ax1.set_ylim(101, 230) ax1.axes.get_yaxis().set_visible(False) ax1.axes.get_xaxis().set_visible(False) # 2 ax2 = plt.subplot2grid((1, 3), (0, 1), colspan=1, rowspan=1) ax2.imshow(np.rot90(anat_data[:, :, int(coords[2])]), matplotlib.cm.bone_r) ax2.imshow(np.rot90(svs_data[:, :, int(coords[2])]), matplotlib.cm.rainbow_r, alpha=0.7) ax2.set_xlim(230, 20) ax2.set_ylim(207, 4) ax2.axes.get_yaxis().set_visible(False) ax2.axes.get_xaxis().set_visible(False) # 3 ax3 = plt.subplot2grid((1, 3), (0, 2), colspan=1, rowspan=1) ax3.imshow(anat_data[:, int(coords[1]), :], matplotlib.cm.bone_r, origin='lower') ax3.imshow(svs_data[:, int(coords[1]), :], matplotlib.cm.rainbow_r, alpha=0.7, origin='lower') ax3.set_xlim(38, 140) ax3.set_ylim(160, 60) ax3.axes.get_yaxis().set_visible(False) ax3.axes.get_xaxis().set_visible(False) fig.tight_layout() fig.savefig('%s/localization_%s.png' % (twxdir, voxel_name), dpi=200, bbox_inches='tight') # create qc report report = canvas.Canvas(os.path.join(twxdir, 'QC_REPORT_%s.pdf' % voxel_name), pagesize=(1280, 1556)) report.setFont("Helvetica", 40) report.drawImage(os.path.join(twxdir, 'localization_%s.png' % voxel_name), 1, inch * 13.5) report.drawImage(lcm_plot, 30, inch * 1, width=1200, height=800, mask='auto') report.setFont("Helvetica", 30) report.drawString(175, inch * 20, ' %s (%s-%s), TR=%s, TE=%s, NAV=%s ,Volume=%sx%sx%s' % (subject, Age, Sex, TR, TE, NS, int(PSR), int(PSC), int(PS3d))) # report.showPage() report.save()
def lcmodel_gaba(population, workspace, voxel_name, water = True): for subject in population: twxdir = os.path.join(workspace_dir, subject, 'SVS', voxel_name, 'TWIX') lcmdir = mkdir_path(os.path.join(twxdir, 'lcmodel')) metdir = mkdir_path(os.path.join(twxdir, 'lcmodel', 'met')) h2odir = mkdir_path(os.path.join(twxdir, 'lcmodel', 'h2o')) shutil.copy(os.path.join(twxdir, voxel_name, '%s_diff_lcm'%voxel_name), os.path.join(metdir, 'RAW')) met = os.path.join(metdir, 'RAW') if water: shutil.copy(os.path.join(twxdir, '%s_w'%voxel_name , '%s_w_lcm'%voxel_name), os.path.join(h2odir, 'RAW')) h2o = os.path.join(h2odir, 'RAW') dow = 'T' else: dow = 'F' hdr = [line.rstrip('\n') for line in open(os.path.join(twxdir, voxel_name, '%s_diff_lcm'%voxel_name), 'r')][0:12] print hdr print '' echot = [hdr[hdr.index(item)] for item in hdr if 'echot' in item ][0][8:] hzpppm = [hdr[hdr.index(item)] for item in hdr if 'hzpppm' in item ][0][9:] nunfil = [hdr[hdr.index(item)] for item in hdr if 'NumberOfPoints' in item ][0][17:] deltat = [hdr[hdr.index(item)] for item in hdr if 'dwellTime=' in item ][0][12:] ppmst = 4.2 ppmend = 1.95 file = open(os.path.join(lcmdir, 'control'), "w") file.write(" $LCMODL\n") file.write(" title= 'TWIX - %s' \n" %voxel_name) file.write(" srcraw= '%s' \n" % met) if water: file.write(" srch2o= '%s' \n" % h2o) file.write(" savdir= '%s' \n" % lcmdir) file.write(" ppmst= %s \n"%ppmst ) file.write(" ppmend= %s\n"%ppmend) file.write(" nunfil= %s\n" % nunfil) file.write(" ltable= 7\n") file.write(" lps= 8\n") file.write(" lprint= 6\n") file.write(" lcsv= 11\n") file.write(" lcoraw= 10\n") file.write(" lcoord= 9\n") file.write(" hzpppm= %s\n" % hzpppm) file.write(" filtab= '%s/table'\n" % lcmdir) file.write(" filraw= '%s/met/RAW'\n" % lcmdir) file.write(" filps= '%s/ps'\n" % lcmdir) file.write(" filpri= '%s/print'\n" % lcmdir) file.write(" filh2o= '%s/h2o/RAW'\n" % lcmdir) file.write(" filcsv= '%s/spreadsheet.csv'\n" % lcmdir) file.write(" filcor= '%s/coraw'\n" % lcmdir) file.write(" filcoo= '%s/coord'\n" % lcmdir) file.write(" filbas= '/home/raid3/kanaan/.lcmodel/basis-sets/mega-press-3t-1.basis'\n") file.write(" echot= %s \n" % echot) file.write(" dows= %s \n" %dow) file.write(" NEACH= 999 \n") # export met fits file.write(" doecc= T\n") file.write(" deltat= %s\n" % deltat) file.write(" sptype= mega-press-3") file.write(" $END\n") file.close() lcm_command = ['/bin/sh', '/home/raid3/kanaan/.lcmodel/execution-scripts/standardA4pdfv3', '%s' % lcmdir, '30', '%s' % lcmdir, '%s' % lcmdir] print subprocess.list2cmdline(lcm_command) subprocess.call(lcm_command)
def run_frequency_phase_correction(population, workspace_dir, study_id, voxel_name, svs_type): for subject in population: subject_dir = os.path.join(workspace_dir, subject, study_id) twx_dir = os.path.join(subject_dir, 'SVS', voxel_name, 'TWIX') lcm_dir = mkdir_path(os.path.join(subject_dir, 'LCMODEL', voxel_name, 'TWIX')) met_dir = mkdir_path(os.path.join(lcm_dir, 'met')) h2o_dir = mkdir_path(os.path.join(lcm_dir, 'h2o')) def make_press_control_file(lcmodel_dir, met, h2o, title, ppmst, ppmend): hdr = [line.rstrip('\n') for line in open(met, 'r')][0:12] print hdr echot = [hdr[hdr.index(item)] for item in hdr if 'echot' in item][0][8:] hzpppm = [hdr[hdr.index(item)] for item in hdr if 'hzpppm' in item][0][9:] nunfil = [hdr[hdr.index(item)] for item in hdr if 'NumberOfPoints' in item][0][17:] deltat = [hdr[hdr.index(item)] for item in hdr if 'dwellTime=' in item][0][12:] ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Building the control file ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' print '...building control file' file = open(os.path.join(lcmodel_dir, 'control'), "w") file.write(" $LCMODL\n") file.write(" title= 'TWIX - %s' \n" % title) file.write(" srcraw= '%s' \n" % met) file.write(" srch2o= '%s' \n" % h2o) file.write(" savdir= '%s' \n" % lcmodel_dir) file.write(" ppmst= %s \n" % ppmst) file.write(" ppmend= 0.3\n") file.write(" nunfil= %s\n" % nunfil) file.write(" ltable= 7\n") file.write(" lps= 8\n") file.write(" lprint= 6\n") file.write(" lcsv= 11\n") file.write(" lcoraw= 10\n") file.write(" lcoord= 9\n") file.write(" hzpppm= %s\n" % hzpppm) file.write(" filtab= '%s/table'\n" % lcmodel_dir) file.write(" filraw= '%s/met/RAW'\n" % lcmodel_dir) file.write(" filps= '%s/ps'\n" % lcmodel_dir) file.write(" filpri= '%s/print'\n" % lcmodel_dir) file.write(" filh2o= '%s/h2o/RAW'\n" % lcmodel_dir) file.write(" filcsv= '%s/spreadsheet.csv'\n" % lcmodel_dir) file.write(" filcor= '%s/coraw'\n" % lcmodel_dir) file.write(" filcoo= '%s/coord'\n" % lcmodel_dir) file.write(" filbas= '/home/raid3/kanaan/.lcmodel/basis-sets/press_te30_3t_01a.basis'\n") file.write(" echot= %s \n" % echot) file.write(" dows= T \n") # file.write(" NEACH= 999 \n") # export met fits # file.write(" DEGPPM =0 \n") file.write(" doecc= T\n") file.write(" deltat= %s\n" % deltat) file.write(" $END\n") file.close() lcm_command = ['/bin/sh', '/home/raid3/kanaan/.lcmodel/execution-scripts/standardA4pdfv3', '%s' % lcmodel_dir, '30', '%s' % lcmodel_dir, '%s' % lcmodel_dir] print subprocess.list2cmdline(lcm_command) subprocess.call(lcm_command) def make_megapress_control_file(lcmodel_dir, met, h2o, title, ppmst, ppmend): hdr = [line.rstrip('\n') for line in open(met, 'r')][0:12] print hdr echot = [hdr[hdr.index(item)] for item in hdr if 'echot' in item][0][8:] hzpppm = [hdr[hdr.index(item)] for item in hdr if 'hzpppm' in item][0][9:] nunfil = [hdr[hdr.index(item)] for item in hdr if 'NumberOfPoints' in item][0][17:] deltat = [hdr[hdr.index(item)] for item in hdr if 'dwellTime=' in item][0][12:] file = open(os.path.join(lcmodel_dir, 'control'), "w") file.write(" $LCMODL\n") file.write(" title= 'TWIX - %s' \n" % voxel_name) file.write(" srcraw= '%s' \n" % met) file.write(" srch2o= '%s' \n" % h2o) file.write(" savdir= '%s' \n" % lcmodel_dir) file.write(" ppmst= %s \n" % ppmst) file.write(" ppmend= %s\n" % ppmend) file.write(" nunfil= %s\n" % nunfil) file.write(" ltable= 7\n") file.write(" lps= 8\n") file.write(" lprint= 6\n") file.write(" lcsv= 11\n") file.write(" lcoraw= 10\n") file.write(" lcoord= 9\n") file.write(" hzpppm= %s\n" % hzpppm) file.write(" filtab= '%s/table'\n" % lcmodel_dir) file.write(" filraw= '%s/met/RAW'\n" % lcmodel_dir) file.write(" filps= '%s/ps'\n" % lcmodel_dir) file.write(" filpri= '%s/print'\n" % lcmodel_dir) file.write(" filh2o= '%s/h2o/RAW'\n" % lcmodel_dir) file.write(" filcsv= '%s/spreadsheet.csv'\n" % lcmodel_dir) file.write(" filcor= '%s/coraw'\n" % lcmodel_dir) file.write(" filcoo= '%s/coord'\n" % lcmodel_dir) file.write(" filbas= '/home/raid3/kanaan/.lcmodel/basis-sets/mega-press-3t-1.basis'\n") file.write(" echot= %s \n" % echot) file.write(" dows= T \n") #file.write(" NEACH= 999 \n") # export met fits file.write(" doecc= T\n") file.write(" deltat= %s\n" % deltat) file.write(" sptype= mega-press-3") file.write(" $END\n") file.close() lcm_command = ['/bin/sh', '/home/raid3/kanaan/.lcmodel/execution-scripts/standardA4pdfv3', '%s' % lcmodel_dir, '30', '%s' % lcmodel_dir, '%s' % lcmodel_dir] print subprocess.list2cmdline(lcm_command) subprocess.call(lcm_command) if svs_type == 'PRESS': if not os.path.join(lcm_dir, 'ps.pdf'): shutil.copy(os.path.join(twx_dir, voxel_name, '%s_lcm' % voxel_name), os.path.join(met_dir, 'RAW')) shutil.copy(os.path.join(twx_dir, '%s_w' % voxel_name, '%s_w_lcm' % voxel_name), os.path.join(h2o_dir, 'RAW')) met = os.path.join(met_dir, 'RAW') h2o = os.path.join(h2o_dir, 'RAW') make_press_control_file(lcm_dir, met, h2o, '%s - %s' % (subject, voxel_name), 4.0, 0) elif svs_type == 'MEGA_PRESS': if not os.path.join(lcm_dir, 'ps.pdf'): shutil.copy(os.path.join(twx_dir, voxel_name, '%s_diff_lcm' % voxel_name), os.path.join(met_dir, 'RAW')) shutil.copy(os.path.join(twx_dir, '%s_w' % voxel_name, '%s_w_lcm' % voxel_name), os.path.join(h2o_dir, 'RAW')) met = os.path.join(met_dir, 'RAW') h2o = os.path.join(h2o_dir, 'RAW')
def check_spectra(population, workspace_dir, afs_dir, study_day, voxel_name, sequence): for subject in population: print '####################################################' # Input/outut dirs subject_afs = os.path.join(afs_dir, subject, study_day) subject_dir = mkdir_path( os.path.join(workspace_dir, subject, study_day)) if sequence is 'PRESS': seq = 'se' elif sequence is 'MEGA_PRESS': seq = 'mp' ##COPY TWIX twx_met_src = glob.glob( os.path.join(subject_afs, 'SVS', voxel_name, 'TWIX', voxel_name, '*'))[0] twx_h2o_src = glob.glob( os.path.join(subject_afs, 'SVS', voxel_name, 'TWIX', '%s_w' % voxel_name, '*'))[0] twx_met_out = mkdir_path( os.path.join(subject_dir, 'SVS', voxel_name, 'TWIX', voxel_name)) twx_h2o_out = mkdir_path( os.path.join(subject_dir, 'SVS', voxel_name, 'TWIX', '%s_w' % voxel_name)) if not os.listdir(twx_met_out): print 'Copying TWIX data for Subject %s voxel %s' % (subject, voxel_name) os.system('cp %s %s/%s.dat' % (twx_met_src, twx_met_out, voxel_name)) os.system('cp %s %s/%s_w.dat ' % (twx_h2o_src, twx_h2o_out, voxel_name)) else: print 'TWIX data for Subject %s voxel %s already copied' % ( subject, voxel_name) #COPY RDA if sequence is 'MEGA_PRESS': vox = voxel_name[:-1] else: vox = voxel_name rda_met_src = os.path.join(subject_afs, 'SVS', voxel_name, 'RDA', '%s%s.rda' % (seq, vox)) rda_h2o_src = os.path.join(subject_afs, 'SVS', voxel_name, 'RDA', '%s%sref.rda' % (seq, vox)) rda_met_out = mkdir_path( os.path.join(subject_dir, 'SVS', voxel_name, 'RDA', voxel_name)) rda_h2o_out = mkdir_path( os.path.join(subject_dir, 'SVS', voxel_name, 'RDA', '%s_w' % voxel_name)) if not os.listdir(rda_met_out): print 'Copying RDA data for Subject %s voxel %s' % (subject, voxel_name) os.system('cp %s %s/%s.rda' % (rda_met_src, rda_met_out, voxel_name)) os.system('cp %s %s/%s_w.rda' % (rda_h2o_src, rda_h2o_out, voxel_name)) else: print 'RDA data for Subject %s voxel %s already copied' % ( subject, voxel_name)