1 from django.db import models
2 from gaworkflow.frontend import settings
4 class Antibody(models.Model):
5 antigene = models.CharField(max_length=500, db_index=True)
6 catalog = models.CharField(max_length=50, unique=True, db_index=True)
7 antibodies = models.CharField(max_length=500, db_index=True)
8 source = models.CharField(max_length=500, blank=True, db_index=True)
9 biology = models.TextField(blank=True)
10 notes = models.TextField(blank=True)
12 return '%s - %s (%s)' % (self.antigene, self.antibodies, self.catalog)
14 verbose_name_plural = "antibodies"
15 ordering = ["antigene"]
17 list_display = ('antigene','antibodies','catalog','source','biology','notes')
18 list_filter = ('antibodies','source')
21 'fields': (('antigene','antibodies'),('catalog','source'),('biology'),('notes'))
25 class Cellline(models.Model):
26 cellline_name = models.CharField(max_length=100, unique=True, db_index=True)
27 notes = models.TextField(blank=True)
29 return '%s' % (self.cellline_name)
32 ordering = ["cellline_name"]
37 'fields': (('cellline_name'),('notes'),)
41 class Condition(models.Model):
42 condition_name = models.CharField(max_length=2000, unique=True, db_index=True)
43 notes = models.TextField(blank=True)
45 return '%s' % (self.condition_name)
48 ordering = ["condition_name"]
53 'fields': (('condition_name'),('notes'),)
57 class Species(models.Model):
58 scientific_name = models.CharField(max_length=256, unique=False, db_index=True, core=True)
59 common_name = models.CharField(max_length=256, blank=True)
60 use_genome_build = models.CharField(max_length=100, blank=True) #blank=False, null=False)
63 return '%s (%s)|%s' % (self.scientific_name, self.common_name, self.use_genome_build)
66 verbose_name_plural = "species"
67 ordering = ["scientific_name"]
72 'fields': (('scientific_name', 'common_name'), ('use_genome_build'))
76 class Library(models.Model):
77 library_id = models.CharField(max_length=30, unique=True, db_index=True, core=True)
78 library_name = models.CharField(max_length=100, unique=True, core=True)
79 library_species = models.ForeignKey(Species, core=True)
80 cell_line = models.ForeignKey(Cellline,core=True)
81 condition = models.ForeignKey(Condition,core=True)
82 antibody = models.ForeignKey(Antibody,blank=True,null=True,core=True)
85 ('INPUT_RXLCh','INPUT_RXLCh'),
86 ('ChIP-seq', 'ChIP-seq'),
87 ('Sheared', 'Sheared'),
88 ('RNA-seq', 'RNA-seq'),
89 ('Methyl-seq', 'Methyl-seq'),
90 ('DIP-seq', 'DIP-seq'),
92 experiment_type = models.CharField(max_length=50, choices=EXPERIMENT_TYPES, default='ChIP-seq')
94 made_by = models.CharField(max_length=50, blank=True)
95 creation_date = models.DateField(blank=True, null=True)
96 made_for = models.CharField(max_length=50, blank=True)
97 made_by = models.CharField(max_length=50, blank=True)
99 PROTOCOL_END_POINTS = (
100 ('Completed','Completed'),
102 ('Sample', 'Raw sample'),
104 ('1A', 'Gel purification'),
106 ('Progress', 'In progress'),
108 stopping_point = models.CharField(max_length=50, choices=PROTOCOL_END_POINTS, default='Completed')
109 amplified_from_sample = models.ForeignKey('self', blank=True, null=True)
111 undiluted_concentration = models.DecimalField("Template concentr. (ng/ul)",max_digits=5, decimal_places=2, blank=True, null=True)
112 ten_nM_dilution = models.BooleanField()
113 successful_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=True, null=True)
114 avg_lib_size = models.IntegerField()
115 notes = models.TextField(blank=True)
118 return '%s: %s' % (self.library_id, self.library_name)
121 verbose_name_plural = "libraries"
122 ordering = ["-library_id"]
125 date_hierarchy = "creation_date"
128 search_fields = ['library_name']
129 list_display = ('library_id', 'library_name', 'made_by', 'creation_date', 'ten_nM_dilution', 'stopping_point', 'successful_pM')
130 list_display_links = ('library_id', 'library_name')
131 list_filter = ('stopping_point', 'ten_nM_dilution', 'library_species', 'made_for', 'made_by')
134 'fields': (('library_id', 'library_name'),('library_species'),('experiment_type'),('cell_line','condition','antibody'),)
136 ('Creation Information:', {
137 'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('avg_lib_size','undiluted_concentration', 'ten_nM_dilution', 'successful_pM'), 'notes',)
141 class FlowCell(models.Model):
143 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
144 run_date = models.DateTimeField(core=True)
145 advanced_run = models.BooleanField(default=False)
146 read_length = models.IntegerField(default=32) #Stanford is currenlty 25
148 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
149 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
150 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
151 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
152 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
153 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
154 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
155 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
157 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
158 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
159 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
160 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
161 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
162 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
163 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
164 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
166 lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
167 lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
168 lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
169 lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
170 lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
171 lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
172 lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
173 lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
179 ('Tinkerbell','Tinkerbell'),
187 ('Britney','Britney'),
190 cluster_mac_id = models.CharField(max_length=50, choices=CLUSTER_MAC, default='M304')
191 seq_mac_id = models.CharField(max_length=50, choices=SEQ_MAC, verbose_name = 'Sequencer', default='EAS149')
193 notes = models.TextField(blank=True)
196 #return '%s (%s)' % (self.flowcell_id, self.run_date)
197 return '%s' % (self.flowcell_id)
201 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)
202 Lanes.allow_tags = True
205 ordering = ["-run_date"]
209 date_hierarchy = "run_date"
211 search_fields = ['lane_1_library', 'lane_2_library', 'lane_3_library', 'lane_4_library', 'lane_5_library', 'lane_6_library', 'lane_7_library', 'lane_8_library']
212 list_display = ('flowcell_id','seq_mac_id','run_date', 'Lanes')
213 list_filter = ('seq_mac_id',)
216 'fields': ('run_date', ('flowcell_id','cluster_mac_id','seq_mac_id'), ('read_length'),)
219 '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'),)
222 'fields' : ('notes',)
226 #class ElandResult(models.Model):
230 # flow_cell = models.ForeignKey(FlowCell)
231 # config_file = models.FileField(upload_to=settings.UPLOADTO_CONFIG_FILE)
232 # eland_result_pack = models.FileField(upload_to=settings.UPLOADTO_ELAND_RESULT_PACKS)
233 # bed_file_pack = models.FileField(upload_to=settings.UPLOADTO_BED_PACKS)
235 # notes = models.TextField(blank=True)