Example #1
0
 def highpass_filter(self,suffix_in='n',suffix_out='f',highpass_val=.011):
     for i,epi in enumerate(self.func_names):
         general_cleaner(epi+suffix_out,1)
         shell_command(['3dFourier','-prefix',epi+suffix_out,'-highpass',
                        str(highpass_val),epi+suffix_in+'+orig'])
     self.highpass_filtered = True
     return suffix_out
Example #2
0
 def reconstruct_anat(self,rawdir_searchexp='./*/'):
     if self.data_type == 'cni':
         general_cleaner(self.anat_name,1)
         # create afni anat from nifti:
         if not self.raw_anat:
             self.raw_anat = self.__cni_find_raws([self.anat_scan_num])[0]
         shell_command(['3dcopy',self.raw_anat,self.anat_name])
     elif self.data_type == 'lucas':
         # guess the rawdir based on the search expression.
         # the default is the first directory in the subject directory... (typically works!)
         currentdir = os.getcwd()
         rawdir = glob.glob(rawdir_searchexp)[0]
         os.chdir(rawdir)
         dicomdirs = glob.glob('./*/')
         axialdir,saggitaldir = [],[]
         for dir in dicomdirs:
             os.chdir(dir)
             dicomfiles = glob.glob('./*')
             if len(files) == 24: axialdir = dir
             if len(files) == 116: saggitaldir = dir
             os.chdir('../')
         saginfo = self.__runto3d(saggitaldir,prefix=self.anat_name,keepfiles=True)
         axiinfo = self.__runto3d(axialdir,prefix='axialtemp',keepfiles=False)
         self.__isparse(axiinfo)
         os.chdir(currentdir)
     self.reconstructed_anat = True
Example #3
0
 def warp_functionals(self, dset_names=[], suffix_in='f'):
     for i, epi in enumerate(dset_names):
         shell_command(['adwarp','-apar',self.anat_name+'+tlrc','-dpar',epi+suffix_in+'+orig', \
                          '-dxyz',str(self.talairach_dxyz)])
     return {
         'dset_out': [(x + suffix_in + '+tlrc') for x in dset_names],
         'suffix_out': suffix_out
     }
Example #4
0
 def convert_to_nifti(self,suffix_in='_masked',suffix_out='_masked',orig=False):
     for epi in self.func_names:
         if not orig:
             shell_command(['3dAFNItoNIFTI','-prefix',epi+suffix_in,epi+suffix_out+'+tlrc'])
         else:
             shell_command(['3dAFNItoNIFTI','-prefix',epi+suffix_in,epi+suffix_out+'+orig'])
     self.converted_to_nifti = True
     return suffix_out
Example #5
0
 def __lucas_3dtshift(self,
                      dset_names,
                      suffix_out='_cropts',
                      suffix_in='_crop'):
     for name in dset_names:
         shell_command([
             '3dTshift', '-slice', '0', '-prefix', name + suffix_out,
             name + suffix_in + '+orig'
         ])
         general_cleaner(name + suffix_in, 1)
     return suffix_out
Example #6
0
 def correct_motion(self,dset_names=[],motion_labels=[],suffix_out='m',suffix_in=''):
     if len(motion_labels) != len(dset_names):
         print('\nWARNING: Motion labels not equal to number of functionals.\n')
     else:
         for i,(label,epi) in enumerate(zip(motion_labels,dset_names)):
             # clean out motion files:
             general_cleaner(label,0)
             general_cleaner(epi+suffix_out,1)
             # run 3dvolreg for each functional:
             shell_command(['3dvolreg','-Fourier','-twopass','-prefix',epi+suffix_out,'-base',
                            '3','-dfile',label+'.1D',epi+suffix_in+'+orig'])
     return {'dset_out':[(x+suffix_out+'+orig') for x in dset_names],'suffix_out':suffix_out}
