RdStationTimeSeriesWindowCutter.cc
Go to the documentation of this file.
2 
3 #include <fwk/CentralConfig.h>
4 
5 #include <utl/Branch.h>
6 #include <utl/config.h>
7 #include <utl/ErrorLogger.h>
8 
9 #include <evt/Event.h>
10 #include <revt/REvent.h>
11 #include <revt/Station.h>
12 #include <revt/StationRecData.h>
13 
14 
15 using namespace revt;
16 using namespace fwk;
17 using namespace utl;
18 using namespace std;
19 
20 
22 
25  {
26  Branch topBranch =
27  CentralConfig::GetInstance()->GetTopBranch("RdStationTimeSeriesWindowCutter");
28  topBranch.GetChild("WindowSize").GetData(fWindowSize);
29  topBranch.GetChild("WindowStart").GetData(fWindowStart);
30 
31  string tmpstring = topBranch.GetChild("WindowType").Get<string>();
32  if (tmpstring == "eUserSignalWindow") {
33  fWindowType = eUserSignalWindow;
34  } else if (tmpstring == "eRecSignalWindow") {
35  fWindowType = eRecSignalWindow;
36  } else if (tmpstring == "eUserWindow") {
37  fWindowType = eUserWindow;
38  } else {
39  ERROR("Undefined Window Type in xml - file.");
40  return eFailure;
41  }
42 
43  return eSuccess;
44  }
45 
46 
48  RdStationTimeSeriesWindowCutter::Run(evt::Event& event)
49  {
50  // Check if there are events at all
51  if(!event.HasREvent()) {
52  WARNING("No radio event found!");
53  return eContinueLoop;
54  }
55 
56  REvent& rEvent = event.GetREvent();
57  ostringstream info;
58 
59  for (auto& station : rEvent.StationsRange()) {
60  auto& sRecData = station.GetRecData();
61 
62  switch(fWindowType)
63  {
64  case eUserWindow:
65  {
66  // nothing to do here.
67  break;
68  }
69 
70  case eUserSignalWindow:
71  {
72  if (!station.HasRecData()) {
73  info.str("");
74  info << "Station " << station.GetId() << " has no reconstructed signal";
75  WARNING(info);
76  return eContinueLoop;
77  }
78 
79  if (sRecData.HasParameter(eSignalTime)) {
80  fWindowStart = sRecData.GetParameter(eSignalTime) - sRecData.GetParameter(eTraceStartTime)
81  - (fWindowSize / 2.);
82  if (fWindowStart < 0) {
83  info.str("");
84  info << "Station " << station.GetId() << " has window set before starting of the time series"
85  << " - that should never happen. It can happen when eSignalTime is 0 for some reason."
86  << " Maybe you added an empty station and forgot to add noise. Check what went wrong!";
87  ERROR(info);
88  continue;
89  }
90  } else {
91  if (station.IsCandidate()) {
92  // just raise warning if station is candidate <-> not rejected
93  info.str("");
94  info << "Station " << station.GetId() << " has no SignalTime. Using middle of SignalSearchWindow instead";
95  WARNING(info);
96  }
97 
98  fWindowStart = ((sRecData.GetParameter(eSignalSearchWindowStart)
99  - sRecData.GetParameter(eSignalSearchWindowStop)) / 2.) - (fWindowSize / 2.);
100  }
101 
102  break;
103  }
104 
105  case eRecSignalWindow:
106  {
107  if (!station.HasRecData()) {
108  info.str("");
109  info << "Station " << station.GetId() << " has no reconstructed signal";
110  WARNING(info);
111  return eContinueLoop;
112  }
113 
114  fWindowStart = sRecData.GetParameter(eSignalSearchWindowStart);
115  fWindowSize = sRecData.GetParameter(eSignalSearchWindowStop) - fWindowStart;
116 
117  break;
118  }
119  }
120 
121  StationTimeSeries& stationTrace = station.GetStationTimeSeries();
122  const double binning = stationTrace.GetBinning();
123  StationTimeSeries temp;
124  temp.SetBinning(binning);
125 
126  // resizing the window
127  const auto& iBegin = StationTimeSeries::SizeType(fWindowStart / binning);
128  const auto& iEnd = StationTimeSeries::SizeType((fWindowStart + fWindowSize) / binning);
129  for (auto i = iBegin; i < iEnd; ++i)
130  temp.PushBack(stationTrace[i]);
131  stationTrace = temp;
132 
133  // redefine the start time. keep parameter open because it might be overwritten by other modules
134  sRecData.SetParameter(eTraceStartTime, sRecData.GetParameter(eTraceStartTime) + fWindowStart, false);
135 
136  // redefine the window sizes
137  sRecData.SetParameter(eSignalSearchWindowStart, sRecData.GetParameter(eSignalSearchWindowStart) - fWindowStart, false);
138  sRecData.SetParameter(eSignalSearchWindowStop, sRecData.GetParameter(eSignalSearchWindowStop) - fWindowStart, false);
139  sRecData.SetParameter(eNoiseWindowStart, sRecData.GetParameter(eNoiseWindowStart) - fWindowStart, false);
140  sRecData.SetParameter(eNoiseWindowStop, sRecData.GetParameter(eNoiseWindowStop) - fWindowStart, false);
141  }
142 
143  return eSuccess;
144  }
145 
146 
148  RdStationTimeSeriesWindowCutter::Finish()
149  {
150  return eSuccess;
151  }
152 
153 }
Branch GetTopBranch() const
Definition: Branch.cc:63
Interface class to access to the Radio part of an event.
Definition: REvent.h:42
double GetBinning() const
size of one slot
Definition: Trace.h:138
void Init()
Initialise the registry.
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Definition: Branch.cc:211
bool HasREvent() const
T Get() const
Definition: Branch.h:271
Class representing a document branch.
Definition: Branch.h:107
std::vector< T >::size_type SizeType
Definition: Trace.h:58
#define WARNING(message)
Macro for logging warning messages.
Definition: ErrorLogger.h:163
void GetData(bool &b) const
Overloads of the GetData member template function.
Definition: Branch.cc:644
void SetBinning(const double binning)
Definition: Trace.h:139
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
Template class for a FADC data or calibrated data container. Use the typedefs (TraceD, TraceI, etc.) defined in Trace-fwd.h.
Definition: Trace-fwd.h:19
void PushBack(const T &value)
Insert a single value at the end.
Definition: Trace.h:119
#define ERROR(message)
Macro for logging error messages.
Definition: ErrorLogger.h:165

, generated on Tue Sep 26 2023.