Esempio n. 1
0
 def testOpsim2dSlicer(self):
     metric = metrics.AccumulateCountMetric(bins=[0.5, 1.5, 2.5])
     slicer = slicers.OpsimFieldSlicer()
     sql = ''
     mb = metricBundle.MetricBundle(metric, slicer, sql)
     mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
     mbg.setCurrent('')
     mbg.fieldData = self.fieldData
     mbg.runCurrent('', simData=self.simData)
     expected = np.array([[self.n1, self.n1], [-666., self.n2]])
     assert (np.array_equal(mb.metricValues.data, expected))
Esempio n. 2
0
    def testHealpix2dSlicer(self):
        metric = metrics.AccumulateCountMetric(bins=[0.5, 1.5, 2.5])
        slicer = slicers.HealpixSlicer(nside=16)
        sql = ''
        mb = metricBundle.MetricBundle(metric, slicer, sql)
        mbg = metricBundle.MetricBundleGroup({0: mb}, None, saveEarly=False)
        mbg.setCurrent('')
        mbg.runCurrent('', simData=self.simData)

        good = np.where(mb.metricValues.mask[:, -1] == False)[0]
        expected = np.array([[self.n1, self.n1], [-666., self.n2]])
        assert (np.array_equal(mb.metricValues.data[good, :], expected))
Esempio n. 3
0
nside = 128
# Connect to an opsim database, bleeding-edge sims here:
# https://lsst-web.ncsa.illinois.edu/sim-data/sims_featureScheduler_runs/
opsdb = db.OpsimDatabase('baseline_1exp_pairsmix_10yrs.db')
outDir = 'maf_out'
resultsDb = db.ResultsDb(outDir=outDir)
plotFuncs = [plots.TwoDMap()]

filters = ['u', 'g', 'r', 'i', 'z', 'y']
day_max = np.round(365.25 * 2)
bins = np.arange(day_max)

nval = 3

for filtername in filters:
    metric = metrics.AccumulateCountMetric(bins=bins)
    slicer = slicers.HealpixSlicer(nside=nside)
    plotDict = {'xlabel': 'Night (days)', 'cbarTitle': 'N obs', 'colorMax': 75}
    # only use i-band
    sql = 'filter = "%s" and night < %i' % (filtername, day_max)
    bundle = metricBundles.MetricBundle(metric,
                                        slicer,
                                        sql,
                                        plotDict=plotDict,
                                        plotFuncs=plotFuncs)
    group = metricBundles.MetricBundleGroup({0: bundle},
                                            opsdb,
                                            outDir=outDir,
                                            resultsDb=resultsDb)
    group.runAll()
Esempio n. 4
0
                latCol = 'fieldDec'
                lonCol = 'fieldRA'

            if extra == 'rotation':
                rotSkyPosColName = 'rotatedRotSkyPos'
                md += ' Rotated 2nd visit,'
            else:
                rotSkyPosColName = 'rotSkyPos'


            for filterName in filters:
                bundleList=[]
                mdf = md+' %s, %s' % (filterName,raftConfig)

                sql = 'filter="%s" and night < %i' % (filterName,year*365.25)
                metric = metrics.AccumulateCountMetric()

                bins = np.arange(0,np.ceil(year*365.25)+1,1)
                slicer = slicers.Healpix2dSlicer(nside=nside, bins=bins, useCamera=True,
                                                 latCol=latCol, lonCol=lonCol,
                                                 rotSkyPosColName=rotSkyPosColName)
                bundle = metricBundles.MetricBundle(metric,slicer,sql, metadata=mdf+'Single Vendor')
                bundle.Single=True
                bundleList.append(bundle)

                slicer = slicers.Healpix2dSlicer(nside=nside, bins=bins, useCamera=True, chipNames=chips1,
                                                 latCol=latCol, lonCol=lonCol,
                                                 rotSkyPosColName=rotSkyPosColName)
                bundle = metricBundles.MetricBundle(metric,slicer,sql, metadata=mdf+'Vendor 1')
                bundleList.append(bundle)
