1 from django.db import models
2 from django.contrib.auth.models import User
3 from gaworkflow.frontend import settings
5 # Create your models here.
7 class Species(models.Model):
9 scientific_name = models.CharField(max_length=256, unique=False, db_index=True, core=True)
10 common_name = models.CharField(max_length=256, blank=True)
11 use_genome_build = models.CharField(max_length=100, blank=False, null=False)
14 return '%s (%s)|%s' % (self.scientific_name, self.common_name, self.use_genome_build)
17 verbose_name_plural = "species"
18 ordering = ["scientific_name"]
23 'fields': (('scientific_name', 'common_name'), ('use_genome_build'))
27 class Lab(models.Model):
29 name = models.CharField(max_length=100, blank=False, unique=True)
37 class UserProfile(models.Model):
39 # This allows you to use user.get_profile() to get this object
40 user = models.ForeignKey(User, unique=True)
42 lab = models.ForeignKey(Lab)
43 #email = models.CharField(max_length=50, blank=True, null=True)
46 return '%s (%s lab)' % (self.user, self.lab)
49 #verbose_name_plural = "people"
56 # 'fields': (('email', 'lab'), ('email'))
62 class Library(models.Model):
64 library_id = models.CharField(max_length=25, primary_key=True, db_index=True, core=True)
65 library_name = models.CharField(max_length=100, unique=True, core=True)
66 library_species = models.ForeignKey(Species, core=True)
67 #use_genome_build = models.CharField(max_length=100, blank=False, null=False)
68 RNAseq = models.BooleanField()
70 made_by = models.CharField(max_length=50, blank=True, default="Lorian")
71 creation_date = models.DateField(blank=True, null=True)
72 made_for = models.ForeignKey(User)
74 PROTOCOL_END_POINTS = (
76 ('Sample', 'Raw sample'),
77 ('Progress', 'In progress'),
78 ('1A', 'Ligation, then gel'),
79 ('PCR', 'Ligation, then PCR'),
80 ('1Ab', 'Ligation, PCR, then gel'),
81 ('1Aa', 'Ligation, gel, then PCR'),
82 ('2A', 'Ligation, PCR, gel, PCR'),
83 ('Done', 'Completed'),
85 stopping_point = models.CharField(max_length=25, choices=PROTOCOL_END_POINTS)
86 amplified_from_sample = models.ForeignKey('self', blank=True, null=True)
87 library_size = models.IntegerField(default=225, blank=True, null=True)
89 undiluted_concentration = models.DecimalField("Undiluted concentration (ng/ul)", max_digits=5, decimal_places=2, default=0)
90 successful_pM = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
91 ten_nM_dilution = models.BooleanField(default=False)
93 notes = models.TextField(blank=True)
96 return '#%s: %s' % (self.library_id, self.library_name)
99 verbose_name_plural = "libraries"
100 ordering = ["-library_id"]
103 date_hierarchy = "creation_date"
106 search_fields = ['library_name', 'library_id']
107 list_display = ('library_id', 'library_name', 'made_for', 'creation_date', 'stopping_point')
108 list_display_links = ('library_id', 'library_name')
109 list_filter = ('stopping_point', 'library_species', 'made_for', 'made_by', 'RNAseq')
112 'fields': (('library_id', 'library_name'), ('library_species', 'RNAseq'),)
114 ('Creation Information:', {
115 'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('undiluted_concentration', 'library_size'), 'notes',)
117 ('Run Information:', {
118 'fields' : (('ten_nM_dilution','successful_pM'),)
122 class FlowCell(models.Model):
124 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
125 run_date = models.DateTimeField(core=True)
126 advanced_run = models.BooleanField(default=False)
127 read_length = models.IntegerField(default=32)
130 FLOWCELL_STATUSES = (
133 ('Del', 'Data deleted'),
134 ('A', 'Data available'),
135 ('In', 'In progress'),
137 flowcell_status = models.CharField(max_length=10, choices=FLOWCELL_STATUSES)
139 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
140 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
141 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
142 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
143 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
144 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
145 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
146 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
148 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
149 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
150 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
151 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
152 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
153 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
154 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
155 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
157 lane_1_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
158 lane_2_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
159 lane_3_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
160 lane_4_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
161 lane_5_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
162 lane_6_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
163 lane_7_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
164 lane_8_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
166 kit_1000148 = models.IntegerField(blank=True, null=True)
167 kit_1000147 = models.IntegerField(blank=True, null=True)
168 kit_1000183 = models.IntegerField(blank=True, null=True)
169 kit_1001625 = models.IntegerField(blank=True, null=True)
171 cluster_station_id = models.CharField(max_length=50, blank=True, null=True)
172 sequencer_id = models.CharField(max_length=50, blank=True, null=True)
174 notes = models.TextField(blank=True)
177 return '%s (%s)' % (self.flowcell_id, self.run_date)
180 ordering = ["-run_date"]
183 date_hierarchy = "run_date"
186 search_fields = ['flowcell_id', 'lane_1_library__library_id', 'lane_1_library__library_name', 'lane_2_library__library_id', 'lane_2_library__library_name', 'lane_3_library__library_id', 'lane_3_library__library_name', 'lane_4_library__library_id', 'lane_4_library__library_name', 'lane_5_library__library_id', 'lane_5_library__library_name', 'lane_6_library__library_id', 'lane_6_library__library_name', 'lane_7_library__library_id', 'lane_7_library__library_name', 'lane_8_library__library_id', 'lane_8_library__library_name']
187 list_display = ('run_date', 'flowcell_status', 'flowcell_id', 'lane_1_library', 'lane_2_library', 'lane_3_library', 'lane_4_library', 'lane_5_library', 'lane_6_library', 'lane_7_library', 'lane_8_library')
188 list_display_links = ('run_date', 'flowcell_id', 'lane_1_library', 'lane_2_library', 'lane_3_library', 'lane_4_library', 'lane_5_library', 'lane_6_library', 'lane_7_library', 'lane_8_library')
191 'fields': ('run_date', ('flowcell_id', 'flowcell_status'), ('read_length', 'advanced_run'),)
194 'fields' : (('lane_1_library', 'lane_1_pM'), ('lane_2_library', 'lane_2_pM'), ('lane_3_library', 'lane_3_pM'), ('lane_4_library', 'lane_4_pM'), ('lane_5_library', 'lane_5_pM'), ('lane_6_library', 'lane_6_pM'), ('lane_7_library', 'lane_7_pM'), ('lane_8_library', 'lane_8_pM'),)
197 'fields' : ('notes',)
199 ('Kits & Machines:', {
200 'classes': 'collapse',
201 'fields' : (('kit_1000148', 'kit_1000147', 'kit_1000183', 'kit_1001625'), ('cluster_station_id', 'sequencer_id'),)
203 ('Cluster Estimates:', {
204 'classes': 'collapse',
205 'fields' : (('lane_1_cluster_estimate', 'lane_2_cluster_estimate'), ('lane_3_cluster_estimate', 'lane_4_cluster_estimate'), ('lane_5_cluster_estimate', 'lane_6_cluster_estimate'), ('lane_7_cluster_estimate', 'lane_8_cluster_estimate',),)
209 # Did not finish implementing, removing to avoid further confusion.
210 #class ElandResult(models.Model):
214 # flow_cell = models.ForeignKey(FlowCell)
215 # config_file = models.FileField(upload_to=settings.UPLOADTO_CONFIG_FILE)
216 # eland_result_pack = models.FileField(upload_to=settings.UPLOADTO_ELAND_RESULT_PACKS)
217 # bed_file_pack = models.FileField(upload_to=settings.UPLOADTO_BED_PACKS)
219 # notes = models.TextField(blank=True)