Hide keyboard shortcuts

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 

8 

9__all__ = ['openshutterFractions'] 

10 

11 

12def openshutterFractions(colmap=None, runName='opsim', extraSql=None, extraMetadata=None): 

13 """Evaluate open shutter fraction over whole survey and per night. 

14 

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 = [] 

30 

31 group = 'Open Shutter Fraction' 

32 

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 

38 

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) 

64 

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) 

82 

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)