LSSTApplications  8.0.0.0+107,8.0.0.1+13,9.1+18,9.2,master-g084aeec0a4,master-g0aced2eed8+6,master-g15627eb03c,master-g28afc54ef9,master-g3391ba5ea0,master-g3d0fb8ae5f,master-g4432ae2e89+36,master-g5c3c32f3ec+17,master-g60f1e072bb+1,master-g6a3ac32d1b,master-g76a88a4307+1,master-g7bce1f4e06+57,master-g8ff4092549+31,master-g98e65bf68e,master-ga6b77976b1+53,master-gae20e2b580+3,master-gb584cd3397+53,master-gc5448b162b+1,master-gc54cf9771d,master-gc69578ece6+1,master-gcbf758c456+22,master-gcec1da163f+63,master-gcf15f11bcc,master-gd167108223,master-gf44c96c709
LSSTDataManagementBasePackage
Utils.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 #
4 # LSST Data Management System
5 # Copyright 2008, 2009, 2010 LSST Corporation.
6 #
7 # This product includes software developed by the
8 # LSST Project (http://www.lsst.org/).
9 #
10 # This program is free software: you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation, either version 3 of the License, or
13 # (at your option) any later version.
14 #
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the LSST License Statement and
21 # the GNU General Public License along with this program. If not,
22 # see <http://www.lsstcorp.org/LegalNotices/>.
23 #
24 
25 # -*- python -*-
26 
27 import lsst.daf.base
28 import lsst.pex.logging
30 
31 def createAdditionalData(stage, stagePolicy, clipboard):
32  """
33  Extract additionalData values, as specified by policy, from the clipboard.
34  Also create predefined keys for runId, sliceId, and universeSize.
35  This routine no longer performs slice-to-CCD mappings as of DC3a.
36  Instead, they are now performed in the SliceInfoStage.
37  """
38 
39  additionalData = lsst.daf.base.PropertySet()
40  # Parse array of "key=clipboard-key" or
41  # "key=clipboard-key.dataproperty-key" mappings
42  if stagePolicy.exists('parameters.additionalData'):
43  dataPairs = stagePolicy.getStringArray('parameters.additionalData')
44  for pair in dataPairs:
45  (rename, name) = pair.split("=")
46  if name.find(".") != -1:
47  (clipKey, psKey) = name.split(".", 1)
48  cprops = clipboard.get(clipKey)
49  if cprops is None:
50  raise RuntimeError, \
51  "Expected data not found on clipboard: "+ clipKey
52  if isinstance(cprops, dict):
53  additionalData.set(rename, cprops[psKey])
54  elif isinstance(cprops, lsst.daf.base.PropertySet):
55  additionalData.copy(rename, cprops, psKey)
56  else:
57  raise RuntimeError, \
58  "Unknown data type (not dict or PropertySet) found on clipboard: "+ clipKey
59  else:
60  cprops = clipboard.get(name)
61  if cprops is None:
62  raise RuntimeError, \
63  "Expected data not found on clipboard: "+ name
64  additionalData.set(rename, clipboard.get(name))
65  lsst.pex.logging.Trace("pex.harness.Utils.createAdditionalData", 3, \
66  "AdditionalData item: " + pair)
67 
68  # Add the predefined runId, sliceId, and universeSize keys
69 
70  additionalData.set('runId', stage.getRun())
71  additionalData.setInt('sliceId', stage.getRank())
72  additionalData.setInt('universeSize', stage.getUniverseSize())
73 
74  lsst.pex.logging.Trace("pex.harness.Utils.createAdditionalData", 3, \
75  "additionalData:\n" + additionalData.toString(False))
76 
77  return additionalData
78 
79 def propertySetToDict(propertySet):
80  """
81  Convert a PropertySet to a Python dictionary.
82  """
83  dict = {}
84  for i in propertySet.names():
85  dict[i] = propertySet.get(i)
86  return dict
limited backward compatibility to the DC2 run-time trace facilities
Definition: Trace.h:93
Class for storing generic metadata.
Definition: PropertySet.h:82