Example #1
0
    def testCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.
        """
        testBulge = PhoSimCatalogSersic2D(self.bulgeDB,
                                          obs_metadata=self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB,
                                         obs_metadata=self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB,
                                      obs_metadata=self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB,
                                      obs_metadata=self.obs_metadata)

        catName = os.path.join(getPackageDir('sims_catUtils'), 'tests',
                               'scratchSpace', 'phoSimTestCatalog.txt')

        testBulge.phoSimHeaderMap = test_header_map
        testBulge.write_catalog(catName)
        testDisk.write_catalog(catName, write_header=False, write_mode='a')
        testAgn.write_catalog(catName, write_header=False, write_mode='a')
        testStar.write_catalog(catName, write_header=False, write_mode='a')

        self.verify_catalog(catName)

        if os.path.exists(catName):
            os.unlink(catName)
    def testCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.
        """
        testBulge = PhoSimCatalogSersic2D(self.bulgeDB, obs_metadata = self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB, obs_metadata = self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB, obs_metadata = self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB, obs_metadata = self.obs_metadata)

        catName = os.path.join(lsst.utils.getPackageDir('sims_catUtils'),
                               'tests','scratchSpace','phoSimTestCatalog.txt')

        testBulge.write_catalog(catName)
        testDisk.write_catalog(catName, write_header=False, write_mode='a')
        testAgn.write_catalog(catName, write_header=False, write_mode='a')
        testStar.write_catalog(catName, write_header=False, write_mode='a')

        testFile = open(catName,'r')
        testLines = testFile.readlines()
        testFile.close()
        controlLines = self.baseLineFile.readlines()
        for line in testLines:
            msg = '%s not in controlLines' % line
            self.assertTrue(line in controlLines, msg=msg)

        for line in controlLines:
            msg = '%s not in testLines'
            self.assertTrue(line in testLines, msg=msg)

        if os.path.exists(catName):
            os.unlink(catName)
Example #3
0
    def testPointSourceSchema(self):
        """
        Create a PhoSim InstanceCatalog of point sources (stars).  Verify
        that the schema of the actual objects conforms to what PhoSim expects,
        as defined here

        https://bitbucket.org/phosim/phosim_release/wiki/Instance%20Catalog
        """
        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=self.obs_metadata)
        cat.phoSimHeaderMap = test_header_map
        cat_name = os.path.join(getPackageDir('sims_catUtils'), 'tests',
                                'scratchSpace',
                                'phosim_point_source_schema_cat.txt')
        if os.path.exists(cat_name):
            os.unlink(cat_name)

        cat.write_catalog(cat_name)

        with open(cat_name, 'r') as input_file:
            cat_lines = input_file.readlines()

        n_obj = 0
        for line in cat_lines:
            params = line.split()
            if len(params) > 2:
                n_obj += 1
                self.assertEqual(len(params), 17)
                self.assertEqual(params[0], 'object')
                self.assertEqual(round(float(params[1])), float(params[1]),
                                 10)  # id
                float(params[2])  # ra
                float(params[3])  # dec
                float(params[4])  # mag norm
                self.assertIn('starSED', params[5])  # sed name
                self.assertAlmostEqual(float(params[6]), 0.0, 10)  # redshift
                self.assertAlmostEqual(float(params[7]), 0.0, 10)  # gamma1
                self.assertAlmostEqual(float(params[8]), 0.0, 10)  # gamma2
                self.assertAlmostEqual(float(params[9]), 0.0, 10)  # kappa
                self.assertAlmostEqual(float(params[10]), 0.0, 10)  # delta_ra
                self.assertAlmostEqual(float(params[11]), 0.0, 10)  # delta_dec
                self.assertEqual(params[12], 'point')  # source type
                dust_msg = (
                    'It is possible you are outputting Milky Way dust parameters before '
                    'internal dust parameters; internal dust should come first'
                )
                self.assertEqual(params[13], 'none',
                                 msg=dust_msg)  # internal dust
                self.assertEqual(params[14], 'CCM',
                                 msg=dust_msg)  # Milky Way dust
                self.assertGreater(float(params[15]), 0.0, msg=dust_msg)  # Av
                self.assertAlmostEqual(float(params[16]), 3.1,
                                       msg=dust_msg)  # Rv

        self.assertGreater(n_obj, 0)

        if os.path.exists(cat_name):
            os.unlink(cat_name)
