some code cleaning
authorUnknown Author <unknown>
Fri, 8 Aug 2008 23:29:32 +0000 (23:29 +0000)
committerUnknown Author <unknown>
Fri, 8 Aug 2008 23:29:32 +0000 (23:29 +0000)
gaworkflow/frontend/exp_track/models.py

index baf40c16072ff752ab91632d1e786892d53fb0c0..be0bb9c7a1b9606677a5a89762770e5d37933287 100644 (file)
 from django.db import models
-from gaworkflow.frontend.fctracker.models import Library
+from datetime import datetime
+from gaworkflow.frontend.fctracker.models import Library 
+from string import *
 
-class FlowCell(models.Model):
-  
-  flowcell_id = models.CharField(max_length=20, unique=True, db_index=True, core=True)
-  run_date = models.DateTimeField(core=True)
-  advanced_run = models.BooleanField(default=False)
-  read_length = models.IntegerField(default=32) #Stanford is currenlty 25
-  
-  lane_1_library = models.ForeignKey(Library, related_name="lane_1_library")
-  lane_2_library = models.ForeignKey(Library, related_name="lane_2_library")
-  lane_3_library = models.ForeignKey(Library, related_name="lane_3_library")
-  lane_4_library = models.ForeignKey(Library, related_name="lane_4_library")
-  lane_5_library = models.ForeignKey(Library, related_name="lane_5_library")
-  lane_6_library = models.ForeignKey(Library, related_name="lane_6_library")
-  lane_7_library = models.ForeignKey(Library, related_name="lane_7_library")
-  lane_8_library = models.ForeignKey(Library, related_name="lane_8_library")
-
-  lane_1_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_2_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_3_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_4_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_5_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_6_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_7_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  lane_8_pM = models.DecimalField(max_digits=5, decimal_places=2,blank=False, null=False,default=2.5)
-  
-  lane_1_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_2_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_3_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_4_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_5_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_6_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_7_cluster_estimate = models.IntegerField(blank=True, null=True)
-  lane_8_cluster_estimate = models.IntegerField(blank=True, null=True)
-  # lane_1_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_1_primer")
-  # lane_2_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_2_primer")
-  # lane_3_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_3_primer")
-  # lane_4_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_4_primer")
-  # lane_5_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_5_primer")
-  # lane_6_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_6_primer")
-  # lane_7_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_7_primer")
-  # lane_8_primer = models.ForeignKey(Primer,blank=True,null=True,related_name="lane_8_primer")
-
-  #Machine Names
-  CLUSTER_MAC = (
-      ('M304','M304'),
-      ('R349','R349'),
-      ('Tinkerbell','Tinkerbell'),
-      ('BitBit','BitBit'),
-    )
-  
-  SEQ_MAC = (
-      ('EAS149','EAS149'),
-      ('EAS46','EAS46'),
-      ('EAS45','Paris'),
-      ('Britney','Britney'),
+class Task(models.Model):
+  task_name = models.CharField(max_length=50,unique=True, db_index=True)
+  subject1 = models.ForeignKey(Library,related_name='sbj1_library',verbose_name="Subject")
+  subject2 = models.ForeignKey(Library,related_name='sbj2_library',verbose_name="Subject 2 / Control",blank=True,null=True)
+  CALCS = (
+      ('QuEST', 'QuEST Peak Calling'),
+      ('WingPeaks', 'Wing Peak Calling'),
+      ('MACS', 'MACS Peak Calling'),
+      ('qPCR', 'In Silico qPCR'),
+      ('CompareLibs', 'Compare Libaraies'),
+      ('ComparePeakCalls','Compare Peak Calls'),
+      ('ProfileReads','Profile Reads')
     )
+  apply_calc = models.CharField(max_length=50,choices=CALCS,verbose_name='Applied Calculation')
+  ## userid = # logged in user
+  task_status = models.CharField(max_length=500,blank=True,null=True,default='defined')
+  results_location = models.CharField(max_length=2000,blank=True,null=True) 
+  submitted_on = models.DateTimeField(core=True,default=datetime.now())
+  run_note = models.CharField(max_length=500,blank=True,null=True)
   
-  cluster_mac_id = models.CharField(max_length=50, choices=CLUSTER_MAC, default='BitBit')
-  seq_mac_id = models.CharField(max_length=50, choices=SEQ_MAC, verbose_name = 'Sequencer', default='Britney')
-  
-  notes = models.TextField(blank=True)
-
   def __str__(self):
-    #return '%s (%s)' % (self.flowcell_id, self.run_date) 
-    return '%s' % (self.flowcell_id) 
+      return '"%s" - %s on [%s]/[%s]' % (self.task_name,self.apply_calc,self.subject1,self.subject2)
 
+  def InProjects(self):
+      return '...'
+      ps = self.project_set.all()
+      pstr = 'In '
+      return pstr
+      for p in ps:
+        pstr += '%s, ' % (p.project_name) 
+      return pstr
 
-  def Lanes(self):
-    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)
-  Lanes.allow_tags = True
-  class Meta:
-    ordering = ["-run_date"]
-  
   class Admin:
