163 def lsstSimMain(processFunction, outDatasetType, need=(), defaultRoot=
"."):
164 parser = OptionParser()
165 parser.add_option(
"-i",
"--input", dest=
"root",
166 default=defaultRoot, help=
"input root")
167 parser.add_option(
"-o",
"--output", dest=
"outRoot", default=
".",
169 parser.add_option(
"-f",
"--force", action=
"store_true", default=
False,
170 help=
"execute even if output dataset exists")
172 parser.add_option(
"-C",
"--calibRoot", dest=
"calibRoot",
173 help=
"calibration root")
174 parser.add_option(
"-R",
"--registry", help=
"registry")
175 if "skyTile" in need:
176 parser.add_option(
"-t",
"--skyTile", action=
"append", type=
"int",
177 help=
"sky tile numbers (can be repeated)")
179 parser.add_option(
"-v",
"--visit", action=
"append", type=
"int",
180 help=
"visit number (can be repeated)")
182 parser.add_option(
"-S",
"--snap", action=
"append", type=
"int",
183 help=
"snap number (can be repeated)")
184 if "sensor" in need
or "channel" in need:
185 parser.add_option(
"-r",
"--raft", action=
"append",
186 help=
"raft coords (can be repeated)")
187 parser.add_option(
"-s",
"--sensor", action=
"append",
188 help=
"sensor coords (can be repeated)")
189 if "channel" in need:
190 parser.add_option(
"-a",
"--channel", action=
"append",
191 help=
"channel coords (can be repeated)")
192 (options, args) = parser.parse_args()
194 if options.registry
is None:
195 if os.path.exists(os.path.join(options.root,
"registry.sqlite3")):
196 options.registry = os.path.join(options.root,
"registry.sqlite3")
197 elif os.path.exists(
"/lsst/DC3/data/obstest/ImSim/registry.sqlite3"):
198 options.registry =
"/lsst/DC3/data/obstest/ImSim/registry.sqlite3"
200 if os.path.exists(
"/lsst/DC3/data/obstest/ImSim"):
201 options.calibRoot =
"/lsst/DC3/data/obstest/ImSim"
203 root=options.root, calibRoot=options.calibRoot,
204 registry=options.registry))
207 root=options.root, registry=options.registry))
208 inButler = bf.create()
210 root=options.outRoot, registry=options.registry))
211 outButler = obf.create()
213 if "skyTile" in need:
214 if options.skyTile
is None:
215 print >>sys.stderr,
"Running over all sky tiles"
216 options.skyTile = inButler.queryMetadata(
"raw",
"skyTile")
217 elif not hasattr(options.skyTile,
"__iter__"):
218 options.skyTile = [options.skyTile]
219 for skyTile
in options.skyTile:
220 if options.force
or not outButler.datasetExists(outDatasetType,
222 print >>sys.stderr, \
223 "***** Processing skyTile %d" % (skyTile,)
224 processFunction(inButler=inButler, outButler=outButler,
228 if options.visit
is None:
229 print >>sys.stderr,
"Running over all input visits"
230 options.visit = inButler.queryMetadata(
"raw",
"visit")
231 elif not hasattr(options.visit,
"__iter__"):
232 options.visit = [options.visit]
235 if options.snap
is None:
236 print >>sys.stderr,
"Running over all snaps"
237 options.snap = inButler.queryMetadata(
"raw",
"snap")
238 elif not hasattr(options.snap,
"__iter__"):
239 options.snap = [options.snap]
241 setattr(options,
"snap", [0])
243 if "sensor" in need
or "channel" in need:
244 if options.raft
is None:
245 print >>sys.stderr,
"Running over all rafts"
246 options.raft = inButler.queryMetadata(
"raw",
"raft")
247 elif not hasattr(options.raft,
"__iter__"):
248 options.raft = [options.raft]
250 if "sensor" in need
or "channel" in need:
251 if options.sensor
is None:
252 print >>sys.stderr,
"Running over all sensors"
253 options.sensor = inButler.queryMetadata(
"raw",
"sensor")
254 elif not hasattr(options.sensor,
"__iter__"):
255 options.sensor = [options.sensor]
257 if "channel" in need:
258 if options.channel
is None:
259 print >>sys.stderr,
"Running over all channels"
260 options.channel = inButler.queryMetadata(
"raw",
"channel")
261 elif not hasattr(options.channel,
"__iter__"):
262 options.channel = [options.channel]
264 for visit
in options.visit:
265 if "sensor" in need
or "channel" in need:
267 for snap
in options.snap:
268 for raft
in options.raft:
269 for sensor
in options.sensor:
270 if "channel" in need:
271 for channel
in options.channel:
272 if options.force
or \
273 not outButler.datasetExists(
275 visit=visit, snap=snap,
276 raft=raft, sensor=sensor,
278 print >>sys.stderr, \
279 (
"***** Processing " + \
280 "visit %d snap %d raft %s " + \
281 "sensor %s channel %s") % \
282 (visit, snap, raft, sensor,
284 processFunction(inButler=inButler,
286 visit=visit, snap=snap,
287 raft=raft, sensor=sensor,
290 if options.force
or \
291 not outButler.datasetExists(
293 visit=visit, snap=snap,
294 raft=raft, sensor=sensor):
295 print >>sys.stderr, \
296 (
"***** Processing visit %d " + \
297 "snap %d raft %s sensor %s") % \
298 (visit, snap, raft, sensor)
299 processFunction(inButler=inButler,
300 outButler=outButler, visit=visit,
301 snap=snap, raft=raft, sensor=sensor)
303 for raft
in options.raft:
304 for sensor
in options.sensor:
305 if "channel" in need:
306 for channel
in options.channel:
307 if options.force
or \
308 not outButler.datasetExists(
309 outDatasetType, visit=visit,
310 raft=raft, sensor=sensor,
312 print >>sys.stderr, \
313 (
"***** Processing visit %d " + \
314 "raft %s sensor %s channel %s") % \
315 (visit, raft, sensor, channel)
316 processFunction(inButler=inButler,
318 visit=visit, raft=raft,
319 sensor=sensor, channel=channel)
321 if options.force
or \
322 not outButler.datasetExists(outDatasetType,
323 visit=visit, raft=raft,
325 print >>sys.stderr, \
326 (
"***** Processing visit %d " + \
327 "raft %s sensor %s") % \
328 (visit, raft, sensor)
329 processFunction(inButler=inButler,
330 outButler=outButler, visit=visit,
331 raft=raft, sensor=sensor)
333 if options.force
or \
334 not outButler.datasetExists(outDatasetType, visit=visit):
335 print >>sys.stderr,
"***** Processing visit %d" % (visit,)
336 processFunction(inButler=inButler, outButler=outButler,