Example #7
0
 def command(self):
     if len(self.motion_labels) != len(self.dset_labels):
         print('\nWARNING: Motion labels not equal to number of functionals.\n')
     else:
         for i,(label,epi) in enumerate(zip(self.motion_labels,self.dset_labels)):
             # clean out motion files:
             general_cleaner(label,0)
             general_cleaner(epi+self.suffix_out,1)
             # run 3dvolreg for each functional:
             shell_command(['3dvolreg','-Fourier','-twopass','-prefix',epi+self.suffix_out,'-base',
                            '3','-dfile',label+'.1D',epi+self.suffix_in+'+orig'])
     return {'dset_out':[(x+self.suffix_out) for x in self.dset_labels],
         'suffix_out':self.suffix_out,'motion_files':[label for label in self.motion_labels]}
Example #8
0
 def correct_motion(self,suffix_out='m',suffix_in=''):
     # ensure motion labels and functionals match:
     if len(self.motion_labels) != len(self.func_names):
         print('\nWARNING: Motion labels not equal to number of functionals.\n')
     else:
         for i,(label,epi) in enumerate(zip(self.motion_labels,self.func_names)):
             # clean out motion files:
             general_cleaner(label,0)
             general_cleaner(epi+suffix_out,1)
             # run 3dvolreg for each functional:
             shell_command(['3dvolreg','-Fourier','-twopass','-prefix',epi+suffix_out,'-base', \
                              '3','-dfile',label+'.1D',epi+suffix_in+'+orig'])
     self.corrected_motion = True
     return suffix_out
Example #9
0
 def __lucas_3dtcat(self,
                    pfiles_trs,
                    dset_names,
                    nslices,
                    isvalues,
                    tr_time,
                    leadin,
                    leadout,
                    spiral=True,
                    suffix_out='_crop'):
     for group, name in zip(pfiles_trs, dset_names):
         catcmd = ['3dTcat', '-prefix', name + suffix_out]
         for i, [pfile, ntr] in enumerate(group):
             if spiral:
                 shell_command(['sprlioadd','-0','-m','0',pfile,name+str(i),\
                                str(ntr),str(nslices)])
             general_cleaner(name + str(i), 1)
             shell_command(['to3d','-epan','-prefix',name+str(i),\
                            '-xFOV','120R-120L','-yFOV','120A-120P',\
                            '-zSLAB',str(isvalues[0])+'I-'+str(isvalues[1])+'S',\
                            '-time:tz',str(ntr),str(nslices),str(tr_time)+'s',\
                            'seqplus','3D:0:0:64:64:'+str(ntr*nslices)+':'+name+str(i)])
             general_cleaner(name + str(i), 0)
             general_cleaner(name + str(i) + suffix_out, 1)
             shell_command(['3dTcat','-prefix',name+str(i)+suffix_out,\
                            name+str(i)+'orig['+str(leadin)+'..'+str(ntr+1-leadout)+']'])
             general_cleaner(name + str(i), 1)
             catcmd.extend([name + str(i) + suffix_out + '+orig'])
         shell_command(catcmd)
     return suffix_out
Example #10
0
 def __runto3d(self,dicomdir,prefix='',keepfiles=True,dicomprefix='I*',movedir='../../'):
     basedir = os.getcwd()
     os.chdir(dicomdir)
     if not prefix: print 'ERROR: no prefix specified. Will now crash...\n'
     general_cleaner(prefix,1)
     shell_command(['to3d','-prefix',prefix,dicomprefix])
     headerinfo = shell_command(['3dinfo',prefix+'+orig'],ioflag=1)
     if keepfiles:
         shutil.move(prefix+'+orig.HEAD',movedir)
         shutil.move(prefix+'+orig.BRIK',movedir)
     else:
         general_cleaner(prefix,1)
     os.chdir(basedir)
     return headerinfo
Example #11
0
 def highpass_filter(self,
                     dset_names=[],
                     suffix_in='n',
                     suffix_out='f',
                     highpass_val=.011):
     for i, epi in enumerate(dset_names):
         general_cleaner(epi + suffix_out, 1)
         shell_command([
             '3dFourier', '-prefix', epi + suffix_out, '-highpass',
             str(highpass_val), epi + suffix_in + '+orig'
         ])
     return {
         'dset_out': [(x + suffix_out + '+orig') for x in dset_names],
         'suffix_out': suffix_out
     }
