CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
Functions | Variables
cmsswSequenceInfo Namespace Reference

Functions

def formatsequenceinfo
 
def getplugininfo
 
def inspectsequence
 
def inspectworkflows
 
def processseqs
 
def serve
 
def storesequenceinfo
 
def storeworkflows
 

Variables

tuple args = parser.parse_args()
 
string BLACKLIST = '^(TriggerResults|.*_step|DQMoutput|siPixelDigis)$'
 
 DBFILE = None
 
string DBSCHEMA
 
string INFILE = "/store/data/Run2018A/EGamma/RAW/v1/000/315/489/00000/004D960A-EA4C-E811-A908-FA163ED1F481.root"
 
tuple parser = argparse.ArgumentParser(description='Collect information about DQM sequences.')
 
list RELEVANTSTEPS = []
 
tuple seq = Sequence(args.sequence, args.step, args.era, args.scenario, args.mc, args.data, args.fast)
 
string SEQFIELDS = ","
 
string SEQPLACEHOLDER = ","
 
tuple seqs = inspectworkflows(args.workflow)
 
tuple seqset = set(sum(seqs.values(), []))
 
tuple Sequence = namedtuple("Sequence", ["seqname", "step", "era", "scenario", "mc", "data", "fast"])
 
tuple stp = ThreadPool()
 
tuple tp = ThreadPool()
 

Function Documentation

def cmsswSequenceInfo.formatsequenceinfo (   modconfig,
  modclass,
  plugininfo,
  showlabel,
  showclass,
  showtype,
  showconfig 
)

Definition at line 137 of file cmsswSequenceInfo.py.

References edm.decode(), join(), and print().

138 def formatsequenceinfo(modconfig, modclass, plugininfo, showlabel, showclass, showtype, showconfig):
139  # printing for command-line use.
140  out = []
141  for label in modclass.keys():
142  row = []
143  if showlabel:
144  row.append(label)
145  if showclass:
146  row.append(modclass[label])
147  if showtype:
148  row.append("::".join(plugininfo[modclass[label]]))
149  if showconfig:
150  row.append(modconfig[label].decode())
151  out.append(tuple(row))
152  for row in sorted(set(out)):
153  print("\t".join(row))
154 
155 # DB schema for the HTML based browser. The Sequence members are kept variable
# to make adding new fields easy.
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
bool decode(bool &, std::string const &)
Definition: types.cc:71
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def cmsswSequenceInfo.getplugininfo (   pluginname)

Definition at line 125 of file cmsswSequenceInfo.py.

References edm.decode().

126 def getplugininfo(pluginname):
127  plugindump = subprocess.check_output(["edmPluginHelp", "-p", pluginname])
128  line = plugindump.splitlines()[0].decode()
129  # we care only about the edm base class for now.
130  pluginre = re.compile(".* " + pluginname + ".*[(]((\w+)::)?(\w+)[)]")
131  m = pluginre.match(line)
132  if not m:
133  # this should never happen, but sometimes the Tracer does report things that are not actually plugins.
134  return (pluginname, ("", ""))
135  else:
136  return (pluginname, (m.group(2), m.group(3)))
bool decode(bool &, std::string const &)
Definition: types.cc:71
def cmsswSequenceInfo.inspectsequence (   seq)

Definition at line 34 of file cmsswSequenceInfo.py.

References edm.decode().

Referenced by processseqs().

