Esempio n. 1
0
 def _set_code_unit_attributes(self):
     """
     Generates the conversion to various physical _units based on the parameter file
     """
     default_length_units = [
         u for u, v in default_unit_symbol_lut.items()
         if str(v[1]) == "(length)"
     ]
     more_length_units = []
     for unit in default_length_units:
         if unit in prefixable_units:
             more_length_units += [
                 prefix + unit for prefix in unit_prefixes
             ]
     default_length_units += more_length_units
     file_units = []
     cunits = [self.wcs.wcs.cunit[i] for i in range(self.dimensionality)]
     for unit in (_.to_string() for _ in cunits):
         if unit in default_length_units:
             file_units.append(unit)
     if len(set(file_units)) == 1:
         length_factor = self.wcs.wcs.cdelt[0]
         length_unit = str(file_units[0])
         mylog.info("Found length units of %s." % (length_unit))
     else:
         self.no_cgs_equiv_length = True
         mylog.warning("No length conversion provided. Assuming 1 = 1 cm.")
         length_factor = 1.0
         length_unit = "cm"
     setdefaultattr(self, 'length_unit',
                    self.quan(length_factor, length_unit))
     setdefaultattr(self, 'mass_unit', self.quan(1.0, "g"))
     setdefaultattr(self, 'time_unit', self.quan(1.0, "s"))
     setdefaultattr(self, 'velocity_unit', self.quan(1.0, "cm/s"))
     if "beam_size" in self.specified_parameters:
         beam_size = self.specified_parameters["beam_size"]
         beam_size = self.quan(beam_size[0], beam_size[1]).in_cgs().value
     else:
         beam_size = 1.0
     self.unit_registry.add("beam",
                            beam_size,
                            dimensions=dimensions.solid_angle)
     if self.spec_cube:
         units = self.wcs_2d.wcs.cunit[0]
         if units == "deg": units = "degree"
         if units == "rad": units = "radian"
         pixel_area = np.prod(np.abs(self.wcs_2d.wcs.cdelt))
         pixel_area = self.quan(pixel_area, "%s**2" % (units)).in_cgs()
         pixel_dims = pixel_area.units.dimensions
         self.unit_registry.add("pixel",
                                float(pixel_area.value),
                                dimensions=pixel_dims)
Esempio n. 2
0
 def _set_code_unit_attributes(self):
     """
     Generates the conversion to various physical _units based on the
     parameter file
     """
     if getattr(self, "length_unit", None) is None:
         default_length_units = [
             u for u, v in default_unit_symbol_lut.items()
             if str(v[1]) == "(length)"
         ]
         more_length_units = []
         for unit in default_length_units:
             if unit in self.unit_registry.prefixable_units:
                 more_length_units += [
                     prefix + unit for prefix in unit_prefixes
                 ]
         default_length_units += more_length_units
         file_units = []
         cunits = [
             self.wcs.wcs.cunit[i] for i in range(self.dimensionality)
         ]
         for unit in (_.to_string() for _ in cunits):
             if unit in default_length_units:
                 file_units.append(unit)
         if len(set(file_units)) == 1:
             length_factor = self.wcs.wcs.cdelt[0]
             length_unit = str(file_units[0])
             mylog.info("Found length units of %s.", length_unit)
         else:
             self.no_cgs_equiv_length = True
             mylog.warning(
                 "No length conversion provided. Assuming 1 = 1 cm.")
             length_factor = 1.0
             length_unit = "cm"
         setdefaultattr(self, "length_unit",
                        self.quan(length_factor, length_unit))
     for unit, cgs in [("time", "s"), ("mass", "g")]:
         # We set these to cgs for now, but they may have been overridden
         if getattr(self, unit + "_unit", None) is not None:
             continue
         mylog.warning("Assuming 1.0 = 1.0 %s", cgs)
         setdefaultattr(self, f"{unit}_unit", self.quan(1.0, cgs))
     self.magnetic_unit = np.sqrt(4 * np.pi * self.mass_unit /
                                  (self.time_unit**2 * self.length_unit))
     self.magnetic_unit.convert_to_units("gauss")
     self.velocity_unit = self.length_unit / self.time_unit
 def _set_code_unit_attributes(self):
     """
     Generates the conversion to various physical _units based on the parameter file
     """
     default_length_units = [u for u,v in default_unit_symbol_lut.items()
                             if str(v[-1]) == "(length)"]
     more_length_units = []
     for unit in default_length_units:
         if unit in prefixable_units:
             more_length_units += [prefix+unit for prefix in unit_prefixes]
     default_length_units += more_length_units
     file_units = []
     cunits = [self.wcs.wcs.cunit[i] for i in range(self.dimensionality)]
     for i, unit in enumerate(cunits):
         if unit in default_length_units:
             file_units.append(unit.name)
     if len(set(file_units)) == 1:
         length_factor = self.wcs.wcs.cdelt[0]
         length_unit = str(file_units[0])
         mylog.info("Found length units of %s." % (length_unit))
     else:
         self.no_cgs_equiv_length = True
         mylog.warning("No length conversion provided. Assuming 1 = 1 cm.")
         length_factor = 1.0
         length_unit = "cm"
     self.length_unit = self.quan(length_factor,length_unit)
     self.mass_unit = self.quan(1.0, "g")
     self.time_unit = self.quan(1.0, "s")
     self.velocity_unit = self.quan(1.0, "cm/s")
     if "beam_size" in self.specified_parameters:
         beam_size = self.specified_parameters["beam_size"]
         beam_size = self.quan(beam_size[0], beam_size[1]).in_cgs().value
     else:
         beam_size = 1.0
     self.unit_registry.add("beam",beam_size,dimensions=dimensions.solid_angle)
     if self.spec_cube:
         units = self.wcs_2d.wcs.cunit[0]
         if units == "deg": units = "degree"
         if units == "rad": units = "radian"
         pixel_area = np.prod(np.abs(self.wcs_2d.wcs.cdelt))
         pixel_area = self.quan(pixel_area, "%s**2" % (units)).in_cgs()
         pixel_dims = pixel_area.units.dimensions
         self.unit_registry.add("pixel",float(pixel_area.value),dimensions=pixel_dims)