6 from htsworkflow.submission.submission import Submission
8 from htsworkflow.util.rdfhelp import \
14 from django.conf import settings
15 from django.template import Context, loader
17 LOGGER = logging.getLogger(__name__)
19 class GEOSubmission(Submission):
20 def __init__(self, name, model):
21 super(GEOSubmission, self).__init__(name, model)
23 def make_soft(self, result_map):
25 platform = self.get_platform_metadata()
26 platform_attribs = dict(platform)
27 platform_id = platform_attribs['^platform']
28 series = self.get_series_metadata()
29 series_attribs = dict(series)
30 series_id = series_attribs['^series']
31 for lib_id, result_dir in result_map.items():
32 an_analysis = self.get_submission_node(result_dir)
33 metadata = self.get_sample_metadata(an_analysis)
35 errmsg = 'Confused there are more than one samples for %s'
36 LOGGER.debug(errmsg % (str(an_analysis,)))
37 metadata = metadata[0]
38 metadata['raw'] = self.get_sample_files(an_analysis,
40 metadata['supplimental'] = self.get_sample_files(
42 geoSoftNS['supplemental'])
43 metadata['run'] = self.get_run_details(an_analysis)
44 samples.append(metadata)
46 soft_template = loader.get_template('geo_submission.soft')
51 'platform_id': platform_id,
52 'series_id': series_id,
54 print str(soft_template.render(context))
56 def check_for_name(self, analysis_node):
58 self.model.get_target(analysis_node,
59 submissionOntology['name']))
61 logger.error("Need name for %s" % (str(analysis_node)))
66 def get_platform_metadata(self):
67 """Gather information for filling out sample section of a SOFT file
69 query_template = loader.get_template('geo_platform.sparql')
70 submission = str(self.submissionSetNS[''].uri)
72 'submission': submission,
75 results = self.execute_query(query_template, context)
76 return self.query_to_soft_dictionary(results, 'platform')
78 def get_series_metadata(self):
79 """Gather information for filling out sample section of a SOFT file
81 query_template = loader.get_template('geo_series.sparql')
82 submission = str(self.submissionSetNS[''].uri)
84 'submission': submission,
87 results = self.execute_query(query_template, context)
88 return self.query_to_soft_dictionary(results, 'series')
90 def get_sample_metadata(self, analysis_node):
91 """Gather information for filling out sample section of a SOFT file
93 query_template = loader.get_template('geo_samples.sparql')
96 'submission': str(analysis_node.uri),
97 'submissionSet': str(self.submissionSetNS[''].uri),
100 results = self.execute_query(query_template, context)
102 r['dataProtocol'] = str(r['dataProtocol']).replace('\n', ' ')
106 def get_sample_files(self, analysis_node, file_class):
109 query_template = loader.get_template('geo_files.sparql')
112 'submission': str(analysis_node.uri),
113 'file_class': str(file_class)
116 return self.execute_query(query_template, context)
118 def get_run_details(self, analysis_node):
119 """Get information about runs
121 query_template = loader.get_template('geo_run_details.sparql')
124 'submission': str(analysis_node.uri),
127 return self.execute_query(query_template, context)
129 def query_to_soft_dictionary(self, results, heading):
132 name = simplifyUri(geoSoftNS, r['name'])
134 if name.lower() == heading.lower():
138 for v in fromTypedNode(r['value']).split(os.linesep):
141 attributes.append((name, v))