Matrix Science header

config_quantitation.py

Example program for reading and manipulating the quantitation.xml file.

#!/usr/bin/python
##############################################################################
# file: config_quantitation.py                                               #
# 'msparser' toolkit example code                                            #
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1998-2010 Matrix Science Limited  All Rights Reserved.           #
#                                                                            #
##############################################################################
#     $Source: parser/examples/test_python/config_quantitation.py $  #
#     $Author: villek@matrixscience.com $                                                       #
#       $Date: 2018-07-30 16:23:53 +0100 $                                         #
#   $Revision: 1b450440f9c97e1e41d0fc6016a27d68951d4532 | MSPARSER_REL_2_8_1-0-gea32989045 $                                                         #
# $NoKeywords::                                                            $ #
##############################################################################

import msparser
import sys

if len(sys.argv) < 2 :
    print("""
The location of quantitation.xml file has to be specified as a parameter.
The location should either be the full path to the quantitation.xml file
or a URL to a Mascot server - e.g. http://mascot-server/mascot/cgi
""")
    sys.exit(1)

if len(sys.argv) < 3 :
    print("""
The location of schema file quantitation_XXX.xsd has to be specified as the
second parameter. The location should only be a full or relative path to the
quantitation_XXX.xsd file.
""")
    sys.exit(1)

# A sessionID can optionally be passed as the third parameter.
# This will only be required if the 'file' is a URL.
if len(sys.argv) > 3 :
    cs = msparser.ms_connection_settings()
    cs.setSessionID(sys.argv[3])
    file = msparser.ms_quant_configfile(sys.argv[1], sys.argv[2], cs)
else :
    file = msparser.ms_quant_configfile(sys.argv[1], sys.argv[2])

if not file.isValid() :
    print("There are errors. Cannot continue. The last error description:")
    print(file.getLastErrorString())
    sys.exit(1)

n = file.getNumberOfMethods()
print("There are %d quantitation methods available:" % n)

for i in range(n) :
    print(file.getMethodByNumber(i).getName())

# Validate the original document.
errs = file.validateDocument()
if errs :
    print("Initial document validation errors: %s" % errs)

# Now try to read in the schema file.
schemaFile = msparser.ms_xml_schema()
schemaFile.setFileName(sys.argv[2])
schemaFile.read_file()

if not schemaFile.isValid() :
    print("Errors while reading schema-file. The last error description: %s" % schemaFile.getLastErrorString())
    sys.exit(1)

# The document can be validated programmatically, but this is different from
# real validation against a schema. We'll validate each quantitation
# method separately.
for i in range(n) :
    # Shallow validation: only check the presence of required attributes and
    # elements.
    pMethod = file.getMethodByNumber(i)

    errs = pMethod.validateShallow(schemaFile)
    if errs :
        print("Shallow validation errors (method %s): %s" % (pMethod.getName(), errs))
        
    # Deep validation: check attributes and elements recursively applying basic
    # constraints.
    errs = pMethod.validateDeep(schemaFile)
    if errs :
        print("Deep validation errors (method %s): %s" % (pMethod.getName(), errs))
        
# We can validate objects as well. First, copy the first method from the
# original file (method "null").
myMethodInvalid = msparser.ms_quant_method(file.getMethodByNumber(0))
# And set an invalid name with less than allowed string length.
myMethodInvalid.setName("")

# First way: use shallow and deep validation as above.
errs = myMethodInvalid.validateShallow(schemaFile)
if errs :
    print("Shallow validation of a method: %s" % errs)

errs = myMethodInvalid.validateDeep(schemaFile)
if errs :
    print("Deep validation of a method: %s" % errs)

# Second way: use the schema object. This is equivalent to the previous
# two-step process as long as you pass 'true' as the second parameter
# for deep validation.

errs = schemaFile.validateComplexObject(myMethodInvalid, 1)
if errs :
    print("Deep validation using schema-object: %s" % errs)

# Third way: validate an attribute separately. Available validation methods
# are validateSimpleInteger(), validateSimpleDouble(), validateSimpleBool()
# and validateSimpleString().
errs = schemaFile.validateSimpleString(myMethodInvalid.getName(), myMethodInvalid.getNameSchemaType())
if errs :
    print("Attribute validation: %s" % errs)

# Fourth way: validate an entire document. For this, we need to create
# a new document and append the invalid method definition.
configFileInvalid = msparser.ms_quant_configfile()
configFileInvalid.appendMethod(myMethodInvalid)

errs = configFileInvalid.validateDocument()
if errs :
    print("Document validation errors: %s" % errs)

# The config file object itself stays valid, even if it has an invalid
# method definition.
if not configFileInvalid.isValid() :
    # Control flow never comes here!
    print("Errors in config file object. The last error description: %s" % configFileInvalid.getLastErrorString())
    
# The file can be saved even if it has invalid definitions. 
configFileInvalid.setFileName("quantitation_temp.xml")
configFileInvalid.save_file()

if not configFileInvalid.isValid() :
    print("Failed to save: %s" % configFileInvalid.getLastErrorString())


"""

Running the program as 

python config_quantitation.pl /usr/local/mascot/config/quantitation.xml /usr/local/mascot/html/xmlns/schema/quantitation_2/quantitation_2.xsd

will give the following output under Mascot Server 2.3 (depending on how
quantitation methods have been configured): 


There are 26 quantitation methods available:
None
iTRAQ 4plex
iTRAQ 8plex
TMT 6plex
TMT 2plex
18O multiplex
SILAC K+6 R+6 multiplex
IPTL (Succinyl and IMID) multiplex
ICPL duplex pre-digest [MD]
ICPL duplex post-digest [MD]
ICPL triplex pre-digest [MD]
18O corrected [MD]
15N Metabolic [MD]
15N + 13C Metabolic [MD]
SILAC K+6 R+10 [MD]
SILAC K+6 R+10 Arg-Pro [MD]
SILAC K+6 R+6 [MD]
SILAC R+6 R+10 [MD]
SILAC K+8 R+10 [MD]
SILAC K+4 K+8 R+6 R+10 [MD]
ICAT ABI Cleavable [MD]
ICAT D8 [MD]
Dimethylation [MD]
NBS Shimadzu [MD]
Label-free [MD]
Average [MD]
Deep validation of a method: Attribute 'name' -> String is shorter than minLength-limit
Deep validation using schema-object: Attribute 'name' -> String is shorter than minLength-limit 
Attribute validation: String is shorter than minLength-limit


"""


Copyright © 2022 Matrix Science Ltd.  All Rights Reserved. Generated on Thu Mar 31 2022 01:12:29