Example #12
0
 def blur_functionals(self,
                      dset_names=[],
                      suffix_in='m',
                      suffix_out='b',
                      kernel=4):
     for epi in dset_names:
         general_cleaner(epi + suffix_out, 1)
         shell_command([
             '3dmerge', '-prefix', epi + suffix_out, '-1blur_fwhm',
             str(kernel), '-doall', epi + suffix_in + '+orig'
         ])
     return {
         'dset_out': [(x + suffix_out + '+orig') for x in dset_names],
         'suffix_out': suffix_out
     }
Example #13
0
    def output_nii(self):

        output_path = os.path.join(self.save_dir,self.output_filename)
        
        if self.use_mask:
            newnii = nib.Nifti1Image(self.solution_shaped,self.mask_affine)
        else:
            newnii = nib.Nifti1Image(self.solution_shaped,self.raw_affine)
            
        general_cleaner(output_path+'.nii',0)
        general_cleaner(output_path,1)
        newnii.to_filename(output_path+'.nii')
        #EXTRA:
        shell_command(['3dcopy',output_path+'.nii',output_path])
        shell_command(['adwarp','-apar',os.path.join(self.save_dir,'TT_N27+tlrc'),'-dpar',output_path+'+orig','-overwrite'])
        self.output_complete = True
Example #14
0
    def command(self):
        for dset in self.dset_labels:
            shell_command(['3dAFNItoNIFTI','-prefix',dset,dset+self.afni_format])
        return {'dset_out':[(x+'.nii') for x in self.dset_labels]}

        
        
        
        
        
        
        
        
        
        
        
        
Example #15
0
 def command(self):
     currentdir = os.getcwd()
     for epi in self.dset_labels:
         os.chdir('../'+self.scripts_dir)
         if not os.path.exists('./talairach_mask+tlrc.HEAD'):
             shutil.copy(self.talairach_path+'.HEAD','./'+self.talairach_path.split('/')[-1]+'.HEAD')
             shutil.copy(self.talairach_path+'.BRIK.gz','./'+self.talairach_path.split('/')[-1]+'.BRIK.gz')
             shell_command(['3dresample','-dxyz',str(self.talairach_dxyz),str(self.talairach_dxyz),
                            str(talairach_dxyz),'-prefix','talairach_resamp','-inset',
                            talairach_path.split('/')[-1]])
             shell_command(['3dAutomask','-prefix','talairach_mask','-clfrac','0.1','talairach_resamp+tlrc'])
             shell_command(['3dAFNItoNIFTI','-prefix','talairach_mask','talairach_mask+tlrc'])
         os.chdir(currentdir)
         general_cleaner(epi+self.suffix_out,1)
         shell_command(['3dcalc','-a',epi+self.suffix_in+'+tlrc','-b',
                        '../'+self.scripts_dir+'/talairach_mask+tlrc',
                        '-expr', 'a*step(b)','-prefix',epi+self.suffix_out])
         shell_command(['3dAFNItoNIFTI','-prefix',epi+self.suffix_out,epi+self.suffix_out+'+tlrc'])
     return {'dset_out':[(x+suffix_out) for x in dset_labels],'suffix_out':suffix_out}
