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'),
115 run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
116 run_note = models.TextField(blank=True)
118 def Flowcell_Info(self):
119 str = '<b>'+self.fcid.__str__()+'</b>'
120 str += '<div style="margin-top:5px;">'
121 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 Lanes</a>'
122 str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:none;border:solid #cccccc 1px;width:300px">'
123 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+')<br/>'
124 str += LanesList ## self.fcid.Lanes()
125 str += '<br/><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a>'
126 str += '</div></div>'
128 Flowcell_Info.allow_tags = True
131 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']
133 list_display = ('run_folder','Flowcell_Info','run_start_time','run_status','run_note')
134 list_filter = ('run_status','run_start_time')