+import types
import logging
import urlparse
from django.db import models
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,
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")
# 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)
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))