Example #16
0
 def mask_warped_functionals(self,dset_names=[],scripts_dir=[],talairach_path=[],
                             talairach_dxyz=[],suffix_in='f',suffix_out='_masked'):
     currentdir = os.getcwd()
     for epi in dset_names:
         os.chdir('../'+scripts_dir)
         if not os.path.exists('./talairach_mask+tlrc.HEAD'):
             shutil.copy(talairach_path+'.HEAD','./'+talairach_path.split('/')[-1]+'.HEAD')
             shutil.copy(talairach_path+'.BRIK.gz','./'+talairach_path.split('/')[-1]+'.BRIK.gz')
             shell_command(['3dresample','-dxyz',str(talairach_dxyz),str(talairach_dxyz), \
                              str(talairach_dxyz),'-prefix','talairach_resamp','-inset', \
                              talairach_path.split('/')[-1]])
             shell_command(['3dAutomask','-prefix','talairach_mask','-clfrac','0.1','talairach_resamp+tlrc'])
             shell_command(['3dAFNItoNIFTI','-prefix','talairach_mask','talairach_mask+tlrc'])
         os.chdir(currentdir)
         general_cleaner(epi+suffix_out,1)
         shell_command(['3dcalc','-a',epi+suffix_in+'+tlrc','-b','../'+scripts_dir+'/talairach_mask+tlrc',
                        '-expr', 'a*step(b)','-prefix',epi+suffix_out])
         shell_command(['3dAFNItoNIFTI','-prefix',epi+suffix_out,epi+suffix_out+'+tlrc'])
     return {'dset_out':[(x+suffix_out+'tlrc') for x in dset_names],'suffix_out':suffix_out}
Example #17
0
 def __parse_psizes(self,pfiles):
     sizes = []
     for file in pfiles:
         size = shell_command(['du','-b',file],ioflag=1)
         size = size.strip(' \n\t')
         sizes.append([file,int(size[0])])
     # calculate TR from filesize + hardcoded bytes per TR:
     for i in range(len(sizes)):
         sizes[i][1] = int(math.floor(sizes[i][1]/self.tr_bytes))
     return sizes
Example #18
0
 def mask(self,suffix_in='f',suffix_out='_masked'):
     print os.getcwd()
     currentdir = os.getcwd()
     for epi in self.func_names:
         os.chdir('../'+self.scripts_dir)
         if not os.path.exists('./talairach_mask+tlrc.HEAD'):
             shutil.copy(self.talairach_path+'.HEAD','./'+self.talairach_path.split('/')[-1]+'.HEAD')
             shutil.copy(self.talairach_path+'.BRIK.gz','./'+self.talairach_path.split('/')[-1]+'.BRIK.gz')
             shell_command(['3dresample','-dxyz',str(self.talairach_dxyz),str(self.talairach_dxyz), \
                              str(self.talairach_dxyz),'-prefix','talairach_resamp','-inset', \
                              self.talairach_path.split('/')[-1]])
             shell_command(['3dAutomask','-prefix','talairach_mask','-clfrac','0.1','talairach_resamp+tlrc'])
             shell_command(['3dAFNItoNIFTI','-prefix','talairach_mask','talairach_mask+tlrc'])
         os.chdir(currentdir)
         general_cleaner(epi+suffix_out,1)
         shell_command(['3dcalc','-a',epi+suffix_in+'+tlrc','-b','../'+self.scripts_dir+'/talairach_mask+tlrc', \
                          '-expr', 'a*step(b)','-prefix',epi+suffix_out])
         shell_command(['3dAFNItoNIFTI','-prefix',epi+suffix_out,epi+suffix_out+'+tlrc'])
     self.masked = True
     return suffix_out
Example #19
0
 def convert_dset_to_nifti(self,dset_in=[]):
     for dset in dset_in:
         shell_command(['3dAFNItoNIFTI','-prefix',dset[:-5],dset])
     return {'dset_out':[(x[:-5]+'.nii') for x in dset_in]}
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
Example #20
0
 def reconstruct_funcs_cni(self,
                           dset_names=[],
                           raw_funcs=[],
                           leadin=[],
                           leadouts=[]):
     general_cleaner(dset_names, 1)
     if len(raw_funcs) != len(dset_names):
         print(
             '\nWARNING: Functional labels not equal to number of functionals.\n'
         )
     else:
         for i, (name, raw) in enumerate(zip(dset_names, raw_funcs)):
             if type(raw) == type([]):
                 for j, nraw in enumerate(raw):
                     shell_command([
                         '3dTcat', '-prefix', name + str(j), nraw + '[' +
                         str(leadin) + '..' + str(leadouts[i][j]) + ']'
                     ])
                 cat = [(name + str(j) + '+orig') for j in range(len(raw))]
                 cmd = ['3dTcat', '-prefix', name]
                 cmd = cmd.extend(cat)
                 shell_command(cmd)
             elif os.path.exists('./' + raw):
                 shell_command([
                     '3dTcat', '-prefix', name,
                     raw + '[' + str(leadin) + '..' + str(leadouts[i]) + ']'
                 ])
     return {
         'dset_out': [(x + '+orig') for x in dset_names],
         'suffix_out': ''
     }
