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)