Rafal's code for NMR restraints
[django_unres.git] / django_simple / todo / models.py
1 from __future__ import unicode_literals
2
3 import logging
4 from django.db import models
5 from django.contrib.auth.models import User
6 from django.utils import timezone
7 import json
8
9 MIN_CHOICE = (('minimize cart','minimize'),('minimize regular','regularize'),('minimize softreg','soft regularize'),('minimize','minimize internal coordinates'))
10 MD_START= (('extconf','extended chain'),('pdbstart','start from pdb'),('rand_conf','random chain'))
11 MD_LANG = (('langevin','Langevin'),('berendsen','Berendsen'))
12 FF_CHOICE = (('FF2','FF2 = JCC 30 2127 (2009) + JCTC 11 817-831 (2015)'),('opt-wtfsa-2','OPT-WTFSA-2 = JCIM 57 2364-2377 (2017)'),('NEWCT-9P','NEWCT-9P = JCP 150 155104 (2019)'))
13
14 logger = logging.getLogger(__name__)
15
16 def user_directory_path(instance, filename):
17     # file will be uploaded to MEDIA_ROOT/<jobdirname>/plik.pdb
18     return '{0}/{1}'.format(instance.jobdirname, 'plik.pdb')
19
20 def user_directory_path2(instance, filename):
21     # file will be uploaded to MEDIA_ROOT/<jobdirname>/plik2.pdb
22     return '{0}/{1}'.format(instance.jobdirname, 'plik2.pdb')
23
24 def user_directory_path3(instance, filename):
25     # file will be uploaded to MEDIA_ROOT/<jobdirname>/plik3.nmr
26     return '{0}/{1}'.format(instance.jobdirname, 'plik3.nmr')
27
28 # Create your models here.
29 class Task(models.Model):
30     
31     name = models.TextField(max_length=100)
32     
33     ssbond = models.TextField(max_length=2000,default='')
34 #    def setssbond(self,x):
35 #       self.ssbond = json.dumps(x)
36 #    def getssbond(self):
37 #       return json.loads(self.ssbond)
38
39     unres_ff = models.CharField(max_length=20,choices=FF_CHOICE,default='FF2')
40     pdbcode = models.CharField(max_length=6,default='')
41 # minimization
42     min_choice = models.CharField(max_length=20,choices=MIN_CHOICE,default='minimize cart')
43     min_overlap = models.BooleanField(default=False)
44     min_searchsc = models.BooleanField(default=False)
45     min_maxmin = models.IntegerField(default=10000)
46     min_maxfun = models.IntegerField(default=15000)
47     min_pdbout = models.BooleanField(default=True)
48     myfile1 = models.FileField(default='',upload_to=user_directory_path)    
49     min_unres_pdb = models.BooleanField(default=False)
50     boxx = models.FloatField(default=1000.0)
51     boxy = models.FloatField(default=1000.0)
52     boxz = models.FloatField(default=1000.0)
53
54 # minimization output
55     etot = models.FloatField(default=0)
56
57 # output
58     results_text = models.TextField(default='')
59
60 #md
61     md_seed =  models.IntegerField(default=-312345)
62     md_start = models.CharField(max_length=10,choices=MD_START,default='extconf')
63     md_pdbref = models.BooleanField(default=False)
64     md_respa = models.BooleanField(default=True)
65     md_temp = models.FloatField(default=300.0)
66     md_nstep = models.IntegerField(default=200000)
67     md_ntwe = models.IntegerField(default=100)
68     md_ntwx = models.IntegerField(default=1000)
69     md_dt = models.FloatField(default=0.20)
70     md_lang = models.CharField(max_length=10,choices=MD_LANG,default='langevin')
71     md_tau = models.FloatField(default=1.0)
72     md_scal_fric = models.FloatField(default=0.02)
73     md_mdpdb = models.BooleanField(default=True)
74     md_seq = models.TextField(max_length=2000,default='')
75     md_2d = models.TextField(max_length=2000,default='')
76     md_total_steps = models.IntegerField(default=200000)
77     
78 #remd
79     remd_nrep = models.IntegerField(default=8)
80     remd_nstex = models.IntegerField(default=1000)
81     remd_multi_t = models.TextField(max_length=1000,default='["270", "280", "290", "300", "310", "320", "330", "345"]')    
82     remd_multi_m = models.TextField(max_length=1000,default='["1", "1", "1", "1", "1", "1", "1", "1"]')
83 #    remd_traj1file = models.BooleanField(default=True)
84 #    remd_rest1file = models.BooleanField(default=True)
85     remd_cluter_temp = models.FloatField(default=280) 
86     remd_model1 = models.TextField(default='')
87     remd_model2 = models.TextField(default='')
88     remd_model3 = models.TextField(default='')
89     remd_model4 = models.TextField(default='')
90     remd_model5 = models.TextField(default='')
91     remd_models = models.TextField(default='')
92     remd_cluster_n = models.IntegerField(default=5)
93
94 #saxs
95     scal_rad = models.FloatField(default=1.0)
96     wsaxs = models.FloatField(default=1000.0)
97     saxs_data = models.TextField(max_length=10000,default='')
98
99 #dock
100     myfile2 = models.FileField(default='',upload_to=user_directory_path2)        
101     pdbcode2 = models.CharField(max_length=6,default='')
102     dock_peptide = models.BooleanField(default=False)
103     md_seq2 = models.TextField(max_length=2000,default='')
104
105 #nmr
106     use_nmr = models.BooleanField(default=False)
107     myfile3 = models.FileField(default='',upload_to=user_directory_path3)
108     nmr_scal = models.FloatField(default=20.0)
109     nmr_fordepth = models.FloatField(default=0.5)
110     nmr_slope = models.FloatField(default=0.05)
111     linijek_nmr=models.IntegerField(default=0)
112     
113 # system    
114     ready = models.BooleanField(default=False)
115     done = models.BooleanField(default=False)
116     running = models.IntegerField(default=0)
117     type = models.CharField(max_length=100,default='')
118     owner = models.ForeignKey(User,default=1)
119     created_date = models.DateTimeField(default=timezone.now)
120     jobdirname = models.CharField(max_length=100,default='')
121     pbsjob = models.CharField(max_length=40,default='')
122     example = models.CharField(max_length=10,default='')
123     damino = models.BooleanField(default=False)
124     
125     def __str__(self):
126         if self.done:
127             return "%s (done)" % self.name
128         else:
129             return self.name
130
131     def save(self, *args, **kwargs):
132         logger.warning("Task model change (name=%s)" % self.name)
133         logger.warning("Task model change (owner=%s)" % self.owner)        
134         super(Task, self).save(*args, **kwargs)