420 def validate(self):
421 super().validate()
422
423 def assertAllOrNone(*names):
424 """Raise ValueError unless all the named fields are set or are
425 all none (or blank).
426 """
427 setNames = [name for name in names if bool(getattr(self, name))]
428 if len(setNames) in (len(names), 0):
429 return
430 prefix = "Both or neither" if len(names) == 2 else "All or none"
431 raise ValueError("{} of {} must be set, but only {} are set".format(
432 prefix, ", ".join(names), ", ".join(setNames)))
433
434 if not (self.ra_name and self.dec_name and self.mag_column_list):
435 raise ValueError(
436 "ra_name and dec_name and at least one entry in mag_column_list must be supplied.")
437 if self.mag_err_column_map
and set(self.mag_column_list) !=
set(self.mag_err_column_map.keys()):
438 raise ValueError(
439 "mag_err_column_map specified, but keys do not match mag_column_list: {} != {}".format(
440 sorted(self.mag_err_column_map.keys()), sorted(self.mag_column_list)))
441 assertAllOrNone("ra_err_name", "dec_err_name", "coord_err_unit")
442 if self.coord_err_unit is not None:
443 result = astropy.units.Unit(self.coord_err_unit, parse_strict='silent')
444 if isinstance(result, astropy.units.UnrecognizedUnit):
445 msg = f"{self.coord_err_unit} is not a valid astropy unit string."
446 raise pexConfig.FieldValidationError(ConvertReferenceCatalogConfig.coord_err_unit, self, msg)
447
448 assertAllOrNone("epoch_name", "epoch_format", "epoch_scale")
449 assertAllOrNone("pm_ra_name", "pm_dec_name")
450 assertAllOrNone("pm_ra_err_name", "pm_dec_err_name")
451 assertAllOrNone("parallax_name", "parallax_err_name")
452 if self.pm_ra_err_name and not self.pm_ra_name:
453 raise ValueError('"pm_ra/dec_name" must be specified if "pm_ra/dec_err_name" are specified')
454 if (self.pm_ra_name or self.parallax_name) and not self.epoch_name:
455 raise ValueError(
456 '"epoch_name" must be specified if "pm_ra/dec_name" or "parallax_name" are specified')
457
458
459 if self.full_position_information:
460
461
462 assertAllOrNone("full_position_information",
463 "ra_err_name", "dec_err_name", "coord_err_unit",
464 "epoch_name", "epoch_format", "epoch_scale",
465 "pm_ra_name", "pm_dec_name",
466 "pm_ra_err_name", "pm_dec_err_name",
467 "parallax_name", "parallax_err_name"
468 )
469
470
daf::base::PropertySet * set