34 
35 def inspectsequence(seq):
36  sep = ":"
37  if not seq.seqname:
38  sep = ""
39 
40  wd = tempfile.mkdtemp()
41 
42  # Provide a fake GDB to prevent it from running if cmsRun crashes. It would not hurt to have it run but it takes forever.
43  with open(wd + "/gdb", "w"):
44  pass
45  os.chmod(wd + "/gdb", 0o700)
46  env = os.environ.copy()
47  env["PATH"] = wd + ":" + env["PATH"]
48 
49  # run cmsdriver
50  driverargs = [
51  "cmsDriver.py",
52  "step3",
53  "--conditions", "auto:run2_data", # conditions is mandatory, but should not affect the result.
54  "-s", seq.step+sep+seq.seqname, # running only DQM seems to be not possible, so also load a single module for RAW2DIGI
55  "--process", "DUMMY",
56  "--mc" if seq.mc else "", "--data" if seq.data else "", "--fast" if seq.fast else "", # random switches
57  "--era" if seq.era else "", seq.era, # era is important as it trigger e.g. switching phase0/pahse1/phase2
58  "--eventcontent", "DQM", "--scenario" if seq.scenario else "", seq.scenario, # sceanario should affect which DQMOffline_*_cff.py is loaded
59  "--datatier", "DQMIO", # more random switches,
60  "--customise_commands", 'process.Tracer = cms.Service("Tracer")', # the tracer will tell us which modules actually run
61  "--filein", INFILE, "-n", "0", # load an input file, but do not process any events -- it would fail anyways.
62  "--python_filename", "cmssw_cfg.py", "--no_exec"
63  ]
64  # filter out empty args
65  driverargs = [x for x in driverargs if x]
66  subprocess.check_call(driverargs, cwd=wd, stdout=2) # 2: STDERR
67 
68  # run cmsRun to get module list
69  proc = subprocess.Popen(["cmsRun", "cmssw_cfg.py"], stderr=subprocess.STDOUT, stdout=subprocess.PIPE, cwd=wd, env=env)
70  tracedump, _ = proc.communicate()
71  # for HARVESTING, the code in endJob makes most jobs crash. But that is fine,
72  # we have the data we need by then.
73  if proc.returncode and seq.step not in ("HARVESTING", "ALCAHARVEST"):
74  raise Exception("cmsRun failed for cmsDriver command %s" % driverargs)
75 
76  lines = tracedump.splitlines()
77  labelre = re.compile(b"[+]+ starting: constructing module with label '(\w+)'")
78  blacklistre = re.compile(BLACKLIST)
79  modules = []
80  for line in lines:
81  m = labelre.match(line)
82  if m:
83  label = m.group(1).decode()
84  if blacklistre.match(label):
85  continue
86  modules.append(label)
87 
88  modules = set(modules)
89 
90  # run edmConfigDump to get module config
91  configdump = subprocess.check_output(["edmConfigDump", "cmssw_cfg.py"], cwd=wd)
92  lines = configdump.splitlines()
93  modulere = re.compile(b'process[.](.*) = cms.ED.*\("(.*)",')
94 
95  # collect the config blocks out of the config dump.
96  modclass = dict()
97  modconfig = dict()
98  inconfig = None
99  for line in lines:
100  if inconfig:
101  modconfig[inconfig] += b'\n' + line
102  if line == b')':
103  inconfig = None
104  continue
105 
106  m = modulere.match(line)
107  if m:
108  label = m.group(1).decode()
109  plugin = m.group(2).decode()
110  if label in modules:
111  modclass[label] = plugin
112  modconfig[label] = line
113  inconfig = label
114 
115  # run edmPluginHelp to get module properties
116  plugininfo = tp.map(getplugininfo, modclass.values())
117 
118  # clean up the temp dir in the end.
119  shutil.rmtree(wd)
120 
121  return modconfig, modclass, dict(plugininfo)
122 
123 # using a cache here to avoid running the (rather slow) edmPluginHelp multiple
124 # times for the same module (e.g. across different wf).
@functools.lru_cache(maxsize=None)
bool decode(bool &, std::string const &)
Definition: types.cc:71
def cmsswSequenceInfo.inspectworkflows (   wfnumber)

Definition at line 210 of file cmsswSequenceInfo.py.

References bitset_utilities.append(), edm.decode(), Sequence, submitPVValidationJobs.split(), and str.

