##// END OF EJS Templates
App JARS funcional
gonzalesluisfrancisco -
r345:cf456d2fb627
parent child
Show More
@@ -0,0 +1,2
1 {% extends "base_edit.html" %}
2
@@ -2,8 +2,7
2
2
3 The Integrated Radar System (SIR) is a web application that allows the configuration of the radar devices as required by the experiment,
3 The Integrated Radar System (SIR) is a web application that allows the configuration of the radar devices as required by the experiment,
4 This app allows the creation of Campaigns, Experiment and Device Configurations.
4 This app allows the creation of Campaigns, Experiment and Device Configurations.
5 For the python3.0 update please check the requeriments vrsion for each package. It depends on the python 3.7 or 3.8 version.
5 For the python3.0 update please check the requeriments vrsion for each package. It depends on the python 3.7 or 3.8 version. Special attention with the bokeh version.
6 Special attention with the bokeh version.
7 For more information visit: http://jro-dev.igp.gob.pe:3000/projects/sistema-integrado-de-radar/wiki
6 For more information visit: http://jro-dev.igp.gob.pe:3000/projects/sistema-integrado-de-radar/wiki
8
7
9 ## Installation
8 ## Installation
@@ -21,7 +21,7 from .forms import ABSConfigurationForm, ABSBeamEditForm, ABSBeamAddForm, ABSImp
21
21
22 from .utils.overJroShow import overJroShow
22 from .utils.overJroShow import overJroShow
23 #from .utils.OverJRO import OverJRO
23 #from .utils.OverJRO import OverJRO
24 # Create your views here.
24 #Create your views here.
25 import json, ast
25 import json, ast
26
26
27
27
@@ -307,13 +307,13 def add_beam(request, id_conf):
307 beam_data = get_values_from_form(request.POST)
307 beam_data = get_values_from_form(request.POST)
308
308
309 new_beam = ABSBeam(
309 new_beam = ABSBeam(
310 name = beam_data['name'],
310 name = beam_data['name'],
311 antenna = json.dumps(beam_data['antenna']),
311 antenna = json.dumps(beam_data['antenna']),
312 abs_conf = conf,
312 abs_conf = conf,
313 tx = json.dumps(beam_data['tx']),
313 tx = json.dumps(beam_data['tx']),
314 rx = json.dumps(beam_data['rx']),
314 rx = json.dumps(beam_data['rx']),
315 ues = json.dumps(beam_data['ues']),
315 ues = json.dumps(beam_data['ues']),
316 only_rx = json.dumps(beam_data['only_rx'])
316 only_rx = json.dumps(beam_data['only_rx'])
317 )
317 )
318 new_beam.save()
318 new_beam.save()
319 messages.success(request, 'Beam: "%s" has been added.' % new_beam.name)
319 messages.success(request, 'Beam: "%s" has been added.' % new_beam.name)
@@ -323,17 +323,16 def add_beam(request, id_conf):
323 ###### SIDEBAR ######
323 ###### SIDEBAR ######
324 kwargs = {}
324 kwargs = {}
325
325
326 #kwargs['dev_conf'] = conf.device
326 #kwargs['dev_conf'] = conf.device
327 #kwargs['id_dev'] = conf.device
327 #kwargs['id_dev'] = conf.device
328 kwargs['id_conf'] = conf.id
328 #kwargs['previous'] = conf.get_absolute_url_edit()
329 kwargs['form'] = form
329 kwargs['id_conf'] = conf.id
330 kwargs['title'] = 'ABS Beams'
330 kwargs['form'] = form
331 kwargs['suptitle'] = 'Add Beam'
331 kwargs['title'] = 'ABS Beams'
332 kwargs['button'] = 'Add'
332 kwargs['suptitle'] = 'Add Beam'
333 kwargs['button'] = 'Add'
333 kwargs['no_sidebar'] = True
334 kwargs['no_sidebar'] = True
334
335 kwargs['edit'] = True
335 #kwargs['previous'] = conf.get_absolute_url_edit()
336 kwargs['edit'] = True
337
336
338 return render(request, 'abs_add_beam.html', kwargs)
337 return render(request, 'abs_add_beam.html', kwargs)
339
338
@@ -10,7 +10,7 def create_choices_from_model(model, filter_id=None):
10
10
11 #instance = globals()[model]
11 #instance = globals()[model]
12 choices = model.objects.all().values_list('pk', 'name')
12 choices = model.objects.all().values_list('pk', 'name')
13 choices = add_empty_choice(choices)
13 choices = add_empty_choice(choices,label="New Choice")
14 return choices
14 return choices
15
15
16 class JARSConfigurationForm(forms.ModelForm):
16 class JARSConfigurationForm(forms.ModelForm):
@@ -37,7 +37,7 class JARSFilterForm(forms.ModelForm):
37
37
38 if 'initial' in kwargs:
38 if 'initial' in kwargs:
39 self.fields['filter_template'] = forms.ChoiceField(
39 self.fields['filter_template'] = forms.ChoiceField(
40 choices=create_choices_from_model(JARSFilter),
40 choices = create_choices_from_model(JARSFilter),
41 initial = kwargs['initial']['id']
41 initial = kwargs['initial']['id']
42 )
42 )
43 # self.fields['name'].initial = kwargs['initial']['id']
43 # self.fields['name'].initial = kwargs['initial']['id']
@@ -65,6 +65,15 class JARSFilterForm(forms.ModelForm):
65 model = JARSFilter
65 model = JARSFilter
66 exclude = ('name', )
66 exclude = ('name', )
67
67
68 class JARSFilterFormNew(forms.ModelForm):
69 def __init__(self, *args, **kwargs):
70 super(JARSFilterFormNew, self).__init__(*args, **kwargs)
71
72 self.fields['f_decimal'].widget.attrs['readonly'] = True
73
74 class Meta:
75 model = JARSFilter
76 exclude = ()
68
77
69 class ExtFileField(forms.FileField):
78 class ExtFileField(forms.FileField):
70 """
79 """
@@ -32,32 +32,32 FILTER = '{"id":1, "clock": 60, "multiplier": 5, "frequency": 49.92, "f_decimal"
32
32
33 class JARSFilter(models.Model):
33 class JARSFilter(models.Model):
34
34
35 JARS_NBITS = 32
35 JARS_NBITS = 32
36
36
37 name = models.CharField(verbose_name='Name', max_length=60, unique=True, default='')
37 name = models.CharField(verbose_name='Name', max_length=60, unique=True, default='')
38 clock = models.FloatField(verbose_name='Clock In (MHz)', validators=[
38 clock = models.FloatField(verbose_name='Clock In (MHz)', validators=[
39 MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
39 MinValueValidator(5), MaxValueValidator(75)], null=True, default=60)
40 multiplier = models.PositiveIntegerField(verbose_name='Multiplier', validators=[
40 multiplier = models.PositiveIntegerField(verbose_name='Multiplier', validators=[
41 MinValueValidator(1), MaxValueValidator(20)], default=5)
41 MinValueValidator(1), MaxValueValidator(20)], default=5)
42 frequency = models.FloatField(verbose_name='Frequency (MHz)', validators=[
42 frequency = models.FloatField(verbose_name='Frequency (MHz)', validators=[
43 MaxValueValidator(150)], null=True, default=49.9200)
43 MaxValueValidator(150)], null=True, default=49.9200)
44 f_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)', validators=[
44 f_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)', validators=[
45 MinValueValidator(-9223372036854775808), MaxValueValidator(2**JARS_NBITS-1)], null=True, default=721554505)
45 MinValueValidator(-9223372036854775808), MaxValueValidator(2**JARS_NBITS-1)], null=True, default=721554505)
46 cic_2 = models.PositiveIntegerField(verbose_name='CIC2', validators=[
46 cic_2 = models.PositiveIntegerField(verbose_name='CIC2', validators=[
47 MinValueValidator(2), MaxValueValidator(100)], default=10)
47 MinValueValidator(2), MaxValueValidator(100)], default=10)
48 scale_cic_2 = models.PositiveIntegerField(verbose_name='Scale CIC2', validators=[
48 scale_cic_2 = models.PositiveIntegerField(verbose_name='Scale CIC2', validators=[
49 MinValueValidator(0), MaxValueValidator(6)], default=1)
49 MinValueValidator(0), MaxValueValidator(6)], default=1)
50 cic_5 = models.PositiveIntegerField(verbose_name='CIC5', validators=[
50 cic_5 = models.PositiveIntegerField(verbose_name='CIC5', validators=[
51 MinValueValidator(1), MaxValueValidator(100)], default=1)
51 MinValueValidator(1), MaxValueValidator(100)], default=1)
52 scale_cic_5 = models.PositiveIntegerField(verbose_name='Scale CIC5', validators=[
52 scale_cic_5 = models.PositiveIntegerField(verbose_name='Scale CIC5', validators=[
53 MinValueValidator(0), MaxValueValidator(20)], default=5)
53 MinValueValidator(0), MaxValueValidator(20)], default=5)
54 fir = models.PositiveIntegerField(verbose_name='FIR', validators=[
54 fir = models.PositiveIntegerField(verbose_name='FIR', validators=[
55 MinValueValidator(1), MaxValueValidator(100)], default=6)
55 MinValueValidator(1), MaxValueValidator(100)], default=6)
56 scale_fir = models.PositiveIntegerField(verbose_name='Scale FIR', validators=[
56 scale_fir = models.PositiveIntegerField(verbose_name='Scale FIR', validators=[
57 MinValueValidator(0), MaxValueValidator(7)], default=3)
57 MinValueValidator(0), MaxValueValidator(7)], default=3)
58 number_taps = models.PositiveIntegerField(verbose_name='Number of taps', validators=[
58 number_taps = models.PositiveIntegerField(verbose_name='Number of taps', validators=[
59 MinValueValidator(1), MaxValueValidator(256)], default=4)
59 MinValueValidator(1), MaxValueValidator(256)], default=4)
60 taps = models.CharField(verbose_name='Taps', max_length=1600, default='0')
60 taps = models.CharField(verbose_name='Taps', max_length=1600, default='0')
61
61
62 class Meta:
62 class Meta:
63 db_table = 'jars_filters'
63 db_table = 'jars_filters'
@@ -67,7 +67,7 class JARSFilter(models.Model):
67
67
68 def jsonify(self):
68 def jsonify(self):
69
69
70 data = {}
70 data = {}
71 ignored = ()
71 ignored = ()
72
72
73 for field in self._meta.fields:
73 for field in self._meta.fields:
@@ -81,82 +81,97 class JARSFilter(models.Model):
81
81
82 parameters = {}
82 parameters = {}
83
83
84 parameters['name'] = self.name
84 parameters['name'] = self.name
85 parameters['clock'] = float(self.clock)
85 parameters['clock'] = float(self.clock)
86 parameters['multiplier'] = int(self.multiplier)
86 parameters['multiplier'] = int(self.multiplier)
87 parameters['frequency'] = float(self.frequency)
87 parameters['frequency'] = float(self.frequency)
88 parameters['f_decimal'] = int(self.frequency)
88 parameters['f_decimal'] = int(self.frequency)
89 parameters['fir'] = int(self.fir)
89 parameters['fir'] = int(self.fir)
90 parameters['cic_2'] = int(self.cic_2)
90 parameters['cic_2'] = int(self.cic_2)
91 parameters['cic_5'] = int(self.cic_5)
91 parameters['cic_5'] = int(self.cic_5)
92
92
93 return parameters
93 return parameters
94
94
95 def dict_to_parms(self, parameters):
95 def dict_to_parms(self, parameters):
96
96
97 self.name = parameters['name']
97 self.name = parameters['name']
98 self.clock = parameters['clock']
98 self.clock = parameters['clock']
99 self.multiplier = parameters['multiplier']
99 self.multiplier = parameters['multiplier']
100 self.frequency = parameters['frequency']
100 self.frequency = parameters['frequency']
101 self.f_decimal = parameters['f_decimal']
101 self.f_decimal = parameters['f_decimal']
102 self.fir = parameters['fir']
102 self.fir = parameters['fir']
103 self.cic_2 = parameters['cic_2']
103 self.cic_2 = parameters['cic_2']
104 self.cic_5 = parameters['cic_5']
104 self.cic_5 = parameters['cic_5']
105
105
106 def dict_to_parms_new(self, parameters):
107
108 self.name = parameters['name']
109 self.clock = parameters['clock']
110 self.multiplier = parameters['multiplier']
111 self.frequency = parameters['frequency']
112 self.f_decimal = parameters['f_decimal']
113 self.fir = parameters['fir']
114 self.cic_2 = parameters['cic_2']
115 self.cic_5 = parameters['cic_5']
116 self.scale_fir = parameters['scale_fir']
117 self.scale_cic_2 = parameters['scale_cic_2']
118 self.scale_cic_5 = parameters['scale_cic_5']
119 self.number_taps = parameters['number_taps']
120 self.taps = parameters['taps']
106
121
107 class JARSConfiguration(Configuration):
122 class JARSConfiguration(Configuration):
108
123
109 ADC_RESOLUTION = 8
124 ADC_RESOLUTION = 8
110 PCI_DIO_BUSWIDTH = 32
125 PCI_DIO_BUSWIDTH = 32
111 HEADER_VERSION = 1103
126 HEADER_VERSION = 1103
112 BEGIN_ON_START = True
127 BEGIN_ON_START = True
113 REFRESH_RATE = 1
128 REFRESH_RATE = 1
114
129
115 exp_type = models.PositiveIntegerField(
130 exp_type = models.PositiveIntegerField(
116 verbose_name='Experiment Type', choices=EXPERIMENT_TYPE, default=0)
131 verbose_name='Experiment Type', choices=EXPERIMENT_TYPE, default=0)
117 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[
132 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[
118 MinValueValidator(1), MaxValueValidator(4)], default=1)
133 MinValueValidator(1), MaxValueValidator(4)], default=1)
119 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[
134 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[
120 MinValueValidator(1), MaxValueValidator(8)], default=5)
135 MinValueValidator(1), MaxValueValidator(8)], default=5)
121 channels = models.CharField(
136 channels = models.CharField(
122 verbose_name='Channels', max_length=15, default='1,2,3,4,5')
137 verbose_name='Channels', max_length=15, default='1,2,3,4,5')
123 data_type = models.PositiveIntegerField(
138 data_type = models.PositiveIntegerField(
124 verbose_name='Data Type', choices=DATA_TYPE, default=0)
139 verbose_name='Data Type', choices=DATA_TYPE, default=0)
125 raw_data_blocks = models.PositiveIntegerField(
140 raw_data_blocks = models.PositiveIntegerField(
126 verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=60)
141 verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=60)
127 profiles_block = models.PositiveIntegerField(
142 profiles_block = models.PositiveIntegerField(
128 verbose_name='Profiles Per Block', default=400)
143 verbose_name='Profiles Per Block', default=400)
129 acq_profiles = models.PositiveIntegerField(
144 acq_profiles = models.PositiveIntegerField(
130 verbose_name='Acquired Profiles', default=400)
145 verbose_name='Acquired Profiles', default=400)
131 ftp_interval = models.PositiveIntegerField(
146 ftp_interval = models.PositiveIntegerField(
132 verbose_name='FTP Interval', default=60)
147 verbose_name='FTP Interval', default=60)
133 fftpoints = models.PositiveIntegerField(
148 fftpoints = models.PositiveIntegerField(
134 verbose_name='FFT Points', default=16)
149 verbose_name='FFT Points', default=16)
135 cohe_integr_str = models.PositiveIntegerField(
150 cohe_integr_str = models.PositiveIntegerField(
136 verbose_name='Coh. Int. Stride', validators=[MinValueValidator(1)], default=30)
151 verbose_name='Coh. Int. Stride', validators=[MinValueValidator(1)], default=30)
137 cohe_integr = models.PositiveIntegerField(
152 cohe_integr = models.PositiveIntegerField(
138 verbose_name='Coherent Integrations', validators=[MinValueValidator(1)], default=30)
153 verbose_name='Coherent Integrations', validators=[MinValueValidator(1)], default=30)
139 incohe_integr = models.PositiveIntegerField(
154 incohe_integr = models.PositiveIntegerField(
140 verbose_name='Incoherent Integrations', validators=[MinValueValidator(1)], default=30)
155 verbose_name='Incoherent Integrations', validators=[MinValueValidator(1)], default=30)
141 decode_data = models.PositiveIntegerField(
156 decode_data = models.PositiveIntegerField(
142 verbose_name='Decode Data', choices=DECODE_TYPE, default=0)
157 verbose_name='Decode Data', choices=DECODE_TYPE, default=0)
143 post_coh_int = models.BooleanField(
158 post_coh_int = models.BooleanField(
144 verbose_name='Post Coherent Integration', default=False)
159 verbose_name='Post Coherent Integration', default=False)
145 spectral_number = models.PositiveIntegerField(
160 spectral_number = models.PositiveIntegerField(
146 verbose_name='# Spectral Combinations', validators=[MinValueValidator(1)], default=1)
161 verbose_name='# Spectral Combinations', validators=[MinValueValidator(1)], default=1)
147 spectral = models.CharField(
162 spectral = models.CharField(
148 verbose_name='Combinations', max_length=5000, default='[0, 0],')
163 verbose_name='Combinations', max_length=5000, default='[0, 0],')
149 create_directory = models.BooleanField(
164 create_directory = models.BooleanField(
150 verbose_name='Create Directory Per Day', default=True)
165 verbose_name='Create Directory Per Day', default=True)
151 include_expname = models.BooleanField(
166 include_expname = models.BooleanField(
152 verbose_name='Experiment Name in Directory', default=False)
167 verbose_name='Experiment Name in Directory', default=False)
153 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
168 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
154 save_ch_dc = models.BooleanField(
169 save_ch_dc = models.BooleanField(
155 verbose_name='Save Channels DC', default=True)
170 verbose_name='Save Channels DC', default=True)
156 save_data = models.BooleanField(verbose_name='Save Data', default=True)
171 save_data = models.BooleanField(verbose_name='Save Data', default=True)
157 filter_parms = models.CharField(
172 filter_parms = models.CharField(
158 max_length=10000, default=FILTER)
173 max_length=10000, default=FILTER)
159 filter = models.ForeignKey(
174 filter = models.ForeignKey(
160 'JARSFilter', verbose_name='Filter', null=True, blank=True, on_delete=models.CASCADE)
175 'JARSFilter', verbose_name='Filter', null=True, blank=True, on_delete=models.CASCADE)
161
176
162 class Meta:
177 class Meta:
@@ -164,11 +179,11 class JARSConfiguration(Configuration):
164
179
165 def filter_resolution(self):
180 def filter_resolution(self):
166 filter_parms = json.loads(self.filter_parms)
181 filter_parms = json.loads(self.filter_parms)
167 clock = float(filter_parms['clock'])
182 clock = float(filter_parms['clock'])
168 cic_2 = filter_parms['cic_2']
183 cic_2 = filter_parms['cic_2']
169 cic_5 = filter_parms['cic_5']
184 cic_5 = filter_parms['cic_5']
170 fir = filter_parms['fir']
185 fir = filter_parms['fir']
171 resolution = round((clock/(cic_2*cic_5*fir)), 2)
186 resolution = round((clock/(cic_2*cic_5*fir)), 2)
172 return resolution
187 return resolution
173
188
174 def dict_to_parms(self, params, id=None):
189 def dict_to_parms(self, params, id=None):
@@ -183,31 +198,31 class JARSConfiguration(Configuration):
183 self.exp_type = data['exp_type']
198 self.exp_type = data['exp_type']
184 #----PDATA----
199 #----PDATA----
185 if self.exp_type == 1:
200 if self.exp_type == 1:
186 self.incohe_integr = data['incohe_integr']
201 self.incohe_integr = data['incohe_integr']
187 self.spectral_number = data['spectral_number']
202 self.spectral_number = data['spectral_number']
188 self.spectral = data['spectral']
203 self.spectral = data['spectral']
189 self.fftpoints = data['fftpoints']
204 self.fftpoints = data['fftpoints']
190 self.save_ch_dc = data['save_ch_dc']
205 self.save_ch_dc = data['save_ch_dc']
191 else:
206 else:
192 self.raw_data_blocks = data['raw_data_blocks']
207 self.raw_data_blocks = data['raw_data_blocks']
193 #----PDATA----
208 #----PDATA----
194 self.cards_number = data['cards_number']
209 self.cards_number = data['cards_number']
195 self.channels_number = data['channels_number']
210 self.channels_number = data['channels_number']
196 self.channels = data['channels']
211 self.channels = data['channels']
197 self.data_type = data['data_type']
212 self.data_type = data['data_type']
198 self.profiles_block = data['profiles_block']
213 self.profiles_block = data['profiles_block']
199 self.acq_profiles = data['acq_profiles']
214 self.acq_profiles = data['acq_profiles']
200 self.ftp_interval = data['ftp_interval']
215 self.ftp_interval = data['ftp_interval']
201 self.cohe_integr_str = data['cohe_integr_str']
216 self.cohe_integr_str = data['cohe_integr_str']
202 self.cohe_integr = data['cohe_integr']
217 self.cohe_integr = data['cohe_integr']
203 #----DECODE----
218 #----DECODE----
204 self.decode_data = data['decode_data']
219 self.decode_data = data['decode_data']
205 self.post_coh_int = data['post_coh_int']
220 self.post_coh_int = data['post_coh_int']
206 #----DECODE----
221 #----DECODE----
207 self.create_directory = data['create_directory']
222 self.create_directory = data['create_directory']
208 self.include_expname = data['include_expname']
223 self.include_expname = data['include_expname']
209 self.save_data = data['save_data']
224 self.save_data = data['save_data']
210 self.filter_parms = json.dumps(data['filter_parms'])
225 self.filter_parms = json.dumps(data['filter_parms'])
211
226
212 self.save()
227 self.save()
213
228
@@ -305,7 +320,7 class JARSConfiguration(Configuration):
305 return False
320 return False
306
321
307 data = self.experiment.parms_to_dict()
322 data = self.experiment.parms_to_dict()
308
323 #print(data)
309 for key in data['configurations']['allIds']:
324 for key in data['configurations']['allIds']:
310 if data['configurations']['byId'][key]['device_type'] in ('dds', 'cgs'):
325 if data['configurations']['byId'][key]['device_type'] in ('dds', 'cgs'):
311 data['configurations']['allIds'].remove(key)
326 data['configurations']['allIds'].remove(key)
@@ -1,5 +1,5
1 {% extends "base.html" %}
1 {% extends "base.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap4 %}
3 {% block mainactive %}active{% endblock %}
3 {% block mainactive %}active{% endblock %}
4
4
5 {% block content-title %}Acquisition System{% endblock %}
5 {% block content-title %}Acquisition System{% endblock %}
@@ -1,6 +1,6
1 {% extends "dev_conf.html" %}
1 {% extends "dev_conf.html" %}
2 {% load static %}
2 {% load static %}
3 {% load bootstrap3 %}
3 {% load bootstrap4 %}
4 {% load main_tags %}
4 {% load main_tags %}
5
5
6 {% block extra-menu-actions %}
6 {% block extra-menu-actions %}
@@ -1,5 +1,5
1 {% extends "dev_conf_edit.html" %}
1 {% extends "dev_conf_edit.html" %}
2 {% load bootstrap3 %}
2 {% load bootstrap4 %}
3 {% load static %}
3 {% load static %}
4 {% load main_tags %}
4 {% load main_tags %}
5
5
@@ -33,7 +33,10
33 });
33 });
34
34
35 $("#id_filter_template").change(function () {
35 $("#id_filter_template").change(function () {
36 document.location = "{% url 'url_change_jars_filter' id_dev %}" + $("#id_filter_template").val();
36 if($("#id_filter_template").val()!=0)
37 document.location = "{% url 'url_change_jars_filter' id_dev %}" + $("#id_filter_template").val();
38 else
39 document.location = "{% url 'url_new_jars_filter' id_dev %}"
37 });
40 });
38
41
39 </script>
42 </script>
@@ -7,6 +7,7 urlpatterns = (
7 path('<int:id_conf>/edit/', views.jars_conf_edit, name='url_edit_jars_conf'),
7 path('<int:id_conf>/edit/', views.jars_conf_edit, name='url_edit_jars_conf'),
8 path('<int:conf_id>/change_filter/', views.change_filter, name='url_change_jars_filter'),
8 path('<int:conf_id>/change_filter/', views.change_filter, name='url_change_jars_filter'),
9 path('<int:conf_id>/change_filter/<int:filter_id>/', views.change_filter, name='url_change_jars_filter'),
9 path('<int:conf_id>/change_filter/<int:filter_id>/', views.change_filter, name='url_change_jars_filter'),
10 path('<int:conf_id>/new_filter/', views.new_filter, name='url_new_jars_filter'),
10 path('<int:conf_id>/import/', views.import_file, name='url_import_jars_conf'),
11 path('<int:conf_id>/import/', views.import_file, name='url_import_jars_conf'),
11 path('<int:conf_id>/read/', views.read_conf, name='url_read_jars_conf'),
12 path('<int:conf_id>/read/', views.read_conf, name='url_read_jars_conf'),
12 path('<int:conf_id>/get_log/', views.get_log, name='url_get_jars_log'),
13 path('<int:conf_id>/get_log/', views.get_log, name='url_get_jars_log'),
@@ -8,7 +8,7 from apps.main.models import Device
8 from apps.main.views import sidebar
8 from apps.main.views import sidebar
9
9
10 from .models import JARSConfiguration, JARSFilter
10 from .models import JARSConfiguration, JARSFilter
11 from .forms import JARSConfigurationForm, JARSFilterForm, JARSImportForm
11 from .forms import JARSConfigurationForm, JARSFilterForm, JARSImportForm,JARSFilterFormNew
12
12
13 import json
13 import json
14 # Create your views here.
14 # Create your views here.
@@ -20,19 +20,19 def jars_conf(request, id_conf):
20 filter_parms = json.loads(conf.filter_parms)
20 filter_parms = json.loads(conf.filter_parms)
21
21
22 kwargs = {}
22 kwargs = {}
23 kwargs['filter'] = filter_parms
23 kwargs['filter'] = filter_parms
24 kwargs['filter_obj'] = JARSFilter.objects.get(pk=1)
24 kwargs['filter_obj'] = JARSFilter.objects.get(pk=1)
25 kwargs['filter_keys'] = ['clock', 'multiplier', 'frequency', 'f_decimal',
25 kwargs['filter_keys'] = ['clock', 'multiplier', 'frequency', 'f_decimal',
26 'cic_2', 'scale_cic_2', 'cic_5', 'scale_cic_5', 'fir',
26 'cic_2', 'scale_cic_2', 'cic_5', 'scale_cic_5', 'fir',
27 'scale_fir', 'number_taps', 'taps']
27 'scale_fir', 'number_taps', 'taps']
28
28
29 filter_resolution = conf.filter_resolution()
29 filter_resolution = conf.filter_resolution()
30 kwargs['resolution'] = '{} (MHz)'.format(filter_resolution)
30 kwargs['resolution'] = '{} (MHz)'.format(filter_resolution)
31 if filter_resolution < 1:
31 if filter_resolution < 1:
32 kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000)
32 kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000)
33
33
34 kwargs['status'] = conf.device.get_status_display()
34 kwargs['status'] = conf.device.get_status_display()
35 kwargs['dev_conf'] = conf
35 kwargs['dev_conf'] = conf
36 kwargs['dev_conf_keys'] = ['cards_number', 'channels_number', 'channels',
36 kwargs['dev_conf_keys'] = ['cards_number', 'channels_number', 'channels',
37 'ftp_interval', 'data_type','acq_profiles',
37 'ftp_interval', 'data_type','acq_profiles',
38 'profiles_block', 'raw_data_blocks', 'ftp_interval',
38 'profiles_block', 'raw_data_blocks', 'ftp_interval',
@@ -59,39 +59,38 def jars_conf(request, id_conf):
59
59
60 def jars_conf_edit(request, id_conf):
60 def jars_conf_edit(request, id_conf):
61
61
62 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
62 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
63
64 filter_parms = json.loads(conf.filter_parms)
63 filter_parms = json.loads(conf.filter_parms)
65
64
66 if request.method=='GET':
65 if request.method=='GET':
67 form = JARSConfigurationForm(instance=conf)
66 form = JARSConfigurationForm(instance=conf)
68 filter_form = JARSFilterForm(initial=filter_parms)
67 filter_form = JARSFilterForm(initial=filter_parms)
69
68
70 if request.method=='POST':
69 if request.method=='POST':
71 form = JARSConfigurationForm(request.POST, instance=conf)
70 form = JARSConfigurationForm(request.POST, instance=conf)
72 filter_form = JARSFilterForm(request.POST)
71 filter_form = JARSFilterForm(request.POST)
73
72
74 if filter_form.is_valid():
73 if filter_form.is_valid():
75 jars_filter = filter_form.cleaned_data
74 jars_filter = filter_form.cleaned_data
76 jars_filter['id'] = request.POST['filter_template']
75 jars_filter['id'] = request.POST['filter_template']
77 else:
76 else:
78 messages.error(request, filter_form.errors)
77 messages.error(request, filter_form.errors)
79
78
80 if form.is_valid():
79 if form.is_valid():
81 conf = form.save(commit=False)
80 conf = form.save(commit=False)
82 conf.filter_parms = json.dumps(jars_filter)
81 conf.filter_parms = json.dumps(jars_filter)
83 conf.save()
82 conf.save()
84 return redirect('url_jars_conf', id_conf=conf.id)
83 return redirect('url_jars_conf', id_conf=conf.id)
85
84
86 kwargs = {}
85 kwargs = {}
87
86
88 kwargs['id_dev'] = conf.id
87 kwargs['id_dev'] = conf.id
89 kwargs['form'] = form
88 kwargs['form'] = form
90 kwargs['filter_form'] = filter_form
89 kwargs['filter_form'] = filter_form
91 kwargs['filter_name'] = JARSFilter.objects.get(pk=filter_parms['id']).name
90 kwargs['filter_name'] = JARSFilter.objects.get(pk=filter_parms['id']).name
92 kwargs['title'] = 'Device Configuration'
91 kwargs['title'] = 'Device Configuration'
93 kwargs['suptitle'] = 'Edit'
92 kwargs['suptitle'] = 'Edit'
94 kwargs['button'] = 'Save'
93 kwargs['button'] = 'Save'
95
94
96 return render(request, 'jars_conf_edit.html', kwargs)
95 return render(request, 'jars_conf_edit.html', kwargs)
97
96
@@ -114,10 +113,10 def import_file(request, conf_id):
114 form = JARSImportForm()
113 form = JARSImportForm()
115
114
116 kwargs = {}
115 kwargs = {}
117 kwargs['form'] = form
116 kwargs['form'] = form
118 kwargs['title'] = 'JARS Configuration'
117 kwargs['title'] = 'JARS Configuration'
119 kwargs['suptitle'] = 'Import file'
118 kwargs['suptitle'] = 'Import file'
120 kwargs['button'] = 'Upload'
119 kwargs['button'] = 'Upload'
121 kwargs['previous'] = conf.get_absolute_url()
120 kwargs['previous'] = conf.get_absolute_url()
122
121
123 return render(request, 'jars_import.html', kwargs)
122 return render(request, 'jars_import.html', kwargs)
@@ -148,22 +147,50 def read_conf(request, conf_id):
148 messages.error(request, "Parameters could not be saved")
147 messages.error(request, "Parameters could not be saved")
149
148
150 kwargs = {}
149 kwargs = {}
151 kwargs['id_dev'] = conf.id
150 kwargs['id_dev'] = conf.id
152 kwargs['filter_id'] = conf.filter.id
151 kwargs['filter_id'] = conf.filter.id
153 kwargs['form'] = form
152 kwargs['form'] = form
154 kwargs['title'] = 'Device Configuration'
153 kwargs['title'] = 'Device Configuration'
155 kwargs['suptitle'] = 'Parameters read from device'
154 kwargs['suptitle'] = 'Parameters read from device'
156 kwargs['button'] = 'Save'
155 kwargs['button'] = 'Save'
157
156
158 ###### SIDEBAR ######
157 ###### SIDEBAR ######
159 kwargs.update(sidebar(conf=conf))
158 kwargs.update(sidebar(conf=conf))
160
159
161 return render(request, 'jars_conf_edit.html', kwargs)
160 return render(request, 'jars_conf_edit.html', kwargs)
162
161
162 def new_filter(request, conf_id):
163 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
164 form = JARSFilterFormNew()
165
166 if request.method=='POST':
167 filter_form = JARSFilterFormNew(request.POST)
168
169 if filter_form.is_valid():
170 jars_filter = filter_form.cleaned_data
171 jars_filter['id'] = request.POST['name']
172 else:
173 messages.error(request, filter_form.errors)
174
175 #print(json.dumps(jars_filter))
176 jars_filter_obj = JARSFilter()
177 jars_filter_obj.dict_to_parms_new(request.POST)
178 jars_filter_obj.save()
179 return redirect('url_edit_jars_conf', id_conf=conf.id)
180
181 kwargs = {}
182 kwargs['id_dev'] = conf.id
183 kwargs['form'] = form
184 kwargs['title'] = 'New JARS Filter'
185 kwargs['suptitle'] = 'Parameters'
186 kwargs['button'] = 'Save'
187
188 return render(request, 'jars_new_filter.html', kwargs)
189
163 def change_filter(request, conf_id, filter_id):
190 def change_filter(request, conf_id, filter_id):
164
191
165 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
192 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
166 filter = get_object_or_404(JARSFilter, pk=filter_id)
193 filter = get_object_or_404(JARSFilter, pk=filter_id)
167 conf.filter_parms = json.dumps(filter.jsonify())
194 conf.filter_parms = json.dumps(filter.jsonify())
168 conf.save()
195 conf.save()
169
196
@@ -184,7 +211,7 def get_log(request, conf_id):
184 messages.error(request, message)
211 messages.error(request, message)
185 return redirect('url_jars_conf', id_conf=conf.id)
212 return redirect('url_jars_conf', id_conf=conf.id)
186 except Exception as e:
213 except Exception as e:
187 message = 'Restarting Report.txt has been downloaded successfully.'
214 message = 'Restarting Report.txt has been downloaded successfully.'+e
188
215
189 content = response
216 content = response
190 filename = 'Log_%s_%s.txt' %(conf.experiment.name, conf.experiment.id)
217 filename = 'Log_%s_%s.txt' %(conf.experiment.name, conf.experiment.id)
@@ -10,8 +10,8 from django.utils.html import conditional_escape
10
10
11 class SpectralWidget(forms.widgets.TextInput):
11 class SpectralWidget(forms.widgets.TextInput):
12
12
13 def render(self, label, value, attrs=None):
13 def render(self, name, value, attrs=None, renderer=None):
14
14 label = name
15 readonly = 'readonly' if attrs.get('readonly', False) else ''
15 readonly = 'readonly' if attrs.get('readonly', False) else ''
16 name = attrs.get('name', label)
16 name = attrs.get('name', label)
17 if value == None:
17 if value == None:
@@ -638,6 +638,14 class Configuration(PolymorphicModel):
638 data['phaseA'] = dds_data.phase_to_binary(data['phaseA_degrees'])
638 data['phaseA'] = dds_data.phase_to_binary(data['phaseA_degrees'])
639 data['phaseB'] = dds_data.phase_to_binary(data['phaseB_degrees'])
639 data['phaseB'] = dds_data.phase_to_binary(data['phaseB_degrees'])
640
640
641 elif self.device.device_type.name == 'dds_rest':
642 data['frequencyA_Mhz'] = float(data['frequencyA_Mhz'])
643 data['frequencyB_Mhz'] = float(data['frequencyB_Mhz'])
644 data['phaseA'] = dds_data.phase_to_binary(data['phaseA_degrees'])
645 data['phaseB'] = dds_data.phase_to_binary(data['phaseB_degrees'])
646 data['delta_frequency_Mhz'] = float(data['delta_frequency_Mhz'] or 0.00)
647 data['update_clock_Mhz'] = float(data['update_clock_Mhz'] or 0.00)
648 data['ramp_rate_clock_Mhz'] = float(data['ramp_rate_clock_Mhz'] or 0.0)
641 return data
649 return data
642
650
643 def clone(self, **kwargs):
651 def clone(self, **kwargs):
@@ -258,8 +258,6 class DefaultWidget(forms.widgets.TextInput):
258 else:
258 else:
259 return mark_safe(html+script)
259 return mark_safe(html+script)
260
260
261
262
263 return mark_safe(html)
261 return mark_safe(html)
264
262
265
263
@@ -132,11 +132,11 REDIS_HOST = os.environ.get('REDIS_HOST', '127.0.0.1')
132 REDIS_PORT = os.environ.get('REDIS_PORT', 6300)
132 REDIS_PORT = os.environ.get('REDIS_PORT', 6300)
133
133
134 BROKER_TRANSPORT = 'redis'
134 BROKER_TRANSPORT = 'redis'
135 BROKER_URL = 'redis://{}:{}/0'.format(REDIS_HOST, REDIS_PORT)
135 BROKER_URL = 'redis://{}:{}/0'.format(REDIS_HOST, REDIS_PORT)
136
136
137 CELERY_RESULT_BACKEND = 'redis://{}:{}/0'.format(REDIS_HOST, REDIS_PORT)
137 CELERY_RESULT_BACKEND = 'redis://{}:{}/0'.format(REDIS_HOST, REDIS_PORT)
138 CELERY_BROKER_TRANSPORT = BROKER_URL
138 CELERY_BROKER_TRANSPORT = BROKER_URL
139 CELERY_ACCEPT_CONTENT = ['application/json']
139 CELERY_ACCEPT_CONTENT = ['application/json']
140 CELERY_TASK_SERIALIZER = 'json'
140 CELERY_TASK_SERIALIZER = 'json'
141 CELERY_RESULT_SERIALIZER = 'json'
141 CELERY_RESULT_SERIALIZER = 'json'
142 CELERY_ENABLE_UTC = False
142 CELERY_ENABLE_UTC = False
General Comments 0
You need to be logged in to leave comments. Login now