1 #include <mdet/Pixel.h>
3 #include <mdet/MHierarchyInfo.h>
5 #include <utl/RandomEngine.h>
6 #include <utl/MathConstants.h>
8 #include <fwk/RandomEngineRegistry.h>
12 #include <CLHEP/RandomObjects/RandMultiGauss.h>
25 "amplitudeAndStandardDeviation",
26 "chargeAndStandardDeviation"
34 Register(fCrossTalkNormalizationFactor);
35 Register(fPulseParametrization);
36 Register(fPulseAmplitudeMean);
37 Register(fPulseAmplitudeStdDev);
38 Register(fPulseStdDevMean);
39 Register(fPulseStdDevStdDev);
40 Register(fPulseChargeMean);
41 Register(fPulseChargeStdDev);
42 Register(fPulseRelevantWidth);
51 return GetData<CrossTalkContainer,utl::ThrowOnZeroDereference,utl::ShadowPtr>(
fNeighborsCrossTalk,
"neighborsCrossTalkInside");
59 return GetData<CrossTalkContainer,utl::ThrowOnZeroDereference,utl::ShadowPtr>(
fNeighborsCrossTalk,
"neighborsCrossTalkSide");
67 return GetData<CrossTalkContainer,utl::ThrowOnZeroDereference,utl::ShadowPtr>(
fNeighborsCrossTalk,
"neighborsCrossTalkCorner");
177 CLHEP::HepSymMatrix covariance(2);
178 covariance[0][0] = sigma1 * sigma1;
179 covariance[1][1] = sigma2 * sigma2;
183 CLHEP::HepVector means(2);
193 CLHEP::RandMultiGauss multiGauss(rnd.
GetEngine(), means, covariance);
203 r = multiGauss.fire();
205 for (
int i = 0; i < r.num_row() && !anyNegative; ++i)
206 anyNegative = r[i] < 0;
207 }
while (anyNegative);
234 return SPE(*
this, a, t, s);
244 if (invalidateData) {
utl::Validated< double > fPulseAmplitudeStdDev
double GetPulseStdDevStdDev() const
Standard deviation of time spread in SPE pulses.
Amplitude and standard deviation.
static EnumType Create(const int k)
int version of the overloaded creation method.
RandomEngineType & GetEngine()
utl::Validated< double > fPulseStdDevStdDev
static const char *const kComponentsNames[13]
PulseParametrization
SPE can be parametrized fixing two of three parameters.
det::DetectorComponent< C, MManagerProvider > Type
Type specializing det::DetectorComponent for Muon hierarchy.
utl::Validated< double > fPulseParametersCorrelation
std::vector< double > CrossTalkContainer
Typedef for mdet::Pixel crosstalk container.
void Update(std::vector< double > &init, const std::vector< double > &res)
utl::Validated< double > fPulseRelevantWidth
static const char *const kComponentsIds[13]
const CrossTalkContainer & GetNeighborsCrossTalkCorner() const
Cross-talk coeffcient for neighbors of corner located pixel.
double GetPulseStdDevMean() const
Mean standard deviation in SPE pulses (time spread).
PulseParametrization GetPulseParametrization() const
Type of SPE parametrization actually employed.
T & GetData(P< T > &d, const std::string &p) const
Common utility function for configuration.
static const char *const kComponentName
double GetPulseChargeStdDev() const
Standard deviation of total charge in SPE pulses.
double GetPulseRelevantWidth() const
Pulse relevant time width.
utl::Validated< PulseParametrizationForConfig > fPulseParametrization
utl::Validated< double > fPulseAmplitudeMean
Wraps the random number engine used to generate distributions.
std::vector< int > IdsContainer
Typedef for container of corresponding Channel, Scintillator, Fiber indices.
double GetPulseAmplitudeMean() const
Mean amplitude of SPE pulses.
Multiple-pixel photo-multiplier tube.
utl::Validated< double > fPulseStdDevMean
utl::ShadowPtr< CrossTalkContainer > fNeighborsCrossTalk
Container for cross-talk coefficients.
utl::Validated< double > fPulseChargeMean
double GetPulseParametersCorrelation() const
The correlation between the two selected parameters.
std::map< std::string, std::string > IndexMap
Charge and standard deviation.
Pixel(const int pId, const det::VManager::IndexMap &parentMap, const PMT &parent)
Constructs the pixel.
static const char *const PulseParametrizationTags[]
Tags for textual representation.
static const char *const kComponentId
utl::Validated< double > fPulseChargeStdDev
void Update(const bool invalidateData, const bool invalidateComponents)
double GetPulseChargeMean() const
Mean total charge in SPE pulses.
utl::ShadowPtr< IdsContainer > fChannelScintillatorFiberIds
Container for indices of corresponding Channel, Scintillator, Fiber.
const IdsContainer & GetChannelScintillatorFiberIds() const
Indices for Channel, Scintillator, Fiber of corrresponding Pixel.
const CrossTalkContainer & GetNeighborsCrossTalkSide() const
Cross-talk coeffcient for neighbors of a side (not corner) located pixel.
SPE MakeSPEAt(const double t) const
Constructs an SPE according to this pixel's characteristics.
const CrossTalkContainer & GetNeighborsCrossTalkInside() const
Cross-talk coeffcient for neighbors of a pixel located inside the pixel matrix.
double GetPulseAmplitudeStdDev() const
Standard deviation of amplitude in SPE pulses.