YAP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
CachedValue.h
Go to the documentation of this file.
1 /* YAP - Yet another PWA toolkit
2  Copyright 2015, Technische Universitaet Muenchen,
3  Authors: Daniel Greenwald, Johannes Rauch
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18 
20 
21 #ifndef yap_CachedValue_h
22 #define yap_CachedValue_h
23 
24 #include "fwd/CachedValue.h"
25 #include "fwd/CalculationStatus.h"
26 #include "fwd/FourVector.h"
27 #include "fwd/Parameter.h"
28 #include "fwd/ParticleCombination.h"
29 #include "fwd/StatusManager.h"
30 #include "fwd/VariableStatus.h"
31 
32 #include "DataAccessor.h"
33 #include "DataPoint.h"
34 
35 #include <complex>
36 #include <memory>
37 #include <set>
38 #include <string>
39 #include <utility>
40 #include <vector>
41 
42 namespace yap {
43 
48 class CachedValue : public std::enable_shared_from_this<CachedValue>
49 {
50 
51 protected:
52 
56  CachedValue(unsigned size, DataAccessor& da);
57 
58 public:
59 
61  struct Status {
62 
64  Status();
65 
67  CalculationStatus Calculation;
68 
71 
73  Status& operator=(const CalculationStatus& s)
74  { Calculation = s; return *this; }
75 
78  Status& operator=(const VariableStatus& s);
79  };
80 
83 
86  { return Owner_; }
87 
89  const int index() const
90  { return Index_; }
91 
97  inline const double value(unsigned index, const DataPoint& d, unsigned sym_index) const
98  { return d.Data_[Owner_->index()][sym_index][Position_ + index]; }
99 
101  virtual const unsigned size() const
102  { return Size_; }
103 
105 
108 
115  void setValue(unsigned index, double val, DataPoint& d, unsigned sym_index) const
116  { d.Data_[Owner_->index()][sym_index][Position_ + index] = val; }
117 
119 
121  friend class DataAccessor;
122 
123 protected:
124 
126  void addToDataAccessor();
127 
129  void setIndex(int i)
130  { Index_ = i; }
131 
133  void setPosition(int p)
134  { Position_ = p; }
135 
136 private:
137 
140 
142  int Index_;
143 
146 
148  unsigned Size_;
149 
150 };
151 
153 inline bool operator==(const CachedValue::Status& S, const CalculationStatus& s)
154 { return S.Calculation == s; }
155 
157 inline bool operator!=(const CachedValue::Status& S, const CalculationStatus& s)
158 { return S.Calculation != s; }
159 
161 inline bool operator==(const CachedValue::Status& S, const VariableStatus& s)
162 { return S.Variable == s; }
163 
165 inline bool operator!=(const CachedValue::Status& S, const VariableStatus& s)
166 { return S.Variable != s; }
167 
169 std::string to_string(const CachedValue::Status& S);
170 
177 {
178 private:
179 
182 
183 public:
184 
187  static std::shared_ptr<RealCachedValue> create(DataAccessor& da);
188 
195  void setValue(double val, DataPoint& d, unsigned sym_index, StatusManager& sm) const;
196 
202  void setValue(double val, DataPoint& d, unsigned sym_index) const
203  { CachedValue::setValue(0, val, d, sym_index); }
204 
209  const double value(const DataPoint& d, unsigned sym_index) const
210  { return CachedValue::value(0, d, sym_index); }
211 
212 };
213 
220 {
221 private:
222 
226 
227 public:
228 
231  static std::shared_ptr<ComplexCachedValue> create(DataAccessor& da);
232 
239  void setValue(const std::complex<double>& val, DataPoint& d, unsigned sym_index, StatusManager& sm) const
240  { setValue(real(val), imag(val), d, sym_index, sm); }
241 
249  void setValue(double val_re, double val_im, DataPoint& d, unsigned sym_index, StatusManager& sm) const;
250 
256  void setValue(const std::complex<double>& val, DataPoint& d, unsigned sym_index) const
257  { setValue(real(val), imag(val), d, sym_index); }
258 
265  void setValue(double val_re, double val_im, DataPoint& d, unsigned sym_index) const
266  { CachedValue::setValue(0, val_re, d, sym_index); CachedValue::setValue(1, val_im, d, sym_index); }
267 
272  const std::complex<double> value(const DataPoint& d, unsigned sym_index) const
273  { return std::complex<double>(CachedValue::value(0, d, sym_index), CachedValue::value(1, d, sym_index)); }
274 
275 };
276 
283 {
284 private:
285 
289 
290 public:
291 
294  static std::shared_ptr<FourVectorCachedValue> create(DataAccessor& da);
295 
302  void setValue(const FourVector<double>& val, DataPoint& d, unsigned sym_index, StatusManager& sm) const;
303 
309  void setValue(const FourVector<double>& val, DataPoint& d, unsigned sym_index) const;
310 
315  const FourVector<double> value(const DataPoint& d, unsigned sym_index) const;
316 
317 };
318 
319 }
320 
321 #endif
void setValue(double val, DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:202
RealIntegralElement real(const ComplexIntegralElement &Z)
Definition: IntegralElement.h:144
void addToDataAccessor()
add to the Owner_
Definition: CachedValue.cxx:45
bool operator==(const CachedValue::Status &S, const CalculationStatus &s)
equality operator for checking the CalculationStatus
Definition: CachedValue.h:153
CalculationStatus Calculation
Calculation status.
Definition: CachedValue.h:67
Class for managing a single real cached value inside a #DataPoint.
Definition: CachedValue.h:176
void setValue(const std::complex< double > &val, DataPoint &d, unsigned sym_index, StatusManager &sm) const
Definition: CachedValue.h:239
VariableStatus
Definition: VariableStatus.h:29
Class for managing a complex cached value inside a #DataPoint.
Definition: CachedValue.h:219
DataAccessor * owner() const
Definition: CachedValue.h:85
unsigned Size_
Size of cached value (number of real elements)
Definition: CachedValue.h:148
Four-Vector handling.
Definition: FourVector.h:41
Status & operator=(const CalculationStatus &s)
assignment of Calculation
Definition: CachedValue.h:73
void setValue(double val_re, double val_im, DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:265
int Position_
Position of first element of cached value within data vector.
Definition: CachedValue.h:145
void setIndex(int i)
set index
Definition: CachedValue.h:129
static std::shared_ptr< ComplexCachedValue > create(DataAccessor &da)
Definition: CachedValue.cxx:71
bool operator!=(const CachedValue::Status &S, const CalculationStatus &s)
inequality operator for checking the CalculationStatus
Definition: CachedValue.h:157
static std::shared_ptr< FourVectorCachedValue > create(DataAccessor &da)
Definition: CachedValue.cxx:95
DataAccessor * Owner_
Owning DataAccessor.
Definition: CachedValue.h:139
Class for holding data and cached values per data point for fast calculation.
Definition: DataPoint.h:35
void setValue(double val, DataPoint &d, unsigned sym_index, StatusManager &sm) const
Definition: CachedValue.cxx:60
Class for managing a four-vector cached value inside a #DataPoint.
Definition: CachedValue.h:282
std::vector< std::vector< std::vector< double > > > Data_
Definition: DataPoint.h:77
CachedValue(unsigned size, DataAccessor &da)
Definition: CachedValue.cxx:33
const double value(unsigned index, const DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:97
const double value(const DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:209
Status()
constructor
Definition: CachedValue.cxx:14
FourVectorCachedValue(DataAccessor &da)
Definition: CachedValue.h:288
void setPosition(int p)
set position
Definition: CachedValue.h:133
void setValue(unsigned index, double val, DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:115
Definition: StatusManager.h:32
stores calculation and variable statuses for a CachedValue
Definition: CachedValue.h:61
const std::complex< double > value(const DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:272
Class for managing cached values inside a DataPoint.
Definition: CachedValue.h:48
void setValue(const FourVector< double > &val, DataPoint &d, unsigned sym_index, StatusManager &sm) const
Definition: CachedValue.cxx:120
const int index() const
Definition: CachedValue.h:89
VariableStatus Variable
Variable status.
Definition: CachedValue.h:70
Abstract base class for all objects accessing DataPoint's.
Definition: DataAccessor.h:38
const FourVector< double > value(const DataPoint &d, unsigned sym_index) const
Definition: CachedValue.cxx:103
std::string to_string(const CachedValue::Status &S)
streaming operator for CachedValue::Status
Definition: CachedValue.cxx:27
RealCachedValue(DataAccessor &da)
Constructor.
Definition: CachedValue.h:181
void setValue(const std::complex< double > &val, DataPoint &d, unsigned sym_index) const
Definition: CachedValue.h:256
virtual const unsigned size() const
Definition: CachedValue.h:101
int Index_
index within owner
Definition: CachedValue.h:142
static std::shared_ptr< RealCachedValue > create(DataAccessor &da)
Definition: CachedValue.cxx:52
RealIntegralElement imag(const ComplexIntegralElement &Z)
Definition: IntegralElement.h:148
ComplexCachedValue(DataAccessor &da)
Definition: CachedValue.h:225
int index() const
Definition: DataAccessor.h:51