211 def inspectworkflows(wfnumber):
212  # here, we run runTheMatrix and then parse the cmsDriver command lines.
213  # Not very complicated, but a bit of work.
214 
215  # Collect the workflow number where we detected each sequence here, so we can
216  # put this data into the DB later.
217  sequences = defaultdict(list)
218 
219  if wfnumber:
220  stepdump = subprocess.check_output(["runTheMatrix.py", "-l", str(wfnumber), "-ne"])
221  else:
222  stepdump = subprocess.check_output(["runTheMatrix.py", "-ne"])
223 
224  lines = stepdump.splitlines()
225  workflow = ""
226  workflowre = re.compile(b"^([0-9]+.[0-9]+) ")
227  for line in lines:
228  # if it is a workflow header: save the number.
229  m = workflowre.match(line)
230  if m:
231  workflow = m.group(1).decode()
232  continue
233 
234  # else, we only care about cmsDriver commands.
235  if not b'cmsDriver.py' in line: continue
236 
237  args = list(reversed(line.decode().split(" ")))
238  step = ""
239  scenario = ""
240  era = ""
241  mc = False
242  data = False
243  fast = False
244  while args:
245  item = args.pop()
246  if item == '-s':
247  step = args.pop()
248  if item == '--scenario':
249  scenario = args.pop()
250  if item == '--era':
251  era = args.pop()
252  if item == '--data':
253  data = True
254  if item == '--mc':
255  mc = True
256  if item == '--fast':
257  fast = True
258  steps = step.split(",")
259  for step in steps:
260  s = step.split(":")[0]
261  if s in RELEVANTSTEPS:
262  # Special case for the default sequence, which is noted as "STEP", not "STEP:".
263  if ":" in step:
264  seqs = step.split(":")[1]
265  for seq in seqs.split("+"):
266  sequences[workflow].append(Sequence(seq, s, era, scenario, mc, data, fast))
267  else:
268  sequences[workflow].append(Sequence("", s, era, scenario, mc, data, fast))
269  return sequences
boost::dynamic_bitset append(const boost::dynamic_bitset<> &bs1, const boost::dynamic_bitset<> &bs2)
this method takes two bitsets bs1 and bs2 and returns result of bs2 appended to the end of bs1 ...
bool decode(bool &, std::string const &)
Definition: types.cc:71
#define str(s)
def cmsswSequenceInfo.processseqs (   seqs)

Definition at line 270 of file cmsswSequenceInfo.py.

References inspectsequence(), print(), and storesequenceinfo().

271 def processseqs(seqs):
272  # launch one map_async per element to get finer grain tasks
273  tasks = [stp.map_async(lambda seq: (seq, inspectsequence(seq)), [seq]) for seq in seqs]
274 
275  # then watch te progress and write to DB as results become available.
276  # That way all the DB access is single-threaded but in parallel with the analysis.
277  while tasks:
278  time.sleep(1)
279  running = []
280  done = []
281  for t in tasks:
282  if t.ready():
283  done.append(t)
284  else:
285  running.append(t)
286  for t in done:
287  if not t.successful():
288  print("Task failed.")
289  for it in t.get(): # should only be one
290  seq, res = it
291  storesequenceinfo(seq, *res)
292  tasks = running
293 
294 
# A small HTML UI built around http.server. No dependencies!
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
def cmsswSequenceInfo.serve ( )

Definition at line 295 of file cmsswSequenceInfo.py.

References bitset_utilities.append(), alcaDQMUpload.encode(), cms::cuda.func, join(), print(), and Sequence.

