##// END OF EJS Templates
Task #1119: bugs and jars_new_filter.html has been deleted...
Fiorella Quino -
r272:8a3674516291
parent child
Show More
@@ -1,116 +1,116
1 import os
1 import os
2
2
3 from django import forms
3 from django import forms
4 from apps.main.models import Device, Experiment
4 from apps.main.models import Device, Experiment
5 from .models import JARSConfiguration, JARSfilter
5 from .models import JARSConfiguration, JARSfilter
6 from .widgets import SpectralWidget
6 from .widgets import SpectralWidget
7 from apps.main.forms import add_empty_choice
7 from apps.main.forms import add_empty_choice
8
8
9 def create_choices_from_model(model, filter_id=None):
9 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)
14 return choices
14 return choices
15
15
16 class JARSConfigurationForm(forms.ModelForm):
16 class JARSConfigurationForm(forms.ModelForm):
17 def __init__(self, *args, **kwargs):
17 def __init__(self, *args, **kwargs):
18 super(JARSConfigurationForm, self).__init__(*args, **kwargs)
18 super(JARSConfigurationForm, self).__init__(*args, **kwargs)
19 instance = getattr(self, 'instance', None)
19 instance = getattr(self, 'instance', None)
20
20
21 if instance and instance.pk:
21 if instance and instance.pk:
22 devices = Device.objects.filter(device_type__name='jars')
22 devices = Device.objects.filter(device_type__name='jars')
23
23
24 if instance.experiment:
24 if instance.experiment:
25 experiments = Experiment.objects.filter(pk=instance.experiment.id)
25 experiments = Experiment.objects.filter(pk=instance.experiment.id)
26 self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments]
26 self.fields['experiment'].widget.choices = [(experiment.id, experiment) for experiment in experiments]
27
27
28 self.fields['device'].widget.choices = [(device.id, device) for device in devices]
28 self.fields['device'].widget.choices = [(device.id, device) for device in devices]
29 #self.fields['spectral'].widget = SpectralWidget()
29 #self.fields['spectral'].widget = SpectralWidget()
30 self.fields['spectral_number'].widget.attrs['readonly'] = True
30 self.fields['spectral_number'].widget.attrs['readonly'] = True
31 self.fields['spectral'].widget = SpectralWidget()
31 self.fields['spectral'].widget = SpectralWidget()
32
32
33 #-------------JARS Configuration needs an Experiment-----------------
33 #-------------JARS Configuration needs an Experiment-----------------
34 def clean(self):
34 def clean(self):
35 cleaned_data = super(JARSConfigurationForm, self).clean()
35 cleaned_data = super(JARSConfigurationForm, self).clean()
36 experiment = cleaned_data.get('experiment')
36 experiment = cleaned_data.get('experiment')
37 if experiment == None:
37 if experiment == None:
38 msg = "Error: Jars Configuration needs an Experiment"
38 msg = "Error: Jars Configuration needs an Experiment"
39 self.add_error('experiment', msg)
39 self.add_error('experiment', msg)
40
40
41 class Meta:
41 class Meta:
42 model = JARSConfiguration
42 model = JARSConfiguration
43 exclude = ('type', 'parameters', 'status', 'filter_parms')
43 exclude = ('type', 'parameters', 'status', 'filter_parms')
44
44
45
45
46 class JARSfilterForm(forms.ModelForm):
46 class JARSfilterForm(forms.ModelForm):
47 def __init__(self, *args, **kwargs):
47 def __init__(self, *args, **kwargs):
48 super(JARSfilterForm, self).__init__(*args, **kwargs)
48 super(JARSfilterForm, self).__init__(*args, **kwargs)
49 instance = getattr(self, 'instance', None)
49 instance = getattr(self, 'instance', None)
50
50
51 self.fields['fch_decimal'].widget.attrs['readonly'] = True
51 self.fields['fch_decimal'].widget.attrs['readonly'] = True
52
52
53 if 'initial' in kwargs:
53 if 'initial' in kwargs:
54 if 'filter_id' not in kwargs['initial']:
54 if 'filter_id' not in kwargs['initial']:
55 self.fields.pop('name')
55 self.fields.pop('name')
56 else:
56 else:
57 self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter))
57 self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter))
58 filter_id = kwargs['initial']['filter_id']
58 filter_id = kwargs['initial']['filter_id']
59
59
60 if filter_id == 0:
60 if filter_id == 0:
61 for value in self.fields:
61 for value in self.fields:
62 if value != 'name':
62 if value != 'name':
63 self.fields.pop(value)
63 self.fields.pop(value)
64 self.fields['name'].label = "Filter Template Name"
64 self.fields['name'].label = "Filter Template Name"
65 else:
65 else:
66 self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter, kwargs['initial']['filter_id']))
66 self.fields['name'] = forms.ChoiceField(choices=create_choices_from_model(JARSfilter, kwargs['initial']['filter_id']))
67 jars_filter = JARSfilter.objects.get(pk=kwargs['initial']['filter_id'])
67 jars_filter = JARSfilter.objects.get(pk=kwargs['initial']['filter_id'])
68 labels = [f.name for f in jars_filter._meta.get_fields()]
68 labels = [f.name for f in jars_filter._meta.get_fields()]
69
69
70 for label in ['id', 'jarsconfiguration']:
70 for label in ['id']:
71 labels.remove(label)
71 labels.remove(label)
72 for label in labels:
72 for label in labels:
73 self.fields['name'].initial = kwargs['initial']['filter_id']
73 self.fields['name'].initial = kwargs['initial']['filter_id']
74 self.fields[label].initial = getattr(jars_filter,label)
74 self.fields[label].initial = getattr(jars_filter,label)
75 self.fields['name'].label = "Filter Template Name"
75 self.fields['name'].label = "Filter Template Name"
76
76
77 class Meta:
77 class Meta:
78 model = JARSfilter
78 model = JARSfilter
79 exclude = ('type', 'parameters', 'status')
79 exclude = ('type', 'parameters', 'status')
80
80
81
81
82 class ExtFileField(forms.FileField):
82 class ExtFileField(forms.FileField):
83 """
83 """
84 Same as forms.FileField, but you can specify a file extension whitelist.
84 Same as forms.FileField, but you can specify a file extension whitelist.
85
85
86 >>> from django.core.files.uploadedfile import SimpleUploadedFile
86 >>> from django.core.files.uploadedfile import SimpleUploadedFile
87 >>>
87 >>>
88 >>> t = ExtFileField(ext_whitelist=(".pdf", ".txt"))
88 >>> t = ExtFileField(ext_whitelist=(".pdf", ".txt"))
89 >>>
89 >>>
90 >>> t.clean(SimpleUploadedFile('filename.pdf', 'Some File Content'))
90 >>> t.clean(SimpleUploadedFile('filename.pdf', 'Some File Content'))
91 >>> t.clean(SimpleUploadedFile('filename.txt', 'Some File Content'))
91 >>> t.clean(SimpleUploadedFile('filename.txt', 'Some File Content'))
92 >>>
92 >>>
93 >>> t.clean(SimpleUploadedFile('filename.exe', 'Some File Content'))
93 >>> t.clean(SimpleUploadedFile('filename.exe', 'Some File Content'))
94 Traceback (most recent call last):
94 Traceback (most recent call last):
95 ...
95 ...
96 ValidationError: [u'Not allowed filetype!']
96 ValidationError: [u'Not allowed filetype!']
97 """
97 """
98 def __init__(self, *args, **kwargs):
98 def __init__(self, *args, **kwargs):
99 extensions = kwargs.pop("extensions")
99 extensions = kwargs.pop("extensions")
100 self.extensions = [i.lower() for i in extensions]
100 self.extensions = [i.lower() for i in extensions]
101
101
102 super(ExtFileField, self).__init__(*args, **kwargs)
102 super(ExtFileField, self).__init__(*args, **kwargs)
103
103
104 def clean(self, *args, **kwargs):
104 def clean(self, *args, **kwargs):
105 data = super(ExtFileField, self).clean(*args, **kwargs)
105 data = super(ExtFileField, self).clean(*args, **kwargs)
106 filename = data.name
106 filename = data.name
107 ext = os.path.splitext(filename)[1]
107 ext = os.path.splitext(filename)[1]
108 ext = ext.lower()
108 ext = ext.lower()
109 if ext not in self.extensions:
109 if ext not in self.extensions:
110 raise forms.ValidationError('Not allowed file type: %s' % ext)
110 raise forms.ValidationError('Not allowed file type: %s' % ext)
111
111
112
112
113 class JARSImportForm(forms.Form):
113 class JARSImportForm(forms.Form):
114
114
115 #file_name = ExtFileField(extensions=['.racp', '.json', '.dat'])
115 #file_name = ExtFileField(extensions=['.racp', '.json', '.dat'])
116 file_name = ExtFileField(extensions=['.json'])
116 file_name = ExtFileField(extensions=['.json'])
@@ -1,288 +1,283
1 import json
1 import json
2 import requests
2 import requests
3
3
4 from django.db import models
4 from django.db import models
5 from django.core.validators import MinValueValidator, MaxValueValidator
5 from django.core.validators import MinValueValidator, MaxValueValidator
6 from django.core.urlresolvers import reverse
6 from django.core.urlresolvers import reverse
7
7
8 from apps.main.models import Configuration
8 from apps.main.models import Configuration
9 from apps.main.utils import Params
9 from apps.main.utils import Params
10 # Create your models here.
10 # Create your models here.
11
11
12 EXPERIMENT_TYPE = (
12 EXPERIMENT_TYPE = (
13 (0, 'RAW_DATA'),
13 (0, 'RAW_DATA'),
14 (1, 'PDATA'),
14 (1, 'PDATA'),
15 )
15 )
16
16
17 DATA_TYPE = (
17 DATA_TYPE = (
18 (0, 'SHORT'),
18 (0, 'SHORT'),
19 (1, 'FLOAT'),
19 (1, 'FLOAT'),
20 )
20 )
21
21
22 DECODE_TYPE = (
22 DECODE_TYPE = (
23 (0, 'None'),
23 (0, 'None'),
24 (1, 'TimeDomain'),
24 (1, 'TimeDomain'),
25 (2, 'FreqDomain'),
25 (2, 'FreqDomain'),
26 (3, 'InvFreqDomain'),
26 (3, 'InvFreqDomain'),
27 )
27 )
28
28
29 class JARSfilter(models.Model):
29 class JARSfilter(models.Model):
30
30
31 JARS_NBITS = 32
31 JARS_NBITS = 32
32
32
33 name = models.CharField(max_length=60, unique=True, default='')
33 name = models.CharField(max_length=60, unique=True, default='')
34 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)
35 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)
36 fch = models.FloatField(verbose_name='Frequency (MHz)', validators=[MaxValueValidator(150)], null=True, default=49.9200)
36 fch = models.FloatField(verbose_name='Frequency (MHz)', validators=[MaxValueValidator(150)], null=True, default=49.9200)
37 fch_decimal = models.BigIntegerField(verbose_name='Frequency (Decimal)',validators=[MinValueValidator(-9223372036854775808), 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)
38 filter_2 = models.PositiveIntegerField(verbose_name='Filter 2',validators=[MinValueValidator(2), MaxValueValidator(100)], default = 10)
38 filter_2 = models.PositiveIntegerField(verbose_name='Filter 2',validators=[MinValueValidator(2), MaxValueValidator(100)], default = 10)
39 filter_5 = models.PositiveIntegerField(verbose_name='Filter 5',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 1)
39 filter_5 = models.PositiveIntegerField(verbose_name='Filter 5',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 1)
40 filter_fir = models.PositiveIntegerField(verbose_name='FIR Filter',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 6)
40 filter_fir = models.PositiveIntegerField(verbose_name='FIR Filter',validators=[MinValueValidator(1), MaxValueValidator(100)], default = 6)
41
41
42 class Meta:
42 class Meta:
43 db_table = 'jars_filters'
43 db_table = 'jars_filters'
44
44
45 def __unicode__(self):
45 def __unicode__(self):
46 return u'%s' % (self.name)
46 return u'%s' % (self.name)
47
47
48 def parms_to_dict(self):
48 def parms_to_dict(self):
49
49
50 parameters = {}
50 parameters = {}
51
51
52 #parameters['name'] = self.name
52 #parameters['name'] = self.name
53 parameters['clock'] = float(self.clock)
53 parameters['clock'] = float(self.clock)
54 parameters['mult'] = int(self.mult)
54 parameters['mult'] = int(self.mult)
55 parameters['fch'] = float(self.fch)
55 parameters['fch'] = float(self.fch)
56 parameters['fch_decimal'] = int(self.fch)
56 parameters['fch_decimal'] = int(self.fch)
57 parameters['filter_fir'] = int(self.filter_fir)
57 parameters['filter_fir'] = int(self.filter_fir)
58 parameters['filter_2'] = int(self.filter_2)
58 parameters['filter_2'] = int(self.filter_2)
59 parameters['filter_5'] = int(self.filter_5)
59 parameters['filter_5'] = int(self.filter_5)
60
60
61 return parameters
61 return parameters
62
62
63 def dict_to_parms(self, parameters):
63 def dict_to_parms(self, parameters):
64
64
65 #self.name = parameters['name']
65 #self.name = parameters['name']
66 self.clock = parameters['clock']
66 self.clock = parameters['clock']
67 self.mult = parameters['mult']
67 self.mult = parameters['mult']
68 self.fch = parameters['fch']
68 self.fch = parameters['fch']
69 self.fch_decimal = parameters['fch_decimal']
69 self.fch_decimal = parameters['fch_decimal']
70 self.filter_fir = parameters['filter_fir']
70 self.filter_fir = parameters['filter_fir']
71 self.filter_2 = parameters['filter_2']
71 self.filter_2 = parameters['filter_2']
72 self.filter_5 = parameters['filter_5']
72 self.filter_5 = parameters['filter_5']
73
73
74
74
75 class JARSConfiguration(Configuration):
75 class JARSConfiguration(Configuration):
76
76
77 ADC_RESOLUTION = 8
77 ADC_RESOLUTION = 8
78 PCI_DIO_BUSWIDTH = 32
78 PCI_DIO_BUSWIDTH = 32
79 HEADER_VERSION = 1103
79 HEADER_VERSION = 1103
80 BEGIN_ON_START = True
80 BEGIN_ON_START = True
81 REFRESH_RATE = 1
81 REFRESH_RATE = 1
82
82
83 exp_type = models.PositiveIntegerField(verbose_name='Experiment Type', choices=EXPERIMENT_TYPE, default=0)
83 exp_type = models.PositiveIntegerField(verbose_name='Experiment Type', choices=EXPERIMENT_TYPE, default=0)
84 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[MinValueValidator(1), MaxValueValidator(4)], default = 1)
84 cards_number = models.PositiveIntegerField(verbose_name='Number of Cards', validators=[MinValueValidator(1), MaxValueValidator(4)], default = 1)
85 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[MinValueValidator(1), MaxValueValidator(8)], default = 5)
85 channels_number = models.PositiveIntegerField(verbose_name='Number of Channels', validators=[MinValueValidator(1), MaxValueValidator(8)], default = 5)
86 channels = models.CharField(verbose_name='Channels', max_length=15, default = '1,2,3,4,5')
86 channels = models.CharField(verbose_name='Channels', max_length=15, default = '1,2,3,4,5')
87 data_type = models.PositiveIntegerField(verbose_name='Data Type', choices=DATA_TYPE, default=0)
87 data_type = models.PositiveIntegerField(verbose_name='Data Type', choices=DATA_TYPE, default=0)
88 raw_data_blocks = models.PositiveIntegerField(verbose_name='Raw Data Blocks', validators=[MaxValueValidator(5000)], default=60)
88 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', default=400)
89 profiles_block = models.PositiveIntegerField(verbose_name='Profiles Per Block', default=400)
90 acq_profiles = models.PositiveIntegerField(verbose_name='Acquired Profiles', default=400)
90 acq_profiles = models.PositiveIntegerField(verbose_name='Acquired Profiles', default=400)
91 ftp_interval = models.PositiveIntegerField(verbose_name='FTP Interval', default=60)
91 ftp_interval = models.PositiveIntegerField(verbose_name='FTP Interval', default=60)
92 fftpoints = models.PositiveIntegerField(verbose_name='FFT Points',default=16)
92 fftpoints = models.PositiveIntegerField(verbose_name='FFT Points',default=16)
93 cohe_integr_str = models.PositiveIntegerField(verbose_name='Coh. Int. Stride',validators=[MinValueValidator(1)], default=30)
93 cohe_integr_str = models.PositiveIntegerField(verbose_name='Coh. Int. Stride',validators=[MinValueValidator(1)], default=30)
94 cohe_integr = models.PositiveIntegerField(verbose_name='Coherent Integrations',validators=[MinValueValidator(1)], default=30)
94 cohe_integr = models.PositiveIntegerField(verbose_name='Coherent Integrations',validators=[MinValueValidator(1)], default=30)
95 incohe_integr = models.PositiveIntegerField(verbose_name='Incoherent Integrations',validators=[MinValueValidator(1)], default=30)
95 incohe_integr = models.PositiveIntegerField(verbose_name='Incoherent Integrations',validators=[MinValueValidator(1)], default=30)
96 decode_data = models.PositiveIntegerField(verbose_name='Decode Data', choices=DECODE_TYPE, default=0)
96 decode_data = models.PositiveIntegerField(verbose_name='Decode Data', choices=DECODE_TYPE, default=0)
97 post_coh_int = models.BooleanField(verbose_name='Post Coherent Integration', default=False)
97 post_coh_int = models.BooleanField(verbose_name='Post Coherent Integration', default=False)
98 filter = models.ForeignKey(JARSfilter, on_delete=models.CASCADE, null=True)
99 spectral_number = models.PositiveIntegerField(verbose_name='# Spectral Combinations',validators=[MinValueValidator(1)], default=1)
98 spectral_number = models.PositiveIntegerField(verbose_name='# Spectral Combinations',validators=[MinValueValidator(1)], default=1)
100 spectral = models.CharField(verbose_name='Combinations', max_length=5000, default = '[0, 0],')
99 spectral = models.CharField(verbose_name='Combinations', max_length=5000, default = '[0, 0],')
101 create_directory = models.BooleanField(verbose_name='Create Directory Per Day', default=True)
100 create_directory = models.BooleanField(verbose_name='Create Directory Per Day', default=True)
102 include_expname = models.BooleanField(verbose_name='Experiment Name in Directory', default=False)
101 include_expname = models.BooleanField(verbose_name='Experiment Name in Directory', default=False)
103 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
102 #view_raw_data = models.BooleanField(verbose_name='View Raw Data', default=True)
104 save_ch_dc = models.BooleanField(verbose_name='Save Channels DC', default=True)
103 save_ch_dc = models.BooleanField(verbose_name='Save Channels DC', default=True)
105 save_data = models.BooleanField(verbose_name='Save Data', default=True)
104 save_data = models.BooleanField(verbose_name='Save Data', default=True)
106 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}')
105 filter_parms = models.CharField(max_length=10000, default='{"clock": 60, "mult": 5, "fch": 49.92, "fch_decimal": 721554506, "filter_fir": 2, "filter_2": 12, "filter_5": 25}, "model": "jars.jarsfilter", "pk": 1}')
107
106
108 class Meta:
107 class Meta:
109 db_table = 'jars_configurations'
108 db_table = 'jars_configurations'
110
109
111 def add_parms_to_filter(self):
112 self.filter_parms = self.filter.parms_to_dict()
113 self.save()
114
115 def filter_resolution(self):
110 def filter_resolution(self):
116 filter_parms = eval(self.filter_parms)
111 filter_parms = eval(self.filter_parms)
117 if filter_parms.__class__.__name__=='str':
112 if filter_parms.__class__.__name__=='str':
118 filter_parms = eval(filter_parms)
113 filter_parms = eval(filter_parms)
119
114
120 filter_clock = filter_parms['clock']
115 filter_clock = filter_parms['clock']
121 filter_2 = filter_parms['filter_2']
116 filter_2 = filter_parms['filter_2']
122 filter_5 = filter_parms['filter_5']
117 filter_5 = filter_parms['filter_5']
123 filter_fir = filter_parms['filter_fir']
118 filter_fir = filter_parms['filter_fir']
124
119
125 resolution = round((filter_clock/(filter_2*filter_5*filter_fir)),2)
120 resolution = round((filter_clock/(filter_2*filter_5*filter_fir)),2)
126 return resolution
121 return resolution
127
122
128 def dict_to_parms(self, params, id=None):
123 def dict_to_parms(self, params, id=None):
129
124
130 if id is not None:
125 if id is not None:
131 data = Params(params).get_conf(id_conf=id)
126 data = Params(params).get_conf(id_conf=id)
132 else:
127 else:
133 data = Params(params).get_conf(dtype='jars')
128 data = Params(params).get_conf(dtype='jars')
134
129
135 self.name = data['name']
130 self.name = data['name']
136 self.exp_type = data['exp_type']
131 self.exp_type = data['exp_type']
137 #if data['exp_type'] in (1, '1') :
132 #if data['exp_type'] in (1, '1') :
138 self.incohe_integr = data['incohe_integr']
133 self.incohe_integr = data['incohe_integr']
139 self.spectral_number = data['spectral_number']
134 self.spectral_number = data['spectral_number']
140 self.spectral = data['spectral']
135 self.spectral = data['spectral']
141 #self.pd_directory = data['pd_directory']
136 #self.pd_directory = data['pd_directory']
142 self.cards_number = data['cards_number']
137 self.cards_number = data['cards_number']
143 self.channels_number = data['channels_number']
138 self.channels_number = data['channels_number']
144 self.channels = data['channels']
139 self.channels = data['channels']
145 #self.rd_directory = data['rd_directory']
140 #self.rd_directory = data['rd_directory']
146 #self.raw_data_blocks = data['raw_data_blocks']
141 #self.raw_data_blocks = data['raw_data_blocks']
147 self.data_type = data['data_type']
142 self.data_type = data['data_type']
148 self.cohe_integr_str = data['cohe_integr_str']
143 self.cohe_integr_str = data['cohe_integr_str']
149 self.acq_profiles = data['acq_profiles']
144 self.acq_profiles = data['acq_profiles']
150 self.profiles_block = data['profiles_block']
145 self.profiles_block = data['profiles_block']
151 self.ftp_interval = data['ftp_interval']
146 self.ftp_interval = data['ftp_interval']
152 self.fftpoints = data['fftpoints']
147 self.fftpoints = data['fftpoints']
153 self.cohe_integr = data['cohe_integr']
148 self.cohe_integr = data['cohe_integr']
154 self.filter_parms = json.dumps(data['filter_parms'])
149 self.filter_parms = json.dumps(data['filter_parms'])
155 self.create_directory = data['create_directory']
150 self.create_directory = data['create_directory']
156 self.include_expname = data['include_expname']
151 self.include_expname = data['include_expname']
157 #self.acq_link = data['acq_link']
152 #self.acq_link = data['acq_link']
158 #self.view_raw_data = data['view_raw_data']
153 #self.view_raw_data = data['view_raw_data']
159 self.save_ch_dc = data['save_ch_dc']
154 self.save_ch_dc = data['save_ch_dc']
160 self.save_data = data['save_data']
155 self.save_data = data['save_data']
161 self.save()
156 self.save()
162
157
163 def request(self, cmd, method='get', **kwargs):
158 def request(self, cmd, method='get', **kwargs):
164
159
165 req = getattr(requests, method)(self.device.url(cmd), **kwargs)
160 req = getattr(requests, method)(self.device.url(cmd), **kwargs)
166 payload = req.json()
161 payload = req.json()
167 return payload
162 return payload
168
163
169 def status_device(self):
164 def status_device(self):
170
165
171 try:
166 try:
172 payload = self.request('status',
167 payload = self.request('status',
173 params={'name': self.experiment.name})
168 params={'name': self.experiment.name})
174 self.device.status = payload['status']
169 self.device.status = payload['status']
175 self.device.save()
170 self.device.save()
176 self.message = payload['message']
171 self.message = payload['message']
177 except Exception as e:
172 except Exception as e:
178 self.device.status = 0
173 self.device.status = 0
179 self.message = str(e)
174 self.message = str(e)
180 self.device.save()
175 self.device.save()
181 return False
176 return False
182
177
183 return True
178 return True
184
179
185 def stop_device(self):
180 def stop_device(self):
186
181
187 try:
182 try:
188 payload = self.request('stop', 'post')
183 payload = self.request('stop', 'post')
189 self.device.status = payload['status']
184 self.device.status = payload['status']
190 self.device.save()
185 self.device.save()
191 self.message = payload['message']
186 self.message = payload['message']
192 except Exception as e:
187 except Exception as e:
193 self.device.status = 0
188 self.device.status = 0
194 self.message = str(e)
189 self.message = str(e)
195 self.device.save()
190 self.device.save()
196 return False
191 return False
197
192
198 return True
193 return True
199
194
200 def read_device(self):
195 def read_device(self):
201
196
202 try:
197 try:
203 payload = self.request('read', params={'name': self.experiment.name})
198 payload = self.request('read', params={'name': self.experiment.name})
204 self.message = 'Configuration loaded'
199 self.message = 'Configuration loaded'
205 except:
200 except:
206 self.device.status = 0
201 self.device.status = 0
207 self.device.save()
202 self.device.save()
208 self.message = 'Could not read JARS configuration.'
203 self.message = 'Could not read JARS configuration.'
209 return False
204 return False
210
205
211 return payload
206 return payload
212
207
213 def write_device(self):
208 def write_device(self):
214
209
215 if self.device.status == 3:
210 if self.device.status == 3:
216 self.message = 'Could not configure device. Software Acquisition is running'
211 self.message = 'Could not configure device. Software Acquisition is running'
217 return False
212 return False
218
213
219 data = self.experiment.parms_to_dict()
214 data = self.experiment.parms_to_dict()
220
215
221 for key in data['configurations']['allIds']:
216 for key in data['configurations']['allIds']:
222 if data['configurations']['byId'][key]['device_type'] in ('dds', 'cgs'):
217 if data['configurations']['byId'][key]['device_type'] in ('dds', 'cgs'):
223 data['configurations']['allIds'].remove(key)
218 data['configurations']['allIds'].remove(key)
224 data['configurations']['byId'].pop(key)
219 data['configurations']['byId'].pop(key)
225 elif data['configurations']['byId'][key]['device_type'] == 'jars':
220 elif data['configurations']['byId'][key]['device_type'] == 'jars':
226 data['configurations']['byId'][key] = self.parms_to_dict()['configurations']['byId'][str(self.pk)]
221 data['configurations']['byId'][key] = self.parms_to_dict()['configurations']['byId'][str(self.pk)]
227 elif data['configurations']['byId'][key]['device_type'] == 'rc':
222 elif data['configurations']['byId'][key]['device_type'] == 'rc':
228 data['configurations']['byId'][key]['pulses'] = ''
223 data['configurations']['byId'][key]['pulses'] = ''
229 data['configurations']['byId'][key]['delays'] = ''
224 data['configurations']['byId'][key]['delays'] = ''
230 rc_ids = [pk for pk in data['configurations']['allIds'] if data['configurations']['byId'][pk]['device_type']=='rc']
225 rc_ids = [pk for pk in data['configurations']['allIds'] if data['configurations']['byId'][pk]['device_type']=='rc']
231 mix_ids = [pk for pk in rc_ids if data['configurations']['byId'][pk]['mix']]
226 mix_ids = [pk for pk in rc_ids if data['configurations']['byId'][pk]['mix']]
232 if mix_ids:
227 if mix_ids:
233 params = data['configurations']['byId'][mix_ids[0]]['parameters']
228 params = data['configurations']['byId'][mix_ids[0]]['parameters']
234 rc = data['configurations']['byId'][params.split('-')[0].split('|')[0]]
229 rc = data['configurations']['byId'][params.split('-')[0].split('|')[0]]
235 rc['mix'] = True
230 rc['mix'] = True
236 data['configurations']['byId'][rc['id']] = rc
231 data['configurations']['byId'][rc['id']] = rc
237 elif len(rc_ids)==0:
232 elif len(rc_ids)==0:
238 self.message = 'Missing RC configuration'
233 self.message = 'Missing RC configuration'
239 return False
234 return False
240
235
241 json_data = json.dumps(data)
236 json_data = json.dumps(data)
242 print json_data
237 print json_data
243 try:
238 try:
244 payload = self.request('write', 'post', json=json_data)
239 payload = self.request('write', 'post', json=json_data)
245 self.device.status = payload['status']
240 self.device.status = payload['status']
246 self.message = payload['message']
241 self.message = payload['message']
247 self.device.save()
242 self.device.save()
248 if self.device.status == 1:
243 if self.device.status == 1:
249 return False
244 return False
250
245
251 except Exception as e:
246 except Exception as e:
252 self.device.status = 0
247 self.device.status = 0
253 self.message = str(e)
248 self.message = str(e)
254 self.device.save()
249 self.device.save()
255 return False
250 return False
256
251
257 return True
252 return True
258
253
259 def start_device(self):
254 def start_device(self):
260
255
261 try:
256 try:
262 payload = self.request('start', 'post',
257 payload = self.request('start', 'post',
263 json={'name': self.experiment.name})
258 json={'name': self.experiment.name})
264 self.device.status = payload['status']
259 self.device.status = payload['status']
265 self.message = payload['message']
260 self.message = payload['message']
266 self.device.save()
261 self.device.save()
267 if self.device.status == 1:
262 if self.device.status == 1:
268 return False
263 return False
269
264
270 except Exception as e:
265 except Exception as e:
271 self.device.status = 0
266 self.device.status = 0
272 self.message = str(e)
267 self.message = str(e)
273 self.device.save()
268 self.device.save()
274 return False
269 return False
275
270
276 return True
271 return True
277
272
278 def update_from_file(self, filename):
273 def update_from_file(self, filename):
279
274
280 f = JARSFile(filename)
275 f = JARSFile(filename)
281 self.dict_to_parms(f.data)
276 self.dict_to_parms(f.data)
282 self.save()
277 self.save()
283
278
284 def get_absolute_url_import(self):
279 def get_absolute_url_import(self):
285 return reverse('url_import_jars_conf', args=[str(self.id)])
280 return reverse('url_import_jars_conf', args=[str(self.id)])
286
281
287 def get_absolute_url_read(self):
282 def get_absolute_url_read(self):
288 return reverse('url_read_jars_conf', args=[str(self.id)])
283 return reverse('url_read_jars_conf', args=[str(self.id)])
@@ -1,209 +1,209
1 from django.shortcuts import render_to_response
1 from django.shortcuts import render_to_response
2 from django.template import RequestContext
2 from django.template import RequestContext
3 from django.shortcuts import redirect, render, get_object_or_404
3 from django.shortcuts import redirect, render, get_object_or_404
4 from django.contrib import messages
4 from django.contrib import messages
5
5
6 from apps.main.models import Device
6 from apps.main.models import Device
7 from apps.main.views import sidebar
7 from apps.main.views import sidebar
8
8
9 from .models import JARSConfiguration, JARSfilter
9 from .models import JARSConfiguration, JARSfilter
10 from .forms import JARSConfigurationForm, JARSfilterForm, JARSImportForm
10 from .forms import JARSConfigurationForm, JARSfilterForm, JARSImportForm
11
11
12 import json
12 import json
13 # Create your views here.
13 # Create your views here.
14
14
15 def jars_conf(request, id_conf):
15 def jars_conf(request, id_conf):
16
16
17 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
17 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
18
18
19 filter_parms = eval(conf.filter_parms)
19 filter_parms = eval(conf.filter_parms)
20 if filter_parms.__class__.__name__=='str':
20 if filter_parms.__class__.__name__=='str':
21 filter_parms = eval(filter_parms)
21 filter_parms = eval(filter_parms)
22
22
23 kwargs = {}
23 kwargs = {}
24 kwargs['filter'] = filter_parms
24 kwargs['filter'] = filter_parms
25 kwargs['filter_keys'] = ['clock', 'mult', 'fch', 'fch_decimal',
25 kwargs['filter_keys'] = ['clock', 'mult', 'fch', 'fch_decimal',
26 'filter_fir', 'filter_2', 'filter_5']
26 'filter_fir', 'filter_2', 'filter_5']
27
27
28 filter_resolution=conf.filter_resolution()
28 filter_resolution=conf.filter_resolution()
29 kwargs['resolution'] = '{} (MHz)'.format(filter_resolution)
29 kwargs['resolution'] = '{} (MHz)'.format(filter_resolution)
30 if filter_resolution < 1:
30 if filter_resolution < 1:
31 kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000)
31 kwargs['resolution'] = '{} (kHz)'.format(filter_resolution*1000)
32
32
33 kwargs['status'] = conf.device.get_status_display()
33 kwargs['status'] = conf.device.get_status_display()
34
34
35
35
36 kwargs['dev_conf'] = conf
36 kwargs['dev_conf'] = conf
37 kwargs['dev_conf_keys'] = ['name',
37 kwargs['dev_conf_keys'] = ['name',
38 'cards_number', 'channels_number', 'channels',
38 'cards_number', 'channels_number', 'channels',
39 #'rd_directory', 'pd_directory',
39 #'rd_directory', 'pd_directory',
40 'data_type',
40 'data_type',
41 'acq_profiles', 'profiles_block', 'raw_data_blocks', 'ftp_interval', 'fftpoints',
41 'acq_profiles', 'profiles_block', 'raw_data_blocks', 'ftp_interval', 'fftpoints',
42 'cohe_integr_str', 'decode_data',
42 'cohe_integr_str', 'decode_data',
43 'incohe_integr', 'cohe_integr', 'spectral_number',
43 'incohe_integr', 'cohe_integr', 'spectral_number',
44 'spectral', 'create_directory', 'include_expname',
44 'spectral', 'create_directory', 'include_expname',
45 'save_ch_dc', 'save_data']
45 'save_ch_dc', 'save_data']
46
46
47 kwargs['title'] = 'JARS Configuration'
47 kwargs['title'] = 'JARS Configuration'
48 kwargs['suptitle'] = 'Details'
48 kwargs['suptitle'] = 'Details'
49
49
50 kwargs['button'] = 'Edit Configuration'
50 kwargs['button'] = 'Edit Configuration'
51
51
52 #kwargs['no_play'] = True
52 #kwargs['no_play'] = True
53
53
54 #kwargs['only_stop'] = True
54 #kwargs['only_stop'] = True
55
55
56 ###### SIDEBAR ######
56 ###### SIDEBAR ######
57 kwargs.update(sidebar(conf=conf))
57 kwargs.update(sidebar(conf=conf))
58
58
59 return render(request, 'jars_conf.html', kwargs)
59 return render(request, 'jars_conf.html', kwargs)
60
60
61 def jars_conf_edit(request, id_conf):
61 def jars_conf_edit(request, id_conf):
62
62
63 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
63 conf = get_object_or_404(JARSConfiguration, pk=id_conf)
64
64
65 filter_parms = eval(conf.filter_parms)
65 filter_parms = eval(conf.filter_parms)
66 if filter_parms.__class__.__name__=='str':
66 if filter_parms.__class__.__name__=='str':
67 filter_parms = eval(filter_parms)
67 filter_parms = eval(filter_parms)
68
68
69 if request.method=='GET':
69 if request.method=='GET':
70 form = JARSConfigurationForm(instance=conf)
70 form = JARSConfigurationForm(instance=conf)
71 filter_form = JARSfilterForm(initial=filter_parms)
71 filter_form = JARSfilterForm(initial=filter_parms)
72
72
73 if request.method=='POST':
73 if request.method=='POST':
74 form = JARSConfigurationForm(request.POST, instance=conf)
74 form = JARSConfigurationForm(request.POST, instance=conf)
75 filter_form = JARSfilterForm(request.POST)
75 filter_form = JARSfilterForm(request.POST)
76
76
77 if filter_form.is_valid():
77 if filter_form.is_valid():
78 jars_filter = filter_form.cleaned_data
78 jars_filter = filter_form.cleaned_data
79 try:
79 try:
80 jars_filter.pop('name')
80 jars_filter.pop('name')
81 except:
81 except:
82 pass
82 pass
83
83
84 if form.is_valid():
84 if form.is_valid():
85 conf = form.save(commit=False)
85 conf = form.save(commit=False)
86 conf.filter_parms = json.dumps(jars_filter)
86 conf.filter_parms = json.dumps(jars_filter)
87 conf.save()
87 conf.save()
88 return redirect('url_jars_conf', id_conf=conf.id)
88 return redirect('url_jars_conf', id_conf=conf.id)
89
89
90 kwargs = {}
90 kwargs = {}
91
91
92 kwargs['id_dev'] = conf.id
92 kwargs['id_dev'] = conf.id
93 kwargs['form'] = form
93 kwargs['form'] = form
94 kwargs['filter_form'] = filter_form
94 kwargs['filter_form'] = filter_form
95 kwargs['title'] = 'Device Configuration'
95 kwargs['title'] = 'Device Configuration'
96 kwargs['suptitle'] = 'Edit'
96 kwargs['suptitle'] = 'Edit'
97 kwargs['button'] = 'Save'
97 kwargs['button'] = 'Save'
98
98
99 return render(request, 'jars_conf_edit.html', kwargs)
99 return render(request, 'jars_conf_edit.html', kwargs)
100
100
101 def import_file(request, conf_id):
101 def import_file(request, conf_id):
102
102
103 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
103 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
104 if request.method=='POST':
104 if request.method=='POST':
105 form = JARSImportForm(request.POST, request.FILES)
105 form = JARSImportForm(request.POST, request.FILES)
106 if form.is_valid():
106 if form.is_valid():
107 #try:
107 #try:
108 if True:
108 if True:
109 data = conf.import_from_file(request.FILES['file_name'])
109 data = conf.import_from_file(request.FILES['file_name'])
110 conf.dict_to_parms(data)
110 conf.dict_to_parms(data)
111 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
111 messages.success(request, 'Configuration "%s" loaded succesfully' % request.FILES['file_name'])
112 return redirect(conf.get_absolute_url_edit())
112 return redirect(conf.get_absolute_url_edit())
113
113
114 #except Exception as e:
114 #except Exception as e:
115 # messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
115 # messages.error(request, 'Error parsing file: "%s" - %s' % (request.FILES['file_name'], e))
116
116
117 else:
117 else:
118 messages.warning(request, 'Your current configuration will be replaced')
118 messages.warning(request, 'Your current configuration will be replaced')
119 form = JARSImportForm()
119 form = JARSImportForm()
120
120
121 kwargs = {}
121 kwargs = {}
122 kwargs['form'] = form
122 kwargs['form'] = form
123 kwargs['title'] = 'JARS Configuration'
123 kwargs['title'] = 'JARS Configuration'
124 kwargs['suptitle'] = 'Import file'
124 kwargs['suptitle'] = 'Import file'
125 kwargs['button'] = 'Upload'
125 kwargs['button'] = 'Upload'
126 kwargs['previous'] = conf.get_absolute_url()
126 kwargs['previous'] = conf.get_absolute_url()
127
127
128 return render(request, 'jars_import.html', kwargs)
128 return render(request, 'jars_import.html', kwargs)
129
129
130 def read_conf(request, conf_id):
130 def read_conf(request, conf_id):
131
131
132 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
132 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
133 #filter = get_object_or_404(JARSfilter, pk=filter_id)
133 #filter = get_object_or_404(JARSfilter, pk=filter_id)
134
134
135 if request.method=='GET':
135 if request.method=='GET':
136
136
137 parms = conf.read_device()
137 parms = conf.read_device()
138 conf.status_device()
138 conf.status_device()
139
139
140 if not parms:
140 if not parms:
141 messages.error(request, conf.message)
141 messages.error(request, conf.message)
142 return redirect(conf.get_absolute_url())
142 return redirect(conf.get_absolute_url())
143
143
144 form = JARSConfigurationForm(initial=parms, instance=conf)
144 form = JARSConfigurationForm(initial=parms, instance=conf)
145
145
146 if request.method=='POST':
146 if request.method=='POST':
147 form = JARSConfigurationForm(request.POST, instance=conf)
147 form = JARSConfigurationForm(request.POST, instance=conf)
148
148
149 if form.is_valid():
149 if form.is_valid():
150 form.save()
150 form.save()
151 return redirect(conf.get_absolute_url())
151 return redirect(conf.get_absolute_url())
152
152
153 messages.error(request, "Parameters could not be saved")
153 messages.error(request, "Parameters could not be saved")
154
154
155 kwargs = {}
155 kwargs = {}
156 kwargs['id_dev'] = conf.id
156 kwargs['id_dev'] = conf.id
157 kwargs['filter_id'] = conf.filter.id
157 kwargs['filter_id'] = conf.filter.id
158 kwargs['form'] = form
158 kwargs['form'] = form
159 kwargs['title'] = 'Device Configuration'
159 kwargs['title'] = 'Device Configuration'
160 kwargs['suptitle'] = 'Parameters read from device'
160 kwargs['suptitle'] = 'Parameters read from device'
161 kwargs['button'] = 'Save'
161 kwargs['button'] = 'Save'
162
162
163 ###### SIDEBAR ######
163 ###### SIDEBAR ######
164 kwargs.update(sidebar(conf=conf))
164 kwargs.update(sidebar(conf=conf))
165
165
166 return render(request, 'jars_conf_edit.html', kwargs)
166 return render(request, 'jars_conf_edit.html', kwargs)
167
167
168
168
169
169
170 def change_filter(request, conf_id, filter_id=None):
170 def change_filter(request, conf_id, filter_id=None):
171
171
172 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
172 conf = get_object_or_404(JARSConfiguration, pk=conf_id)
173
173
174 if filter_id:
174 if filter_id:
175 if filter_id.__class__.__name__ not in ['int', 'float']:
175 if filter_id.__class__.__name__ not in ['int', 'float']:
176 filter_id = eval(filter_id)
176 filter_id = eval(filter_id)
177
177
178 if filter_id == 0:
178 if filter_id == 0:
179 return redirect('url_change_jars_filter', conf_id=conf.id)
179 return redirect('url_change_jars_filter', conf_id=conf.id)
180
180
181 if request.method=='GET':
181 if request.method=='GET':
182 if not filter_id:
182 if not filter_id:
183 form = JARSfilterForm(initial={'jars_configuration':conf_id, 'filter_id': 0})
183 form = JARSfilterForm(initial={'filter_id': 0})
184 else:
184 else:
185 form = JARSfilterForm(initial={'jars_configuration':conf_id, 'filter_id': filter_id})
185 form = JARSfilterForm(initial={'filter_id': filter_id})
186
186
187 if request.method=='POST':
187 if request.method=='POST':
188 form = JARSfilterForm(request.POST)
188 form = JARSfilterForm(request.POST)
189 if form.is_valid():
189 if form.is_valid():
190 jars_filter = form.cleaned_data
190 jars_filter = form.cleaned_data
191 try:
191 try:
192 jars_filter.pop('name')
192 jars_filter.pop('name')
193 except:
193 except:
194 pass
194 pass
195 conf.filter_parms = json.dumps(jars_filter)
195 conf.filter_parms = json.dumps(jars_filter)
196 conf.save()
196 conf.save()
197 return redirect('url_edit_jars_conf', id_conf=conf.id)
197 return redirect('url_edit_jars_conf', id_conf=conf.id)
198 else:
198 else:
199 messages.error(request, "Select a Filter Template")
199 messages.error(request, "Select a Filter Template")
200 return redirect('url_change_jars_filter', conf_id=conf.id)
200 return redirect('url_change_jars_filter', conf_id=conf.id)
201
201
202 kwargs = {}
202 kwargs = {}
203 kwargs['title'] = 'JARS Configuration'
203 kwargs['title'] = 'JARS Configuration'
204 kwargs['suptitle'] = 'Change Filter'
204 kwargs['suptitle'] = 'Change Filter'
205 kwargs['form'] = form
205 kwargs['form'] = form
206 kwargs['button'] = 'Change'
206 kwargs['button'] = 'Change'
207 kwargs['conf_id'] = conf.id
207 kwargs['conf_id'] = conf.id
208 kwargs['filter_id'] = filter_id
208 kwargs['filter_id'] = filter_id
209 return render(request, 'change_jars_filter.html', kwargs)
209 return render(request, 'change_jars_filter.html', kwargs)
General Comments 0
You need to be logged in to leave comments. Login now