def test_snapshot_choices(self): from tao.datasets import snapshot_choices s1 = SimulationFactory.create() s2 = SimulationFactory.create() g1 = GalaxyModelFactory.create() g2 = GalaxyModelFactory.create() g3 = GalaxyModelFactory.create() d1 = DataSetFactory.create(simulation=s1, galaxy_model=g3) d2 = DataSetFactory.create(simulation=s2, galaxy_model=g1) d3 = DataSetFactory.create(simulation=s2, galaxy_model=g2) snapshot1 = SnapshotFactory.create(dataset=d1, redshift='0.123') snapshot2 = SnapshotFactory.create(dataset=d2, redshift='0.012') snapshot3 = SnapshotFactory.create(dataset=d2, redshift='0.3') snapshot4 = SnapshotFactory.create(dataset=d3, redshift='0.123') snapshot5 = SnapshotFactory.create(dataset=d3, redshift='0.012') snapshot6 = SnapshotFactory.create(dataset=d3, redshift='0.3') self.assertEqual([ (snapshot1.id, snapshot1.redshift, {}), ], snapshot_choices(d1.id)) self.assertEqual([ (snapshot2.id, snapshot2.redshift, {}), (snapshot3.id, snapshot3.redshift, {}), ], snapshot_choices(d2.id)) self.assertEqual([ (snapshot5.id, snapshot5.redshift, {}), (snapshot4.id, snapshot4.redshift, {}), (snapshot6.id, snapshot6.redshift, {}) ], snapshot_choices(d3.id))
def __init__(self, *args, **kwargs): self.ui_holder = args[0] super(Form, self).__init__(*args[1:], **kwargs) if self.is_bound: # We need to load the valid choices for validation gmid = self.data[self.prefix + '-galaxy_model'] sid = self.data[self.prefix + '-dark_matter_simulation'] dataset_id = tao_models.DataSet.objects.get(galaxy_model_id=gmid, simulation_id=sid).pk dms_choices = datasets.dark_matter_simulation_choices() gm_choices = datasets.galaxy_model_choices(sid) snapshot_choices = datasets.snapshot_choices(dataset_id) if self.data[self.prefix + '-catalogue_geometry'] == 'light-cone' and \ self.prefix + '-light_cone_type' in self.data and \ self.data[self.prefix + '-light_cone_type'] == 'random' and\ self.prefix + '-rng_seeds' in self.data: self.fields['rng_seeds'].initial = self.data[self.prefix + '-rng_seeds'] elif self.data[self.prefix + '-catalogue_geometry'] == 'box' and \ self.prefix + '-rng_seed' in self.data: self.fields['rng_seed'].initial = self.data[self.prefix + '-rng_seed'] else: # The choices should be empty, since they are loaded in the wizard # output_choices is here until Carlos sets up the View Model sid = datasets.dark_matter_simulation_choices()[0][0] dataset_id = datasets.galaxy_model_choices(sid)[0][0] dms_choices = [] gm_choices = [] snapshot_choices = [(None, None, {"data-bind" : "value: $data, text: catalogue.modules.light_cone.format_redshift($data.fields.redshift)"})] objs = datasets.output_choices(dataset_id) output_choices = [(x.id, x.label) for x in objs] self.fields['dark_matter_simulation'] = ChoiceFieldWithOtherAttrs(choices=dms_choices) # AKG: I think that galaxy_model and dark_matter_simulation should follow the snapshot pattern. # Still to be determined self.fields['galaxy_model'] = ChoiceFieldWithOtherAttrs(choices=gm_choices) self.fields['snapshot'] = ChoiceFieldWithOtherAttrs(required=False, label='Redshift', choices=snapshot_choices) self.fields['number_of_light_cones'] = forms.IntegerField(label=_('Select the number of light-cones:'), required=False, initial='1', widget=SpinnerWidget) self.fields['output_properties'] = bf_fields.forms.MultipleChoiceField(required=True, choices=output_choices, widget=TwoSidedSelectWidget) for field_name in Form.SEMIREQUIRED_FIELDS: self.fields[field_name].semirequired = True self.context = { 'simulations': tao_models.Simulation.objects.all(), 'data_sets': tao_models.DataSet.objects.select_related('galaxy_model').all(), } # Knockout.js data bindings self.fields['catalogue_geometry'].widget.attrs['data-bind'] = 'options: catalogue_geometries, value: catalogue_geometry, optionsText: function(i) { return i.name }' self.fields['dark_matter_simulation'].widget.attrs['data-bind'] = 'options: dark_matter_simulations, value: dark_matter_simulation, optionsText: function(i) { return i.fields.name}, event: {change: function() { box_size(dark_matter_simulation().fields.box_size); }}' self.fields['galaxy_model'].widget.attrs['data-bind'] = 'options: galaxy_models, value: galaxy_model, optionsText: function(i) { return i.fields.name }' self.fields['ra_opening_angle'].widget.attrs['data-bind'] = 'value: ra_opening_angle' self.fields['dec_opening_angle'].widget.attrs['data-bind'] = 'value: dec_opening_angle' self.fields['box_size'].widget.attrs['data-bind'] = 'value: box_size' self.fields['snapshot'].widget.attrs['data-bind'] = 'foreach: snapshots, value: snapshot' self.fields['redshift_min'].widget.attrs['data-bind'] = 'value: redshift_min' self.fields['redshift_max'].widget.attrs['data-bind'] = 'value: redshift_max' self.fields['light_cone_type'].widget.attrs['data-bind'] = 'checked: light_cone_type' self.fields['number_of_light_cones'].widget.attrs['spinner_bind'] = 'spinner: number_of_light_cones, spinnerOptions: {max: maximum_number_of_light_cones}, error_check: number_of_light_cones, error_check_nopop: true' self.fields['number_of_light_cones'].widget.attrs['spinner_message'] = "html: number_of_light_cones_msg()" self.fields['output_properties'].widget.attrs['ko_data'] = {'widget':'output_properties_widget','value':'output_properties'} self.fields['rng_seed'].widget.attrs['data-bind'] = 'value: rng_seed' self.fields['rng_seeds'].widget.attrs['data-bind'] = 'options: rng_seeds, selectedOptions: rng_seeds'