296 def serve():
297  import traceback
298  import http.server
299 
300  db = sqlite3.connect(DBFILE)
301 
302  def formatseq(seq):
303  return (seq.step + ":" + seq.seqname + " " + seq.era + " " + seq.scenario
304  + (" --mc" if seq.mc else "") + (" --data" if seq.data else "")
305  + (" --fast" if seq.fast else ""))
306 
307  def index():
308  out = []
309  cur = db.cursor()
310  out.append("<H2>Sequences</H2><ul>")
311  out.append("""<p> A sequence name, given as <em>STEP:@sequencename</em> here, does not uniquely identify a sequence.
312  The modules on the sequence might depend on other cmsDriver options, such as Era, Scenario, Data vs. MC, etc.
313  This tool lists parameter combinations that were observed. However, sequences with identical contents are grouped
314  on this page. The default sequence, used when no explicit sequence is apssed to cmsDriver, is noted as <em>STEP:</em>.</p>""")
315  rows = cur.execute(f"SELECT seqname, step, count(*) FROM sequence GROUP BY seqname, step ORDER BY seqname, step;")
316  for row in rows:
317  seqname, step, count = row
318  out.append(f' <li>')
319  out += showseq(step, seqname)
320  out.append(f' </li>')
321  out.append("</ul>")
322 
323  out.append("<H2>Modules</H2><ul>")
324  rows = cur.execute(f"SELECT classname, edmfamily, edmbase FROM plugin ORDER BY edmfamily, edmbase, classname")
325  for row in rows:
326  classname, edmfamily, edmbase = row
327  if not edmfamily: edmfamily = "<em>legacy</em>"
328  out.append(f' <li>{edmfamily}::{edmbase} <a href="/plugin/{classname}/">{classname}</a></li>')
329  out.append("</ul>")
330  return out
331 
332  def showseq(step, seqname):
333  # display set of sequences sharing a name, also used on the index page.
334  out = []
335  cur = db.cursor()
336  out.append(f' <a href="/seq/{step}:{seqname}/">{step}:{seqname}</a>')
337  # this is much more complicated than it should be since we don't keep
338  # track which sequences have equal contents in the DB. So the deduplication
339  # has to happen in Python code.
340  rows = cur.execute(f"SELECT {SEQFIELDS}, moduleid, id FROM sequence INNER JOIN sequencemodule ON sequenceid = id WHERE seqname = ? and step = ?;", (seqname, step))
341 
342  seqs = defaultdict(list)
343  ids = dict()
344  for row in rows:
345  seq = Sequence(*row[:-2])
346  seqs[seq].append(row[-2])
347  ids[seq] = row[-1]
348 
349  variations = defaultdict(list)
350  for seq, mods in seqs.items():
351  variations[tuple(sorted(mods))].append(seq)
352 
353  out.append(" <ul>")
354  for mods, seqs in variations.items():
355  count = len(mods)
356  out.append(f' <li>({count} modules):')
357  for seq in seqs:
358  seqid = ids[seq]
359  out.append(f'<br><a href="/seqid/{seqid}">' + formatseq(seq) + '</a>')
360  # This query in a loop is rather slow, but this got complictated enough, so YOLO.
361  rows = cur.execute("SELECT wfid FROM workflow WHERE sequenceid = ?;", (seqid,))
362  out.append(f'<em>Used on workflows: ' + ", ".join(wfid for wfid, in rows) + "</em>")
363  out.append(' </li>')
364  out.append(" </ul>")
365  return out
366 
367  def showseqid(seqid):
368  # display a single, unique sequence.
369  seqid = int(seqid)
370  out = []
371  cur = db.cursor()
372  rows = cur.execute(f"SELECT {SEQFIELDS} FROM sequence WHERE id = ?;", (seqid,))
373  seq = formatseq(Sequence(*list(rows)[0]))
374  out.append(f"<h2>Modules on {seq}:</h2><ul>")
375  rows = cur.execute("SELECT wfid FROM workflow WHERE sequenceid = ?;", (seqid,))
376  out.append("<p><em>Used on workflows: " + ", ".join(wfid for wfid, in rows) + "</em></p>")
377  rows = cur.execute("""
378  SELECT classname, instancename, variation, moduleid
379  FROM sequencemodule INNER JOIN module ON moduleid = module.id
380  WHERE sequenceid = ?;""", (seqid,))
381  for row in rows:
382  classname, instancename, variation, moduleid = row
383  out.append(f'<li>{instancename} ' + (f'<sub>{variation}</sub>' if variation else '') + f' : <a href="/plugin/{classname}/">{classname}</a></li>')
384  out.append("</ul>")
385 
386  return out
387 
388  def showclass(classname):
389  # display all known instances of a class and where they are used.
390  # this suffers a bit from the fact that fully identifying a sequence is
391  # rather hard, we just show step/name here.
392  out = []
393  out.append(f"<h2>Plugin {classname}</h2>")
394  cur = db.cursor()
395  # First, info about the class iself.
396  rows = cur.execute("SELECT edmfamily, edmbase FROM plugin WHERE classname = ?;", (classname,))
397  edmfamily, edmbase = list(rows)[0]
398  islegcay = not edmfamily
399  if islegcay: edmfamily = "<em>legacy</em>"
400  out.append(f"<p>{classname} is a <b>{edmfamily}::{edmbase}</b>.</p>")
401  out.append("""<p>A module with a given label can have different configuration depending on options such as Era,
402  Scenario, Data vs. MC etc. If multiple configurations for the same name were found, they are listed separately
403  here and denoted using subscripts.</p>""")
404  if (edmbase != "EDProducer" and not (islegcay and edmbase == "EDAnalyzer")) or (islegcay and edmbase == "EDProducer"):
405  out.append(f"<p>This is not a DQM module.</p>")
406 
407  # then, its instances.
408  rows = cur.execute("""
409  SELECT module.id, instancename, variation, sequenceid, step, seqname
410  FROM module INNER JOIN sequencemodule ON moduleid = module.id INNER JOIN sequence ON sequence.id == sequenceid
411  WHERE classname = ? ORDER BY instancename, variation, step, seqname;""", (classname,))
412  out.append("<ul>")
413  seqsformod = defaultdict(list)
414  liformod = dict()
415  for row in rows:
416  id, instancename, variation, sequenceid, step, seqname = row
417  liformod[id] = f'<a href="/config/{id}">{instancename}' + (f"<sub>{variation}</sub>" if variation else '') + "</a>"
418  seqsformod[id].append((sequenceid, f"{step}:{seqname}"))
419  for id, li in liformod.items():
420  out.append("<li>" + li + ' Used here: ' + ", ".join(f'<a href="/seqid/{seqid}">{name}</a>' for seqid, name in seqsformod[id]) + '.</li>')
421  out.append("</ul>")
422  return out
423 
424  def showconfig(modid):
425  # finally, just dump the config of a specific module. Useful to do "diff" on it.
426  modid = int(modid)
427  out = []
428  cur = db.cursor()
429  rows = cur.execute(f"SELECT config FROM module WHERE id = ?;", (modid,))
430  config = list(rows)[0][0]
431  out.append("<pre>")
432  out.append(config.decode())
433  out.append("</pre>")
434  return out
435 
436  ROUTES = [
437  (re.compile('/$'), index),
438  (re.compile('/seq/(\w+):([@\w]*)/$'), showseq),
439  (re.compile('/seqid/(\d+)$'), showseqid),
440  (re.compile('/config/(\d+)$'), showconfig),
441  (re.compile('/plugin/(.*)/$'), showclass),
442  ]
443 
444  # the server boilerplate.
445  class Handler(http.server.SimpleHTTPRequestHandler):
446  def do_GET(self):
447  try:
448  res = None
449  for pattern, func in ROUTES:
450  m = pattern.match(self.path)
451  if m:
452  res = "\n".join(func(*m.groups())).encode("utf8")
453  break
454 
455  if res:
456  self.send_response(200, "Here you go")
457  self.send_header("Content-Type", "text/html; charset=utf-8")
458  self.end_headers()
459  self.wfile.write(b"""<html><style>
460  body {
461  font-family: sans;
462  }
463  </style><body>""")
464  self.wfile.write(res)
465  self.wfile.write(b"</body></html>")
466  else:
467  self.send_response(400, "Something went wrong")
468  self.send_header("Content-Type", "text/plain; charset=utf-8")
469  self.end_headers()
470  self.wfile.write(b"I don't understand this request.")
471  except:
472  trace = traceback.format_exc()
473  self.send_response(500, "Things went very wrong")
474  self.send_header("Content-Type", "text/plain; charset=utf-8")
475  self.end_headers()
476  self.wfile.write(trace.encode("utf8"))
477 
478  server_address = ('', 8000)
479  httpd = http.server.HTTPServer(server_address, Handler)
480  print("Serving at http://localhost:8000/ ...")
481  httpd.serve_forever()
482 
boost::dynamic_bitset append(const boost::dynamic_bitset<> &bs1, const boost::dynamic_bitset<> &bs2)
this method takes two bitsets bs1 and bs2 and returns result of bs2 appended to the end of bs1 ...
uint32_t T const *__restrict__ uint32_t const *__restrict__ int32_t int Histo::index_type cudaStream_t Func __host__ __device__ V int Func func
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
static std::string join(char **cmd)
Definition: RemoteFile.cc:19
def cmsswSequenceInfo.storesequenceinfo (   seq,
  modconfig,
  modclass,
  plugininfo 
)

