NSCL DDAS  1.0
Support for XIA DDAS at the NSCL
 All Classes Namespaces 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
TrapFilter(const TrIterator< T > &begin, int rise_range, int gap_range)
Constructs a symmetric trap filter.
Definition: TrapFilter.hpp:57
TrapFilter operator++(int)
filter++ style increment
Definition: TrapFilter.hpp:118
TrIterator template class.
Definition: TrIterator.hpp:24
TrapFilter & operator=(const TrapFilter &that)
Assignment operator.
Definition: TrapFilter.hpp:82
virtual TrIterator< T > max_extent() const
Gets the most advanced iterator position of the summing regions.
Definition: TrapFilter.hpp:173
virtual TrIterator< T > min_extent() const
Gets the minimum iterator position of the summing regions.
Definition: TrapFilter.hpp:194
A simple fast filter (lead sum - trail sum)
Definition: TrapFilter.hpp:29
TrRange class.
Definition: TrIterator.hpp:173
virtual TrIterator< T > min_extent() const
Min extent To implement the minimum iterator extent for the range This default implementation returns...
Definition: SumIterator.hpp:125
virtual ~TrapFilter()
Virtual destructor.
Definition: TrapFilter.hpp:96
TrapFilter(const TrRange< T > &trail_range, const TrRange< T > &lead_range)
Constructs an arbitrary trap filter.
Definition: TrapFilter.hpp:70
Definition: AlgoIterator.hpp:12
bool operator>(const TrIterator< T > &it) const
Greater than comparison to TrIterator.
Definition: TrapFilter.hpp:157
virtual TrIterator< T > max_extent() const
Max extent To implement the maximum iterator extent for the range This default implementation returns...
Definition: SumIterator.hpp:128
virtual TrapFilter & operator++()
++filter style increment
Definition: TrapFilter.hpp:104
Abstract AlgoIterator base class.
Definition: AlgoIterator.hpp:17
Summing iterator.
Definition: SumIterator.hpp:27
virtual double operator*() const
Dereference operator <==> evaluates to current filter value.
Definition: TrapFilter.hpp:210