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'),
63 ('1A', 'Gel purification'),
65 ('Done', 'Completed'),
66 ('Progress', 'In progress'),
68 stopping_point = models.CharField(max_length=50, choices=PROTOCOL_END_POINTS)
69 amplified_from_sample = models.ForeignKey('self', blank=True, null=True)
70 library_size = models.IntegerField(default=225, blank=True, null=True)
72 undiluted_concentration = models.DecimalField("Undiluted concentration (ng/ul)", max_digits=5, decimal_places=2, default=0)
73 successful_pM = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
74 ten_nM_dilution = models.BooleanField(default=False)
76 notes = models.TextField(blank=True)
79 return '#%s: %s' % (self.library_id, self.library_name)
82 verbose_name_plural = "libraries"
83 ordering = ["-library_id"]
86 date_hierarchy = "creation_date"
89 search_fields = ['library_name', 'library_id']
90 list_display = ('library_id', 'library_name', 'made_for', 'library_species', 'creation_date')
91 list_display_links = ('library_id', 'library_name')
92 list_filter = ('stopping_point', 'library_species', 'made_for', 'made_by')
95 'fields': (('library_id', 'library_name'), ('library_species', 'RNAseq'),)
97 ('Creation Information:', {
98 'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('undiluted_concentration', 'library_size'), 'notes',)
100 ('Run Information:', {
101 'fields' : (('ten_nM_dilution','successful_pM'),)
105 class FlowCell(models.Model):
107 flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
108 run_date = models.DateTimeField(core=True)
109 advanced_run = models.BooleanField(default=False)
110 read_length = models.IntegerField(default=32)
113 FLOWCELL_STATUSES = (
116 ('Del', 'Data deleted'),
117 ('A', 'Data available'),
118 ('In', 'In progress'),
120 flowcell_status = models.CharField(max_length=10, choices=FLOWCELL_STATUSES)
122 lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
123 lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
124 lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
125 lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
126 lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
127 lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
128 lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
129 lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
131 lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
132 lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
133 lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
134 lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
135 lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
136 lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
137 lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
138 lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2, default=4)
140 lane_1_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
141 lane_2_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
142 lane_3_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
143 lane_4_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
144 lane_5_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
145 lane_6_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
146 lane_7_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
147 lane_8_cluster_estimate = models.CharField(max_length=25, blank=True, null=True)
149 kit_1000148 = models.IntegerField(blank=True, null=True)
150 kit_1000147 = models.IntegerField(blank=True, null=True)
151 kit_1000183 = models.IntegerField(blank=True, null=True)
152 kit_1001625 = models.IntegerField(blank=True, null=True)
154 cluster_station_id = models.CharField(max_length=50, blank=True, null=True)
155 sequencer_id = models.CharField(max_length=50, blank=True, null=True)
157 notes = models.TextField(blank=True)
160 return '%s (%s)' % (self.flowcell_id, self.run_date)
163 ordering = ["-run_date"]
166 date_hierarchy = "run_date"
169 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']
170 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')
171 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')
174 'fields': ('run_date', ('flowcell_id', 'flowcell_status'), ('read_length', 'advanced_run'),)
177 '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'),)
180 'fields' : ('notes',)
182 ('Kits & Machines:', {
183 'classes': 'collapse',
184 'fields' : (('kit_1000148', 'kit_1000147', 'kit_1000183', 'kit_1001625'), ('cluster_station_id', 'sequencer_id'),)
186 ('Cluster Estimates:', {
187 'classes': 'collapse',
188 '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',),)
192 class ElandResult(models.Model):
196 flow_cell = models.ForeignKey(FlowCell)
197 config_file = models.FileField(upload_to=settings.UPLOADTO_CONFIG_FILE)
198 eland_result_pack = models.FileField(upload_to=settings.UPLOADTO_ELAND_RESULT_PACKS)
199 bed_file_pack = models.FileField(upload_to=settings.UPLOADTO_BED_PACKS)
201 notes = models.TextField(blank=True)