00001 #ifndef PATINTERFACES_SYSTEMATIC_REGISTRY_H 00002 #define PATINTERFACES_SYSTEMATIC_REGISTRY_H 00003 00004 // Author: Steve Farrell (steven.farrell@cern.ch) 00005 00006 // This module implements the central registry for handling systematic 00007 // uncertainties with CP tools. 00008 00009 #include <PATInterfaces/Global.h> 00010 #include <PATInterfaces/SystematicSet.h> 00011 00012 00013 namespace CP 00014 { 00015 00016 class SystematicRegistry 00017 { 00018 00019 public: 00021 static SystematicRegistry& getInstance(); 00022 00023 public: 00024 // Public accessors of systematic sets 00025 00027 const SystematicSet& globalSystematics() const; 00028 00030 const SystematicSet& recommendedSystematics() const; 00031 00032 public: 00033 // Interface methods for editing the registry 00034 00036 SystematicCode registerSystematics (const ISystematicsTool& tool); 00037 00039 void registerSystematic(const SystematicVariation& systematic); 00040 00043 void registerSystematics(const SystematicSet& systematics); 00044 00046 SystematicCode addSystematicToRecommended(const SystematicVariation& systematic); 00047 00049 SystematicCode addSystematicsToRecommended(const SystematicSet& systematics); 00050 00051 private: 00053 SystematicRegistry(); 00054 00055 private: 00056 // Sets of systematics in the registry 00057 00059 SystematicSet m_globalSystematics; 00060 00062 SystematicSet m_recommendedSystematics; 00063 00064 private: 00065 // Disallow copying of the registry. 00066 // These will not be implemented 00067 00069 SystematicRegistry(SystematicRegistry const&); 00071 void operator=(SystematicRegistry const&); 00072 00073 }; 00074 00075 } 00076 00077 00078 #endif