Jpp  debug
the software that should make you happy
JComplexPhase.hh
Go to the documentation of this file.
1 #ifndef __JOSCPROB__JCOMPLEXPHASE__
2 #define __JOSCPROB__JCOMPLEXPHASE__
3 
4 #include "JLang/JException.hh"
5 
6 #include "JTools/JGrid.hh"
7 
9 
10 
11 /**
12  * \author bjung, mdejong
13  */
14 
15 namespace JOSCPROB {}
16 namespace JPP { using namespace JOSCPROB; }
17 
18 namespace JOSCPROB {
19 
20  using JTOOLS::JGrid;
21 
22 
23  /**
24  * Implementation of oscillation complex phase.
25  */
26  template<class T>
27  struct JComplexPhase final :
28  public JOscParameter<T>
29  {
32 
36 
37 
38  /**
39  * Default constructor.
40  */
43  {}
44 
45 
46  /**
47  * Constructor.
48  *
49  * \param value complex phase value [rad]
50  */
51  explicit JComplexPhase(argument_type value) :
52  JOscParameter_t(value)
53  {
54  using namespace JPP;
55 
56  if (!is_valid()) {
57  THROW(JValueOutOfRange, "JComplexPhase::JComplexPhase(): Invalid complex phase " << value);
58  }
59  }
60 
61 
62  /**
63  * Assignment operator.
64  *
65  * \param value complex phase value [rad]
66  * \return complex phase
67  */
69  {
70  this->setValue(value);
71 
72  return *this;
73  }
74 
75 
76  /**
77  * Check validity of oscillation parameter.
78  *
79  * \return true if valid; else false
80  */
81  bool is_valid() const override final
82  {
83  const value_type phase = this->getValue();
84 
85  return this->isDefined() ? !(phase < 0.0 || phase > 2 * M_PI) : true;
86  }
87 
88 
89  /**
90  * Auxiliary function to create a complex phase parameter grid.
91  *
92  * \param value complex phase value [rad]
93  * \return complex phase parameter
94  */
96  {
97  return JComplexPhase_t(value);
98  }
99  };
100 
101 
102  /**
103  * Template specialization for parameter grid.
104  */
105  template<>
106  struct JComplexPhase<JGrid<double> > final :
107  public JOscParameter<JGrid<double> >
108  {
112 
114 
115 
116  /**
117  * Default constructor.
118  */
120  {}
121 
122 
123  /**
124  * Constructor.
125  *
126  * \param grid complex phase parameter grid [rad]
127  */
128  explicit JComplexPhase(const JGrid_t& grid) :
129  JOscParameter_t(grid)
130  {
131  using namespace JPP;
132 
133  if (!is_valid()) {
134  THROW(JValueOutOfRange, "JComplexPhase::JComplexPhase(): Invalid complex phase grid " << grid);
135  }
136  }
137 
138 
139  /**
140  * Constructor.
141  *
142  * \param nx number of elements
143  * \param xmin lower limit [rad]
144  * \param xmax upper limit [rad]
145  */
146  JComplexPhase(const int nx,
147  const double xmin,
148  const double xmax) :
150  {}
151 
152 
153  /**
154  * Constructor.
155  *
156  * \param value complex phase value [rad]
157  */
158  explicit JComplexPhase(const double value) :
159  JComplexPhase(1, value, value)
160  {}
161 
162 
163  /**
164  * Assignment operator.
165  *
166  * \param grid complex phase parameter grid [rad]
167  * \return complex phase
168  */
170  {
171  this->setValue(grid);
172 
173  return *this;
174  }
175 
176 
177  /**
178  * Check validity of oscillation parameter.
179  *
180  * \return true if valid; else false
181  */
182  bool is_valid() const override final
183  {
184  const double minPhase = this->getValue().getXmin();
185  const double maxPhase = this->getValue().getXmax();
186 
187  return (this->isDefined() ? !(minPhase < 0.0 || minPhase > 2 * M_PI ||
188  maxPhase < 0.0 || maxPhase > 2 * M_PI) : true);
189  }
190 
191 
192  /**
193  * Auxiliary function to create a complex phase parameter grid.
194  *
195  * \param value complex phase value [rad]
196  * \return complex phase parameter
197  */
198  static JComplexPhase_t make_parameter(const double value)
199  {
200  return JComplexPhase_t(value);
201  }
202  };
203 }
204 
205 #endif
Exceptions.
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:712
Parameter class.
Definition: JParameter.hh:36
const value_type getValue() const
Get value of parameter.
Definition: JParameter.hh:82
const bool isDefined() const
Get status of parameter.
Definition: JParameter.hh:116
JClass< T >::argument_type argument_type
Definition: JParameter.hh:39
JClass< T >::value_type value_type
Definition: JParameter.hh:40
Exception for accessing a value in a collection that is outside of its range.
Definition: JException.hh:180
const double xmax
Definition: JQuadrature.cc:24
const double xmin
Definition: JQuadrature.cc:23
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
static JComplexPhase_t make_parameter(const double value)
Auxiliary function to create a complex phase parameter grid.
JComplexPhase_t & operator=(const JGrid_t &grid)
Assignment operator.
JOscParameter_t::JParameter_t JParameter_t
JComplexPhase(const JGrid_t &grid)
Constructor.
bool is_valid() const override final
Check validity of oscillation parameter.
JComplexPhase(const int nx, const double xmin, const double xmax)
Constructor.
JComplexPhase(const double value)
Constructor.
Implementation of oscillation complex phase.
JComplexPhase(argument_type value)
Constructor.
JOscParameter_t::argument_type argument_type
JOscParameter_t::JParameter_t JParameter_t
bool is_valid() const override final
Check validity of oscillation parameter.
JComplexPhase()
Default constructor.
JOscParameter< T > JOscParameter_t
JComplexPhase_t & operator=(const value_type &value)
Assignment operator.
JComplexPhase< T > JComplexPhase_t
static JComplexPhase_t make_parameter(argument_type value)
Auxiliary function to create a complex phase parameter grid.
JOscParameter_t::value_type value_type
Abstract base class for oscillation parameter.
void setValue(const value_type &value)
Set parameter.
JParameter_t::argument_type argument_type
JParameter_t::value_type value_type
Simple data structure for an abstract collection of equidistant abscissa values.
Definition: JGrid.hh:40