23 from optparse
import OptionParser
35 from lsst.obs.cfht
import CfhtMapper
39 from lsst.obs.lsstSim
import LsstSimMapper
45 if policyString.startswith(
"#<?cfg "):
47 pol = pexPolicy.Policy.createPolicy(policyString)
49 return sst.runWorker(clip)
51 def cfhtMain(processFunction, outDatasetType, need=(), defaultRoot=
"."):
52 parser = OptionParser()
53 parser.add_option(
"-i",
"--input", dest=
"root",
54 default=defaultRoot, help=
"input root")
55 parser.add_option(
"-o",
"--output", dest=
"outRoot", default=
".",
57 parser.add_option(
"-f",
"--force", action=
"store_true", default=
False,
58 help=
"execute even if output dataset exists")
60 parser.add_option(
"-C",
"--calibRoot", dest=
"calibRoot",
61 help=
"calibration root")
62 parser.add_option(
"-R",
"--registry", help=
"registry")
64 parser.add_option(
"-t",
"--skyTile", action=
"append", type=
"int",
65 help=
"sky tile numbers (can be repeated)")
67 parser.add_option(
"-v",
"--visit", action=
"append", type=
"int",
68 help=
"visit numbers (can be repeated)")
69 if "ccd" in need
or "amp" in need:
70 parser.add_option(
"-c",
"--ccd", action=
"append", type=
"int",
71 help=
"ccd number (can be repeated)")
73 parser.add_option(
"-a",
"--amp", action=
"append", type=
"int",
74 help=
"amp number (can be repeated)")
75 (options, args) = parser.parse_args()
77 if options.registry
is None:
78 if os.path.exists(os.path.join(options.root,
"registry.sqlite3")):
79 options.registry = os.path.join(options.root,
"registry.sqlite3")
80 if options.registry
is None:
81 if os.path.exists(
"/lsst/DC3/data/obstest/CFHTLS/registry.sqlite3"):
82 options.registry =
"/lsst/DC3/data/obstest/CFHTLS/registry.sqlite3"
84 if options.calibRoot
is None:
85 if os.path.exists(
"/lsst/DC3/data/obstest/CFHTLS/calib"):
86 options.calibRoot =
"/lsst/DC3/data/obstest/CFHTLS/calib"
88 root=options.root, calibRoot=options.calibRoot,
89 registry=options.registry))
92 root=options.root, registry=options.registry))
93 inButler = bf.create()
95 root=options.outRoot, registry=options.registry))
96 outButler = obf.create()
99 if options.skyTile
is None:
100 print >>sys.stderr,
"Running over all sky tiles"
101 options.skyTile = inButler.queryMetadata(
"raw",
"skyTile")
102 elif not hasattr(options.skyTile,
"__iter__"):
103 options.skyTile = [options.skyTile]
104 for skyTile
in options.skyTile:
105 if options.force
or not outButler.datasetExists(outDatasetType,
107 print >>sys.stderr, \
108 "***** Processing skyTile %d" % (skyTile,)
109 processFunction(inButler=inButler, outButler=outButler,
113 if options.visit
is None:
114 print >>sys.stderr,
"Running over all input visits"
115 options.visit = inButler.queryMetadata(
"raw",
"visit")
116 elif not hasattr(options.visit,
"__iter__"):
117 options.visit = [options.visit]
118 if "ccd" in need
or "amp" in need:
119 if options.ccd
is None:
120 print >>sys.stderr,
"Running over all CCDs"
121 options.ccd = inButler.queryMetadata(
"raw",
"ccd")
122 elif not hasattr(options.ccd,
"__iter__"):
123 options.ccd = [options.ccd]
125 if options.amp
is None:
126 print >>sys.stderr,
"Running over all amps"
127 options.amp = inButler.queryMetadata(
"raw",
"amp")
128 elif not hasattr(options.amp,
"__iter__"):
129 options.amp = [options.amp]
131 for visit
in options.visit:
132 if "ccd" in need
or "amp" in need:
133 for ccd
in options.ccd:
135 for amp
in options.amp:
136 if options.force
or \
137 not outButler.datasetExists(outDatasetType,
138 visit=visit, ccd=ccd, amp=amp):
139 print >>sys.stderr, \
140 "***** Processing visit %d ccd %d amp %d" % \
142 processFunction(inButler=inButler,
144 visit=visit, ccd=ccd, amp=amp)
146 if options.force
or \
147 not outButler.datasetExists(outDatasetType,
148 visit=visit, ccd=ccd):
149 print >>sys.stderr, \
150 "***** Processing visit %d ccd %d" % \
152 processFunction(inButler=inButler, outButler=outButler,
153 visit=visit, ccd=ccd)
155 if options.force
or \
156 not outButler.datasetExists(outDatasetType, visit=visit):
157 print >>sys.stderr,
"***** Processing visit %d" % (visit,)
158 processFunction(inButler=inButler, outButler=outButler,
162 def lsstSimMain(processFunction, outDatasetType, need=(), defaultRoot=
"."):
163 parser = OptionParser()
164 parser.add_option(
"-i",
"--input", dest=
"root",
165 default=defaultRoot, help=
"input root")
166 parser.add_option(
"-o",
"--output", dest=
"outRoot", default=
".",
168 parser.add_option(
"-f",
"--force", action=
"store_true", default=
False,
169 help=
"execute even if output dataset exists")
171 parser.add_option(
"-C",
"--calibRoot", dest=
"calibRoot",
172 help=
"calibration root")
173 parser.add_option(
"-R",
"--registry", help=
"registry")
174 if "skyTile" in need:
175 parser.add_option(
"-t",
"--skyTile", action=
"append", type=
"int",
176 help=
"sky tile numbers (can be repeated)")
178 parser.add_option(
"-v",
"--visit", action=
"append", type=
"int",
179 help=
"visit number (can be repeated)")
181 parser.add_option(
"-S",
"--snap", action=
"append", type=
"int",
182 help=
"snap number (can be repeated)")
183 if "sensor" in need
or "channel" in need:
184 parser.add_option(
"-r",
"--raft", action=
"append",
185 help=
"raft coords (can be repeated)")
186 parser.add_option(
"-s",
"--sensor", action=
"append",
187 help=
"sensor coords (can be repeated)")
188 if "channel" in need:
189 parser.add_option(
"-a",
"--channel", action=
"append",
190 help=
"channel coords (can be repeated)")
191 (options, args) = parser.parse_args()
193 if options.registry
is None:
194 if os.path.exists(os.path.join(options.root,
"registry.sqlite3")):
195 options.registry = os.path.join(options.root,
"registry.sqlite3")
196 elif os.path.exists(
"/lsst/DC3/data/obstest/ImSim/registry.sqlite3"):
197 options.registry =
"/lsst/DC3/data/obstest/ImSim/registry.sqlite3"
199 if os.path.exists(
"/lsst/DC3/data/obstest/ImSim"):
200 options.calibRoot =
"/lsst/DC3/data/obstest/ImSim"
202 root=options.root, calibRoot=options.calibRoot,
203 registry=options.registry))
206 root=options.root, registry=options.registry))
207 inButler = bf.create()
209 root=options.outRoot, registry=options.registry))
210 outButler = obf.create()
212 if "skyTile" in need:
213 if options.skyTile
is None:
214 print >>sys.stderr,
"Running over all sky tiles"
215 options.skyTile = inButler.queryMetadata(
"raw",
"skyTile")
216 elif not hasattr(options.skyTile,
"__iter__"):
217 options.skyTile = [options.skyTile]
218 for skyTile
in options.skyTile:
219 if options.force
or not outButler.datasetExists(outDatasetType,
221 print >>sys.stderr, \
222 "***** Processing skyTile %d" % (skyTile,)
223 processFunction(inButler=inButler, outButler=outButler,
227 if options.visit
is None:
228 print >>sys.stderr,
"Running over all input visits"
229 options.visit = inButler.queryMetadata(
"raw",
"visit")
230 elif not hasattr(options.visit,
"__iter__"):
231 options.visit = [options.visit]
234 if options.snap
is None:
235 print >>sys.stderr,
"Running over all snaps"
236 options.snap = inButler.queryMetadata(
"raw",
"snap")
237 elif not hasattr(options.snap,
"__iter__"):
238 options.snap = [options.snap]
240 setattr(options,
"snap", [0])
242 if "sensor" in need
or "channel" in need:
243 if options.raft
is None:
244 print >>sys.stderr,
"Running over all rafts"
245 options.raft = inButler.queryMetadata(
"raw",
"raft")
246 elif not hasattr(options.raft,
"__iter__"):
247 options.raft = [options.raft]
249 if "sensor" in need
or "channel" in need:
250 if options.sensor
is None:
251 print >>sys.stderr,
"Running over all sensors"
252 options.sensor = inButler.queryMetadata(
"raw",
"sensor")
253 elif not hasattr(options.sensor,
"__iter__"):
254 options.sensor = [options.sensor]
256 if "channel" in need:
257 if options.channel
is None:
258 print >>sys.stderr,
"Running over all channels"
259 options.channel = inButler.queryMetadata(
"raw",
"channel")
260 elif not hasattr(options.channel,
"__iter__"):
261 options.channel = [options.channel]
263 for visit
in options.visit:
264 if "sensor" in need
or "channel" in need:
266 for snap
in options.snap:
267 for raft
in options.raft:
268 for sensor
in options.sensor:
269 if "channel" in need:
270 for channel
in options.channel:
271 if options.force
or \
272 not outButler.datasetExists(
274 visit=visit, snap=snap,
275 raft=raft, sensor=sensor,
277 print >>sys.stderr, \
278 (
"***** Processing " + \
279 "visit %d snap %d raft %s " + \
280 "sensor %s channel %s") % \
281 (visit, snap, raft, sensor,
283 processFunction(inButler=inButler,
285 visit=visit, snap=snap,
286 raft=raft, sensor=sensor,
289 if options.force
or \
290 not outButler.datasetExists(
292 visit=visit, snap=snap,
293 raft=raft, sensor=sensor):
294 print >>sys.stderr, \
295 (
"***** Processing visit %d " + \
296 "snap %d raft %s sensor %s") % \
297 (visit, snap, raft, sensor)
298 processFunction(inButler=inButler,
299 outButler=outButler, visit=visit,
300 snap=snap, raft=raft, sensor=sensor)
302 for raft
in options.raft:
303 for sensor
in options.sensor:
304 if "channel" in need:
305 for channel
in options.channel:
306 if options.force
or \
307 not outButler.datasetExists(
308 outDatasetType, visit=visit,
309 raft=raft, sensor=sensor,
311 print >>sys.stderr, \
312 (
"***** Processing visit %d " + \
313 "raft %s sensor %s channel %s") % \
314 (visit, raft, sensor, channel)
315 processFunction(inButler=inButler,
317 visit=visit, raft=raft,
318 sensor=sensor, channel=channel)
320 if options.force
or \
321 not outButler.datasetExists(outDatasetType,
322 visit=visit, raft=raft,
324 print >>sys.stderr, \
325 (
"***** Processing visit %d " + \
326 "raft %s sensor %s") % \
327 (visit, raft, sensor)
328 processFunction(inButler=inButler,
329 outButler=outButler, visit=visit,
330 raft=raft, sensor=sensor)
332 if options.force
or \
333 not outButler.datasetExists(outDatasetType, visit=visit):
334 print >>sys.stderr,
"***** Processing visit %d" % (visit,)
335 processFunction(inButler=inButler, outButler=outButler,
338 def cfhtSetup(root, outRoot, registry, calibRoot, inButler, outButler):
340 if calibRoot
is None:
341 if os.path.exists(
"/lsst/DC3/data/obstest/CFHTLS/calib"):
342 calibRoot =
"/lsst/DC3/data/obstest/CFHTLS/calib"
343 if registry
is None and root
is not None:
344 if os.path.exists(os.path.join(root,
"registry.sqlite3")):
345 registry = os.path.join(root,
"registry.sqlite3")
347 root=root, calibRoot=calibRoot, registry=registry))
348 inButler = bf.create()
349 if outButler
is None:
353 root=outRoot, registry=registry))
354 outButler = obf.create()
355 return (inButler, outButler)
358 """Get a dataset from a repository with an optional exception or warning if not found
360 @param[in] butler: data butler
361 @param[in] dataset: name of desired dataset
362 @param[in] dataId: data ID dict
363 @param[in] strict: if True then raise RuntimeError if dataset not found
364 @param[in] warn: if True and strict False then print a warning to stderr if dataset not found
366 @raise RuntimeError if dataset not found and strict true
369 ds = butler.get(dataset, dataId=dataId, immediate=
True)
373 msg =
'{} : Failed to retrieve {} dataset'.
format(dataId, dataset)
375 raise RuntimeError(msg)
377 print >>sys.stderr,
'*** Skipping ' + msg
380 def getPsf(butler, dataset, dataId, strict, warn):
381 """Get the PSF from a repository without reading (very much of) the exposure
383 @param[in] butler: data butler
384 @param[in] dataset: name of desired dataset
385 @param[in] dataId: data ID dict of exposure containing desired PSF
386 @param[in] strict: if True then raise RuntimeError if psf not found
387 @param[in] warn: if True and strict False then print a warning to stderr if psf not found
389 @raise RuntimeError if exposure not found (regardless of strict)
390 @raise RuntimeError if exposure has no PSF and strict true
394 tinyExposure = butler.get(dataset +
"_sub", dataId=dataId, bbox=tinyBBox, imageOrigin=
"LOCAL", immediate=
True)
395 psf = tinyExposure.getPsf()
397 msg =
'%s : %s exposure had no PSF' % (dataId, dataset)
400 raise RuntimeError(msg)
402 print >>sys.stderr,
'*** Skipping ' + msg
405 def lsstSimSetup(root, outRoot, registry, calibRoot, inButler, outButler):
407 if calibRoot
is None:
408 if os.path.exists(
"/lsst/DC3/data/obstest/ImSim"):
409 calibRoot =
"/lsst/DC3/data/obstest/ImSim"
410 if registry
is None and root
is not None:
411 if os.path.exists(os.path.join(root,
"registry.sqlite3")):
412 registry = os.path.join(root,
"registry.sqlite3")
414 root=root, calibRoot=calibRoot, registry=registry))
415 inButler = bf.create()
416 if outButler
is None:
420 root=outRoot, registry=registry))
421 outButler = obf.create()
422 return (inButler, outButler)
An integer coordinate rectangle.
a representation of a string containing Policy parameter data