Advertisement
Guest User

Untitled

a guest
May 29th, 2015
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.72 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Apr 7 11:49:45 2015
  4.  
  5. @author: jgolchert
  6. """
  7. #Run in terminal before staring script
  8. #export AFNI_1D_ZERO_TEXT=YES
  9.  
  10. import os # system functions\n",
  11. import nipype.interfaces.freesurfer as fs # freesurfer\n",
  12. import nipype.interfaces.io as nio # i/o routines\n",
  13. import nipype.interfaces.utility as util # utility\n",
  14. import nipype.pipeline.engine as pe # pypeline engine\n",
  15. import nipype.interfaces.fsl as fsl
  16. import nipype.interfaces.afni as afni
  17.  
  18. #specify ROI-coordinates
  19. rois = []
  20.  
  21. #test Rois
  22. #rois.append((30,-21,-18))
  23. rois.append((2,-52,28))
  24. #rois.append((30,-21,-18))
  25.  
  26.  
  27. #DMN_ROIs (Andrews-Hanna, 2010; Neuron), Regions are 8mm spheres
  28.  
  29. #PCC - aMPFCcore
  30. #rois.append((-6,52,-2)) #aMPFC
  31. #rois.append((6,52,-2))
  32. #rois.append((-8,-56,26)) #PCC
  33. #rois.append((8,-56,26))
  34.  
  35. #dMPFC subsytsem
  36. #rois.append((0,52,26)) #dMPFC
  37. #rois.append((-54,-54,28)) TPJ
  38. #rois.append((54,-54,28))
  39. #rois.append((-60,-24,-18)) LTC
  40. #rois.append((60,-24,-18))
  41. #rois.append((-50,14,-40)) Temporal Pole
  42. #rois.append((50,14,-40))
  43.  
  44. #MTL subsystem
  45. #rois.append((0,26,-18)) #vMPFC
  46. #rois.append((-44,-74,32)) #pIPL
  47. #rois.append((44,-74,32))
  48. #rois.append((-14,-52,8)) retrosplenial cortex
  49. #rois.append((14,-52,8))
  50. #rois.append((-28,-40,-12)) parahipp. cortex
  51. #rois.append((28,-40,-12))
  52. #rois.append((-22,-20,-26)) Hippocamp.
  53. #rois.append((22,-20,-26)
  54.  
  55. #subjects=['00796']
  56. # read in subjects
  57. sublist = '/scr/ilz2/LEMON_LSD/all_lsd_rest1a.txt'
  58. with open(sublist, 'r') as f:
  59. subjects = [line.strip() for line in f]
  60. print subjects
  61.  
  62. sess = ['rest1a','rest1b','rest2a','rest2b']
  63. workingdir = "/home/raid1/margulies/working_dir/"
  64. resultsdir = "/home/raid1/margulies/results_dir/"
  65.  
  66. wf = pe.Workflow(name="main")
  67. wf.base_dir = workingdir
  68. wf.config['execution']['crashdump_dir'] = wf.base_dir + "crash_files"
  69.  
  70. roi_infosource = pe.Node(util.IdentityInterface(fields=['roi']), name="roi_infosource")
  71. roi_infosource.iterables = ('roi', rois)
  72.  
  73. subjects_infosource = pe.Node(interface=util.IdentityInterface(fields=['subject_id']), name="subjects_infosource")
  74. subjects_infosource.iterables = ("subject_id", subjects)
  75.  
  76. sess_infosource = pe.Node(interface=util.IdentityInterface(fields=['sess_id']), name="sess_infosource")
  77. sess_infosource.iterables = ("sess_id", sess)
  78.  
  79. ds = pe.Node(nio.DataSink(), name="datasink")
  80. #ds.run_without_submitting = True",
  81. ds.inputs.base_directory = resultsdir
  82.  
  83. datasource = pe.Node(nio.DataGrabber(infields=['subject_id', 'sess_id'], outfields = ['EPI_bandpassed']), name="datasource") #grabs data
  84. datasource.inputs.base_directory = '/scr/ilz2/LEMON_LSD/'
  85. datasource.inputs.template = '%s/preprocessed/lsd_resting/%s/rest_preprocessed2mni.nii.gz'
  86. datasource.inputs.template_args['EPI_bandpassed'] = [['subject_id', 'sess_id']]
  87. datasource.inputs.sort_filelist = True
  88. wf.connect(subjects_infosource, "subject_id", datasource, "subject_id")
  89. wf.connect(sess_infosource, "sess_id", datasource, "sess_id")
  90.  
  91. automask = pe.Node(interface=afni.Automask(), name='automask')
  92. automask.inputs.dilate = 1
  93. automask.inputs.outputtype = "NIFTI_GZ"
  94. wf.connect(datasource, 'EPI_bandpassed', automask, 'in_file')
  95. wf.connect(automask, 'out_file', ds, '@automask')
  96.  
  97. #extract rois with spheres
  98. sphere = pe.Node(afni.Calc(), name="sphere")
  99. sphere.inputs.in_file_a = fsl.Info.standard_image('/usr/share/fsl/data/standard/MNI152_T1_2mm_brain.nii.gz')
  100. sphere.inputs.outputtype='NIFTI_GZ'
  101.  
  102. def roi2exp(coord):
  103. radius = 4
  104. return "step((%d*%d)-(x+%d)*(x+%d)-(y+%d)*(y+%d)-(z+%d)*(z+%d))" %(radius, radius, coord[0], coord[0], coord[1], coord[1], -coord[2], -coord[2])
  105.  
  106. def roi2name(coord):
  107. return 'roi_sphere_%s_%s_%s.nii.gz'%(str(coord[0]), str(coord[1]), str(coord[2]))
  108.  
  109. wf.connect(roi_infosource, ("roi", roi2exp), sphere, "expr")
  110. wf.connect(roi_infosource, ("roi", roi2name), sphere,"out_file")
  111. wf.connect(sphere, "out_file", ds, "@sphere")
  112.  
  113. extract_timeseries = pe.Node(afni.Maskave(), name="extract_timeseries")
  114. extract_timeseries.inputs.quiet = True
  115. wf.connect(sphere, "out_file", extract_timeseries, "mask")
  116. wf.connect(datasource, 'EPI_bandpassed', extract_timeseries, "in_file")
  117.  
  118. correlation_map = pe.Node(afni.Fim(), name="correlation_map")
  119. correlation_map.inputs.out = "Correlation"
  120. correlation_map.inputs.outputtype = "NIFTI_GZ"
  121. correlation_map.inputs.out_file = "corr_map.nii.gz"
  122. correlation_map.inputs.fim_thr = 0.0001
  123. wf.connect(extract_timeseries, "out_file", correlation_map, "ideal_file")
  124. wf.connect(datasource, 'EPI_bandpassed', correlation_map, "in_file")
  125. def add_arg_fim_mask(input):
  126. return ('-mask %s' % input)
  127. wf.connect(automask, ('out_file', add_arg_fim_mask), smooth, 'args')
  128.  
  129. z_trans = pe.Node(interface=afni.Calc(), name='z_trans')
  130. z_trans.inputs.expr = 'log((1+a)/(1-a))/2'
  131. z_trans.inputs.outputtype = 'NIFTI_GZ'
  132. wf.connect(correlation_map, "out_file", z_trans, "in_file_a")
  133. wf.connect(z_trans, 'out_file', ds, "@z_trans")
  134.  
  135. # Smoothing now happens *after* correlation map is caluclated
  136. smooth = pe.Node(fsl.maths.IsotropicSmooth(), name = "smooth")
  137. smooth.inputs.fwhm = 6.0
  138. smooth.inputs.out_file = "corr_map_smoothed.nii.gz"
  139. def add_arg_smooth(input):
  140. return ('-mas %s' % input)
  141. wf.connect(automask, ('out_file', add_arg_smooth), smooth, 'args')
  142. wf.connect(z_trans, 'out_file', smooth, "in_file")
  143. wf.connect(smooth, 'out_file', ds, "@smooth")
  144.  
  145. # take mean of correlation maps from 4 runs
  146. def format_roi(roi_str):
  147. import string
  148. valid_chars = "-_.%s%s" % (string.ascii_letters, string.digits)
  149. return ''.join(c for c in str(roi_str).replace(",",".") if c in valid_chars)
  150.  
  151. func_datasource = pe.Node(nio.DataGrabber(infields=['subject_id', 'roi'], outfields = ['corr_maps']), name="func_datasource")
  152. func_datasource.inputs.base_directory = workingdir
  153. func_datasource.inputs.template = 'main/_roi_%s/_sess_id_*/_subject_id_%s/smooth/corr_map_smoothed.nii.gz'
  154. func_datasource.inputs.template_args['corr_maps'] = [['roi', 'subject_id']]
  155. func_datasource.inputs.sort_filelist = True
  156. wf.connect(roi_infosource, ("roi", format_roi), func_datasource, "roi")
  157. wf.connect(subjects_infosource, 'subject_id', func_datasource, "subject_id")
  158.  
  159. merge_conn_maps = pe.Node(fsl.Merge(dimension='t'), name="merge_conn_maps")
  160. wf.connect(func_datasource, 'corr_maps', merge_conn_maps, 'in_files')
  161.  
  162. mean_conn_map = pe.Node(fsl.MeanImage(dimension="T"), name="mean_conn_map")
  163. wf.connect(merge_conn_maps, 'merged_file', mean_conn_map, 'in_file')
  164. wf.connect(mean_conn_map, 'out_file', ds, "mean_conn_maps")
  165.  
  166. std_conn_maps = pe.Node(fsl.ImageMaths(op_string = "-Tstd"),name="std_conn_maps")
  167. wf.connect(merge_conn_maps, 'merged_file', std_conn_maps, 'in_file')
  168. wf.connect(std_conn_maps, 'out_file', ds, "std_conn_maps")
  169.  
  170. #wf.write_graph(dotfilename='/scr/lahn2/jgolchert/LSD/MW_impulsivity/graph.dot', graph2use='colored', format ='pdf', simple_form=True)
  171. wf.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement