CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Private Attributes
SpecificationBuilder_cfi.Specification Class Reference
Inheritance diagram for SpecificationBuilder_cfi.Specification:

Public Member Functions

def __deepcopy__ (self, memo)
 
def __init__ (self, conf=DefaultConf)
 
def groupBy (self, cols, mode="SUM")
 
def pythonTypeName (self)
 
def reduce (self, sort)
 
def save (self, nbins=-1, xmin=0, xmax=0)
 
def saveAll (self)
 

Public Attributes

 conf
 
 spec
 

Private Attributes

 _activeColumns
 
 _lastColumns
 
 _lastMode
 
 _state
 
 _x
 
 _y
 
 _z
 

Detailed Description

Definition at line 60 of file SpecificationBuilder_cfi.py.

Constructor & Destructor Documentation

◆ __init__()

def SpecificationBuilder_cfi.Specification.__init__ (   self,
  conf = DefaultConf 
)

Definition at line 61 of file SpecificationBuilder_cfi.py.

61  def __init__(self, conf = DefaultConf):
62  super(Specification, self).__init__()
63  # these are the steps passed down to C++. Will be filled later.
64  self.spec = cms.VPSet()
65  # this is currently only an additional enable flag. Might add topFolder or
66  # range there in the future.
67  self.conf = conf
68 
69  # these are onlly used during construction.
70  self._activeColumns = set()
71  self._state = FIRST
72 

Member Function Documentation

◆ __deepcopy__()

def SpecificationBuilder_cfi.Specification.__deepcopy__ (   self,
  memo 
)

Definition at line 73 of file SpecificationBuilder_cfi.py.

73  def __deepcopy__(self, memo):
74  # override deepcopy to not copy .conf: it should remain a reference
75  # w/o this it is not cleanly possible to build a per-module switch.
76  t = Specification(self.conf)
77  t.spec = deepcopy(self.spec, memo)
78  return t
79 

References CondFormats_MFObjects::dictionary.conf, SpecificationBuilder_cfi.Specification.conf, cms::Filter.spec, and SpecificationBuilder_cfi.Specification.spec.

◆ groupBy()

def SpecificationBuilder_cfi.Specification.groupBy (   self,
  cols,
  mode = "SUM" 
)

Definition at line 80 of file SpecificationBuilder_cfi.py.

80  def groupBy(self, cols, mode = "SUM"):
81  cnames = list(filter(len, val(cols).split("/"))) # omit empty items
82  newstate = self._state
83 
84  # The behaviour of groupBy depends a lot on when it happens:
85  # - The first (or second, if there is per-event counting) are very special
86  # - others in STAGE1 have to be EXTEND, and they will be translated into a
87  # list of exactly 3 USE/EXTEND steps (one per dimension).
88  # - in STAGE2 they are just passed down to C++.
89 
90  if self._state == FIRST:
91  cname = cnames
92  if mode != "SUM":
93  raise Exception("First grouping must be SUM")
94  if "Event" in cnames:
95  cnames.remove("Event"); # per-Event grouping is done automatically
96  t = COUNT
97  mode = "COUNT"
98  newstate = FIRST
99  else:
100  t = GROUPBY
101  newstate = STAGE1
102 
103  if self._state == STAGE1:
104  cname = self._activeColumns.difference(cnames)
105  if len(cname) != 1:
106  raise Exception("EXTEND must drop exactly one column.")
107 
108  if mode == "EXTEND_X":
109  self._x.type = EXTEND_X
110  self._x.columns = cms.vstring(cname)
111  elif mode == "EXTEND_Y":
112  self._y.type = EXTEND_Y
113  self._y.columns = cms.vstring(cname)
114  else:
115  raise Exception("Only EXTEND_X or EXTEND_Y allowed here, not " + mode)
116 
117  # remove the column in the FIRST groupBy, we always re-extract in step1.
118  c = list(cname)[0]
119  for s in self.spec:
120  if s.stage == FIRST and s.type == GROUPBY and c in s.columns:
121  s.columns.remove(c)
122  if c in self._activeColumns:
123  self._activeColumns.remove(c)
124  if c in self._lastColumns:
125  self._lastColumns.remove(c)
126 
127  return self # done here, no new step to add
128 
129  if self._state == STAGE2:
130  cname = cnames
131  if self._activeColumns.issubset(cname):
132  raise Exception("Harvesting GROUPBY must drop some columns")
133  if mode == "EXTEND_X":
134  t = EXTEND_X
135  elif mode == "SUM":
136  t = GROUPBY
137  else:
138  raise Exception("Currently only EXTEND_X and SUM supported in harvesting, not " + mode)
139 
140  self._activeColumns = set(cnames)
141  self._lastColumns = cnames
142  self._lastMode = mode
143 
144  self.spec.append(cms.PSet(
145  type = t,
146  stage = self._state,
147  columns = cms.vstring(cname),
148  arg = cms.string(mode),
149  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
150  ))
151 
152  # In the very beginning emit standard column assignments, they will be
153  # changed later (above and in save()) to reflect the EXTENDS given above.
154  if newstate == STAGE1 and self._state == FIRST:
155  self._x = cms.PSet(
156  type = USE_X, stage = STAGE1,
157  columns = cms.vstring(),
158  arg = cms.string(""),
159  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
160  )
161  self.spec.append(self._x)
162  self._y = cms.PSet(
163  type = USE_Y, stage = STAGE1,
164  columns = cms.vstring(),
165  arg = cms.string(""),
166  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
167  )
168  self.spec.append(self._y)
169  self._z = cms.PSet(
170  type = USE_Z, stage = STAGE1,
171  columns = cms.vstring(),
172  arg = cms.string(""),
173  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
174  )
175  self.spec.append(self._z)
176 
177  self._state = newstate
178 
179  return self
180 