Example #4
0
    def testCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.
        """
        testBulge = PhoSimCatalogSersic2D(self.bulgeDB, obs_metadata = self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB, obs_metadata = self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB, obs_metadata = self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB, obs_metadata = self.obs_metadata)

        testBulge.phoSimHeaderMap = test_header_map
        with lsst.utils.tests.getTempFilePath('.txt') as catName:
            testBulge.write_catalog(catName)
            testDisk.write_catalog(catName, write_header=False, write_mode='a')
            testAgn.write_catalog(catName, write_header=False, write_mode='a')
            testStar.write_catalog(catName, write_header=False, write_mode='a')

            self.verify_catalog(catName)
Example #5
0
    def testPointSourceSchema(self):
        """
        Create a PhoSim InstanceCatalog of point sources (stars).  Verify
        that the schema of the actual objects conforms to what PhoSim expects,
        as defined here

        https://bitbucket.org/phosim/phosim_release/wiki/Instance%20Catalog
        """
        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=self.obs_metadata)
        cat.phoSimHeaderMap = test_header_map

        with lsst.utils.tests.getTempFilePath('.txt') as cat_name:
            cat.write_catalog(cat_name)

            with open(cat_name, 'r') as input_file:
                cat_lines = input_file.readlines()

        n_obj = 0
        for line in cat_lines:
            params = line.split()
            if len(params) > 2:
                n_obj += 1
                self.assertEqual(len(params), 17)
                self.assertEqual(params[0], 'object')
                self.assertEqual(round(float(params[1])), float(params[1]), 10)  # id
                float(params[2])  # ra
                float(params[3])  # dec
                float(params[4])  # mag norm
                self.assertIn('starSED', params[5])  # sed name
                self.assertAlmostEqual(float(params[6]), 0.0, 10)  # redshift
                self.assertAlmostEqual(float(params[7]), 0.0, 10)  # gamma1
                self.assertAlmostEqual(float(params[8]), 0.0, 10)  # gamma2
                self.assertAlmostEqual(float(params[9]), 0.0, 10)  # kappa
                self.assertAlmostEqual(float(params[10]), 0.0, 10)  # delta_ra
                self.assertAlmostEqual(float(params[11]), 0.0, 10)  # delta_dec
                self.assertEqual(params[12], 'point')  # source type
                dust_msg = ('It is possible you are outputting Milky Way dust parameters before '
                            'internal dust parameters; internal dust should come first')
                self.assertEqual(params[13], 'none', msg=dust_msg)  # internal dust
                self.assertEqual(params[14], 'CCM', msg=dust_msg)  # Milky Way dust
                self.assertGreater(float(params[15]), 0.0, msg=dust_msg)  # Av
                self.assertAlmostEqual(float(params[16]), 3.1, msg=dust_msg)  # Rv

        self.assertGreater(n_obj, 0)
    def testCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.
        """
        testBulge = PhoSimCatalogSersic2D(self.bulgeDB, obs_metadata = self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB, obs_metadata = self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB, obs_metadata = self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB, obs_metadata = self.obs_metadata)

        catName = os.path.join(lsst.utils.getPackageDir('sims_catUtils'),
                               'tests','scratchSpace','phoSimTestCatalog.txt')

        testBulge.write_catalog(catName)
        testDisk.write_catalog(catName, write_header=False, write_mode='a')
        testAgn.write_catalog(catName, write_header=False, write_mode='a')
        testStar.write_catalog(catName, write_header=False, write_mode='a')

        self.verify_catalog(catName)

        if os.path.exists(catName):
            os.unlink(catName)
