Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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')))
Пример #4
0
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()
Пример #5
0
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)
Пример #6
0
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')
Пример #7
0
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)