References SpecificationBuilder_cfi.Specification._activeColumns, SpecificationBuilder_cfi.Specification._lastColumns, hcaldqm::flag::Flag._state, SpecificationBuilder_cfi.Specification._state, PGeometricDet::Item._x, SpecificationBuilder_cfi.Specification._x, PGeometricDet::Item._y, SpecificationBuilder_cfi.Specification._y, ALCARECOTkAlBeamHalo_cff.filter, list(), MatrixUtil.remove(), cms::Filter.spec, SpecificationBuilder_cfi.Specification.spec, cms::dd.split(), and SpecificationBuilder_cfi.val().

Referenced by SpecificationBuilder_cfi.Specification.saveAll().

◆ pythonTypeName()

def SpecificationBuilder_cfi.Specification.pythonTypeName (   self)

Definition at line 265 of file SpecificationBuilder_cfi.py.

265  def pythonTypeName(self):
266  return 'cms.PSet';

Referenced by Mixins._ParameterTypeBase.dumpPython(), Mixins._ValidatingParameterListBase.dumpPython(), and Types.PSet.dumpPython().

◆ reduce()

def SpecificationBuilder_cfi.Specification.reduce (   self,
  sort 
)

Definition at line 181 of file SpecificationBuilder_cfi.py.

181  def reduce(self, sort):
182  # reduce can be MEAN or COUNT. in STAGE2, just pass through.
183  # in STAGE1, MEAN (anywhere) means make a PROFILE
184  # COUNT can mean per-event counting or a occupancy plot, which is acheived
185  # by ignoring the values passed to fill() (like dimensions=0, TODO).
186  if self._state == FIRST:
187  if sort != "COUNT":
188  raise Exception("First statement must be groupBy.")
189  self.spec[0].type = COUNT # this is actually a noop
190  # groupBy already saw the "Event" column and set up counting.
191 
192  return self
193 
194  if self._state == STAGE1:
195  if sort == "MEAN":
196  self.spec.append(cms.PSet(
197  type = PROFILE, stage = STAGE1,
198  columns = cms.vstring(), arg = cms.string(""),
199  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
200  ))
201  return self
202 
203  if sort != "MEAN":
204  raise Exception("Harvesting allows only reduce(MEAN) at the moment, not " + sort)
205 
206  self.spec.append(cms.PSet(
207  type = REDUCE,
208  stage = self._state,
209  columns = cms.vstring(),
210  arg = cms.string(sort),
211  nbins = cms.int32(-1), xmin = cms.int32(0), xmax = cms.int32(0)
212  ))
213  return self
214 

References hcaldqm::flag::Flag._state, SpecificationBuilder_cfi.Specification._state, mps_setup.append, cms::Filter.spec, and SpecificationBuilder_cfi.Specification.spec.

◆ save()

def SpecificationBuilder_cfi.Specification.save (   self,
  nbins = -1,
  xmin = 0,
  xmax = 0 
)

Definition at line 215 of file SpecificationBuilder_cfi.py.

