CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
validateTopLevelParameterSets.cc
Go to the documentation of this file.
2 
4 
8 
10 
11 #include <sstream>
12 #include <vector>
13 #include <string>
14 
15 namespace edm {
16 
17  // NOTE: The defaults given here are not actually used when running cmsRun
18  // Those come from hard coded values in the Python code in Config.py
19  // The defaults here are used when running the edmPluginHelp utility so
20  // it is important the defaults in both places are consistent.
21 
23  description.addUntracked<unsigned int>("numberOfThreads", s_defaultNumberOfThreads)
24  ->setComment("If zero, let TBB use its default which is normally the number of CPUs on the machine");
25  description.addUntracked<unsigned int>("numberOfStreams", 0)
26  ->setComment(
27  "If zero, then set the number of streams to be the same as the number of "
28  "Threads (except always 1 if there is a looper)");
29  description.addUntracked<unsigned int>("numberOfConcurrentLuminosityBlocks", 0)
30  ->setComment(
31  "If zero, use Framework default (currently 2 when the number of streams >= 2, otherwise 1). "
32  "In all cases, the number of concurrent luminosity blocks will be reset to "
33  "be the same as the number of streams if it is greater than the "
34  "numbers of streams.");
35  description.addUntracked<unsigned int>("numberOfConcurrentRuns", 1);
36 
37  edm::ParameterSetDescription eventSetupDescription;
38  eventSetupDescription.addUntracked<unsigned int>("numberOfConcurrentIOVs", 0)
39  ->setComment(
40  "If zero, use the Framework default which currently means the same as the "
41  "number of concurrent luminosity blocks. Can be overridden by a hard coded "
42  "static in a record C++ definition or by forceNumberOfConcurrentIOVs. "
43  "In all cases, the number of concurrent IOVs will be reset to be the "
44  "same as the number of concurrent luminosity blocks if greater than the "
45  "number of concurrent luminosity blocks.");
46  edm::ParameterSetDescription nestedDescription;
47  nestedDescription.addWildcardUntracked<unsigned int>("*")->setComment(
48  "Parameter names should be record names and the values are the number of concurrent IOVS for each record."
49  " Overrides all other methods of setting number of concurrent IOVs.");
50  eventSetupDescription.addUntracked<edm::ParameterSetDescription>("forceNumberOfConcurrentIOVs", nestedDescription);
51  description.addUntracked<edm::ParameterSetDescription>("eventSetup", eventSetupDescription);
52 
53  description.addUntracked<std::vector<std::string>>("accelerators", {"*"})
54  ->setComment(
55  "Specify the set of compute accelerator(s) the job is allowed to use. The values can contain the direct "
56  "names of accelerators supported by the ProcessAccelerators defined in the configuration, or patterns "
57  "matching to them (patterns use '*' and '?' wildcards similar to shell). The actual set of accelerators to "
58  "be used is determined on the worker node based on the available hardware. A CPU fallback with the name "
59  "'cpu' is always included in the set of available accelerators. If no accelerator matching to the patterns "
60  "are available on the worker node, the job is terminated with a specific error code. Same happens if an "
61  "empty value is given in the configuration. Default value is pattern '*', which implies use of any "
62  "supported and available hardware (including the CPU fallback).");
63  description.addUntracked<bool>("wantSummary", false)
64  ->setComment("Set true to print a report on the trigger decisions and timing of modules");
65  description.addUntracked<std::string>("fileMode", "FULLMERGE")
66  ->setComment("Legal values are 'NOMERGE' and 'FULLMERGE'");
67  description.addUntracked<bool>("forceEventSetupCacheClearOnNewRun", false);
68  description.addUntracked<bool>("throwIfIllegalParameter", true)
69  ->setComment("Set false to disable exception throws when configuration validation detects illegal parameters");
70  description.addUntracked<bool>("printDependencies", false)->setComment("Print data dependencies between modules");
71  description.addUntracked<bool>("deleteNonConsumedUnscheduledModules", true)
72  ->setComment(
73  "Delete modules that are unscheduled, i.e. only in Tasks, whose products are not consumed by any other "
74  "otherwise-running module");
75 
76  // No default for this one because the parameter value is
77  // actually used in the main function in cmsRun.cpp before
78  // the parameter set is validated here.
79  description.addOptionalUntracked<unsigned int>("sizeOfStackForThreadsInKB");
80 
81  std::vector<std::string> emptyVector;
82 
83  description.addUntracked<std::vector<std::string>>("Rethrow", emptyVector);
84  description.addUntracked<std::vector<std::string>>("SkipEvent", emptyVector);
85  description.addUntracked<std::vector<std::string>>("FailPath", emptyVector);
86  description.addUntracked<std::vector<std::string>>("IgnoreCompletely", emptyVector);
87 
88  description.addUntracked<std::vector<std::string>>("canDeleteEarly", emptyVector)
89  ->setComment("Branch names of products that the Framework can try to delete before the end of the Event");
90 
91  description.addUntracked<bool>("dumpOptions", false)
92  ->setComment(
93  "Print values of selected Framework parameters. The Framework might modify the values "
94  "in the options parameter set and this prints the values after that modification.");
95 
96  description.addOptionalUntracked<bool>("allowUnscheduled")
97  ->setComment(
98  "Obsolete. Has no effect. Allowed only for backward compatibility for old Python configuration files.");
99  description.addOptionalUntracked<std::string>("emptyRunLumiMode")
100  ->setComment(
101  "Obsolete. Has no effect. Allowed only for backward compatibility for old Python configuration files.");
102  description.addOptionalUntracked<bool>("makeTriggerResults")
103  ->setComment(
104  "Obsolete. Has no effect. Allowed only for backward compatibility for old Python configuration files.");
105  }
106 
108  description.addUntracked<int>("input", -1)->setComment("Default of -1 implies no limit.");
109 
110  ParameterSetDescription nestedDescription;
111  nestedDescription.addWildcardUntracked<int>("*");
112  description.addOptionalNode(ParameterDescription<int>("output", false) xor
113  ParameterDescription<ParameterSetDescription>("output", nestedDescription, false),
114  false);
115  }
116 
118  description.addUntracked<int>("input", -1)->setComment("Default of -1 implies no limit.");
119  }
120 
122  description.addUntracked<int>("input", -1)->setComment("Default of -1 implies no limit.");
123  }
124 
125  void validateTopLevelParameterSets(ParameterSet* processParameterSet) {
126  std::string processName = processParameterSet->getParameter<std::string>("@process_name");
127 
128  std::vector<std::string> psetNames{"options", "maxEvents", "maxLuminosityBlocks", "maxSecondsUntilRampdown"};
129 
130  for (auto const& psetName : psetNames) {
131  bool isTracked{false};
132  ParameterSet* pset = processParameterSet->getPSetForUpdate(psetName, isTracked);
133  if (pset == nullptr) {
134  ParameterSet emptyPset;
135  processParameterSet->addUntrackedParameter<ParameterSet>(psetName, emptyPset);
136  pset = processParameterSet->getPSetForUpdate(psetName, isTracked);
137  }
138  if (isTracked) {
139  throw Exception(errors::Configuration) << "In the configuration the top level parameter set named \'"
140  << psetName << "\' in process \'" << processName << "\' is tracked.\n"
141  << "It must be untracked";
142  }
143 
145  if (psetName == "options") {
146  fillOptionsDescription(description);
147  } else if (psetName == "maxEvents") {
148  fillMaxEventsDescription(description);
149  } else if (psetName == "maxLuminosityBlocks") {
151  } else if (psetName == "maxSecondsUntilRampdown") {
153  }
154 
155  try {
156  description.validate(*pset);
157  } catch (cms::Exception& ex) {
158  std::ostringstream ost;
159  ost << "Validating top level \'" << psetName << "\' ParameterSet for process \'" << processName << "\'";
160  ex.addContext(ost.str());
161  throw;
162  }
163  }
164  }
165 
166  void dumpOptionsToLogFile(unsigned int nThreads,
167  unsigned int nStreams,
168  unsigned int nConcurrentLumis,
169  unsigned int nConcurrentRuns) {
170  LogAbsolute("Options") << "Number of Threads = " << nThreads << "\nNumber of Streams = " << nStreams
171  << "\nNumber of Concurrent Lumis = " << nConcurrentLumis
172  << "\nNumber of Concurrent Runs = " << nConcurrentRuns;
173  }
174 } // namespace edm
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void validate(ParameterSet &pset) const
ParameterWildcardBase * addWildcardUntracked(U const &pattern)
void validateTopLevelParameterSets(ParameterSet *processParameterSet)
void fillOptionsDescription(ParameterSetDescription &description)
void fillMaxEventsDescription(ParameterSetDescription &description)
ParameterDescriptionNode * addOptionalNode(ParameterDescriptionNode const &node, bool writeToCfi)
constexpr unsigned int s_defaultNumberOfThreads
Definition: ThreadsInfo.h:9
void fillMaxLuminosityBlocksDescription(ParameterSetDescription &description)
void addUntrackedParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:192
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
void addContext(std::string const &context)
Definition: Exception.cc:165
void fillMaxSecondsUntilRampdownDescription(ParameterSetDescription &description)
Log< level::System, true > LogAbsolute
ParameterDescriptionBase * addOptionalUntracked(U const &iLabel, T const &value)
void dumpOptionsToLogFile(unsigned int nThreads, unsigned int nStreams, unsigned int nConcurrentLumis, unsigned int nConcurrentRuns)
ParameterSet * getPSetForUpdate(std::string const &name, bool &isTracked)