1 from django.db import models
2 from gaworkflow.frontend.fctracker.models import Library
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'),
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)
73 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)
74 Lanes.allow_tags = True
77 ordering = ["-run_date"]
81 date_hierarchy = "run_date"
83 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']
84 list_display = ('flowcell_id','seq_mac_id','run_date', 'Lanes')
85 list_filter = ('seq_mac_id','cluster_mac_id')
88 'fields': ('run_date', ('flowcell_id','cluster_mac_id','seq_mac_id'), ('read_length'),)
91 ##'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'),)
92 '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 ### -----------------------
101 class DataRun(models.Model):
102 ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
103 run_folder = models.CharField(max_length=50,unique=True, db_index=True)
104 fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id")
105 config_params = models.TextField(default=ConfTemplate)
106 run_start_time = models.DateTimeField(core=True)
107 RUN_STATUS_CHOICES = (
108 (0, 'Sequencer running'), ##Solexa Data Pipeline Not Yet Started'),
109 (1, 'Data Pipeline Started'),
110 (2, 'Data Pipeline Interrupted'),
111 (3, 'Data Pipeline Finished'),
112 (4, 'CollectReads Started'),
113 (5, 'CollectReads Finished'),
117 run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
118 run_note = models.TextField(blank=True)
121 def main_status(self):
122 return self.run_status
124 main_status.allow_tags = True
126 def Flowcell_Info(self):
127 str = '<b>'+self.fcid.__str__()+'</b>'
128 str += ' (c: '+self.fcid.cluster_mac_id+', s: '+self.fcid.seq_mac_id+')'
129 str += '<div style="margin-top:5px;">'
130 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>'
131 str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:block;border:solid #cccccc 1px;width:350px">'
132 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+')'
133 str += LanesList ## self.fcid.Lanes()
135 str += '<div><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a></div>'
138 Flowcell_Info.allow_tags = True
141 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']
143 list_display = ('run_folder','Flowcell_Info','run_start_time','run_status','run_note')
144 list_filter = ('run_status','run_start_time')