215  def save(self, nbins=-1, xmin=0, xmax=0):
216  if self._state == FIRST:
217  raise Exception("First statement must be groupBy.")
218 
219  if self._state == STAGE1:
220  # end of STAGE1, fix the parameter assignments
221  n = 1
222  if self._x.type == USE_X:
223  self._x.arg = cms.string(str(n))
224  n = n+1
225  self._x.nbins = cms.int32(nbins)
226  self._x.xmin = cms.int32(xmin)
227  self._x.xmax = cms.int32(xmax)
228  if self._y.type == USE_Y:
229  self._y.arg = cms.string(str(n))
230  n = n+1
231  self._y.nbins = cms.int32(nbins)
232  self._y.xmin = cms.int32(xmin)
233  self._y.xmax = cms.int32(xmax)
234  if self._z.type == USE_Z:
235  self._z.arg = cms.string(str(n))
236  n = n+1
237  self._z.nbins = cms.int32(nbins)
238  self._z.xmin = cms.int32(xmin)
239  self._z.xmax = cms.int32(xmax)
240  # we don't know how many parameters the user wants to pass here, but the
241  # HistogramManager knows. So we just add 3.
242 
243  # SAVE is implicit in step1 and ignored in harvesting, so not really needed.
244  # self.spec.append(cms.PSet(
245  # type = SAVE,
246  # stage = self._state,
247  # columns = cms.vstring(),
248  # arg = cms.string(""),
249  # ))
250  self._state = STAGE2
251 
252  return self
253 

References hcaldqm::flag::Flag._state, SpecificationBuilder_cfi.Specification._state, PGeometricDet::Item._x, SpecificationBuilder_cfi.Specification._x, PGeometricDet::Item._y, SpecificationBuilder_cfi.Specification._y, PGeometricDet::Item._z, SpecificationBuilder_cfi.Specification._z, and str.

Referenced by SpecificationBuilder_cfi.Specification.saveAll().

◆ saveAll()

def SpecificationBuilder_cfi.Specification.saveAll (   self)

Definition at line 254 of file SpecificationBuilder_cfi.py.

254  def saveAll(self):
255  # call groupBy() and save() until all colums are consumed.
256  self.save()
257  columns = self._lastColumns
258  for i in range(len(columns)-1, 0, -1):
259  cols = columns[0:i]
260  self.groupBy("/".join(cols), self._lastMode)
261  self.save()
262  return self
263 

References SpecificationBuilder_cfi.Specification._lastColumns, SpecificationBuilder_cfi.Specification._lastMode, SpecificationBuilder_cfi.Specification.groupBy(), cond::persistency::Query< Types >.groupBy(), join(), FastTimerService_cff.range, l1t::WriterProxy.save(), l1t::WriterProxyT< Record, Type >.save(), PiecewiseScalingPolynomial.save(), HBHENegativeEFilter.save(), HBHEChannelGroups.save(), HcalIndexLookup.save(), TrackerMap.save(), OOTPileupCorrData.save(), SpecificationBuilder_cfi.Specification.save(), and svgfig.SVG.save().

Member Data Documentation

◆ _activeColumns

SpecificationBuilder_cfi.Specification._activeColumns
private

◆ _lastColumns

SpecificationBuilder_cfi.Specification._lastColumns
private

◆ _lastMode

SpecificationBuilder_cfi.Specification._lastMode
private

◆ _state

SpecificationBuilder_cfi.Specification._state
private

◆ _x

SpecificationBuilder_cfi.Specification._x
private

◆ _y

SpecificationBuilder_cfi.Specification._y
private

◆ _z

SpecificationBuilder_cfi.Specification._z
private

◆ conf

SpecificationBuilder_cfi.Specification.conf

◆ spec

SpecificationBuilder_cfi.Specification.spec
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
join
static std::string join(char **cmd)
Definition: RemoteFile.cc:17
cms::dd::split
std::vector< std::string_view > split(std::string_view, const char *)
SpecificationBuilder_cfi.val
def val(maybecms)
Definition: SpecificationBuilder_cfi.py:32
str
#define str(s)
Definition: TestProcessor.cc:48
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
Exception
mps_setup.append
append
Definition: mps_setup.py:85
MatrixUtil.remove
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:212
list
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*", "!HLTx*" if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL. It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of "!*" before the partial wildcard feature was incorporated). Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
cuy.save
save
Definition: cuy.py:1165