Esempio n. 5
0
def plot_progress_by_band():
    """Plot LSST progress by band.

    Parameters
    ----------

    Returns
    -------
    fig : the `matplotlib.figure.Figure`
        the figure with the plot
    axes : `list(matplotlib.axes.Axes)`
        the axes in the plot
    """
    ops_db = lsst.sims.maf.db.OpsimDatabase(SIM_DATABASE_FNAME)
    vector_bins = np.arange(365 * 10 + 2)
    metric = metrics.AccumulateCountMetric(col="observationStartMJD",
                                           bins=vector_bins,
                                           binCol="night")
    slicer = slicers.UniSlicer()
    bundles = {}
    for band in plotprep.BANDS:
        sql = f"filter = '{band}'"
        bundles[band] = metricBundles.MetricBundle(metric,
                                                   slicer,
                                                   sql,
                                                   plotDict={},
                                                   plotFuncs=[],
                                                   summaryMetrics=[])

    sql = ""
    slicer = slicers.OneDSlicer(sliceColName="night", bins=vector_bins)
    metric = metrics.MeanMetric(col="moonPhase")
    bundles["moon"] = metricBundles.MetricBundle(metric, slicer, sql)

    sql = ""
    slicer = slicers.OneDSlicer(sliceColName="night", bins=vector_bins)
    #metric = metrics.MeanMetric(col="observationStartMJD")
    metric = metrics.MeanMetric(col="observationStartMJD")
    bundles["mjd"] = metricBundles.MetricBundle(metric, slicer, sql)
    metric_group = metricBundles.MetricBundleGroup(bundles, ops_db)

    metric_group.runAll()

    fig, ax = plt.subplots()
    num_nights = NUM_NIGHTS

    mjd = bundles["mjd"].metricValues[:num_nights]

    for band in plotprep.BANDS:
        bundle = bundles[band]
        ax.plot(
            mjd,
            bundle.metricValues[0, :num_nights],
            c=plotprep.BAND_COLOR[band],
            label=band,
        )

    ax.scatter(
        mjd,
        np.zeros(num_nights),
        c=bundles["moon"].metricValues[:num_nights],
        cmap="cividis",
        s=5,
    )
    ax.legend()

    start_date = pd.to_datetime(mjd.min() - 15 + 2400000.5,
                                unit="D",
                                origin="julian")
    end_date = pd.to_datetime(mjd.max() + 15 + 2400000.5,
                              unit="D",
                              origin="julian")
    date_seq = pd.date_range(start=start_date, end=end_date, freq="MS")
    ax.set_xticks(date_seq.to_julian_date() - 2400000.5)
    ax.set_xticklabels(str(d)[:10] for d in date_seq)

    ax.set_ylabel("Number of visits")

    return fig, ax
Esempio n. 6
0
def plot_progress_by_quadrant():
    """Plot LSST progress by quadrant of the sky.

    Parameters
    ----------

    Returns
    -------
    fig : the `matplotlib.figure.Figure`
        the figure with the plot
    axes : `list(matplotlib.axes.Axes)`
        the axes in the plot
    """
    ops_db = lsst.sims.maf.db.OpsimDatabase(SIM_DATABASE_FNAME)

    vector_bins = np.arange(366 * 10)
    metric = metrics.AccumulateCountMetric(col="observationStartMJD",
                                           bins=vector_bins,
                                           binCol="night")
    slicer = slicers.UniSlicer()
    bundles = {}
    quads = np.arange(0, 360, 90)
    for quad in quads:
        sql = f"fieldRA >= {quad} and fieldRA < {quad+90}"
        bundles[quad] = metricBundles.MetricBundle(metric,
                                                   slicer,
                                                   sql,
                                                   plotDict={},
                                                   plotFuncs=[],
                                                   summaryMetrics=[])

    sql = ""
    slicer = slicers.OneDSlicer(sliceColName="night", bins=vector_bins)
    metric = metrics.MeanMetric(col="observationStartMJD")
    bundles["mjd"] = metricBundles.MetricBundle(metric, slicer, sql)
    metric_group = metricBundles.MetricBundleGroup(bundles, ops_db)
    metric_group.runAll()

    fig, ax = plt.subplots()
    num_nights = NUM_NIGHTS
    mjd = bundles["mjd"].metricValues[:num_nights]
    for quad in quads:
        bundle = bundles[quad]
        ax.plot(
            mjd,
            bundle.metricValues[0, :num_nights],
            label=f"{quad}$^\circ$ $\leq$ R.A. < {quad+90}$^\circ$",
        )

    ax.legend()
    start_date = pd.to_datetime(mjd.min() - 15 + 2400000.5,
                                unit="D",
                                origin="julian")
    end_date = pd.to_datetime(mjd.max() + 15 + 2400000.5,
                              unit="D",
                              origin="julian")
    date_seq = pd.date_range(start=start_date, end=end_date, freq="Q")
    ax.set_xticks(date_seq.to_julian_date() - 2400000.5)
    ax.set_xticklabels([str(d)[:10] for d in date_seq], rotation=15)

    ax.set_ylabel("Number of visits")

    return fig, ax