Coverage for python/lsst/sims/maf/batches/filterchangeBatch.py : 8%

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
1import lsst.sims.maf.metrics as metrics
2import lsst.sims.maf.slicers as slicers
3import lsst.sims.maf.metricBundles as mb
4from .colMapDict import ColMapDict
5from .common import standardSummary
7__all__ = ['filtersPerNight', 'filtersWholeSurvey']
10def setupMetrics(colmap, wholesurvey=False):
11 metricList = []
12 captionList = []
13 # Number of filter changes (per slice - either whole survey or X nights)
14 if wholesurvey:
15 metricList.append(metrics.NChangesMetric(col=colmap['filter'], orderBy=colmap['mjd'],
16 metricName='Total Filter Changes'))
17 else:
18 metricList.append(metrics.NChangesMetric(col=colmap['filter'], orderBy=colmap['mjd'],
19 metricName='Filter Changes'))
20 captionList.append('Total filter changes ')
21 # Minimum time between filter changes
22 metricList.append(metrics.MinTimeBetweenStatesMetric(changeCol=colmap['filter'], timeCol=colmap['mjd']))
23 captionList.append('Minimum time between filter changes ')
24 # Number of filter changes faster than 10 minutes
25 metricList.append(metrics.NStateChangesFasterThanMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'],
26 cutoff=10))
27 captionList.append('Number of filter changes faster than 10 minutes ')
28 # Number of filter changes faster than 20 minutes
29 metricList.append(metrics.NStateChangesFasterThanMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'],
30 cutoff=20))
31 captionList.append('Number of filter changes faster than 20 minutes ')
32 # Maximum number of filter changes faster than 10 minutes within slice
33 metricList.append(metrics.MaxStateChangesWithinMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'],
34 timespan=10))
35 captionList.append('Max number of filter changes within a window of 10 minutes ')
36 # Maximum number of filter changes faster than 20 minutes within slice
37 metricList.append(metrics.MaxStateChangesWithinMetric(changeCol=colmap['filter'], timeCol=colmap['mjd'],
38 timespan=20))
39 captionList.append('Max number of filter changes within a window of 20 minutes ')
40 return metricList, captionList
43def filtersPerNight(colmap=None, runName='opsim', nights=1, extraSql=None, extraMetadata=None):
44 """Generate a set of metrics measuring the number and rate of filter changes over a given span of nights.
46 Parameters
47 ----------
48 colmap : dict, opt
49 A dictionary with a mapping of column names. Default will use OpsimV4 column names.
50 run_name : str, opt
51 The name of the simulated survey. Default is "opsim".
52 nights : int, opt
53 Size of night bin to use when calculating metrics. Default is 1.
54 extraSql : str, opt
55 Additional constraint to add to any sql constraints (e.g. 'propId=1' or 'fieldID=522').
56 Default None, for no additional constraints.
57 extraMetadata : str, opt
58 Additional metadata to add before any below (i.e. "WFD"). Default is None.
60 Returns
61 -------
62 metricBundleDict
63 """
65 if colmap is None:
66 colmap = ColMapDict('opsimV4')
67 bundleList = []
69 # Set up sql and metadata, if passed any additional information.
70 sql = ''
71 metadata = 'Per'
72 if nights == 1:
73 metadata += ' Night'
74 else:
75 metadata += ' %s Nights' % nights
76 metacaption = metadata.lower()
77 if (extraSql is not None) and (len(extraSql) > 0):
78 sql = extraSql
79 if extraMetadata is None:
80 metadata += ' %s' % extraSql
81 metacaption += ', with %s selection' % extraSql
82 if extraMetadata is not None:
83 metadata += ' %s' % extraMetadata
84 metacaption += ', %s only' % extraMetadata
85 metacaption += '.'
87 displayDict = {'group': 'Filter Changes', 'subgroup': metadata}
88 summaryStats = standardSummary()
90 slicer = slicers.OneDSlicer(sliceColName=colmap['night'], binsize=nights)
91 metricList, captionList = setupMetrics(colmap)
92 for m, caption in zip(metricList, captionList):
93 displayDict['caption'] = caption + metacaption
94 bundle = mb.MetricBundle(m, slicer, sql, runName=runName, metadata=metadata,
95 displayDict=displayDict,
96 summaryMetrics=summaryStats)
97 bundleList.append(bundle)
99 for b in bundleList:
100 b.setRunName(runName)
101 return mb.makeBundlesDictFromList(bundleList)
104def filtersWholeSurvey(colmap=None, runName='opsim', extraSql=None, extraMetadata=None):
105 """Generate a set of metrics measuring the number and rate of filter changes over the entire survey.
107 Parameters
108 ----------
109 colmap : dict, opt
110 A dictionary with a mapping of column names. Default will use OpsimV4 column names.
111 run_name : str, opt
112 The name of the simulated survey. Default is "opsim".
113 extraSql : str, opt
114 Additional constraint to add to any sql constraints (e.g. 'propId=1' or 'fieldID=522').
115 Default None, for no additional constraints.
116 extraMetadata : str, opt
117 Additional metadata to add before any below (i.e. "WFD"). Default is None.
119 Returns
120 -------
121 metricBundleDict
122 """
123 if colmap is None:
124 colmap = ColMapDict('opsimV4')
125 bundleList = []
127 # Set up sql and metadata, if passed any additional information.
128 sql = ''
129 metadata = 'Whole Survey'
130 metacaption = 'over the whole survey'
131 if (extraSql is not None) and (len(extraSql) > 0):
132 sql = extraSql
133 if extraMetadata is None:
134 metadata += ' %s' % extraSql
135 metacaption += ', with %s selction' % extraSql
136 if extraMetadata is not None:
137 metadata += ' %s' % extraMetadata
138 metacaption += ', %s only' % (extraMetadata)
139 metacaption += '.'
141 displayDict = {'group': 'Filter Changes', 'subgroup': metadata}
143 slicer = slicers.UniSlicer()
144 metricList, captionList = setupMetrics(colmap)
145 for m, caption in zip(metricList, captionList):
146 displayDict['caption'] = caption + metacaption
147 bundle = mb.MetricBundle(m, slicer, sql, runName=runName, metadata=metadata,
148 displayDict=displayDict)
149 bundleList.append(bundle)
151 for b in bundleList:
152 b.setRunName(runName)
153 return mb.makeBundlesDictFromList(bundleList)