Definition at line 171 of file cmsswSequenceInfo.py.

Referenced by processseqs().

172 def storesequenceinfo(seq, modconfig, modclass, plugininfo):
173  with sqlite3.connect(DBFILE) as db:
174  cur = db.cursor()
175  cur.executescript(DBSCHEMA)
176  # first, check if we already have that one. Ideally we'd check before doing all the work, but then the lru cache will take care of that on a different level.
177  seqid = list(cur.execute(f"SELECT id FROM sequence WHERE ({SEQFIELDS}) = ({SEQPLACEHOLDER});", (seq)))
178  if seqid:
179  return
180 
181  cur.execute("BEGIN;")
182  # dump everything into a temp table first...
183  cur.execute("CREATE TEMP TABLE newmodules(instancename, classname, config);")
184  cur.executemany("INSERT INTO newmodules VALUES (?, ?, ?)", ((label, modclass[label], modconfig[label]) for label in modconfig))
185  # ... then deduplicate and version the configs in plain SQL.
186  cur.execute("""
187  INSERT OR IGNORE INTO module(classname, instancename, variation, config)
188  SELECT classname, instancename,
189  (SELECT count(*) FROM module AS existing WHERE existing.instancename = newmodules.instancename),
190  config FROM newmodules;
191  """)
192 
193  # the plugin base is rather easy.
194  cur.executemany("INSERT OR IGNORE INTO plugin VALUES (?, ?, ?);", ((plugin, edm[0], edm[1]) for plugin, edm in plugininfo.items()))
195  # for the sequence we first insert, then query for the ID, then insert the modules into the relation table.
196  cur.execute(f"INSERT OR FAIL INTO sequence({SEQFIELDS}) VALUES({SEQPLACEHOLDER});", (seq))
197  seqid = list(cur.execute(f"SELECT id FROM sequence WHERE ({SEQFIELDS}) = ({SEQPLACEHOLDER});", (seq)))
198  seqid = seqid[0][0]
199  cur.executemany("INSERT INTO sequencemodule SELECT id, ? FROM module WHERE config = ?;", ((seqid, modconfig[label]) for label in modconfig))
200  cur.execute("COMMIT;")
def cmsswSequenceInfo.storeworkflows (   seqs)

