CMS 3D CMS Logo

CMSSW_4_4_3_patch1/src/FWCore/ParameterSet/interface/ParameterSet.h

Go to the documentation of this file.
00001 #ifndef FWCore_ParameterSet_ParameterSet_h
00002 #define FWCore_ParameterSet_ParameterSet_h
00003 
00004 // ----------------------------------------------------------------------
00005 // Declaration for ParameterSet(parameter set) and related types
00006 // ----------------------------------------------------------------------
00007 
00008 // ----------------------------------------------------------------------
00009 // prolog
00010 
00011 // ----------------------------------------------------------------------
00012 // prerequisite source files and headers
00013 
00014 #include "DataFormats/Provenance/interface/ParameterSetID.h"
00015 #include "FWCore/ParameterSet/interface/Entry.h"
00016 #include "FWCore/ParameterSet/interface/FileInPath.h"
00017 #include "FWCore/ParameterSet/interface/ParameterSetEntry.h"
00018 #include "FWCore/ParameterSet/interface/VParameterSetEntry.h"
00019 
00020 #include <iosfwd>
00021 #include <map>
00022 #include <memory>
00023 #include <string>
00024 #include <vector>
00025 
00026 // ----------------------------------------------------------------------
00027 // contents
00028 namespace cms {
00029   class Digest;
00030 }
00031 
00032 namespace edm {
00033   typedef std::vector<ParameterSet> VParameterSet;
00034 
00035   class ParameterSet {
00036   public:
00037     enum Bool {
00038       False = 0,
00039       True = 1,
00040       Unknown = 2
00041     };
00042 
00043     // default-construct
00044     ParameterSet();
00045 
00046     // construct from coded string.
00047     explicit ParameterSet(std::string const& rep);
00048 
00049     // construct from coded string and id.  Will cause registration
00050     ParameterSet(std::string const& rep, ParameterSetID const& id);
00051 
00052     ~ParameterSet();
00053 
00054     // instantiate in this library, so these methods don't cause code bloat
00055     ParameterSet(ParameterSet const& other);
00056 
00057     ParameterSet const& operator=(ParameterSet const& other);
00058 
00059     void swap(ParameterSet& other);
00060 
00061     // identification
00062     ParameterSetID id() const;
00063     void setID(ParameterSetID const& id) const;
00064     bool isRegistered() const {return id_.isValid();}
00065     ParameterSetID trackedID() const {return id();} // to be phased out.
00066 
00067     // Entry-handling
00068     Entry const& retrieve(char const*) const;
00069     Entry const& retrieve(std::string const&) const;
00070     Entry const* const retrieveUntracked(char const*) const;
00071     Entry const* const retrieveUntracked(std::string const&) const;
00072     Entry const* const retrieveUnknown(char const*) const;
00073     Entry const* const retrieveUnknown(std::string const&) const;
00074     ParameterSetEntry const& retrieveParameterSet(std::string const&) const;
00075     ParameterSetEntry const* const retrieveUntrackedParameterSet(std::string const&) const;
00076     ParameterSetEntry const* const retrieveUnknownParameterSet(std::string const&) const;
00077     VParameterSetEntry const& retrieveVParameterSet(std::string const&) const;
00078     VParameterSetEntry const* const retrieveUntrackedVParameterSet(std::string const&) const;
00079     VParameterSetEntry const* const retrieveUnknownVParameterSet(std::string const&) const;
00080 
00081     void insertParameterSet(bool okay_to_replace, std::string const& name, ParameterSetEntry const& entry);
00082     void insertVParameterSet(bool okay_to_replace, std::string const& name, VParameterSetEntry const& entry);
00083     void insert(bool ok_to_replace, char const* , Entry const&);
00084     void insert(bool ok_to_replace, std::string const&, Entry const&);
00085     void augment(ParameterSet const& from);
00086     void copyFrom(ParameterSet const& from, std::string const& name);
00087     std::string getParameterAsString(std::string const& name) const;
00088 
00089     // encode only tracked parameters
00090     std::string toString() const;
00091     void toString(std::string& result) const;
00092     void toDigest(cms::Digest &digest) const;
00093 
00094     //encode tracked and untracked parameters
00095     void allToString(std::string& result) const;
00096 
00097     template<typename T>
00098     T
00099     getParameter(std::string const&) const;
00100 
00101     template<typename T>
00102     T
00103     getParameter(char const*) const;
00104 
00105     ParameterSet const&
00106     getParameterSet(std::string const&) const;
00107 
00108     ParameterSet const&
00109     getParameterSet(char const*) const;
00110 
00111     ParameterSet const&
00112     getUntrackedParameterSet(std::string const& name, ParameterSet const& defaultValue) const;
00113 
00114     ParameterSet const&
00115     getUntrackedParameterSet(char const* name, ParameterSet const& defaultValue) const;
00116 
00117     ParameterSet const&
00118     getUntrackedParameterSet(std::string const& name) const;
00119 
00120     ParameterSet const&
00121     getUntrackedParameterSet(char const* name) const;
00122 
00123     VParameterSet const&
00124     getParameterSetVector(std::string const& name) const;
00125 
00126     VParameterSet const&
00127     getParameterSetVector(char const* name) const;
00128 
00129     VParameterSet const&
00130     getUntrackedParameterSetVector(std::string const& name, VParameterSet const& defaultValue) const;
00131 
00132     VParameterSet const&
00133     getUntrackedParameterSetVector(char const* name, VParameterSet const& defaultValue) const;
00134 
00135     VParameterSet const&
00136     getUntrackedParameterSetVector(std::string const& name) const;
00137 
00138     VParameterSet const&
00139     getUntrackedParameterSetVector(char const* name) const;
00140 
00141     template<typename T>
00142     void
00143     addParameter(std::string const& name, T const& value) {
00144       invalidateRegistration(name);
00145       insert(true, name, Entry(name, value, true));
00146     }
00147 
00148     template<typename T>
00149     void
00150     addParameter(char const* name, T const& value) {
00151       invalidateRegistration(name);
00152       insert(true, name, Entry(name, value, true));
00153     }
00154 
00155     template<typename T>
00156     T
00157     getUntrackedParameter(std::string const&, T const&) const;
00158 
00159     template<typename T>
00160     T
00161     getUntrackedParameter(char const*, T const&) const;
00162 
00163     template<typename T>
00164     T
00165     getUntrackedParameter(std::string const&) const;
00166 
00167     template<typename T>
00168     T
00169     getUntrackedParameter(char const*) const;
00170 
00175     std::vector<FileInPath>::size_type
00176     getAllFileInPaths(std::vector<FileInPath>& output) const;
00177 
00178     std::vector<std::string> getParameterNames() const;
00179 
00181     bool exists(std::string const& parameterName) const;
00182 
00184     template<typename T>
00185     bool existsAs(std::string const& parameterName, bool trackiness=true) const {
00186        std::vector<std::string> names = getParameterNamesForType<T>(trackiness);
00187        return std::find(names.begin(), names.end(), parameterName) != names.end();
00188     }
00189 
00190     void deprecatedInputTagWarning(std::string const& name, std::string const& label) const;
00191 
00192     template<typename T>
00193     std::vector<std::string> getParameterNamesForType(bool trackiness = true) const {
00194       std::vector<std::string> result;
00195       // This is icky, but I don't know of another way in the current
00196       // code to get at the character code that denotes type T.
00197       T value = T();
00198       Entry type_translator("", value, trackiness);
00199       char type_code = type_translator.typeCode();
00200 
00201       (void)getNamesByCode_(type_code, trackiness, result);
00202       return result;
00203     }
00204 
00205     template<typename T>
00206     void
00207     addUntrackedParameter(std::string const& name, T const& value) {
00208       insert(true, name, Entry(name, value, false));
00209     }
00210 
00211     template<typename T>
00212     void
00213     addUntrackedParameter(char const* name, T const& value) {
00214       insert(true, name, Entry(name, value, false));
00215     }
00216 
00217     bool empty() const {
00218       return tbl_.empty() && psetTable_.empty() && vpsetTable_.empty();
00219     }
00220 
00221     ParameterSet trackedPart() const;
00222 
00223     // Return the names of all parameters of type ParameterSet,
00224     // pushing the names into the argument 'output'. Return the number
00225     // of names pushed into the vector. If 'trackiness' is true, we
00226     // return tracked parameters; if 'trackiness' is false, w return
00227     // untracked parameters.
00228     size_t getParameterSetNames(std::vector<std::string>& output,
00229                                 bool trackiness = true) const;
00230     size_t getParameterSetNames(std::vector<std::string>& output);
00231     // Return the names of all parameters of type
00232     // vector<ParameterSet>, pushing the names into the argument
00233     // 'output'. Return the number of names pushed into the vector. If
00234     // 'trackiness' is true, we return tracked parameters; if
00235     // 'trackiness' is false, w return untracked parameters.
00236     size_t getParameterSetVectorNames(std::vector<std::string>& output,
00237                                       bool trackiness=true) const;
00238 
00239     // need a simple interface for python
00240     std::string dump() const;
00241 
00242     friend std::ostream& operator << (std::ostream& os, ParameterSet const& pset);
00243 
00244     ParameterSet const& registerIt();
00245 
00246     std::auto_ptr<ParameterSet> popParameterSet(std::string const& name);
00247 
00248     std::auto_ptr<std::vector<ParameterSet> > popVParameterSet(std::string const& name);
00249 
00250     typedef std::map<std::string, Entry> table;
00251     table const& tbl() const {return tbl_;}
00252 
00253     typedef std::map<std::string, ParameterSetEntry> psettable;
00254     psettable const& psetTable() const {return psetTable_;}
00255 
00256     typedef std::map<std::string, VParameterSetEntry> vpsettable;
00257     vpsettable const& vpsetTable() const {return vpsetTable_;}
00258 
00259     ParameterSet*
00260     getPSetForUpdate(std::string const& name, bool& isTracked);
00261 
00262     ParameterSet*
00263     getPSetForUpdate(std::string const& name) {
00264       bool isTracked = false;
00265       return getPSetForUpdate(name, isTracked);
00266     }
00267 
00268     VParameterSetEntry*
00269     getPSetVectorForUpdate(std::string const& name);
00270 
00271   private:
00272     // decode
00273     bool fromString(std::string const&);
00274 
00275     void toStringImp(std::string&, bool useAll) const;
00276 
00277     table tbl_;
00278     psettable psetTable_;
00279     vpsettable vpsetTable_;
00280 
00281     // If the id_ is invalid, that means a new value should be
00282     // calculated before the value is returned. Upon registration, the
00283     // id_ is made valid. Updating any tracked parameter invalidates the id_.
00284     mutable ParameterSetID id_;
00285 
00286     void invalidateRegistration(std::string const& nameOfTracked) const;
00287 
00288     void calculateID();
00289 
00290     // get the untracked Entry object, throwing an exception if it is
00291     // not found.
00292     Entry const* getEntryPointerOrThrow_(std::string const& name) const;
00293     Entry const* getEntryPointerOrThrow_(char const* name) const;
00294 
00295     // Return the names of all the entries with the given typecode and
00296     // given status (trackiness)
00297     size_t getNamesByCode_(char code,
00298                            bool trackiness,
00299                            std::vector<std::string>& output) const;
00300 
00301 
00302   };  // ParameterSet
00303 
00304   inline
00305   void swap (ParameterSet& a, ParameterSet& b) {
00306     a.swap(b);
00307   }
00308 
00309   bool operator==(ParameterSet const& a, ParameterSet const& b);
00310 
00311   bool isTransientEqual(ParameterSet const& a, ParameterSet const& b);
00312 
00313   inline
00314   bool
00315   operator!=(ParameterSet const& a, ParameterSet const& b) {
00316     return !(a == b);
00317   }
00318 
00319   // Free function to retrieve a parameter set, given the parameter set ID.
00320   ParameterSet const&
00321   getParameterSet(ParameterSetID const& id);
00322 
00323   // specializations
00324   // ----------------------------------------------------------------------
00325 
00326   template<>
00327   bool
00328   ParameterSet::getParameter<bool>(std::string const& name) const;
00329 
00330   // ----------------------------------------------------------------------
00331   // Int32, vInt32
00332 
00333   template<>
00334   int
00335   ParameterSet::getParameter<int>(std::string const& name) const;
00336 
00337   template<>
00338   std::vector<int>
00339   ParameterSet::getParameter<std::vector<int> >(std::string const& name) const;
00340 
00341  // ----------------------------------------------------------------------
00342   // Int64, vInt64
00343 
00344   template<>
00345   long long
00346   ParameterSet::getParameter<long long>(std::string const& name) const;
00347 
00348   template<>
00349   std::vector<long long>
00350   ParameterSet::getParameter<std::vector<long long> >(std::string const& name) const;
00351 
00352   // ----------------------------------------------------------------------
00353   // Uint32, vUint32
00354 
00355   template<>
00356   unsigned int
00357   ParameterSet::getParameter<unsigned int>(std::string const& name) const;
00358 
00359   template<>
00360   std::vector<unsigned int>
00361   ParameterSet::getParameter<std::vector<unsigned int> >(std::string const& name) const;
00362 
00363   // ----------------------------------------------------------------------
00364   // Uint64, vUint64
00365 
00366   template<>
00367   unsigned long long
00368   ParameterSet::getParameter<unsigned long long>(std::string const& name) const;
00369 
00370   template<>
00371   std::vector<unsigned long long>
00372   ParameterSet::getParameter<std::vector<unsigned long long> >(std::string const& name) const;
00373 
00374   // ----------------------------------------------------------------------
00375   // Double, vDouble
00376 
00377   template<>
00378   double
00379   ParameterSet::getParameter<double>(std::string const& name) const;
00380 
00381   template<>
00382   std::vector<double>
00383   ParameterSet::getParameter<std::vector<double> >(std::string const& name) const;
00384 
00385   // ----------------------------------------------------------------------
00386   // String, vString
00387 
00388   template<>
00389   std::string
00390   ParameterSet::getParameter<std::string>(std::string const& name) const;
00391 
00392   template<>
00393   std::vector<std::string>
00394   ParameterSet::getParameter<std::vector<std::string> >(std::string const& name) const;
00395 
00396   // ----------------------------------------------------------------------
00397   // FileInPath
00398 
00399   template<>
00400   FileInPath
00401   ParameterSet::getParameter<FileInPath>(std::string const& name) const;
00402 
00403   // FileInPath can't default-construct something useful, so we specialize
00404   // this template
00405   template<>
00406   std::vector<std::string>
00407   ParameterSet::getParameterNamesForType<FileInPath>(bool trackiness) const;
00408 
00409   // ----------------------------------------------------------------------
00410   // InputTag
00411 
00412   template<>
00413   InputTag
00414   ParameterSet::getParameter<InputTag>(std::string const& name) const;
00415 
00416   // ----------------------------------------------------------------------
00417   // VInputTag
00418 
00419   template<>
00420   std::vector<InputTag>
00421   ParameterSet::getParameter<std::vector<InputTag> >(std::string const& name) const;
00422 
00423    // ----------------------------------------------------------------------
00424    // ESInputTag
00425 
00426    template<>
00427    ESInputTag
00428    ParameterSet::getParameter<ESInputTag>(std::string const& name) const;
00429 
00430    // ----------------------------------------------------------------------
00431    // VESInputTag
00432 
00433    template<>
00434    std::vector<ESInputTag>
00435    ParameterSet::getParameter<std::vector<ESInputTag> >(std::string const& name) const;
00436 
00437   // ----------------------------------------------------------------------
00438   // EventID
00439 
00440   template<>
00441   EventID
00442   ParameterSet::getParameter<EventID>(std::string const& name) const;
00443 
00444   // ----------------------------------------------------------------------
00445   // VEventID
00446 
00447   template<>
00448   std::vector<EventID>
00449   ParameterSet::getParameter<std::vector<EventID> >(std::string const& name) const;
00450 
00451   // ----------------------------------------------------------------------
00452   // LuminosityBlockID
00453 
00454   template<>
00455   LuminosityBlockID
00456   ParameterSet::getParameter<LuminosityBlockID>(std::string const& name) const;
00457 
00458   // ----------------------------------------------------------------------
00459   // VLuminosityBlockID
00460 
00461   template<>
00462   std::vector<LuminosityBlockID>
00463   ParameterSet::getParameter<std::vector<LuminosityBlockID> >(std::string const& name) const;
00464 
00465   // ----------------------------------------------------------------------
00466   // EventRange
00467 
00468   template<>
00469   EventRange
00470   ParameterSet::getParameter<EventRange>(std::string const& name) const;
00471 
00472   // ----------------------------------------------------------------------
00473   // VEventRange
00474 
00475   template<>
00476   std::vector<EventRange>
00477   ParameterSet::getParameter<std::vector<EventRange> >(std::string const& name) const;
00478 
00479   // ----------------------------------------------------------------------
00480   // LuminosityBlockRange
00481 
00482   template<>
00483   LuminosityBlockRange
00484   ParameterSet::getParameter<LuminosityBlockRange>(std::string const& name) const;
00485 
00486   // ----------------------------------------------------------------------
00487   // VLuminosityBlockRange
00488 
00489   template<>
00490   std::vector<LuminosityBlockRange>
00491   ParameterSet::getParameter<std::vector<LuminosityBlockRange> >(std::string const& name) const;
00492 
00493   // ----------------------------------------------------------------------
00494   // PSet, vPSet
00495 
00496   template<>
00497   ParameterSet
00498   ParameterSet::getParameter<ParameterSet>(std::string const& name) const;
00499 
00500   template<>
00501   VParameterSet
00502   ParameterSet::getParameter<VParameterSet>(std::string const& name) const;
00503 
00504   template<>
00505   void
00506   ParameterSet::addParameter<ParameterSet>(std::string const& name, ParameterSet const& value);
00507 
00508   template<>
00509   void
00510   ParameterSet::addParameter<ParameterSet>(char const* name, ParameterSet const& value);
00511 
00512   template<>
00513   void
00514   ParameterSet::addUntrackedParameter<ParameterSet>(std::string const& name, ParameterSet const& value);
00515 
00516   template<>
00517   void
00518   ParameterSet::addUntrackedParameter<ParameterSet>(char const* name, ParameterSet const& value);
00519 
00520   template<>
00521   void
00522   ParameterSet::addParameter<VParameterSet>(std::string const& name, VParameterSet const& value);
00523 
00524   template<>
00525   void
00526   ParameterSet::addParameter<VParameterSet>(char const* name, VParameterSet const& value);
00527 
00528   template<>
00529   void
00530   ParameterSet::addUntrackedParameter<VParameterSet>(std::string const& name, VParameterSet const& value);
00531 
00532   template<>
00533   void
00534   ParameterSet::addUntrackedParameter<VParameterSet>(char const* name, VParameterSet const& value);
00535 
00536   // untracked parameters
00537 
00538   // ----------------------------------------------------------------------
00539   // Bool, vBool
00540 
00541   template<>
00542   bool
00543   ParameterSet::getUntrackedParameter<bool>(std::string const& name, bool const& defaultValue) const;
00544 
00545   template<>
00546   bool
00547   ParameterSet::getUntrackedParameter<bool>(std::string const& name) const;
00548 
00549   // ----------------------------------------------------------------------
00550   // Int32, vInt32
00551 
00552   template<>
00553   int
00554   ParameterSet::getUntrackedParameter<int>(std::string const& name, int const& defaultValue) const;
00555 
00556   template<>
00557   int
00558   ParameterSet::getUntrackedParameter<int>(std::string const& name) const;
00559 
00560   template<>
00561   std::vector<int>
00562   ParameterSet::getUntrackedParameter<std::vector<int> >(std::string const& name, std::vector<int> const& defaultValue) const;
00563 
00564   template<>
00565   std::vector<int>
00566   ParameterSet::getUntrackedParameter<std::vector<int> >(std::string const& name) const;
00567 
00568   // ----------------------------------------------------------------------
00569   // Uint32, vUint32
00570 
00571   template<>
00572   unsigned int
00573   ParameterSet::getUntrackedParameter<unsigned int>(std::string const& name, unsigned int const& defaultValue) const;
00574 
00575   template<>
00576   unsigned int
00577   ParameterSet::getUntrackedParameter<unsigned int>(std::string const& name) const;
00578 
00579   template<>
00580   std::vector<unsigned int>
00581   ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(std::string const& name, std::vector<unsigned int> const& defaultValue) const;
00582 
00583   template<>
00584   std::vector<unsigned int>
00585   ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(std::string const& name) const;
00586 
00587   // ----------------------------------------------------------------------
00588   // Uint64, vUint64
00589 
00590   template<>
00591   unsigned long long
00592   ParameterSet::getUntrackedParameter<unsigned long long>(std::string const& name, unsigned long long const& defaultValue) const;
00593 
00594   template<>
00595   unsigned long long
00596   ParameterSet::getUntrackedParameter<unsigned long long>(std::string const& name) const;
00597 
00598   template<>
00599   std::vector<unsigned long long>
00600   ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(std::string const& name, std::vector<unsigned long long> const& defaultValue) const;
00601 
00602   template<>
00603   std::vector<unsigned long long>
00604   ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(std::string const& name) const;
00605 
00606   // ----------------------------------------------------------------------
00607   // Int64, Vint64
00608 
00609   template<>
00610   long long
00611   ParameterSet::getUntrackedParameter<long long>(std::string const& name, long long const& defaultValue) const;
00612 
00613   template<>
00614   long long
00615   ParameterSet::getUntrackedParameter<long long>(std::string const& name) const;
00616 
00617   template<>
00618   std::vector<long long>
00619   ParameterSet::getUntrackedParameter<std::vector<long long> >(std::string const& name, std::vector<long long> const& defaultValue) const;
00620 
00621   template<>
00622   std::vector<long long>
00623   ParameterSet::getUntrackedParameter<std::vector<long long> >(std::string const& name) const;
00624 
00625   // ----------------------------------------------------------------------
00626   // Double, vDouble
00627 
00628   template<>
00629   double
00630   ParameterSet::getUntrackedParameter<double>(std::string const& name, double const& defaultValue) const;
00631 
00632   template<>
00633   double
00634   ParameterSet::getUntrackedParameter<double>(std::string const& name) const;
00635 
00636   template<>
00637   std::vector<double>
00638   ParameterSet::getUntrackedParameter<std::vector<double> >(std::string const& name, std::vector<double> const& defaultValue) const;
00639 
00640   template<>
00641   std::vector<double>
00642   ParameterSet::getUntrackedParameter<std::vector<double> >(std::string const& name) const;
00643 
00644   // ----------------------------------------------------------------------
00645   // String, vString
00646 
00647   template<>
00648   std::string
00649   ParameterSet::getUntrackedParameter<std::string>(std::string const& name, std::string const& defaultValue) const;
00650 
00651   template<>
00652   std::string
00653   ParameterSet::getUntrackedParameter<std::string>(std::string const& name) const;
00654 
00655   template<>
00656   std::vector<std::string>
00657   ParameterSet::getUntrackedParameter<std::vector<std::string> >(std::string const& name, std::vector<std::string> const& defaultValue) const;
00658 
00659   template<>
00660   std::vector<std::string>
00661   ParameterSet::getUntrackedParameter<std::vector<std::string> >(std::string const& name) const;
00662 
00663   // ----------------------------------------------------------------------
00664   //  FileInPath
00665 
00666   template<>
00667   FileInPath
00668   ParameterSet::getUntrackedParameter<FileInPath>(std::string const& name, FileInPath const& defaultValue) const;
00669 
00670   template<>
00671   FileInPath
00672   ParameterSet::getUntrackedParameter<FileInPath>(std::string const& name) const;
00673 
00674   // ----------------------------------------------------------------------
00675   // InputTag, VInputTag
00676 
00677   template<>
00678   InputTag
00679   ParameterSet::getUntrackedParameter<InputTag>(std::string const& name, InputTag const& defaultValue) const;
00680 
00681   template<>
00682   InputTag
00683   ParameterSet::getUntrackedParameter<InputTag>(std::string const& name) const;
00684 
00685   template<>
00686   std::vector<InputTag>
00687   ParameterSet::getUntrackedParameter<std::vector<InputTag> >(std::string const& name,
00688                                       std::vector<InputTag> const& defaultValue) const;
00689 
00690   template<>
00691   std::vector<InputTag>
00692   ParameterSet::getUntrackedParameter<std::vector<InputTag> >(std::string const& name) const;
00693 
00694   // ----------------------------------------------------------------------
00695   // EventID, VEventID
00696 
00697   template<>
00698   EventID
00699   ParameterSet::getUntrackedParameter<EventID>(std::string const& name, EventID const& defaultValue) const;
00700 
00701   template<>
00702   EventID
00703   ParameterSet::getUntrackedParameter<EventID>(std::string const& name) const;
00704 
00705   template<>
00706   std::vector<EventID>
00707   ParameterSet::getUntrackedParameter<std::vector<EventID> >(std::string const& name,
00708                                       std::vector<EventID> const& defaultValue) const;
00709   template<>
00710   std::vector<EventID>
00711   ParameterSet::getUntrackedParameter<std::vector<EventID> >(std::string const& name) const;
00712 
00713   // ----------------------------------------------------------------------
00714   // LuminosityBlockID, VLuminosityBlockID
00715 
00716   template<>
00717   LuminosityBlockID
00718   ParameterSet::getUntrackedParameter<LuminosityBlockID>(std::string const& name, LuminosityBlockID const& defaultValue) const;
00719 
00720   template<>
00721   LuminosityBlockID
00722   ParameterSet::getUntrackedParameter<LuminosityBlockID>(std::string const& name) const;
00723 
00724   template<>
00725   std::vector<LuminosityBlockID>
00726   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(std::string const& name,
00727                                       std::vector<LuminosityBlockID> const& defaultValue) const;
00728   template<>
00729   std::vector<LuminosityBlockID>
00730   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(std::string const& name) const;
00731 
00732   // ----------------------------------------------------------------------
00733   // EventRange, VEventRange
00734 
00735   template<>
00736   EventRange
00737   ParameterSet::getUntrackedParameter<EventRange>(std::string const& name, EventRange const& defaultValue) const;
00738 
00739   template<>
00740   EventRange
00741   ParameterSet::getUntrackedParameter<EventRange>(std::string const& name) const;
00742 
00743   template<>
00744   std::vector<EventRange>
00745   ParameterSet::getUntrackedParameter<std::vector<EventRange> >(std::string const& name,
00746                                       std::vector<EventRange> const& defaultValue) const;
00747   template<>
00748   std::vector<EventRange>
00749   ParameterSet::getUntrackedParameter<std::vector<EventRange> >(std::string const& name) const;
00750 
00751   // ----------------------------------------------------------------------
00752   // LuminosityBlockRange, VLuminosityBlockRange
00753 
00754   template<>
00755   LuminosityBlockRange
00756   ParameterSet::getUntrackedParameter<LuminosityBlockRange>(std::string const& name, LuminosityBlockRange const& defaultValue) const;
00757 
00758   template<>
00759   LuminosityBlockRange
00760   ParameterSet::getUntrackedParameter<LuminosityBlockRange>(std::string const& name) const;
00761 
00762   template<>
00763   std::vector<LuminosityBlockRange>
00764   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(std::string const& name,
00765                                       std::vector<LuminosityBlockRange> const& defaultValue) const;
00766   template<>
00767   std::vector<LuminosityBlockRange>
00768   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(std::string const& name) const;
00769 
00770   // specializations
00771   // ----------------------------------------------------------------------
00772   // Bool, vBool
00773 
00774   template<>
00775   bool
00776   ParameterSet::getParameter<bool>(char const* name) const;
00777 
00778   // ----------------------------------------------------------------------
00779   // Int32, vInt32
00780 
00781   template<>
00782   int
00783   ParameterSet::getParameter<int>(char const* name) const;
00784 
00785   template<>
00786   std::vector<int>
00787   ParameterSet::getParameter<std::vector<int> >(char const* name) const;
00788 
00789  // ----------------------------------------------------------------------
00790   // Int64, vInt64
00791 
00792   template<>
00793   long long
00794   ParameterSet::getParameter<long long>(char const* name) const;
00795 
00796   template<>
00797   std::vector<long long>
00798   ParameterSet::getParameter<std::vector<long long> >(char const* name) const;
00799 
00800   // ----------------------------------------------------------------------
00801   // Uint32, vUint32
00802 
00803   template<>
00804   unsigned int
00805   ParameterSet::getParameter<unsigned int>(char const* name) const;
00806 
00807   template<>
00808   std::vector<unsigned int>
00809   ParameterSet::getParameter<std::vector<unsigned int> >(char const* name) const;
00810 
00811   // ----------------------------------------------------------------------
00812   // Uint64, vUint64
00813 
00814   template<>
00815   unsigned long long
00816   ParameterSet::getParameter<unsigned long long>(char const* name) const;
00817 
00818   template<>
00819   std::vector<unsigned long long>
00820   ParameterSet::getParameter<std::vector<unsigned long long> >(char const* name) const;
00821 
00822   // ----------------------------------------------------------------------
00823   // Double, vDouble
00824 
00825   template<>
00826   double
00827   ParameterSet::getParameter<double>(char const* name) const;
00828 
00829   template<>
00830   std::vector<double>
00831   ParameterSet::getParameter<std::vector<double> >(char const* name) const;
00832 
00833   // ----------------------------------------------------------------------
00834   // String, vString
00835 
00836   template<>
00837   std::string
00838   ParameterSet::getParameter<std::string>(char const* name) const;
00839 
00840   template<>
00841   std::vector<std::string>
00842   ParameterSet::getParameter<std::vector<std::string> >(char const* name) const;
00843 
00844   // ----------------------------------------------------------------------
00845   // FileInPath
00846 
00847   template<>
00848   FileInPath
00849   ParameterSet::getParameter<FileInPath>(char const* name) const;
00850 
00851   // ----------------------------------------------------------------------
00852   // InputTag
00853 
00854   template<>
00855   InputTag
00856   ParameterSet::getParameter<InputTag>(char const* name) const;
00857 
00858   // ----------------------------------------------------------------------
00859   // VInputTag
00860 
00861   template<>
00862   std::vector<InputTag>
00863   ParameterSet::getParameter<std::vector<InputTag> >(char const* name) const;
00864 
00865   // ----------------------------------------------------------------------
00866   // EventID
00867 
00868   template<>
00869   EventID
00870   ParameterSet::getParameter<EventID>(char const* name) const;
00871 
00872   // ----------------------------------------------------------------------
00873   // VEventID
00874 
00875   template<>
00876   std::vector<EventID>
00877   ParameterSet::getParameter<std::vector<EventID> >(char const* name) const;
00878 
00879   // ----------------------------------------------------------------------
00880   // LuminosityBlockID
00881 
00882   template<>
00883   LuminosityBlockID
00884   ParameterSet::getParameter<LuminosityBlockID>(char const* name) const;
00885 
00886   // ----------------------------------------------------------------------
00887   // VLuminosityBlockID
00888 
00889   template<>
00890   std::vector<LuminosityBlockID>
00891   ParameterSet::getParameter<std::vector<LuminosityBlockID> >(char const* name) const;
00892 
00893   // ----------------------------------------------------------------------
00894   // EventRange
00895 
00896   template<>
00897   EventRange
00898   ParameterSet::getParameter<EventRange>(char const* name) const;
00899 
00900   // ----------------------------------------------------------------------
00901   // VEventRange
00902 
00903   template<>
00904   std::vector<EventRange>
00905   ParameterSet::getParameter<std::vector<EventRange> >(char const* name) const;
00906 
00907   // ----------------------------------------------------------------------
00908   // LuminosityBlockRange
00909 
00910   template<>
00911   LuminosityBlockRange
00912   ParameterSet::getParameter<LuminosityBlockRange>(char const* name) const;
00913 
00914   // ----------------------------------------------------------------------
00915   // VLuminosityBlockRange
00916 
00917   template<>
00918   std::vector<LuminosityBlockRange>
00919   ParameterSet::getParameter<std::vector<LuminosityBlockRange> >(char const* name) const;
00920 
00921   // ----------------------------------------------------------------------
00922   // PSet, vPSet
00923 
00924   template<>
00925   ParameterSet
00926   ParameterSet::getParameter<ParameterSet>(char const* name) const;
00927 
00928   template<>
00929   VParameterSet
00930   ParameterSet::getParameter<VParameterSet>(char const* name) const;
00931 
00932   // untracked parameters
00933 
00934   // ----------------------------------------------------------------------
00935   // Bool, vBool
00936 
00937   template<>
00938   bool
00939   ParameterSet::getUntrackedParameter<bool>(char const* name, bool const& defaultValue) const;
00940 
00941   template<>
00942   bool
00943   ParameterSet::getUntrackedParameter<bool>(char const* name) const;
00944 
00945   // ----------------------------------------------------------------------
00946   // Int32, vInt32
00947 
00948   template<>
00949   int
00950   ParameterSet::getUntrackedParameter<int>(char const* name, int const& defaultValue) const;
00951 
00952   template<>
00953   int
00954   ParameterSet::getUntrackedParameter<int>(char const* name) const;
00955 
00956   template<>
00957   std::vector<int>
00958   ParameterSet::getUntrackedParameter<std::vector<int> >(char const* name, std::vector<int> const& defaultValue) const;
00959 
00960   template<>
00961   std::vector<int>
00962   ParameterSet::getUntrackedParameter<std::vector<int> >(char const* name) const;
00963 
00964   // ----------------------------------------------------------------------
00965   // Uint32, vUint32
00966 
00967   template<>
00968   unsigned int
00969   ParameterSet::getUntrackedParameter<unsigned int>(char const* name, unsigned int const& defaultValue) const;
00970 
00971   template<>
00972   unsigned int
00973   ParameterSet::getUntrackedParameter<unsigned int>(char const* name) const;
00974 
00975   template<>
00976   std::vector<unsigned int>
00977   ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(char const* name, std::vector<unsigned int> const& defaultValue) const;
00978 
00979   template<>
00980   std::vector<unsigned int>
00981   ParameterSet::getUntrackedParameter<std::vector<unsigned int> >(char const* name) const;
00982 
00983   // ----------------------------------------------------------------------
00984   // Uint64, vUint64
00985 
00986   template<>
00987   unsigned long long
00988   ParameterSet::getUntrackedParameter<unsigned long long>(char const* name, unsigned long long const& defaultValue) const;
00989 
00990   template<>
00991   unsigned long long
00992   ParameterSet::getUntrackedParameter<unsigned long long>(char const* name) const;
00993 
00994   template<>
00995   std::vector<unsigned long long>
00996   ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(char const* name, std::vector<unsigned long long> const& defaultValue) const;
00997 
00998   template<>
00999   std::vector<unsigned long long>
01000   ParameterSet::getUntrackedParameter<std::vector<unsigned long long> >(char const* name) const;
01001 
01002   // ----------------------------------------------------------------------
01003   // Int64, Vint64
01004 
01005   template<>
01006   long long
01007   ParameterSet::getUntrackedParameter<long long>(char const* name, long long const& defaultValue) const;
01008 
01009   template<>
01010   long long
01011   ParameterSet::getUntrackedParameter<long long>(char const* name) const;
01012 
01013   template<>
01014   std::vector<long long>
01015   ParameterSet::getUntrackedParameter<std::vector<long long> >(char const* name, std::vector<long long> const& defaultValue) const;
01016 
01017   template<>
01018   std::vector<long long>
01019   ParameterSet::getUntrackedParameter<std::vector<long long> >(char const* name) const;
01020 
01021   // ----------------------------------------------------------------------
01022   // Double, vDouble
01023 
01024   template<>
01025   double
01026   ParameterSet::getUntrackedParameter<double>(char const* name, double const& defaultValue) const;
01027 
01028   template<>
01029   double
01030   ParameterSet::getUntrackedParameter<double>(char const* name) const;
01031 
01032   template<>
01033   std::vector<double>
01034   ParameterSet::getUntrackedParameter<std::vector<double> >(char const* name, std::vector<double> const& defaultValue) const;
01035 
01036   template<>
01037   std::vector<double>
01038   ParameterSet::getUntrackedParameter<std::vector<double> >(char const* name) const;
01039 
01040   // ----------------------------------------------------------------------
01041   // String, vString
01042 
01043   template<>
01044   std::string
01045   ParameterSet::getUntrackedParameter<std::string>(char const* name, std::string const& defaultValue) const;
01046 
01047   template<>
01048   std::string
01049   ParameterSet::getUntrackedParameter<std::string>(char const* name) const;
01050 
01051   template<>
01052   std::vector<std::string>
01053   ParameterSet::getUntrackedParameter<std::vector<std::string> >(char const* name, std::vector<std::string> const& defaultValue) const;
01054 
01055   template<>
01056   std::vector<std::string>
01057   ParameterSet::getUntrackedParameter<std::vector<std::string> >(char const* name) const;
01058 
01059   // ----------------------------------------------------------------------
01060   //  FileInPath
01061 
01062   template<>
01063   FileInPath
01064   ParameterSet::getUntrackedParameter<FileInPath>(char const* name, FileInPath const& defaultValue) const;
01065 
01066   template<>
01067   FileInPath
01068   ParameterSet::getUntrackedParameter<FileInPath>(char const* name) const;
01069 
01070   // ----------------------------------------------------------------------
01071   // InputTag, VInputTag
01072 
01073   template<>
01074   InputTag
01075   ParameterSet::getUntrackedParameter<InputTag>(char const* name, InputTag const& defaultValue) const;
01076 
01077   template<>
01078   InputTag
01079   ParameterSet::getUntrackedParameter<InputTag>(char const* name) const;
01080 
01081   template<>
01082   std::vector<InputTag>
01083   ParameterSet::getUntrackedParameter<std::vector<InputTag> >(char const* name,
01084                                       std::vector<InputTag> const& defaultValue) const;
01085 
01086   template<>
01087   std::vector<InputTag>
01088   ParameterSet::getUntrackedParameter<std::vector<InputTag> >(char const* name) const;
01089 
01090   // ----------------------------------------------------------------------
01091   // EventID, VEventID
01092 
01093   template<>
01094   EventID
01095   ParameterSet::getUntrackedParameter<EventID>(char const* name, EventID const& defaultValue) const;
01096 
01097   template<>
01098   EventID
01099   ParameterSet::getUntrackedParameter<EventID>(char const* name) const;
01100 
01101   template<>
01102   std::vector<EventID>
01103   ParameterSet::getUntrackedParameter<std::vector<EventID> >(char const* name,
01104                                       std::vector<EventID> const& defaultValue) const;
01105   template<>
01106   std::vector<EventID>
01107   ParameterSet::getUntrackedParameter<std::vector<EventID> >(char const* name) const;
01108 
01109   // ----------------------------------------------------------------------
01110   // LuminosityBlockID, VLuminosityBlockID
01111 
01112   template<>
01113   LuminosityBlockID
01114   ParameterSet::getUntrackedParameter<LuminosityBlockID>(char const* name, LuminosityBlockID const& defaultValue) const;
01115 
01116   template<>
01117   LuminosityBlockID
01118   ParameterSet::getUntrackedParameter<LuminosityBlockID>(char const* name) const;
01119 
01120   template<>
01121   std::vector<LuminosityBlockID>
01122   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(char const* name,
01123                                       std::vector<LuminosityBlockID> const& defaultValue) const;
01124   template<>
01125   std::vector<LuminosityBlockID>
01126   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockID> >(char const* name) const;
01127 
01128   // ----------------------------------------------------------------------
01129   // EventRange, VEventRange
01130 
01131   template<>
01132   EventRange
01133   ParameterSet::getUntrackedParameter<EventRange>(char const* name, EventRange const& defaultValue) const;
01134 
01135   template<>
01136   EventRange
01137   ParameterSet::getUntrackedParameter<EventRange>(char const* name) const;
01138 
01139   template<>
01140   std::vector<EventRange>
01141   ParameterSet::getUntrackedParameter<std::vector<EventRange> >(char const* name,
01142                                       std::vector<EventRange> const& defaultValue) const;
01143   template<>
01144   std::vector<EventRange>
01145   ParameterSet::getUntrackedParameter<std::vector<EventRange> >(char const* name) const;
01146 
01147   // ----------------------------------------------------------------------
01148   // LuminosityBlockRange, VLuminosityBlockRange
01149 
01150   template<>
01151   LuminosityBlockRange
01152   ParameterSet::getUntrackedParameter<LuminosityBlockRange>(char const* name, LuminosityBlockRange const& defaultValue) const;
01153 
01154   template<>
01155   LuminosityBlockRange
01156   ParameterSet::getUntrackedParameter<LuminosityBlockRange>(char const* name) const;
01157 
01158   template<>
01159   std::vector<LuminosityBlockRange>
01160   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(char const* name,
01161                                       std::vector<LuminosityBlockRange> const& defaultValue) const;
01162   template<>
01163   std::vector<LuminosityBlockRange>
01164   ParameterSet::getUntrackedParameter<std::vector<LuminosityBlockRange> >(char const* name) const;
01165 
01166   // ----------------------------------------------------------------------
01167   // PSet, vPSet
01168 
01169   template<>
01170   ParameterSet
01171   ParameterSet::getUntrackedParameter<ParameterSet>(char const* name, ParameterSet const& defaultValue) const;
01172 
01173   template<>
01174   ParameterSet
01175   ParameterSet::getUntrackedParameter<ParameterSet>(std::string const& name, ParameterSet const& defaultValue) const;
01176 
01177   template<>
01178   ParameterSet
01179   ParameterSet::getUntrackedParameter<ParameterSet>(char const* name) const;
01180 
01181   template<>
01182   ParameterSet
01183   ParameterSet::getUntrackedParameter<ParameterSet>(std::string const& name) const;
01184 
01185   template<>
01186   VParameterSet
01187   ParameterSet::getUntrackedParameter<VParameterSet>(char const* name, VParameterSet const& defaultValue) const;
01188 
01189   template<>
01190   VParameterSet
01191   ParameterSet::getUntrackedParameter<VParameterSet>(char const* name) const;
01192 
01193   template<>
01194   VParameterSet
01195   ParameterSet::getUntrackedParameter<VParameterSet>(std::string const& name, VParameterSet const& defaultValue) const;
01196 
01197   template<>
01198   VParameterSet
01199   ParameterSet::getUntrackedParameter<VParameterSet>(std::string const& name) const;
01200 
01201   template<>
01202   std::vector<std::string>
01203   ParameterSet::getParameterNamesForType<ParameterSet>(bool trackiness) const;
01204 
01205   template<>
01206   std::vector<std::string>
01207   ParameterSet::getParameterNamesForType<VParameterSet>(bool trackiness) const;
01208 
01209   ParameterSet::Bool
01210   operator&&(ParameterSet::Bool a, ParameterSet::Bool b);
01211 
01212 }  // namespace edm
01213 #endif