testTimeDistribution.cc
Go to the documentation of this file.
1 
8 #include <tst/Verify.h>
9 
10 #include <utl/AugerUnits.h>
11 
12 #include <cppunit/extensions/HelperMacros.h>
13 #include <boost/tuple/tuple.hpp>
14 
15 #include <utl/TimeDistribution.h>
16 #include <utl/MultiTimeDistribution.h>
17 
18 #include <utl/TimeDistributionAlgorithm.h>
19 
20 using namespace std;
21 using namespace utl;
22 using namespace tst;
23 
24 
28 class testTimeDistribution : public CppUnit::TestFixture {
29 
30  CPPUNIT_TEST_SUITE(testTimeDistribution);
31 
32  CPPUNIT_TEST(testInitialize);
33  CPPUNIT_TEST(testBinSizes);
34  CPPUNIT_TEST(testOperatorBracket);
35  CPPUNIT_TEST(testSparsness);
36  CPPUNIT_TEST(testAssignment);
37  CPPUNIT_TEST_EXCEPTION(testSumException, AugerException);
38  CPPUNIT_TEST(testEqual);
39  CPPUNIT_TEST(testOperatorArithmetic);
40 
41  //CPPUNIT_TEST(testSlotIterator);
42 
43  CPPUNIT_TEST(testSparseIterator);
44  CPPUNIT_TEST(testMultiTimeDistribution);
45 
46  CPPUNIT_TEST(testAlgorithms);
47 
48  CPPUNIT_TEST_SUITE_END();
49 
50 private:
58 
59 public:
60  void
62  {
63  // add data by slot number
64  td1 = new TimeDistributionD(1*nanosecond);
65  for (int i = -10 ; i <= 10 ; ++i)
66  td1->AddTime(i, double(i));
67 
68  // add data by specifying time. This should put 3 entries
69  // in each of 10 (1 ns) time slots
70  td2 = new TimeDistributionD(1*nanosecond);
71  for (int i = 0 ; i < 30 ; ++i) {
72  const double time = (1/3.0)*i - 5 + 1e-6;
73  td2->AddTime(time);
74  }
75 
76  td2weighted = new TimeDistributionD(1*nanosecond);
77  for (int i = 0 ; i < 30 ; ++i) {
78  const double time = (1/3.0)*i - 5 + 1e-6;
79  td2weighted->AddTime(time, 2.0);
80  }
81 
82  // fill a distribution from -10,0 and 11,20. leave 1-10 empty.
83  // This distribution cand then be used to check Iterator and
84  // SparseIterator
85  td3 = new TimeDistributionD(1*nanosecond);
86  for (int i = -10 ; i <= 0 ; ++i) // note i=0 does not get stored
87  td3->AddTime(i, double(i));
88  for (int i = 11 ; i <= 20 ; ++i)
89  td3->AddTime(i, double(i));
90 
91 
92  // time distribution containing ints
93  td4 = new TimeDistributionI(1*nanosecond);
94  for (int i = -10 ; i <= 10 ; ++i)
95  td4->AddTime(i, i);
96 
97  // fill a distribution from 3-5, and 25-30
98  td5 = new TimeDistributionD(1*nanosecond);
99  for (int i = 3 ; i <= 5 ; ++i)
100  td5->AddTime(i, double(i));
101  for (int i = 25; i <= 30; ++i)
102  td5->AddTime(i, double(i));
103 
104  // use a different binning
105  td6 = new TimeDistributionD(2*nanosecond);
106  for (int i = 3 ; i <= 5 ; ++i)
107  td6->AddTime(i, double(i));
108  }
109 
110  void
112  {
113  delete td1;
114  delete td2;
115  delete td2weighted;
116  delete td3;
117  delete td4;
118  delete td5;
119  delete td6;
120  }
121 
122  void
124  {
125  CPPUNIT_ASSERT(Verify<CloseTo>(td1->GetBinning(), 1*nanosecond));
126  }
127 
128  void
130  {
131  for (TimeDistributionD::SparseIterator tdi = td1->SparseBegin();
132  tdi != td1->SparseEnd(); ++tdi)
133  CPPUNIT_ASSERT(Verify<CloseTo>(double(tdi->get<0>()), tdi->get<1>()));
134  }
135 
136  void
138  {
139  TimeDistributionD copyTd(35*nanosecond);
140  copyTd = *td1;
141  CPPUNIT_ASSERT(Verify<CloseTo>(copyTd.GetBinning(), 1*nanosecond));
142  for (int i = -10 ; i <= 10 ; ++i) {
143  CPPUNIT_ASSERT(Verify<CloseTo>(copyTd[i], double(i)));
144  CPPUNIT_ASSERT(Verify<CloseTo>(copyTd.At(i), double(i)));
145  }
146  }
147 
148  void
150  {
151  // defined slots
152  for (int i = -10 ; i <= 10 ; ++i) {
153  CPPUNIT_ASSERT(Verify<CloseTo>((*td1)[i], double(i)));
154  CPPUNIT_ASSERT(Verify<CloseTo>(td1->At(i), double(i)));
155  CPPUNIT_ASSERT(Verify<Equal>((*td4)[i], i));
156  CPPUNIT_ASSERT(Verify<Equal>(td4->At(i), i));
157 
158  (*td1)[i] += 2.0;
159  CPPUNIT_ASSERT(Verify<CloseTo>((*td1)[i], double(i) + 2));
160  CPPUNIT_ASSERT(Verify<CloseTo>(td1->At(i), double(i) + 2));
161 
162  (*td4)[i] += 2;
163  CPPUNIT_ASSERT(Verify<Equal>((*td4)[i], i + 2));
164  CPPUNIT_ASSERT(Verify<Equal>(td4->At(i), i + 2));
165  }
166 
167  // undefined slots return 0
168  for (int i = -20 ; i < -10 ; ++i) {
169  CPPUNIT_ASSERT(Verify<CloseTo>((*td1)[i], 0.0));
170  CPPUNIT_ASSERT(Verify<CloseTo>(td1->At(i), 0.0));
171  CPPUNIT_ASSERT(Verify<Equal>((*td4)[i], 0));
172  CPPUNIT_ASSERT(Verify<Equal>(td4->At(i), 0));
173 
174  (*td1)[i] += 10.0;
175  CPPUNIT_ASSERT(Verify<CloseTo>((*td1)[i], 10.0));
176  CPPUNIT_ASSERT(Verify<CloseTo>(td1->At(i), 10.0));
177  (*td4)[i] += 10;
178  CPPUNIT_ASSERT(Verify<Equal>((*td4)[i], 10));
179  CPPUNIT_ASSERT(Verify<Equal>(td4->At(i), 10));
180  }
181  for (int i = 11 ; i < 20 ; ++i) {
182  CPPUNIT_ASSERT(Verify<CloseTo>((*td1)[i], 0.0));
183  CPPUNIT_ASSERT(Verify<CloseTo>(td1->At(i), 0.0));
184  CPPUNIT_ASSERT(Verify<Equal>((*td4)[i], 0));
185  CPPUNIT_ASSERT(Verify<Equal>(td4->At(i), 0));
186  }
187 
188  // histos were filled by times (rather than slot indices) with 3 time entries per slot
189  for (int i = -5 ; i < 4 ; ++i) {
190  CPPUNIT_ASSERT(Verify<CloseTo>((*td2)[i], 3.0));
191  CPPUNIT_ASSERT(Verify<CloseTo>(td2->At(i), 3.0));
192  }
193 
194  // histos were filled by times (rather than slot indices) with 3 time entries per slot
195  // and with weights of 2 on each entry
196  for (int i = -5 ; i < 4 ; ++i) {
197  CPPUNIT_ASSERT(Verify<CloseTo>((*td2weighted)[i], 6.0));
198  CPPUNIT_ASSERT(Verify<CloseTo>(td2weighted->At(i), 6.0));
199  }
200 
201  // look up histos by times (rather than slot indices)
202  for (int i = 0 ; i < 30 ; ++i) {
203  const double time = (1/3.0)*i - 5 + 1e-6;
204  CPPUNIT_ASSERT(Verify<CloseTo>((*td2)[time], 3.0));
205  CPPUNIT_ASSERT(Verify<CloseTo>(td2->At(time), 3.0));
206  }
207 
208  // GetStart() and GetStop() methods
209  CPPUNIT_ASSERT(Verify<Equal>(td3->GetStart(), -10));
210  CPPUNIT_ASSERT(Verify<Equal>(td3->GetNumSlots(), 31));
211  CPPUNIT_ASSERT(Verify<Equal>(td3->GetStop(), 20));
212 
213  TimeDistributionD tdEmpty(1*nanosecond);
214  CPPUNIT_ASSERT(Verify<Equal>(tdEmpty.GetNumSlots(), 0));
215  CPPUNIT_ASSERT(Verify<Equal>(tdEmpty.GetStart(), 0));
216  CPPUNIT_ASSERT(Verify<Equal>(tdEmpty.GetStop(), -1));
217  }
218 
219  void
221  {
222  {
224  for (int i = 0; i < 10; ++i)
225  td.SetTime(i, i);
226  for (int i = 0; i < 10; ++i)
227  CPPUNIT_ASSERT(Verify<Equal>(td.At(i), i));
229  // 0 should not exist
230  CPPUNIT_ASSERT(Verify<Equal>(first->get<0>(), 1));
231  CPPUNIT_ASSERT(Verify<Equal>(first->get<1>(), 1));
232  td.SetTime(1, 0);
233  first = td.SparseBegin();
234  // set 1 to 0 should remove the entry
235  CPPUNIT_ASSERT(Verify<Equal>(first->get<0>(), 2));
236  CPPUNIT_ASSERT(Verify<Equal>(first->get<1>(), 2));
237  td.AddTime(2, -2);
238  first = td.SparseBegin();
239  // if the add cancels the entry should dissapear
240  CPPUNIT_ASSERT(Verify<Equal>(first->get<0>(), 3));
241  CPPUNIT_ASSERT(Verify<Equal>(first->get<1>(), 3));
242  // setting all to zero
243  for (int i = 0; i < 10; ++i)
244  td.SetTime(i, 0);
245  // no entries
246  CPPUNIT_ASSERT((td.SparseBegin() == td.SparseEnd()));
247  }
248 
249  { // repeat with double
251  for (int i = 0; i < 10; ++i)
252  td.SetTime(i, double(i));
253  for (int i = 0; i < 10; ++i)
254  CPPUNIT_ASSERT(Verify<CloseTo>(td.At(i), double(i)));
256  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<0>(), 1));
257  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<1>(), double(1)));
258  td.SetTime(1, 0);
259  first = td.SparseBegin();
260  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<0>(), 2));
261  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<1>(), double(2)));
262  td.AddTime(2, -2);
263  first = td.SparseBegin();
264  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<0>(), 3));
265  CPPUNIT_ASSERT(Verify<CloseTo>(first->get<1>(), double(3)));
266  for (int i = 0; i < 10; ++i)
267  td.SetTime(i, 0);
268  CPPUNIT_ASSERT((td.SparseBegin() == td.SparseEnd()));
269  }
270  }
271 
272  void
274  {
275  tst::Expected();
276  // two distributions of unequal size
277  TimeDistributionD tdBarf = *td3 + *td6;
278  }
279 
280  void
282  {
283  // operator+
284  TimeDistributionD tdSum = *td3 + *td5;
285 
286  // check that only bins with data in them were affected
287  int sum = 0;
289  sit != tdSum.SparseEnd(); ++sit, ++sum)
290  CPPUNIT_ASSERT(Verify<Equal>(sit->get<0>(), int(sit->get<1>())));
291 
292  CPPUNIT_ASSERT(Verify<Equal>(sum, 30-1)); // confirm empty bins were skipped
293 
294  // check that start and num slots properly set
295  for (int i = tdSum.GetStart(); i != tdSum.GetStop(); ++i)
296  if (i <= 0 || (i >= 11 && i <= 20) || (i >= 3 && i <= 5) ||
297  (i >= 30 && i <= 35)) {
298  CPPUNIT_ASSERT(Verify<Equal>(i, int(tdSum[i])));
299  CPPUNIT_ASSERT(Verify<Equal>(i, int(tdSum.At(i))));
300  }
301 
302  // add distribution to itself + check the sum
303  TimeDistributionD tdSum2 = *td6 + *td6;
304  for (int i = tdSum2.GetStart(); i != tdSum2.GetStop(); ++i) {
305  CPPUNIT_ASSERT(Verify<Equal>(2*i, int(tdSum2[i])));
306  CPPUNIT_ASSERT(Verify<Equal>(2*i, int(tdSum2.At(i))));
307  }
308  }
309 
310  void
312  {
313  // dereferencing and preincrement
314  int i = -10;
315  for (TimeDistributionD::SparseIterator sit = td3->SparseBegin();
316  sit != td3->SparseEnd(); ++sit, ++i) {
317  if (i == 0) // this distribution should skip bins 0-10
318  i = 11;
319  CPPUNIT_ASSERT((*sit == boost::make_tuple<const int, const double>(i, i)));
320  }
321 
322  // operator-> and and postincrement
323  i = -10;
324  for (TimeDistributionD::SparseIterator sit = td3->SparseBegin();
325  sit != td3->SparseEnd(); ++sit, ++i) {
326  if (i == 0) // this distribution should skip bins 0-10
327  i = 11;
328  CPPUNIT_ASSERT(sit->get<0>() == i);
329  CPPUNIT_ASSERT(sit->get<1>() == i);
330  }
331 
332  // assignment
333  i = -10;
334  for (TimeDistributionD::SparseIterator sit = td3->SparseBegin();
335  sit != td3->SparseEnd(); ++sit, ++i) {
336  if (i == 0) // this distribution should skip bins 0-10
337  i = 11;
339  CPPUNIT_ASSERT((*copyIt == boost::make_tuple<const int, const double>(i, i)));
340  }
341  }
342 
343  void
345  {
349  for (int i = 0; i < 3; ++i)
350  td[i] = double(i);
351  for (int i = 0; i < 3; ++i) {
352  CPPUNIT_ASSERT(Verify<CloseTo>(td[i], double(i)));
353  CPPUNIT_ASSERT(Verify<CloseTo>(td.At(i), double(i)));
354  }
355  for (int i = 0; i < 3; ++i)
356  td.SetTime(i, double(i));
357  for (int i = 0; i < 3; ++i) {
358  CPPUNIT_ASSERT(Verify<CloseTo>(td[i], double(i)));
359  CPPUNIT_ASSERT(Verify<CloseTo>(td.At(i), double(i)));
360  }
361  td.Clear();
362  for (int i = 0; i < 3; ++i) {
363  CPPUNIT_ASSERT(Verify<CloseTo>(td[i], 0.));
364  CPPUNIT_ASSERT(Verify<CloseTo>(td.At(i), 0.));
365  }
366  for (int i = 0; i < 3; ++i)
367  td.SetTime(i, double(i));
368  for (int i = 0; i < 3; ++i) {
369  CPPUNIT_ASSERT(Verify<CloseTo>(td[i], double(i)));
370  CPPUNIT_ASSERT(Verify<CloseTo>(td.At(i), double(i)));
371  }
372 
373  // HasLabel
374  CPPUNIT_ASSERT(Verify<Equal>(mtd.HasLabel(0), true));
375  CPPUNIT_ASSERT(Verify<Equal>(mtd.HasLabel(1), false));
376 
377  // Add more time distributions
378  mtd.AddTimeDistribution(*td1, 1);
379  mtd.AddTimeDistribution(*td1, 2);
380  CPPUNIT_ASSERT(Verify<Equal>(mtd.GetNLabels(), 3U));
381 
382  // multiTimeDistribution accessor
383  TimeDistributionD tdSource = mtd.GetTimeDistribution(1);
384  CPPUNIT_ASSERT(Verify<CloseTo>(tdSource[-5], -5.0));
385  CPPUNIT_ASSERT(Verify<CloseTo>(tdSource[5], 5.0));
386 
387  // multiTimeDistribution iterator
388  int i = 0;
389  for (MultiTimeDistributionD::Iterator iter = mtd.Begin();
390  iter != mtd.End(); ++iter, ++i)
391  CPPUNIT_ASSERT(Verify<Equal>(iter->GetLabel(), i));
392 
393  // copy ctor
394  MultiTimeDistributionD mcopy = mtd;
395  i = 0;
396  for (MultiTimeDistributionD::Iterator iter = mcopy.Begin();
397  iter != mcopy.End(); ++iter, ++i) {
398  CPPUNIT_ASSERT(Verify<Equal>(iter->GetLabel(), i));
399 
400  TimeDistributionD ta = iter->GetTimeDistribution();
401  for (int j = 0 ; j < 2 ; ++j)
402  CPPUNIT_ASSERT(Verify<Equal>(ta[j], double(j)));
403  }
404 
405  // test a MultiTimeDistribution for ints
407  mtdi.AddTimeDistribution(1*nanosecond, 0);
408  TimeDistributionI& tdi = mtdi.GetTimeDistribution(0);
409  for (int i = 0; i < 3; ++i)
410  tdi[i] = i;
411 
412  // copy ctor
413  TimeDistributionI tdiSource = mtdi.GetTimeDistribution(0);
414  CPPUNIT_ASSERT(Verify<Equal>(tdiSource[0], 0));
415  CPPUNIT_ASSERT(Verify<Equal>(tdiSource[2], 2));
416  }
417 
418  void
420  {
422 
423  td[-1] = 1.0;
424  td[0] = 4.0;
425  // skip bin 1
426  td[2] = 4.0;
427  td[3] = 5.0;
428  td[4] = 6.0;
429  // skip 5
430  td[6] = 0.; // explicitly set 6
431  td[7] = 10.;
432 
433  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, -1, 7), 30.0));
434  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, -100, 100), 30.0));
435  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 2, 4), 15.0));
436  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 4, 2), 15.0));
437  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 100, -100), 30.0));
438  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 50, 100), 0.0));
439  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 100, 50), 0.0));
440  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, -100, -50), 0.0));
441  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, -50, -100), 0.0));
442  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(td, 2, 2), 4.0));
443 
444  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, -1, 2), 9.0/4.0));
445  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, -100, 100), 30.0/201.));
446  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, 100, -100), 30.0/201.));
447  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, -100, -50), 0.0));
448  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, 50, 100), 0.0));
449  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, 100, 50), 0.0));
450  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, -100, -50), 0.0));
451  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, -50, -100), 0.0));
452  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Mean(td, 2, 2), 4.0));
453 
454  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 2, 4), sqrt(2.0/3.0)));
455  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 4, 2), sqrt(2.0/3.0)));
456  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 0, 2), sqrt(32./9.)));
457  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 50, 100), 0.0));
458  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 100, 50), 0.0));
459  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, -100, -50), 0.0));
460  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, -50, -100), 0.0));
461  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::RMS(td, 2, 2), 0.0));
462 
463  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, -1, 2), 7.0/9.0));
464  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, -100, 2), 7.0/9.0));
465  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, 50, 100), 0.0));
466  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, 100, 50), 0.0));
467  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, -100, -50), 0.0));
468  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, -50, -100), 0.0));
469  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Centroid(td, 2, 2), 2.0));
470 
472 
473  tdi[-1] = 1;
474  tdi[0] = 4;
475  // skip bin 1
476  tdi[2] = 4;
477  tdi[3] = 5;
478  tdi[4] = 6;
479  // skip 5
480  tdi[6] = 0; // explicitly set 6
481  tdi[7] = 10;
482 
483  CPPUNIT_ASSERT(Verify<CloseTo>(TimeDistributionAlgorithm::Sum(tdi, -1, 7), 30.0));
484  CPPUNIT_ASSERT(Verify<CloseTo> (TimeDistributionAlgorithm::Mean(tdi, -1, 2), 9.0/4.0));
485  CPPUNIT_ASSERT(Verify<CloseTo> (TimeDistributionAlgorithm::RMS(td, 2, 4), sqrt(2.0/3.0)));
486  CPPUNIT_ASSERT(Verify<CloseTo> (TimeDistributionAlgorithm::Centroid(td, -1, 2), 7.0/9.0));
487  }
488 
489  void
491  {
492  TimeDistributionI tdi(*td4);
493  CPPUNIT_ASSERT(tdi == *td4);
494  ++tdi[0];
495  CPPUNIT_ASSERT(tdi != *td4);
496 
497  TimeDistributionD tdd(*td1);
498  CPPUNIT_ASSERT(tdd == *td1);
499  ++tdd[1];
500  CPPUNIT_ASSERT(tdd != *td1);
501  }
502 
503 };
504 
505 
T At(const double time) const
int GetStart() const
First slot with data.
void AddTimeDistribution(const double binSize, const int label)
boost::transform_iterator< LabeledObjectFunctor, typename MultiObjectContainer::iterator, LabeledObjectType > Iterator
Definition: MultiObject.h:78
TimeDistribution< double > TimeDistributionD
Base class for all exceptions used in the auger offline code.
Histogram class for time distributions with suppressed empty bins.
TimeDistributionI * td4
TimeDistributionD * td6
void Clear()
Remove contents of the TimeDistribution.
void SetTime(const double time, const T weight=T(1))
Iterator Begin()
Definition: MultiObject.h:83
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
#define U
TimeDistribution< T > & GetTimeDistribution(const int label=0)
Returns the trace for /par source.
double GetBinning() const
Size of one slot.
constexpr double nanosecond
Definition: AugerUnits.h:143
int GetStop() const
Last slot with data (1 less than First slot if no data)
void Expected()
Print `Expected&#39; for expected failures.
Definition: Verify.h:85
TimeDistributionD * td5
SparseIterator SparseEnd() const
TimeDistributionD * td3
int GetNumSlots() const
Number of slots from first slot with data up to last slot with data, including empty slots...
TimeDistribution< int > TimeDistributionI
Iterator End()
Definition: MultiObject.h:85
unsigned int GetNLabels() const
Definition: MultiObject.h:89
double Mean(const std::vector< double > &v)
Definition: Functions.h:31
SparseIterator SparseBegin() const
Iterator over time slots with data in them (skips empty slots).
void AddTime(const double time, const T weight=T(1))
Add an entry (optionally weighted) for the given time. Slot will be computed.
TimeDistributionD * td2weighted
TimeDistributionD * td1
boost::transform_iterator< InternalMapFunctor, InternalConstIterator, Tuple > SparseIterator
bool HasLabel(const int label) const
Definition: MultiObject.h:91
TimeDistributionD * td2

, generated on Tue Sep 26 2023.