Nymph  v1.5.2
Flow-Based Data Processing Framework
KTApplyCut.cc
Go to the documentation of this file.
1 /*
2  * KTApplyCut.cc
3  *
4  * Created on: Oct 06, 2014
5  * Author: nsoblath
6  */
7 
8 #include "KTApplyCut.hh"
9 
10 #include "KTCut.hh"
11 
12 using std::string;
13 
14 
15 namespace Nymph
16 {
17  KTLOGGER(cutlog, "KTApplyCut");
18 
19  KT_REGISTER_PROCESSOR(KTApplyCut, "apply-cut");
20 
21  KTApplyCut::KTApplyCut(const std::string& name) :
22  KTProcessor(name),
23  fCut(NULL),
24  fAfterCutSignal("all", this),
25  fAfterCutPassSignal("pass", this),
26  fAfterCutFailSignal("fail", this)
27  {
28  RegisterSlot("apply", this, &KTApplyCut::ApplyCut);
29  }
30 
32  {
33  delete fCut;
34  }
35 
36  bool KTApplyCut::Configure(const scarab::param_node& node)
37  {
38  // Config-file settings
39 
40  for (scarab::param_node::const_iterator nodeIt = node.begin(); nodeIt != node.end(); ++nodeIt)
41  {
42  // first do configuration values we know about
43  // as it happens, there aren't any
44 
45  // any remaining should be cut names
46  // ignore any that don't work
47  if (SelectCut(nodeIt.name()))
48  {
49  if (nodeIt->is_node())
50  {
51  fCut->Configure(nodeIt->as_node());
52  }
53  continue;
54  }
55  }
56 
57  if (fCut == NULL)
58  {
59  KTERROR(cutlog, "No cut was selected");
60  return false;
61  }
62  return true;
63  }
64 
66  {
67  delete fCut;
68  fCut = cut;
69  return;
70  }
71 
72  bool KTApplyCut::SelectCut(const string& cutName)
73  {
74  KTCut* tempCut = scarab::factory< KTCut, const std::string& >::get_instance()->create(cutName, cutName);
75  if (tempCut == NULL)
76  {
77  KTERROR(cutlog, "Invalid cut name given: <" << cutName << ">.");
78  return false;
79  }
80  SetCut(tempCut);
81  return true;
82  }
83 
84 
86  {
87  if (fCut == NULL)
88  {
89  KTERROR(cutlog, "No cut was specified");
90  return;
91  }
92 
93  bool cutFailed = fCut->Apply(dataPtr);
94 
95  if (cutFailed)
96  {
97  fAfterCutFailSignal(dataPtr);
98  }
99  else
100  {
101  fAfterCutPassSignal(dataPtr);
102  }
103  fAfterCutSignal(dataPtr);
104  return;
105  }
106 
107 
108 
109 } /* namespace Nymph */
KTSignalData fAfterCutFailSignal
Definition: KTApplyCut.hh:80
void SetCut(KTCut *cut)
Definition: KTApplyCut.cc:65
Base class for a cut that gets applied to data objects.
Definition: KTCut.hh:112
void RegisterSlot(std::string name, XTarget *target, XReturn(XTarget::*funcPtr)())
Definition: KTProcessor.hh:96
virtual bool Apply(KTDataPtr)=0
KTSignalData fAfterCutSignal
Definition: KTApplyCut.hh:78
virtual bool Configure(const scarab::param_node &node)=0
Should perform parameter store and command-line configurations.
KTApplyCut(const std::string &name="apply-cut")
Definition: KTApplyCut.cc:21
KT_REGISTER_PROCESSOR(KTDataQueueProcessor, "data-queue")
KTLOGGER(applog, "KTApplication")
Contains KTApplyCut.
boost::shared_ptr< KTData > KTDataPtr
Definition: KTData.hh:67
void ApplyCut(KTDataPtr)
Definition: KTApplyCut.cc:85
bool Configure(const scarab::param_node &node)
Should perform parameter store and command-line configurations.
Definition: KTApplyCut.cc:36
#define KTERROR(...)
Definition: KTLogger.hh:347
virtual ~KTApplyCut()
Definition: KTApplyCut.cc:31
KTSignalData fAfterCutPassSignal
Definition: KTApplyCut.hh:79
bool SelectCut(const std::string &cutName)
Definition: KTApplyCut.cc:72