def testAssignment(self): """ Test that ObservationMetaData member variables get passed correctly """ mjd = 5120.0 RA = 1.5 Dec = -1.1 rotSkyPos = -10.0 skyBrightness = 25.0 testObsMD = ObservationMetaData() testObsMD.pointingRA = RA testObsMD.pointingDec = Dec testObsMD.rotSkyPos = rotSkyPos testObsMD.skyBrightness = skyBrightness testObsMD.mjd = mjd testObsMD.boundType = 'box' testObsMD.boundLength = [1.2, 3.0] self.assertAlmostEqual(testObsMD.pointingRA, RA, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) self.assertEqual(testObsMD.boundType, 'box') self.assertAlmostEqual(testObsMD.boundLength[0], 1.2, 10) self.assertAlmostEqual(testObsMD.boundLength[1], 3.0, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd, 10) # test reassignment testObsMD.pointingRA = RA+1.0 testObsMD.pointingDec = Dec+1.0 testObsMD.rotSkyPos = rotSkyPos+1.0 testObsMD.skyBrightness = skyBrightness+1.0 testObsMD.boundLength = 2.2 testObsMD.boundType = 'circle' testObsMD.mjd = mjd + 10.0 self.assertAlmostEqual(testObsMD.pointingRA, RA+1.0, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec+1.0, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos+1.0, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness+1.0, 10) self.assertEqual(testObsMD.boundType, 'circle') self.assertAlmostEqual(testObsMD.boundLength, 2.2, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd+10.0, 10) testObsMD = ObservationMetaData(mjd=mjd, pointingRA=RA, pointingDec=Dec, rotSkyPos=rotSkyPos, bandpassName='z', skyBrightness=skyBrightness) self.assertAlmostEqual(testObsMD.mjd.TAI, 5120.0, 10) self.assertAlmostEqual(testObsMD.pointingRA, 1.5, 10) self.assertAlmostEqual(testObsMD.pointingDec, -1.1, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, -10.0, 10) self.assertEqual(testObsMD.bandpass, 'z') self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) # test assigning ModifiedJulianDate obs = ObservationMetaData() mjd = ModifiedJulianDate(TAI=57388.0) obs.mjd = mjd self.assertEqual(obs.mjd, mjd) mjd2 = ModifiedJulianDate(TAI=45000.0) obs.mjd = mjd2 self.assertEqual(obs.mjd, mjd2) self.assertNotEqual(obs.mjd, mjd)
def ObservationMetaDataFromPointing(self, OpSimPointingRecord, OpSimColumns=None, boundLength=1.75, boundType='circle'): """ Return instance of ObservationMetaData for an OpSim Pointing record from OpSim. Parameters ---------- OpSimPointingRecord : Dictionary, mandatory Dictionary of values with keys corresponding to certain columns of the Summary table in the OpSim database. The minimal list of keys required for catsim to work is 'fiveSigmaDepth', 'filtSkyBrightness', and at least one of ('finSeeing', 'FWHMeff'). More keys defined in columnMap may be necessary for PhoSim to work. OpSimColumns : tuple of strings, optional, defaults to None The columns corresponding to the OpSim records. If None, attempts to obtain these from the OpSimRecord as OpSimRecord.dtype.names boundType : {'circle', 'box'}, optional, defaults to 'circle' Shape of the observation boundLength : scalar float, optional, defaults to 1.75 'characteristic size' of observation field, in units of degrees. For boundType='circle', this is a radius, for boundType='box', this is a size of the box """ pointing = OpSimPointingRecord pointing_column_names = pointing.dtype.names # Decide what is the name of the column in the OpSim database # corresponding to the Seeing. For older OpSim outputs, this is # 'finSeeing'. For later OpSim outputs this is 'FWHMeff' if OpSimColumns is None: OpSimColumns = pointing_column_names self._set_seeing_column(OpSimColumns) # check to make sure the OpSim pointings being supplied contain # the minimum required information for required_column in ('fieldRA', 'fieldDec', 'expMJD', 'filter'): if required_column not in OpSimColumns: raise RuntimeError("ObservationMetaDataGenerator requires that the database of " "pointings include the coluns:\nfieldRA (in radians)" "\nfieldDec (in radians)\nexpMJD\nfilter") # construct a raw dict of all of the OpSim columns associated with this pointing raw_dict = dict([(col, pointing[col]) for col in pointing_column_names]) obs = ObservationMetaData(pointingRA=np.degrees(pointing['fieldRA']), pointingDec=np.degrees(pointing['fieldDec']), mjd=pointing['expMJD'], bandpassName=pointing['filter'], boundType=boundType, boundLength=boundLength) if 'fiveSigmaDepth' in pointing_column_names: obs.m5 = pointing['fiveSigmaDepth'] if 'filtSkyBrightness' in pointing_column_names: obs.skyBrightness = pointing['filtSkyBrightness'] if self._seeing_column in pointing_column_names: obs.seeing = pointing[self._seeing_column] if 'rotSkyPos' in pointing_column_names: obs.rotSkyPos = np.degrees(pointing['rotSkyPos']) obs.OpsimMetaData = raw_dict return obs
def testAssignment(self): """ Test that ObservationMetaData member variables get passed correctly """ mjd = 5120.0 RA = 1.5 Dec = -1.1 rotSkyPos = -10.0 skyBrightness = 25.0 testObsMD = ObservationMetaData() testObsMD.pointingRA = RA testObsMD.pointingDec = Dec testObsMD.rotSkyPos = rotSkyPos testObsMD.skyBrightness = skyBrightness testObsMD.mjd = mjd testObsMD.boundType = 'box' testObsMD.boundLength = [1.2, 3.0] self.assertAlmostEqual(testObsMD.pointingRA, RA, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) self.assertEqual(testObsMD.boundType, 'box') self.assertAlmostEqual(testObsMD.boundLength[0], 1.2, 10) self.assertAlmostEqual(testObsMD.boundLength[1], 3.0, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd, 10) #test reassignment testObsMD.pointingRA = RA+1.0 testObsMD.pointingDec = Dec+1.0 testObsMD.rotSkyPos = rotSkyPos+1.0 testObsMD.skyBrightness = skyBrightness+1.0 testObsMD.boundLength = 2.2 testObsMD.boundType = 'circle' testObsMD.mjd = mjd + 10.0 self.assertAlmostEqual(testObsMD.pointingRA, RA+1.0, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec+1.0, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos+1.0, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness+1.0, 10) self.assertEqual(testObsMD.boundType, 'circle') self.assertAlmostEqual(testObsMD.boundLength,2.2, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd+10.0, 10) phosimMD = OrderedDict([('pointingRA', (-2.0,float)), ('pointingDec', (0.9,float)), ('Opsim_rotskypos', (1.1,float)), ('Opsim_expmjd',(4000.0,float)), ('Opsim_filter',('g',str))]) testObsMD.phoSimMetaData = phosimMD self.assertAlmostEqual(testObsMD.pointingRA, numpy.degrees(-2.0), 10) self.assertAlmostEqual(testObsMD.pointingDec, numpy.degrees(0.9), 10) self.assertAlmostEqual(testObsMD.rotSkyPos, numpy.degrees(1.1)) self.assertAlmostEqual(testObsMD.mjd.TAI, 4000.0, 10) self.assertAlmostEqual(testObsMD.bandpass, 'g') testObsMD = ObservationMetaData(mjd=mjd, pointingRA=RA, pointingDec=Dec, rotSkyPos=rotSkyPos, bandpassName='z', skyBrightness=skyBrightness) self.assertAlmostEqual(testObsMD.mjd.TAI,5120.0,10) self.assertAlmostEqual(testObsMD.pointingRA,1.5,10) self.assertAlmostEqual(testObsMD.pointingDec,-1.1,10) self.assertAlmostEqual(testObsMD.rotSkyPos,-10.0,10) self.assertEqual(testObsMD.bandpass,'z') self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) testObsMD = ObservationMetaData() testObsMD.phoSimMetaData = phosimMD self.assertAlmostEqual(testObsMD.mjd.TAI,4000.0,10) #recall that pointingRA/Dec are stored as radians in phoSim metadata self.assertAlmostEqual(testObsMD.pointingRA,numpy.degrees(-2.0),10) self.assertAlmostEqual(testObsMD.pointingDec,numpy.degrees(0.9),10) self.assertAlmostEqual(testObsMD.rotSkyPos,numpy.degrees(1.1),10) self.assertEqual(testObsMD.bandpass,'g') testObsMD = ObservationMetaData() testObsMD.phoSimMetaData = phosimMD self.assertAlmostEqual(testObsMD.mjd.TAI,4000.0,10) #recall that pointingRA/Dec are stored as radians in phoSim metadata self.assertAlmostEqual(testObsMD.pointingRA,numpy.degrees(-2.0),10) self.assertAlmostEqual(testObsMD.pointingDec,numpy.degrees(0.9),10) self.assertAlmostEqual(testObsMD.rotSkyPos,numpy.degrees(1.1),10) self.assertEqual(testObsMD.bandpass,'g') # test assigning ModifiedJulianDate obs = ObservationMetaData() mjd = ModifiedJulianDate(TAI=57388.0) obs.mjd = mjd self.assertEqual(obs.mjd, mjd) mjd2 = ModifiedJulianDate(TAI=45000.0) obs.mjd = mjd2 self.assertEqual(obs.mjd, mjd2) self.assertNotEqual(obs.mjd, mjd)
def ObservationMetaDataFromPointing(self, OpSimPointingRecord, OpSimColumns=None, boundLength=1.75, boundType='circle'): """ Return instance of ObservationMetaData for an OpSim Pointing record from OpSim. Parameters ---------- OpSimPointingRecord : Dictionary, mandatory Dictionary of values with keys corresponding to certain columns of the Summary table in the OpSim database. The minimal list of keys required for catsim to work is 'fiveSigmaDepth', 'filtSkyBrightness', and at least one of ('finSeeing', 'FWHMeff'). More keys defined in columnMap may be necessary for PhoSim to work. OpSimColumns : tuple of strings, optional, defaults to None The columns corresponding to the OpSim records. If None, attempts to obtain these from the OpSimRecord as OpSimRecord.dtype.names boundType : {'circle', 'box'}, optional, defaults to 'circle' Shape of the observation boundLength : scalar float, optional, defaults to 1.75 'characteristic size' of observation field, in units of degrees. For boundType='circle', this is a radius, for boundType='box', this is a size of the box """ pointing = OpSimPointingRecord pointing_column_names = pointing.dtype.names # Decide what is the name of the column in the OpSim database # corresponding to the Seeing. For older OpSim outputs, this is # 'finSeeing'. For later OpSim outputs this is 'FWHMeff' if OpSimColumns is None: OpSimColumns = pointing_column_names self._set_seeing_column(OpSimColumns) # get the names of the columns that contain the minimal schema # for an ObservationMetaData mjd_name = self.user_interface_to_opsim['expMJD'][0] ra_name = self.user_interface_to_opsim['fieldRA'][0] dec_name = self.user_interface_to_opsim['fieldDec'][0] filter_name = self.user_interface_to_opsim['telescopeFilter'][0] # check to see if angles are in degrees or radians if self.user_interface_to_opsim['fieldRA'][1] is None: in_degrees = True else: in_degrees = False # check to make sure the OpSim pointings being supplied contain # the minimum required information for required_column in (ra_name, dec_name, mjd_name, filter_name): if required_column not in OpSimColumns: raise RuntimeError( "ObservationMetaDataGenerator requires that the database of " "pointings include data for:\nfieldRA" "\nfieldDec\nexpMJD\nfilter") # construct a raw dict of all of the OpSim columns associated with this pointing raw_dict = dict([(col, pointing[col]) for col in pointing_column_names]) raw_dict['opsim_version'] = self.opsim_version if in_degrees: ra_val = pointing[ra_name] dec_val = pointing[dec_name] else: ra_val = np.degrees(pointing[ra_name]) dec_val = np.degrees(pointing[dec_name]) mjd_val = pointing[mjd_name] filter_val = pointing[filter_name] obs = ObservationMetaData(pointingRA=ra_val, pointingDec=dec_val, mjd=mjd_val, bandpassName=filter_val, boundType=boundType, boundLength=boundLength) m5_name = self.user_interface_to_opsim['m5'][0] rotSky_name = self.user_interface_to_opsim['rotSkyPos'][0] if m5_name in pointing_column_names: obs.m5 = pointing[m5_name] if 'filtSkyBrightness' in pointing_column_names: obs.skyBrightness = pointing['filtSkyBrightness'] if self._seeing_column in pointing_column_names: obs.seeing = pointing[self._seeing_column] if rotSky_name in pointing_column_names: if in_degrees: obs.rotSkyPos = pointing[rotSky_name] else: obs.rotSkyPos = np.degrees(pointing[rotSky_name]) obs.OpsimMetaData = raw_dict return obs
def testAssignment(self): """ Test that ObservationMetaData member variables get passed correctly """ mjd = 5120.0 RA = 1.5 Dec = -1.1 rotSkyPos = -10.0 skyBrightness = 25.0 testObsMD = ObservationMetaData() testObsMD.pointingRA = RA testObsMD.pointingDec = Dec testObsMD.rotSkyPos = rotSkyPos testObsMD.skyBrightness = skyBrightness testObsMD.mjd = mjd testObsMD.boundType = 'box' testObsMD.boundLength = [1.2, 3.0] self.assertAlmostEqual(testObsMD.pointingRA, RA, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) self.assertEqual(testObsMD.boundType, 'box') self.assertAlmostEqual(testObsMD.boundLength[0], 1.2, 10) self.assertAlmostEqual(testObsMD.boundLength[1], 3.0, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd, 10) # test reassignment testObsMD.pointingRA = RA + 1.0 testObsMD.pointingDec = Dec + 1.0 testObsMD.rotSkyPos = rotSkyPos + 1.0 testObsMD.skyBrightness = skyBrightness + 1.0 testObsMD.boundLength = 2.2 testObsMD.boundType = 'circle' testObsMD.mjd = mjd + 10.0 self.assertAlmostEqual(testObsMD.pointingRA, RA + 1.0, 10) self.assertAlmostEqual(testObsMD.pointingDec, Dec + 1.0, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, rotSkyPos + 1.0, 10) self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness + 1.0, 10) self.assertEqual(testObsMD.boundType, 'circle') self.assertAlmostEqual(testObsMD.boundLength, 2.2, 10) self.assertAlmostEqual(testObsMD.mjd.TAI, mjd + 10.0, 10) testObsMD = ObservationMetaData(mjd=mjd, pointingRA=RA, pointingDec=Dec, rotSkyPos=rotSkyPos, bandpassName='z', skyBrightness=skyBrightness) self.assertAlmostEqual(testObsMD.mjd.TAI, 5120.0, 10) self.assertAlmostEqual(testObsMD.pointingRA, 1.5, 10) self.assertAlmostEqual(testObsMD.pointingDec, -1.1, 10) self.assertAlmostEqual(testObsMD.rotSkyPos, -10.0, 10) self.assertEqual(testObsMD.bandpass, 'z') self.assertAlmostEqual(testObsMD.skyBrightness, skyBrightness, 10) # test assigning ModifiedJulianDate obs = ObservationMetaData() mjd = ModifiedJulianDate(TAI=57388.0) obs.mjd = mjd self.assertEqual(obs.mjd, mjd) mjd2 = ModifiedJulianDate(TAI=45000.0) obs.mjd = mjd2 self.assertEqual(obs.mjd, mjd2) self.assertNotEqual(obs.mjd, mjd)
def ObservationMetaDataFromPointing(self, OpSimPointingRecord, OpSimColumns=None, boundLength=1.75, boundType='circle'): """ Return instance of ObservationMetaData for an OpSim Pointing record from OpSim. Parameters ---------- OpSimPointingRecord : Dictionary, mandatory Dictionary of values with keys corresponding to certain columns of the Summary table in the OpSim database. The minimal list of keys required for catsim to work is 'fiveSigmaDepth', 'filtSkyBrightness', and at least one of ('finSeeing', 'FWHMeff'). More keys defined in columnMap may be necessary for PhoSim to work. OpSimColumns : tuple of strings, optional, defaults to None The columns corresponding to the OpSim records. If None, attempts to obtain these from the OpSimRecord as OpSimRecord.dtype.names boundType : {'circle', 'box'}, optional, defaults to 'circle' Shape of the observation boundLength : scalar float, optional, defaults to 1.75 'characteristic size' of observation field, in units of degrees. For boundType='circle', this is a radius, for boundType='box', this is a size of the box """ pointing = OpSimPointingRecord pointing_column_names = pointing.dtype.names # Decide what is the name of the column in the OpSim database # corresponding to the Seeing. For older OpSim outputs, this is # 'finSeeing'. For later OpSim outputs this is 'FWHMeff' if OpSimColumns is None: OpSimColumns = pointing_column_names self._set_seeing_column(OpSimColumns) # get the names of the columns that contain the minimal schema # for an ObservationMetaData mjd_name = self.user_interface_to_opsim['expMJD'][0] ra_name = self.user_interface_to_opsim['fieldRA'][0] dec_name = self.user_interface_to_opsim['fieldDec'][0] filter_name = self.user_interface_to_opsim['telescopeFilter'][0] # check to see if angles are in degrees or radians if self.user_interface_to_opsim['fieldRA'][1] is None: in_degrees = True else: in_degrees = False # check to make sure the OpSim pointings being supplied contain # the minimum required information for required_column in (ra_name, dec_name, mjd_name, filter_name): if required_column not in OpSimColumns: raise RuntimeError("ObservationMetaDataGenerator requires that the database of " "pointings include data for:\nfieldRA" "\nfieldDec\nexpMJD\nfilter") # construct a raw dict of all of the OpSim columns associated with this pointing raw_dict = dict([(col, pointing[col]) for col in pointing_column_names]) raw_dict['opsim_version'] = self.opsim_version if in_degrees: ra_val = pointing[ra_name] dec_val = pointing[dec_name] else: ra_val = np.degrees(pointing[ra_name]) dec_val = np.degrees(pointing[dec_name]) mjd_val = pointing[mjd_name] filter_val = pointing[filter_name] obs = ObservationMetaData(pointingRA=ra_val, pointingDec=dec_val, mjd=mjd_val, bandpassName=filter_val, boundType=boundType, boundLength=boundLength) m5_name = self.user_interface_to_opsim['m5'][0] rotSky_name = self.user_interface_to_opsim['rotSkyPos'][0] if m5_name in pointing_column_names: obs.m5 = pointing[m5_name] if 'filtSkyBrightness' in pointing_column_names: obs.skyBrightness = pointing['filtSkyBrightness'] if self._seeing_column in pointing_column_names: obs.seeing = pointing[self._seeing_column] if rotSky_name in pointing_column_names: if in_degrees: obs.rotSkyPos = pointing[rotSky_name] else: obs.rotSkyPos = np.degrees(pointing[rotSky_name]) obs.OpsimMetaData = raw_dict return obs