X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=htsworkflow%2Fsubmission%2Fsubmission.py;h=b3e2778ca490b8bbf4a111c1e2c0543f23910b00;hb=447be4c5a3dcfac6550d3f06b8faf9198a8cd321;hp=01bdb17228689281b3f33e8aaaaa3af5ccda6d18;hpb=8155bc04a7f91890b99593a6a1c2a5025b5e4cc6;p=htsworkflow.git diff --git a/htsworkflow/submission/submission.py b/htsworkflow/submission/submission.py index 01bdb17..b3e2778 100644 --- a/htsworkflow/submission/submission.py +++ b/htsworkflow/submission/submission.py @@ -19,7 +19,7 @@ from htsworkflow.util.rdfhelp import \ toTypedNode, \ fromTypedNode from htsworkflow.util.hashfile import make_md5sum - +from htsworkflow.submission.fastqname import FastqName from htsworkflow.submission.daf import \ MetadataLookupException, \ get_submission_uri @@ -114,18 +114,18 @@ class Submission(object): an_analysis)) # add file specific information - fileNode = self.link_file_to_classes(pathname, - an_analysis, - an_analysis_uri, - analysis_dir) + fileNode = self.make_file_node(pathname, an_analysis) self.add_md5s(filename, fileNode, analysis_dir) + self.add_fastq_metadata(filename, fileNode) self.model.add_statement( RDF.Statement(fileNode, rdfNS['type'], file_type)) LOGGER.debug("Done.") - def link_file_to_classes(self, pathname, submissionNode, submission_uri, analysis_dir): + def make_file_node(self, pathname, submissionNode): + """Create file node and attach it to its submission. + """ # add file specific information path, filename = os.path.split(pathname) fileNode = RDF.Node(RDF.Uri('file://'+ os.path.abspath(pathname))) @@ -150,6 +150,25 @@ class Submission(object): self.model.add_statement( RDF.Statement(fileNode, dafTermOntology['md5sum'], md5)) + def add_fastq_metadata(self, filename, fileNode): + # How should I detect if this is actually a fastq file? + try: + fqname = FastqName(filename=filename) + except ValueError: + # currently its just ignore it if the fastq name parser fails + return + + terms = [('flowcell', libraryOntology['flowcell_id']), + ('lib_id', libraryOntology['library_id']), + ('lane', libraryOntology['lane_number']), + ('read', libraryOntology['read']), + ('cycle', libraryOntology['read_length'])] + for file_term, model_term in terms: + value = fqname.get(file_term) + if value is not None: + s = RDF.Statement(fileNode, model_term, toTypedNode(value)) + self.model.append(s) + def _add_library_details_to_model(self, libNode): # attributes that can have multiple values set_attributes = set((libraryOntology['has_lane'],