Mercurial > repos > galaxyp > maxquant
diff init.py @ 1:8bac3cc5c5de draft
planemo upload for repository https://github.com/galaxyproteomics/tools-galaxyp/tree/master/tools/maxquant commit ab4e4f1817080cbe8a031a82cb180610ff140847
author | galaxyp |
---|---|
date | Sat, 20 Jul 2019 05:01:05 -0400 |
parents | |
children | 175e062b6a17 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/init.py Sat Jul 20 05:01:05 2019 -0400 @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Initialize MaxQuant tool for use with a new version of +modifications/enzymes.xml. + +TODO: Append function: only add modifications that are not +already present, add modification entries to conda maxquant + +Authors: Damian Glaetzer <d.glaetzer@mailbox.org> + +Usage: init.py [-a] [-m MODS_FILE] [-e ENZYMES_FILE] +FILES are the modifications/enzymes.xml of MaxQuant, located at +<ANACONDA_DIR>/pkgs/maxquant-<VERSION>/bin/conf/. +(for conda installations) + +Updates modification parameters in macros.xml. +""" + +import argparse +import re +import xml.etree.ElementTree as ET +from xml.dom import minidom + + +def build_list(node, name, mod_list, append=False): + """Build the modifications list in macros.xml""" + node.clear() + node.tag = 'xml' + node.set('name', name) + for m in mod_list: + ET.SubElement(node, 'expand', attrib={'macro': 'mod_option', + 'value': m}) + + +parser = argparse.ArgumentParser() +parser.add_argument("-m", "--modifications", + help="modifications.xml of maxquant") +parser.add_argument("-e", "--enzymes", + help="enzymes.xml of maxquant") +args = parser.parse_args() + +if args.modifications: + mods_root = ET.parse(args.modifications).getroot() + + mods = mods_root.findall('modification') + standard_mods = [] + label_mods = [] + for m in mods: + if (m.findtext('type') == 'Standard' + or m.findtext('type') == 'AaSubstitution'): + standard_mods.append(m.get('title')) + elif m.findtext('type') == 'Label': + label_mods.append(m.get('title')) + +if args.enzymes: + enzymes_root = ET.parse(args.enzymes).getroot() + + enzymes = enzymes_root.findall('enzyme') + enzymes_list = [e.get('title') for e in enzymes] + +macros_root = ET.parse('./macros.xml').getroot() +for child in macros_root: + if child.get('name') == 'modification' and args.modifications: + build_list(child, 'modification', standard_mods) + elif child.get('name') == 'label' and args.modifications: + build_list(child, 'label', label_mods) + elif child.get('name') == 'proteases' and args.enzymes: + build_list(child, 'proteases', enzymes_list) + +rough_string = ET.tostring(macros_root, 'utf-8') +reparsed = minidom.parseString(rough_string) +pretty = reparsed.toprettyxml(indent=" ") +even_prettier = re.sub(r"\n\s+\n", r"\n", pretty) +with open('./macros.xml', 'w') as f: + print(even_prettier, file=f)