FdNoiseAdder.cc
Go to the documentation of this file.
1 #include "FdNoiseAdder.h"
2 #include <utl/ErrorLogger.h>
3 #include <utl/AugerUnits.h>
4 #include <utl/Reader.h>
5 #include <fwk/CentralConfig.h>
6 #include <fwk/RandomEngineRegistry.h>
7 #include <utl/RandomEngine.h>
8 #include <CLHEP/Random/RandGauss.h>
9 
10 #include <det/Detector.h>
11 
12 #include <fdet/Eye.h>
13 #include <fdet/Telescope.h>
14 #include <fdet/Camera.h>
15 #include <fdet/Channel.h>
16 #include <fdet/Pixel.h>
17 #include <fdet/FDetector.h>
18 
19 #include <evt/Event.h>
20 #include <fevt/FEvent.h>
21 #include <fevt/Eye.h>
22 #include <fevt/EyeRecData.h>
23 #include <fevt/EyeHeader.h>
24 #include <fevt/Telescope.h>
25 #include <fevt/TelescopeRecData.h>
26 #include <fevt/Pixel.h>
27 #include <fevt/PixelRecData.h>
28 #include <utl/TraceAlgorithm.h>
29 
30 #include <sstream>
31 
32 using CLHEP::RandGauss;
33 using namespace std;
34 using namespace utl;
35 using namespace fwk;
36 using namespace evt;
37 using namespace fevt;
38 
39 
40 namespace FdNoiseAdderKG {
41 
42 
43  double
44  GetCalibConst(const fevt::Pixel& pixel) {
45  const fdet::FDetector& detFD = det::Detector::GetInstance().GetFDetector();
46  const fdet::Pixel& detPixel = detFD.GetPixel(pixel);
47  const int telId = detPixel.GetTelescopeId();
48  const int eyeId = detPixel.GetEyeId();
49  // Get the calibration constant for this channel
50  const int channelId = detPixel.GetChannelId();
51  const fdet::Pixel& channel =
52  detFD.GetEye(eyeId).GetTelescope(telId).GetPixel(channelId);
54  }
55 
56  double
58  {
59  double meanVariance = 0;
60  int nVariance = 0;
64  ++telIter) {
66  telIter->PixelsBegin(ComponentSelector::eHasData);
67  pixIter != telIter->PixelsEnd(ComponentSelector::eHasData);
68  ++pixIter) {
69  const fevt::PixelRecData& pixRec = pixIter->GetRecData();
70  meanVariance += pow(pixRec.GetRMS() / GetCalibConst(*pixIter),2);
71  ++nVariance;
72  }
73  }
74  meanVariance /= nVariance;
75  return meanVariance;
76  }
77 
78 
79  FdNoiseAdder::FdNoiseAdder()
80  {
81  }
82 
83 
84  FdNoiseAdder::~FdNoiseAdder()
85  {
86  }
87 
88 
91  {
92 
93  CentralConfig* cc = CentralConfig::GetInstance();
94 
95  Branch topB =
96  cc->GetTopBranch("FdNoiseAdder");
97 
98  const double lgTargetVariance =
99  topB.GetChild("lgTargetVariance").Get<double>();
100  fTargetVariance = pow(10, lgTargetVariance);
101 
102  return eSuccess;
103  }
104 
105 
107  FdNoiseAdder::Run(evt::Event& event)
108  {
109 
110  utl::RandomEngine& theRandom =
111  RandomEngineRegistry::GetInstance().Get(RandomEngineRegistry::ePhysics);
112 
113  FEvent& fdEvent = event.GetFEvent();
114 
115  for (FEvent::EyeIterator eyeIter =
116  fdEvent.EyesBegin(ComponentSelector::eHasData);
117  eyeIter!=fdEvent.EyesEnd(ComponentSelector::eHasData);
118  ++eyeIter) {
119 
120  const double meanVariance = CalcMeanVariance(*eyeIter);
121  ostringstream msg;
122  msg << " Eye " << eyeIter->GetId() << " <Var> = " << meanVariance;
123  INFO(msg.str());
124  if (meanVariance > fTargetVariance) {
125  INFO(" target < actual variance ");
126  continue;
127  }
128  const double toAdd = fTargetVariance - meanVariance;
129  for (fevt::Eye::TelescopeIterator telIter =
130  eyeIter->TelescopesBegin(fevt::ComponentSelector::eInDAQ);
131  telIter != eyeIter->TelescopesEnd(fevt::ComponentSelector::eInDAQ);
132  ++telIter) {
133  for (fevt::Telescope::PixelIterator pixIter =
134  telIter->PixelsBegin(ComponentSelector::eHasData);
135  pixIter != telIter->PixelsEnd(ComponentSelector::eHasData);
136  ++pixIter) {
137  const double calConst = GetCalibConst(*pixIter);
138  fevt::PixelRecData& pixRec = pixIter->GetRecData();
139  TraceD& trace = pixRec.GetPhotonTrace();
140  for (unsigned int i = trace.GetStart(); i <= trace.GetStop(); ++i) {
141  const double adcOrig = trace[i] / calConst;
142  const double adcNoise = RandGauss::shoot(&theRandom.GetEngine(),
143  0, sqrt(toAdd));
144  trace[i] = (adcOrig + adcNoise) * calConst;
145  }
146 
147  const double rms =
148  TraceAlgorithm::StandardDeviation(trace, 5, 200);
149  pixRec.SetRMS(rms);
150  }
151  }
152 
153  const double finalVariance = CalcMeanVariance(*eyeIter);
154  msg.str("");
155  msg << " Eye " << eyeIter->GetId() << " final <Var> = "
156  << finalVariance;
157  INFO(msg.str());
158 
159  }
160  return eSuccess;
161 
162  }
163 
165  FdNoiseAdder::Finish()
166  {
167  return eSuccess;
168  }
169 
170 }
double StandardDeviation(const std::vector< double > &v, const double mean)
Definition: Functions.cc:26
double CalcMeanVariance(const fevt::Eye &eye)
Definition: FdNoiseAdder.cc:57
double GetRMS() const
Get the baseline RMS of the trace.
Definition: PixelRecData.h:76
unsigned int GetTelescopeId() const
1..6 for normal FD, 1..3 for HEAT
Fluorescence Detector Eye Event.
Definition: FEvent/Eye.h:29
RandomEngineType & GetEngine()
Definition: RandomEngine.h:32
SizeType GetStop() const
Get valid data stop bin.
Definition: Trace.h:148
const Pixel & GetPixel(const fevt::Pixel &eventPixel) const
Get fdet::Pixel from fevt::Channel.
Definition: FDetector.cc:198
EyeIterator EyesEnd(const ComponentSelector::Status status)
Definition: FEvent.h:66
double GetEndToEndCalibrationAtReferenceWavelength() const
#define INFO(message)
Macro for logging informational messages.
Definition: ErrorLogger.h:161
void Init()
Initialise the registry.
const Eye & GetEye(const unsigned int eyeId) const
Find eye by numerical Id.
Definition: FDetector.cc:68
boost::filter_iterator< ComponentSelector, AllEyeIterator > EyeIterator
selective Eye iterators
Definition: FEvent.h:55
Branch GetChild(const std::string &childName) const
Get child of this Branch by child name.
Definition: Branch.cc:211
double pow(const double x, const unsigned int i)
Detector description interface for FDetector-related data.
Definition: FDetector.h:44
const Pixel & GetPixel(const unsigned int pixelId) const
Get Pixel by id, throw utl::NonExistentComponentException if n.a.
T Get() const
Definition: Branch.h:271
Class representing a document branch.
Definition: Branch.h:107
utl::TraceD & GetPhotonTrace(const FdConstants::LightSource source=FdConstants::eTotal)
Definition: PixelRecData.h:35
Fluorescence Detector Pixel event.
Definition: FEvent/Pixel.h:28
unsigned int GetChannelId() const
Wraps the random number engine used to generate distributions.
Definition: RandomEngine.h:27
TelescopeIterator TelescopesEnd()
first available tel of status eHasData (DEPRECATED)
Definition: FEvent/Eye.cc:230
const Telescope & GetTelescope(const unsigned int telescopeId) const
Find Telescope by numerical Id.
EyeIterator EyesBegin(const ComponentSelector::Status status)
Definition: FEvent.h:58
boost::filter_iterator< ComponentSelector, ConstAllPixelIterator > ConstPixelIterator
boost::filter_iterator< ComponentSelector, AllTelescopeIterator > TelescopeIterator
selective Telescope iterators
Definition: FEvent/Eye.h:72
Top of Fluorescence Detector event hierarchy.
Definition: FEvent.h:33
TelescopeIterator TelescopesBegin()
first available tel of status eHasData (DEPRECATED)
Definition: FEvent/Eye.cc:207
boost::filter_iterator< ComponentSelector, AllPixelIterator > PixelIterator
selective Pixel iterators
ResultFlag
Flag returned by module methods to the RunController.
Definition: VModule.h:60
SizeType GetStart() const
Get valid data start bin.
Definition: Trace.h:142
Description of a pixel.
Main configuration utility.
Definition: CentralConfig.h:51
void SetRMS(const double rms)
Definition: PixelRecData.h:107
double GetCalibConst(const fevt::Pixel &pixel)
Definition: FdNoiseAdder.cc:44
Fluorescence Detector Pixel Reconstructed Data.
Definition: PixelRecData.h:27
boost::filter_iterator< ComponentSelector, ConstAllTelescopeIterator > ConstTelescopeIterator
Definition: FEvent/Eye.h:73
unsigned int GetEyeId() const
1..5 (4x normal FD, 1x HEAT)
utl::Branch GetTopBranch(const std::string &id)
Get top branch for moduleConfigLink with given id (XML files)

, generated on Tue Sep 26 2023.