-    save_on_top = True
-    date_hierarchy = "run_date"
-    save_on_top = True
-    search_fields = ['flowcell_id','seq_mac_id','cluster_mac_id','=lane_1_library__library_id','=lane_2_library__library_id','=lane_3_library__library_id','=lane_4_library__library_id','=lane_5_library__library_id','=lane_6_library__library_id','=lane_7_library__library_id','=lane_8_library__library_id']
-    list_display = ('flowcell_id','seq_mac_id','run_date', 'Lanes')
-    list_filter = ('seq_mac_id','cluster_mac_id')
+    list_display = ('task_name','apply_calc','subject1','subject2','InProjects','submitted_on','task_status')
+    list_filter = ('apply_calc',)
     fields = (
         (None, {
-            'fields': ('run_date', ('flowcell_id','cluster_mac_id','seq_mac_id'), ('read_length'),)
-        }),
-        ('Lanes:', {
-            ##'fields' : (('lane_1_library', 'lane_1_pM', 'lane_1_cluster_estimate', 'lane_1_primer'), ('lane_2_library', 'lane_2_pM', 'lane_2_cluster_estimate', 'lane_2_primer'), ('lane_3_library', 'lane_3_pM', 'lane_3_cluster_estimate', 'lane_3_primer'), ('lane_4_library', 'lane_4_pM', 'lane_4_cluster_estimate', 'lane_4_primer'), ('lane_5_library', 'lane_5_pM', 'lane_5_cluster_estimate', 'lane_5_primer'), ('lane_6_library', 'lane_6_pM', 'lane_6_cluster_estimate', 'lane_6_primer'), ('lane_7_library', 'lane_7_pM', 'lane_7_cluster_estimate', 'lane_7_primer'), ('lane_8_library', 'lane_8_pM', 'lane_8_cluster_estimate', 'lane_8_primer'),)
-           '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'),)
-        }),
-       (None, {
-           'fields' : ('notes',)
-       }),
-    )
+          'fields': (('task_name'),('apply_calc'),('subject1'),('subject2'))
+           }),
+          ('system fields', {
+             'classes': 'collapse',
+           'fields': (('submitted_on'),('task_status','run_note'))
+          }),
+        )
+    
+    
+class Project(models.Model):
+    project_name = models.CharField(max_length=50,unique=True, db_index=True)
+    tasks = models.ManyToManyField(Task,related_name='project_tasks',null=True)
+    project_notes = models.CharField(max_length=500,blank=True,null=True)
+    
+    def __str__(self):
+      return '%s' % (self.project_name)
 
+    def ProjectTasks(self):
+      ptasks = self.tasks.all().order_by('id')
+      surl = 'http://m304-apple-server.stanford.edu/projects/' 
+      tstr = '<script>'
+      tstr += 'function togView(eid){'
+      tstr += 'f=document.getElementById(eid);'
+      tstr += 'if(f.height==0){'
+      tstr += 'f.height=600;'
+      tstr += 'f.style.border=\'solid #cccccc 3px\';'
+      tstr += '}else{'
+      tstr += 'f.height=0;'
+      tstr += 'f.style.border=\'none\';'
+      tstr += '}'
+      tstr += '}'
+      tstr += '</script>'
+      Style = ''
+      if len(ptasks) > 8:  Style = ' style="height:200px;overflow:auto" '
+      tstr += '<div '+Style+'>'
+      tstr += '<table><tr><th>Tasks</th><th>Job Status</th>'
+      isregistered = False
+      for t in ptasks:      
+        tstr += '<tr><td width=250>%s</td><td>%s</td></tr>'  % (t.task_name,replace(t.task_status,'Complete','<span style="color:green;font-weight:bolder">Complete</span>'))
+        if t.task_status != 'defined': isregistered = True
 
