1 from django.db import models
2 from htsworkflow.frontend.samples.models import *
4 class FlowCell(models.Model):
6 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
7 run_date = models.DateTimeField()
8 advanced_run = models.BooleanField(default=False)
9 read_length = models.IntegerField(default=32) #Stanford is currenlty 25
11 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
12 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
13 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
14 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
15 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
16 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
17 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
18 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
20 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
21 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
22 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
23 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
24 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
25 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
26 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
27 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
29 lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
30 lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
31 lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
32 lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
33 lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
34 lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
35 lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
36 lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
38 # lane_1_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_1_primer")
39 # lane_2_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_2_primer")
40 # lane_3_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_3_primer")
41 # lane_4_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_4_primer")
42 # lane_5_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_5_primer")
43 # lane_6_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_6_primer")
44 # lane_7_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_7_primer")
45 # lane_8_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_8_primer")
51 ('Tinkerbell','Tinkerbell'),
56 ('EAS149','Stanford'),
59 ('Britney','Britney'),
62 cluster_mac_id = models.CharField(max_length=50, choices=CLUSTER_MAC, default='BitBit')
63 seq_mac_id = models.CharField(max_length=50, choices=SEQ_MAC, verbose_name = 'Sequencer', default='Britney')
65 notes = models.TextField(blank=True)
67 def __unicode__(self):
68 return unicode(self.flowcell_id)
71 str = '' #<span style="color:red;font-size:80%;margin-right:3px">New!</span>'
72 str +='<a target=_balnk href="/experiments/'+self.flowcell_id+'" title="Create XLS like sheet for this Flowcell ..." ">Create LOG</a>'
74 Create_LOG.allow_tags = True
77 return '<div><span style="margin-right:10px">1)%s</span><span style="margin-right:10px">2)%s</span><span style="margin-right:10px">3)%s</span><span style="margin-right:10px">4)%s</span><span style="margin-right:10px">5)%s</span><span style="margin-right:10px">6)%s</span><span style="margin-right:10px">7)%s</span><span style="margin-right:10px">8)%s</span></div>' % (self.lane_1_library,self.lane_2_library,self.lane_3_library,self.lane_4_library,self.lane_5_library,self.lane_6_library,self.lane_7_library,self.lane_8_library)
78 Lanes.allow_tags = True
82 ### -----------------------
83 class DataRun(models.Model):
84 ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
85 run_folder = models.CharField(max_length=50,unique=True, db_index=True)
86 fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id")
87 config_params = models.TextField(default=ConfTemplate)
88 run_start_time = models.DateTimeField()
89 RUN_STATUS_CHOICES = (
90 (0, 'Sequencer running'), ##Solexa Data Pipeline Not Yet Started'),
91 (1, 'Data Pipeline Started'),
92 (2, 'Data Pipeline Interrupted'),
93 (3, 'Data Pipeline Finished'),
94 (4, 'CollectReads Started'),
95 (5, 'CollectReads Finished'),
99 run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
100 run_note = models.TextField(blank=True)
103 def main_status(self):
105 if self.run_status >= 5:
106 str += ' style="color:green">'
107 str += '<b>'+self.RUN_STATUS_CHOICES[self.run_status][1]+'</b>'
108 str += '<br/><br/>' #<span style="color:red;font-size:80%;">New!</span>'
109 str +='<br/><a target=_balnk href="http://m304-apple-server.stanford.edu/'+self.fcid.flowcell_id+'_QC/'+self.fcid.flowcell_id+'_'+self.run_folder+'_QC_Summary.html" title="View QC Summaries of this run ..." ">View QC Page</a>'
111 str += '>'+self.RUN_STATUS_CHOICES[self.run_status][1]
115 main_status.allow_tags = True
117 main_status.allow_tags = True
119 def Flowcell_Info(self):
120 str = '<b>'+self.fcid.__str__()+'</b>'
121 str += ' (c: '+self.fcid.cluster_mac_id+', s: '+self.fcid.seq_mac_id+')'
122 str += '<div style="margin-top:5px;">'
123 str +='<a title="View Lane List here ..." onClick="el = document.getElementById(\'LanesOf'+self.fcid.__str__()+'\');if(el) (el.style.display==\'none\'?el.style.display=\'block\':el.style.display=\'none\')" style="cursor:pointer;color: #5b80b2;">View/hide lanes</a>'
124 str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:block;border:solid #cccccc 1px;width:350px">'
125 LanesList = '1: '+self.fcid.lane_1_library.__str__()+' ('+self.fcid.lane_1_library.library_species.use_genome_build+')<br/>2: '+self.fcid.lane_2_library.__str__()+' ('+self.fcid.lane_2_library.library_species.use_genome_build+')<br/>3: '+self.fcid.lane_3_library.__str__()+' ('+self.fcid.lane_3_library.library_species.use_genome_build+')<br/>4: '+self.fcid.lane_4_library.__str__()+' ('+self.fcid.lane_4_library.library_species.use_genome_build+')<br/>5: '+self.fcid.lane_5_library.__str__()+' ('+self.fcid.lane_5_library.library_species.use_genome_build+')<br/>6: '+self.fcid.lane_6_library.__str__()+' ('+self.fcid.lane_6_library.library_species.use_genome_build+')<br/>7: '+self.fcid.lane_7_library.__str__()+' ('+self.fcid.lane_7_library.library_species.use_genome_build+')<br/>8: '+self.fcid.lane_8_library.__str__()+' ('+self.fcid.lane_8_library.library_species.use_genome_build+')'
126 str += LanesList ## self.fcid.Lanes()
128 str += '<div><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a>'
129 #str += '<span style="color:red;font-size:80%;margin-left:15px;margin-right:3px">New!</span>'
130 str +='<a style="margin-left:15px;" target=_balnk href="/exp_track/'+self.fcid.flowcell_id+'" title="View XLS like sheet for this Flowcell LOG ..." ">GA LOG Page</a>'
134 Flowcell_Info.allow_tags = True