MTF
FESM.h
1 #ifndef MTF_FESM_H
2 #define MTF_FESM_H
3 
4 #include "FESMBase.h"
5 
6 #define HessT FESMParams::HessType
7 #define JacT FESMParams::JacType
8 
9 
10 #define get_base_members() \
11  public: \
12  using FESMBase<AM, SSM> ::am; \
13  using FESMBase<AM, SSM> ::ssm; \
14  using FESMBase<AM, SSM> ::name; \
15  using FESMBase<AM, SSM> ::hess_order; \
16  using typename FESMBase<AM, SSM> ::ParamType; \
17  using typename FESMBase<AM, SSM> ::AMParams; \
18  using typename FESMBase<AM, SSM> ::SSMParams; \
19  using FESMBase<AM, SSM> ::params; \
20  using FESMBase<AM, SSM> ::jacobian; \
21  using FESMBase<AM, SSM> ::hessian; \
22  using FESMBase<AM, SSM> ::init_pix_jacobian; \
23  using FESMBase<AM, SSM> ::curr_pix_jacobian; \
24  using FESMBase<AM, SSM> ::mean_pix_jacobian; \
25  using FESMBase<AM, SSM> ::mean_pix_hessian; \
26  using FESMBase<AM, SSM> ::init_pix_hessian; \
27  using FESMBase<AM, SSM> ::curr_pix_hessian; \
28  using FESMBase<AM, SSM> ::updatePixHessian; \
29  FESM(const ParamType *esm_params = nullptr,const AMParams *am_params = nullptr,const SSMParams *ssm_params = nullptr)
30 
31 
32 _MTF_BEGIN_NAMESPACE
33 
34 template<class AM, class SSM,
35  HessT HT, JacT JT>
36 class FESM : public FESMBase < AM, SSM > {};
37 
38 // ----------------------------------------------------------------------------------------//
39 // ---------------------------------- JacT::Original ------------------------------------- //
40 // ----------------------------------------------------------------------------------------//
41 
42 template<class AM, class SSM >
43 class FESM<AM, SSM, HessT::Original, JacT::Original> :
44  public FESMBase < AM, SSM >{
45  get_base_members();
46 };
47 
48 template<class AM, class SSM>
49 class FESM<AM, SSM, HessT::SumOfStd, JacT::Original> :
50  public FESMBase < AM, SSM >{
51  get_base_members();
52 
53  void updateHessian() override;
54 };
55 template<class AM, class SSM>
56 class FESM<AM, SSM, HessT::SumOfSelf, JacT::Original> :
57  public FESMBase < AM, SSM >{
58  get_base_members();
59  using FESMBase<AM, SSM> ::init_self_hessian;
60  void initializeHessian() override;
61  void updateHessian() override;
62 };
63 template<class AM, class SSM>
64 class FESM<AM, SSM, HessT::InitialSelf, JacT::Original> :
65  public FESMBase < AM, SSM > {
66  get_base_members();
67  void initializeHessian() override;
68  void updateHessian() override {}
69 };
70 
71 template<class AM, class SSM>
72 class FESM<AM, SSM, HessT::CurrentSelf, JacT::Original> :
73  public FESMBase < AM, SSM >{
74  get_base_members();
75  void updateHessian() override;
76 };
77 
78 template<class AM, class SSM>
79 class FESM<AM, SSM, HessT::Std, JacT::Original> :
80  public FESMBase < AM, SSM >{
81  get_base_members();
82  void updateHessian() override;
83 };
84 
85 // ----------------------------------------------------------------------------------------//
86 // ---------------------------------- JacT::DiffOfJacs ---------------------------------- //
87 // ----------------------------------------------------------------------------------------//
88 
89 template<class AM, class SSM >
90 class FESM<AM, SSM, HessT::Original, JacT::DiffOfJacs> :
91  public FESMBase < AM, SSM >{
92  get_base_members();
93  void updateJacobian() override;
94 };
95 
96 template<class AM, class SSM>
97 class FESM<AM, SSM, HessT::SumOfStd, JacT::DiffOfJacs> :
98  public FESMBase < AM, SSM >{
99  get_base_members();
100  void updateJacobian() override;
101  void updateHessian() override;
102 };
103 template<class AM, class SSM>
104 class FESM<AM, SSM, HessT::SumOfSelf, JacT::DiffOfJacs> :
105  public FESMBase < AM, SSM >{
106  get_base_members();
107  using FESMBase<AM, SSM> ::init_self_hessian;
108  void updateJacobian() override;
109  void initializeHessian() override;
110  void updateHessian() override;
111 };
112 template<class AM, class SSM>
113 class FESM<AM, SSM, HessT::InitialSelf, JacT::DiffOfJacs> :
114  public FESMBase < AM, SSM >{
115  get_base_members();
116  void updateJacobian() override;
117  void initializeHessian() override;
118  void updateHessian() override {}
119 };
120 
121 template<class AM, class SSM>
122 class FESM<AM, SSM, HessT::CurrentSelf, JacT::DiffOfJacs> :
123  public FESMBase < AM, SSM >{
124  get_base_members();
125  void updateJacobian() override;
126  void updateHessian() override;
127 };
128 
129 template<class AM, class SSM>
130 class FESM<AM, SSM, HessT::Std, JacT::DiffOfJacs> :
131  public FESMBase < AM, SSM >{
132  get_base_members();
133  void updateJacobian() override;
134  void updateHessian() override;
135 };
136 
137 _MTF_END_NAMESPACE
138 
139 #endif
140 
Definition: FESM.h:36
Definition: FESMBase.h:64