1 from django.db import models
2 from gaworkflow.frontend import settings
4 # Create your models here.
6 class Species(models.Model):
8 scientific_name = models.CharField(max_length=256, unique=False, db_index=True, core=True)
9 common_name = models.CharField(max_length=256, blank=True)
10 use_genome_build = models.CharField(max_length=100, blank=False, null=False)
13 return '%s (%s)|%s' % (self.scientific_name, self.common_name, self.use_genome_build)
16 verbose_name_plural = "species"
17 ordering = ["scientific_name"]
22 'fields': (('scientific_name', 'common_name'), ('use_genome_build'))
26 class Person(models.Model):
28 name = models.CharField(max_length=100, primary_key=True, db_index=True)
29 lab = models.CharField(max_length=100)
30 email = models.CharField(max_length=50, blank=True, null=True)
33 return '%s (%s lab)' % (self.name, self.lab)
36 verbose_name_plural = "people"
42 'fields': (('name', 'lab'), ('email'))
47 class Library(models.Model):
49 library_id = models.CharField(max_length=25, primary_key=True, db_index=True, core=True)
50 library_name = models.CharField(max_length=100, unique=True, core=True)
51 library_species = models.ForeignKey(Species, core=True)
52 #use_genome_build = models.CharField(max_length=100, blank=False, null=False)
53 RNAseq = models.BooleanField()
55 made_by = models.CharField(max_length=50, blank=True, default="Lorian")
56 creation_date = models.DateField(blank=True, null=True)
57 made_for = models.ForeignKey(Person)
59 PROTOCOL_END_POINTS = (
61 ('Sample', 'Raw sample'),
62 ('Progress', 'In progress'),
63 ('1A', 'Ligation, then gel'),
64 ('PCR', 'Ligation, then PCR'),
65 ('1Ab', 'Ligation, PCR, then gel'),
66 ('1Aa', 'Ligation, gel, then PCR'),
67 ('2A', 'Ligation, PCR, gel, PCR'),
68 ('Done', 'Completed'),
70 stopping_point = models.CharField(max_length=25, choices=PROTOCOL_END_POINTS)
71 amplified_from_sample = models.ForeignKey('self', blank=True, null=True)
72 library_size = models.IntegerField(default=225, blank=True, null=True)
74 undiluted_concentration = models.DecimalField("Undiluted concentration (ng/ul)", max_digits=5, decimal_places=2, default=0)
75 successful_pM = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
76 ten_nM_dilution = models.BooleanField(default=False)
78 notes = models.TextField(blank=True)
81 return '#%s: %s' % (self.library_id, self.library_name)
84 verbose_name_plural = "libraries"
85 ordering = ["-library_id"]
88 date_hierarchy = "creation_date"
91 search_fields = ['library_name', 'library_id']
92 list_display = ('library_id', 'library_name', 'made_for', 'creation_date', 'stopping_point')
93 list_display_links = ('library_id', 'library_name')
94 list_filter = ('stopping_point', 'library_species', 'made_for', 'made_by', 'RNAseq')
97 'fields': (('library_id', 'library_name'), ('library_species', 'RNAseq'),)
99 ('Creation Information:', {
100 'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('undiluted_concentration', 'library_size'), 'notes',)
102 ('Run Information:', {
103 'fields' : (('ten_nM_dilution','successful_pM'),)
107 class FlowCell(models.Model):
109 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
110 run_date = models.DateTimeField(core=True)
111 advanced_run = models.BooleanField(default=False)
112 read_length = models.IntegerField(default=32)
115 FLOWCELL_STATUSES = (
118 ('Del', 'Data deleted'),
119 ('A', 'Data available'),
120 ('In', 'In progress'),
122 flowcell_status = models.CharField(max_length=10, choices=FLOWCELL_STATUSES)
124 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
125 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
126 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
127 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
128 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
129 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
130 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
131 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
133 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
134 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
135 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
136 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
137 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
138 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
139 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
140 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
142 lane_1_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
143 lane_2_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
144 lane_3_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
145 lane_4_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
146 lane_5_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
147 lane_6_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
148 lane_7_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
149 lane_8_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
151 kit_1000148 = models.IntegerField(blank=True, null=True)
152 kit_1000147 = models.IntegerField(blank=True, null=True)
153 kit_1000183 = models.IntegerField(blank=True, null=True)
154 kit_1001625 = models.IntegerField(blank=True, null=True)
156 cluster_station_id = models.CharField(max_length=50, blank=True, null=True)
157 sequencer_id = models.CharField(max_length=50, blank=True, null=True)
159 notes = models.TextField(blank=True)
162 return '%s (%s)' % (self.flowcell_id, self.run_date)
165 ordering = ["-run_date"]
168 date_hierarchy = "run_date"
171 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']
172 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')
173 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')
176 'fields': ('run_date', ('flowcell_id', 'flowcell_status'), ('read_length', 'advanced_run'),)
179 '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'),)
182 'fields' : ('notes',)
184 ('Kits & Machines:', {
185 'classes': 'collapse',
186 'fields' : (('kit_1000148', 'kit_1000147', 'kit_1000183', 'kit_1001625'), ('cluster_station_id', 'sequencer_id'),)
188 ('Cluster Estimates:', {
189 'classes': 'collapse',
190 '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',),)
194 class ElandResult(models.Model):
198 flow_cell = models.ForeignKey(FlowCell)
199 config_file = models.FileField(upload_to=settings.UPLOADTO_CONFIG_FILE)
200 eland_result_pack = models.FileField(upload_to=settings.UPLOADTO_ELAND_RESULT_PACKS)
201 bed_file_pack = models.FileField(upload_to=settings.UPLOADTO_BED_PACKS)
203 notes = models.TextField(blank=True)