NSCL DDAS  1.0
Support for XIA DDAS at the NSCL
 All Classes Files Functions Variables Macros Pages
TrapFilter.hpp
1 // TrapFilter.hpp
2 //
3 // Author : Jeromy Tompkins
4 // Date : 8/14/2013
5 
6 #ifndef TRAPFILTER_H
7 #define TRAPFILTER_H
8 
9 #include <iostream>
10 #include "AlgoIterator.hpp"
11 #include "SumIterator.hpp"
12 #include <TObject.h>
13 
14 namespace TrAnal
15 {
16 
18 
28 template<class T>
29 class TrapFilter : public AlgoIterator<T>
30 {
31  private:
32  SumIterator<T> m_trailsum;
33  SumIterator<T> m_leadsum;
34 
35  private:
37 
41  TrapFilter();
42 
43  public:
44  // Defines the trailing type of sums
46 
57  TrapFilter(const TrIterator<T>& begin, int rise_range, int gap_range)
58  : AlgoIterator<T>(),
59  m_trailsum(TrRange<T>(begin,rise_range)),
60  m_leadsum(TrRange<T>(begin+rise_range+gap_range,rise_range))
61  {}
62 
64 
70  TrapFilter(const TrRange<T>& trail_range, const TrRange<T>& lead_range)
71  : AlgoIterator<T>(),
72  m_trailsum(trail_range),
73  m_leadsum(lead_range)
74  {}
75 
77 
83  {
84  if (this != &that) {
85  m_trailsum = that.m_trailsum;
86  m_leadsum = that.m_leadsum;
87  }
88 
89  return *this;
90  }
91 
93 
96  virtual ~TrapFilter() {}
97 
99 
104  virtual TrapFilter& operator++()
105  {
106  ++m_trailsum;
107  ++m_leadsum;
108 
109  return *this;
110  }
111 
113 
119  {
120  SumIterator<T> it = m_trailsum++;
121  SumIterator<T> it2= m_leadsum++;
122  TrapFilter tmp (TrRange<T>(it.min_extent(),it.max_extent()),
123  TrRange<T>(it2.min_extent(),it2.max_extent()));
124  return tmp;
125  }
126 
128 
139  virtual bool operator<(const TrIterator<T>& it) const
140  {
141  TrIterator<T> max = max_extent();
142 
143  return (max<it);
144  }
145 
147 
157  bool operator>(const TrIterator<T>& it) const
158  {
159  TrIterator<T> min = min_extent();
160 
161  return (min>it);
162  }
163 
165 
173  virtual TrIterator<T> max_extent() const
174  {
175  TrIterator<T> it;
176  if (m_trailsum<m_leadsum) {
177  it = m_leadsum.max_extent();
178  } else {
179  it = m_trailsum.max_extent();
180  }
181 
182  return it;
183  }
184 
186 
194  virtual TrIterator<T> min_extent() const
195  {
196  TrIterator<T> it;
197  if (m_trailsum>m_leadsum) {
198  it = m_leadsum.min_extent();
199  } else {
200  it = m_trailsum.min_extent();
201  }
202 
203  return it;
204  }
205 
207 
210  virtual double operator*() const { return *m_leadsum - *m_trailsum;}
211 
212 
213  public:
214  // ROOT dictionary generation
216  ClassDef(TrapFilter,0);
218 
219 }; // end class
220 
221 } // end namespace
222 #endif