diff --git a/apps/jars/fixtures/initial_filters_data.json b/apps/jars/fixtures/initial_filters_data.json index 17c914d..bd469eb 100644 --- a/apps/jars/fixtures/initial_filters_data.json +++ b/apps/jars/fixtures/initial_filters_data.json @@ -1,2 +1,3 @@ -[{"fields": {"name": "49_920MHz_clock60MHz_F0MHz_12_25_2", "clock": "60", "mult": 5, "fch": 49.92, "fch_decimal": 721554505, "filter_fir": 6, "filter_2": 10, "filter_5": 1, "speed": 0}, "model": "jars.jarsfilter", "pk": 1} - ] +[{"fields": {"name": "49_92MHz_clock60MHz_F1KHz_12_25_2", "clock": 60, "mult": 5, "fch": 49.92, "fch_decimal": 721554506, "filter_fir": 2, "filter_2": 12, "filter_5": 25}, "model": "jars.jarsfilter", "pk": 1} +{"fields": {"name": "49_920MHz_clock60MHz_F1MHz_10_1_6", "clock": 60, "mult": 5, "fch": 49.92, "fch_decimal": 721554506, "filter_fir": 6, "filter_2": 10, "filter_5": 1}, "model": "jars.jarsfilter", "pk": 2} +] diff --git a/apps/jars/forms.py b/apps/jars/forms.py index 8fc4108..6b3125a 100644 --- a/apps/jars/forms.py +++ b/apps/jars/forms.py @@ -4,6 +4,14 @@ from django import forms from apps.main.models import Device, Experiment from .models import JARSConfiguration, JARSfilter from .widgets import SpectralWidget +from apps.main.forms import add_empty_choice + +def create_choices_from_model(model, filter_id=None): + + #instance = globals()[model] + choices = model.objects.all().values_list('pk', 'name') + choices = add_empty_choice(choices) + return choices class JARSConfigurationForm(forms.ModelForm): def __init__(self, *args, **kwargs): @@ -41,16 +49,36 @@ class JARSfilterForm(forms.ModelForm): instance = getattr(self, 'instance', None) self.fields['fch_decimal'].widget.attrs['readonly'] = True - + if 'initial' in kwargs: - self.fields.pop('name') - #self.fields['name'].widget.attrs['disabled'] = 'disabled' - + if 'filter_id' not in kwargs['initial']: + self.fields.pop('name') + else: + self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter)) + filter_id = kwargs['initial']['filter_id'] + + if filter_id == 0: + for value in self.fields: + if value != 'name': + self.fields.pop(value) + self.fields['name'].label = "Filter Template Name" + else: + self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter, kwargs['initial']['filter_id'])) + jars_filter = JARSfilter.objects.get(pk=kwargs['initial']['filter_id']) + labels = [f.name for f in jars_filter._meta.get_fields()] + + for label in ['id', 'jarsconfiguration']: + labels.remove(label) + for label in labels: + self.fields['name'].initial = kwargs['initial']['filter_id'] + self.fields[label].initial = getattr(jars_filter,label) + self.fields['name'].label = "Filter Template Name" class Meta: model = JARSfilter exclude = ('type', 'parameters', 'status') + class ExtFileField(forms.FileField): """ Same as forms.FileField, but you can specify a file extension whitelist. diff --git a/apps/jars/models.py b/apps/jars/models.py index ed93116..57f889c 100644 --- a/apps/jars/models.py +++ b/apps/jars/models.py @@ -33,12 +33,11 @@ class JARSfilter(models.Model): name = models.CharField(max_length=60, unique=True, default='') clock = models.FloatField(verbose_name='Clock In (MHz)',validators=[MinValueValidator(5), MaxValueValidator(75)], null=True, default=60) mult = models.PositiveIntegerField(verbose_name='Multiplier',validators=[MinValueValidator(1), MaxValueValidator(20)], default=5) - fch = models.DecimalField(verbose_name='Frequency (MHz)', validators=[MaxValueValidator(150)], max_digits=19, decimal_places=16, null=True, default=49.9200) + fch = models.FloatField(verbose_name='Frequency (MHz)', validators=[MaxValueValidator(150)], null=True, default=49.9200) fch_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)',validators=[MinValueValidator(-9223372036854775808), MaxValueValidator(2**JARS_NBITS-1)], null=True, default=721554505) filter_2 = models.PositiveIntegerField(verbose_name='Filter 2',validators=[MinValueValidator(2), MaxValueValidator(100)], default = 10) filter_5 = models.PositiveIntegerField(verbose_name='Filter 5',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 1) filter_fir = models.PositiveIntegerField(verbose_name='FIR Filter',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 6) - #speed = models.PositiveIntegerField(verbose_name='Speed',validators=[MinValueValidator(0), MaxValueValidator(100000)], default = 0) class Meta: db_table = 'jars_filters' @@ -58,7 +57,6 @@ class JARSfilter(models.Model): parameters['filter_fir'] = int(self.filter_fir) parameters['filter_2'] = int(self.filter_2) parameters['filter_5'] = int(self.filter_5) - #parameters['speed'] = int(self.speed) return parameters @@ -72,7 +70,6 @@ class JARSfilter(models.Model): self.filter_fir = parameters['filter_fir'] self.filter_2 = parameters['filter_2'] self.filter_5 = parameters['filter_5'] - #self.speed = parameters['speed'] class JARSConfiguration(Configuration): @@ -83,13 +80,10 @@ class JARSConfiguration(Configuration): BEGIN_ON_START = True REFRESH_RATE = 1 - #rc = models.ForeignKey(RCConfiguration, on_delete=models.CASCADE, null=True) exp_type = models.PositiveIntegerField(verbose_name='Experiment Type', choices=EXPERIMENT_TYPE, default=0) cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[MinValueValidator(1), MaxValueValidator(4)], default = 1) channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[MinValueValidator(1), MaxValueValidator(8)], default = 5) channels = models.CharField(verbose_name='Channels', max_length=15, default = '1,2,3,4,5') - #rd_directory = models.CharField(verbose_name='Raw Data Directory', max_length=200, default='', blank=True, null=True) - #pd_directory = models.CharField(verbose_name='Process Data Directory', max_length=200, default='', blank=True, null=True) data_type = models.PositiveIntegerField(verbose_name='Data Type', choices=DATA_TYPE, default=0) raw_data_blocks = models.PositiveIntegerField(verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=60) profiles_block = models.PositiveIntegerField(verbose_name='Profiles Per Block', default=400) @@ -106,11 +100,10 @@ class JARSConfiguration(Configuration): spectral = models.CharField(verbose_name='Combinations', max_length=5000, default = '[0, 0],') create_directory = models.BooleanField(verbose_name='Create Directory Per Day', default=True) include_expname = models.BooleanField(verbose_name='Experiment Name in Directory', default=False) - #acq_link = models.BooleanField(verbose_name='Acquisition Link', default=True) #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True) save_ch_dc = models.BooleanField(verbose_name='Save Channels DC', default=True) save_data = models.BooleanField(verbose_name='Save Data', default=True) - filter_parms = models.CharField(max_length=10000, default='{}') + filter_parms = models.CharField(max_length=10000, default='{"name": "49_92MHz_clock60MHz_F1KHz_12_25_2", "clock": 60, "mult": 5, "fch": 49.92, "fch_decimal": 721554506, "filter_fir": 2, "filter_2": 12, "filter_5": 25}, "model": "jars.jarsfilter", "pk": 1}') class Meta: db_table = 'jars_configurations' @@ -119,6 +112,19 @@ class JARSConfiguration(Configuration): self.filter_parms = self.filter.parms_to_dict() self.save() + def filter_resolution(self): + filter_parms = eval(self.filter_parms) + if filter_parms.__class__.__name__=='str': + filter_parms = eval(filter_parms) + + filter_clock = filter_parms['clock'] + filter_2 = filter_parms['filter_2'] + filter_5 = filter_parms['filter_5'] + filter_fir = filter_parms['filter_fir'] + + resolution = round((filter_clock/(filter_2*filter_5*filter_fir)),2) + return resolution + def dict_to_parms(self, params, id=None): if id is not None: diff --git a/apps/jars/templates/change_jars_filter.html b/apps/jars/templates/change_jars_filter.html new file mode 100644 index 0000000..01a062f --- /dev/null +++ b/apps/jars/templates/change_jars_filter.html @@ -0,0 +1,13 @@ +{% extends "dev_conf_edit.html" %} + +{% block extra-js%} + + +{% endblock %} diff --git a/apps/jars/templates/jars_conf.html b/apps/jars/templates/jars_conf.html index 99944d7..233a273 100644 --- a/apps/jars/templates/jars_conf.html +++ b/apps/jars/templates/jars_conf.html @@ -1 +1,16 @@ -{% extends "dev_conf.html" %} \ No newline at end of file +{% extends "dev_conf.html" %} +{% load static %} +{% load bootstrap3 %} +{% load main_tags %} + + +{% block extra-content %} + +
+{% get_verbose_field_name dev_conf key %} | -{{dev_conf|attr:key}} | -
---|---|
Clock in (MHz) | {{filter.clock}} |
Multiplier | {{filter.mult}} |
Frequency (MHz) | {{filter.fch}} |
Frequency (Decimal) | {{filter.fch_decimal}} |
Filter 2 | {{filter.filter_2}} |
Filter 5 | {{filter.filter_5}} |
FIR Filter | {{filter.filter_fir}} |