[project @ Updated eland_config app to generate config file from fctracker app.]
[htsworkflow.git] / ga_frontend / fctracker / models.py
1 from django.db import models
2 from ga_frontend import settings
3
4 # Create your models here.
5
6 class Species(models.Model):
7   
8   scientific_name = models.CharField(max_length=256, unique=True, db_index=True, core=True)
9   common_name = models.CharField(max_length=256, blank=True)
10
11   def __str__(self):
12     return '%s (%s)' % (self.scientific_name, self.common_name)
13   
14   class Meta:
15     verbose_name_plural = "species"
16     ordering = ["scientific_name"]
17   
18   class Admin:
19       fields = (
20         (None, {
21             'fields': (('scientific_name', 'common_name'),)
22         }),
23       )
24
25 class Library(models.Model):
26   
27   library_id = models.IntegerField(primary_key=True, db_index=True, core=True)
28   library_name = models.CharField(max_length=100, unique=True, core=True)
29   library_species = models.ForeignKey(Species, core=True)
30   RNAseq = models.BooleanField()
31   
32   made_by = models.CharField(max_length=50, blank=True, default="Lorian")
33   creation_date = models.DateField(blank=True, null=True)
34   made_for = models.CharField(max_length=50, blank=True)
35   
36   PROTOCOL_END_POINTS = (
37       ('?', 'Unknown'),
38       ('Sample', 'Raw sample'),
39       ('Gel', 'Ran gel'),
40       ('1A', 'Gel purification'),
41       ('2A', '2nd PCR'),
42       ('Progress', 'In progress'),
43     )
44   stopping_point = models.CharField(max_length=50, choices=PROTOCOL_END_POINTS)
45   amplified_from_sample = models.ForeignKey('self', blank=True, null=True)
46   
47   undiluted_concentration = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
48   ten_nM_dilution = models.BooleanField()
49   successful_pM = models.IntegerField(blank=True, null=True)
50   
51   notes = models.TextField(blank=True)
52   
53   def __str__(self):
54     return '#%s: %s' % (self.library_id, self.library_name)
55   
56   class Meta:
57     verbose_name_plural = "libraries"
58     ordering = ["-library_id"]
59   
60   class Admin:
61     date_hierarchy = "creation_date"
62     save_as = True
63     save_on_top = True
64     search_fields = ['library_name']
65     list_display = ('library_id', 'library_name', 'made_for', 'creation_date', 'ten_nM_dilution', 'stopping_point', 'successful_pM')
66     list_display_links = ('library_id', 'library_name')
67     list_filter = ('stopping_point', 'ten_nM_dilution', 'library_species', 'made_for', 'made_by')
68     fields = (
69         (None, {
70             'fields': (('library_id', 'library_name'), ('library_species', 'RNAseq'),)
71         }),
72         ('Creation Information:', {
73             'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('undiluted_concentration', 'ten_nM_dilution', 'successful_pM'), 'notes',)
74         }),
75     )
76
77 class FlowCell(models.Model):
78   
79   flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
80   run_date = models.DateTimeField(core=True)
81   advanced_run = models.BooleanField(default=False)
82   read_length = models.IntegerField(default=32)
83   
84   lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
85   lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
86   lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
87   lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
88   lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
89   lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
90   lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
91   lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
92
93   lane_1_pM = models.IntegerField(default=4)
94   lane_2_pM = models.IntegerField(default=4)
95   lane_3_pM = models.IntegerField(default=4)
96   lane_4_pM = models.IntegerField(default=4)
97   lane_5_pM = models.IntegerField(default=4)
98   lane_6_pM = models.IntegerField(default=4)
99   lane_7_pM = models.IntegerField(default=4)
100   lane_8_pM = models.IntegerField(default=4)
101   
102   lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
103   lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
104   lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
105   lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
106   lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
107   lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
108   lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
109   lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
110   
111   notes = models.TextField(blank=True)
112
113   def __str__(self):
114     return '%s (%s)' % (self.flowcell_id, self.run_date) 
115   
116   class Meta:
117     ordering = ["run_date"]
118   
119   class Admin:
120     date_hierarchy = "run_date"
121     save_on_top = True
122     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']
123     list_display = ('flowcell_id', 'run_date', 'lane_1_library', 'lane_2_library', 'lane_3_library', 'lane_4_library', 'lane_5_library', 'lane_6_library', 'lane_7_library', 'lane_8_library')
124     fields = (
125         (None, {
126             'fields': ('run_date', 'flowcell_id', ('read_length', 'advanced_run'),)
127         }),
128         ('Lanes:', {
129             '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'),)
130         }),
131         (None, {
132             'fields' : ('notes',)
133         }),
134     )
135
136 class ElandResult(models.Model):
137   
138   class Admin: pass
139   
140   flow_cell = models.ForeignKey(FlowCell)
141   config_file = models.FileField(upload_to=settings.UPLOADTO_CONFIG_FILE)
142   eland_result_pack = models.FileField(upload_to=settings.UPLOADTO_ELAND_RESULT_PACKS)
143   bed_file_pack = models.FileField(upload_to=settings.UPLOADTO_BED_PACKS)
144   
145   notes = models.TextField(blank=True)