-### -----------------------
-class DataRun(models.Model):
-  ConfTemplate = "CONFIG PARAMS WILL BE GENERATED BY THE PIPELINE SCRIPT.\nYOU'LL BE ABLE TO EDIT AFTER IF NEEDED."
-  run_folder = models.CharField(max_length=50,unique=True, db_index=True)
-  fcid = models.ForeignKey(FlowCell,verbose_name="Flowcell Id")
-  config_params = models.TextField(default=ConfTemplate)
-  run_start_time = models.DateTimeField(core=True)
-  RUN_STATUS_CHOICES = (
-      (0, 'Sequencer running'), ##Solexa Data Pipeline Not Yet Started'),
-      (1, 'Data Pipeline Started'),
-      (2, 'Data Pipeline Interrupted'),
-      (3, 'Data Pipeline Finished'),
-      (4, 'CollectReads Started'),
-      (5, 'CollectReads Finished'),
-    )
-  run_status = models.IntegerField(choices=RUN_STATUS_CHOICES, default=0)
-  run_note = models.TextField(blank=True)
-  
-  def Flowcell_Info(self):
-    str = '<b>'+self.fcid.__str__()+'</b>'
-    str += '<div style="margin-top:5px;">'    
-    str +='<a title="View Lane List here ..."  onClick="el = document.getElementById(\'LanesOf'+self.fcid.__str__()+'\');if(el) (el.style.display==\'none\'?el.style.display=\'block\':el.style.display=\'none\')" style="cursor:pointer;color: #5b80b2;">View Lanes</a>'
-    str += '<div id="LanesOf'+self.fcid.__str__()+'" style="display:none;border:solid #cccccc 1px;width:300px">'
-    LanesList = '1: '+self.fcid.lane_1_library.__str__()+' ('+self.fcid.lane_1_library.library_species.use_genome_build+')<br/>2: '+self.fcid.lane_2_library.__str__()+' ('+self.fcid.lane_2_library.library_species.use_genome_build+')<br/>3: '+self.fcid.lane_3_library.__str__()+' ('+self.fcid.lane_3_library.library_species.use_genome_build+')<br/>4: '+self.fcid.lane_4_library.__str__()+' ('+self.fcid.lane_4_library.library_species.use_genome_build+')<br/>5: '+self.fcid.lane_5_library.__str__()+' ('+self.fcid.lane_5_library.library_species.use_genome_build+')<br/>6: '+self.fcid.lane_6_library.__str__()+' ('+self.fcid.lane_6_library.library_species.use_genome_build+')<br/>7: '+self.fcid.lane_7_library.__str__()+' ('+self.fcid.lane_7_library.library_species.use_genome_build+')<br/>8: '+self.fcid.lane_8_library.__str__()+' ('+self.fcid.lane_8_library.library_species.use_genome_build+')<br/>'
-    str += LanesList ## self.fcid.Lanes()
-    str += '<br/><a title="open Flowcell record" href="/admin/exp_track/flowcell/'+self.fcid.id.__str__()+'/" target=_self>Edit Flowcell record</a>'
-    str += '</div></div>'    
-    return str
-  Flowcell_Info.allow_tags = True
+      tstr += '</table>'
+      tstr += '</div>'
+      tstr += '<div>'
+      tstr += '<div align=center>'
+      if isregistered:
+        tstr += '<a onClick="togView(\'RFrame'+self.id.__str__()+'\');" href="'+surl+self.id.__str__()+'/" title="View Results Page" target="RFrame'+self.id.__str__()+'">VIEW PROJECT RESULTS</a>'
+        tstr += '<a href="'+surl+self.id.__str__()+'/" title="View Results Page" target="_blank" style="margin-left:10px">(view in new window)</a>'
+      else:
+        tstr += 'REGISTERING ...'    
+      tstr += '</div>'    
+      tstr += '<iframe width="100%" height="0" frameborder="0" style="background-color:#ffffff" name="RFrame'+self.id.__str__()+'" id="RFrame'+self.id.__str__()+'"/></iframe>'
+      tstr += '</div>'
+      return tstr
+    
+    ProjectTasks.allow_tags = True
 
-  class Admin:
-    search_fields = ['run_folder','run_note','config_params','=fcid__lane_1_library__library_id','=fcid__lane_2_library__library_id','=fcid__lane_3_library__library_id','=fcid__lane_4_library__library_id','=fcid__lane_5_library__library_id','=fcid__lane_6_library__library_id','=fcid__lane_7_library__library_id','=fcid__lane_8_library__library_id']
+    def ProjTitle(self):
+      ptasks = self.tasks.all().order_by('id')
+      tasks_counter = '<span style="color:#666666;font-size:85%">('+len(ptasks).__str__() + ' tasks)</span>'
+      htmlstr = '%s<br/>%s'  % (self.project_name,tasks_counter)
+      return htmlstr
 
-    list_display = ('run_folder','Flowcell_Info','run_start_time','run_status','run_note')
-    list_filter = ('run_status','run_start_time')
+    ProjTitle.allow_tags = True
+
+    class Admin:
+      list_display = ('ProjTitle','ProjectTasks')
+      # list_filter = ('...',)
+      fields = (
+        (None, {
+          'fields': (('project_name'),('tasks'),('project_notes'))}),
+        )