##// END OF EJS Templates
Jars files have been update...
Fiorella Quino -
r263:bf0609a1b52f
parent child
Show More
@@ -9,19 +9,19 class JARSConfigurationForm(forms.ModelForm):
9 def __init__(self, *args, **kwargs):
9 def __init__(self, *args, **kwargs):
10 super(JARSConfigurationForm, self).__init__(*args, **kwargs)
10 super(JARSConfigurationForm, self).__init__(*args, **kwargs)
11 instance = getattr(self, 'instance', None)
11 instance = getattr(self, 'instance', None)
12
12
13 if instance and instance.pk:
13 if instance and instance.pk:
14 devices = Device.objects.filter(device_type__name='jars')
14 devices = Device.objects.filter(device_type__name='jars')
15
15
16 if instance.experiment:
16 if instance.experiment:
17 experiments = Experiment.objects.filter(pk=instance.experiment.id)
17 experiments = Experiment.objects.filter(pk=instance.experiment.id)
18 self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments]
18 self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments]
19
19
20 self.fields['device'].widget.choices = [(device.id, device) for device in devices]
20 self.fields['device'].widget.choices = [(device.id, device) for device in devices]
21 #self.fields['spectral'].widget = SpectralWidget()
21 #self.fields['spectral'].widget = SpectralWidget()
22 self.fields['spectral_number'].widget.attrs['readonly'] = True
22 self.fields['spectral_number'].widget.attrs['readonly'] = True
23 self.fields['spectral'].widget = SpectralWidget()
23 self.fields['spectral'].widget = SpectralWidget()
24
24
25 #-------------JARS Configuration needs an Experiment-----------------
25 #-------------JARS Configuration needs an Experiment-----------------
26 def clean(self):
26 def clean(self):
27 cleaned_data = super(JARSConfigurationForm, self).clean()
27 cleaned_data = super(JARSConfigurationForm, self).clean()
@@ -29,23 +29,28 class JARSConfigurationForm(forms.ModelForm):
29 if experiment == None:
29 if experiment == None:
30 msg = "Error: Jars Configuration needs an Experiment"
30 msg = "Error: Jars Configuration needs an Experiment"
31 self.add_error('experiment', msg)
31 self.add_error('experiment', msg)
32
32
33 class Meta:
33 class Meta:
34 model = JARSConfiguration
34 model = JARSConfiguration
35 exclude = ('type', 'parameters', 'status', 'filter_parms')
35 exclude = ('type', 'parameters', 'status', 'filter_parms')
36
36
37
37
38 class JARSfilterForm(forms.ModelForm):
38 class JARSfilterForm(forms.ModelForm):
39 def __init__(self, *args, **kwargs):
39 def __init__(self, *args, **kwargs):
40 super(JARSfilterForm, self).__init__(*args, **kwargs)
40 super(JARSfilterForm, self).__init__(*args, **kwargs)
41 instance = getattr(self, 'instance', None)
41 instance = getattr(self, 'instance', None)
42
42
43 self.fields['fch_decimal'].widget.attrs['readonly'] = True
43 self.fields['fch_decimal'].widget.attrs['readonly'] = True
44
44
45 if 'initial' in kwargs:
46 self.fields.pop('name')
47 #self.fields['name'].widget.attrs['disabled'] = 'disabled'
48
49
45 class Meta:
50 class Meta:
46 model = JARSfilter
51 model = JARSfilter
47 exclude = ('type', 'parameters', 'status')
52 exclude = ('type', 'parameters', 'status')
48
53
49 class ExtFileField(forms.FileField):
54 class ExtFileField(forms.FileField):
50 """
55 """
51 Same as forms.FileField, but you can specify a file extension whitelist.
56 Same as forms.FileField, but you can specify a file extension whitelist.
@@ -75,9 +80,9 class ExtFileField(forms.FileField):
75 ext = ext.lower()
80 ext = ext.lower()
76 if ext not in self.extensions:
81 if ext not in self.extensions:
77 raise forms.ValidationError('Not allowed file type: %s' % ext)
82 raise forms.ValidationError('Not allowed file type: %s' % ext)
78
83
79
84
80 class JARSImportForm(forms.Form):
85 class JARSImportForm(forms.Form):
81
86
82 #file_name = ExtFileField(extensions=['.racp', '.json', '.dat'])
87 #file_name = ExtFileField(extensions=['.racp', '.json', '.dat'])
83 file_name = ExtFileField(extensions=['.json']) No newline at end of file
88 file_name = ExtFileField(extensions=['.json'])
@@ -1,12 +1,12
1 import json
2 import requests
3
1 from django.db import models
4 from django.db import models
2 from apps.main.models import Configuration
3 from django.core.validators import MinValueValidator, MaxValueValidator
5 from django.core.validators import MinValueValidator, MaxValueValidator
4 from django.core.urlresolvers import reverse
6 from django.core.urlresolvers import reverse
5 from devices.jars import api
6
7
7 from apps.rc.models import RCConfiguration
8 from apps.main.models import Configuration
8
9 from apps.main.utils import Params
9 import json
10 # Create your models here.
10 # Create your models here.
11
11
12 EXPERIMENT_TYPE = (
12 EXPERIMENT_TYPE = (
@@ -19,6 +19,13 DATA_TYPE = (
19 (1, 'FLOAT'),
19 (1, 'FLOAT'),
20 )
20 )
21
21
22 DECODE_TYPE = (
23 (0, 'None'),
24 (1, 'TimeDomain'),
25 (2, 'FreqDomain'),
26 (3, 'InvFreqDomain'),
27 )
28
22 class JARSfilter(models.Model):
29 class JARSfilter(models.Model):
23
30
24 JARS_NBITS = 32
31 JARS_NBITS = 32
@@ -26,12 +33,12 class JARSfilter(models.Model):
26 name = models.CharField(max_length=60, unique=True, default='')
33 name = models.CharField(max_length=60, unique=True, default='')
27 clock = models.FloatField(verbose_name='Clock In (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
34 clock = models.FloatField(verbose_name='Clock In (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
28 mult = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=5)
35 mult = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=5)
29 fch = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MinValueValidator(0), MaxValueValidator(150)], max_digits=19, decimal_places=16, null=True, default=49.9200)
36 fch = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MaxValueValidator(150)], max_digits=19, decimal_places=16, null=True, default=49.9200)
30 fch_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)',validators=[MinValueValidator(0), MaxValueValidator(2**JARS_NBITS-1)], null=True, default=721554505)
37 fch_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)',validators=[MinValueValidator(-9223372036854775808), MaxValueValidator(2**JARS_NBITS-1)], null=True, default=721554505)
31 filter_fir = models.PositiveIntegerField(verbose_name='FIR Filter',validators=[MinValueValidator(1), MaxValueValidator(20)], default = 6)
38 filter_2 = models.PositiveIntegerField(verbose_name='Filter 2',validators=[MinValueValidator(2), MaxValueValidator(100)], default = 10)
32 filter_2 = models.PositiveIntegerField(verbose_name='Filter 2',validators=[MinValueValidator(1), MaxValueValidator(20)], default = 10)
39 filter_5 = models.PositiveIntegerField(verbose_name='Filter 5',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 1)
33 filter_5 = models.PositiveIntegerField(verbose_name='Filter 5',validators=[MinValueValidator(1), MaxValueValidator(20)], default = 1)
40 filter_fir = models.PositiveIntegerField(verbose_name='FIR Filter',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 6)
34 speed = models.PositiveIntegerField(verbose_name='Speed',validators=[MinValueValidator(0), MaxValueValidator(100000)], default = 0)
41 #speed = models.PositiveIntegerField(verbose_name='Speed',validators=[MinValueValidator(0), MaxValueValidator(100000)], default = 0)
35
42
36 class Meta:
43 class Meta:
37 db_table = 'jars_filters'
44 db_table = 'jars_filters'
@@ -43,7 +50,7 class JARSfilter(models.Model):
43
50
44 parameters = {}
51 parameters = {}
45
52
46 parameters['name'] = self.name
53 #parameters['name'] = self.name
47 parameters['clock'] = float(self.clock)
54 parameters['clock'] = float(self.clock)
48 parameters['mult'] = int(self.mult)
55 parameters['mult'] = int(self.mult)
49 parameters['fch'] = float(self.fch)
56 parameters['fch'] = float(self.fch)
@@ -51,13 +58,13 class JARSfilter(models.Model):
51 parameters['filter_fir'] = int(self.filter_fir)
58 parameters['filter_fir'] = int(self.filter_fir)
52 parameters['filter_2'] = int(self.filter_2)
59 parameters['filter_2'] = int(self.filter_2)
53 parameters['filter_5'] = int(self.filter_5)
60 parameters['filter_5'] = int(self.filter_5)
54 parameters['speed'] = int(self.speed)
61 #parameters['speed'] = int(self.speed)
55
62
56 return parameters
63 return parameters
57
64
58 def dict_to_parms(self, parameters):
65 def dict_to_parms(self, parameters):
59
66
60 self.name = parameters['name']
67 #self.name = parameters['name']
61 self.clock = parameters['clock']
68 self.clock = parameters['clock']
62 self.mult = parameters['mult']
69 self.mult = parameters['mult']
63 self.fch = parameters['fch']
70 self.fch = parameters['fch']
@@ -65,7 +72,7 class JARSfilter(models.Model):
65 self.filter_fir = parameters['filter_fir']
72 self.filter_fir = parameters['filter_fir']
66 self.filter_2 = parameters['filter_2']
73 self.filter_2 = parameters['filter_2']
67 self.filter_5 = parameters['filter_5']
74 self.filter_5 = parameters['filter_5']
68 self.speed = parameters['speed']
75 #self.speed = parameters['speed']
69
76
70
77
71 class JARSConfiguration(Configuration):
78 class JARSConfiguration(Configuration):
@@ -81,22 +88,24 class JARSConfiguration(Configuration):
81 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[MinValueValidator(1), MaxValueValidator(4)], default = 1)
88 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[MinValueValidator(1), MaxValueValidator(4)], default = 1)
82 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[MinValueValidator(1), MaxValueValidator(8)], default = 5)
89 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[MinValueValidator(1), MaxValueValidator(8)], default = 5)
83 channels = models.CharField(verbose_name='Channels', max_length=15, default = '1,2,3,4,5')
90 channels = models.CharField(verbose_name='Channels', max_length=15, default = '1,2,3,4,5')
84 rd_directory = models.CharField(verbose_name='Raw Data Directory', max_length=200, default='', blank=True, null=True)
91 #rd_directory = models.CharField(verbose_name='Raw Data Directory', max_length=200, default='', blank=True, null=True)
85 pd_directory = models.CharField(verbose_name='Process Data Directory', max_length=200, default='', blank=True, null=True)
92 #pd_directory = models.CharField(verbose_name='Process Data Directory', max_length=200, default='', blank=True, null=True)
86 #raw_data_blocks = models.PositiveIntegerField(verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=120)
87 data_type = models.PositiveIntegerField(verbose_name='Data Type', choices=DATA_TYPE, default=0)
93 data_type = models.PositiveIntegerField(verbose_name='Data Type', choices=DATA_TYPE, default=0)
88 acq_profiles = models.PositiveIntegerField(verbose_name='Acquired Profiles', validators=[MaxValueValidator(5000)], default=400)
94 raw_data_blocks = models.PositiveIntegerField(verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=60)
89 profiles_block = models.PositiveIntegerField(verbose_name='Profiles Per Block', validators=[MaxValueValidator(5000)], default=400)
95 profiles_block = models.PositiveIntegerField(verbose_name='Profiles Per Block', default=400)
96 acq_profiles = models.PositiveIntegerField(verbose_name='Acquired Profiles', default=400)
90 ftp_interval = models.PositiveIntegerField(verbose_name='FTP Interval', default=60)
97 ftp_interval = models.PositiveIntegerField(verbose_name='FTP Interval', default=60)
91 fftpoints = models.PositiveIntegerField(verbose_name='FFT Points',default=16)
98 fftpoints = models.PositiveIntegerField(verbose_name='FFT Points',default=16)
92 cohe_integr_str = models.PositiveIntegerField(verbose_name='Coh. Int. Stride',validators=[MinValueValidator(1)], default=30)
99 cohe_integr_str = models.PositiveIntegerField(verbose_name='Coh. Int. Stride',validators=[MinValueValidator(1)], default=30)
93 cohe_integr = models.PositiveIntegerField(verbose_name='Coherent Integrations',validators=[MinValueValidator(1)], default=30)
100 cohe_integr = models.PositiveIntegerField(verbose_name='Coherent Integrations',validators=[MinValueValidator(1)], default=30)
94 incohe_integr = models.PositiveIntegerField(verbose_name='Incoherent Integrations',validators=[MinValueValidator(1)], default=30)
101 incohe_integr = models.PositiveIntegerField(verbose_name='Incoherent Integrations',validators=[MinValueValidator(1)], default=30)
102 decode_data = models.PositiveIntegerField(verbose_name='Decode Data', choices=DECODE_TYPE, default=0)
103 post_coh_int = models.BooleanField(verbose_name='Post Coherent Integration', default=False)
95 filter = models.ForeignKey(JARSfilter, on_delete=models.CASCADE, null=True)
104 filter = models.ForeignKey(JARSfilter, on_delete=models.CASCADE, null=True)
96 spectral_number = models.PositiveIntegerField(verbose_name='# Spectral Combinations',validators=[MinValueValidator(1)], default=1)
105 spectral_number = models.PositiveIntegerField(verbose_name='# Spectral Combinations',validators=[MinValueValidator(1)], default=1)
97 spectral = models.CharField(verbose_name='Combinations', max_length=5000, default = '[0, 0],')
106 spectral = models.CharField(verbose_name='Combinations', max_length=5000, default = '[0, 0],')
98 create_directory = models.BooleanField(verbose_name='Create Directory Per Day', default=True)
107 create_directory = models.BooleanField(verbose_name='Create Directory Per Day', default=True)
99 include_expname = models.BooleanField(verbose_name='Experiment Name in Directory', default=True)
108 include_expname = models.BooleanField(verbose_name='Experiment Name in Directory', default=False)
100 #acq_link = models.BooleanField(verbose_name='Acquisition Link', default=True)
109 #acq_link = models.BooleanField(verbose_name='Acquisition Link', default=True)
101 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
110 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
102 save_ch_dc = models.BooleanField(verbose_name='Save Channels DC', default=True)
111 save_ch_dc = models.BooleanField(verbose_name='Save Channels DC', default=True)
@@ -106,99 +115,59 class JARSConfiguration(Configuration):
106 class Meta:
115 class Meta:
107 db_table = 'jars_configurations'
116 db_table = 'jars_configurations'
108
117
109 def parms_to_dict(self):
110
111 parameters = {}
112
113 parameters['device_id'] = self.device.id
114 parameters['name'] = self.name
115 parameters['device_type'] = self.device.device_type.name
116 #parameters['rc'] = self.rc.name
117 parameters['exp_type'] = self.exp_type
118 parameters['exptype'] = EXPERIMENT_TYPE[self.exp_type][1]
119 parameters['cards_number'] = self.cards_number
120 parameters['channels_number'] = self.channels_number
121 parameters['channels'] = self.channels
122 parameters['rd_directory'] = self.rd_directory
123 #parameters['raw_data_blocks'] = self.raw_data_blocks
124 parameters['data_type'] = self.data_type
125 parameters['cohe_integr_str'] = self.cohe_integr_str
126 parameters['acq_profiles'] = self.acq_profiles
127 parameters['profiles_block'] = self.profiles_block
128 parameters['ftp_interval'] = self.ftp_interval
129 parameters['fftpoints'] = self.fftpoints
130 parameters['cohe_integr'] = self.cohe_integr
131 #parameters['incohe_integr'] = self.incohe_integr
132 parameters['filter'] = self.filter.name
133 parameters['filter_parms'] = self.filter_parms
134 #parameters['spectral_number'] = self.spectral_number
135 #parameters['spectral'] = self.spectral
136 parameters['create_directory'] = bool(self.create_directory)
137 parameters['include_expname'] = bool(self.include_expname)
138 #parameters['acq_link'] = bool(self.acq_link)
139 #parameters['view_raw_data'] = bool(self.view_raw_data)
140 parameters['save_ch_dc'] = bool(self.save_ch_dc)
141 parameters['save_data'] = bool(self.save_data)
142
143 if parameters['exptype'] == 'PDATA':
144 parameters['incohe_integr'] = self.incohe_integr
145 parameters['spectral_number'] = self.spectral_number
146 parameters['spectral'] = self.spectral
147 parameters['pd_directory'] = self.pd_directory
148
149 return parameters
150
151 def add_parms_to_filter(self):
118 def add_parms_to_filter(self):
152 self.filter_parms = self.filter.parms_to_dict()
119 self.filter_parms = self.filter.parms_to_dict()
153 self.save()
120 self.save()
154
121
155 def dict_to_parms(self, parameters):
122 def dict_to_parms(self, params, id=None):
123
124 if id is not None:
125 data = Params(params).get_conf(id_conf=id)
126 else:
127 data = Params(params).get_conf(dtype='jars')
128
129 self.name = data['name']
130 self.exp_type = data['exp_type']
131 #if data['exp_type'] in (1, '1') :
132 self.incohe_integr = data['incohe_integr']
133 self.spectral_number = data['spectral_number']
134 self.spectral = data['spectral']
135 #self.pd_directory = data['pd_directory']
136 self.cards_number = data['cards_number']
137 self.channels_number = data['channels_number']
138 self.channels = data['channels']
139 #self.rd_directory = data['rd_directory']
140 #self.raw_data_blocks = data['raw_data_blocks']
141 self.data_type = data['data_type']
142 self.cohe_integr_str = data['cohe_integr_str']
143 self.acq_profiles = data['acq_profiles']
144 self.profiles_block = data['profiles_block']
145 self.ftp_interval = data['ftp_interval']
146 self.fftpoints = data['fftpoints']
147 self.cohe_integr = data['cohe_integr']
148 self.filter_parms = json.dumps(data['filter_parms'])
149 self.create_directory = data['create_directory']
150 self.include_expname = data['include_expname']
151 #self.acq_link = data['acq_link']
152 #self.view_raw_data = data['view_raw_data']
153 self.save_ch_dc = data['save_ch_dc']
154 self.save_data = data['save_data']
155 self.save()
156
156
157 self.name = parameters['name']
157 def request(self, cmd, method='get', **kwargs):
158 self.device.id = int(parameters['device_id'])
158
159
159 req = getattr(requests, method)(self.device.url(cmd), **kwargs)
160 self.exp_type = int(parameters['exp_type'])
160 payload = req.json()
161 if parameters['exptype'] == 'PDATA':
161 return payload
162 self.incohe_integr = parameters['incohe_integr']
163 self.spectral_number = parameters['spectral_number']
164 self.spectral = parameters['spectral']
165 self.pd_directory = parameters['pd_directory']
166
167 self.cards_number = int(parameters['cards_number'])
168 self.channels_number = int(parameters['channels_number'])
169 self.channels = parameters['channels']
170 self.rd_directory = parameters['rd_directory']
171 #self.raw_data_blocks = parameters['raw_data_blocks']
172 self.data_type = parameters['data_type']
173 self.cohe_integr_str = parameters['cohe_integr_str']
174 self.acq_profiles = parameters['acq_profiles']
175 self.profiles_block = parameters['profiles_block']
176 self.ftp_interval = parameters['ftp_interval']
177 self.fftpoints = parameters['fftpoints']
178 self.cohe_integr = parameters['cohe_integr']
179
180 filter_name = parameters['filter']
181 self.filter = JARSfilter.objects.get(name=filter_name)
182 self.add_parms_to_filter()
183 self.filter_parms = parameters['filter_parms']
184
185 self.create_directory = bool(parameters['create_directory'])
186 self.include_expname = bool(parameters['include_expname'])
187 #self.acq_link = bool(parameters['acq_link'])
188 #self.view_raw_data = bool(parameters['view_raw_data'])
189 self.save_ch_dc = bool(parameters['save_ch_dc'])
190 self.save_data = bool(parameters['save_data'])
191
162
192 def status_device(self):
163 def status_device(self):
193
164
194 try:
165 try:
195 answer = api.status(self.device.ip_address,self.device.port_address)
166 payload = self.request('status',
196 self.device.status = int(answer[0])
167 params={'name': self.experiment.name})
168 self.device.status = payload['status']
197 self.device.save()
169 self.device.save()
198 self.message = answer[2:]
170 self.message = payload['message']
199 if self.device.status == 0:
200 return False
201
202 except Exception as e:
171 except Exception as e:
203 self.device.status = 0
172 self.device.status = 0
204 self.message = str(e)
173 self.message = str(e)
@@ -210,13 +179,10 class JARSConfiguration(Configuration):
210 def stop_device(self):
179 def stop_device(self):
211
180
212 try:
181 try:
213 answer = api.stop(self.device.ip_address,self.device.port_address)
182 payload = self.request('stop', 'post')
214 self.device.status = int(answer[0])
183 self.device.status = payload['status']
215 self.message = answer[2:]
216 self.device.save()
184 self.device.save()
217 if self.device.status == 0 or self.device.status == 1:
185 self.message = payload['message']
218 return False
219
220 except Exception as e:
186 except Exception as e:
221 self.device.status = 0
187 self.device.status = 0
222 self.message = str(e)
188 self.message = str(e)
@@ -228,26 +194,15 class JARSConfiguration(Configuration):
228 def read_device(self):
194 def read_device(self):
229
195
230 try:
196 try:
231 answer = api.read(self.device.ip_address,self.device.port_address)
197 payload = self.request('read', params={'name': self.experiment.name})
232 self.device.status = int(answer[0])
198 self.message = 'Configuration loaded'
233 self.device.save()
234 self.message = answer[2:]
235 if self.device.status == 1:
236 return False
237 data = json.loads(answer[2:])
238 parms = data['configurations']['jars']
239
240 except:
199 except:
241 self.device.status = 0
200 self.device.status = 0
242 self.device.save()
201 self.device.save()
243 self.message = 'Could not read JARS configuration.'
202 self.message = 'Could not read JARS configuration.'
244 return False
203 return False
245
204
246 #self.dict_to_parms(parms)
205 return payload
247 self.message = 'Current JARS configuration was read successfully.'
248 self.device.save()
249 return parms
250
251
206
252 def write_device(self):
207 def write_device(self):
253
208
@@ -256,22 +211,36 class JARSConfiguration(Configuration):
256 return False
211 return False
257
212
258 data = self.experiment.parms_to_dict()
213 data = self.experiment.parms_to_dict()
259 data = json.loads(data)
260 data['configurations']['dds'] =''
261 data['configurations']['cgs'] =''
262 data['configurations']['rc']['pulses']=''
263 data['configurations']['rc']['delays']=''
264 json_data = json.dumps(data)
265
214
215 for key in data['configurations']['allIds']:
216 if data['configurations']['byId'][key]['device_type'] in ('dds', 'cgs'):
217 data['configurations']['allIds'].remove(key)
218 data['configurations']['byId'].pop(key)
219 elif data['configurations']['byId'][key]['device_type'] == 'jars':
220 data['configurations']['byId'][key] = self.parms_to_dict()['configurations']['byId'][str(self.pk)]
221 elif data['configurations']['byId'][key]['device_type'] == 'rc':
222 data['configurations']['byId'][key]['pulses'] = ''
223 data['configurations']['byId'][key]['delays'] = ''
224 rc_ids = [pk for pk in data['configurations']['allIds'] if data['configurations']['byId'][pk]['device_type']=='rc']
225 mix_ids = [pk for pk in rc_ids if data['configurations']['byId'][pk]['mix']]
226 if mix_ids:
227 params = data['configurations']['byId'][mix_ids[0]]['parameters']
228 rc = data['configurations']['byId'][params.split('-')[0].split('|')[0]]
229 rc['mix'] = True
230 data['configurations']['byId'][rc['id']] = rc
231 elif len(rc_ids)==0:
232 self.message = 'Missing RC configuration'
233 return False
234
235 json_data = json.dumps(data)
236 print json_data
266 try:
237 try:
267 answer = api.configure(self.device.ip_address,self.device.port_address,json_data)
238 payload = self.request('write', 'post', json=json_data)
268 self.device.status = int(answer[0])
239 self.device.status = payload['status']
269 self.message = answer[2:]
240 self.message = payload['message']
270 self.device.save()
241 self.device.save()
271 if self.device.status == 1:
242 if self.device.status == 1:
272 return False
243 return False
273 if self.device.status == 3:
274 return False
275
244
276 except Exception as e:
245 except Exception as e:
277 self.device.status = 0
246 self.device.status = 0
@@ -281,13 +250,13 class JARSConfiguration(Configuration):
281
250
282 return True
251 return True
283
252
284
285 def start_device(self):
253 def start_device(self):
286
254
287 try:
255 try:
288 answer = api.start(self.device.ip_address,self.device.port_address)
256 payload = self.request('start', 'post',
289 self.device.status = int(answer[0])
257 json={'name': self.experiment.name})
290 self.message = answer[2:]
258 self.device.status = payload['status']
259 self.message = payload['message']
291 self.device.save()
260 self.device.save()
292 if self.device.status == 1:
261 if self.device.status == 1:
293 return False
262 return False
@@ -300,21 +269,10 class JARSConfiguration(Configuration):
300
269
301 return True
270 return True
302
271
272 def update_from_file(self, filename):
303
273
304 def echo(self):
274 f = JARSFile(filename)
305
275 self.dict_to_parms(f.data)
306 answer = api.echo(self.device.ip_address,self.device.port_address,'(=')
307 #print answer
308 self.device.status = int(answer[0])
309 self.message = answer[2:]
310
311 self.device.save()
312
313 return #self.device.status
314
315 def update_from_file(self, parameters):
316
317 self.dict_to_parms(parameters)
318 self.save()
276 self.save()
319
277
320 def get_absolute_url_import(self):
278 def get_absolute_url_import(self):
@@ -14,15 +14,17 function updateParameters(){
14 var fclock = $("#id_clock").val(); // clock frequency (MHz)
14 var fclock = $("#id_clock").val(); // clock frequency (MHz)
15 var fch = $("#id_fch").val(); // RF frequency (MHz)
15 var fch = $("#id_fch").val(); // RF frequency (MHz)
16 var m_dds = $("#id_mult").val(); // DDS multiplier
16 var m_dds = $("#id_mult").val(); // DDS multiplier
17
17
18 if (fch < fclock/2){ // Si se cumple nyquist
18 if (Math.abs(fch) < fclock/2){ // Si se cumple nyquist
19 var nco = Math.pow(2,32)*((fch/fclock)%1);
19 var nco = Math.pow(2,32)*((fch/fclock)%1);
20 var nco_i = Math.round(nco/m_dds)*m_dds;
20 //var nco_i = Math.round(nco/m_dds)*m_dds;
21 var nco_i = Math.round(nco)
21 }
22 }
22 else {
23 else {
23 nco = Math.pow(2,32)*(fclock-fch)/(fclock);
24 nco = Math.pow(2,32)*(fclock-fch)/(fclock);
24 nco_i = Math.round(nco/m_dds)*m_dds;
25 //nco_i = Math.round(nco/m_dds)*m_dds;
26 var nco_i = Math.round(nco)
25 }
27 }
26 fch_decimal = $("#id_fch_decimal")
28 fch_decimal = $("#id_fch_decimal")
27 $(fch_decimal).val(nco_i)
29 $(fch_decimal).val(nco_i)
28 } No newline at end of file
30 }
@@ -1,11 +1,16
1 $(document).ready(function() {
1 $(document).ready(function() {
2 RawDataOrPData()
2 RawDataOrPData()
3 DecodeDataOrNone()
3 });
4 });
4
5
5 $("#id_exp_type").change(function() {
6 $("#id_exp_type").change(function() {
6 RawDataOrPData()
7 RawDataOrPData()
7 });
8 });
8
9
10 $("#id_decode_data").change(function() {
11 DecodeDataOrNone()
12 });
13
9 function RawDataOrPData(){
14 function RawDataOrPData(){
10 var type = $("#id_exp_type").val();
15 var type = $("#id_exp_type").val();
11 incohe_integr = $("#id_incohe_integr")
16 incohe_integr = $("#id_incohe_integr")
@@ -17,9 +22,9 function RawDataOrPData(){
17 sel_spec_button = $("#self_spectral_button")
22 sel_spec_button = $("#self_spectral_button")
18 cro_spec_button = $("#cross_spectral_button")
23 cro_spec_button = $("#cross_spectral_button")
19 all_spec_button = $("#all_spectral_button")
24 all_spec_button = $("#all_spectral_button")
20
25
21 if (type == 0) {
26 if (type == 0) {
22 $(incohe_integr).attr('readonly', true);
27 $(incohe_integr).attr('readonly', true);
23 $(spectral).attr('readonly', true);
28 $(spectral).attr('readonly', true);
24 $(fftpoints).attr('readonly', true);
29 $(fftpoints).attr('readonly', true);
25 $(save_ch_dc).attr('disabled', true);
30 $(save_ch_dc).attr('disabled', true);
@@ -48,7 +53,7 function RawDataOrPData(){
48 $("#id_cards_number").on('change', function() {
53 $("#id_cards_number").on('change', function() {
49 var cards_number = $("#id_cards_number").val();
54 var cards_number = $("#id_cards_number").val();
50 channels_number = $("#id_channels_number")
55 channels_number = $("#id_channels_number")
51 $(channels_number).val(cards_number*2)
56 $(channels_number).val(cards_number*2)
52 updateChannelsNumber();
57 updateChannelsNumber();
53 });
58 });
54
59
@@ -62,6 +67,13 $("#id_spectral").on('change', function() {
62 updateSpectralNumber();
67 updateSpectralNumber();
63 });
68 });
64
69
70 $("#id_cohe_integr").on('change', function() {
71 updateAcquiredProfiles();
72 });
73
74 $("#id_profiles_block").on('change', function() {
75 updateAcquiredProfiles();
76 });
65
77
66 function updateSpectralNumber(){
78 function updateSpectralNumber(){
67 var spectral_comb = $("#id_spectral").val();
79 var spectral_comb = $("#id_spectral").val();
@@ -77,18 +89,39 function updateSpectralNumber(){
77
89
78
90
79 function updateChannelsNumber() {
91 function updateChannelsNumber() {
80
92
81 var channels_number = $("#id_channels_number").val();
93 var channels_number = $("#id_channels_number").val();
82 channels = $("#id_channels")
94 channels = $("#id_channels")
83 sequence = ""
95 sequence = ""
84
96
85 for (i = 1; i <= channels_number; i++) {
97 for (i = 1; i <= channels_number; i++) {
86 if (i==1){
98 if (i==1){
87 sequence = i.toString()
99 sequence = i.toString()
88 }
100 }
89 else{
101 else{
90 sequence = sequence + "," + i.toString()
102 sequence = sequence + "," + i.toString()
91 }
103 }
92 }
104 }
93 $(channels).val(sequence)
105 $(channels).val(sequence)
94 } No newline at end of file
106 }
107
108
109 function DecodeDataOrNone() {
110 var decode_data = $("#id_decode_data").val();
111 post_coh_int = $("#id_post_coh_int")
112 if (decode_data != 0) {
113 $(post_coh_int).attr('readonly', false);
114 $(post_coh_int).attr('disabled', false);
115 }
116 else {
117 $(post_coh_int).attr('readonly', true);
118 $(post_coh_int).attr('disabled', true);
119 }
120 }
121
122 function updateAcquiredProfiles() {
123 var profiles_block = $("#id_profiles_block").val();
124 var cohe_integr = $("#id_cohe_integr").val();
125 var acq_prof = profiles_block * cohe_integr;
126 $("#id_acq_profiles").val(acq_prof)
127 }
@@ -24,11 +24,11 def jars_conf(request, id_conf):
24 kwargs['dev_conf'] = conf
24 kwargs['dev_conf'] = conf
25 kwargs['dev_conf_keys'] = ['name',
25 kwargs['dev_conf_keys'] = ['name',
26 'cards_number', 'channels_number', 'channels',
26 'cards_number', 'channels_number', 'channels',
27 'rd_directory', 'pd_directory',
27 #'rd_directory', 'pd_directory',
28 'data_type',
28 'data_type',
29 'acq_profiles', 'profiles_block', 'ftp_interval', 'fftpoints',
29 'acq_profiles', 'profiles_block', 'raw_data_blocks', 'ftp_interval', 'fftpoints',
30 'cohe_integr_str',
30 'cohe_integr_str', 'decode_data',
31 'incohe_integr', 'cohe_integr', 'filter', 'spectral_number',
31 'incohe_integr', 'cohe_integr', 'spectral_number',
32 'spectral', 'create_directory', 'include_expname',
32 'spectral', 'create_directory', 'include_expname',
33 'save_ch_dc', 'save_data']
33 'save_ch_dc', 'save_data']
34
34
@@ -65,7 +65,7 def jars_conf_edit(request, id_conf):
65
65
66 kwargs = {}
66 kwargs = {}
67
67
68 kwargs['filter_id'] = conf.filter.id
68 kwargs['filter_id'] = 1
69 kwargs['id_dev'] = conf.id
69 kwargs['id_dev'] = conf.id
70 kwargs['form'] = form
70 kwargs['form'] = form
71 kwargs['title'] = 'Device Configuration'
71 kwargs['title'] = 'Device Configuration'
@@ -80,16 +80,15 def import_file(request, conf_id):
80 if request.method=='POST':
80 if request.method=='POST':
81 form = JARSImportForm(request.POST, request.FILES)
81 form = JARSImportForm(request.POST, request.FILES)
82 if form.is_valid():
82 if form.is_valid():
83 try:
83 #try:
84 parms = conf.import_from_file(request.FILES['file_name'])
84 if True:
85
85 data = conf.import_from_file(request.FILES['file_name'])
86 if parms:
86 conf.dict_to_parms(data)
87 conf.update_from_file(parms)
87 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
88 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
88 return redirect(conf.get_absolute_url_edit())
89 return redirect(conf.get_absolute_url_edit())
90
89
91 except Exception as e:
90 #except Exception as e:
92 messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
91 # messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
93
92
94 else:
93 else:
95 messages.warning(request, 'Your current configuration will be replaced')
94 messages.warning(request, 'Your current configuration will be replaced')
@@ -148,7 +147,9 def view_filter(request, conf_id, filter_id):
148 filter = get_object_or_404(JARSfilter, pk=filter_id)
147 filter = get_object_or_404(JARSfilter, pk=filter_id)
149
148
150 filter_parms = eval(conf.filter_parms)
149 filter_parms = eval(conf.filter_parms)
151 filter.name = filter_parms['name']
150 if filter_parms.__class__.__name__=='str':
151 filter_parms = eval(filter_parms)
152 #filter.name = filter_parms['name']
152 filter.clock = filter_parms['clock']
153 filter.clock = filter_parms['clock']
153 filter.mult = filter_parms['mult']
154 filter.mult = filter_parms['mult']
154 filter.fch = filter_parms['fch']
155 filter.fch = filter_parms['fch']
@@ -156,16 +157,15 def view_filter(request, conf_id, filter_id):
156 filter.filter_fir = filter_parms['filter_fir']
157 filter.filter_fir = filter_parms['filter_fir']
157 filter.filter_2 = filter_parms['filter_2']
158 filter.filter_2 = filter_parms['filter_2']
158 filter.filter_5 = filter_parms['filter_5']
159 filter.filter_5 = filter_parms['filter_5']
159 filter.speed = filter_parms['speed']
160
160
161 kwargs = {}
161 kwargs = {}
162 kwargs['conf'] = conf
162 kwargs['conf'] = conf
163 kwargs['filter'] = filter
163 kwargs['filter'] = filter
164 kwargs['dev_conf'] = filter
164 kwargs['dev_conf'] = filter
165 kwargs['dev_conf_keys'] = ['name', 'clock',
165 kwargs['dev_conf_keys'] = ['clock', 'mult', #'name',
166 'mult', 'fch', 'fch_decimal',
166 'fch', 'fch_decimal',
167 'filter_fir', 'filter_2',
167 'filter_2', 'filter_5',
168 'filter_5', 'speed']
168 'filter_fir']
169
169
170 kwargs['title'] = 'Filter View'
170 kwargs['title'] = 'Filter View'
171 kwargs['suptitle'] = 'Details'
171 kwargs['suptitle'] = 'Details'
@@ -188,7 +188,7 def edit_filter(request, conf_id, filter_id):
188
188
189 if request.method=='POST':
189 if request.method=='POST':
190 parms = {}
190 parms = {}
191 parms['name'] = request.POST['name']
191 #parms['name'] = request.POST['name']
192 parms['clock'] = request.POST['clock']
192 parms['clock'] = request.POST['clock']
193 parms['mult'] = request.POST['mult']
193 parms['mult'] = request.POST['mult']
194 parms['fch'] = request.POST['fch']
194 parms['fch'] = request.POST['fch']
@@ -196,7 +196,6 def edit_filter(request, conf_id, filter_id):
196 parms['filter_fir'] = request.POST['filter_fir']
196 parms['filter_fir'] = request.POST['filter_fir']
197 parms['filter_2'] = request.POST['filter_2']
197 parms['filter_2'] = request.POST['filter_2']
198 parms['filter_5'] = request.POST['filter_5']
198 parms['filter_5'] = request.POST['filter_5']
199 parms['speed'] = request.POST['speed']
200
199
201 conf.filter_parms = parms
200 conf.filter_parms = parms
202 conf.save()
201 conf.save()
General Comments 0
You need to be logged in to leave comments. Login now