Definition at line 201 of file cmsswSequenceInfo.py.

202 def storeworkflows(seqs):
203  with sqlite3.connect(DBFILE) as db:
204  cur = db.cursor()
205  cur.execute("BEGIN;")
206  cur.executescript(DBSCHEMA)
207  pairs = [[wf] + list(seq) for wf, seqlist in seqs.items() for seq in seqlist]
208  cur.executemany(f"INSERT OR IGNORE INTO workflow SELECT ?, (SELECT id FROM sequence WHERE ({SEQFIELDS}) = ({SEQPLACEHOLDER}));", pairs)
209  cur.execute("COMMIT;")

Variable Documentation

tuple cmsswSequenceInfo.args = parser.parse_args()

Definition at line 509 of file cmsswSequenceInfo.py.

string cmsswSequenceInfo.BLACKLIST = '^(TriggerResults|.*_step|DQMoutput|siPixelDigis)$'

Definition at line 28 of file cmsswSequenceInfo.py.

cmsswSequenceInfo.DBFILE = None

Definition at line 22 of file cmsswSequenceInfo.py.

string cmsswSequenceInfo.DBSCHEMA
Initial value:
1 = f"""
2  CREATE TABLE IF NOT EXISTS plugin(classname, edmfamily, edmbase);
3  CREATE UNIQUE INDEX IF NOT EXISTS plugins ON plugin(classname);
4  CREATE TABLE IF NOT EXISTS module(id INTEGER PRIMARY KEY, classname, instancename, variation, config);
5  CREATE UNIQUE INDEX IF NOT EXISTS modules ON module(instancename, variation);
6  CREATE UNIQUE INDEX IF NOT EXISTS configs ON module(config);
7  CREATE TABLE IF NOT EXISTS sequence(id INTEGER PRIMARY KEY, {SEQFIELDS});
8  CREATE UNIQUE INDEX IF NOT EXISTS squences ON sequence({SEQFIELDS});
9  CREATE TABLE IF NOT EXISTS workflow(wfid, sequenceid);
10  CREATE UNIQUE INDEX IF NOT EXISTS wrokflows ON workflow(sequenceid, wfid);
11  CREATE TABLE IF NOT EXISTS sequencemodule(moduleid, sequenceid);
12 """

