CMS 3D CMS Logo

ParameterSet.cc
Go to the documentation of this file.
1  // ----------------------------------------------------------------------
2 //
3 // definition of ParameterSet's function members
4 // ----------------------------------------------------------------------
5 
6 // ----------------------------------------------------------------------
7 // prerequisite source files and headers
8 // ----------------------------------------------------------------------
9 
11 
18 
20 
21 #include <algorithm>
22 #include <iostream>
23 #include <sstream>
24 #include <cassert>
25 
26 // ----------------------------------------------------------------------
27 // class invariant checker
28 // ----------------------------------------------------------------------
29 
30 namespace edm {
31 
32  void
34  // We have added a new parameter. Invalidate the ID.
35  if(isRegistered()) {
36  id_ = ParameterSetID();
37  if(!nameOfTracked.empty()) {
38  // Give a warning (informational for now).
39  LogInfo("ParameterSet") << "Warning: You have added a new tracked parameter\n"
40  << "'" << nameOfTracked << "' to a previously registered parameter set.\n"
41  << "This is a bad idea because the new parameter(s) will not be recorded.\n"
42  << "Use the forthcoming ParameterSetDescription facility instead.\n"
43  << "A warning is given only for the first such parameter in a pset.\n";
44  }
45  }
46  assert(!isRegistered());
47  }
48 
49  // ----------------------------------------------------------------------
50  // constructors
51  // ----------------------------------------------------------------------
52 
54  tbl_(),
55  psetTable_(),
56  vpsetTable_(),
57  id_() {
58  }
59 
60  // ----------------------------------------------------------------------
61  // from coded string
62 
64  tbl_(),
65  psetTable_(),
66  vpsetTable_(),
67  id_() {
68  if(!fromString(code)) {
69  throw Exception(errors::Configuration, "InvalidInput")
70  << "The encoded configuration string "
71  << "passed to a ParameterSet during construction is invalid:\n"
72  << code;
73  }
74  }
75 
76  // ----------------------------------------------------------------------
77  // from coded string and ID.
78 
80  tbl_(),
81  psetTable_(),
82  vpsetTable_(),
83  id_(id) {
84  if(!fromString(code)) {
85  throw Exception(errors::Configuration, "InvalidInput")
86  << "The encoded configuration string "
87  << "passed to a ParameterSet during construction is invalid:\n"
88  << code;
89  }
90  }
91 
92  void
94  // from coded string. Will cause registration
95  cms::Digest dg(rep);
96  edm::ParameterSetID psID(dg.digest().toString());
97  edm::ParameterSet ps(rep, psID);
99  }
100 
103  cms::Digest newDigest;
104  ParameterSet().toDigest(newDigest);
105  return ParameterSetID(newDigest.digest().toString());
106  }
107 
109  ParameterSet temp(other);
110  swap(temp);
111  id_ = ParameterSetID();
112  }
113 
115  tbl_.swap(other.tbl_);
116  psetTable_.swap(other.psetTable_);
117  vpsetTable_.swap(other.vpsetTable_);
118  id_.swap(other.id_);
119  }
120 
122  if(!isRegistered()) {
123  calculateID();
125  }
126  return *this;
127  }
128 
129  std::unique_ptr<ParameterSet> ParameterSet::popParameterSet(std::string const& name) {
130  assert(!isRegistered());
131  psettable::iterator it = psetTable_.find(name);
132  assert(it != psetTable_.end());
133  auto pset = std::make_unique<ParameterSet>();
134  std::swap(*pset, it->second.psetForUpdate());
135  psetTable_.erase(it);
136  return pset;
137  }
138 
140  assert(!isRegistered());
141  table::iterator it = tbl_.find(name);
142  assert(it != tbl_.end());
143  tbl_.erase(it);
144  }
145 
147  assert(!isRegistered());
148  psettable::iterator it = psetTable_.find(name);
149  assert(it != psetTable_.end());
150  ParameterSet& pset = it->second.psetForUpdate();
151  if (pset.isRegistered()) {
152  it->second.setIsTracked(false);
153  } else {
154  psetTable_.erase(it);
155  }
156  }
157 
158  std::vector<ParameterSet> ParameterSet::popVParameterSet(std::string const& name) {
159  assert(!isRegistered());
160  vpsettable::iterator it = vpsetTable_.find(name);
161  assert(it != vpsetTable_.end());
162  std::vector<ParameterSet> vpset;
163  std::swap(vpset, it->second.vpsetForUpdate());
164  vpsetTable_.erase(it);
165  return vpset;
166  }
167 
169  // make sure contained tracked psets are updated
170  for(auto& item : psetTable_) {
171  ParameterSet& pset = item.second.psetForUpdate();
172  if(!pset.isRegistered()) {
173  pset.registerIt();
174  }
175  item.second.updateID();
176  }
177 
178  // make sure contained tracked vpsets are updated
179  for(vpsettable::iterator i = vpsetTable_.begin(), e = vpsetTable_.end(); i != e; ++i) {
180  i->second.registerPsetsAndUpdateIDs();
181  }
182 // The old, string base code is found below. Uncomment this and the assert to check whether
183 // there are discrepancies between old and new implementation.
184 // std::string stringrep;
185 // toString(stringrep);
186 // cms::Digest md5alg(stringrep);
187 // id_ = ParameterSetID(md5alg.digest().toString());
188  cms::Digest newDigest;
189  toDigest(newDigest);
190  id_ = ParameterSetID(newDigest.digest().toString());
191 // assert(md5alg.digest().toString() == newDigest.digest().toString());
192  assert(isRegistered());
193  }
194 
195  // ----------------------------------------------------------------------
196  // identification
199  // checks if valid
200  if(!isRegistered()) {
202  << "ParameterSet::id() called prematurely\n"
203  << "before ParameterSet::registerIt() has been called.\n";
204  }
205  return id_;
206  }
207 
209  id_ = id;
210  }
211 
212  // ----------------------------------------------------------------------
213  // Entry-handling
214  // ----------------------------------------------------------------------
215 
216  Entry const*
218  return getEntryPointerOrThrow_(std::string(name));
219  }
220 
221  Entry const*
223  Entry const* result = retrieveUntracked(name);
224  if(result == nullptr)
225  throw Exception(errors::Configuration, "MissingParameter:")
226  << "The required parameter '" << name
227  << "' was not specified.\n";
228  return result;
229  }
230 
231  template<typename T, typename U> T first(std::pair<T, U> const& p) {
232  return p.first;
233  }
234 
235  template<typename T, typename U> U second(std::pair<T, U> const& p) {
236  return p.second;
237  }
238 
239  Entry const&
240  ParameterSet::retrieve(char const* name) const {
241  return retrieve(std::string(name));
242  }
243 
244  Entry const&
246  table::const_iterator it = tbl_.find(name);
247  if(it == tbl_.end()) {
248  throw Exception(errors::Configuration, "MissingParameter:")
249  << "Parameter '" << name
250  << "' not found.";
251  }
252  if(it->second.isTracked() == false) {
253  if(name[0] == '@') {
254  throw Exception(errors::Configuration, "StatusMismatch:")
255  << "Framework Error: Parameter '" << name
256  << "' is incorrectly designated as tracked in the framework.";
257  } else {
258  throw Exception(errors::Configuration, "StatusMismatch:")
259  << "Parameter '" << name
260  << "' is designated as tracked in the code,\n"
261  << "but is designated as untracked in the configuration file.\n"
262  << "Please remove 'untracked' from the configuration file for parameter '"<< name << "'.";
263  }
264  }
265  return it->second;
266  } // retrieve()
267 
268  Entry const*
270  return retrieveUntracked(std::string(name));
271  }
272 
273  Entry const*
275  table::const_iterator it = tbl_.find(name);
276 
277  if(it == tbl_.end()) return nullptr;
278  if(it->second.isTracked()) {
279  if(name[0] == '@') {
280  throw Exception(errors::Configuration, "StatusMismatch:")
281  << "Framework Error: Parameter '" << name
282  << "' is incorrectly designated as untracked in the framework.";
283  } else {
284  throw Exception(errors::Configuration, "StatusMismatch:")
285  << "Parameter '" << name
286  << "' is designated as untracked in the code,\n"
287  << "but is not designated as untracked in the configuration file.\n"
288  << "Please change the configuration file to 'untracked <type> " << name << "'.";
289  }
290  }
291  return &it->second;
292  } // retrieve()
293 
294  ParameterSetEntry const&
296  psettable::const_iterator it = psetTable_.find(name);
297  if(it == psetTable_.end()) {
298  throw Exception(errors::Configuration, "MissingParameter:")
299  << "ParameterSet '" << name
300  << "' not found.";
301  }
302  if(it->second.isTracked() == false) {
303  if(name[0] == '@') {
304  throw Exception(errors::Configuration, "StatusMismatch:")
305  << "Framework Error: ParameterSet '" << name
306  << "' is incorrectly designated as tracked in the framework.";
307  } else {
308  throw Exception(errors::Configuration, "StatusMismatch:")
309  << "ParameterSet '" << name
310  << "' is designated as tracked in the code,\n"
311  << "but is designated as untracked in the configuration file.\n"
312  << "Please remove 'untracked' from the configuration file for parameter '"<< name << "'.";
313  }
314  }
315  return it->second;
316  } // retrieve()
317 
318  ParameterSetEntry const*
320  psettable::const_iterator it = psetTable_.find(name);
321 
322  if(it == psetTable_.end()) return nullptr;
323  if(it->second.isTracked()) {
324  if(name[0] == '@') {
325  throw Exception(errors::Configuration, "StatusMismatch:")
326  << "Framework Error: ParameterSet '" << name
327  << "' is incorrectly designated as untracked in the framework.";
328  } else {
329  throw Exception(errors::Configuration, "StatusMismatch:")
330  << "ParameterSet '" << name
331  << "' is designated as untracked in the code,\n"
332  << "but is not designated as untracked in the configuration file.\n"
333  << "Please change the configuration file to 'untracked <type> " << name << "'.";
334  }
335  }
336  return &it->second;
337  } // retrieve()
338 
339  VParameterSetEntry const&
341  vpsettable::const_iterator it = vpsetTable_.find(name);
342  if(it == vpsetTable_.end()) {
343  throw Exception(errors::Configuration, "MissingParameter:")
344  << "VParameterSet '" << name
345  << "' not found.";
346  }
347  if(it->second.isTracked() == false) {
348  throw Exception(errors::Configuration, "StatusMismatch:")
349  << "VParameterSet '" << name
350  << "' is designated as tracked in the code,\n"
351  << "but is designated as untracked in the configuration file.\n"
352  << "Please remove 'untracked' from the configuration file for parameter '"<< name << "'.";
353  }
354  return it->second;
355  } // retrieve()
356 
357  VParameterSetEntry const*
359  vpsettable::const_iterator it = vpsetTable_.find(name);
360 
361  if(it == vpsetTable_.end()) return nullptr;
362  if(it->second.isTracked()) {
363  throw Exception(errors::Configuration, "StatusMismatch:")
364  << "VParameterSet '" << name
365  << "' is designated as untracked in the code,\n"
366  << "but is not designated as untracked in the configuration file.\n"
367  << "Please change the configuration file to 'untracked <type> " << name << "'.";
368  }
369  return &it->second;
370  } // retrieve()
371 
372  Entry const*
373  ParameterSet::retrieveUnknown(char const* name) const {
374  return retrieveUnknown(std::string(name));
375  }
376 
377  Entry const*
379  table::const_iterator it = tbl_.find(name);
380  if(it == tbl_.end()) {
381  return nullptr;
382  }
383  return &it->second;
384  }
385 
386  ParameterSetEntry const*
388  psettable::const_iterator it = psetTable_.find(name);
389  if(it == psetTable_.end()) {
390  return nullptr;
391  }
392  return &it->second;
393  }
394 
395  VParameterSetEntry const*
397  vpsettable::const_iterator it = vpsetTable_.find(name);
398  if(it == vpsetTable_.end()) {
399  return nullptr;
400  }
401  return &it->second;
402  }
403 
404  // ----------------------------------------------------------------------
405  // ----------------------------------------------------------------------
406 
409  if(existsAs<ParameterSet>(name)) {
410  return retrieveUnknownParameterSet(name)->toString();
411  }
412  else if(existsAs<std::vector<ParameterSet> >(name)) {
413  return retrieveUnknownVParameterSet(name)->toString();
414  }
415  else if(exists(name)) {
416  return retrieveUnknown(name)->toString();
417  }
418  else {
419  throw Exception(errors::Configuration, "getParameterAsString")
420  << "Cannot find parameter " << name << " in " << *this;
421  }
422  }
423 
424  // ----------------------------------------------------------------------
425  // ----------------------------------------------------------------------
426 
427  void
428  ParameterSet::insert(bool okay_to_replace, char const* name, Entry const& value) {
429  insert(okay_to_replace, std::string(name), value);
430  }
431 
432  void
433  ParameterSet::insert(bool okay_to_replace, std::string const& name, Entry const& value) {
434  // We should probably get rid of 'okay_to_replace', which will
435  // simplify the logic in this function.
436  table::iterator it = tbl_.find(name);
437 
438  if(it == tbl_.end()) {
439  if(!tbl_.insert(std::make_pair(name, value)).second)
440  throw Exception(errors::Configuration, "InsertFailure")
441  << "cannot insert " << name
442  << " into a ParameterSet\n";
443  }
444  else if(okay_to_replace) {
445  it->second = value;
446  }
447  } // insert()
448 
449  void ParameterSet::insertParameterSet(bool okay_to_replace, std::string const& name, ParameterSetEntry const& entry) {
450  // We should probably get rid of 'okay_to_replace', which will
451  // simplify the logic in this function.
452  psettable::iterator it = psetTable_.find(name);
453 
454  if(it == psetTable_.end()) {
455  if(!psetTable_.insert(std::make_pair(name, entry)).second)
456  throw Exception(errors::Configuration, "InsertFailure")
457  << "cannot insert " << name
458  << " into a ParameterSet\n";
459  } else if(okay_to_replace) {
460  it->second = entry;
461  }
462  } // insert()
463 
464  void ParameterSet::insertVParameterSet(bool okay_to_replace, std::string const& name, VParameterSetEntry const& entry) {
465  // We should probably get rid of 'okay_to_replace', which will
466  // simplify the logic in this function.
467  vpsettable::iterator it = vpsetTable_.find(name);
468 
469  if(it == vpsetTable_.end()) {
470  if(!vpsetTable_.insert(std::make_pair(name, entry)).second)
471  throw Exception(errors::Configuration, "InsertFailure")
472  << "cannot insert " << name
473  << " into a VParameterSet\n";
474  } else if(okay_to_replace) {
475  it->second = entry;
476  }
477  } // insert()
478 
479  void
481  // This preemptive invalidation may be more agressive than necessary.
483  if(&from == this) {
484  return;
485  }
486 
487  for(table::const_iterator b = from.tbl_.begin(), e = from.tbl_.end(); b != e; ++b) {
488  this->insert(false, b->first, b->second);
489  }
490  for(psettable::const_iterator b = from.psetTable_.begin(), e = from.psetTable_.end(); b != e; ++b) {
491  this->insertParameterSet(false, b->first, b->second);
492  }
493  for(vpsettable::const_iterator b = from.vpsetTable_.begin(), e = from.vpsetTable_.end(); b != e; ++b) {
494  this->insertVParameterSet(false, b->first, b->second);
495  }
496  } // augment()
497 
500  if(from.existsAs<ParameterSet>(name)) {
501  this->insertParameterSet(false, name, *(from.retrieveUnknownParameterSet(name)));
502  }
503  else if(from.existsAs<std::vector<ParameterSet> >(name)) {
504  this->insertVParameterSet(false, name, *(from.retrieveUnknownVParameterSet(name)));
505  }
506  else if(from.exists(name)) {
507  this->insert(false, name, *(from.retrieveUnknown(name)));
508  }
509  else {
510  throw Exception(errors::Configuration, "copyFrom")
511  << "Cannot find parameter " << name << " in " << from;
512  }
513  }
514 
515  ParameterSet*
517  assert(!isRegistered());
518  isTracked = false;
519  psettable::iterator it = psetTable_.find(name);
520  if(it == psetTable_.end()) return nullptr;
521  isTracked = it->second.isTracked();
522  return &it->second.psetForUpdate();
523  }
524 
527  assert(!isRegistered());
528  vpsettable::iterator it = vpsetTable_.find(name);
529  if(it == vpsetTable_.end()) return nullptr;
530  return &it->second;
531  }
532 
533  // ----------------------------------------------------------------------
534  // coding
535  // ----------------------------------------------------------------------
536 
537  void
539  toStringImp(rep, false);
540  }
541 
542  void
544  toStringImp(rep, true);
545  }
546 
547  void
549  // make sure the PSets get filled
550  if(empty()) {
551  rep += "<>";
552  return;
553  }
554  size_t size = 1;
555  for(table::const_iterator b = tbl_.begin(), e = tbl_.end(); b != e; ++b) {
556  if(useAll || b->second.isTracked()) {
557  size += 2;
558  size += b->first.size();
559  size += b->second.sizeOfString();
560  }
561  }
562  for(psettable::const_iterator b = psetTable_.begin(), e = psetTable_.end(); b != e; ++b) {
563  if(useAll || b->second.isTracked()) {
564  size += 2;
565  size += b->first.size();
566  size += b->first.size();
567  size += b->first.size();
568  size += sizeof(ParameterSetID);
569  }
570  }
571  for(vpsettable::const_iterator b = vpsetTable_.begin(), e = vpsetTable_.end(); b != e; ++b) {
572  if(useAll || b->second.isTracked()) {
573  size += 2;
574  size += b->first.size();
575  size += sizeof(ParameterSetID) * b->second.vpset().size();
576  }
577  }
578 
579  rep.reserve(rep.size()+size);
580  rep += '<';
582  std::string const between(";");
583  for(table::const_iterator b = tbl_.begin(), e = tbl_.end(); b != e; ++b) {
584  if(useAll || b->second.isTracked()) {
585  rep += start;
586  rep += b->first;
587  rep += '=';
588  b->second.toString(rep);
589  start = between;
590  }
591  }
592  for(psettable::const_iterator b = psetTable_.begin(), e = psetTable_.end(); b != e; ++b) {
593  if(useAll || b->second.isTracked()) {
594  rep += start;
595  rep += b->first;
596  rep += '=';
597  b->second.toString(rep);
598  start = between;
599  }
600  }
601  for(vpsettable::const_iterator b = vpsetTable_.begin(), e = vpsetTable_.end(); b != e; ++b) {
602  if(useAll || b->second.isTracked()) {
603  rep += start;
604  rep += b->first;
605  rep += '=';
606  b->second.toString(rep);
607  start = between;
608  }
609  }
610 
611  rep += '>';
612  } // to_string()
613 
614  void
616  digest.append("<", 1);
617  bool started = false;
618  for(table::const_iterator b = tbl_.begin(), e = tbl_.end(); b != e; ++b) {
619  if(b->second.isTracked()) {
620  if (started)
621  digest.append(";", 1);
622  digest.append(b->first);
623  digest.append("=", 1);
624  b->second.toDigest(digest);
625  started = true;
626  }
627  }
628  for(psettable::const_iterator b = psetTable_.begin(), e = psetTable_.end(); b != e; ++b) {
629  if(b->second.isTracked()) {
630  if (started)
631  digest.append(";", 1);
632  digest.append(b->first);
633  digest.append("=", 1);
634  b->second.toDigest(digest);
635  started = true;
636  }
637  }
638  for(vpsettable::const_iterator b = vpsetTable_.begin(), e = vpsetTable_.end(); b != e; ++b) {
639  if(b->second.isTracked()) {
640  if (started)
641  digest.append(";", 1);
642  digest.append(b->first);
643  digest.append("=", 1);
644  b->second.toDigest(digest);
645  }
646  }
647 
648  digest.append(">",1);
649  }
650 
654  toString(result);
655  return result;
656  }
657 
658  // ----------------------------------------------------------------------
659 
660  bool
662  std::vector<std::string> temp;
663  if(!split(std::back_inserter(temp), from, '<', ';', '>'))
664  return false;
665 
666  tbl_.clear(); // precaution
667  for(std::vector<std::string>::const_iterator b = temp.begin(), e = temp.end(); b != e; ++b) {
668  // locate required name/value separator
669  std::string::const_iterator q = find_in_all(*b, '=');
670  if(q == b->end())
671  return false;
672 
673  // form name unique to this ParameterSet
674  std::string name = std::string(b->begin(), q);
675  if(tbl_.find(name) != tbl_.end())
676  return false;
677 
678  std::string rep(q+1, b->end());
679  // entries are generically of the form tracked-type-rep
680  if(rep[0] == '-') {
681  }
682  if(rep[1] == 'Q') {
683  ParameterSetEntry psetEntry(rep);
684  if(!psetTable_.insert(std::make_pair(name, psetEntry)).second) {
685  return false;
686  }
687  } else if(rep[1] == 'q') {
688  VParameterSetEntry vpsetEntry(rep);
689  if(!vpsetTable_.insert(std::make_pair(name, vpsetEntry)).second) {
690  return false;
691  }
692  } else if(rep[1] == 'P') {
693  Entry value(name, rep);
694  ParameterSetEntry psetEntry(value.getPSet(), value.isTracked());
695  if(!psetTable_.insert(std::make_pair(name, psetEntry)).second) {
696  return false;
697  }
698  } else if(rep[1] == 'p') {
699  Entry value(name, rep);
700  VParameterSetEntry vpsetEntry(value.getVPSet(), value.isTracked());
701  if(!vpsetTable_.insert(std::make_pair(name, vpsetEntry)).second) {
702  return false;
703  }
704  } else {
705  // form value and insert name/value pair
706  Entry value(name, rep);
707  if(!tbl_.insert(std::make_pair(name, value)).second) {
708  return false;
709  }
710  }
711  }
712 
713  return true;
714  } // from_string()
715 
717  ParameterSet::getAllFileInPaths(std::vector<FileInPath>& output) const {
719  table::const_iterator it = tbl_.begin();
720  table::const_iterator end = tbl_.end();
721  while (it != end) {
722  Entry const& e = it->second;
723  if(e.typeCode() == 'F') {
724  ++count;
725  output.push_back(e.getFileInPath());
726  }
727  ++it;
728  }
729  return count;
730  }
731 
732  std::vector<std::string>
734  using std::placeholders::_1;
735  std::vector<std::string> returnValue;
736  std::transform(tbl_.begin(), tbl_.end(), back_inserter(returnValue),
738  std::transform(psetTable_.begin(), psetTable_.end(), back_inserter(returnValue),
740  std::transform(vpsetTable_.begin(), vpsetTable_.end(), back_inserter(returnValue),
742  return returnValue;
743  }
744 
745  bool ParameterSet::exists(std::string const& parameterName) const {
746  return(tbl_.find(parameterName) != tbl_.end() ||
747  psetTable_.find(parameterName) != psetTable_.end() ||
748  vpsetTable_.find(parameterName) != vpsetTable_.end());
749  }
750 
754  for(table::const_iterator tblItr = tbl_.begin(); tblItr != tbl_.end(); ++tblItr) {
755  if(tblItr->second.isTracked()) {
756  result.tbl_.insert(*tblItr);
757  }
758  }
759  for(psettable::const_iterator psetItr = psetTable_.begin(); psetItr != psetTable_.end(); ++psetItr) {
760  if(psetItr->second.isTracked()) {
761  result.addParameter<ParameterSet>(psetItr->first, psetItr->second.pset().trackedPart());
762  }
763  }
764  for(vpsettable::const_iterator vpsetItr = vpsetTable_.begin(); vpsetItr != vpsetTable_.end(); ++vpsetItr) {
765  if(vpsetItr->second.isTracked()) {
766  VParameterSet vresult;
767  std::vector<ParameterSet> const& this_vpset = vpsetItr->second.vpset();
768 
769  typedef std::vector<ParameterSet>::const_iterator Iter;
770  for (Iter i = this_vpset.begin(), e = this_vpset.end(); i != e; ++i) {
771  vresult.push_back(i->trackedPart());
772  }
773  result.addParameter<VParameterSet>(vpsetItr->first, vresult);
774  }
775  }
776  return result;
777  }
778 
779 /*
780  // Comment out unneeded function
781  size_t
782  ParameterSet::getAllParameterSetNames(std::vector<std::string>& output) const {
783  using std::placeholders::_1;
784  std::transform(psetTable_.begin(), psetTable_.end(), back_inserter(output),
785  std::bind(&std::pair<std::string const, ParameterSetEntry>::first, _1));
786  return output.size();
787  }
788 */
789 
790  size_t
791  ParameterSet::getParameterSetNames(std::vector<std::string>& output,
792  bool trackiness) const {
793  for(psettable::const_iterator psetItr = psetTable_.begin();
794  psetItr != psetTable_.end(); ++psetItr) {
795  if(psetItr->second.isTracked() == trackiness) {
796  output.push_back(psetItr->first);
797  }
798  }
799  return output.size();
800  }
801 
802  size_t
804  bool trackiness) const {
805  for(vpsettable::const_iterator vpsetItr = vpsetTable_.begin();
806  vpsetItr != vpsetTable_.end(); ++vpsetItr) {
807  if(vpsetItr->second.isTracked() == trackiness) {
808  output.push_back(vpsetItr->first);
809  }
810  }
811  return output.size();
812  }
813 
814  size_t
816  bool trackiness,
817  std::vector<std::string>& output) const {
818  size_t count = 0;
819  if(code == 'Q') {
820  return getParameterSetNames(output, trackiness);
821  }
822  if(code == 'q') {
823  return getParameterSetVectorNames(output, trackiness);
824  }
825  table::const_iterator it = tbl_.begin();
826  table::const_iterator end = tbl_.end();
827  while (it != end) {
828  Entry const& e = it->second;
829  if(e.typeCode() == code &&
830  e.isTracked() == trackiness) { // if it is a vector of ParameterSet
831  ++count;
832  output.push_back(it->first); // save the name
833  }
834  ++it;
835  }
836  return count;
837  }
838 
839  template<>
840  std::vector<std::string> ParameterSet::getParameterNamesForType<FileInPath>(bool trackiness) const {
841  std::vector<std::string> result;
842  getNamesByCode_('F', trackiness, result);
843  return result;
844  }
845 
846  bool operator==(ParameterSet const& a, ParameterSet const& b) {
847  if(a.isRegistered() && b.isRegistered()) {
848  return (a.id() == b.id());
849  }
850  return isTransientEqual(a.trackedPart(), b.trackedPart());
851  }
852 
854  if(a.tbl().size() != b.tbl().size()) {
855  return false;
856  }
857  if(a.psetTable().size() != b.psetTable().size()) {
858  return false;
859  }
860  if(a.vpsetTable().size() != b.vpsetTable().size()) {
861  return false;
862  }
863  typedef ParameterSet::table::const_iterator Ti;
864  for (Ti i = a.tbl().begin(), e = a.tbl().end(),
865  j = b.tbl().begin(), f = b.tbl().end();
866  i != e && j != f; ++i, ++j) {
867  if(*i != *j) {
868  return false;
869  }
870  }
871  typedef ParameterSet::psettable::const_iterator Pi;
872  for (Pi i = a.psetTable().begin(), e = a.psetTable().end(),
873  j = b.psetTable().begin(), f = b.psetTable().end();
874  i != e && j != f; ++i, ++j) {
875  if(i->first != j->first) {
876  return false;
877  }
878  if(i->second.isTracked() != j->second.isTracked()) {
879  return false;
880  }
881  if(!isTransientEqual(i->second.pset(), j->second.pset())) {
882  return false;
883  }
884  }
885  typedef ParameterSet::vpsettable::const_iterator PVi;
886  for (PVi i = a.vpsetTable().begin(), e = a.vpsetTable().end(),
887  j = b.vpsetTable().begin(), f = b.vpsetTable().end();
888  i != e && j != f; ++i, ++j) {
889  if(i->first != j->first) {
890  return false;
891  }
892  if(i->second.isTracked() != j->second.isTracked()) {
893  return false;
894  }
895  std::vector<ParameterSet> const& iv = i->second.vpset();
896  std::vector<ParameterSet> const& jv = j->second.vpset();
897  if(iv.size() != jv.size()) {
898  return false;
899  }
900  for (size_t k = 0; k < iv.size(); ++k) {
901  if(!isTransientEqual(iv[k], jv[k])) {
902  return false;
903  }
904  }
905  }
906  return true;
907  }
908 
909  std::string ParameterSet::dump(unsigned int indent) const {
910  std::ostringstream os;
911  // indent a bit
912  std::string indentation(indent, ' ');
913  os << "{" << std::endl;
914  for(table::const_iterator i = tbl_.begin(), e = tbl_.end(); i != e; ++i) {
915  os << indentation << " " << i->first << ": " << i->second << std::endl;
916  }
917  for(psettable::const_iterator i = psetTable_.begin(), e = psetTable_.end(); i != e; ++i) {
918  // indent a bit
919  std::string n = i->first;
920  ParameterSetEntry const& pe = i->second;
921  os << indentation << " " << n << ": " << pe.dump(indent + 2) << std::endl;
922  }
923  for(vpsettable::const_iterator i = vpsetTable_.begin(), e = vpsetTable_.end(); i != e; ++i) {
924  // indent a bit
925  std::string n = i->first;
926  VParameterSetEntry const& pe = i->second;
927  os << indentation << " " << n << ": " << pe.dump(indent + 2) << std::endl;
928  }
929  os << indentation << "}";
930  return os.str();
931  }
932 
933  std::ostream& operator<<(std::ostream& os, ParameterSet const& pset) {
934  os << pset.dump();
935  return os;
936  }
937 
938  // Free function to return a parameterSet given its ID.
939  ParameterSet const&
941  ParameterSet const* result = nullptr;
942  if(nullptr == (result = pset::Registry::instance()->getMapped(id))) {
943  throw Exception(errors::LogicError, "MissingParameterSet:")
944  << "Parameter Set ID '" << id << "' not found.";
945  }
946  return *result;
947  }
948 
949  ParameterSet const&
951  return getParameterSet(moduleDescription.mainParameterSetID());
952  }
953 
955  std::string const& label) const {
956  LogWarning("Configuration") << "Warning:\n\tstring " << name
957  << " = \"" << label
958  << "\"\nis deprecated, "
959  << "please update your config file to use\n\tInputTag "
960  << name << " = " << label;
961  }
962 
963  // specializations
964  // ----------------------------------------------------------------------
965  // Bool, vBool
966 
967  template<>
968  bool
969  ParameterSet::getParameter<bool>(std::string const& name) const {
970  return retrieve(name).getBool();
971  }
972 
973  // ----------------------------------------------------------------------
974  // Int32, vInt32
975 
976  template<>
977  int
978  ParameterSet::getParameter<int>(std::string const& name) const {
979  return retrieve(name).getInt32();
980  }
981 
982  template<>
983  std::vector<int>
984  ParameterSet::getParameter<std::vector<int> >(std::string const& name) const {
985  return retrieve(name).getVInt32();
986  }
987 
988  // ----------------------------------------------------------------------
989  // Int64, vInt64
990 
991  template<>
992  long long
993  ParameterSet::getParameter<long long>(std::string const& name) const {
994  return retrieve(name).getInt64();
995  }
996 
997  template<>
998  std::vector<long long>
999  ParameterSet::getParameter<std::vector<long long> >(std::string const& name) const {
1000  return retrieve(name).getVInt64();
1001  }
1002 
1003  // ----------------------------------------------------------------------
1004  // Uint32, vUint32
1005 
1006  template<>
1007  unsigned int
1008  ParameterSet::getParameter<unsigned int>(std::string const& name) const {
1009  return retrieve(name).getUInt32();
1010  }
1011 
1012  template<>
1013  std::vector<unsigned int>
1014  ParameterSet::getParameter<std::vector<unsigned int> >(std::string const& name) const {
1015  return retrieve(name).getVUInt32();
1016  }
1017 
1018  // ----------------------------------------------------------------------
1019  // Uint64, vUint64
1020 
1021  template<>
1022  unsigned long long
1023  ParameterSet::getParameter<unsigned long long>(std::string const& name) const {
1024  return retrieve(name).getUInt64();
1025  }
1026 
1027  template<>
1028  std::vector<unsigned long long>
1029  ParameterSet::getParameter<std::vector<unsigned long long> >(std::string const& name) const {
1030  return retrieve(name).getVUInt64();
1031  }
1032 
1033  // ----------------------------------------------------------------------
1034  // Double, vDouble
1035 
1036  template<>
1037  double
1038  ParameterSet::getParameter<double>(std::string const& name) const {
1039  return retrieve(name).getDouble();
1040  }
1041 
1042  template<>
1043  std::vector<double>
1044  ParameterSet::getParameter<std::vector<double> >(std::string const& name) const {
1045  return retrieve(name).getVDouble();
1046  }
1047 
1048  // ----------------------------------------------------------------------
1049  // String, vString
1050 
1051  template<>
1052  std::string
1053  ParameterSet::getParameter<std::string>(std::string const& name) const {
1054  return retrieve(name).getString();
1055  }
1056 
1057  template<>
1058  std::vector<std::string>
1059  ParameterSet::getParameter<std::vector<std::string> >(std::string const& name) const {
1060  return retrieve(name).getVString();
1061  }
1062 
1063  // ----------------------------------------------------------------------
1064  // FileInPath
1065 
1066  template<>
1067  FileInPath
1068  ParameterSet::getParameter<FileInPath>(std::string const& name) const {
1069  return retrieve(name).getFileInPath();
1070  }
1071 
1072  // ----------------------------------------------------------------------
1073  // InputTag
1074 
1075  template<>
1076  InputTag
1077  ParameterSet::getParameter<InputTag>(std::string const& name) const {
1078  Entry const& e_input = retrieve(name);
1079  switch (e_input.typeCode()) {
1080  case 't': // InputTag
1081  return e_input.getInputTag();
1082  case 'S': // string
1083  std::string const& label = e_input.getString();
1085  return InputTag(label);
1086  }
1087  throw Exception(errors::Configuration, "ValueError") << "type of "
1088  << name << " is expected to be InputTag or string (deprecated)";
1089 
1090  }
1091 
1092  // ----------------------------------------------------------------------
1093  // VInputTag
1094 
1095  template<>
1096  std::vector<InputTag>
1097  ParameterSet::getParameter<std::vector<InputTag> >(std::string const& name) const {
1098  return retrieve(name).getVInputTag();
1099  }
1100 
1101  // ----------------------------------------------------------------------
1102  // ESInputTag
1103 
1104  template<>
1105  ESInputTag
1106  ParameterSet::getParameter<ESInputTag>(std::string const& name) const {
1107  return retrieve(name).getESInputTag();
1108  }
1109 
1110  // ----------------------------------------------------------------------
1111  // VESInputTag
1112 
1113  template<>
1114  std::vector<ESInputTag>
1115  ParameterSet::getParameter<std::vector<ESInputTag> >(std::string const& name) const {
1116  return retrieve(name).getVESInputTag();
1117  }
1118 
1119  // ----------------------------------------------------------------------
1120  // EventID
1121 
1122  template<>
1123  EventID
1124  ParameterSet::getParameter<EventID>(std::string const& name) const {
1125  return retrieve(name).getEventID();
1126  }
1127 
1128  // ----------------------------------------------------------------------
1129  // VEventID
1130 
1131  template<>
1132  std::vector<EventID>
1133  ParameterSet::getParameter<std::vector<EventID> >(std::string const& name) const {
1134  return retrieve(name).getVEventID();
1135  }
1136 
1137  // ----------------------------------------------------------------------
1138  // LuminosityBlockID
1139 
1140  template<>
1142  ParameterSet::getParameter<LuminosityBlockID>(std::string const& name) const {
1144  }
1145 
1146  // ----------------------------------------------------------------------
1147  // VLuminosityBlockID
1148 
1149  template<>
1150  std::vector<LuminosityBlockID>
1151  ParameterSet::getParameter<std::vector<LuminosityBlockID> >(std::string const& name) const {
1153  }
1154 
1155  // ----------------------------------------------------------------------
1156  // EventRange
1157 
1158  template<>
1159  EventRange
1160  ParameterSet::getParameter<EventRange>(std::string const& name) const {
1161  return retrieve(name).getEventRange();
1162  }
1163 
1164  // ----------------------------------------------------------------------
1165  // VEventRange
1166 
1167  template<>
1168  std::vector<EventRange>
1169  ParameterSet::getParameter<std::vector<EventRange> >(std::string const& name) const {
1170  return retrieve(name).getVEventRange();
1171  }
1172 
1173  // ----------------------------------------------------------------------
1174  // LuminosityBlockRange
1175 
1176  template<>
1178  ParameterSet::getParameter<LuminosityBlockRange>(std::string const& name) const {
1180  }
1181 
1182  // ----------------------------------------------------------------------
1183  // VLuminosityBlockRange
1184 
1185  template<>
1186  std::vector<LuminosityBlockRange>
1187  ParameterSet::getParameter<std::vector<LuminosityBlockRange> >(std::string const& name) const {
1189  }
1190 
1191  // ----------------------------------------------------------------------
1192  // PSet, vPSet
1193 
1194  template<>
1195  ParameterSet
1196  ParameterSet::getParameter<ParameterSet>(std::string const& name) const {
1197  return getParameterSet(name);
1198  }
1199 
1200  template<>
1202  ParameterSet::getParameter<VParameterSet>(std::string const& name) const {
1203  return getParameterSetVector(name);
1204  }
1205 
1206  // untracked parameters
1207 
1208  // ----------------------------------------------------------------------
1209  // Bool, vBool
1210 
1211  template<>
1212  bool
1213  ParameterSet::getUntrackedParameter<bool>(std::string const& name, bool const& defaultValue) const {
1214  Entry const* entryPtr = retrieveUntracked(name);
1215  return entryPtr == nullptr ? defaultValue : entryPtr->getBool();
1216  }
1217 
1218  template<>
1219  bool
1220  ParameterSet::getUntrackedParameter<bool>(std::string const& name) const {
1221  return getEntryPointerOrThrow_(name)->getBool();
1222  }
1223 
1224  // ----------------------------------------------------------------------
1225  // Int32, vInt32
1226 
1227  template<>
1228  int
1229  ParameterSet::getUntrackedParameter<int>(std::string const& name, int const& defaultValue) const {
1230  Entry const* entryPtr = retrieveUntracked(name);
1231  return entryPtr == nullptr ? defaultValue : entryPtr->getInt32();
1232  }
1233 
1234  template<>
1235  int
1236  ParameterSet::getUntrackedParameter<int>(std::string const& name) const {
1237  return getEntryPointerOrThrow_(name)->getInt32();
1238  }
1239 
1240  template<>
1241  std::vector<int>
1242  ParameterSet::getUntrackedParameter<std::vector<int> >(std::string const& name, std::vector<int> const& defaultValue) const {
1243  Entry const* entryPtr = retrieveUntracked(name);
1244  return entryPtr == nullptr ? defaultValue : entryPtr->getVInt32();
1245  }
1246 
1247  template<>
1248  std::vector<int>
1249  ParameterSet::getUntrackedParameter<std::vector<int> >(std::string const& name) const {
1250  return getEntryPointerOrThrow_(name)->getVInt32();
1251  }
1252 
1253  // ----------------------------------------------------------------------
1254  // Uint32, vUint32
1255 
1256  template<>
1257  unsigned int
1258  ParameterSet::getUntrackedParameter<unsigned int>(std::string const& name, unsigned int const& defaultValue) const {
1259  Entry const* entryPtr = retrieveUntracked(name);
1260  return entryPtr == nullptr ? defaultValue : entryPtr->getUInt32();
1261  }
1262 
1263  template<>
1264  unsigned int
1265  ParameterSet::getUntrackedParameter<unsigned int>(std::string const& name) const {
1266  return getEntryPointerOrThrow_(name)->getUInt32();
1267  }
1268 
1269  template<>
1270  std::vector<unsigned int>
1271  ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(std::string const& name, std::vector<unsigned int> const& defaultValue) const {
1272  Entry const* entryPtr = retrieveUntracked(name);
1273  return entryPtr == nullptr ? defaultValue : entryPtr->getVUInt32();
1274  }
1275 
1276  template<>
1277  std::vector<unsigned int>
1278  ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(std::string const& name) const {
1279  return getEntryPointerOrThrow_(name)->getVUInt32();
1280  }
1281 
1282  // ----------------------------------------------------------------------
1283  // Uint64, vUint64
1284 
1285  template<>
1286  unsigned long long
1287  ParameterSet::getUntrackedParameter<unsigned long long>(std::string const& name, unsigned long long const& defaultValue) const {
1288  Entry const* entryPtr = retrieveUntracked(name);
1289  return entryPtr == nullptr ? defaultValue : entryPtr->getUInt64();
1290  }
1291 
1292  template<>
1293  unsigned long long
1294  ParameterSet::getUntrackedParameter<unsigned long long>(std::string const& name) const {
1295  return getEntryPointerOrThrow_(name)->getUInt64();
1296  }
1297 
1298  template<>
1299  std::vector<unsigned long long>
1300  ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(std::string const& name, std::vector<unsigned long long> const& defaultValue) const {
1301  Entry const* entryPtr = retrieveUntracked(name);
1302  return entryPtr == nullptr ? defaultValue : entryPtr->getVUInt64();
1303  }
1304 
1305  template<>
1306  std::vector<unsigned long long>
1307  ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(std::string const& name) const {
1308  return getEntryPointerOrThrow_(name)->getVUInt64();
1309  }
1310 
1311  // ----------------------------------------------------------------------
1312  // Int64, Vint64
1313 
1314  template<>
1315  long long
1316  ParameterSet::getUntrackedParameter<long long>(std::string const& name, long long const& defaultValue) const {
1317  Entry const* entryPtr = retrieveUntracked(name);
1318  return entryPtr == nullptr ? defaultValue : entryPtr->getInt64();
1319  }
1320 
1321  template<>
1322  long long
1323  ParameterSet::getUntrackedParameter<long long>(std::string const& name) const {
1324  return getEntryPointerOrThrow_(name)->getInt64();
1325  }
1326 
1327  template<>
1328  std::vector<long long>
1329  ParameterSet::getUntrackedParameter<std::vector<long long> >(std::string const& name, std::vector<long long> const& defaultValue) const {
1330  Entry const* entryPtr = retrieveUntracked(name);
1331  return entryPtr == nullptr ? defaultValue : entryPtr->getVInt64();
1332  }
1333 
1334  template<>
1335  std::vector<long long>
1336  ParameterSet::getUntrackedParameter<std::vector<long long> >(std::string const& name) const {
1337  return getEntryPointerOrThrow_(name)->getVInt64();
1338  }
1339 
1340  // ----------------------------------------------------------------------
1341  // Double, vDouble
1342 
1343  template<>
1344  double
1345  ParameterSet::getUntrackedParameter<double>(std::string const& name, double const& defaultValue) const {
1346  Entry const* entryPtr = retrieveUntracked(name);
1347  return entryPtr == nullptr ? defaultValue : entryPtr->getDouble();
1348  }
1349 
1350  template<>
1351  double
1352  ParameterSet::getUntrackedParameter<double>(std::string const& name) const {
1353  return getEntryPointerOrThrow_(name)->getDouble();
1354  }
1355 
1356  template<>
1357  std::vector<double>
1358  ParameterSet::getUntrackedParameter<std::vector<double> >(std::string const& name, std::vector<double> const& defaultValue) const {
1359  Entry const* entryPtr = retrieveUntracked(name); return entryPtr == nullptr ? defaultValue : entryPtr->getVDouble();
1360  }
1361 
1362  template<>
1363  std::vector<double>
1364  ParameterSet::getUntrackedParameter<std::vector<double> >(std::string const& name) const {
1365  return getEntryPointerOrThrow_(name)->getVDouble();
1366  }
1367 
1368  // ----------------------------------------------------------------------
1369  // String, vString
1370 
1371  template<>
1372  std::string
1373  ParameterSet::getUntrackedParameter<std::string>(std::string const& name, std::string const& defaultValue) const {
1374  Entry const* entryPtr = retrieveUntracked(name);
1375  return entryPtr == nullptr ? defaultValue : entryPtr->getString();
1376  }
1377 
1378  template<>
1379  std::string
1380  ParameterSet::getUntrackedParameter<std::string>(std::string const& name) const {
1381  return getEntryPointerOrThrow_(name)->getString();
1382  }
1383 
1384  template<>
1385  std::vector<std::string>
1386  ParameterSet::getUntrackedParameter<std::vector<std::string> >(std::string const& name, std::vector<std::string> const& defaultValue) const {
1387  Entry const* entryPtr = retrieveUntracked(name);
1388  return entryPtr == nullptr ? defaultValue : entryPtr->getVString();
1389  }
1390 
1391  template<>
1392  std::vector<std::string>
1393  ParameterSet::getUntrackedParameter<std::vector<std::string> >(std::string const& name) const {
1394  return getEntryPointerOrThrow_(name)->getVString();
1395  }
1396 
1397  // ----------------------------------------------------------------------
1398  // FileInPath
1399 
1400  template<>
1401  FileInPath
1402  ParameterSet::getUntrackedParameter<FileInPath>(std::string const& name, FileInPath const& defaultValue) const {
1403  Entry const* entryPtr = retrieveUntracked(name);
1404  return entryPtr == nullptr ? defaultValue : entryPtr->getFileInPath();
1405  }
1406 
1407  template<>
1408  FileInPath
1409  ParameterSet::getUntrackedParameter<FileInPath>(std::string const& name) const {
1410  return getEntryPointerOrThrow_(name)->getFileInPath();
1411  }
1412 
1413  // ----------------------------------------------------------------------
1414  // InputTag, VInputTag
1415 
1416  template<>
1417  InputTag
1418  ParameterSet::getUntrackedParameter<InputTag>(std::string const& name, InputTag const& defaultValue) const {
1419  Entry const* entryPtr = retrieveUntracked(name);
1420  return entryPtr == nullptr ? defaultValue : entryPtr->getInputTag();
1421  }
1422 
1423  template<>
1424  InputTag
1425  ParameterSet::getUntrackedParameter<InputTag>(std::string const& name) const {
1426  return getEntryPointerOrThrow_(name)->getInputTag();
1427  }
1428 
1429  template<>
1430  std::vector<InputTag>
1431  ParameterSet::getUntrackedParameter<std::vector<InputTag> >(std::string const& name,
1432  std::vector<InputTag> const& defaultValue) const {
1433  Entry const* entryPtr = retrieveUntracked(name);
1434  return entryPtr == nullptr ? defaultValue : entryPtr->getVInputTag();
1435  }
1436 
1437  template<>
1438  std::vector<InputTag>
1439  ParameterSet::getUntrackedParameter<std::vector<InputTag> >(std::string const& name) const {
1440  return getEntryPointerOrThrow_(name)->getVInputTag();
1441  }
1442 
1443  // ----------------------------------------------------------------------
1444  // ESInputTag, VESInputTag
1445 
1446  template<>
1447  ESInputTag
1448  ParameterSet::getUntrackedParameter<ESInputTag>(std::string const& name, ESInputTag const& defaultValue) const {
1449  Entry const* entryPtr = retrieveUntracked(name);
1450  return entryPtr == nullptr ? defaultValue : entryPtr->getESInputTag();
1451  }
1452 
1453  template<>
1454  ESInputTag
1455  ParameterSet::getUntrackedParameter<ESInputTag>(std::string const& name) const {
1456  return getEntryPointerOrThrow_(name)->getESInputTag();
1457  }
1458 
1459  template<>
1460  std::vector<ESInputTag>
1461  ParameterSet::getUntrackedParameter<std::vector<ESInputTag> >(std::string const& name,
1462  std::vector<ESInputTag> const& defaultValue) const {
1463  Entry const* entryPtr = retrieveUntracked(name);
1464  return entryPtr == nullptr ? defaultValue : entryPtr->getVESInputTag();
1465  }
1466 
1467  template<>
1468  std::vector<ESInputTag>
1469  ParameterSet::getUntrackedParameter<std::vector<ESInputTag> >(std::string const& name) const {
1470  return getEntryPointerOrThrow_(name)->getVESInputTag();
1471  }
1472 
1473  // ----------------------------------------------------------------------
1474  // EventID, VEventID
1475 
1476  template<>
1477  EventID
1478  ParameterSet::getUntrackedParameter<EventID>(std::string const& name, EventID const& defaultValue) const {
1479  Entry const* entryPtr = retrieveUntracked(name);
1480  return entryPtr == nullptr ? defaultValue : entryPtr->getEventID();
1481  }
1482 
1483  template<>
1484  EventID
1485  ParameterSet::getUntrackedParameter<EventID>(std::string const& name) const {
1486  return getEntryPointerOrThrow_(name)->getEventID();
1487  }
1488 
1489  template<>
1490  std::vector<EventID>
1491  ParameterSet::getUntrackedParameter<std::vector<EventID> >(std::string const& name,
1492  std::vector<EventID> const& defaultValue) const {
1493  Entry const* entryPtr = retrieveUntracked(name);
1494  return entryPtr == nullptr ? defaultValue : entryPtr->getVEventID();
1495  }
1496 
1497  template<>
1498  std::vector<EventID>
1499  ParameterSet::getUntrackedParameter<std::vector<EventID> >(std::string const& name) const {
1500  return getEntryPointerOrThrow_(name)->getVEventID();
1501  }
1502 
1503  // ----------------------------------------------------------------------
1504  // LuminosityBlockID, VLuminosityBlockID
1505 
1506  template<>
1508  ParameterSet::getUntrackedParameter<LuminosityBlockID>(std::string const& name, LuminosityBlockID const& defaultValue) const {
1509  Entry const* entryPtr = retrieveUntracked(name);
1510  return entryPtr == nullptr ? defaultValue : entryPtr->getLuminosityBlockID();
1511  }
1512 
1513  template<>
1515  ParameterSet::getUntrackedParameter<LuminosityBlockID>(std::string const& name) const {
1517  }
1518 
1519  template<>
1520  std::vector<LuminosityBlockID>
1521  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(std::string const& name,
1522  std::vector<LuminosityBlockID> const& defaultValue) const {
1523  Entry const* entryPtr = retrieveUntracked(name);
1524  return entryPtr == nullptr ? defaultValue : entryPtr->getVLuminosityBlockID();
1525  }
1526 
1527  template<>
1528  std::vector<LuminosityBlockID>
1529  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(std::string const& name) const {
1531  }
1532 
1533  // ----------------------------------------------------------------------
1534  // EventRange, VEventRange
1535 
1536  template<>
1537  EventRange
1538  ParameterSet::getUntrackedParameter<EventRange>(std::string const& name, EventRange const& defaultValue) const {
1539  Entry const* entryPtr = retrieveUntracked(name);
1540  return entryPtr == nullptr ? defaultValue : entryPtr->getEventRange();
1541  }
1542 
1543  template<>
1544  EventRange
1545  ParameterSet::getUntrackedParameter<EventRange>(std::string const& name) const {
1546  return getEntryPointerOrThrow_(name)->getEventRange();
1547  }
1548 
1549  template<>
1550  std::vector<EventRange>
1551  ParameterSet::getUntrackedParameter<std::vector<EventRange> >(std::string const& name,
1552  std::vector<EventRange> const& defaultValue) const {
1553  Entry const* entryPtr = retrieveUntracked(name);
1554  return entryPtr == nullptr ? defaultValue : entryPtr->getVEventRange();
1555  }
1556 
1557  template<>
1558  std::vector<EventRange>
1559  ParameterSet::getUntrackedParameter<std::vector<EventRange> >(std::string const& name) const {
1560  return getEntryPointerOrThrow_(name)->getVEventRange();
1561  }
1562 
1563  // ----------------------------------------------------------------------
1564  // LuminosityBlockRange, VLuminosityBlockRange
1565 
1566  template<>
1568  ParameterSet::getUntrackedParameter<LuminosityBlockRange>(std::string const& name, LuminosityBlockRange const& defaultValue) const {
1569  Entry const* entryPtr = retrieveUntracked(name);
1570  return entryPtr == nullptr ? defaultValue : entryPtr->getLuminosityBlockRange();
1571  }
1572 
1573  template<>
1575  ParameterSet::getUntrackedParameter<LuminosityBlockRange>(std::string const& name) const {
1577  }
1578 
1579  template<>
1580  std::vector<LuminosityBlockRange>
1581  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(std::string const& name,
1582  std::vector<LuminosityBlockRange> const& defaultValue) const {
1583  Entry const* entryPtr = retrieveUntracked(name);
1584  return entryPtr == nullptr ? defaultValue : entryPtr->getVLuminosityBlockRange();
1585  }
1586 
1587  template<>
1588  std::vector<LuminosityBlockRange>
1589  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(std::string const& name) const {
1591  }
1592 
1593  // specializations
1594  // ----------------------------------------------------------------------
1595  // Bool, vBool
1596 
1597  template<>
1598  bool
1599  ParameterSet::getParameter<bool>(char const* name) const {
1600  return retrieve(name).getBool();
1601  }
1602 
1603  // ----------------------------------------------------------------------
1604  // Int32, vInt32
1605 
1606  template<>
1607  int
1608  ParameterSet::getParameter<int>(char const* name) const {
1609  return retrieve(name).getInt32();
1610  }
1611 
1612  template<>
1613  std::vector<int>
1614  ParameterSet::getParameter<std::vector<int> >(char const* name) const {
1615  return retrieve(name).getVInt32();
1616  }
1617 
1618  // ----------------------------------------------------------------------
1619  // Int64, vInt64
1620 
1621  template<>
1622  long long
1623  ParameterSet::getParameter<long long>(char const* name) const {
1624  return retrieve(name).getInt64();
1625  }
1626 
1627  template<>
1628  std::vector<long long>
1629  ParameterSet::getParameter<std::vector<long long> >(char const* name) const {
1630  return retrieve(name).getVInt64();
1631  }
1632 
1633  // ----------------------------------------------------------------------
1634  // Uint32, vUint32
1635 
1636  template<>
1637  unsigned int
1638  ParameterSet::getParameter<unsigned int>(char const* name) const {
1639  return retrieve(name).getUInt32();
1640  }
1641 
1642  template<>
1643  std::vector<unsigned int>
1644  ParameterSet::getParameter<std::vector<unsigned int> >(char const* name) const {
1645  return retrieve(name).getVUInt32();
1646  }
1647 
1648  // ----------------------------------------------------------------------
1649  // Uint64, vUint64
1650 
1651  template<>
1652  unsigned long long
1653  ParameterSet::getParameter<unsigned long long>(char const* name) const {
1654  return retrieve(name).getUInt64();
1655  }
1656 
1657  template<>
1658  std::vector<unsigned long long>
1659  ParameterSet::getParameter<std::vector<unsigned long long> >(char const* name) const {
1660  return retrieve(name).getVUInt64();
1661  }
1662 
1663  // ----------------------------------------------------------------------
1664  // Double, vDouble
1665 
1666  template<>
1667  double
1668  ParameterSet::getParameter<double>(char const* name) const {
1669  return retrieve(name).getDouble();
1670  }
1671 
1672  template<>
1673  std::vector<double>
1674  ParameterSet::getParameter<std::vector<double> >(char const* name) const {
1675  return retrieve(name).getVDouble();
1676  }
1677 
1678  // ----------------------------------------------------------------------
1679  // String, vString
1680 
1681  template<>
1682  std::string
1683  ParameterSet::getParameter<std::string>(char const* name) const {
1684  return retrieve(name).getString();
1685  }
1686 
1687  template<>
1688  std::vector<std::string>
1689  ParameterSet::getParameter<std::vector<std::string> >(char const* name) const {
1690  return retrieve(name).getVString();
1691  }
1692 
1693  // ----------------------------------------------------------------------
1694  // FileInPath
1695 
1696  template<>
1697  FileInPath
1698  ParameterSet::getParameter<FileInPath>(char const* name) const {
1699  return retrieve(name).getFileInPath();
1700  }
1701 
1702  // ----------------------------------------------------------------------
1703  // InputTag
1704 
1705  template<>
1706  InputTag
1707  ParameterSet::getParameter<InputTag>(char const* name) const {
1708  Entry const& e_input = retrieve(name);
1709  switch (e_input.typeCode()) {
1710  case 't': // InputTag
1711  return e_input.getInputTag();
1712  case 'S': // string
1713  std::string const& label = e_input.getString();
1714  deprecatedInputTagWarning(name, label);
1715  return InputTag(label);
1716  }
1717  throw Exception(errors::Configuration, "ValueError") << "type of "
1718  << name << " is expected to be InputTag or string (deprecated)";
1719  }
1720 
1721  // ----------------------------------------------------------------------
1722  // VInputTag
1723 
1724  template<>
1725  std::vector<InputTag>
1726  ParameterSet::getParameter<std::vector<InputTag> >(char const* name) const {
1727  return retrieve(name).getVInputTag();
1728  }
1729 
1730  // ----------------------------------------------------------------------
1731  // ESInputTag
1732 
1733  template<>
1734  ESInputTag
1735  ParameterSet::getParameter<ESInputTag>(char const* name) const {
1736  return retrieve(name).getESInputTag();
1737  }
1738 
1739  // ----------------------------------------------------------------------
1740  // VESInputTag
1741 
1742  template<>
1743  std::vector<ESInputTag>
1744  ParameterSet::getParameter<std::vector<ESInputTag> >(char const* name) const {
1745  return retrieve(name).getVESInputTag();
1746  }
1747 
1748 
1749  // ----------------------------------------------------------------------
1750  // EventID
1751 
1752  template<>
1753  EventID
1754  ParameterSet::getParameter<EventID>(char const* name) const {
1755  return retrieve(name).getEventID();
1756  }
1757 
1758  // ----------------------------------------------------------------------
1759  // VEventID
1760 
1761  template<>
1762  std::vector<EventID>
1763  ParameterSet::getParameter<std::vector<EventID> >(char const* name) const {
1764  return retrieve(name).getVEventID();
1765  }
1766 
1767  // ----------------------------------------------------------------------
1768  // LuminosityBlockID
1769 
1770  template<>
1772  ParameterSet::getParameter<LuminosityBlockID>(char const* name) const {
1773  return retrieve(name).getLuminosityBlockID();
1774  }
1775 
1776  // ----------------------------------------------------------------------
1777  // VLuminosityBlockID
1778 
1779  template<>
1780  std::vector<LuminosityBlockID>
1781  ParameterSet::getParameter<std::vector<LuminosityBlockID> >(char const* name) const {
1782  return retrieve(name).getVLuminosityBlockID();
1783  }
1784 
1785  // ----------------------------------------------------------------------
1786  // EventRange
1787 
1788  template<>
1789  EventRange
1790  ParameterSet::getParameter<EventRange>(char const* name) const {
1791  return retrieve(name).getEventRange();
1792  }
1793 
1794  // ----------------------------------------------------------------------
1795  // VEventRange
1796 
1797  template<>
1798  std::vector<EventRange>
1799  ParameterSet::getParameter<std::vector<EventRange> >(char const* name) const {
1800  return retrieve(name).getVEventRange();
1801  }
1802 
1803  // ----------------------------------------------------------------------
1804  // LuminosityBlockRange
1805 
1806  template<>
1808  ParameterSet::getParameter<LuminosityBlockRange>(char const* name) const {
1809  return retrieve(name).getLuminosityBlockRange();
1810  }
1811 
1812  // ----------------------------------------------------------------------
1813  // VLuminosityBlockRange
1814 
1815  template<>
1816  std::vector<LuminosityBlockRange>
1817  ParameterSet::getParameter<std::vector<LuminosityBlockRange> >(char const* name) const {
1818  return retrieve(name).getVLuminosityBlockRange();
1819  }
1820 
1821  // ----------------------------------------------------------------------
1822  // PSet, vPSet
1823 
1824  template<>
1825  ParameterSet
1826  ParameterSet::getParameter<ParameterSet>(char const* name) const {
1827  return getParameterSet(name);
1828  }
1829 
1830  template<>
1832  ParameterSet::getParameter<VParameterSet>(char const* name) const {
1833  return getParameterSetVector(name);
1834  }
1835 
1836  // untracked parameters
1837 
1838  // ----------------------------------------------------------------------
1839  // Bool, vBool
1840 
1841  template<>
1842  bool
1843  ParameterSet::getUntrackedParameter<bool>(char const* name, bool const& defaultValue) const {
1844  Entry const* entryPtr = retrieveUntracked(name);
1845  return entryPtr == nullptr ? defaultValue : entryPtr->getBool();
1846  }
1847 
1848  template<>
1849  bool
1850  ParameterSet::getUntrackedParameter<bool>(char const* name) const {
1851  return getEntryPointerOrThrow_(name)->getBool();
1852  }
1853 
1854  // ----------------------------------------------------------------------
1855  // Int32, vInt32
1856 
1857  template<>
1858  int
1859  ParameterSet::getUntrackedParameter<int>(char const* name, int const& defaultValue) const {
1860  Entry const* entryPtr = retrieveUntracked(name);
1861  return entryPtr == nullptr ? defaultValue : entryPtr->getInt32();
1862  }
1863 
1864  template<>
1865  int
1866  ParameterSet::getUntrackedParameter<int>(char const* name) const {
1867  return getEntryPointerOrThrow_(name)->getInt32();
1868  }
1869 
1870  template<>
1871  std::vector<int>
1872  ParameterSet::getUntrackedParameter<std::vector<int> >(char const* name, std::vector<int> const& defaultValue) const {
1873  Entry const* entryPtr = retrieveUntracked(name);
1874  return entryPtr == nullptr ? defaultValue : entryPtr->getVInt32();
1875  }
1876 
1877  template<>
1878  std::vector<int>
1879  ParameterSet::getUntrackedParameter<std::vector<int> >(char const* name) const {
1880  return getEntryPointerOrThrow_(name)->getVInt32();
1881  }
1882 
1883  // ----------------------------------------------------------------------
1884  // Uint32, vUint32
1885 
1886  template<>
1887  unsigned int
1888  ParameterSet::getUntrackedParameter<unsigned int>(char const* name, unsigned int const& defaultValue) const {
1889  Entry const* entryPtr = retrieveUntracked(name);
1890  return entryPtr == nullptr ? defaultValue : entryPtr->getUInt32();
1891  }
1892 
1893  template<>
1894  unsigned int
1895  ParameterSet::getUntrackedParameter<unsigned int>(char const* name) const {
1896  return getEntryPointerOrThrow_(name)->getUInt32();
1897  }
1898 
1899  template<>
1900  std::vector<unsigned int>
1901  ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(char const* name, std::vector<unsigned int> const& defaultValue) const {
1902  Entry const* entryPtr = retrieveUntracked(name);
1903  return entryPtr == nullptr ? defaultValue : entryPtr->getVUInt32();
1904  }
1905 
1906  template<>
1907  std::vector<unsigned int>
1908  ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(char const* name) const {
1909  return getEntryPointerOrThrow_(name)->getVUInt32();
1910  }
1911 
1912  // ----------------------------------------------------------------------
1913  // Uint64, vUint64
1914 
1915  template<>
1916  unsigned long long
1917  ParameterSet::getUntrackedParameter<unsigned long long>(char const* name, unsigned long long const& defaultValue) const {
1918  Entry const* entryPtr = retrieveUntracked(name);
1919  return entryPtr == nullptr ? defaultValue : entryPtr->getUInt64();
1920  }
1921 
1922  template<>
1923  unsigned long long
1924  ParameterSet::getUntrackedParameter<unsigned long long>(char const* name) const {
1925  return getEntryPointerOrThrow_(name)->getUInt64();
1926  }
1927 
1928  template<>
1929  std::vector<unsigned long long>
1930  ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(char const* name, std::vector<unsigned long long> const& defaultValue) const {
1931  Entry const* entryPtr = retrieveUntracked(name);
1932  return entryPtr == nullptr ? defaultValue : entryPtr->getVUInt64();
1933  }
1934 
1935  template<>
1936  std::vector<unsigned long long>
1937  ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(char const* name) const {
1938  return getEntryPointerOrThrow_(name)->getVUInt64();
1939  }
1940 
1941  // ----------------------------------------------------------------------
1942  // Int64, Vint64
1943 
1944  template<>
1945  long long
1946  ParameterSet::getUntrackedParameter<long long>(char const* name, long long const& defaultValue) const {
1947  Entry const* entryPtr = retrieveUntracked(name);
1948  return entryPtr == nullptr ? defaultValue : entryPtr->getInt64();
1949  }
1950 
1951  template<>
1952  long long
1953  ParameterSet::getUntrackedParameter<long long>(char const* name) const {
1954  return getEntryPointerOrThrow_(name)->getInt64();
1955  }
1956 
1957  template<>
1958  std::vector<long long>
1959  ParameterSet::getUntrackedParameter<std::vector<long long> >(char const* name, std::vector<long long> const& defaultValue) const {
1960  Entry const* entryPtr = retrieveUntracked(name);
1961  return entryPtr == nullptr ? defaultValue : entryPtr->getVInt64();
1962  }
1963 
1964  template<>
1965  std::vector<long long>
1966  ParameterSet::getUntrackedParameter<std::vector<long long> >(char const* name) const {
1967  return getEntryPointerOrThrow_(name)->getVInt64();
1968  }
1969 
1970  // ----------------------------------------------------------------------
1971  // Double, vDouble
1972 
1973  template<>
1974  double
1975  ParameterSet::getUntrackedParameter<double>(char const* name, double const& defaultValue) const {
1976  Entry const* entryPtr = retrieveUntracked(name);
1977  return entryPtr == nullptr ? defaultValue : entryPtr->getDouble();
1978  }
1979 
1980  template<>
1981  double
1982  ParameterSet::getUntrackedParameter<double>(char const* name) const {
1983  return getEntryPointerOrThrow_(name)->getDouble();
1984  }
1985 
1986  template<>
1987  std::vector<double>
1988  ParameterSet::getUntrackedParameter<std::vector<double> >(char const* name, std::vector<double> const& defaultValue) const {
1989  Entry const* entryPtr = retrieveUntracked(name); return entryPtr == nullptr ? defaultValue : entryPtr->getVDouble();
1990  }
1991 
1992  template<>
1993  std::vector<double>
1994  ParameterSet::getUntrackedParameter<std::vector<double> >(char const* name) const {
1995  return getEntryPointerOrThrow_(name)->getVDouble();
1996  }
1997 
1998  // ----------------------------------------------------------------------
1999  // String, vString
2000 
2001  template<>
2002  std::string
2003  ParameterSet::getUntrackedParameter<std::string>(char const* name, std::string const& defaultValue) const {
2004  Entry const* entryPtr = retrieveUntracked(name);
2005  return entryPtr == nullptr ? defaultValue : entryPtr->getString();
2006  }
2007 
2008  template<>
2009  std::string
2010  ParameterSet::getUntrackedParameter<std::string>(char const* name) const {
2011  return getEntryPointerOrThrow_(name)->getString();
2012  }
2013 
2014  template<>
2015  std::vector<std::string>
2016  ParameterSet::getUntrackedParameter<std::vector<std::string> >(char const* name, std::vector<std::string> const& defaultValue) const {
2017  Entry const* entryPtr = retrieveUntracked(name);
2018  return entryPtr == nullptr ? defaultValue : entryPtr->getVString();
2019  }
2020 
2021  template<>
2022  std::vector<std::string>
2023  ParameterSet::getUntrackedParameter<std::vector<std::string> >(char const* name) const {
2024  return getEntryPointerOrThrow_(name)->getVString();
2025  }
2026 
2027  // ----------------------------------------------------------------------
2028  // FileInPath
2029 
2030  template<>
2031  FileInPath
2032  ParameterSet::getUntrackedParameter<FileInPath>(char const* name, FileInPath const& defaultValue) const {
2033  Entry const* entryPtr = retrieveUntracked(name);
2034  return entryPtr == nullptr ? defaultValue : entryPtr->getFileInPath();
2035  }
2036 
2037  template<>
2038  FileInPath
2039  ParameterSet::getUntrackedParameter<FileInPath>(char const* name) const {
2040  return getEntryPointerOrThrow_(name)->getFileInPath();
2041  }
2042 
2043  // ----------------------------------------------------------------------
2044  // InputTag, VInputTag
2045 
2046  template<>
2047  InputTag
2048  ParameterSet::getUntrackedParameter<InputTag>(char const* name, InputTag const& defaultValue) const {
2049  Entry const* entryPtr = retrieveUntracked(name);
2050  return entryPtr == nullptr ? defaultValue : entryPtr->getInputTag();
2051  }
2052 
2053  template<>
2054  InputTag
2055  ParameterSet::getUntrackedParameter<InputTag>(char const* name) const {
2056  return getEntryPointerOrThrow_(name)->getInputTag();
2057  }
2058 
2059  template<>
2060  std::vector<InputTag>
2061  ParameterSet::getUntrackedParameter<std::vector<InputTag> >(char const* name,
2062  std::vector<InputTag> const& defaultValue) const {
2063  Entry const* entryPtr = retrieveUntracked(name);
2064  return entryPtr == nullptr ? defaultValue : entryPtr->getVInputTag();
2065  }
2066 
2067  template<>
2068  std::vector<InputTag>
2069  ParameterSet::getUntrackedParameter<std::vector<InputTag> >(char const* name) const {
2070  return getEntryPointerOrThrow_(name)->getVInputTag();
2071  }
2072 
2073  // ----------------------------------------------------------------------
2074  // ESInputTag, VESInputTag
2075 
2076  template<>
2077  ESInputTag
2078  ParameterSet::getUntrackedParameter<ESInputTag>(char const* name, ESInputTag const& defaultValue) const {
2079  Entry const* entryPtr = retrieveUntracked(name);
2080  return entryPtr == nullptr ? defaultValue : entryPtr->getESInputTag();
2081  }
2082 
2083  template<>
2084  ESInputTag
2085  ParameterSet::getUntrackedParameter<ESInputTag>(char const* name) const {
2086  return getEntryPointerOrThrow_(name)->getESInputTag();
2087  }
2088 
2089  template<>
2090  std::vector<ESInputTag>
2091  ParameterSet::getUntrackedParameter<std::vector<ESInputTag> >(char const* name,
2092  std::vector<ESInputTag> const& defaultValue) const {
2093  Entry const* entryPtr = retrieveUntracked(name);
2094  return entryPtr == nullptr ? defaultValue : entryPtr->getVESInputTag();
2095  }
2096 
2097  template<>
2098  std::vector<ESInputTag>
2099  ParameterSet::getUntrackedParameter<std::vector<ESInputTag> >(char const* name) const {
2100  return getEntryPointerOrThrow_(name)->getVESInputTag();
2101  }
2102 
2103  // ----------------------------------------------------------------------
2104  // EventID, VEventID
2105 
2106  template<>
2107  EventID
2108  ParameterSet::getUntrackedParameter<EventID>(char const* name, EventID const& defaultValue) const {
2109  Entry const* entryPtr = retrieveUntracked(name);
2110  return entryPtr == nullptr ? defaultValue : entryPtr->getEventID();
2111  }
2112 
2113  template<>
2114  EventID
2115  ParameterSet::getUntrackedParameter<EventID>(char const* name) const {
2116  return getEntryPointerOrThrow_(name)->getEventID();
2117  }
2118 
2119  template<>
2120  std::vector<EventID>
2121  ParameterSet::getUntrackedParameter<std::vector<EventID> >(char const* name,
2122  std::vector<EventID> const& defaultValue) const {
2123  Entry const* entryPtr = retrieveUntracked(name);
2124  return entryPtr == nullptr ? defaultValue : entryPtr->getVEventID();
2125  }
2126 
2127  template<>
2128  std::vector<EventID>
2129  ParameterSet::getUntrackedParameter<std::vector<EventID> >(char const* name) const {
2130  return getEntryPointerOrThrow_(name)->getVEventID();
2131  }
2132 
2133  // ----------------------------------------------------------------------
2134  // LuminosityBlockID, VLuminosityBlockID
2135 
2136  template<>
2138  ParameterSet::getUntrackedParameter<LuminosityBlockID>(char const* name, LuminosityBlockID const& defaultValue) const {
2139  Entry const* entryPtr = retrieveUntracked(name);
2140  return entryPtr == nullptr ? defaultValue : entryPtr->getLuminosityBlockID();
2141  }
2142 
2143  template<>
2145  ParameterSet::getUntrackedParameter<LuminosityBlockID>(char const* name) const {
2147  }
2148 
2149  template<>
2150  std::vector<LuminosityBlockID>
2151  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(char const* name,
2152  std::vector<LuminosityBlockID> const& defaultValue) const {
2153  Entry const* entryPtr = retrieveUntracked(name);
2154  return entryPtr == nullptr ? defaultValue : entryPtr->getVLuminosityBlockID();
2155  }
2156 
2157  template<>
2158  std::vector<LuminosityBlockID>
2159  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(char const* name) const {
2161  }
2162 
2163  // ----------------------------------------------------------------------
2164  // EventRange, VEventRange
2165 
2166  template<>
2167  EventRange
2168  ParameterSet::getUntrackedParameter<EventRange>(char const* name, EventRange const& defaultValue) const {
2169  Entry const* entryPtr = retrieveUntracked(name);
2170  return entryPtr == nullptr ? defaultValue : entryPtr->getEventRange();
2171  }
2172 
2173  template<>
2174  EventRange
2175  ParameterSet::getUntrackedParameter<EventRange>(char const* name) const {
2176  return getEntryPointerOrThrow_(name)->getEventRange();
2177  }
2178 
2179  template<>
2180  std::vector<EventRange>
2181  ParameterSet::getUntrackedParameter<std::vector<EventRange> >(char const* name,
2182  std::vector<EventRange> const& defaultValue) const {
2183  Entry const* entryPtr = retrieveUntracked(name);
2184  return entryPtr == nullptr ? defaultValue : entryPtr->getVEventRange();
2185  }
2186 
2187  template<>
2188  std::vector<EventRange>
2189  ParameterSet::getUntrackedParameter<std::vector<EventRange> >(char const* name) const {
2190  return getEntryPointerOrThrow_(name)->getVEventRange();
2191  }
2192 
2193  // ----------------------------------------------------------------------
2194  // LuminosityBlockRange, VLuminosityBlockRange
2195 
2196  template<>
2198  ParameterSet::getUntrackedParameter<LuminosityBlockRange>(char const* name, LuminosityBlockRange const& defaultValue) const {
2199  Entry const* entryPtr = retrieveUntracked(name);
2200  return entryPtr == nullptr ? defaultValue : entryPtr->getLuminosityBlockRange();
2201  }
2202 
2203  template<>
2205  ParameterSet::getUntrackedParameter<LuminosityBlockRange>(char const* name) const {
2207  }
2208 
2209  template<>
2210  std::vector<LuminosityBlockRange>
2211  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(char const* name,
2212  std::vector<LuminosityBlockRange> const& defaultValue) const {
2213  Entry const* entryPtr = retrieveUntracked(name);
2214  return entryPtr == nullptr ? defaultValue : entryPtr->getVLuminosityBlockRange();
2215  }
2216 
2217  template<>
2218  std::vector<LuminosityBlockRange>
2219  ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(char const* name) const {
2221  }
2222 
2223  // ----------------------------------------------------------------------
2224  // PSet, vPSet
2225 
2226  template<>
2227  ParameterSet
2228  ParameterSet::getUntrackedParameter<ParameterSet>(char const* name, ParameterSet const& defaultValue) const {
2229  return getUntrackedParameterSet(name, defaultValue);
2230  }
2231 
2232  template<>
2234  ParameterSet::getUntrackedParameter<VParameterSet>(char const* name, VParameterSet const& defaultValue) const {
2235  return getUntrackedParameterSetVector(name, defaultValue);
2236  }
2237 
2238  template<>
2239  ParameterSet
2240  ParameterSet::getUntrackedParameter<ParameterSet>(std::string const& name, ParameterSet const& defaultValue) const {
2241  return getUntrackedParameterSet(name, defaultValue);
2242  }
2243 
2244  template<>
2246  ParameterSet::getUntrackedParameter<VParameterSet>(std::string const& name, VParameterSet const& defaultValue) const {
2247  return getUntrackedParameterSetVector(name, defaultValue);
2248  }
2249 
2250  template<>
2251  ParameterSet
2252  ParameterSet::getUntrackedParameter<ParameterSet>(char const* name) const {
2253  return getUntrackedParameterSet(name);
2254  }
2255 
2256  template<>
2258  ParameterSet::getUntrackedParameter<VParameterSet>(char const* name) const {
2259  return getUntrackedParameterSetVector(name);
2260  }
2261 
2262  template<>
2263  ParameterSet
2264  ParameterSet::getUntrackedParameter<ParameterSet>(std::string const& name) const {
2265  return getUntrackedParameterSet(name);
2266  }
2267 
2268  template<>
2270  ParameterSet::getUntrackedParameter<VParameterSet>(std::string const& name) const {
2271  return getUntrackedParameterSetVector(name);
2272  }
2273 
2274 //----------------------------------------------------------------------------------
2275 // specializations for addParameter and addUntrackedParameter
2276 
2277  template<>
2278  void
2279  ParameterSet::addParameter<ParameterSet>(std::string const& name, ParameterSet const& value) {
2280  invalidateRegistration(name);
2281  insertParameterSet(true, name, ParameterSetEntry(value, true));
2282  }
2283 
2284  template<>
2285  void
2286  ParameterSet::addParameter<VParameterSet>(std::string const& name, VParameterSet const& value) {
2287  invalidateRegistration(name);
2288  insertVParameterSet(true, name, VParameterSetEntry(value, true));
2289  }
2290 
2291  template<>
2292  void
2293  ParameterSet::addParameter<ParameterSet>(char const* name, ParameterSet const& value) {
2294  invalidateRegistration(name);
2295  insertParameterSet(true, name, ParameterSetEntry(value, true));
2296  }
2297 
2298  template<>
2299  void
2300  ParameterSet::addParameter<VParameterSet>(char const* name, VParameterSet const& value) {
2301  invalidateRegistration(name);
2302  insertVParameterSet(true, name, VParameterSetEntry(value, true));
2303  }
2304 
2305  template<>
2306  void
2307  ParameterSet::addUntrackedParameter<ParameterSet>(std::string const& name, ParameterSet const& value) {
2308  insertParameterSet(true, name, ParameterSetEntry(value, false));
2309  }
2310 
2311  template<>
2312  void
2313  ParameterSet::addUntrackedParameter<VParameterSet>(std::string const& name, VParameterSet const& value) {
2314  insertVParameterSet(true, name, VParameterSetEntry(value, false));
2315  }
2316 
2317  template<>
2318  void
2319  ParameterSet::addUntrackedParameter<ParameterSet>(char const* name, ParameterSet const& value) {
2320  insertParameterSet(true, name, ParameterSetEntry(value, false));
2321  }
2322 
2323  template<>
2324  void
2325  ParameterSet::addUntrackedParameter<VParameterSet>(char const* name, VParameterSet const& value) {
2326  insertVParameterSet(true, name, VParameterSetEntry(value, false));
2327  }
2328 
2329 //----------------------------------------------------------------------------------
2330 // specializations for getParameterNamesForType
2331 
2332  template<>
2333  std::vector<std::string>
2334  ParameterSet::getParameterNamesForType<ParameterSet>(bool trackiness) const {
2335  std::vector<std::string> output;
2336  getParameterSetNames(output, trackiness);
2337  return output;
2338  }
2339 
2340  template<>
2341  std::vector<std::string>
2342  ParameterSet::getParameterNamesForType<VParameterSet>(bool trackiness) const {
2343  std::vector<std::string> output;
2344  getParameterSetVectorNames(output, trackiness);
2345  return output;
2346  }
2347 
2348  ParameterSet const&
2350  return retrieveParameterSet(name).pset();
2351  }
2352 
2353  ParameterSet const&
2354  ParameterSet::getParameterSet(char const* name) const {
2355  return retrieveParameterSet(name).pset();
2356  }
2357 
2358  ParameterSet
2359  ParameterSet::getUntrackedParameterSet(std::string const& name, ParameterSet const& defaultValue) const {
2360  return getUntrackedParameterSet(name.c_str(), defaultValue);
2361  }
2362 
2363  ParameterSet
2364  ParameterSet::getUntrackedParameterSet(char const* name, ParameterSet const& defaultValue) const {
2365  ParameterSetEntry const* entryPtr = retrieveUntrackedParameterSet(name);
2366  if(entryPtr == nullptr) {
2367  return defaultValue;
2368  }
2369  return entryPtr->pset();
2370  }
2371 
2372  ParameterSet const&
2374  return getUntrackedParameterSet(name.c_str());
2375  }
2376 
2377  ParameterSet const&
2378  ParameterSet::getUntrackedParameterSet(char const* name) const {
2380  if(result == nullptr)
2381  throw Exception(errors::Configuration, "MissingParameter:")
2382  << "The required ParameterSet '" << name << "' was not specified.\n";
2383  return result->pset();
2384  }
2385 
2386  VParameterSet const&
2388  return retrieveVParameterSet(name).vpset();
2389  }
2390 
2391  VParameterSet const&
2392  ParameterSet::getParameterSetVector(char const* name) const {
2393  return retrieveVParameterSet(name).vpset();
2394  }
2395 
2398  return getUntrackedParameterSetVector(name.c_str(), defaultValue);
2399  }
2400 
2402  ParameterSet::getUntrackedParameterSetVector(char const* name, VParameterSet const& defaultValue) const {
2403  VParameterSetEntry const* entryPtr = retrieveUntrackedVParameterSet(name);
2404  return entryPtr == nullptr ? defaultValue : entryPtr->vpset();
2405  }
2406 
2407  VParameterSet const&
2409  return getUntrackedParameterSetVector(name.c_str());
2410  }
2411 
2412  VParameterSet const&
2415  if(result == nullptr)
2416  throw Exception(errors::Configuration, "MissingParameter:")
2417  << "The required ParameterSetVector '" << name << "' was not specified.\n";
2418  return result->vpset();
2419  }
2420 
2421 //----------------------------------------------------------------------------------
2424  if(a == ParameterSet::False || b == ParameterSet::False) {
2425  return ParameterSet::False;
2426  } else if(a == ParameterSet::Unknown || b == ParameterSet::Unknown) {
2427  return ParameterSet::Unknown;
2428  }
2429  return ParameterSet::True;
2430  }
2431 
2432 
2433 } // namespace edm
size
Write out results.
std::vector< unsigned > getVUInt32() const
Definition: Entry.cc:706
const double Pi
void setID(ParameterSetID const &id)
ParameterSetID const & mainParameterSetID() const
Entry const & retrieve(char const *) const
bool empty() const
Definition: ParameterSet.h:217
std::string toString() const
std::vector< double > getVDouble() const
Definition: Entry.cc:751
VParameterSet const & getParameterSetVector(std::string const &name) const
ParameterSetEntry const & retrieveParameterSet(std::string const &) const
ParameterSetID id_
Definition: ParameterSet.h:299
Entry const * getEntryPointerOrThrow_(std::string const &name) const
std::vector< unsigned long long > getVUInt64() const
Definition: Entry.cc:729
std::vector< LuminosityBlockID > getVLuminosityBlockID() const
Definition: Entry.cc:877
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:185
ParameterSet getPSet() const
Definition: Entry.cc:932
std::unique_ptr< ParameterSet > popParameterSet(std::string const &name)
std::string dump(unsigned int indent=0) const
int getInt32() const
Definition: Entry.cc:648
std::string dump(unsigned int indent=0) const
ParameterSetEntry const * retrieveUntrackedParameterSet(std::string const &) const
bool fromString(std::string const &)
std::string dump(unsigned int indent=0) const
unsigned getUInt32() const
Definition: Entry.cc:695
ParameterSetID id() const
VParameterSetEntry const * retrieveUntrackedVParameterSet(std::string const &) const
std::vector< ParameterSet > VParameterSet
Definition: ParameterSet.h:33
size_t getParameterSetVectorNames(std::vector< std::string > &output, bool trackiness=true) const
std::vector< InputTag > getVInputTag() const
Definition: Entry.cc:808
bool exists(std::string const &parameterName) const
checks if a parameter exists
void toStringImp(std::string &, bool useAll) const
void insert(bool ok_to_replace, char const *, Entry const &)
ParameterSet getUntrackedParameterSet(std::string const &name, ParameterSet const &defaultValue) const
void swap(Hash< I > &other)
Definition: Hash.h:210
MD5Result digest() const
Definition: Digest.cc:194
LuminosityBlockRange getLuminosityBlockRange() const
Definition: Entry.cc:887
uint16_t size_type
double getDouble() const
Definition: Entry.cc:740
std::vector< EventID > getVEventID() const
Definition: Entry.cc:854
ParameterSet const & getProcessParameterSetContainingModule(ModuleDescription const &moduleDescription)
ParameterSet trackedPart() const
void augment(ParameterSet const &from)
void eraseOrSetUntrackedParameterSet(std::string const &name)
void swap(ParameterSet &other)
U second(std::pair< T, U > const &p)
std::unique_ptr< ParameterDescriptionNode > operator&&(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
unsigned long long getUInt64() const
Definition: Entry.cc:718
char const * label
std::vector< FileInPath >::size_type getAllFileInPaths(std::vector< FileInPath > &output) const
ParameterSet const & pset() const
returns the PSet
void copyFrom(ParameterSet const &from, std::string const &name)
bool operator==(debugging_allocator< X > const &, debugging_allocator< Y > const &) noexcept
long long getInt64() const
Definition: Entry.cc:671
VParameterSetEntry * getPSetVectorForUpdate(std::string const &name)
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
bool isTracked() const
Definition: Entry.h:177
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:143
std::vector< ParameterSet > getVPSet() const
Definition: Entry.cc:943
ParameterSetEntry const * retrieveUnknownParameterSet(std::string const &) const
void insertVParameterSet(bool okay_to_replace, std::string const &name, VParameterSetEntry const &entry)
bool getBool() const
Definition: Entry.cc:636
InputTag getInputTag() const
Definition: Entry.cc:796
double f[11][100]
std::vector< ParameterSet > const & vpset() const
returns the VPSet
bool insertMapped(value_type const &v, bool forceUpdate=false)
Definition: Registry.cc:36
std::vector< long long > getVInt64() const
Definition: Entry.cc:682
VParameterSetEntry const * retrieveUnknownVParameterSet(std::string const &) const
bool split(OutIter result, std::string const &string_to_split, char first, char sep, char last)
Definition: split.h:88
#define end
Definition: vmac.h:39
Definition: value.py:1
std::vector< ESInputTag > getVESInputTag() const
Definition: Entry.cc:832
std::vector< std::string > getParameterNames() const
void eraseSimpleParameter(std::string const &name)
void copyForModify(ParameterSet const &other)
rep
Definition: cuy.py:1190
bool isRegistered() const
Definition: ParameterSet.h:64
std::vector< EventRange > getVEventRange() const
Definition: Entry.cc:920
Hash< ParameterSetType > ParameterSetID
void invalidateRegistration(std::string const &nameOfTracked)
Definition: ParameterSet.cc:33
friend std::ostream & operator<<(std::ostream &os, ParameterSet const &pset)
int k[5][pyjets_maxn]
std::string toString() const
static void registerFromString(std::string const &rep)
Definition: ParameterSet.cc:93
std::string getParameterAsString(std::string const &name) const
FileInPath getFileInPath() const
Definition: Entry.cc:785
psettable const & psetTable() const
Definition: ParameterSet.h:256
void deprecatedInputTagWarning(std::string const &name, std::string const &label) const
ForwardSequence::const_iterator find_in_all(ForwardSequence const &s, Datum const &d)
wrappers for std::find
Definition: Algorithms.h:32
ParameterSet const & getParameterSet(std::string const &) const
std::string toString() const
Definition: Digest.cc:87
size_t getNamesByCode_(char code, bool trackiness, std::vector< std::string > &output) const
void insertParameterSet(bool okay_to_replace, std::string const &name, ParameterSetEntry const &entry)
void toDigest(cms::Digest &digest) const
std::vector< int > getVInt32() const
Definition: Entry.cc:659
double b
Definition: hdecay.h:120
std::string toString() const
VParameterSetEntry const & retrieveVParameterSet(std::string const &) const
LuminosityBlockID getLuminosityBlockID() const
Definition: Entry.cc:866
void allToString(std::string &result) const
std::vector< ParameterSet > popVParameterSet(std::string const &name)
HLT enums.
vpsettable const & vpsetTable() const
Definition: ParameterSet.h:259
double a
Definition: hdecay.h:121
psettable psetTable_
Definition: ParameterSet.h:293
EventRange getEventRange() const
Definition: Entry.cc:909
VParameterSet getUntrackedParameterSetVector(std::string const &name, VParameterSet const &defaultValue) const
std::vector< LuminosityBlockRange > getVLuminosityBlockRange() const
Definition: Entry.cc:898
char typeCode() const
Definition: Entry.h:179
ESInputTag getESInputTag() const
Definition: Entry.cc:820
Entry const * retrieveUntracked(char const *) const
size_t getParameterSetNames(std::vector< std::string > &output, bool trackiness=true) const
Entry const * retrieveUnknown(char const *) const
T first(std::pair< T, U > const &p)
table const & tbl() const
Definition: ParameterSet.h:253
long double T
std::string toString() const
Definition: Entry.cc:606
static ParameterSetID emptyParameterSetID()
ParameterSet const & registerIt()
bool isTransientEqual(ParameterSet const &a, ParameterSet const &b)
std::vector< std::string > getVString() const
Definition: Entry.cc:773
std::string getString() const
Definition: Entry.cc:762
static Registry * instance()
Definition: Registry.cc:13
vpsettable vpsetTable_
Definition: ParameterSet.h:294
void append(std::string const &s)
Definition: Digest.cc:182
ParameterSet * getPSetForUpdate(std::string const &name, bool &isTracked)
EventID getEventID() const
Definition: Entry.cc:843