Nymph  v1.5.2
Flow-Based Data Processing Framework
KTCutStatus.hh
Go to the documentation of this file.
1 /*
2  * KTCutStatus.hh
3  *
4  * Created on: Sept 19, 2014
5  * Author: nsoblath
6  */
7 
8 #ifndef KTCUTSTATUS_HH_
9 #define KTCUTSTATUS_HH_
10 
11 
12 #include "KTCutResult.hh"
13 
14 #include <boost/dynamic_bitset.hpp>
15 #include <boost/scoped_ptr.hpp>
16 
17 #include <string>
18 
19 namespace Nymph
20 {
55  {
56  public:
57  typedef boost::dynamic_bitset< > bitset_type;
58 
59  private:
60  // private class KTCutStatus::KTCutResultHandle
61  // purposefully not registered with the cut factory
62  class KTCutResultHandle : public KTExtensibleCutResult< KTCutResultHandle >
63  {
64  public:
67 
68  static const std::string sName;
69  };
70 
71  public:
72  KTCutStatus();
73  KTCutStatus(const KTCutStatus& orig);
74  ~KTCutStatus();
75 
76  KTCutStatus& operator=(const KTCutStatus& rhs);
77 
78  const KTCutResult* CutResults() const;
79 
80  void UpdateStatus();
81 
82  template< typename XCutType >
83  bool AddCutResult(bool state, bool doUpdateStatus=true);
84  bool AddCutResult(const std::string& cutName, bool state, bool doUpdateStatus=true);
85  // overload for const char* to avoid specializing the templated function below
86  bool AddCutResult(const char* cutName, bool state, bool doUpdateStatus=true);
87  template< typename XCutType >
88  bool AddCutResult(const XCutType& cut, bool doUpdateStatus=true);
89 
90  template< typename XCutType >
91  bool HasCutResult() const;
92  bool HasCutResult(const std::string& cutName) const;
93 
94  template< typename XCutType >
95  bool GetCutState() const;
96  bool GetCutState(const std::string& cutName) const;
97 
98  template< typename XCutType >
99  const KTCutResult* GetCutResult() const;
100  const KTCutResult* GetCutResult(const std::string& cutName) const;
101 
102  template< typename XCutType >
104  KTCutResult* GetCutResult(const std::string& cutName);
105 
106  template< typename XCutType >
107  bool SetCutState(bool state, bool doUpdateStatus=true);
108  bool SetCutState(const std::string& cutName, bool state, bool doUpdateStatus=true);
109 
110  template< typename XCutType >
111  void RemoveCutResult(bool doUpdateStatus=true);
112  // cannot currently update by cut name
113  //void RemoveCutResult(const std::string& cutName, bool doUpdateStatus=true);
114 
116  std::string CutResultsPresent() const;
117 
118  size_t size() const;
119  private:
120  friend std::ostream& operator<<(std::ostream& out, const KTCutStatus& status);
121 
122  boost::scoped_ptr< KTCutResultHandle > fCutResults;
123 
124  bitset_type fSummary;
125 
126  public:
127  bool IsCut() const;
128  bool IsCut(const bitset_type& mask) const;
129  bool IsCut(unsigned long long mask) const;
130  bool IsCut(const std::string& mask) const;
131 
132  bitset_type ToBitset(unsigned long long mask) const;
133  bitset_type ToBitset(const std::string& mask) const;
134 
135  };
136 
137  std::ostream& operator<<(std::ostream& out, const KTCutStatus& status);
138 
139 
140  inline const KTCutResult* KTCutStatus::CutResults() const
141  {
142  return fCutResults.get()->Next();
143  }
144 
145  template< typename XCutType >
146  bool KTCutStatus::AddCutResult(bool state, bool doUpdateStatus)
147  {
148  if (! HasCutResult< XCutType >())
149  {
150  fCutResults.get()->Of< XCutType >().SetState(state);
151  if (doUpdateStatus) UpdateStatus();
152  return true;
153  }
154  return false;
155  }
156 
157  inline bool KTCutStatus::AddCutResult(const char* cutName, bool state, bool doUpdateStatus)
158  {
159  return AddCutResult(std::string(cutName), state, doUpdateStatus);
160  }
161 
162  template< typename XCutType >
163  bool KTCutStatus::AddCutResult(const XCutType& cut, bool doUpdateStatus)
164  {
165  if (! HasCutResult< XCutType >())
166  {
167  fCutResults.get()->Of< XCutType >() = cut;
168  if (doUpdateStatus) UpdateStatus();
169  return true;
170  }
171  return false;
172  }
173 
174  template< typename XCutType >
175  inline bool KTCutStatus::HasCutResult() const
176  {
177  return fCutResults.get()->Has< XCutType >();
178  }
179 
180  template< typename XCutType >
182  {
183  if (HasCutResult< XCutType >())
184  {
185  return fCutResults.get()->Of< XCutType >().GetState();
186  }
187  return false;
188  }
189 
190  template< typename XCutType >
192  {
193  if (HasCutResult< XCutType >())
194  {
195  return &(fCutResults.get()->Of< XCutType >());
196  }
197  return NULL;
198  }
199 
200  template< typename XCutType >
202  {
203  if (HasCutResult< XCutType >())
204  {
205  return &(fCutResults.get()->Of< XCutType >());
206  }
207  return NULL;
208  }
209 
210  template< typename XCutType >
211  inline void KTCutStatus::RemoveCutResult(bool doUpdateStatus)
212  {
213  delete fCutResults.get()->Detatch< XCutType >();
214  if (doUpdateStatus) UpdateStatus();
215  return;
216  }
217 
218  inline size_t KTCutStatus::size() const
219  {
220  return fSummary.size();
221  }
222 
223  inline bool KTCutStatus::IsCut() const
224  {
225  return fSummary.any();
226  }
227 
228  inline bool KTCutStatus::IsCut(const bitset_type& mask) const
229  {
230  return (fSummary & mask).any();
231  }
232 
233  inline bool KTCutStatus::IsCut(unsigned long long mask) const
234  {
235  return IsCut(ToBitset(mask));
236  }
237 
238  inline bool KTCutStatus::IsCut(const std::string& mask) const
239  {
240  return IsCut(ToBitset(mask));
241  }
242 
243  inline KTCutStatus::bitset_type KTCutStatus::ToBitset(unsigned long long mask) const
244  {
245  return bitset_type(fSummary.size(), mask);
246  }
247 
248  inline KTCutStatus::bitset_type KTCutStatus::ToBitset(const std::string& mask) const
249  {
250  return bitset_type(mask);
251  }
252 
253 } /* namespace Nymph */
254 
255 #endif /* KTCUTSTATUS_HH_ */
bool SetCutState(bool state, bool doUpdateStatus=true)
friend std::ostream & operator<<(std::ostream &out, const KTCutStatus &status)
Definition: KTCutStatus.cc:187
const KTCutResult * GetCutResult() const
Definition: KTCutStatus.hh:191
bool GetCutState() const
Definition: KTCutStatus.hh:181
bool HasCutResult() const
Definition: KTCutStatus.hh:175
static const std::string sName
Definition: KTCutStatus.hh:68
bool IsCut() const
Definition: KTCutStatus.hh:223
Provides easy access to cut information.
Definition: KTCutStatus.hh:54
void RemoveCutResult(bool doUpdateStatus=true)
Definition: KTCutStatus.hh:211
size_t size() const
Definition: KTCutStatus.hh:218
KTExtensibleStruct & operator=(const KTExtensibleStruct &object)
Duplicates the extended object.
bool AddCutResult(bool state, bool doUpdateStatus=true)
Definition: KTCutStatus.hh:146
bitset_type fSummary
Definition: KTCutStatus.hh:124
std::string CutResultsPresent() const
Returns a string with the names of the cuts that are present in bitset order.
Definition: KTCutStatus.cc:158
bitset_type ToBitset(unsigned long long mask) const
Definition: KTCutStatus.hh:243
const KTCutResult * CutResults() const
Definition: KTCutStatus.hh:140
boost::scoped_ptr< KTCutResultHandle > fCutResults
Definition: KTCutStatus.hh:122
boost::dynamic_bitset< > bitset_type
Definition: KTCutStatus.hh:57