PageRenderTime 31ms CodeModel.GetById 1ms app.highlight 23ms RepoModel.GetById 1ms app.codeStats 0ms

/tools/new_operations/operation_filter.py

https://bitbucket.org/cistrome/cistrome-harvard/
Python | 99 lines | 68 code | 14 blank | 17 comment | 23 complexity | a6dfa24a9ebcbeed24614fda1ec831ff MD5 | raw file
 1# runs after the job (and after the default post-filter)
 2import os
 3from galaxy import eggs
 4from galaxy import jobs
 5from galaxy.tools.parameters import DataToolParameter
 6
 7from galaxy.jobs.handler import JOB_ERROR
 8
 9# Older py compatibility
10try:
11    set()
12except:
13    from sets import Set as set
14
15#def exec_before_process(app, inp_data, out_data, param_dict, tool=None):
16#    """Sets the name of the data"""
17#    dbkeys = sets.Set( [data.dbkey for data in inp_data.values() ] ) 
18#    if len(dbkeys) != 1:
19#        raise Exception, '<p><font color="yellow">Both Queries must be from the same genome build</font></p>'
20
21def validate_input( trans, error_map, param_values, page_param_map ):
22    dbkeys = set()
23    data_param_names = set()
24    data_params = 0
25    for name, param in page_param_map.iteritems():
26        if isinstance( param, DataToolParameter ):
27            # for each dataset parameter
28            if param_values.get(name, None) != None:
29                dbkeys.add( param_values[name].dbkey )
30                data_params += 1
31                # check meta data
32                try:
33                    param = param_values[name]
34                    if isinstance( param.datatype, trans.app.datatypes_registry.get_datatype_by_extension( 'gff' ).__class__ ):
35                        # TODO: currently cannot validate GFF inputs b/c they are not derived from interval.
36                        pass
37                    else: # Validate interval datatype.
38                        startCol = int( param.metadata.startCol )
39                        endCol = int( param.metadata.endCol )
40                        chromCol = int( param.metadata.chromCol )
41                        if param.metadata.strandCol is not None:
42                            strandCol = int ( param.metadata.strandCol )
43                        else:
44                            strandCol = 0
45                except:
46                    error_msg = "The attributes of this dataset are not properly set. " + \
47                    "Click the pencil icon in the history item to set the chrom, start, end and strand columns."
48                    error_map[name] = error_msg
49            data_param_names.add( name )
50    if len( dbkeys ) > 1:
51        for name in data_param_names:
52            error_map[name] = "All datasets must belong to same genomic build, " \
53                "this dataset is linked to build '%s'" % param_values[name].dbkey
54    if data_params != len(data_param_names):
55        for name in data_param_names:
56            error_map[name] = "A dataset of the appropriate type is required"
57
58# Commented out by INS, 5/30/2007.  What is the PURPOSE of this?
59def exec_after_process(app, inp_data, out_data, param_dict, tool=None, stdout=None, stderr=None):
60    """Verify the output data after each run"""
61    items = out_data.items()
62
63    for name, data in items:
64        try:
65            if stderr and len( stderr ) > 0:
66                raise Exception( stderr )
67
68        except Exception, exc:
69            data.blurb = JOB_ERROR
70            data.state = JOB_ERROR
71
72## def exec_after_process(app, inp_data, out_data, param_dict, tool=None, stdout=None, stderr=None):
73##     pass
74
75
76def exec_after_merge(app, inp_data, out_data, param_dict, tool=None, stdout=None, stderr=None):
77    exec_after_process(
78        app, inp_data, out_data, param_dict, tool=tool, stdout=stdout, stderr=stderr)
79
80    # strip strand column if clusters were merged
81    items = out_data.items()
82    for name, data in items:
83        if param_dict['returntype'] == True:
84            data.metadata.chromCol = 1
85            data.metadata.startCol = 2
86            data.metadata.endCol = 3
87        # merge always clobbers strand
88        data.metadata.strandCol = None
89            
90
91def exec_after_cluster(app, inp_data, out_data, param_dict, tool=None, stdout=None, stderr=None):
92    exec_after_process(
93        app, inp_data, out_data, param_dict, tool=tool, stdout=stdout, stderr=stderr)
94
95    # strip strand column if clusters were merged
96    if param_dict["returntype"] == '1':
97        items = out_data.items()
98        for name, data in items:
99            data.metadata.strandCol = None