1 from django.db import models
2 from htsworkflow.frontend.samples.models import *
3 from django.core.exceptions import ObjectDoesNotExist
5 class FlowCell(models.Model):
7 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True)
8 run_date = models.DateTimeField()
9 advanced_run = models.BooleanField(default=False)
10 read_length = models.IntegerField(default=32) #Stanford is currenlty 25
12 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
13 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
14 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
15 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
16 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
17 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
18 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
19 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
21 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
22 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
23 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
24 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
25 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
26 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
27 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
28 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
30 lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
31 lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
32 lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
33 lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
34 lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
35 lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
36 lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
37 lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
39 # lane_1_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_1_primer")
40 # lane_2_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_2_primer")
41 # lane_3_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_3_primer")
42 # lane_4_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_4_primer")
43 # lane_5_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_5_primer")
44 # lane_6_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_6_primer")
45 # lane_7_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_7_primer")
46 # lane_8_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_8_primer")
52 ('Tinkerbell','Tinkerbell'),
57 ('EAS149','Stanford'),
60 ('Britney','Britney'),
63 cluster_mac_id = models.CharField(max_length=50, choices=CLUSTER_MAC, default='BitBit')
64 seq_mac_id = models.CharField(max_length=50, choices=SEQ_MAC, verbose_name = 'Sequencer', default='Britney')
66 notes = models.TextField(blank=True)
68 def __unicode__(self):
69 return unicode(self.flowcell_id)
73 str +='<a target=_balnk href="/experiments/'+self.flowcell_id+'" title="Create XLS like sheet for this Flowcell ..." ">Create LOG</a>'
75 t = DataRun.objects.get(fcid=self.id)
76 str +='<br/><a target=_self href="/admin/experiments/datarun/?q='+self.flowcell_id+'" title="Check Data Runs ..." ">DataRun ..</a>'
77 except ObjectDoesNotExist:
78 str += '<br/><span style="color:red">not sequenced</span>'
80 Create_LOG.allow_tags = True
83 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)
84 Lanes.allow_tags = True
87 ordering = ["-run_date"]
90 ### -----------------------
91 class DataRun(models.Model):
92 ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
93 run_folder = models.CharField(max_length=50,unique=True, db_index=True)
94 fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id")
95 config_params = models.TextField(default=ConfTemplate)
96 run_start_time = models.DateTimeField()
97 RUN_STATUS_CHOICES = (
98 (0, 'Sequencer running'), ##Solexa Data Pipeline Not Yet Started'),
99 (1, 'Data Pipeline Started'),
100 (2, 'Data Pipeline Interrupted'),
101 (3, 'Data Pipeline Finished'),
102 (4, 'CollectReads Started'),
103 (5, 'CollectReads Finished'),
107 run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
108 run_note = models.TextField(blank=True)
111 def main_status(self):
113 if self.run_status >= 5:
114 str += ' style="color:green">'
115 str += '<b>'+self.RUN_STATUS_CHOICES[self.run_status][1]+'</b>'
116 str += '<br/><br/>' #<span style="color:red;font-size:80%;">New!</span>'
117 str +='<br/><a target=_balnk href="'+settings.TASKS_PROJS_SERVER+'/Flowcells/'+self.fcid.flowcell_id+'/'+self.fcid.flowcell_id+'_QC_Summary.html" title="View QC Summaries of this run ..." ">View QC Page</a>'
119 str += '>'+self.RUN_STATUS_CHOICES[self.run_status][1]
123 main_status.allow_tags = True
125 main_status.allow_tags = True
127 def Flowcell_Info(self):
128 str = '<b>'+self.fcid.__str__()+'</b>'
129 str += ' (c: '+self.fcid.cluster_mac_id+', s: '+self.fcid.seq_mac_id+')'
130 str += '<div style="margin-top:5px;">'
131 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>'
132 str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:block;border:solid #cccccc 1px;width:350px">'
133 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+')'
134 str += LanesList ## self.fcid.Lanes()
136 str += '<div><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a>'
137 #str += '<span style="color:red;font-size:80%;margin-left:15px;margin-right:3px">New!</span>'
138 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>'
142 Flowcell_Info.allow_tags = True