@@ -694,7 +694,7 def experiment_mix(request, id_exp): | |||||
694 | if 'operation' in request.POST: |
|
694 | if 'operation' in request.POST: | |
695 | operation = MIX_OPERATIONS[request.POST['operation']] |
|
695 | operation = MIX_OPERATIONS[request.POST['operation']] | |
696 | else: |
|
696 | else: | |
697 |
operation = ' |
|
697 | operation = ' ' | |
698 |
|
698 | |||
699 | mode = MIX_MODES[request.POST['mode']] |
|
699 | mode = MIX_MODES[request.POST['mode']] | |
700 |
|
700 | |||
@@ -767,7 +767,7 def parse_mix_result(s): | |||||
767 | html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format( |
|
767 | html += '{:20.18}{:3}{:4}{:9}km{:>6}\r\n'.format( | |
768 | conf.name, |
|
768 | conf.name, | |
769 | mode, |
|
769 | mode, | |
770 |
' |
|
770 | ' ', | |
771 | delay, |
|
771 | delay, | |
772 | mask) |
|
772 | mask) | |
773 | else: |
|
773 | else: | |
@@ -847,7 +847,8 def dev_conf_new(request, id_exp=0, id_dev=0): | |||||
847 | DevConfForm = CONF_FORMS[conf.device.device_type.name] |
|
847 | DevConfForm = CONF_FORMS[conf.device.device_type.name] | |
848 | form = DevConfForm(instance=conf, |
|
848 | form = DevConfForm(instance=conf, | |
849 | initial={'name': '{} [{:%Y/%m/%d}]'.format(conf.name, datetime.now()), |
|
849 | initial={'name': '{} [{:%Y/%m/%d}]'.format(conf.name, datetime.now()), | |
850 |
'template': False |
|
850 | 'template': False, | |
|
851 | 'experiment':id_exp}) | |||
851 | elif 'blank' in request.GET: |
|
852 | elif 'blank' in request.GET: | |
852 | kwargs['button'] = 'Create' |
|
853 | kwargs['button'] = 'Create' | |
853 | form = ConfigurationForm(initial=initial) |
|
854 | form = ConfigurationForm(initial=initial) |
@@ -74,7 +74,7 class RCConfigurationForm(forms.ModelForm): | |||||
74 | self.fields['time_after'].label = mark_safe(self.fields['time_after'].label) |
|
74 | self.fields['time_after'].label = mark_safe(self.fields['time_after'].label) | |
75 |
|
75 | |||
76 | if 'initial' in kwargs and 'experiment' in kwargs['initial'] and kwargs['initial']['experiment'] not in (0, '0'): |
|
76 | if 'initial' in kwargs and 'experiment' in kwargs['initial'] and kwargs['initial']['experiment'] not in (0, '0'): | |
77 |
self.fields['experiment'].widget.attrs[' |
|
77 | self.fields['experiment'].widget.attrs['readonly'] = True | |
78 |
|
78 | |||
79 | class Meta: |
|
79 | class Meta: | |
80 | model = RCConfiguration |
|
80 | model = RCConfiguration | |
@@ -92,6 +92,12 class RCConfigurationForm(forms.ModelForm): | |||||
92 |
|
92 | |||
93 | return form_data |
|
93 | return form_data | |
94 |
|
94 | |||
|
95 | def save(self): | |||
|
96 | conf = super(RCConfigurationForm, self).save() | |||
|
97 | conf.total_units = conf.ipp*conf.ntx*conf.km2unit | |||
|
98 | conf.save() | |||
|
99 | return conf | |||
|
100 | ||||
95 |
|
101 | |||
96 | class RCMixConfigurationForm(forms.Form): |
|
102 | class RCMixConfigurationForm(forms.Form): | |
97 |
|
103 |
@@ -371,6 +371,7 class RCConfiguration(Configuration): | |||||
371 |
|
371 | |||
372 | labels.reverse() |
|
372 | labels.reverse() | |
373 | ax.set_yticklabels(labels) |
|
373 | ax.set_yticklabels(labels) | |
|
374 | ax.set_xlabel = 'Units' | |||
374 | plot = to_bokeh(fig, use_pandas=False) |
|
375 | plot = to_bokeh(fig, use_pandas=False) | |
375 | plot.tools = [PanTool(dimensions=['width']), WheelZoomTool(dimensions=['width']), ResetTool(), PreviewSaveTool()] |
|
376 | plot.tools = [PanTool(dimensions=['width']), WheelZoomTool(dimensions=['width']), ResetTool(), PreviewSaveTool()] | |
376 |
|
377 | |||
@@ -538,7 +539,7 class RCLine(models.Model): | |||||
538 | ipp = self.rc_configuration.ipp |
|
539 | ipp = self.rc_configuration.ipp | |
539 | ntx = self.rc_configuration.ntx |
|
540 | ntx = self.rc_configuration.ntx | |
540 | ipp_u = int(ipp*km2unit) |
|
541 | ipp_u = int(ipp*km2unit) | |
541 | total = ipp_u*ntx |
|
542 | total = ipp_u*ntx if self.rc_configuration.total_units==0 else self.rc_configuration.total_units | |
542 | y = [] |
|
543 | y = [] | |
543 |
|
544 | |||
544 | if self.line_type.name=='tr': |
|
545 | if self.line_type.name=='tr': | |
@@ -576,6 +577,9 class RCLine(models.Model): | |||||
576 |
|
577 | |||
577 | y.extend(y_tx) |
|
578 | y.extend(y_tx) | |
578 |
|
579 | |||
|
580 | self.pulses = unicode(y) | |||
|
581 | y = self.array_to_points(self.pulses_as_array()) | |||
|
582 | ||||
579 | elif self.line_type.name=='tx': |
|
583 | elif self.line_type.name=='tx': | |
580 | params = json.loads(self.params) |
|
584 | params = json.loads(self.params) | |
581 | delays = [float(d)*km2unit for d in params['delays'].split(',') if d] |
|
585 | delays = [float(d)*km2unit for d in params['delays'].split(',') if d] | |
@@ -663,7 +667,7 class RCLine(models.Model): | |||||
663 |
|
667 | |||
664 | elif self.line_type.name=='mix': |
|
668 | elif self.line_type.name=='mix': | |
665 | values = self.rc_configuration.parameters.split('-') |
|
669 | values = self.rc_configuration.parameters.split('-') | |
666 |
confs = RCConfiguration.objects. |
|
670 | confs = [RCConfiguration.objects.get(pk=value.split('|')[0]) for value in values] | |
667 | modes = [value.split('|')[1] for value in values] |
|
671 | modes = [value.split('|')[1] for value in values] | |
668 | ops = [value.split('|')[2] for value in values] |
|
672 | ops = [value.split('|')[2] for value in values] | |
669 | delays = [value.split('|')[3] for value in values] |
|
673 | delays = [value.split('|')[3] for value in values] | |
@@ -671,7 +675,7 class RCLine(models.Model): | |||||
671 | mask = list('{:8b}'.format(int(masks[0]))) |
|
675 | mask = list('{:8b}'.format(int(masks[0]))) | |
672 | mask.reverse() |
|
676 | mask.reverse() | |
673 | if mask[self.channel] in ('0', '', ' '): |
|
677 | if mask[self.channel] in ('0', '', ' '): | |
674 | y = np.zeros(total, dtype=np.int8) |
|
678 | y = np.zeros(confs[0].total_units, dtype=np.int8) | |
675 | else: |
|
679 | else: | |
676 |
y = confs[0].get_lines(channel=self.channel)[0].pulses_as_array() |
|
680 | y = confs[0].get_lines(channel=self.channel)[0].pulses_as_array() | |
677 |
|
681 | |||
@@ -684,6 +688,7 class RCLine(models.Model): | |||||
684 |
Y = confs[i].get_lines(channel=self.channel)[0].pulses_as_array() |
|
688 | Y = confs[i].get_lines(channel=self.channel)[0].pulses_as_array() | |
685 | delay = float(delays[i])*km2unit |
|
689 | delay = float(delays[i])*km2unit | |
686 |
|
690 | |||
|
691 | if modes[i]=='P': | |||
687 | if delay>0: |
|
692 | if delay>0: | |
688 | if delay<self.rc_configuration.ipp*km2unit and len(Y)==len(y): |
|
693 | if delay<self.rc_configuration.ipp*km2unit and len(Y)==len(y): | |
689 | y_temp = np.empty_like(Y) |
|
694 | y_temp = np.empty_like(Y) | |
@@ -698,6 +703,9 class RCLine(models.Model): | |||||
698 | elif delay+len(Y)==len(y): |
|
703 | elif delay+len(Y)==len(y): | |
699 | y_temp = np.zeros(delay+len(Y)) |
|
704 | y_temp = np.zeros(delay+len(Y)) | |
700 | y_temp[-len(Y):] = Y |
|
705 | y_temp[-len(Y):] = Y | |
|
706 | elif delay+len(Y)<len(y): | |||
|
707 | y_temp = np.zeros(len(y), dtype=np.int8) | |||
|
708 | y_temp[delay:delay+len(Y)] = Y | |||
701 |
|
709 | |||
702 | if ops[i]=='OR': |
|
710 | if ops[i]=='OR': | |
703 | y = y | y_temp |
|
711 | y = y | y_temp | |
@@ -707,6 +715,9 class RCLine(models.Model): | |||||
707 | y = y & y_temp |
|
715 | y = y & y_temp | |
708 | elif ops[i]=='NAND': |
|
716 | elif ops[i]=='NAND': | |
709 | y = y & ~y_temp |
|
717 | y = y & ~y_temp | |
|
718 | else: | |||
|
719 | print len(y), len(Y) | |||
|
720 | y = np.concatenate([y, Y]) | |||
710 |
|
721 | |||
711 | total = len(y) |
|
722 | total = len(y) | |
712 | y = self.array_to_points(y) |
|
723 | y = self.array_to_points(y) | |
@@ -718,7 +729,7 class RCLine(models.Model): | |||||
718 | self.rc_configuration.total_units = total |
|
729 | self.rc_configuration.total_units = total | |
719 | self.rc_configuration.save() |
|
730 | self.rc_configuration.save() | |
720 |
|
731 | |||
721 | self.pulses = y |
|
732 | self.pulses = unicode(y) | |
722 | self.save() |
|
733 | self.save() | |
723 |
|
734 | |||
724 | @staticmethod |
|
735 | @staticmethod |
@@ -9,6 +9,10 | |||||
9 |
|
9 | |||
10 | {% block content %} |
|
10 | {% block content %} | |
11 | <div id="div_plot">{{div}}</div> |
|
11 | <div id="div_plot">{{div}}</div> | |
|
12 | <br> | |||
|
13 | <div class="col-md-2">1 Km =</div><div class="col-md-3">{{units}} Units</div> | |||
|
14 | <br> | |||
|
15 | <div class="col-md-2">1 Unit=</div><div class="col-md-3">{{kms}} Km</div> | |||
12 | {% endblock %} |
|
16 | {% endblock %} | |
13 |
|
17 | |||
14 | {% block extra-js%} |
|
18 | {% block extra-js%} |
@@ -362,6 +362,8 def plot_pulses(request, conf_id): | |||||
362 | kwargs['suptitle'] = conf.name |
|
362 | kwargs['suptitle'] = conf.name | |
363 | kwargs['div'] = mark_safe(div) |
|
363 | kwargs['div'] = mark_safe(div) | |
364 | kwargs['script'] = mark_safe(script) |
|
364 | kwargs['script'] = mark_safe(script) | |
|
365 | kwargs['units'] = conf.km2unit | |||
|
366 | kwargs['kms'] = 1/conf.km2unit | |||
365 |
|
367 | |||
366 | if 'json' in request.GET: |
|
368 | if 'json' in request.GET: | |
367 | return HttpResponse(json.dumps({'div':mark_safe(div), 'script':mark_safe(script)}), content_type="application/json") |
|
369 | return HttpResponse(json.dumps({'div':mark_safe(div), 'script':mark_safe(script)}), content_type="application/json") |
@@ -29,7 +29,11 class KmUnitWidget(forms.widgets.TextInput): | |||||
29 | if 'line' in attrs: |
|
29 | if 'line' in attrs: | |
30 | label += '_{0}'.format(attrs['line'].pk) |
|
30 | label += '_{0}'.format(attrs['line'].pk) | |
31 |
|
31 | |||
32 | html = '<div class="col-md-12 col-no-padding"><div class="col-md-5 col-no-padding"><input type="text" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div><div class="col-md-1 col-no-padding">Km</div><div class="col-md-5 col-no-padding"><input type="text" {4} class="form-control" id="id_{5}_unit" value="{6}"></div><div class="col-md-1 col-no-padding">Units</div></div><br>'.format(disabled, label, name, value, disabled, label, unit) |
|
32 | html = '''<div class="col-md-12 col-no-padding"> | |
|
33 | <div class="col-md-5 col-no-padding"><input type="number" step="any" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div> | |||
|
34 | <div class="col-md-1 col-no-padding">Km</div> | |||
|
35 | <div class="col-md-5 col-no-padding"><input type="number" {4} class="form-control" id="id_{5}_unit" value="{6}"></div> | |||
|
36 | <div class="col-md-1 col-no-padding">Units</div></div><br>'''.format(disabled, label, name, value, disabled, label, unit) | |||
33 |
|
37 | |||
34 | script = '''<script type="text/javascript"> |
|
38 | script = '''<script type="text/javascript"> | |
35 | $(document).ready(function () {{ |
|
39 | $(document).ready(function () {{ | |
@@ -77,7 +81,7 class UnitKmWidget(forms.widgets.TextInput): | |||||
77 | html = '''<div class="col-md-12 col-no-padding"> |
|
81 | html = '''<div class="col-md-12 col-no-padding"> | |
78 | <div class="col-md-5 col-no-padding"><input type="number" {0} class="form-control" id="id_{1}_unit" name="{2}" value="{3}"></div> |
|
82 | <div class="col-md-5 col-no-padding"><input type="number" {0} class="form-control" id="id_{1}_unit" name="{2}" value="{3}"></div> | |
79 | <div class="col-md-1 col-no-padding">Units</div> |
|
83 | <div class="col-md-1 col-no-padding">Units</div> | |
80 | <div class="col-md-5 col-no-padding"><input type="number" {4} class="form-control" id="id_{5}" value="{6}"></div> |
|
84 | <div class="col-md-5 col-no-padding"><input type="number" step="any" {4} class="form-control" id="id_{5}" value="{6}"></div> | |
81 | <div class="col-md-1 col-no-padding">Km</div></div>'''.format(disabled, label, name, value, disabled, label, km) |
|
85 | <div class="col-md-1 col-no-padding">Km</div></div>'''.format(disabled, label, name, value, disabled, label, km) | |
82 |
|
86 | |||
83 | script = '''<script type="text/javascript"> |
|
87 | script = '''<script type="text/javascript"> | |
@@ -117,11 +121,11 class KmUnitHzWidget(forms.widgets.TextInput): | |||||
117 | label += '_{0}'.format(attrs['line'].pk) |
|
121 | label += '_{0}'.format(attrs['line'].pk) | |
118 |
|
122 | |||
119 | html = '''<div class="col-md-12 col-no-padding"> |
|
123 | html = '''<div class="col-md-12 col-no-padding"> | |
120 | <div class="col-md-3 col-no-padding"><input type="number" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div> |
|
124 | <div class="col-md-3 col-no-padding"><input type="number" step="any" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div> | |
121 | <div class="col-md-1 col-no-padding">Km</div> |
|
125 | <div class="col-md-1 col-no-padding">Km</div> | |
122 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_unit" value="{5}"></div> |
|
126 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_unit" value="{5}"></div> | |
123 | <div class="col-md-1 col-no-padding">Units</div> |
|
127 | <div class="col-md-1 col-no-padding">Units</div> | |
124 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_hz" value="{6}"></div> |
|
128 | <div class="col-md-3 col-no-padding"><input type="number" step="any" {4} class="form-control" id="id_{1}_hz" value="{6}"></div> | |
125 | <div class="col-md-1 col-no-padding">Hz</div> |
|
129 | <div class="col-md-1 col-no-padding">Hz</div> | |
126 | </div>'''.format(disabled, label, name, value, disabled, unit, hz) |
|
130 | </div>'''.format(disabled, label, name, value, disabled, unit, hz) | |
127 |
|
131 | |||
@@ -168,11 +172,11 class KmUnitDcWidget(forms.widgets.TextInput): | |||||
168 | dc = float(json.loads(attrs['line'].params)['pulse_width'])*100/attrs['line'].rc_configuration.ipp |
|
172 | dc = float(json.loads(attrs['line'].params)['pulse_width'])*100/attrs['line'].rc_configuration.ipp | |
169 |
|
173 | |||
170 | html = '''<div class="col-md-12 col-no-padding"> |
|
174 | html = '''<div class="col-md-12 col-no-padding"> | |
171 | <div class="col-md-3 col-no-padding"><input type="number" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div> |
|
175 | <div class="col-md-3 col-no-padding"><input type="number" step="any" {0} class="form-control" id="id_{1}" name="{2}" value="{3}"></div> | |
172 | <div class="col-md-1 col-no-padding">Km</div> |
|
176 | <div class="col-md-1 col-no-padding">Km</div> | |
173 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_unit" value="{5}"></div> |
|
177 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_unit" value="{5}"></div> | |
174 | <div class="col-md-1 col-no-padding">Units</div> |
|
178 | <div class="col-md-1 col-no-padding">Units</div> | |
175 | <div class="col-md-3 col-no-padding"><input type="number" {4} class="form-control" id="id_{1}_dc" value="{6}"></div> |
|
179 | <div class="col-md-3 col-no-padding"><input type="number" step="any" {4} class="form-control" id="id_{1}_dc" value="{6}"></div> | |
176 | <div class="col-md-1 col-no-padding">DC[%]</div> |
|
180 | <div class="col-md-1 col-no-padding">DC[%]</div> | |
177 | </div>'''.format(disabled, label, name, value, disabled, unit, dc) |
|
181 | </div>'''.format(disabled, label, name, value, disabled, unit, dc) | |
178 |
|
182 |
General Comments 0
You need to be logged in to leave comments.
Login now