CMS 3D CMS Logo

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