| 0 | 1 #!/usr/bin/env python | 
|  | 2 | 
|  | 3 import argparse | 
|  | 4 import os | 
|  | 5 from os.path import join as j | 
|  | 6 from itertools import zip_longest | 
|  | 7 | 
|  | 8 | 
|  | 9 def setup(base_dir, names=[], fwds=[], revs=[], extension='vcf', pattern="{name}.{orient}.{ext}"): | 
|  | 10     if fwds and revs and names and len(fwds) != len(revs) != len(names): | 
|  | 11         raise ValueError('number of forward reads must equal number of reverse reads and names') | 
|  | 12     elif len(fwds) != len(names) or not fwds or not names: | 
|  | 13         raise ValueError('number of forward reads must equal number of names') | 
|  | 14     with open(j(base_dir, 'snp-unwind.sh'), 'w') as unwind: | 
|  | 15         for i, (name, fwd, rev) in enumerate(zip_longest(names, fwds, revs)): | 
|  | 16             dir = j(base_dir, str(i)) | 
|  | 17             sample_dir = j(dir, name) | 
|  | 18             os.makedirs(sample_dir) | 
|  | 19             target_f = j(sample_dir, pattern.format(name=name, orient=1, ext=extension)) | 
|  | 20             if rev: | 
|  | 21                 target_r = j(sample_dir, pattern.format(name=name, orient=2, ext=extension)) | 
|  | 22             os.symlink(fwd, target_f) | 
|  | 23             if rev: | 
|  | 24                 os.symlink(rev, target_r) | 
|  | 25             print(sample_dir) | 
|  | 26             if rev: | 
|  | 27                 unwind.write('unlink {}\n'.format(target_r)) | 
|  | 28             unwind.write('unlink {}\n'.format(target_f)) | 
|  | 29             unwind.write('rmdir {}\n'.format(sample_dir)) | 
|  | 30         unwind.write('rmdir {}\n'.format(dir)) | 
|  | 31 | 
|  | 32 | 
|  | 33 if __name__ == '__main__': | 
|  | 34     parser = argparse.ArgumentParser(description="set up vcf symlink directories for snp-pipeline") | 
|  | 35     parser.add_argument('base_dir') | 
|  | 36     parser.add_argument('-n', dest='names', type=str, action='append', default=[]) | 
|  | 37     parser.add_argument('-f', dest='fwds', type=str, action='append', default=[]) | 
|  | 38     parser.add_argument('-r', dest='revs', type=str, action='append', default=[]) | 
|  | 39     parser.add_argument('-e', dest='extension', default='vcf') | 
|  | 40     parser.add_argument('-p', dest='pattern', default='{name}.{orient}.{ext}') | 
|  | 41     params = parser.parse_args() | 
|  | 42     setup(**vars(params)) |