00001 #ifndef QUICK_ANA__TOOL_WRAPPER_H
00002 #define QUICK_ANA__TOOL_WRAPPER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <QuickAna/Global.h>
00016
00017 #include <AsgTools/AsgMessaging.h>
00018 #include <PATInterfaces/SystematicSet.h>
00019 #include <memory>
00020 #include <set>
00021 #include <unordered_map>
00022
00023 namespace CP
00024 {
00025 class SystematicSet;
00026 }
00027
00028 namespace ana
00029 {
00030
00033 class OptimizedTool : public asg::AsgMessaging
00034 {
00035
00036
00037
00038
00039
00040 OptimizedTool (const OptimizedTool&) = delete;
00041 OptimizedTool& operator = (const OptimizedTool&) = delete;
00042
00043
00047 public:
00048 void testInvariant () const;
00049
00050
00056 public:
00057 OptimizedTool (std::unique_ptr<IAnaTool> val_tool);
00058
00059
00065 public:
00066 ~OptimizedTool ();
00067
00068
00074 public:
00075 std::string name () const;
00076
00077
00081 public:
00082 AnalysisStep step () const;
00083
00084
00090 public:
00091 CP::SystematicSet affectingSystematics () const;
00092
00093
00099 public:
00100 CP::SystematicSet recommendedSystematics () const;
00101
00102
00109 public:
00110 StatusCode execute ();
00111
00112
00118 public:
00119 void fillEventDataSource (EventData& event) const;
00120
00121
00127 public:
00128 bool hasDirectInput (const OptimizedTool& input) const noexcept;
00129
00130
00136 public:
00137 bool hasOutput (const OptimizedTool *that) const noexcept;
00138
00139
00146 public:
00147 void addOutput (OptimizedTool *output);
00148
00149
00156 public:
00157 StatusCode configureSystematics (OptimizedStore *store);
00158
00159
00160
00161
00162
00163
00164
00166 private:
00167 IAnaTool *m_tool;
00168
00170 private:
00171 std::set<OptimizedTool*> m_inputs;
00172
00174 private:
00175 std::set<OptimizedTool*> m_outputs;
00176
00178 private:
00179 std::unordered_map<CP::SystematicSet,std::unique_ptr<OptimizedObjects>> m_objects;
00180 };
00181 }
00182
00183 #endif