Definition at line 158 of file cmsswSequenceInfo.py.

cmsswSequenceInfo.INFILE = "/store/data/Run2018A/EGamma/RAW/v1/000/315/489/00000/004D960A-EA4C-E811-A908-FA163ED1F481.root"

Definition at line 25 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.parser = argparse.ArgumentParser(description='Collect information about DQM sequences.')

Definition at line 486 of file cmsswSequenceInfo.py.

list cmsswSequenceInfo.RELEVANTSTEPS = []

Definition at line 31 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.seq = Sequence(args.sequence, args.step, args.era, args.scenario, args.mc, args.data, args.fast)

Definition at line 536 of file cmsswSequenceInfo.py.

Referenced by OuterTrackerMonitorTTTrack.analyze(), CircleEq< T >.compute(), TrackQuality.featureTransform(), EcalCondDBInterface.fetchLMFLastRun(), popcon::EcalSRPHandler.getNewObjects(), LMFRunIOV.getParameters(), LMFCorrCoefDatComponent.getSequence(), LMFCorrCoefDat.getSequence(), SimplePointingConstraint.makeValue(), SmartPointingConstraint.makeValue(), CTPPSRPAlignmentCorrectionsDataESSourceXMLCommon.Merge(), and LMFRunIOV.setSequence().

string cmsswSequenceInfo.SEQFIELDS = ","

Definition at line 156 of file cmsswSequenceInfo.py.

string cmsswSequenceInfo.SEQPLACEHOLDER = ","

Definition at line 157 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.seqs = inspectworkflows(args.workflow)

Definition at line 523 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.seqset = set(sum(seqs.values(), []))

Definition at line 524 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.Sequence = namedtuple("Sequence", ["seqname", "step", "era", "scenario", "mc", "data", "fast"])

Definition at line 14 of file cmsswSequenceInfo.py.

Referenced by inspectworkflows(), serve(), Config.TestModuleCommand.testContains(), Config.TestModuleCommand.testDelete(), Config.TestModuleCommand.testGlobalReplace(), Modules.TestModules.testIsTaskComponent(), Config.TestModuleCommand.testProcessDumpPython(), Config.TestModuleCommand.testProcessExtend(), Config.TestModuleCommand.testPrune(), Config.TestModuleCommand.testSchedule(), Config.TestModuleCommand.testSequence(), Config.TestModuleCommand.testSequence2(), Modules.TestModules.testSequences(), Config.TestModuleCommand.testSwitchProducer(), and Config.TestModuleCommand.testTask().

tuple cmsswSequenceInfo.stp = ThreadPool()

Definition at line 18 of file cmsswSequenceInfo.py.

tuple cmsswSequenceInfo.tp = ThreadPool()

Definition at line 17 of file cmsswSequenceInfo.py.

