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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

from __future__ import with_statement 

from builtins import zip 

import numpy as np 

import os 

import json 

 

from lsst.utils import getPackageDir 

from lsst.sims.catalogs.db import fileDBObject 

from lsst.sims.utils import _galacticFromEquatorial 

 

__all__ = ["createFakeOpSimDB", "createFakeCatSimDB"] 

 

 

def createFakeOpSimDB(file_name, pointing_list): 

""" 

Creates a fake OpSim database (i.e. a sqlite database with a Summary 

table that has the same schema as OpSim). 

 

file_name will be the name of the file created. 

pointing_list is a list of (ra, dec) positions at which to point. 

 

Will output a list of (MJD, RA, Dec, filter) corresponding to the 

observations contained. 

""" 

 

26 ↛ 27line 26 didn't jump to line 27, because the condition on line 26 was never true if os.path.exists(file_name): 

os.unlink(file_name) 

 

output_list = [] 

 

rng = np.random.RandomState(119) 

bandpass_list = np.array(['g', 'r', 'i']) 

n_obs = 5 

 

scratch_dir = os.path.join(getPackageDir('sims_alertsim'), 

'tests', 'scratch') 

 

scratch_file_name = os.path.join(scratch_dir, '%s.dat' % file_name) 

 

40 ↛ 41line 40 didn't jump to line 41, because the condition on line 40 was never true if os.path.exists(scratch_file_name): 

os.unlink(scratch_file_name) 

 

obshistid = 0 

with open(scratch_file_name, 'w') as output_file: 

output_file.write('# mjd ra dec filter\n') 

for i_p, pointing in enumerate(pointing_list): 

ra = np.radians(pointing[0]) 

dec = np.radians(pointing[1]) 

mjd_list = rng.random_sample(n_obs)*3653.0 + 59580.0 

 

bandpass_dex_list = rng.random_integers(0, 2, n_obs) 

for mjd, bandpass in zip(mjd_list, bandpass_list[bandpass_dex_list]): 

night = int(round(mjd-59580.0)) 

obshistid += 1 

output_file.write('%.6f %.6f %.6f %s 23.0 0.7 %d %d %d\n' % 

(mjd, ra, dec, bandpass, i_p, night, obshistid)) 

output_list.append((mjd, ra, dec, bandpass)) 

 

dtype = np.dtype([('expMJD', float), ('fieldRA', float), ('fieldDec', float), 

('filter', str, 1), ('fiveSigmaDepth', float), ('rawSeeing', float), 

('fieldID', int), ('night', int), ('obsHistID', int)]) 

 

fileDBObject(scratch_file_name, runtable='Summary', database=file_name, 

dtype=dtype, delimiter=' ', idColKey='expMJD') 

 

os.unlink(scratch_file_name) 

 

return output_list 

 

 

def createFakeCatSimDB(file_name, pointing_list, n_obj=3, radius=0.1): 

""" 

Creates a sqlite database with a CatSim-like schema. 

The database will be populated with a handful of RRLyrae for alertsim testing. 

 

file_name is the name of the file to be created 

pointing_list is a list of (ra, dec) tuples corresponding to the pointings to be populated 

n_obj is the number of objects to put in each pointing 

radius is the radius (in degrees) over which to scatter the objects 

 

will return a numpy recarray containing all of the fields for all of the simulated objects 

""" 

 

scratch_dir = os.path.join(getPackageDir('sims_alertsim'), 'tests', 'scratch') 

sed_dir = os.path.join(getPackageDir('sims_sed_library'), 'starSED', 'kurucz') 

sed_list = np.array(os.listdir(sed_dir)) 

 

lc_subdir = os.path.join('rrly_lc', 'RRab') 

lc_dir = os.path.join(getPackageDir('sims_sed_library'), lc_subdir) 

lc_list = np.array(os.listdir(lc_dir)) 

 

92 ↛ 93line 92 didn't jump to line 93, because the condition on line 92 was never true if os.path.exists(file_name): 

os.unlink(file_name) 

 

rng = np.random.RandomState(771) 

 

dtype = np.dtype([('id', int), ('ra', float), ('decl', float), 

('sedFilename', str, 100), ('magNorm', float), 

('ebv', float), ('varParamStr', str, 256), 

('parallax', float), ('mura', float), ('mudecl', float), 

('vrad', float), ('galacticAv', float), ('gal_l', float), 

('gal_b', float)]) 

 

scratch_file_name = os.path.join(scratch_dir, '%s.dat' % file_name) 

105 ↛ 106line 105 didn't jump to line 106, because the condition on line 105 was never true if os.path.exists(scratch_file_name): 

os.unlink(scratch_file_name) 

 

ct = 1 

with open(scratch_file_name, 'w') as output_file: 

output_file.write("# a header\n") 

for pointing in pointing_list: 

rr = rng.random_sample(n_obj)*radius 

theta = rng.random_sample(n_obj)*2.0*np.pi 

ra_list = pointing[0] + rr*np.cos(theta) 

dec_list = pointing[1] + rr*np.sin(theta) 

sed_dex_list = rng.random_integers(0, len(sed_list)-1, n_obj) 

ebv_list = 0.1 + rng.random_sample(n_obj)*0.5 

lc_dex_list = rng.random_integers(0, len(lc_list)-1, n_obj) 

magnorm_list = rng.random_sample(n_obj)*5.0+15.0 

gal_l_list, gal_b_list = _galacticFromEquatorial(np.radians(ra_list), 

np.radians(dec_list)) 

 

for ra, dec, magnorm, sed, ebv, lc, gal_l, gal_b in \ 

zip(ra_list, dec_list, magnorm_list, sed_list[sed_dex_list], 

ebv_list, lc_list[lc_dex_list], gal_l_list, gal_b_list): 

 

varParamDict = {'varMethodName': 'applyRRly', 

'pars': {'filename': os.path.join(lc_subdir, lc), 

'tStartMjd': 59579.0}} 

 

varParamStr = json.dumps(varParamDict) 

 

output_file.write("%d;%.6f;%.6f;%s;%.6f;%.6f;%s;0.0;0.0;0.0;0.0;0.1;%.6f;%.6f\n" % 

(ct, ra, dec, sed, magnorm, ebv, varParamStr, gal_l, gal_b)) 

 

ct += 1 

 

fileDBObject(scratch_file_name, runtable='test', database=file_name, 

dtype=dtype, delimiter=';', idColKey='id') 

 

output = np.genfromtxt(scratch_file_name, dtype=dtype, delimiter=';') 

assert len(output) == ct-1 

 

144 ↛ 147line 144 didn't jump to line 147, because the condition on line 144 was never false if os.path.exists(scratch_file_name): 

os.unlink(scratch_file_name) 

 

return output