+import logging
+
+from django.core.exceptions import ObjectDoesNotExist
+from django.core import urlresolvers
from django.db import models
+
from htsworkflow.frontend.samples.models import *
-from django.core.exceptions import ObjectDoesNotExist
+#from htsworkflow.frontend.settings import options
+from django.conf import settings
class ClusterStation(models.Model):
name = models.CharField(max_length=50, unique=True)
def __unicode__(self):
return unicode(self.name)
+default_pM = 5
+try:
+ default_pM = int(settings.DEFAULT_PM)
+except ValueError,e:
+ logging.error("invalid value for frontend.default_pm")
+
class FlowCell(models.Model):
flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
advanced_run = models.BooleanField(default=False)
paired_end = models.BooleanField(default=False)
read_length = models.IntegerField(default=32) #Stanford is currenlty 25
-
- lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
- lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
- lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
- lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
- lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
- lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
- lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
- lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
-
- lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
- lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-
- lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
- lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
-
- # lane_1_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_1_primer")
- # lane_2_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_2_primer")
- # lane_3_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_3_primer")
- # lane_4_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_4_primer")
- # lane_5_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_5_primer")
- # lane_6_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_6_primer")
- # lane_7_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_7_primer")
- # lane_8_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_8_primer")
-
- #cluster_mac_id = models.CharField(max_length=50, choices=CLUSTER_MAC, default='BitBit')
- #seq_mac_id = models.CharField(max_length=50, choices=SEQ_MAC, verbose_name = 'Sequencer', default='Britney')
- cluster_station = models.ForeignKey(ClusterStation)
- sequencer = models.ForeignKey(Sequencer)
+ control_lane = models.IntegerField(choices=[(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(0,'All Lanes')], null=True)
+
+ cluster_station = models.ForeignKey(ClusterStation, default=3)
+ sequencer = models.ForeignKey(Sequencer, default=1)
notes = models.TextField(blank=True)
def Lanes(self):
library_url = '/admin/samples/library/%s'
- html = ['<ol>']
- for i in range(1,9):
- library_id = getattr(self, 'lane_%d_library_id' % i)
- library = getattr(self, 'lane_%d_library' % i)
- element = '<li><a href="%s">%s</a></li>'
- html.append(element % (library_url % library_id, library))
- html.append('</ol>')
+ html = ['<table>']
+ #for i in range(1,9):
+ for lane in self.lane_set.all():
+ cluster_estimate = lane.cluster_estimate
+ if cluster_estimate is not None:
+ cluster_estimate = "%s k" % ((int(cluster_estimate)/1000), )
+ else:
+ cluster_estimate = 'None'
+ library_id = lane.library_id
+ library = lane.library
+ element = '<tr><td>%d</td><td><a href="%s">%s</a></td><td>%s</td></tr>'
+ expanded_library_url = library_url %(library_id,)
+ html.append(element % (lane.lane_number, expanded_library_url, library, cluster_estimate))
+ html.append('</table>')
return "\n".join(html)
Lanes.allow_tags = True
class Meta:
ordering = ["-run_date"]
-
+
+ def get_admin_url(self):
+ # that's the django way... except it didn't work
+ #return urlresolvers.reverse('admin_experiments_FlowCell_change', args=(self.id,))
+ return '/admin/experiments/flowcell/%s/' % (self.id,)
+
+ def flowcell_type(self):
+ """
+ Convert our boolean 'is paired' flag to a name
+ """
+ if self.paired_end:
+ return u"Paired"
+ else:
+ return u"Single"
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('htsworkflow.frontend.experiments.views.flowcell_detail',
+ [str(self.flowcell_id)])
+
### -----------------------
class DataRun(models.Model):
ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
str += '</div>'
return str
Flowcell_Info.allow_tags = True
+
+LANE_STATUS_CODES = [(0, 'Failed'),
+ (1, 'Marginal'),
+ (2, 'Good'),]
+LANE_STATUS_MAP = dict((int(k),v) for k,v in LANE_STATUS_CODES )
+LANE_STATUS_MAP[None] = "Unknown"
+
+class Lane(models.Model):
+ flowcell = models.ForeignKey(FlowCell)
+ lane_number = models.IntegerField(choices=[(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8)])
+ library = models.ForeignKey(Library)
+ pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=default_pM)
+ cluster_estimate = models.IntegerField(blank=True, null=True)
+ status = models.IntegerField(choices=LANE_STATUS_CODES, null=True, blank=True)
+ comment = models.TextField(null=True, blank=True)
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('htsworkflow.frontend.experiments.views.flowcell_lane_detail',
+ [str(self.flowcell.flowcell_id), str(self.lane_number)])