Example #7
0
    def testCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.
        """
        testBulge = PhoSimCatalogSersic2D(self.bulgeDB,
                                          obs_metadata=self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB,
                                         obs_metadata=self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB,
                                      obs_metadata=self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB,
                                      obs_metadata=self.obs_metadata)

        testBulge.phoSimHeaderMap = test_header_map
        with lsst.utils.tests.getTempFilePath('.txt') as catName:
            testBulge.write_catalog(catName)
            testDisk.write_catalog(catName, write_header=False, write_mode='a')
            testAgn.write_catalog(catName, write_header=False, write_mode='a')
            testStar.write_catalog(catName, write_header=False, write_mode='a')

            self.verify_catalog(catName)
def make_instcat_header(star_db,
                        obs_md,
                        outfile,
                        object_catalogs=(),
                        nsnap=1,
                        vistime=30.,
                        minsource=100):
    """
    Write the header part of an instance catalog.

    Parameters
    ----------
    star_db: lsst.sims.catUtils.baseCatalogModels.StarObj
        InstanceCatalog object for stars.  Connects to the UW fatboy db server.
    obs_md: lsst.sims.utils.ObservationMetaData
        Observation metadata object.
    object_catalogs: sequence [()]
        Object catalog names to include in base phosim instance catalog.
        Defaults to an empty tuple.
    nsnap: int [1]
        Number of snaps per visit.
    vistime: float [30.]
        Visit time in seconds.
    minsource: int [100]
        Minimum number of objects for phosim.py to simulate a chip.
        Ignored.  As of 26 Nov. 2019 this value is no longer written to the
        header file.

    Returns
    -------
    lsst.sims.catUtils.exampleCatalogDefinitions.PhoSimCatalogPoint object
    """
    cat = PhoSimCatalogPoint(star_db, obs_metadata=obs_md)
    cat.phoSimHeaderMap = copy.deepcopy(DefaultPhoSimHeaderMap)
    cat.phoSimHeaderMap['nsnap'] = nsnap
    cat.phoSimHeaderMap['vistime'] = vistime

    with open(outfile, 'w') as output:
        cat.write_header(output)
        for cat_name in object_catalogs:
            output.write('includeobj %s.gz\n' % cat_name)
    return cat
Example #9
0
    def testSpecFileMap(self):
        """
        Test that the PhoSim InstanceCatalog SpecFileMaps map MLT dwarf spectra
        to the starSED/phoSimMLT/ directory (that is where the MLT spectra which
        have been clipped to honor PhoSim's 'no more than 24,999 lines per SED
        file' requirement reside)
        """

        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=self.obs_metadata)
        self.assertEqual(cat.specFileMap['lte_123.txt'],
                         'starSED/phoSimMLT/lte_123.txt.gz')
        self.assertEqual(cat.specFileMap['lte_123.txt.gz'],
                         'starSED/phoSimMLT/lte_123.txt.gz')
        self.assertNotEqual(cat.specFileMap['lte_123.txt'],
                            defaultSpecMap['lte_123.txt'])

        # verify that the usual stellar mappings still apply
        for test_name in ('kp_123.txt', 'km_123.txt', 'Const_123.txt',
                          'Exp_123.txt', 'Burst_123.txt', 'bergeron_123.txt',
                          'burrows_123.txt', 'm1_123.txt', 'L1_123.txt',
                          'l1_123.txt', 'Inst_123.txt'):

            self.assertEqual(cat.specFileMap[test_name],
                             defaultSpecMap[test_name])
    def testGalSimPhoSimCat(self):
        """
        Run a GalSimPhoSim catalog on some data. Then, generate an ordinary PhoSim catalog using
        the same data.  Verify that the two resulting PhoSim catalogs are identical.
        """

        galsim_cat_name = os.path.join(self.dataDir,
                                       'galSimPhoSim_galsim_cat.txt')
        phosim_cat_name = os.path.join(self.dataDir,
                                       'galSimPhoSim_phosim_cat.txt')
        galsim_image_root = os.path.join(self.dataDir, 'galSimPhoSim_images')
        db = fileDBObject(self.bulge_name,
                          dtype=self.dtype,
                          runtable='test_bulges',
                          idColKey='id')
        db.raColName = 'ra_deg'
        db.decColName = 'dec_deg'
        db.objectTypeId = 55

        gs_cat = GalSimPhoSimGalaxies(db, obs_metadata=self.obs)
        gs_cat.camera_wrapper = GalSimCameraWrapper(self.camera)
        gs_cat.bandpassNames = self.obs.bandpass
        gs_cat.PSF = SNRdocumentPSF()
        gs_cat.phoSimHeaderMap = {}
        gs_cat.write_catalog(galsim_cat_name)

        gs_cat_0 = gs_cat

        ps_cat = PhoSimCatalogSersic2D(db, obs_metadata=self.obs)
        ps_cat.phoSimHeaderMap = {}
        ps_cat.write_catalog(phosim_cat_name)

        db = fileDBObject(self.disk_name,
                          dtype=self.dtype,
                          runtable='test_disks',
                          idColKey='id')
        db.raColName = 'ra_deg'
        db.decColName = 'dec_deg'
        db.objectTypeId = 155

        gs_cat = GalSimPhoSimGalaxies(db, obs_metadata=self.obs)
        gs_cat.bandpassNames = self.obs.bandpass
        gs_cat.copyGalSimInterpreter(gs_cat_0)
        gs_cat.write_catalog(galsim_cat_name,
                             write_header=False,
                             write_mode='a')

        gs_cat_0 = gs_cat

        ps_cat = PhoSimCatalogSersic2D(db, obs_metadata=self.obs)
        ps_cat.write_catalog(phosim_cat_name,
                             write_header=False,
                             write_mode='a')

        db = fileDBObject(self.agn_name,
                          dtype=self.dtype,
                          runtable='test_agn',
                          idColKey='id')
        db.raColName = 'ra_deg'
        db.decColName = 'dec_deg'
        db.objectTypeId = 255

        gs_cat = GalSimPhoSimAgn(db, obs_metadata=self.obs)
        gs_cat.bandpassNames = self.obs.bandpass
        gs_cat.copyGalSimInterpreter(gs_cat_0)
        gs_cat.write_catalog(galsim_cat_name,
                             write_header=False,
                             write_mode='a')

        gs_cat_0 = gs_cat

        ps_cat = PhoSimCatalogZPoint(db, obs_metadata=self.obs)
        ps_cat.write_catalog(phosim_cat_name,
                             write_header=False,
                             write_mode='a')

        db = fileDBObject(self.star_name,
                          dtype=self.dtype,
                          runtable='test_agn',
                          idColKey='id')
        db.raColName = 'ra_deg'
        db.decColName = 'dec_deg'
        db.objectTypeId = 255

        gs_cat = GalSimPhoSimStars(db, obs_metadata=self.obs)
        gs_cat.bandpassNames = self.obs.bandpass
        gs_cat.copyGalSimInterpreter(gs_cat_0)
        gs_cat.write_catalog(galsim_cat_name,
                             write_header=False,
                             write_mode='a')

        ps_cat = PhoSimCatalogPoint(db, obs_metadata=self.obs)
        ps_cat.write_catalog(phosim_cat_name,
                             write_header=False,
                             write_mode='a')

        written_files = gs_cat.write_images(nameRoot=galsim_image_root)
        self.assertGreater(len(written_files), 0)
        for name in written_files:
            os.unlink(name)

        with open(galsim_cat_name, 'r') as galsim_input:
            with open(phosim_cat_name, 'r') as phosim_input:
                galsim_lines = galsim_input.readlines()
                phosim_lines = phosim_input.readlines()
                self.assertEqual(len(galsim_lines), len(phosim_lines))
                self.assertEqual(len(galsim_lines), 4 * self.n_objects + 7)
                for line in galsim_lines:
                    self.assertIn(line, phosim_lines)
                for line in phosim_lines:
                    self.assertIn(line, galsim_lines)

        if os.path.exists(galsim_cat_name):
            os.unlink(galsim_cat_name)

        if os.path.exists(phosim_cat_name):
            os.unlink(phosim_cat_name)
def make_instcat_header(star_db,
                        obs_md,
                        outfile,
                        object_catalogs=(),
                        imsim_catalog=False,
                        nsnap=1,
                        vistime=30.,
                        minsource=100):
    """
    Write the header part of an instance catalog.

    Parameters
    ----------
    star_db: lsst.sims.catUtils.baseCatalogModels.StarObj
        InstanceCatalog object for stars.  Connects to the UW fatboy db server.
    obs_md: lsst.sims.utils.ObservationMetaData
        Observation metadata object.
    object_catalogs: sequence [()]
        Object catalog names to include in base phosim instance catalog.
        Defaults to an empty tuple.
    imsim_catalog: bool [False]
        Flag to write an imSim-style object catalog.
    nsnap: int [1]
        Number of snaps per visit.
    vistime: float [30.]
        Visit time in seconds.
    minsource: int [100]
        Minimum number of objects for phosim.py to simulate a chip.

    Returns
    -------
    lsst.sims.catUtils.exampleCatalogDefinitions.PhoSimCatalogPoint object
    """
    cat = PhoSimCatalogPoint(star_db, obs_metadata=obs_md)
    cat.phoSimHeaderMap = copy.deepcopy(DefaultPhoSimHeaderMap)
    cat.phoSimHeaderMap['nsnap'] = nsnap
    cat.phoSimHeaderMap['vistime'] = vistime
    if imsim_catalog:
        cat.phoSimHeaderMap['rawSeeing'] = ('rawSeeing', None)
        cat.phoSimHeaderMap['FWHMgeom'] = ('FWHMgeom', None)
        cat.phoSimHeaderMap['FWHMeff'] = ('FWHMeff', None)
    else:
        cat.phoSimHeaderMap['camconfig'] = 1

    with open(outfile, 'w') as output:
        cat.write_header(output)
        if not imsim_catalog:
            output.write('minsource %i\n' % minsource)
            for cat_name in object_catalogs:
                output.write('includeobj %s.gz\n' % cat_name)
    return cat
Example #12
0
    def testCompoundCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.

        This test uses CompoundInstanceCatalog
        """

        # first, generate the catalog without a CompoundInstanceCatalog
        single_catName = tempfile.mktemp(dir=ROOT,
                                         prefix='phoSimTestCatalog_single',
                                         suffix='.txt')

        testBulge = PhoSimCatalogSersic2D(self.bulgeDB,
                                          obs_metadata=self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB,
                                         obs_metadata=self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB,
                                      obs_metadata=self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB,
                                      obs_metadata=self.obs_metadata)

        testBulge.phoSimHeaderMap = test_header_map
        testBulge.write_catalog(single_catName)
        testDisk.write_catalog(single_catName,
                               write_header=False,
                               write_mode='a')
        testAgn.write_catalog(single_catName,
                              write_header=False,
                              write_mode='a')
        testStar.write_catalog(single_catName,
                               write_header=False,
                               write_mode='a')

        # now, generate the catalog using CompoundInstanceCatalog
        #
        # because the CompoundCatalogDBObject requires that database
        # connection parameters be set in the input CatalogDBObject
        # daughter class definitions, we have to declare dummy
        # CatalogDBObject daughter classes below

        class dummyDBbase(object):
            driver = 'sqlite'
            database = 'PhoSimTestDatabase.db'

        dummyDBbase.database = self.tempDB

        class dummyBulgeDB(dummyDBbase, testGalaxyBulgeDBObj):
            objid = 'dummy_bulge'

        class dummyDiskDB(dummyDBbase, testGalaxyDiskDBObj):
            objid = 'dummy_disk'

        class dummyAgnDB(dummyDBbase, testGalaxyAgnDBObj):
            objid = 'dummy_agn'

        class dummyStarDB(dummyDBbase, testStarsDBObj):
            objid = 'dummy_stars'

        compoundCatalog = CompoundInstanceCatalog(
            [
                PhoSimCatalogSersic2D, PhoSimCatalogSersic2D,
                PhoSimCatalogZPoint, PhoSimCatalogPoint
            ], [dummyBulgeDB, dummyDiskDB, dummyAgnDB, dummyStarDB],
            obs_metadata=self.obs_metadata)

        self.assertEqual(len(compoundCatalog._dbObjectGroupList[0]), 3)

        compound_catName = tempfile.mktemp(dir=ROOT,
                                           prefix='phoSimTestCatalog_compound',
                                           suffix='.txt')

        compoundCatalog.phoSimHeaderMap = test_header_map
        compoundCatalog.write_catalog(compound_catName)

        # verify that the compound catalog is what we expect
        self.verify_catalog(compound_catName)

        # verify that the two catalogs are equivalent
        with open(single_catName, 'r') as single_file:
            with open(compound_catName, 'r') as compound_file:
                single_lines = single_file.readlines()
                compound_lines = compound_file.readlines()

                for line in single_lines:
                    self.assertIn(line, compound_lines)

                for line in compound_lines:
                    self.assertIn(line, single_lines)

        if os.path.exists(compound_catName):
            os.unlink(compound_catName)

        if os.path.exists(single_catName):
            os.unlink(single_catName)
Example #13
0
    def test_incomplete_obs(self):
        """
        Test that an exception gets raised if you try to make a PhoSim InstanceCatalog
        with an ObservationMetaData that lacks RA, Dec, mjd, bandpass, or rotSkyPos
        """
        obs = ObservationMetaData(pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(RuntimeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0)
        with self.assertRaises(KeyError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')

        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
        cat.phoSimHeaderMap = {}
        with lsst.utils.tests.getTempFilePath('.txt') as catName:
            cat.write_catalog(catName)
Example #14
0
    def test_incomplete_obs(self):
        """
        Test that an exception gets raised if you try to make a PhoSim InstanceCatalog
        with an ObservationMetaData that lacks RA, Dec, mjd, bandpass, or rotSkyPos
        """
        catName = os.path.join(getPackageDir('sims_catUtils'), 'tests',
                               'scratchSpace', 'bad_obs_test_phosim_cat.txt')
        obs = ObservationMetaData(pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')
        with self.assertRaises(RuntimeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0)
        with self.assertRaises(KeyError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0,
                                  pointingDec=19.0,
                                  mjd=43000.0,
                                  rotSkyPos=19.0,
                                  bandpassName='u')

        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
        cat.phoSimHeaderMap = {}
        cat.write_catalog(catName)

        if os.path.exists(catName):
            os.unlink(catName)
        if dither_switch:
            print 'dithering'
            obs.pointingRA = np.degrees(obs.OpsimMetaData['randomDitherFieldPerVisitRA'])
            obs.pointingDec = np.degrees(obs.OpsimMetaData['randomDitherFieldPerVisitDec'])
            rotSky = _getRotSkyPos(obs._pointingRA, obs._pointingDec, obs,
                                   obs.OpsimMetaData['ditheredRotTelPos'])

            obs.rotSkyPos = np.degrees(rotSky)
            obs.OpsimMetaData['rotTelPos'] = obs.OpsimMetaData['ditheredRotTelPos']

        cat_name = os.path.join(out_dir,'phosim_cat_%d.txt' % obshistid)
        star_name = 'star_cat_%d.txt' % obshistid
        gal_name = 'gal_cat_%d.txt' % obshistid
        agn_name = 'agn_cat_%d.txt' % obshistid

        cat = PhoSimCatalogPoint(star_db, obs_metadata=obs)
        cat.phoSimHeaderMap = phosim_header_map
        with open(cat_name, 'w') as output:
            cat.write_header(output)
            output.write('includeobj %s.gz\n' % star_name)
            output.write('includeobj %s.gz\n' % gal_name)
            output.write('includeobj %s.gz\n' % agn_name)

        star_cat = MaskedPhoSimCatalogPoint(star_db, obs_metadata=obs)
        star_cat.phoSimHeaderMap = phosim_header_map
        bright_cat = BrightStarCatalog(star_db, obs_metadata=obs, cannot_be_null=['isBright'])
        star_cat.min_mag = args.min_mag
        bright_cat.min_mag = args.min_mag

        from lsst.sims.catalogs.definitions import parallelCatalogWriter
        cat_dict = {}
    def testCompoundCatalog(self):
        """
        This test writes a PhoSim input catalog and compares it, one line at a time
        to a previously written catalog that should be identical.

        This test uses CompoundInstanceCatalog
        """

        # first, generate the catalog without a CompoundInstanceCatalog
        single_catName = os.path.join(lsst.utils.getPackageDir('sims_catUtils'),
                                      'tests','scratchSpace','phoSimTestCatalog_single.txt')

        testBulge = PhoSimCatalogSersic2D(self.bulgeDB, obs_metadata = self.obs_metadata)
        testDisk = PhoSimCatalogSersic2D(self.diskDB, obs_metadata = self.obs_metadata)
        testAgn = PhoSimCatalogZPoint(self.agnDB, obs_metadata = self.obs_metadata)
        testStar = PhoSimCatalogPoint(self.starDB, obs_metadata = self.obs_metadata)

        testBulge.write_catalog(single_catName)
        testDisk.write_catalog(single_catName, write_header=False, write_mode='a')
        testAgn.write_catalog(single_catName, write_header=False, write_mode='a')
        testStar.write_catalog(single_catName, write_header=False, write_mode='a')

        # now, generate the catalog using CompoundInstanceCatalog
        #
        # because the CompoundCatalogDBObject requires that database
        # connection parameters be set in the input CatalogDBObject
        # daughter class definitions, we have to declare dummy
        # CatalogDBObject daughter classes below

        class dummyDBbase(object):
            driver = 'sqlite'
            database = 'PhoSimTestDatabase.db'

        class dummyBulgeDB(dummyDBbase, testGalaxyBulgeDBObj):
            objid = 'dummy_bulge'

        class dummyDiskDB(dummyDBbase,  testGalaxyDiskDBObj):
            objid = 'dummy_disk'

        class dummyAgnDB(dummyDBbase, testGalaxyAgnDBObj):
            objid = 'dummy_agn'

        class dummyStarDB(dummyDBbase, testStarsDBObj):
            objid = 'dummy_stars'


        compoundCatalog = CompoundInstanceCatalog([PhoSimCatalogSersic2D, PhoSimCatalogSersic2D,
                                                   PhoSimCatalogZPoint, PhoSimCatalogPoint],
                                                  [dummyBulgeDB, dummyDiskDB, dummyAgnDB, dummyStarDB],
                                                  obs_metadata=self.obs_metadata)

        self.assertEqual(len(compoundCatalog._dbObjectGroupList[0]), 3)

        compound_catName = os.path.join(lsst.utils.getPackageDir('sims_catUtils'), 'tests', 'scratchSpace',
                                        'phoSimTestCatalog_compound.txt')

        compoundCatalog.write_catalog(compound_catName)

        # verify that the compound catalog is what we expect
        self.verify_catalog(compound_catName)

        # verify that the two catalogs are equivalent
        with open(single_catName, 'r') as single_file:
            with open(compound_catName, 'r') as compound_file:
                single_lines = single_file.readlines()
                compound_lines = compound_file.readlines()

                for line in single_lines:
                    self.assertIn(line, compound_lines)

                for line in compound_lines:
                    self.assertIn(line, single_lines)


        if os.path.exists(compound_catName):
            os.unlink(compound_catName)

        if os.path.exists(single_catName):
            os.unlink(single_catName)
Example #17
0
import copy
from lsst.sims.catUtils.utils import ObservationMetaDataGenerator
from lsst.sims.catUtils.exampleCatalogDefinitions import PhoSimCatalogPoint
from lsst.sims.catUtils.exampleCatalogDefinitions import DefaultPhoSimHeaderMap
from lsst.sims.catUtils.baseCatalogModels import StarObj

if __name__ == "__main__":

    db = StarObj(database='LSSTCATSIM', host='fatboy.phys.washington.edu',
                 port=1433, driver='mssql+pymssql')

    opsimdb = os.path.join('/Users', 'danielsf', 'physics', 'lsst_150412',
                           'Development', 'garage', 'OpSimData',
                           'minion_1016_sqlite.db')

    assert os.path.exists(opsimdb)
    obs_gen = ObservationMetaDataGenerator(database=opsimdb)
    obs_list = obs_gen.getObservationMetaData(obsHistID=230)
    obs = obs_list[0]
    obs.boundLength=0.05

    phosim_header_map = copy.deepcopy(DefaultPhoSimHeaderMap)
    phosim_header_map['rawSeeing'] = ('rawSeeing', None)
    phosim_header_map['FWHMeff'] = ('FWHMeff', None)
    phosim_header_map['FWHMgeom'] = ('FWHMgeom',None)

    cat = PhoSimCatalogPoint(db, obs_metadata=obs)
    cat.phoSimHeaderMap = phosim_header_map
    cat.write_catalog('catalogs/star_catalog.txt', chunk_size=10000)

Example #18
0
    def test_incomplete_obs(self):
        """
        Test that an exception gets raised if you try to make a PhoSim InstanceCatalog
        with an ObservationMetaData that lacks RA, Dec, mjd, bandpass, or rotSkyPos
        """
        obs = ObservationMetaData(pointingDec=19.0, mjd=43000.0, rotSkyPos=19.0, bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=19.0, mjd=43000.0, rotSkyPos=19.0, bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0, pointingDec=19.0, rotSkyPos=19.0, bandpassName='u')
        with self.assertRaises(RuntimeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0, pointingDec=19.0, mjd=43000.0, bandpassName='u')
        with self.assertRaises(TypeError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0, pointingDec=19.0, mjd=43000.0, rotSkyPos=19.0)
        with self.assertRaises(KeyError):
            cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
            cat.phoSimHeaderMap = {}
            with lsst.utils.tests.getTempFilePath('.txt') as catName:
                cat.write_catalog(catName)

        obs = ObservationMetaData(pointingRA=88.0, pointingDec=19.0, mjd=43000.0, rotSkyPos=19.0,
                                  bandpassName='u')

        cat = PhoSimCatalogPoint(self.starDB, obs_metadata=obs)
        cat.phoSimHeaderMap = {}
        with lsst.utils.tests.getTempFilePath('.txt') as catName:
            cat.write_catalog(catName)
Example #19
0
                obs.OpsimMetaData['randomDitherFieldPerVisitRA'])
            obs.pointingDec = np.degrees(
                obs.OpsimMetaData['randomDitherFieldPerVisitDec'])
            rotSky = _getRotSkyPos(obs._pointingRA, obs._pointingDec, obs,
                                   obs.OpsimMetaData['ditheredRotTelPos'])

            obs.rotSkyPos = np.degrees(rotSky)
            obs.OpsimMetaData['rotTelPos'] = obs.OpsimMetaData[
                'ditheredRotTelPos']

        cat_name = os.path.join(out_dir, 'phosim_cat_%d.txt' % obshistid)
        star_name = 'star_cat_%d.txt' % obshistid
        gal_name = 'gal_cat_%d.txt' % obshistid
        agn_name = 'agn_cat_%d.txt' % obshistid

        cat = PhoSimCatalogPoint(star_db, obs_metadata=obs)
        cat.phoSimHeaderMap = phosim_header_map
        with open(cat_name, 'w') as output:
            cat.write_header(output)
            output.write('includeobj %s.gz\n' % star_name)
            output.write('includeobj %s.gz\n' % gal_name)
            output.write('includeobj %s.gz\n' % agn_name)

        star_cat = MaskedPhoSimCatalogPoint(star_db, obs_metadata=obs)
        star_cat.phoSimHeaderMap = phosim_header_map
        bright_cat = BrightStarCatalog(star_db,
                                       obs_metadata=obs,
                                       cannot_be_null=['isBright'])
        star_cat.min_mag = args.min_mag
        bright_cat.min_mag = args.min_mag
if __name__ == "__main__":

    opsimdb = os.path.join('/Users', 'danielsf', 'physics')
    opsimdb = os.path.join(opsimdb, 'lsst_150412', 'Development')
    opsimdb = os.path.join(opsimdb, 'garage', 'OpSimData')
    opsimdb = os.path.join(opsimdb, 'enigma_1189_sqlite.db')


    generator = ObservationMetaDataGenerator(database = opsimdb, driver='sqlite')

    obs_metadata_list = generator.getObservationMetaData(fieldRA=(np.degrees(6.08), np.degrees(6.11)),
                                                         fieldDec=(np.degrees(-1.11), np.degrees(-1.09)),
                                                         telescopeFilter = 'r',
                                                         expMJD = (49553.0, 49653.0))

    print len(obs_metadata_list)

    db = StarObj()
    with open('amazeball_bands.txt', 'w') as timeseries:
        for ix, obs in enumerate(obs_metadata_list):
            fileName = 'amazeball_frame_%d.txt' % ix
            cat = PhoSimCatalogPoint(db, obs_metadata=obs)
            with open(fileName, 'w') as output:
                cat.write_header(output)
                output.write("object 0 %.4f %.4f 20 ../sky/sed_flat.txt 0 0 0 0 0 0 output_double.fits 0.2 0.0 none\n"
                             % (obs.unrefractedRA, obs.unrefractedDec))
            timeseries.write('%.4f %s\n' % (obs.mjd, obs.bandpass[0]))