1 from django.db import models
2 from htswfrontend.fctracker.models import *
4 class FlowCell(models.Model):
6 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
7 run_date = models.DateTimeField(core=True)
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)
68 #return '%s (%s)' % (self.flowcell_id, self.run_date)
69 return '%s' % (self.flowcell_id)
72 str = '' #<span style="color:red;font-size:80%;margin-right:3px">New!</span>'
73 str +='<a target=_balnk href="/exp_track/'+self.flowcell_id+'" title="Create XLS like sheet for this Flowcell ..." ">Create LOG</a>'
75 Create_LOG.allow_tags = True
78 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)
79 Lanes.allow_tags = True
82 ordering = ["-run_date"]
86 date_hierarchy = "run_date"
88 search_fields = ['flowcell_id','seq_mac_id','cluster_mac_id','=lane_1_library__library_id','=lane_2_library__library_id','=lane_3_library__library_id','=lane_4_library__library_id','=lane_5_library__library_id','=lane_6_library__library_id','=lane_7_library__library_id','=lane_8_library__library_id']
89 list_display = ('flowcell_id','seq_mac_id','run_date', 'Create_LOG','Lanes')
90 list_filter = ('seq_mac_id','cluster_mac_id')
93 'fields': ('run_date', ('flowcell_id','cluster_mac_id','seq_mac_id'), ('read_length'),)
96 ##'fields' : (('lane_1_library', 'lane_1_pM', 'lane_1_cluster_estimate', 'lane_1_primer'), ('lane_2_library', 'lane_2_pM', 'lane_2_cluster_estimate', 'lane_2_primer'), ('lane_3_library', 'lane_3_pM', 'lane_3_cluster_estimate', 'lane_3_primer'), ('lane_4_library', 'lane_4_pM', 'lane_4_cluster_estimate', 'lane_4_primer'), ('lane_5_library', 'lane_5_pM', 'lane_5_cluster_estimate', 'lane_5_primer'), ('lane_6_library', 'lane_6_pM', 'lane_6_cluster_estimate', 'lane_6_primer'), ('lane_7_library', 'lane_7_pM', 'lane_7_cluster_estimate', 'lane_7_primer'), ('lane_8_library', 'lane_8_pM', 'lane_8_cluster_estimate', 'lane_8_primer'),)
97 'fields' : (('lane_1_library', 'lane_1_pM', 'lane_1_cluster_estimate'), ('lane_2_library', 'lane_2_pM', 'lane_2_cluster_estimate'), ('lane_3_library', 'lane_3_pM', 'lane_3_cluster_estimate'), ('lane_4_library', 'lane_4_pM', 'lane_4_cluster_estimate'), ('lane_5_library', 'lane_5_pM', 'lane_5_cluster_estimate'), ('lane_6_library', 'lane_6_pM', 'lane_6_cluster_estimate'), ('lane_7_library', 'lane_7_pM', 'lane_7_cluster_estimate'), ('lane_8_library', 'lane_8_pM', 'lane_8_cluster_estimate'),)
100 'fields' : ('notes',)
105 ### -----------------------
106 class DataRun(models.Model):
107 ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
108 run_folder = models.CharField(max_length=50,unique=True, db_index=True)
109 fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id")
110 config_params = models.TextField(default=ConfTemplate)
111 run_start_time = models.DateTimeField(core=True)
112 RUN_STATUS_CHOICES = (
113 (0, 'Sequencer running'), ##Solexa Data Pipeline Not Yet Started'),
114 (1, 'Data Pipeline Started'),
115 (2, 'Data Pipeline Interrupted'),
116 (3, 'Data Pipeline Finished'),
117 (4, 'CollectReads Started'),
118 (5, 'CollectReads Finished'),
122 run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
123 run_note = models.TextField(blank=True)
126 def main_status(self):
128 if self.run_status >= 5:
129 str += ' style="color:green">'
130 str += '<b>'+self.RUN_STATUS_CHOICES[self.run_status][1]+'</b>'
131 str += '<br/><br/>' #<span style="color:red;font-size:80%;">New!</span>'
132 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>'
134 str += '>'+self.RUN_STATUS_CHOICES[self.run_status][1]
138 main_status.allow_tags = True
140 main_status.allow_tags = True
142 def Flowcell_Info(self):
143 str = '<b>'+self.fcid.__str__()+'</b>'
144 str += ' (c: '+self.fcid.cluster_mac_id+', s: '+self.fcid.seq_mac_id+')'
145 str += '<div style="margin-top:5px;">'
146 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>'
147 str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:block;border:solid #cccccc 1px;width:350px">'
148 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+')'
149 str += LanesList ## self.fcid.Lanes()
151 str += '<div><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a>'
152 #str += '<span style="color:red;font-size:80%;margin-left:15px;margin-right:3px">New!</span>'
153 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>'
157 Flowcell_Info.allow_tags = True
160 search_fields = ['run_folder','run_note','config_params','=fcid__lane_1_library__library_id','=fcid__lane_2_library__library_id','=fcid__lane_3_library__library_id','=fcid__lane_4_library__library_id','=fcid__lane_5_library__library_id','=fcid__lane_6_library__library_id','=fcid__lane_7_library__library_id','=fcid__lane_8_library__library_id']
162 list_display = ('run_folder','Flowcell_Info','run_start_time','main_status','run_note')
163 list_filter = ('run_status','run_start_time')