00001 #ifndef ANP_ALGADAPT_H
00002 #define ANP_ALGADAPT_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <iostream>
00016 #include <string>
00017 #include <vector>
00018
00019
00020 #include "Handle.h"
00021 #include "RecoNu.h"
00022 #include "TrueNu.h"
00023
00024 class Registry;
00025 class TDirectory;
00026
00027 namespace Anp
00028 {
00029 class AlgAdapt: public virtual Base
00030 {
00031 public:
00032
00033 AlgAdapt();
00034 virtual ~AlgAdapt();
00035
00036 virtual bool Init() = 0;
00037
00038 virtual long double GetPT() const;
00039
00040 virtual unsigned int GetNPar() const = 0;
00041
00042 virtual void InitReco(RecoNu &) const;
00043 virtual void InitTrue(TrueNu &) const;
00044
00045 virtual double GetWeight(RecoNu &, const TrueNu &) const;
00046
00047 virtual double GetReco(RecoNu &) const = 0;
00048 virtual double GetTrue(const TrueNu &) const = 0;
00049
00050 virtual const std::vector<double>& Get(const std::string &key) const;
00051
00052 virtual void Set(const std::vector<double> &dvec, const std::string &key);
00053
00054 virtual const std::vector<std::string>& GetParName() const;
00055
00056 virtual void Config(const Registry &) = 0;
00057
00058 virtual void Print(std::ostream &os = std::cout) const;
00059
00060 const std::string& GetName() const;
00061 void SetName(const std::string &name);
00062
00063 protected:
00064
00065 void ReadVec(const std::string &prefix, const Registry ®);
00066
00067 const std::vector<double> GetVec(const std::string &key, const Registry ®) const;
00068
00069 void PrintVec(std::ostream &o, int w=7, int p=5) const;
00070
00071 void PrintVec(const std::vector<double> &v, std::ostream &o, int w=7, int p=5) const;
00072
00073 protected:
00074
00075
00076
00077
00078 std::vector<double> fCurErr;
00079 std::vector<double> fCurPar;
00080 std::vector<double> fDefErr;
00081 std::vector<double> fDefPar;
00082
00083 std::vector<std::string> fParName;
00084
00085 std::string fName;
00086 };
00087
00088 typedef Anp::Handle<Anp::AlgAdapt> AlgAdaptPtr;
00089
00090
00091
00092
00093 inline const std::vector<std::string>& AlgAdapt::GetParName() const
00094 {
00095 return fParName;
00096 }
00097
00098 inline void AlgAdapt::InitReco(RecoNu &) const {}
00099 inline void AlgAdapt::InitTrue(TrueNu &) const {}
00100
00101 inline double AlgAdapt::GetWeight(RecoNu &, const TrueNu &) const { return 1.0; }
00102
00103 inline const std::string& AlgAdapt::GetName() const { return fName; }
00104 inline void AlgAdapt::SetName(const std::string &name) { fName = name; }
00105 }
00106
00107 #endif