Referenced by EcalEBTrigPrimAnalyzer.analyze(), EcalSRCondTools.analyze(), ValidationMisalignedTracker.analyze(), EcalTPGAnalyzer.analyze(), GlobalMuonMatchAnalyzer.analyze(), EcalTrigPrimAnalyzer.analyze(), TPGCheck.analyze(), EcalSimRawData.analyze(), CaloParticleDebugger.analyze(), TkConvValidator.analyze(), TestTrackHits.analyze(), PhotonValidator.analyze(), OverlapProblemTPAnalyzer.analyze(), PFAnalysis.analyze(), l1tVertexFinder::VertexNTupler.analyze(), MuonTrackValidator.analyze(), TrackGenAssociatorByChi2Impl.associateGenToReco(), TrackGenAssociatorByChi2Impl.associateRecoToGen(), TrackAssociatorByChi2Impl.associateRecoToSim(), TrackAssociatorByChi2Impl.associateSimToReco(), trklet::TrackletCalculatorBase.barrelSeeding(), TrackingParticleNumberOfLayers.calculate(), calculateVertexSharedTracks(), tmtt::L1track3D.cheat(), CastorCORData.check(), HcalHTRData.check(), tauImpactParameter::ParticleBuilder.createLorentzVectorParticle(), gen::TauolappInterface.decay(), tmtt::DigitalTrack.DigitalTrack(), V0Validator.doFakeRates(), MultiTrackValidatorGenPs.dqmAnalyze(), MultiTrackValidator.dqmAnalyze(), L1TStage2CaloLayer1.dqmAnalyze(), MTVHistoProducerAlgoForTracker.fill_recoAssociated_simTrack_histos(), tmtt::Histos.fillInputData(), EcalElectronicsMapper.fillMaps(), TrackingNtuple.fillSimHits(), tmtt::Histos.fillTrackFitting(), TrackingNtuple.fillTrackingParticles(), magfieldparam::rz_harm_poly.FillTrigArr(), tmtt::DupFitTrkKiller.filterAlg1(), tmtt::DupFitTrkKiller.filterAlg2(), getDaughters(), DTTrigGeom.getGeom(), Primary4DVertexValidation.getMatchedTP(), DTDeadFlagHandler.getNewObjects(), TauSpinnerCMS.GetRecoDaughters(), HFShowerLibrary.getRecord(), EcalSimRawData.getTp(), l1tVertexFinder::InputData.InputData(), TTClusterAssociationMap< T >.isGenuine(), main(), l1t::stage2::CaloLayer1Packer.makeECalTPGs(), l1t::stage2::CaloLayer1Packer.makeHCalTPGs(), l1t::stage2::CaloLayer1Packer.makeHFTPGs(), tmtt::Utility.matchingTP(), PrimaryVertexAnalyzer4PUSlimmed.matchRecoTrack2SimSignal(), Primary4DVertexValidation.matchRecoTrack2SimSignal(), PrimitiveSelection.merge(), tmtt::L1fittedTrack.numKilledMatchedStubs(), TSCBLBuilderWithPropagator.operator()(), edm.operator<<(), operator==(), SiStripTrackerMapCreator.paintTkMapFromHistogram(), Phase1L1TJetProducer.prepareInputsIntoRegions(), tmtt::DupFitTrkKiller.printDuplicateTracks(), tmtt::KFbase.printStub(), PrimitiveSelection.process(), PFAnalysis.processTrackingParticles(), TrackingParticleRefMuonProducer.produce(), TrackingParticleConversionRefSelector.produce(), MCTrackMatcher.produce(), TrackMCQuality.produce(), TrackingParticleSelectorByGen.produce(), TPStubValueMapProducer.produce(), MuonMCClassifier.produce(), MuonSimClassifier.produce(), EcalUncalibRecHitRecAnalFitAlgo< EBDataFrame >.pulseShapeFunction(), EcalRecHitWorkerRecover.run(), EcalEBTrigPrimTestAlgo.run(), HcalTriggerPrimitiveAlgo.runFEFormatError(), HcalTriggerPrimitiveAlgo.runZS(), btagbtvdeep.seedingTracksToFeatures(), EcalDeadCellTriggerPrimitiveFilter.setEvtTPstatus(), ecaldqm::CalibrationSummaryClient.setParams(), RecoTracktoTP.SetTrackingParticle(), TPtoRecoTrack.SetTrackingParticle(), trklet::Tracklet.stubtruthmatch(), EcalTrigPrimCompactColl.toEcalTrigPrimDigiCollection(), MultiTrackValidator.tpDR(), MultiTrackValidator.tpParametersAndSelection(), trklet::Tracklet.tpseed(), and BPHDecayVertex.tTracks().