Example #21
0
 def normalize_functionals(self,dset_names=[],suffix_in='b',suffix_out='n',calc_precision='float'):
     for i,epi in enumerate(dset_names):
         general_cleaner(epi+suffix_out,1)
         general_cleaner(epi+'_average',1)
         shell_command(['3dTstat','-prefix',epi+'_average',epi+suffix_in+'+orig'])
         shell_command(['3drefit','-abuc',epi+'_average+orig'])
         shell_command(['3dcalc','-datum',calc_precision,'-a',epi+suffix_in+'+orig',
                        '-b',epi+'_average+orig','-expr','((a-b)/b)*100',
                        '-prefix',epi+suffix_out])
     return {'dset_out':[(x+suffix_out+'+orig') for x in dset_names],'suffix_out':suffix_out}
Example #22
0
 def command(self):
     for i,epi in enumerate(self.dset_labels):
         general_cleaner(epi+self.suffix_out,1)
         general_cleaner(epi+'_average',1)
         shell_command(['3dTstat','-prefix',epi+'_average',epi+self.suffix_in+'+orig'])
         shell_command(['3drefit','-abuc',epi+'_average+orig'])
         shell_command(['3dcalc','-datum',self.calc_precision,'-a',epi+self.suffix_in+'+orig',
                        '-b',epi+'_average+orig','-expr','((a-b)/b)*100',
                        '-prefix',epi+self.suffix_out])
     return {'dset_out':[(x+self.suffix_out) for x in self.dset_labels],'suffix_out':self.suffix_out}
Example #23
0
 def normalize(self,suffix_in='m',suffix_out='n',calc_precision='float'):
     for i,epi in enumerate(self.func_names):
         general_cleaner(epi+suffix_out,1)
         general_cleaner(epi+'_average',1)
         shell_command(['3dTstat','-prefix',epi+'_average',epi+suffix_in+'+orig'])
         shell_command(['3drefit','-abuc',epi+'_average+orig'])
         shell_command(['3dcalc','-datum',calc_precision,'-a',epi+suffix_in+'+orig',
                        '-b',epi+'_average+orig','-expr','((a-b)/b)*100',
                        '-prefix',epi+suffix_out])
     self.normalized = True
     return suffix_out
Example #24
0
 def commands(self):
     general_cleaner(self.dset_labels,1)
     if len(self.raw_funcs) != len(self.dset_labels):
         print('\nWARNING: Functional labels not equal to number of functionals.\n')
     else:
         for i,(name,raw) in enumerate(zip(self.dset_labels,self.raw_funcs)):
             if type(raw) == type([]):
                 for j,nraw in enumerate(raw):
                     shell_command(['3dTcat','-prefix',name+str(j),nraw+'['+str(self.leadin)+'..'+str(self.leadouts[i][j])+']'])
                 cat = [(name+str(j)+'+orig') for j in range(len(raw))]
                 cmd = ['3dTcat','-prefix',name]
                 cmd = cmd.extend(cat)
                 shell_command(cmd)
             elif os.path.exists('./'+raw):
                 shell_command(['3dTcat','-prefix',name,raw+'['+str(self.leadin)+'..'+str(self.leadouts[i])+']'])
