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))
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))
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()
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)
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
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