YAP
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DataSet.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_DataSet_h
22 #define yap_DataSet_h
23 
24 #include "fwd/DataPoint.h"
25 #include "fwd/FourVector.h"
26 #include "fwd/Model.h"
27 #include "fwd/StatusManager.h"
28 
29 #include "DataPartition.h"
30 
31 #include <vector>
32 
33 namespace yap {
34 
40 {
41 public:
42 
44  DataSet(const Model& m);
45 
47  bool consistent(const DataPoint& d) const;
48 
51  void addEmptyDataPoints(size_t n);
52 
55  using value_type = std::vector<FourVector<double> >;
56 
61  const DataPoint createDataPoint(const std::vector<FourVector<double> >& P, StatusManager& sm);
62 
66  const DataPoint createDataPoint(const std::vector<FourVector<double> >& P)
67  { return createDataPoint(P, *this); }
68 
72  void push_back(const std::vector<FourVector<double> >& P)
73  { DataPoints_.push_back(createDataPoint(P)); }
74 
77  void push_back(const DataPoint& d);
78 
81  void push_back(DataPoint&& d);
82 
87  DataIterator insert(DataIterator pos, const std::vector<FourVector<double> >& P)
88  { return dataIterator(DataPoints_.insert(rawIterator(pos), createDataPoint(P)), pos.partition()); }
89 
94  DataIterator insert(const DataIterator& pos, const DataPoint& d);
95 
100  DataIterator insert(const DataIterator& pos, DataPoint&& d);
101 
103  void clear()
104  { DataPoints_.clear(); }
105 
108  void pop_back()
109  { DataPoints_.pop_back(); }
110 
115  { return dataIterator(DataPoints_.erase(rawIterator(pos)), pos.partition()); }
116 
121  DataIterator erase(const DataIterator& first, const DataIterator& last);
122 
124  const DataIterator& begin() const override
125  { return const_cast<DataSet*>(this)->setBegin(const_cast<DataPointVector*>(&DataPoints_)->begin()); }
126 
128  const DataIterator& end() const override
129  { return const_cast<DataSet*>(this)->setEnd(const_cast<DataPointVector*>(&DataPoints_)->end()); }
130 
133  { return DataPoints_[i]; }
134 
136  DataPoint& at(size_t i)
137  { return DataPoints_.at(i); }
138 
140  const DataPoint& front() const
141  { return DataPoints_.front(); }
142 
144  const DataPoint& back() const
145  { return DataPoints_.back(); }
146 
148  const unsigned bytes() const;
149 
151  const size_t size() const override
152  { return DataPoints_.size(); }
153 
155  const size_t max_size() const
156  { return DataPoints_.max_size(); }
157 
159  const size_t capacity() const
160  { return DataPoints_.capacity(); }
161 
163  const bool empty() const
164  { return DataPoints_.empty(); }
165 
167  void reserve(size_t n)
168  { DataPoints_.reserve(n); }
169 
172  { DataPoints_.shrink_to_fit(); }
173 
175  const Model* model() const
176  { return Model_; }
177 
180 
181 protected:
182 
184  DataPointVector& dataPoints()
185  { return DataPoints_; }
186 
187 private:
189  DataPointVector DataPoints_;
190 
192  const Model* Model_;
193 
194 };
195 
196 }
197 
198 #endif
std::vector< FourVector< double > > value_type
Definition: DataSet.h:55
const DataPoint & back() const
access back
Definition: DataSet.h:144
const DataIterator & setBegin(DataPointVector::iterator it)
set begin
Definition: DataPartition.h:238
bool consistent(const DataPoint &d) const
Check if data point is consisent with data set.
Definition: DataSet.cxx:17
const DataIterator & begin() const override
Definition: DataSet.h:124
friend DataPartition
grant friend status to DataPartition to access non-const dataPoints()
Definition: DataSet.h:179
void reserve(size_t n)
reserve storage space
Definition: DataSet.h:167
const DataIterator & end() const override
Definition: DataSet.h:128
const DataIterator & setEnd(DataPointVector::iterator it)
set end
Definition: DataPartition.h:242
const bool empty() const
Definition: DataSet.h:163
const size_t size() const override
Definition: DataSet.h:151
Four-Vector handling.
Definition: FourVector.h:41
const Model * Model_
Associated model.
Definition: DataSet.h:192
void pop_back()
Definition: DataSet.h:108
void clear()
clear the data set
Definition: DataSet.h:103
const DataPoint & front() const
access front
Definition: DataSet.h:140
Class for holding data and cached values per data point for fast calculation.
Definition: DataPoint.h:35
void shrink_to_fit()
call shrink to fit on DataPoints_
Definition: DataSet.h:171
const unsigned bytes() const
Definition: DataSet.cxx:93
const size_t max_size() const
Definition: DataSet.h:155
void push_back(const std::vector< FourVector< double > > &P)
Definition: DataSet.h:72
const DataPoint createDataPoint(const std::vector< FourVector< double > > &P, StatusManager &sm)
Definition: DataSet.cxx:40
Class holding a set of DataPoint objects.
Definition: DataSet.h:39
DataPoint & at(size_t i)
access by index (with check)
Definition: DataSet.h:136
DataPointVector & dataPoints()
non-const access to DataPoints_
Definition: DataSet.h:184
const size_t capacity() const
Definition: DataSet.h:159
Definition: StatusManager.h:32
DataPoint & operator[](size_t i)
access by index
Definition: DataSet.h:132
Class implementing a PWA model.
Definition: Model.h:56
const Model * model() const
Definition: DataSet.h:175
DataPointVector::iterator & rawIterator(DataIterator &it) const
Definition: DataPartition.h:224
DataSet(const Model &m)
Constructor.
Definition: DataSet.cxx:10
DataIterator insert(DataIterator pos, const std::vector< FourVector< double > > &P)
Definition: DataSet.h:87
Class for iterating over a DataPartition.
Definition: DataPartition.h:39
DataIterator erase(const DataIterator &pos)
Definition: DataSet.h:114
DataPointVector DataPoints_
vector of data points contained in set
Definition: DataSet.h:189
DataIterator dataIterator(DataPointVector::iterator it, const DataPartition *part) const
Definition: DataPartition.h:234
void addEmptyDataPoints(size_t n)
Definition: DataSet.cxx:23
const DataPoint createDataPoint(const std::vector< FourVector< double > > &P)
Definition: DataSet.h:66
A contiguous block of data.
Definition: DataPartition.h:309