Example #25
0
 def reconstruct_funcs(self):
     general_cleaner(self.func_names,1)
     if self.data_type == 'cni':
         if not self.raw_funcs:
             self.raw_funcs = self.__cni_find_raws(self.func_scan_nums)
             pprint(self.raw_funcs)
         if len(self.raw_funcs) != len(self.func_names):
             print('\nWARNING: Functional labels not equal to number of functionals.\n')
         else:
             for i,(name,raw) in enumerate(zip(self.func_names,self.raw_funcs)):
                 if type(raw) == type([]):
                     for j,nraw in enumerate(raw):
                         shell_command(['3dTcat','-prefix',name+str(j),nraw+'['+str(self.leadin)+'..'+str(self.leadouts[i][j])+']'])
                     cat = [(name+str(j)+'+orig') for j in range(len(raw))]
                     cmd = ['3dTcat','-prefix',name]
                     cmd = cmd.extend(cat)
                     shell_command(cmd)
                 elif os.path.exists('./'+raw):
                     shell_command(['3dTcat','-prefix',name,raw+'['+str(self.leadin)+'..'+str(self.leadouts[i])+']'])
                 elif self.raw_funcs_alt:
                     cur_alt = self.raw_funcs_alt[i]
                     if os.path.exists('./'+cur_alt):
                         shell_command(['3dTcat','-prefix',name,cur_alt+'['+str(self.leadin)+'..'+str(self.leadouts[i])+']'])
                     else:
                         print 'ERROR: No alternate found, original not found.\n'
                 else:
                     print 'ERROR: original raw not found, no alternates defined.\n'
     elif self.data_type == 'lucas':
         allpfiles = glob.glob('*.mag')
         pfile_sizes = self.__parse_psizes(allpfiles)
         if not len(self.func_names) == len(self.pfiles_by_func):
             print 'ERROR: functional name labels and pfiles by functional index do not match.\n'
         else:
             pfiles_trs = self.__assign_pfiles(self,pfile_sizes)
             setattr(self,'pfiles_trs',pfiles_trs)
             self.__lucas_3dtcat()
             self.__lucas_3dtshift()
     self.reconstructed_funcs = True
def rip_funcs_info(funcs):
    trs = []
    slices = []
    for func in funcs:
        if type(func) == type([]):
            [sub_trs,sub_slices] = rip_funcs_info(func)
            trs.append(sub_trs)
            slices.append(sub_slices)
        else:
            info = shell_command(['3dinfo',func],ioflag=True)
            linedinfo = info.split('\n')
            rip_line = []
            rip_parse = []
            for line in linedinfo:
                if line.find('Number of time steps') != -1:
                    rip_line = line.split(' ')
            for item in rip_line:
                if len(item) != 0:
                    rip_parse.append(item)
            trs.append(int(rip_parse[5]))
            slices.append(int(rip_parse[17]))
    return [trs,slices]
Example #27
0
 def warp_functionals(self,suffix_in='f'):
     for i,epi in enumerate(self.func_names):
         shell_command(['adwarp','-apar',self.anat_name+'+tlrc','-dpar',epi+suffix_in+'+orig', \
                          '-dxyz',str(self.talairach_dxyz)])
     self.warped_functionals = True
     return suffix_in
Example #28
0
 def warp_anatomical(self, anat_name=[], talairach_path=[]):
     shell_command(['@auto_tlrc','-warp_orig_vol','-suffix','NONE','-base', \
                     talairach_path,'-input',anat_name+'+orig.'])
     return {'dset_out': anat_name + '+tlrc'}
Example #29
0
 def warp_anatomical(self):
     # tailarach warp that sucker:
     shell_command(['@auto_tlrc','-warp_orig_vol','-suffix','NONE','-base', \
                     self.talairach_path,'-input',self.anat_name+'+orig.'])
     self.warped_anatomical = True
Example #30
0
 def reconstruct_anat_cni(self, anat_name=[], raw_anat=[]):
     general_cleaner(anat_name, 1)
     shell_command(['3dcopy', raw_anat, anat_name])
     return {'dset_out': anat_name + '+orig'}