def test_write(self, tmpdir): yaml_conf = tmpdir / "conf.yml" yaml_conf.write(r""" numThreads: 4 fastaFiles: [test1.fasta,test2.fasta] parseRules: identifierParseRule: ^>.*\|(.*)\|.*$ paramGroups: - files: [Test1.mzXML,Test2.mzXML] # paramGroup 0 fixedModifications: [mod1] variableModifications: [mod2,mod3] maxMissedCleavages: 1 """) mqpar_out = tmpdir / "mqpar.xml" t = MQParam(TEMPLATE_PATH, yaml=str(yaml_conf)) t.write(str(mqpar_out)) test = ET.parse(str(mqpar_out)).getroot() assert test.find('numThreads').text == '4' assert test.find('fastaFiles')[1].find( 'identifierParseRule').text == '^>.*\\|(.*)\\|.*$' assert [ el.text for el in test.find('parameterGroups')[0].find( 'variableModifications') ] == ['mod2', 'mod3']
def test_fasta_files(self): t = MQParam(TEMPLATE_PATH) t.add_fasta_files(('test1', 'test2'), parse_rules={'identifierParseRule': r'>([^\s]*)'}) assert len(t._root.find('fastaFiles')) == 2 assert t._root.find('fastaFiles')[0].find("fastaFilePath").text == 'test1' assert t._root.find('fastaFiles')[0].find("identifierParseRule").text == '>([^\\s]*)'
def test_add_infiles(self): t = MQParam(TEMPLATE_PATH) t.add_infiles([('/path/Test1.mzXML', '/path/Test2.mzXML'), ('/path/Test3.mzXML', '/path/Test4.mzXML')]) assert [e.text for e in t._root.find('filePaths')] == ['/path/Test1.mzXML', '/path/Test2.mzXML', '/path/Test3.mzXML', '/path/Test4.mzXML'] assert [e.text for e in t._root.find('paramGroupIndices')] == ['0', '0', '1', '1'] assert t[1]
def test_exp_design(self, tmpdir): # default experimental design when None is specified t = MQParam(TEMPLATE_PATH) design = t._make_exp_design((0, 0), ('./Test1.mzXML', './Test2.mzXML')) assert design['Name'] == ('./Test1.mzXML', './Test2.mzXML') assert design['Fraction'] == ('32767', '32767') # valid experimental design e1 = tmpdir / "e1.txt" e1.write( 'Name\tExperiment\tFraction\tPTM\nTest1\te1\nTest2\te1\t\tfalse') t.exp_design = str(e1) design = t._make_exp_design((0, 0), ('./Test1.mzXML', './Test2.mzXML')) assert design == { 'Name': ['./Test1.mzXML', './Test2.mzXML'], 'Experiment': ['e1', 'e1'], 'Fraction': ['32767', '32767'], 'PTM': ['False', 'false'], 'paramGroup': (0, 0) } # invalid header e2 = tmpdir / "e2.txt" e2.write('Name\tExperiment\tFraction\tPTM\tparamGroup\n') t.exp_design = str(e2) with pytest.raises(Exception): design = t._make_exp_design(('./Test2.mzXML', ), (0, ))
def test_simple_param(self): t = MQParam(TEMPLATE_PATH) t.set_simple_param('minUniquePeptides', 4) assert t._root.find('.minUniquePeptides').text == '4' with pytest.raises(ValueError): t.set_simple_param('foo', 3)
def test_from_yaml(self, tmpdir): conf1 = tmpdir / "conf1.yml" conf1.write(r""" numThreads: 4 fastaFiles: [test1.fasta,test2.fasta] parseRules: identifierParseRule: ^>.*\|(.*)\|.*$ paramGroups: - files: [Test1.mzXML,Test2.mzXML] # paramGroup 0 fixedModifications: [mod1,mod2] lfqMode: 1 - files: [Test3.mzXML,Test4.mzXML] # paramGroup 1 labelMods: - [] - [] - [label1,label2] """) t = MQParam(TEMPLATE_PATH) t._from_yaml(str(conf1)) assert t['numThreads'] == '4' assert [child.text for child in t[1]._root.find('labelMods')] == ['', 'label1;label2']
def test_translate(self): t = MQParam(TEMPLATE_PATH) t.add_infiles([('/posix/path/to/Test1.mzXML', '/posix/path/to/Test2.mzXML'), ('/path/dummy.mzXML',)]) # mqparam is not designed for windows t._root.find('filePaths')[2].text = r'D:\Windows\Path\Test3.mzXML' t.translate(('/galaxy/working/Test3.mzXML', '/galaxy/working/Test1.mzXML', '/galaxy/working/Test2.mzXML', '/galaxy/working/Test4.mzXML')) assert [e.text for e in t._root.find('filePaths')] == ['/galaxy/working/Test1.mzXML', '/galaxy/working/Test2.mzXML', '/galaxy/working/Test3.mzXML']
def test_validity_check(self): design = {'Name': ['Test1', 'Test2'], 'Fraction': ['2', 32767], 'PTM': ['False', 'False'], 'Experiment': ['e1', 'e1'], 'paramGroup': [0, 0]} assert MQParam._check_validity(design, 2) is None design['Name'][0] = None with pytest.raises(Exception): MQParam._check_validity(design, 2) design['Name'][0] = 'Test1' design['Experiment'][0] = '' with pytest.raises(ValueError): MQParam._check_validity(design, 2) design['Experiment'][0] = 'e1' design['Fraction'][0] = 'foo' with pytest.raises(ValueError): MQParam._check_validity(design, 2)
parser.add_argument('--version', '-v', help="""A version number. Raises exception if it doesn't match the MaxQuant version of the template. For usage in the Galaxy tool.""") # in case numThreads is a environment variable, otherwise it can be specified in the yaml file as well parser.add_argument('--num_threads', '-t', help="Number of threads to specify in mqpar.") args = parser.parse_args() # edit file names, working dir is unknown at the time of galaxy tool configfile creation if args.yaml: with open(args.yaml) as f: conf_dict = yaml.safe_load(f.read()) for n, pg in enumerate(conf_dict['paramGroups']): for num, fl in enumerate(pg['files']): if not fl.startswith('/'): conf_dict['paramGroups'][n]['files'][num] = os.path.join(os.getcwd(), fl) with open('yaml', 'w') as f: yaml.safe_dump(conf_dict, stream=f) args.yaml = 'yaml' kwargs = dict(yaml=args.yaml) if args.substitution_rx: kwargs['substitution_rx'] = args.substitution_rx mqparam = MQParam(args.template, args.exp_design, **kwargs) if args.version and mqparam.version != args.version: raise Exception('mqpar version is ' + mqparam.version + '. Tool uses version {}.'.format(args.version)) mqparam.set_simple_param('numThreads', args.num_threads) mqparam.write(args.mqpar_out if args.mqpar_out else 'mqpar.xml')
from mqparam import MQParam parser = argparse.ArgumentParser() arguments = ('--infiles', '--version', '--num_threads', '--substitution_rx', '--fasta_files', '--description_parse_rule', '--identifier_parse_rule', 'mqpar') for arg in arguments: parser.add_argument(arg) args = parser.parse_args() mqpar_out = os.path.join(os.getcwd(), 'mqpar.xml') infiles = [os.path.join(os.getcwd(), f) for f in args.infiles.split(',')] mqparam = MQParam(args.mqpar, None, substitution_rx=args.substitution_rx) if mqparam.version != args.version: raise Exception('mqpar version is ' + mqparam.version + '. Tool uses version {}.'.format(args.version)) mqparam.translate(infiles) mqparam.add_fasta_files(args.fasta_files.split(','), {'identifierParseRule': args.identifier_parse_rule, 'descriptionParseRule': args.description_parse_rule}) mqparam.set_simple_param('numThreads', args.num_threads) mqparam.write('mqpar.xml')
def test_version(self): t = MQParam(TEMPLATE_PATH) assert t._root.find('maxQuantVersion').text == '1.6.10.43'