Coverage for python/lsst/sims/maf/batches/openshutterBatch.py : 12%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""Evaluate the open shutter fraction.
2"""
3import lsst.sims.maf.metrics as metrics
4import lsst.sims.maf.slicers as slicers
5import lsst.sims.maf.metricBundles as mb
6from .colMapDict import ColMapDict
7from .common import standardSummary
9__all__ = ['openshutterFractions']
12def openshutterFractions(colmap=None, runName='opsim', extraSql=None, extraMetadata=None):
13 """Evaluate open shutter fraction over whole survey and per night.
15 Parameters
16 ----------
17 colmap : dict, opt
18 A dictionary with a mapping of column names. Default will use OpsimV4 column names.
19 runName : str, opt
20 The name of the simulated survey. Default is "opsim".
21 extraSql : str, opt
22 Additional constraint to add to any sql constraints (e.g. 'night<365')
23 Default None, for no additional constraints.
24 extraMetadata : str, opt
25 Additional metadata to add before any below (i.e. "WFD"). Default is None.
26 """
27 if colmap is None:
28 colmap = ColMapDict('opsimV4')
29 bundleList = []
31 group = 'Open Shutter Fraction'
33 subgroup = 'All visits'
34 if extraMetadata is not None:
35 subgroup = extraMetadata + ' ' + subgroup.lower()
36 elif extraSql is not None and extraMetadata is None:
37 subgroup = subgroup + ' ' + extraSql
39 # Open Shutter fraction over whole survey.
40 displayDict = {'group': group, 'subgroup': subgroup, 'order': 0}
41 displayDict['caption'] = 'Total open shutter fraction over %s. ' % subgroup.lower()
42 displayDict['caption'] += 'Does not include downtime due to weather.'
43 metric = metrics.OpenShutterFractionMetric(slewTimeCol=colmap['slewtime'],
44 expTimeCol=colmap['exptime'],
45 visitTimeCol=colmap['visittime'])
46 slicer = slicers.UniSlicer()
47 bundle = mb.MetricBundle(metric, slicer, extraSql, metadata=subgroup,
48 displayDict=displayDict)
49 bundleList.append(bundle)
50 # Count the number of nights on-sky in the survey.
51 displayDict['caption'] = 'Number of nights on the sky during the survey, %s.' % subgroup.lower()
52 metric = metrics.CountUniqueMetric(colmap['night'])
53 slicer = slicers.UniSlicer()
54 bundle = mb.MetricBundle(metric, slicer, extraSql, metadata=subgroup,
55 displayDict=displayDict)
56 bundleList.append(bundle)
57 # Count the number of nights total in the survey (start to finish of observations).
58 displayDict['caption'] = 'Number of nights from start to finish of survey, %s.' % subgroup.lower()
59 metric = metrics.FullRangeMetric(colmap['night'])
60 slicer = slicers.UniSlicer()
61 bundle = mb.MetricBundle(metric, slicer, extraSql, metadata=subgroup,
62 displayDict=displayDict)
63 bundleList.append(bundle)
65 # Open shutter fraction per night.
66 subgroup = 'Per night'
67 if extraMetadata is not None:
68 subgroup = extraMetadata + ' ' + subgroup.lower()
69 elif extraSql is not None and extraMetadata is None:
70 subgroup = subgroup + ' ' + extraSql
71 displayDict = {'group': group, 'subgroup': subgroup, 'order': 0}
72 displayDict['caption'] = 'Open shutter fraction %s.' % (subgroup.lower())
73 displayDict['caption'] += ' This compares on-sky image time against on-sky time + slews + filter ' \
74 'changes + readout, but does not include downtime due to weather.'
75 metric = metrics.OpenShutterFractionMetric(slewTimeCol=colmap['slewtime'],
76 expTimeCol=colmap['exptime'],
77 visitTimeCol=colmap['visittime'])
78 slicer = slicers.OneDSlicer(sliceColName=colmap['night'], binsize=1)
79 bundle = mb.MetricBundle(metric, slicer, extraSql, metadata=subgroup,
80 summaryMetrics=standardSummary(), displayDict=displayDict)
81 bundleList.append(bundle)
83 # Set the runName for all bundles and return the bundleDict.
84 for b in bundleList:
85 b.setRunName(runName)
86 return mb.makeBundlesDictFromList(bundleList)