Jpp master_rocky-44-g75b7c4f75
the software that should make you happy
Loading...
Searching...
No Matches
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
15namespace JOSCPROB {}
16namespace JPP { using namespace JOSCPROB; }
17
18namespace 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 */
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 */
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) :
149 JOscParameter_t(JGrid_t(nx, xmin, 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.
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.
Exception for accessing a value in a collection that is outside of its range.
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.
JOscParameter_t::JParameter_t JParameter_t
JComplexPhase(const JGrid_t &grid)
Constructor.
JComplexPhase_t & operator=(const JGrid_t &grid)
Assignment operator.
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 > JOscParameter_t
bool is_valid() const override final
Check validity of oscillation parameter.
JComplexPhase()
Default constructor.
JComplexPhase_t & operator=(const value_type &value)
Assignment operator.
JOscParameter_t::argument_type argument_type
JComplexPhase< T > JComplexPhase_t
JOscParameter_t::JParameter_t JParameter_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