SEP Solver Library  1.0
 All Classes Namespaces Files Functions Variables Typedefs Macros
Operator.h
Go to the documentation of this file.
1 #ifndef OPERATOR_H
2 #define OPERATOR_H 1
3 #include "Space.h"
4 #include "Vector.h"
5 #include <iostream>
6 
7 namespace SEP {
8 
9  class Map{
10  private:
11 
12  protected:
13 
14  public:
15  Map() {}
16  //Map(const Map &) {}
17  virtual ~Map() {;}
18 
20  void setDomain(Space *dom);
21  void setRange(Space *ran);
22  Space* getDomain(){ return domain;}
23  Space* getRange(){return range;}
24  void checkLogic(Vector *model,Vector *data);
25 
26  virtual bool Forward(bool add, Vector *model, Vector *data )=0; // MUST BE IMPLEMENTED
27  /*virtual bool ForwardAdd(bool add, Vector *model, Vector *data, float b){return false;}
28  virtual bool ForwardScaleAdd(bool add, Vector *model, Vector *data, Vector *scale, float b){return false;}*/
29 
30  virtual bool DerivForward(bool, Vector *, Vector *){
31  std::cout << "DerivForward needs concrete implementation. Parameters: \n";
32  std::cout << "bool add, Vector *model, Vector *data \n";
33  return false;
34  }
35 
36  /* virtual bool DerivForwardAdd(bool add, Vector *model, Vector *data, float b){return false;}
37  virtual bool DerivForwardScaleAdd(bool add, Vector *model, Vector *data, Vector *scale, float b){return false;}*/
38 
39  virtual bool CostFunction(){return false;}
40 
41 };
42 
43  /* class MultiMap: public Map{
44 
45  private:
46 
47  protected:
48 
49  public:
50  Map *m1, *m2;
51  MultiMap() {};
52  MultiMap(Map *m1, Map *m2);
53  virtual ~MultiMap() {};
54  Map *getMap1() {return m1;}
55  Map *getMap2() {return m2;}
56  void setDomain1(Space *dom);
57  void setDomain2(Space *dom);
58  void setRange1(Space *ran);
59  void setRange2(Space *ran);
60  Space* getDomain1(){return m1->getDomain();}
61  Space* getDomain2(){return m2->getDomain();}
62  void checkLogic(MultiVector *model, MultiVector *data); // *****need MultiVector*****
63 
64  virtual bool Forward(bool add, MultiVector *model, MultiVector *data){return false;}
65  // *********ForwardAdd, etc...*****
66 
67  virtual bool CostFunction(){return false;}
68  }
69 */
70 
71  class Operator: public Map{
72 
73  private:
74 
75  protected:
76 
77  public:
78  Operator() {}
79  Operator(const Operator &): Map() {}
80  virtual ~Operator() {};
81 
82  virtual bool Adjoint(bool add, Vector *model, Vector *data )=0; // MUST BE IMPLEMENTED FOR ALL OPERATORS
83  virtual bool AdjointAdd(bool, Vector *, Vector *, float){
84  std::cout << "AdjointAdd needs concrete implementation. Parameters: \n";
85  std::cout << "bool add, Vector *model, Vector *data, float b \n";
86  return false;
87  }
88  virtual bool AdjointScaleAdd(bool, Vector *, Vector *, Vector *, float){
89  std::cout << "AdjointScaleAdd needs concrete implementation. Parameters: \n";
90  std::cout << "bool add, Vector *model, Vector *data, Vector *scale, float b \n";
91  return false;
92  }
93 
94  virtual bool DerivAdjoint(bool, Vector *, Vector *){
95  std::cout << "DerivAdjoint needs concrete implementation. Parameters: \n";
96  std::cout << "bool add, Vector *model, Vector *data \n";
97  return false;
98  }
99 
100  virtual bool DerivAdjointAdd(bool, Vector *, Vector *, float){
101  std::cout << "DerivAdjoint needs concrete implementation. Parameters: \n";
102  std::cout << "bool add, Vector *model, Vector *data, float b \n";
103  return false;
104  }
105 
106  virtual bool DerivAdjointScaleAdd(bool, Vector *, Vector *, Vector *, float){
107  std::cout << "DerivAdjointScaleAdd needs concrete implementation. Parameters: \n";
108  std::cout << "bool add, Vector *model, Vector *data, Vector *scale, float b \n";
109  return false;
110  }
111 
112  bool DotTest(bool verb);
113 };
114 
115  class MultiOperator: public Operator{
116  private:
117  char multiType;
118  protected:
119 
120  public:
122  MultiOperator(const Operator &, const Operator &, char type){
123  multiType = type;
124  };
125  virtual ~MultiOperator() {};
126 
127  };
128 
129 }
130 #endif