Created
August 7, 2015 21:56
-
-
Save chrismullins/d696005f6dc6fa69892c to your computer and use it in GitHub Desktop.
Separate filelist and roi_summary file into separate txt files.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import os | |
import sys | |
from itertools import izip | |
import collections | |
import errno | |
""" | |
This script takes two files: a list of form 'filename,slice#', and another | |
tab-delimited list of mean values for each ROI. Every line should line up. | |
""" | |
#--------------------------------------------------------------------------- | |
class ROIParser(argparse.ArgumentParser): | |
def error(self, message): | |
sys.stderr.write('error: %s\n' % message) | |
self.print_help() | |
sys.exit(2) | |
#--------------------------------------------------------------------------- | |
def mkdir_p(path): | |
"""Recursive directory creation function. | |
See http://stackoverflow.com/questions/600268/mkdir-p-functionality-in-python | |
""" | |
try: | |
os.makedirs(path) | |
except OSError as exc: # Python >2.5 | |
if exc.errno == errno.EEXIST and os.path.isdir(path): | |
pass | |
else: raise | |
#--------------------------------------------------------------------------- | |
def getFileNumber(filename): | |
import re | |
pos = filename.find("RestingState") | |
start = pos + len("RestingState") | |
ss = filename[start:] | |
# find first digit after RestingState in file | |
m = re.search("\d", ss) | |
return ss[m.start():m.start()+3] | |
#--------------------------------------------------------------------------- | |
def file_len(fname): | |
with open(fname) as f: | |
for i, l in enumerate(f): | |
pass | |
return i + 1 | |
#--------------------------------------------------------------------------- | |
def ReadData(filenamesFile=None, roiSummaryFile=None, roiNamesList=None): | |
if file_len(roiSummaryFile.name) != file_len(filenamesFile.name): | |
print("File line mismatch! ") | |
sys.exit(2) | |
fileList = [] | |
fileNameROIListDict = collections.defaultdict(list) | |
with open(filenamesFile.name) as fidList, open(roiSummaryFile.name) as fidSummary: | |
for fnItem, sumItem in izip(fidList, fidSummary): | |
roiList = [float(roi.lstrip().rstrip()) for roi in sumItem.split('\t')] | |
fileNameROIListDict[fnItem.lstrip().rstrip().split(',')[0]].append(roiList) | |
fileNameROINameDict = collections.defaultdict(dict) | |
for fname, timepointList in fileNameROIListDict.iteritems(): | |
for index, roiName in enumerate(roiNamesList): | |
fileNameROINameDict[fname][roiName] = [roiValueList[index] for roiValueList in timepointList] | |
mkdir_p("output") | |
for fname, roiDict in fileNameROINameDict.iteritems(): | |
for roiName, valList in roiDict.iteritems(): | |
with open("output/"+roiName+"_"+getFileNumber(os.path.basename(os.path.splitext(fname)[0]))+".txt", 'a') as outFile: | |
outFile.write("\n".join(map(str,valList))) | |
#--------------------------------------------------------------------------- | |
if __name__ == '__main__': | |
parser = ROIParser() | |
parser.add_argument("-f", "--fileList", dest="filenames", | |
required=True, type=argparse.FileType('r')) | |
parser.add_argument("-s", "--summary", dest="summary", | |
required=True, type=argparse.FileType('r')) | |
parser.add_argument('--roiNames', | |
type=str, default=None, | |
help='Comma separated list of ROI names. Example: --roiNames "insula,mpfc,striatum,precuneus"') | |
arguments = parser.parse_args(sys.argv[1:]) | |
roiNamesList = arguments.roiNames.split(',') | |
ReadData(filenamesFile=arguments.filenames, | |
roiSummaryFile=arguments.summary, | |
roiNamesList=roiNamesList) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment