SiPM.h
Go to the documentation of this file.
1 #ifndef _mdet_SiPM_h
2 #define _mdet_SiPM_h
3 
4 #include <mdet/MDetectorComponent.h>
5 //
6 #include <utl/ShadowPtr.h>
7 #include <utl/Validated.h>
8 #include <utl/Math.h>
9 #include <utl/MathConstants.h>
10 #include <utl/ConsecutiveEnumFactory.h>
11 //
12 #include <complex>
13 #include <cmath>
14 
15 
16 namespace det {
17  struct ParentCreator;
18  struct ComponentUpdater;
19 }
20 
21 namespace mdet {
25  typedef std::vector<int> IdsContainer;
26 
27 
28  class SiPMArray;
29 
39  class SiPM :
40  public MDetectorComponent<SiPM>::Type {
41  public:
42 
43  static const char* const kComponentName;
44 
45  static const char* const kComponentId;
46 
47  const SiPMArray& GetSiPMArray() const {
48  return fSiPMArray;
49  }
74  class PE {
75  public:
79  double TimeSpaceEvaluate(double t) const {
80  /*
81  * ns
82  */
83 
84  double x = 0;
85  if(t>=fStartTime){
86  //x = fPulseShape.Eval(t);
87  x = -1*fAmplitude1*(1-exp(-(t-fStartTime)/fTime1))*(fAmplitude2*exp(-(t-fStartTime)/fTime2)+
88  fAmplitude3*exp(-(t-fStartTime)/fTime3)+exp(-(t-fStartTime)/fTime4));
89 
90  if(x>0) x = 0; //Positive values mean we are out of the signal range.
91  }
92  return kOverallSign * x;
93  }
98  double UpperLimit() const {
100  }
106  double LowerLimit() const {
107  return GetStartTime();
108  }
109 
110  double GetStartTime() const {
111  return fStartTime;
112  }
113 
114  double GetAmplitude1() const{
115  return fAmplitude1;
116  }
117 
118  double GetAmplitude2() const{
119  return fAmplitude2;
120  }
121 
122  double GetAmplitude3() const{
123  return fAmplitude3;
124  }
125 
126  double GetRiseTime() const{
127  return fTime1;
128  }
129 
130  double GetFallTime1() const{
131  return fTime2;
132  }
133 
134  double GetFallTime2() const{
135  return fTime3;
136  }
137 
138  double GetFallTime3() const{
139  return fTime4;
140  }
141 
142  private:
154  static const int kOverallSign = 1;
160  PE(const SiPM& sipm, double a1, double a2, double a3, double t1, double t2, double t3, double t4, double t0) :
161  fSiPM(sipm), fAmplitude1(a1), fAmplitude2(a2), fAmplitude3(a3), fTime1(t1), fTime2(t2), fTime3(t3), fTime4(t4), fStartTime(t0) { }
162 
163  const SiPM& fSiPM;
164  double fAmplitude1;
165  double fAmplitude2;
166  double fAmplitude3;
167  double fTime1;
168  double fTime2;
169  double fTime3;
170  double fTime4;
171  double fStartTime;
172  //TFormula fPulseShape;
173  //double fStartTime;
174  // Allow construction.
175  friend class SiPM;
176  };
183  PE MakePEAt(double t) const;
184  private:
188  void Update(bool invalidateData, bool invalidateComponents);
193  double GetPulseAmplitude1Mean() const;
198  double GetPulseAmplitude1StdDev() const;
203  double GetPulseAmplitude2Mean() const;
208  double GetPulseAmplitude2StdDev() const;
209 
214  double GetPulseAmplitude3Mean() const;
219  double GetPulseAmplitude3StdDev() const;
224  double GetPulseTime1Mean() const;
229  double GetPulseTime1StdDev() const;
234  double GetPulseTime2Mean() const;
239  double GetPulseTime2StdDev() const;
244  double GetPulseTime3Mean() const;
249  double GetPulseTime3StdDev() const;
250 
255  double GetPulseTime4Mean() const;
260  double GetPulseTime4StdDev() const;
261 
282  double GetPulseRelevantWidth() const;
283 
284  // void P2X(double *p, double *x, int nTest);
301  SiPM(int pId, const det::VManager::IndexMap& parentMap, const SiPMArray& parent);
305  ~SiPM() { }
313  friend struct det::ParentCreator;
319  template<class T>
320  friend void boost::checked_delete(T*) BOOST_NOEXCEPT;
324  friend class SiPMArray;
328  friend class Module;
330  friend struct det::ComponentUpdater;
331 
337 
338  mutable utl::Validated<PulseParametrizationForConfig> fPulseParametrization;
343 
344  mutable utl::Validated<double> fPulseAmplitude1Mean;
345 
346  mutable utl::Validated<double> fPulseAmplitude1StdDev;
347 
348  mutable utl::Validated<double> fPulseAmplitude2Mean;
349 
350  mutable utl::Validated<double> fPulseAmplitude2StdDev;
351 
352  mutable utl::Validated<double> fPulseAmplitude3Mean;
353 
354  mutable utl::Validated<double> fPulseAmplitude3StdDev;
355 
356  mutable utl::Validated<double> fPulseTime1Mean;
357 
358  mutable utl::Validated<double> fPulseTime1StdDev;
359 
360  mutable utl::Validated<double> fPulseTime2Mean;
361 
362  mutable utl::Validated<double> fPulseTime2StdDev;
363 
364  mutable utl::Validated<double> fPulseTime3Mean;
365 
366  mutable utl::Validated<double> fPulseTime3StdDev;
367 
368  mutable utl::Validated<double> fPulseTime4Mean;
369 
370  mutable utl::Validated<double> fPulseTime4StdDev;
371 
372  mutable utl::Validated<double> fPulseRelevantWidth;
373 
374  const SiPMArray& fSiPMArray;
375  };
376 
377 }
378 
379 #endif // _mdet_SiPM_h
double TimeSpaceEvaluate(double t) const
Evaluates the pulse in the time-space.
Definition: SiPM.h:79
static const char *const kComponentName
Definition: SiPM.h:43
utl::Validated< double > fPulseAmplitude1Mean
Definition: SiPM.h:344
double GetAmplitude2() const
Definition: SiPM.h:118
utl::Validated< double > fPulseTime4Mean
Definition: SiPM.h:368
double fTime3
Definition: SiPM.h:169
utl::Validated< double > fPulseTime1StdDev
Definition: SiPM.h:358
double GetFallTime3() const
Definition: SiPM.h:138
double GetFallTime2() const
Definition: SiPM.h:134
utl::Validated< double > fPulseTime2Mean
Definition: SiPM.h:360
utl::Validated< PulseParametrizationForConfig > fPulseParametrization
Definition: SiPM.h:338
double GetFallTime1() const
Definition: SiPM.h:130
double GetPulseAmplitude2StdDev() const
Standard deviation of amplitude 2 in PE pulses in Parameter space.
Definition: SiPM.cc:79
double fAmplitude1
Definition: SiPM.h:164
double GetPulseRelevantWidth() const
Pulse relevant time width.
Definition: SiPM.cc:156
Defines within it the common (templated) type for muon detector hierarchy components.
utl::Validated< double > fPulseTime3Mean
Definition: SiPM.h:364
PE pulse.
Definition: SiPM.h:74
double GetPulseTime1Mean() const
Mean time 1 of PE pulses in Parameter space.
Definition: SiPM.cc:100
double GetStartTime() const
Definition: SiPM.h:110
utl::Validated< double > fPulseAmplitude2StdDev
Definition: SiPM.h:350
utl::ShadowPtr< IdsContainer > fChannelSiPMScintillatorFiberIds
Container for indices of corresponding Channel, Scintillator, Fiber.
Definition: SiPM.h:342
const IdsContainer & GetChannelSiPMScintillatorFiberIds() const
Indices for Channel, Scintillator, Fiber of corrresponding Pixel.
Definition: SiPM.cc:49
const SiPMArray & GetSiPMArray() const
Definition: SiPM.h:47
SiPM(int pId, const det::VManager::IndexMap &parentMap, const SiPMArray &parent)
Constructs the SiPM.
Definition: SiPM.cc:26
const char * PulseParametrizationForConfig
Alias for a type considered within the config hierarchy, to be converted to the actual enum...
Definition: SiPM.h:336
~SiPM()
Definition: SiPM.h:305
static const int kOverallSign
Overall sign of the pulses.
Definition: SiPM.h:154
double GetPulseAmplitude2Mean() const
Mean amplitude 2 of PE pulses in Parameter space.
Definition: SiPM.cc:72
double fTime4
Definition: SiPM.h:170
const SiPM & fSiPM
Definition: SiPM.h:163
64 SiPM Array
Definition: SiPMArray.h:36
utl::Validated< double > fPulseAmplitude3StdDev
Definition: SiPM.h:354
utl::Validated< double > fPulseTime2StdDev
Definition: SiPM.h:362
double fStartTime
Definition: SiPM.h:171
double GetRiseTime() const
Definition: SiPM.h:126
double GetPulseTime4Mean() const
Mean time 4 of PE pulses in Parameter space.
Definition: SiPM.cc:142
Array of Scintillator.
double fAmplitude3
Definition: SiPM.h:166
a t3: algo, second, usecond and a vector of &lt;t3stat&gt;
Definition: XbT2.h:29
double GetPulseTime3Mean() const
Mean time 3 of PE pulses in Parameter space.
Definition: SiPM.cc:128
std::vector< int > IdsContainer
Typedef for container of corresponding Channel, Scintillator, Fiber indices.
utl::Validated< double > fPulseRelevantWidth
Definition: SiPM.h:372
utl::Validated< double > fPulseAmplitude3Mean
Definition: SiPM.h:352
const SiPMArray & fSiPMArray
Definition: SiPM.h:374
a second level trigger
Definition: XbT2.h:8
double GetPulseAmplitude1StdDev() const
Standard deviation of amplitude 1 in PE pulses in Parameter space.
Definition: SiPM.cc:65
double GetPulseAmplitude1Mean() const
Mean amplitude 1 of PE pulses in Parameter space.
Definition: SiPM.cc:58
utl::Validated< double > fPulseAmplitude1StdDev
Definition: SiPM.h:346
double GetPulseTime2Mean() const
Mean time 2 of PE pulses in Parameter space.
Definition: SiPM.cc:114
PE(const SiPM &sipm, double a1, double a2, double a3, double t1, double t2, double t3, double t4, double t0)
Construct with the parameters.
Definition: SiPM.h:160
double GetPulseTime4StdDev() const
Standard deviation of time 4 in PE pulses in Parameter space.
Definition: SiPM.cc:149
std::string const
Returns the message that identifies this component.
double GetPulseTime3StdDev() const
Standard deviation of time 3 in PE pulses in Parameter space.
Definition: SiPM.cc:135
utl::Validated< double > fPulseTime4StdDev
Definition: SiPM.h:370
std::map< std::string, std::string > IndexMap
Definition: VManager.h:133
double LowerLimit() const
Returns the lower temporal limit.
Definition: SiPM.h:106
utl::Validated< double > fPulseTime3StdDev
Definition: SiPM.h:366
static const char *const kComponentId
Definition: SiPM.h:45
PE MakePEAt(double t) const
Constructs an PE according to this SiPM characteristics.
Definition: SiPM.cc:169
double fAmplitude2
Definition: SiPM.h:165
double GetAmplitude1() const
Definition: SiPM.h:114
double GetPulseTime2StdDev() const
Standard deviation of time 2 in PE pulses in Parameter space.
Definition: SiPM.cc:121
double GetAmplitude3() const
Definition: SiPM.h:122
Type
The type of file that we are acutally opening.
Definition: IoCodes.h:33
utl::Validated< double > fPulseTime1Mean
Definition: SiPM.h:356
utl::Validated< double > fPulseAmplitude2Mean
Definition: SiPM.h:348
double GetPulseAmplitude3Mean() const
Mean amplitude 3 of PE pulses in Parameter space.
Definition: SiPM.cc:86
friend void boost::checked_delete(T *) BOOST_NOEXCEPT
Friendship for destruction.
double fTime2
Definition: SiPM.h:168
double UpperLimit() const
Returns the (for all practical purposes) upper temporal limit of the pulse.
Definition: SiPM.h:98
double GetPulseAmplitude3StdDev() const
Standard deviation of amplitude 3 in PE pulses in Parameter space.
Definition: SiPM.cc:93
double fTime1
Definition: SiPM.h:167
double GetPulseTime1StdDev() const
Standard deviation of time 1 in PE pulses in Parameter space.
Definition: SiPM.cc:107
The child the information from the parent upon construction.
void Update(bool invalidateData, bool invalidateComponents)
Definition: SiPM.cc:208

, generated on Tue Sep 26 2023.