ChannelSiPM.cc
Go to the documentation of this file.
1 #include <mdet/ChannelSiPM.h>
2 
3 #include <mdet/MHierarchyInfo.h>
4 //
5 #include <utl/AugerUnits.h>
6 #include <utl/MathConstants.h>
7 //
8 #include <fwk/RandomEngineRegistry.h>
9 //
10 #include <algorithm>
11 #include <vector>
12 #include <sstream>
13 #include <iostream>
14 #include <string>
15 
16 namespace mdet {
17 
19 
21 
22  ChannelSiPM::ChannelSiPM(int cId, const det::VManager::IndexMap& parentMap, const FrontEndSiPM& parent) :
23  MDetectorComponent<ChannelSiPM>::Type(cId, parentMap),
24  fFrontEnd(parent)
25  {
34  }
35 
36 
37  double
39  const
40  {
41  return GetData(fPreAmplifierTime, "preAmplifierTime");
42  }
43 
44 
45  double
47  const
48  {
49  return GetData(fPreAmplifierGain, "preAmplifierGain");
50  }
51 
52 
53  double
55  const
56  {
57  return GetData(fFastShaperTime, "fastShaperTime");
58  }
59 
60 
61  double
63  const
64  {
65  return GetData(fFastShaperGain, "fastShaperGain");
66  }
67 
68 
69  double
71  const
72  {
73  return GetData(fThreshold, "threshold");
74  }
75 
76 
77  double
79  const
80  {
81  return GetData(fThreshold, "discriminatorGain");
82  }
83 
84 
85  double
87  const
88  {
89  return GetData(fDiscriminatorLowLevel, "discriminatorLowLevel");
90  }
91 
92 
93  double
95  const
96  {
97  return GetData(fDiscriminatorHiLevel, "discriminatorHiLevel");
98  }
99 
100 
101  double
103  const
104  {
105  return GetData(fDiscriminatorTransitionTime, "discriminatorTransitionTime");
106  }
107 
108 
109  /*
110  *********************************
111  ***** Amplification stage. ******
112  *********************************
113  */
114 
115  std::complex<double>
117  const
118  {
119  const double preAmpGain = GetPreAmplifierGain();
120  const double preAmpTime = GetPreAmplifierTime();
121 
122  const double fsGain = GetFastShaperGain();
123  const double fsTime = GetFastShaperTime();
124 
125  const std::complex<double> preAmp(
126  preAmpGain / (1 + pow(freq * utl::kTwoPi * preAmpTime, 2)),
127  -preAmpGain*(freq * utl::kTwoPi * preAmpTime) / (1 + pow(freq * utl::kTwoPi * preAmpTime, 2))
128  );
129 
130  const std::complex<double> fs(
131  -fsGain * pow(freq * utl::kTwoPi * fsTime, 2) * 2 / (pow(1 + pow(freq * utl::kTwoPi*fsTime, 2), 2)),
132  -fsGain * (freq * utl::kTwoPi * fsTime) * (1 - pow(freq * utl::kTwoPi * fsTime, 2)) /
133  (pow(1 + pow(freq * utl::kTwoPi * fsTime, 2), 2))
134  );
135 
136  return preAmp * fs;
137  //return totalTransfer;
138  }
139 
140 
141  /*
142  *********************************
143  ***** Discrimination stage. *****
144  *********************************
145  */
146  double
148  const
149  {
150  if (v > GetDiscriminatorHiLevel())
151  return GetDiscriminatorHiLevel();
152  if (v < GetDiscriminatorLowLevel())
153  return GetDiscriminatorLowLevel();
154  return v;
155  }
156 
157 
158  double
159  ChannelSiPM::ComputeDiscriminator(double signal, double deltaTime)
160  const
161  {
162  double signalDiscriminator = GetDiscriminatorLowLevel();
163  if (signal >= GetDiscriminatorThreshold()) {
165  signalDiscriminator = GetDiscriminatorHiLevel();
166  } else {
167  fTimeOverThreshold += deltaTime;
168  }
169  } else {
170  fTimeOverThreshold = 0;
171  }
172  return signalDiscriminator;
173  /*Double_t signalDiscriminator = GetDiscriminatorGain()*(signal-GetDiscriminatorThreshold()); //mV
174  return ApplySaturation(signalDiscriminator);*/
175  }
176 
177 }
static const char *const kComponentId
Definition: ChannelSiPM.h:38
utl::Validated< double > fFastShaperGain
Definition: ChannelSiPM.h:196
double ApplySaturation(double v) const
Definition: ChannelSiPM.cc:147
double fTimeOverThreshold
Definition: ChannelSiPM.h:211
utl::Validated< double > fDiscriminatorHiLevel
Definition: ChannelSiPM.h:207
double ComputeDiscriminator(double signal, double deltaTime) const
Definition: ChannelSiPM.cc:159
int freq
Definition: dump1090.h:244
static const char *const kComponentsNames[13]
double GetDiscriminatorGain() const
Voltage change per time unit.
Definition: ChannelSiPM.cc:78
double GetFastShaperTime() const
Definition: ChannelSiPM.cc:54
double GetFastShaperGain() const
Pre amplifier gain.
Definition: ChannelSiPM.cc:62
Defines within it the common (templated) type for muon detector hierarchy components.
static const char *const kComponentsIds[13]
double pow(const double x, const unsigned int i)
void Register(utl::VValidated &v)
Register the field so as to allow handling it.
T & GetData(P< T > &d, const std::string &p) const
Common utility function for configuration.
Electronic front-end for the modules.
Definition: FrontEndSiPM.h:35
Eletronic ChannelSiPM.
Definition: ChannelSiPM.h:33
utl::Validated< double > fDiscriminatorTransitionTime
Definition: ChannelSiPM.h:209
double GetDiscriminatorHiLevel() const
Target voltage when the signal is higher than the threshold.
Definition: ChannelSiPM.cc:94
double GetDiscriminatorLowLevel() const
Target voltage when the signal is lower than the threshold.
Definition: ChannelSiPM.cc:86
constexpr double kTwoPi
Definition: MathConstants.h:27
std::complex< double > ComputeTransfer(double freq) const
Computes the circuit transfer function at the given frequency.
Definition: ChannelSiPM.cc:116
utl::Validated< double > fFastShaperTime
Definition: ChannelSiPM.h:194
double GetPreAmplifierTime() const
Pre amplifier time.
Definition: ChannelSiPM.cc:38
utl::Validated< double > fThreshold
Definition: ChannelSiPM.h:203
static const char *const kComponentName
Definition: ChannelSiPM.h:36
utl::Validated< double > fPreAmplifierTime
Definition: ChannelSiPM.h:190
std::map< std::string, std::string > IndexMap
Definition: VManager.h:133
utl::Validated< double > fPreAmplifierGain
Definition: ChannelSiPM.h:192
double GetPreAmplifierGain() const
Pre amplifier gain.
Definition: ChannelSiPM.cc:46
double GetDiscriminatorThreshold() const
Definition: ChannelSiPM.cc:70
Type
The type of file that we are acutally opening.
Definition: IoCodes.h:33
ChannelSiPM(int cId, const det::VManager::IndexMap &parentMap, const FrontEndSiPM &parent)
Constructs the electronic ChannelSiPM.
Definition: ChannelSiPM.cc:22
utl::Validated< double > fDiscriminatorLowLevel
Definition: ChannelSiPM.h:205
utl::Validated< double > fDiscriminatorGain
Definition: ChannelSiPM.h:198
double GetDiscriminatorTransitionTime() const
Time for the discriminator to go up, once the signal reaches the threshold.
Definition: ChannelSiPM.cc:102

, generated on Tue Sep 26 2023.