X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=htsworkflow%2Ffrontend%2Fsamples%2Fmodels.py;h=d7c70c239c037db3dd4fc77a8c67cc9cb5cb1678;hb=53a5a342ce2b08d948bf6011b120fbc64631b4d9;hp=b81b122111332c1b695541cfba3cef058f822a61;hpb=25113ea9acb1883f3041031e5f6a2e77ceb4d83c;p=htsworkflow.git diff --git a/htsworkflow/frontend/samples/models.py b/htsworkflow/frontend/samples/models.py index b81b122..d7c70c2 100644 --- a/htsworkflow/frontend/samples/models.py +++ b/htsworkflow/frontend/samples/models.py @@ -1,3 +1,4 @@ +import types import logging import urlparse from django.db import models @@ -128,7 +129,7 @@ class Affiliation(models.Model): class LibraryType(models.Model): name = models.CharField(max_length=255, unique=True, - name="Adapter Type") + verbose_name="Adapter Type") is_paired_end = models.BooleanField(default=True, help_text="can you do a paired end run with this adapter") can_multiplex = models.BooleanField(default=True, @@ -144,17 +145,18 @@ class LibraryType(models.Model): class MultiplexIndex(models.Model): """Map adapter types to the multiplex sequence""" adapter_type = models.ForeignKey(LibraryType) - multiplex_id = models.CharField(max_length=3, null=False) + multiplex_id = models.CharField(max_length=6, null=False) sequence = models.CharField(max_length=12, blank=True, null=True) class Meta: + verbose_name_plural = "multiplex indicies" unique_together = ('adapter_type', 'multiplex_id') class Library(models.Model): id = models.CharField(max_length=10, primary_key=True) library_name = models.CharField(max_length=100, unique=True) library_species = models.ForeignKey(Species) - hidden = models.BooleanField() + hidden = models.BooleanField(default=False) account_number = models.CharField(max_length=100, null=True, blank=True) cell_line = models.ForeignKey(Cellline, blank=True, null=True, verbose_name="Background") @@ -205,7 +207,7 @@ class Library(models.Model): # note \u00b5 is the micro symbol in unicode successful_pM = models.DecimalField(max_digits=9, decimal_places=1, blank=True, null=True) - ten_nM_dilution = models.BooleanField() + ten_nM_dilution = models.BooleanField(default=False) gel_cut_size = models.IntegerField(default=225, blank=True, null=True) insert_size = models.IntegerField(blank=True, null=True) notes = models.TextField(blank=True) @@ -244,20 +246,43 @@ class Library(models.Model): if self.multiplex_id is None or len(self.multiplex_id) == 0: return 'Err: id empty' sequences = {} - multiplex_ids = self.multiplex_id.split(',') - for multiplex_id in multiplex_ids: - try: - multiplex = MultiplexIndex.objects.get( - adapter_type = self.library_type.id, - multiplex_id = multiplex_id) - sequences[multiplex_id] = multiplex.sequence - except MultiplexIndex.DoesNotExist, e: - sequences[multiplex_id] = 'Err: index not found' + multiplex_expressions = self.multiplex_id.split(',') + for multiplex_term in multiplex_expressions: + pairs = multiplex_term.split('-') + if len(pairs) == 1: + key = pairs[0] + seq = self._lookup_index(pairs[0]) + elif len(pairs) == 2: + key = pairs[0] + '-' + pairs[1] + seq0 = self._lookup_index(pairs[0]) + seq1 = self._lookup_index(pairs[1]) + if seq0 is None or seq1 is None: + seq = None + else: + seq = seq0 + '-' + seq1 + else: + raise RuntimeError("Too many - seperated sequences") + if seq is None: + seq = 'Err: index not found' + sequences[key] = seq return sequences + def _lookup_index(self, multiplex_id): + try: + multiplex = MultiplexIndex.objects.get( + adapter_type = self.library_type.id, + multiplex_id = multiplex_id) + return multiplex.sequence + except MultiplexIndex.DoesNotExist, e: + return None + def index_sequence_text(self, seperator=' '): """Return formatted multiplex index sequences""" sequences = self.index_sequences() + if sequences is None: + return "" + if type(sequences) in types.StringTypes: + return sequences multiplex_ids = sequences.keys() multiplex_ids.sort() return seperator.join(( "%s:%s" %(i,sequences[i]) for i in multiplex_ids))