Jpp 21.0.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JDETECTOR::JPMTAnalogueSignalProcessor Struct Reference

PMT analogue signal processor. More...

#include <JPMTAnalogueSignalProcessor.hh>

Inheritance diagram for JDETECTOR::JPMTAnalogueSignalProcessor:
JDETECTOR::JPMTSignalProcessorInterface JDETECTOR::JPMTParameters

Public Types

enum  JThresholdDomain { BELOW_THRESHOLD = -1 , THRESHOLDBAND = 0 , ABOVE_THRESHOLD = 2 }
 Threshold domain specifiers. More...
 

Public Member Functions

 JPMTAnalogueSignalProcessor (const JPMTParameters &parameters=JPMTParameters())
 Constructor.
 
void configure ()
 Configure internal parameters.
 
double getDecayTime () const
 Get decay time.
 
double getT1 () const
 Get time at transition point from Gaussian to exponential.
 
double getY1 () const
 Get amplitude at transition point from Gaussian to exponential.
 
double getStartOfLinearisation () const
 Get transition point from a model-dependent to linear relation between time-over-threshold and number of photo-electrons.
 
double getAmplitude (const double t1_ns) const
 Get amplitude at given time for a one photo-electron pulse.
 
double getRiseTime (const double npe, const double th) const
 Get time to pass from threshold to top of analogue pulse.
 
double getDecayTime (const double npe, const double th) const
 Get time to pass from top of analogue pulse to threshold.
 
double applySaturation (const double tot_ns) const
 Get time-over-threshold with saturation.
 
double removeSaturation (const double tot_ns) const
 Get time-over-threshold without saturation.
 
double getDerivativeOfSaturation (const double tot_ns) const
 Get derivative of saturation factor.
 
double getGainSpread (int NPE) const
 Get gain spread for given number of photo-electrons.
 
double getIntegralOfChargeProbability (const double xmin, const double xmax, const int NPE) const
 Get integral of probability.
 
double getIntegralOfChargeProbability (const JThresholdDomain domain, const int NPE) const
 Get integral of probability in specific threshold domain.
 
void setPMTParameters (const JPMTParameters &parameters)
 Set PMT parameters.
 
JThresholdDomain getThresholdDomain (const double npe) const
 Get threshold domain.
 
virtual bool applyQE () const override
 Apply relative QE.
 
virtual double getRandomTime (const double t_ns) const override
 Get randomised time according transit-time distribution.
 
virtual bool compare (const JPhotoElectron &first, const JPhotoElectron &second) const override
 Compare arrival times of photo-electrons.
 
virtual double getRandomCharge (const int NPE) const override
 Get randomised charge according to gain and gain spread.
 
virtual double getChargeProbability (const double npe, const int NPE) const override
 Get probability density for given charge.
 
virtual bool applyThreshold (const double npe) const override
 Apply threshold.
 
virtual double getRiseTime (const double npe) const override
 Get time to reach threshold.
 
virtual double getTimeOverThreshold (const double npe) const override
 Get time-over-threshold (ToT).
 
virtual double getDerivative (const double npe) const override
 Get derivative of number of photo-electrons to time-over-threshold.
 
virtual double getSurvivalProbability (const int NPE) const override
 Probability that a hit survives the simulation of the PMT.
 
virtual double getThresholdProbability (const int NPE) const override
 Probability that a hit survives the threshold of the PMT.
 
virtual double getNPE (const double tot_ns) const override
 Get number of photo-electrons.
 
double getTimeOverThresholdProbability (const double tot_ns, const int NPE) const
 Get probability of having a pulse with specific time-over-threshold.
 
double getIntegralOfTimeOverThresholdProbability (const double Tmin, const double Tmax, const int NPE) const
 Get cumulative probability of time-over-threshold distribution.
 
void operator() (const JCalibration &calibration, const JPMTData< JPMTSignal > &input, JPMTData< JPMTPulse > &output) const
 Process hits.
 
virtual void merge (JPMTData< JPMTPulse > &data) const
 Merging of PMT hits.
 
const JPMTParametersgetPMTParameters () const
 Get PMT parameters.
 
bool is_valid () const
 Check validity of PMT parameters.
 
int getType () const
 Get type for for time-slewing correction.
 
JProperties getProperties (const JEquationParameters &equation=JPMTParameters::getEquationParameters())
 Get properties of this class.
 
JProperties getProperties (const JEquationParameters &equation=JPMTParameters::getEquationParameters()) const
 Get properties of this class.
 

Static Public Member Functions

static double getMaximalRiseTime (const double th)
 Get maximal rise time for given threshold.
 
static double getTH0 ()
 Get lower threshold for rise time evaluation.
 
static double getTH1 ()
 Get upper threshold for rise time evaluation.
 
static double getTmin ()
 Get two photo-electron resolution for time-over-threshold.
 
static double getQmin ()
 Get width of charge distribution.
 
static JEquationParametersgetEquationParameters ()
 Get equation parameters.
 
static void setEquationParameters (const JEquationParameters &equation)
 Set equation parameters.
 

Public Attributes

double QE
 relative quantum efficiency
 
double gain
 gain [unit]
 
double gainSpread
 gain spread [unit]
 
double riseTime_ns
 rise time of analogue pulse [ns]
 
double TTS_ns
 transition time spread [ns]
 
double threshold
 threshold [npe]
 
double PunderAmplified
 probability of underamplified hit
 
double thresholdBand
 threshold-band [npe]
 
double mean_ns
 mean time-over-threshold of threshold-band hits [ns]
 
double sigma_ns
 time-over-threshold standard deviation of threshold-band hits [ns]
 
double slope
 slope [ns/npe]
 
double saturation
 saturation [ns]
 
bool slewing
 time slewing of analogue signal
 

Protected Attributes

double decayTime_ns
 decay time [ns]
 
double t1
 time at match point [ns]
 
double y1
 amplitude at match point [npe]
 
double x1
 Transition point from a logarithmic to a linear relation between time-over-threshold and number of photo-electrons.
 

Friends

std::istream & operator>> (std::istream &in, JPMTAnalogueSignalProcessor &object)
 Read PMT signal from input.
 

Detailed Description

PMT analogue signal processor.

This class provides for an implementation of the JDETECTOR::JPMTSignalProcessorInterface using a specific model for the analogue pulse of the PMT.
In this, the leading edge of the analogue pulse from the PMT is assumed to be a Gaussian and the tail an exponential.
The width of the Gaussian is referred to as the rise time and the inverse slope of the exponential to the decay time.
The two functions are matched at a point where the values and first derivatives are identical.
Note that the decay time is related to the rise time via the specification JDETECTOR::TIME_OVER_THRESHOLD_NS.

The charge distribution is assumed to be a Gaussian which is centered at the specified gain and truncated by the specified threshold.

The transit times are generated according the specified spread as follows.

  • If the specified transit-time spread (TTS) is negative, the transit times are generated according to measurements (see method JDETECTOR::getTransitTime).
    In this, the negated integral value of the TTS corresponds to the option which in turn corresponds to the detector identifier of the measurements.
  • If the specified TTS is positive, the transit times are generated according a Gaussian with a sigma equals to the given TTS.
  • If the TTS is zero, the transit times are generated without any spread.

Definition at line 52 of file JPMTAnalogueSignalProcessor.hh.

Member Enumeration Documentation

◆ JThresholdDomain

Threshold domain specifiers.

Enumerator
BELOW_THRESHOLD 

below threshold

THRESHOLDBAND 

inside threshold band

ABOVE_THRESHOLD 

above threshold

Definition at line 59 of file JPMTAnalogueSignalProcessor.hh.

59 {
60 BELOW_THRESHOLD = -1, //!< below threshold
61 THRESHOLDBAND = 0, //!< inside threshold band
62 ABOVE_THRESHOLD = 2 //!< above threshold
63 };

Constructor & Destructor Documentation

◆ JPMTAnalogueSignalProcessor()

JDETECTOR::JPMTAnalogueSignalProcessor::JPMTAnalogueSignalProcessor ( const JPMTParameters & parameters = JPMTParameters())
inline

Constructor.

Parameters
parametersPMT parameters

Definition at line 71 of file JPMTAnalogueSignalProcessor.hh.

71 :
73 JPMTParameters(parameters),
74 decayTime_ns(0.0),
75 t1(0.0),
76 y1(0.0),
77 x1(std::numeric_limits<double>::max())
78 {
79 configure();
80 }
JPMTParameters()
Default constructor.
double x1
Transition point from a logarithmic to a linear relation between time-over-threshold and number of ph...
void configure()
Configure internal parameters.

Member Function Documentation

◆ configure()

void JDETECTOR::JPMTAnalogueSignalProcessor::configure ( )
inline

Configure internal parameters.

This method provides the implementations for

  • matching of the leading edge of the analogue pulse (Gaussian) and the tail (exponential); and
  • determination of number of photo-electrons above which the time-over-threshold linearly depends on the number of photo-electrons (apart from saturation).

Note that this method will throw an error if the value of the rise time (i.e. width of the Gaussian) is too large with respect to the specification JDETECTOR::TIME_OVER_THRESHOLD_NS.

Definition at line 94 of file JPMTAnalogueSignalProcessor.hh.

95 {
96 static const int N = 100;
97 static const double precision = 1.0e-4;
98
99 // check thresholdband
100
101 if (threshold - thresholdBand < getTH0()) {
102 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::configure(): Invalid thresholdband [npe] " << thresholdBand);
103 }
104
105 // check rise time
106
108 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::configure(): Invalid rise time [ns] " << riseTime_ns);
109 }
110
111 // check probability for under-amplified signal
112
113 if (PunderAmplified < 0.0) {
114 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::configure(): Invalid probability of under-amplification " << PunderAmplified);
115 }
116
117 // check invalid combination of zero probability for under-amplified signal and zero gain spread
118
119 if (PunderAmplified == 0.0 && gainSpread <= 0.0) {
120 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::configure(): Invalid gain spread " << gainSpread << " for probability of under-amplification " << PunderAmplified);
121 }
122
123 // decay time
124
125 const double y = -log(threshold);
126
127 const double a = y;
128 const double b = riseTime_ns * sqrt(2.0*y) - TIME_OVER_THRESHOLD_NS;
129 const double c = 0.5*riseTime_ns*riseTime_ns;
130 const double Q = b*b - 4.0*a*c;
131
132 if (Q > 0.0)
133 decayTime_ns = (-b + sqrt(Q)) / (2.0*a);
134 else
135 decayTime_ns = -b / (2.0*a);
136
137 // fix matching of Gaussian and exponential
138
139 const double x = riseTime_ns / decayTime_ns;
140
141 t1 = riseTime_ns*x;
142 y1 = exp(-0.5*x*x);
143
144 // determine transition point to linear dependence of time-over-threshold as a function of number of photo-electrons
145
146 const double xs = saturation; // disable saturation
147
148 saturation = 1.0e50;
149
150 x1 = std::numeric_limits<double>::max(); // disable linearisation
151
152 double xmin = 1.0;
153 double xmax = 1.0 / (getDerivative(1.0) * slope);
154
155 for (int i = 0; i != N; ++i) {
156
157 const double x = 0.5 * (xmin + xmax);
158 const double u = getDerivative(x) * slope;
159
160 if (fabs(1.0 - u) < precision) {
161 break;
162 }
163
164 if (u < 1.0)
165 xmin = x;
166 else
167 xmax = x;
168 }
169
170 x1 = 0.5 * (xmin + xmax);
171
172 saturation = xs; // restore saturation
173 }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
double thresholdBand
threshold-band [npe]
double gainSpread
gain spread [unit]
double riseTime_ns
rise time of analogue pulse [ns]
double threshold
threshold [npe]
double slope
slope [ns/npe]
double PunderAmplified
probability of underamplified hit
double saturation
saturation [ns]
const double TIME_OVER_THRESHOLD_NS
Specification for time-over-threshold corresponding to a one photo-electron pulse.
static double getMaximalRiseTime(const double th)
Get maximal rise time for given threshold.
static double getTH0()
Get lower threshold for rise time evaluation.
virtual double getDerivative(const double npe) const override
Get derivative of number of photo-electrons to time-over-threshold.

◆ getDecayTime() [1/2]

double JDETECTOR::JPMTAnalogueSignalProcessor::getDecayTime ( ) const
inline

Get decay time.

Returns
decay time [ns]

Definition at line 181 of file JPMTAnalogueSignalProcessor.hh.

182 {
183 return decayTime_ns;
184 }

◆ getT1()

double JDETECTOR::JPMTAnalogueSignalProcessor::getT1 ( ) const
inline

Get time at transition point from Gaussian to exponential.

Returns
time [ns]

Definition at line 192 of file JPMTAnalogueSignalProcessor.hh.

193 {
194 return t1;
195 }

◆ getY1()

double JDETECTOR::JPMTAnalogueSignalProcessor::getY1 ( ) const
inline

Get amplitude at transition point from Gaussian to exponential.

Returns
amplitude [npe]

Definition at line 203 of file JPMTAnalogueSignalProcessor.hh.

204 {
205 return y1;
206 }

◆ getStartOfLinearisation()

double JDETECTOR::JPMTAnalogueSignalProcessor::getStartOfLinearisation ( ) const
inline

Get transition point from a model-dependent to linear relation between time-over-threshold and number of photo-electrons.

Returns
number of photo-electrons [npe]

Definition at line 214 of file JPMTAnalogueSignalProcessor.hh.

215 {
216 return x1;
217 }

◆ getAmplitude()

double JDETECTOR::JPMTAnalogueSignalProcessor::getAmplitude ( const double t1_ns) const
inline

Get amplitude at given time for a one photo-electron pulse.

Parameters
t1_nstime [ns]
Returns
amplitude [npe]

Definition at line 226 of file JPMTAnalogueSignalProcessor.hh.

227 {
228 if (t1_ns < t1) {
229
230 const double x = t1_ns / riseTime_ns;
231
232 return exp(-0.5*x*x); // Gaussian
233
234 } else {
235
236 const double x = t1_ns / decayTime_ns;
237
238 return exp(-x) / y1; // exponential
239 }
240 }

◆ getRiseTime() [1/2]

double JDETECTOR::JPMTAnalogueSignalProcessor::getRiseTime ( const double npe,
const double th ) const
inline

Get time to pass from threshold to top of analogue pulse.


In this, the leading edge of the analogue pulse is assumed to be Gaussian.

Parameters
npenumber of photo-electrons
ththreshold [npe]
Returns
time [ns]

Definition at line 251 of file JPMTAnalogueSignalProcessor.hh.

252 {
253 return riseTime_ns * sqrt(2.0*log(npe/th)); // Gaussian
254 }

◆ getDecayTime() [2/2]

double JDETECTOR::JPMTAnalogueSignalProcessor::getDecayTime ( const double npe,
const double th ) const
inline

Get time to pass from top of analogue pulse to threshold.


In this, the trailing edge of the analogue pulse is assumed to be exponential.

Parameters
npenumber of photo-electrons
ththreshold [npe]
Returns
time [ns]

Definition at line 265 of file JPMTAnalogueSignalProcessor.hh.

266 {
267 if (npe*y1 > th)
268 return decayTime_ns * (log(npe/th) - log(y1)); // exponential
269 else
270 return riseTime_ns * sqrt(2.0*log(npe/th)); // Gaussian
271 }

◆ getMaximalRiseTime()

static double JDETECTOR::JPMTAnalogueSignalProcessor::getMaximalRiseTime ( const double th)
inlinestatic

Get maximal rise time for given threshold.

Note that the rise time is entirely constrained by the specification JDETECTOR::TIME_OVER_THRESHOLD_NS.

Parameters
ththreshold [npe]
Returns
rise time [ns]

Definition at line 282 of file JPMTAnalogueSignalProcessor.hh.

283 {
284 if (th > 0.0 && th < 1.0)
285 return 0.5 * TIME_OVER_THRESHOLD_NS / sqrt(-2.0*log(th));
286 else
287 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getMaximalRiseTime(): Invalid threshold " << th);
288 }

◆ applySaturation()

double JDETECTOR::JPMTAnalogueSignalProcessor::applySaturation ( const double tot_ns) const
inline

Get time-over-threshold with saturation.

Parameters
tot_nstime-over-threshold without saturation
Returns
time-over-threshold with saturation

Definition at line 297 of file JPMTAnalogueSignalProcessor.hh.

298 {
299 return saturation / sqrt(tot_ns*tot_ns + saturation*saturation) * tot_ns;
300 }

◆ removeSaturation()

double JDETECTOR::JPMTAnalogueSignalProcessor::removeSaturation ( const double tot_ns) const
inline

Get time-over-threshold without saturation.

Parameters
tot_nstime-over-threshold with saturation
Returns
time-over-threshold without saturation

Definition at line 309 of file JPMTAnalogueSignalProcessor.hh.

310 {
311 if (tot_ns < saturation)
312 return saturation / sqrt(saturation*saturation - tot_ns*tot_ns) * tot_ns;
313 else
314 return std::numeric_limits<double>::max();
315 //THROW(JValueOutOfRange, "Time-over-threshold exceeds saturation " << tot_ns << " >= " << saturation);
316 }

◆ getDerivativeOfSaturation()

double JDETECTOR::JPMTAnalogueSignalProcessor::getDerivativeOfSaturation ( const double tot_ns) const
inline

Get derivative of saturation factor.

Parameters
tot_nstime-over-threshold without saturation
Returns
derivative of saturation factor

Definition at line 325 of file JPMTAnalogueSignalProcessor.hh.

326 {
327 return saturation * saturation * saturation / ((saturation*saturation + tot_ns*tot_ns) * sqrt(saturation*saturation + tot_ns*tot_ns));
328 }

◆ getGainSpread()

double JDETECTOR::JPMTAnalogueSignalProcessor::getGainSpread ( int NPE) const
inline

Get gain spread for given number of photo-electrons.

Parameters
NPEnumber of photo-electrons
Returns
gain spread

Definition at line 337 of file JPMTAnalogueSignalProcessor.hh.

338 {
339 return sqrt((double) NPE * gain) * gainSpread;
340 }

◆ getIntegralOfChargeProbability() [1/2]

double JDETECTOR::JPMTAnalogueSignalProcessor::getIntegralOfChargeProbability ( const double xmin,
const double xmax,
const int NPE ) const
inline

Get integral of probability.

Parameters
xminminimum number of photo-electrons
xmaxmaximum number of photo-electrons
NPEtrue number of photo-electrons
Returns
probability

Definition at line 351 of file JPMTAnalogueSignalProcessor.hh.

352 {
353 double zmin = xmin;
354 double zmax = xmax;
355
356 const double th = threshold - thresholdBand;
357
358 if (zmin < th) { zmin = th; }
359 if (zmax < th) { zmax = th; }
360
361 if (PunderAmplified <= 0.0) {
362
363 const double mu = NPE * gain;
364 const double sigma = getGainSpread(NPE);
365
366 const double cumulP = (0.5 * erfc((zmin - mu) / sqrt(2.0) / sigma) -
367 0.5 * erfc((zmax - mu) / sqrt(2.0) / sigma));
368 const double norm = 0.5 * erfc((th - mu) / sqrt(2.0) / sigma);
369
370 return cumulP / norm;
371
372 } else if (PunderAmplified < 1.0) {
373
374 const double fs = gainSpread * gainSpread;
375
376 double cumulP = 0.0;
377 double norm = 0.0;
378 double weight = pow(1.0 - PunderAmplified, NPE);
379
380 for (int k = 0; k <= NPE; ++k) { // k underamplified photo-electrons
381
382 const double mu = (NPE-k) * gain + (k) * fs * gain;
383 const double sigma = sqrt(mu) * getGainSpread(1);
384
385 cumulP += weight * (0.5 * erfc((zmin - mu) / sqrt(2.0) / sigma) -
386 0.5 * erfc((zmax - mu) / sqrt(2.0) / sigma));
387 norm += weight * (0.5 * erfc((th - mu) / sqrt(2.0) / sigma));
388
389 weight *= ((double) (NPE-k) / ((double) (k+1))) * PunderAmplified / (1.0 - PunderAmplified);
390 }
391
392 return cumulP / norm;
393
394 } else {
395
396 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getIntegralOfChargeProbability(): Invalid probability of under-amplification " << PunderAmplified);
397 }
398 }
T pow(const T &x, const double y)
Power .
Definition JMath.hh:97
double getGainSpread(int NPE) const
Get gain spread for given number of photo-electrons.

◆ getIntegralOfChargeProbability() [2/2]

double JDETECTOR::JPMTAnalogueSignalProcessor::getIntegralOfChargeProbability ( const JThresholdDomain domain,
const int NPE ) const
inline

Get integral of probability in specific threshold domain.

Parameters
domainthreshold domain
NPEtrue number of photo-electrons
Returns
probability

Definition at line 408 of file JPMTAnalogueSignalProcessor.hh.

409 {
410 switch (domain) {
411
412 case ABOVE_THRESHOLD:
414
415 case THRESHOLDBAND:
417
418 default:
419 return 0.0;
420 }
421 }
double getIntegralOfChargeProbability(const double xmin, const double xmax, const int NPE) const
Get integral of probability.

◆ setPMTParameters()

void JDETECTOR::JPMTAnalogueSignalProcessor::setPMTParameters ( const JPMTParameters & parameters)
inline

Set PMT parameters.

Parameters
parametersPMT parameters

Definition at line 429 of file JPMTAnalogueSignalProcessor.hh.

430 {
431 static_cast<JPMTParameters&>(*this).setPMTParameters(parameters);
432
433 configure();
434 }

◆ getThresholdDomain()

JThresholdDomain JDETECTOR::JPMTAnalogueSignalProcessor::getThresholdDomain ( const double npe) const
inline

Get threshold domain.

Parameters
npenumber of photo-electrons
Returns
threshold domain

Definition at line 460 of file JPMTAnalogueSignalProcessor.hh.

461 {
462 if (npe > threshold) {
463
464 return ABOVE_THRESHOLD;
465
466 } else if (npe > threshold - thresholdBand) {
467
468 return THRESHOLDBAND;
469
470 } else {
471
472 return BELOW_THRESHOLD;
473 }
474 }

◆ applyQE()

virtual bool JDETECTOR::JPMTAnalogueSignalProcessor::applyQE ( ) const
inlineoverridevirtual

Apply relative QE.

Returns
true if accepted; false if rejected

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 482 of file JPMTAnalogueSignalProcessor.hh.

483 {
484 if (QE <= 0.0)
485 return false;
486 else if (QE < 1.0)
487 return gRandom->Rndm() < QE;
488 else
489 return true;
490 }
double QE
relative quantum efficiency

◆ getRandomTime()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getRandomTime ( const double t_ns) const
inlineoverridevirtual

Get randomised time according transit-time distribution.

Parameters
t_nstime [ns]
Returns
time [ns]

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 499 of file JPMTAnalogueSignalProcessor.hh.

500 {
501 if (TTS_ns < 0.0)
502 return t_ns + getTransitTime(gRandom->Rndm(), getType());
503 else if (TTS_ns > 0.0)
504 return gRandom->Gaus(t_ns, TTS_ns);
505 else
506 return t_ns;
507 }
int getType() const
Get type for for time-slewing correction.
double TTS_ns
transition time spread [ns]
JDETECTOR::JTransitTimeGenerator_t getTransitTime
Function object to generate transit time.

◆ compare()

virtual bool JDETECTOR::JPMTAnalogueSignalProcessor::compare ( const JPhotoElectron & first,
const JPhotoElectron & second ) const
inlineoverridevirtual

Compare arrival times of photo-electrons.

This implementation uses the internal rise time as two photo-electron resolution.

Two (or more) photo-electrons are merged if they are comparable.

Parameters
firstfirst photo-electron
secondsecond photo-electron
Returns
true if arrival times of photo-electrons are within two photo-electron resolution; else false

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 520 of file JPMTAnalogueSignalProcessor.hh.

521 {
522 return second.t_ns < first.t_ns + riseTime_ns;
523 }

◆ getRandomCharge()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getRandomCharge ( const int NPE) const
inlineoverridevirtual

Get randomised charge according to gain and gain spread.

Parameters
NPEnumber of photo-electrons
Returns
number of photo-electrons

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 532 of file JPMTAnalogueSignalProcessor.hh.

533 {
534 double q;
535
536 do {
537
538 if (PunderAmplified <= 0.0) {
539
540 const double mu = NPE * gain;
541 const double sigma = getGainSpread(NPE);
542
543 q = gRandom->Gaus(mu,sigma);
544
545 } else if (PunderAmplified < 1.0) {
546
547 // Determine which contribution to sample from
548 // Method uses inverse transform sampling for a binomial distribution
549
550 const double X = gRandom->Uniform();
551 double sum_p = 0.0;
552 double weight = pow(1-PunderAmplified, NPE);
553 int k = 0; // k underamplified photo-electrons
554
555 for (; k <= NPE; ++k) {
556
557 sum_p += weight;
558 if (sum_p > X) { break; }
559
560 weight *= ((double) (NPE-k) / ((double) (k+1))) * PunderAmplified / (1.0 - PunderAmplified);
561 }
562
563 // Sample from chosen contribution
564 const double fs = gainSpread * gainSpread;
565 const double mu = (NPE-k) * gain + (k) * fs * gain;
566 const double sigma = sqrt(mu) * getGainSpread(1);
567
568 q = gRandom->Gaus(mu,sigma);
569
570 } else {
571
572 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getRandomCharge(): Invalid probability of under-amplification " << PunderAmplified);
573 }
574
575 } while (q < 0.0);
576
577 return q;
578 }

◆ getChargeProbability()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getChargeProbability ( const double npe,
const int NPE ) const
inlineoverridevirtual

Get probability density for given charge.

Parameters
npeobserved number of photo-electrons
NPEtrue number of photo-electrons
Returns
probability [npe^-1]

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 588 of file JPMTAnalogueSignalProcessor.hh.

589 {
591
592 if (PunderAmplified <= 0.0) {
593
594 const double mu = NPE * gain;
595 const double sigma = getGainSpread(NPE);
596
597 const double prob = JMATH::Gauss(npe, mu, sigma);
598 const double norm = 0.5 * erfc(((threshold-thresholdBand) - mu) / sqrt(2.0) / sigma);
599
600 return prob / norm;
601
602 } else if (PunderAmplified < 1.0) {
603
604 const double fs = gainSpread * gainSpread;
605
606 double norm = 0.0;
607 double prob = 0.0;
608 double weight = pow(1-PunderAmplified, NPE);
609
610 for (int k = 0; k <= NPE; ++k) { // k underamplified photo-electrons
611
612 const double mu = (NPE-k) * gain + (k) * fs * gain;
613 const double sigma = sqrt(mu) * getGainSpread(1);
614
615 prob += weight * JMATH::Gauss(npe, mu, sigma);
616 norm += weight * (0.5 * erfc(((threshold-thresholdBand) - mu) / sqrt(2.0) / sigma));
617
618 weight *= ((double) (NPE-k) / ((double) (k+1))) * PunderAmplified / (1.0 - PunderAmplified);
619 }
620
621 return prob / norm;
622 }
623 }
624
625 return 0.0;
626 }
double Gauss(const double x, const double sigma)
Normalised Gauss function.
JThresholdDomain getThresholdDomain(const double npe) const
Get threshold domain.

◆ applyThreshold()

virtual bool JDETECTOR::JPMTAnalogueSignalProcessor::applyThreshold ( const double npe) const
inlineoverridevirtual

Apply threshold.

Parameters
npenumber of photo-electrons
Returns
true if pass; else false

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 635 of file JPMTAnalogueSignalProcessor.hh.

636 {
638 }

◆ getRiseTime() [2/2]

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getRiseTime ( const double npe) const
inlineoverridevirtual

Get time to reach threshold.

Note that the rise time is defined to be zero for a one photo-electron signal.

Parameters
npenumber of photo-electrons
Returns
time [ns]

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 649 of file JPMTAnalogueSignalProcessor.hh.

650 {
651 if (slewing) {
652
653 switch (getThresholdDomain(npe)) {
654
655 case THRESHOLDBAND:
656 return ((getRiseTime(npe, getTH0()) - getRiseTime(npe, threshold-thresholdBand)) -
657 (getRiseTime(1.0, getTH0()) - getRiseTime(1.0, threshold-thresholdBand))) + this->mean_ns;
658
659 case ABOVE_THRESHOLD:
660 return ((getRiseTime(npe, getTH0()) - getRiseTime(npe, threshold)) -
661 (getRiseTime(1.0, getTH0()) - getRiseTime(1.0, threshold)));
662
663 default:
664 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getRiseTime: Invalid charge " << npe);
665 }
666
667 } else {
668
669 return 0.0;
670 }
671 }
double mean_ns
mean time-over-threshold of threshold-band hits [ns]
bool slewing
time slewing of analogue signal
double getRiseTime(const double npe, const double th) const
Get time to pass from threshold to top of analogue pulse.

◆ getTimeOverThreshold()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getTimeOverThreshold ( const double npe) const
inlineoverridevirtual

Get time-over-threshold (ToT).

Parameters
npenumber of photo-electrons
Returns
ToT [ns]

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 680 of file JPMTAnalogueSignalProcessor.hh.

681 {
682 switch (getThresholdDomain(npe)) {
683
684 case THRESHOLDBAND: {
685
686 return gRandom->Gaus(mean_ns, sigma_ns);
687 }
688
689 case ABOVE_THRESHOLD: {
690
691 double tot = 0.0;
692
693 if (npe*y1 <= threshold) {
694
695 tot += getRiseTime(npe, threshold); // Gaussian
696 tot += getRiseTime(npe, threshold); // Gaussian
697
698 } else if (npe <= getStartOfLinearisation()) {
699
700 tot += getRiseTime (npe, threshold); // Gaussian
701 tot += getDecayTime(npe, threshold); // exponential
702
703 } else {
704
705 tot += getRiseTime (getStartOfLinearisation(), threshold); // Gaussian
706 tot += getDecayTime(getStartOfLinearisation(), threshold); // exponential
707
708 tot += slope * (npe - getStartOfLinearisation()); // linear
709 }
710
711 return applySaturation(tot);
712 }
713
714 default: {
715
716 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getTimeOverThreshold: Invalid charge " << npe);
717 }}
718 }
double sigma_ns
time-over-threshold standard deviation of threshold-band hits [ns]
double applySaturation(const double tot_ns) const
Get time-over-threshold with saturation.
double getStartOfLinearisation() const
Get transition point from a model-dependent to linear relation between time-over-threshold and number...

◆ getDerivative()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getDerivative ( const double npe) const
inlineoverridevirtual

Get derivative of number of photo-electrons to time-over-threshold.

Parameters
npenumber of photo-electrons
Returns
dnpe/dToT [ns^-1]

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 727 of file JPMTAnalogueSignalProcessor.hh.

728 {
729 switch (getThresholdDomain(npe)) {
730
731 case ABOVE_THRESHOLD: {
732
733 const double z = riseTime_ns / sqrt(2.0 * log(npe/threshold));
734
735 double y = 0.0;
736
737 if (npe*y1 > threshold) {
738
739 if (npe <= getStartOfLinearisation())
740 y = npe / (z + decayTime_ns); // Gaussian + exponential
741 else
742 y = 1.0 / slope; // linear
743
744 } else {
745
746 y = npe / (2.0 * z); // Gaussian + Gaussian
747 }
748
749 const double tot_ns = getTimeOverThreshold(npe);
750
752 }
753
754 default:
755 return 0.0;
756 }
757 }
double getDerivativeOfSaturation(const double tot_ns) const
Get derivative of saturation factor.
double removeSaturation(const double tot_ns) const
Get time-over-threshold without saturation.
virtual double getTimeOverThreshold(const double npe) const override
Get time-over-threshold (ToT).

◆ getSurvivalProbability()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getSurvivalProbability ( const int NPE) const
inlineoverridevirtual

Probability that a hit survives the simulation of the PMT.

The survival probability takes into account the number of photo-electrons, the analogue signal of the PMT and the threshold of the discriminator.

Parameters
NPEnumber of photo-electrons
Returns
probability

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 767 of file JPMTAnalogueSignalProcessor.hh.

768 {
769 using namespace JPP;
770
771 if (QE <= 0.0) {
772
773 return 0.0;
774
775 } else if (QE < 1.0) {
776
777 double P = 0.0;
778
779 for (int i = 1; i <= NPE; ++i) { // i corresponds to number of photo-electrons passing relative QE
780
781 const double p = (binomial(NPE, i) * pow(QE, i) * pow(1.0 - QE, NPE - i));
782
783 P += p * getThresholdProbability(NPE);
784 }
785
786 return P;
787
788 } else {
789
790 return getThresholdProbability(NPE);
791 }
792 }
double binomial(const size_t n, const size_t k)
Binomial function.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
virtual double getThresholdProbability(const int NPE) const override
Probability that a hit survives the threshold of the PMT.

◆ getThresholdProbability()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getThresholdProbability ( const int NPE) const
inlineoverridevirtual

Probability that a hit survives the threshold of the PMT.

Parameters
NPEnumber of photo-electrons
Returns
probability

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 801 of file JPMTAnalogueSignalProcessor.hh.

802 {
803 if (NPE > 0) {
804
805 if (PunderAmplified <= 0.0) {
806
807 const double mu = NPE * gain;
808 const double sigma = getGainSpread(NPE);
809
810 if (sigma > 0.0) {
811
812 const double Ptotal = 0.5 * erfc((0.0 - mu) / (sqrt(2.0) * sigma));
813 const double Pabove = 0.5 * erfc((threshold - thresholdBand - mu) / (sqrt(2.0) * sigma));
814
815 return Pabove / Ptotal;
816
817 } else if (mu >= threshold - thresholdBand) {
818
819 return 1.0;
820
821 } else {
822
823 return 0.0;
824 }
825
826 } else if (PunderAmplified < 1.0) {
827
828 const double fs = gainSpread * gainSpread; // amplification factor per stage equals square of relative gain spread
829
830 double Ptotal = 0.0;
831 double Pabove = 0.0;
832 double weight = pow(1.0 - PunderAmplified, NPE); // binomial weight - start with all photo-electrons nominal
833
834 for (int k = 0; k <= NPE; ++k) { // NPE-k nominal photo-electrons and k underamplified photo-electrons
835
836 const double mu = (NPE-k) * gain + (k) * fs * gain;
837 const double sigma = sqrt(mu) * getGainSpread(1);
838
839 if (sigma > 0.0) {
840
841 Ptotal += weight * 0.5 * erfc((0.0 - mu) / (sqrt(2.0) * sigma));
842 Pabove += weight * 0.5 * erfc((threshold - thresholdBand - mu) / (sqrt(2.0) * sigma));
843
844 } else if (mu >= threshold - thresholdBand) {
845
846 Ptotal += weight;
847 Pabove += weight;
848 }
849
850 weight *= ((double) (NPE-k) / ((double) (k+1))) * PunderAmplified / (1.0 - PunderAmplified);
851 }
852
853 return Pabove / Ptotal;
854
855 } else {
856
857 THROW(JValueOutOfRange, "JPMTAnalogueSignalProcessor::getThresholdProbability(): Invalid PunderAmplified " << PunderAmplified);
858 }
859 }
860
861 return 0.0;
862 }

◆ getNPE()

virtual double JDETECTOR::JPMTAnalogueSignalProcessor::getNPE ( const double tot_ns) const
inlineoverridevirtual

Get number of photo-electrons.

Parameters
tot_nstime over threshold [ns]
Returns
number of photo-electrons

Reimplemented from JDETECTOR::JPMTSignalProcessorInterface.

Definition at line 871 of file JPMTAnalogueSignalProcessor.hh.

872 {
873 if (tot_ns >= saturation) {
874 return std::numeric_limits<double>::max();
875 }
876
877 const double tot = removeSaturation(tot_ns);
878 const double TOT = (getRiseTime (getStartOfLinearisation(), threshold) +
880
881 if (tot <= 2*getRiseTime(threshold/y1,threshold)) { // Gaussian + Gaussian
882
883 return threshold * exp(tot*tot/riseTime_ns/riseTime_ns/8.0);
884
885 } else if (tot <= TOT) { // Gaussian + Exponential
886
887 const double a = decayTime_ns;
888 const double b = sqrt(2.0) * riseTime_ns;
889 const double c = -(decayTime_ns*log(y1) + tot);
890 const double z = (-b + sqrt(b*b - 4*a*c)) / (2*a);
891
892 return threshold * exp(z*z);
893
894 } else { // linear
895
896 return getStartOfLinearisation() + (tot - TOT) / slope;
897 }
898 }

◆ getTimeOverThresholdProbability()

double JDETECTOR::JPMTAnalogueSignalProcessor::getTimeOverThresholdProbability ( const double tot_ns,
const int NPE ) const
inline

Get probability of having a pulse with specific time-over-threshold.

Parameters
tot_nstime-over-threshold with saturation [ns]
NPEtrue number of photo-electrons
Returns
probability [ns^-1]

Definition at line 908 of file JPMTAnalogueSignalProcessor.hh.

909 {
910 const double PthBand = getIntegralOfChargeProbability(THRESHOLDBAND, NPE);
911
912 const double npe = getNPE(tot_ns);
913 const double y = getChargeProbability(npe, NPE);
914 const double v = getDerivative(npe);
915
916 const double RthBand = PthBand * JMATH::Gauss(tot_ns, mean_ns, sigma_ns);
917 const double RaboveTh = y * v;
918
919 return RthBand + RaboveTh;
920 }
virtual double getChargeProbability(const double npe, const int NPE) const override
Get probability density for given charge.
virtual double getNPE(const double tot_ns) const override
Get number of photo-electrons.

◆ getIntegralOfTimeOverThresholdProbability()

double JDETECTOR::JPMTAnalogueSignalProcessor::getIntegralOfTimeOverThresholdProbability ( const double Tmin,
const double Tmax,
const int NPE ) const
inline

Get cumulative probability of time-over-threshold distribution.

Parameters
Tminminimum time-over-threshold (with saturation) [ns]
Tmaxmaximum time-over-threshold (with saturation) [ns]
NPEtrue number of photo-electrons
Returns
probability [ns^-1]

Definition at line 931 of file JPMTAnalogueSignalProcessor.hh.

932 {
933
934 const double PthBand = getIntegralOfChargeProbability(THRESHOLDBAND, NPE);
935
936 const double IthBand = PthBand * (0.5 * erfc((Tmin - mean_ns) / sqrt(2.0) / sigma_ns) -
937 0.5 * erfc((Tmax - mean_ns) / sqrt(2.0) / sigma_ns));
938 const double IaboveTh = getIntegralOfChargeProbability(getNPE(Tmin), getNPE(Tmax), NPE);
939
940 return IthBand + IaboveTh;
941 }

◆ getTH0()

static double JDETECTOR::JPMTAnalogueSignalProcessor::getTH0 ( )
inlinestatic

Get lower threshold for rise time evaluation.

Returns
threshold [npe]

Definition at line 949 of file JPMTAnalogueSignalProcessor.hh.

950 {
951 return 0.1;
952 }

◆ getTH1()

static double JDETECTOR::JPMTAnalogueSignalProcessor::getTH1 ( )
inlinestatic

Get upper threshold for rise time evaluation.

Returns
threshold [npe]

Definition at line 960 of file JPMTAnalogueSignalProcessor.hh.

961 {
962 return 0.9;
963 }

◆ operator()()

void JDETECTOR::JPMTSignalProcessorInterface::operator() ( const JCalibration & calibration,
const JPMTData< JPMTSignal > & input,
JPMTData< JPMTPulse > & output ) const
inlineinherited

Process hits.

Two (or more) photo-electrons are combined if they are comparable according method compare.
Two (or more) consecutive hits hits maybe merged (according method merge).
A PMT signal with negative number of photo-electrons is not subjected to the quantum efficiency and transit-time distribution.
This feature is used to simulate the singles rate of a PMT when the measured QE is zero.

Parameters
calibrationPMT calibration
inputPMT signals
outputPMT hits

Definition at line 91 of file JPMTSignalProcessorInterface.hh.

94 {
95 // apply transition time distribution to each photo-electron.
96
97 JPMTData<JPhotoElectron> buffer;
98
99 for (JPMTData<JPMTSignal>::const_iterator hit = input.begin(); hit != input.end(); ++hit) {
100
101 for (int i = 0; i < hit->npe; ++i) {
102 if (applyQE()) {
103 buffer.push_back(JPhotoElectron(getRandomTime(hit->t_ns)));
104 }
105 }
106
107 for (int i = 0; i > hit->npe; --i) {
108 buffer.push_back(JPhotoElectron(hit->t_ns));
109 }
110 }
111
112 if (!buffer.empty()) {
113
114 buffer.push_back(JPhotoElectron::getEndMarker());
115
116 buffer.sort();
117
118
119 // generate PMT hits from time sequence of photo-electrons.
120
121 for (JPMTData<JPhotoElectron>::const_iterator q = buffer.begin(), p = q++; q != buffer.end(); ++q) {
122
123 while (compare(*p,*q)) {
124 ++q;
125 }
126
127 const double npe = getRandomCharge(distance(p,q));
128
129 if (applyThreshold(npe)) {
130 output.push_back(JPMTPulse(putTime(p->t_ns + getRiseTime(npe), calibration), getTimeOverThreshold(npe)));
131 }
132
133 p = q;
134 }
135
136 // merge overlapping PMT hits.
137
138 merge(output);
139 }
140 }
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
std::vector< JElement_t >::const_iterator const_iterator
virtual bool applyQE() const
Apply relative QE.
virtual double getTimeOverThreshold(const double npe) const
Get time-over-threshold (ToT).
virtual double getRandomCharge(const int NPE) const
Get randomised charge according to gain and gain spread.
virtual bool applyThreshold(const double npe) const
Apply threshold.
virtual bool compare(const JPhotoElectron &first, const JPhotoElectron &second) const
Compare arrival times of photo-electrons.
virtual double getRiseTime(const double npe) const
Get time to reach threshold.
virtual double getRandomTime(const double t_ns) const
Get randomised time according transition time distribution.
virtual void merge(JPMTData< JPMTPulse > &data) const
Merging of PMT hits.
double putTime(const T &t1, const JCalibration &cal)
Get de-calibrated time.
static JPhotoElectron getEndMarker()
Get end marker.

◆ merge()

virtual void JDETECTOR::JPMTSignalProcessorInterface::merge ( JPMTData< JPMTPulse > & data) const
inlinevirtualinherited

Merging of PMT hits.

Hits with overlapping time-over-threshold signals should -de facto- be combined. In this, the leading edge is maintained and the time-over-threshold is set to the difference between the overall trailing and leading edges. As a result, the number of PMT hits may be reduced.

Parameters
dataPMT hits (I/O)

Definition at line 311 of file JPMTSignalProcessorInterface.hh.

312 {
313 using namespace std;
314
316
317 for (JPMTData<JPMTPulse>::iterator i = data.begin(); i != data.end(); ) {
318
319 double t1 = i->t_ns;
320 double t2 = i->t_ns + i->tot_ns;
321
322 while (++i != data.end() && i->t_ns < t2 + getTmin()) {
323 t2 = max(t2, i->t_ns + i->tot_ns);
324 }
325
326 out->t_ns = t1;
327 out->tot_ns = t2 - t1;
328
329 ++out;
330 }
331
332 data.resize(distance(data.begin(), out));
333 }
std::vector< JElement_t >::iterator iterator
static double getTmin()
Get two photo-electron resolution for time-over-threshold.

◆ getTmin()

static double JDETECTOR::JPMTSignalProcessorInterface::getTmin ( )
inlinestaticinherited

Get two photo-electron resolution for time-over-threshold.

Returns
minimal time [ns]

Definition at line 341 of file JPMTSignalProcessorInterface.hh.

342 {
343 return 1.0;
344 }

◆ getQmin()

static double JDETECTOR::JPMTSignalProcessorInterface::getQmin ( )
inlinestaticinherited

Get width of charge distribution.

Returns
width charge distribution [npe]

Definition at line 352 of file JPMTSignalProcessorInterface.hh.

353 {
354 return 1.0e-3;
355 }

◆ getPMTParameters()

const JPMTParameters & JDETECTOR::JPMTParameters::getPMTParameters ( ) const
inlineinherited

Get PMT parameters.

Returns
PMT parameters

Definition at line 112 of file JPMTParameters.hh.

113 {
114 return static_cast<const JPMTParameters&>(*this);
115 }

◆ is_valid()

bool JDETECTOR::JPMTParameters::is_valid ( ) const
inlineinherited

Check validity of PMT parameters.

Returns
true if valid; else false

Definition at line 134 of file JPMTParameters.hh.

135 {
136 if (this->QE < 0.0 ||
137 this->gain < 0.0 ||
138 this->gainSpread < 0.0 ||
139 this->threshold < 0.0 ||
140 this->thresholdBand < 0.0) {
141 return false;
142 }
143
144 return true;
145 }

◆ getType()

int JDETECTOR::JPMTParameters::getType ( ) const
inlineinherited

Get type for for time-slewing correction.

Returns
type

Definition at line 153 of file JPMTParameters.hh.

154 {
155 if (this->TTS_ns < 0.0)
156 return -lrint(this->TTS_ns);
157 else
158 return 0;
159 }

◆ getEquationParameters()

static JEquationParameters & JDETECTOR::JPMTParameters::getEquationParameters ( )
inlinestaticinherited

Get equation parameters.

Returns
equation parameters

Definition at line 209 of file JPMTParameters.hh.

210 {
211 static JEquationParameters equation("=", ",", "./", "#");
212
213 return equation;
214 }
Simple data structure to support I/O of equations (see class JLANG::JEquation).

◆ setEquationParameters()

static void JDETECTOR::JPMTParameters::setEquationParameters ( const JEquationParameters & equation)
inlinestaticinherited

Set equation parameters.

Parameters
equationequation parameters

Definition at line 222 of file JPMTParameters.hh.

223 {
224 getEquationParameters() = equation;
225 }
static JEquationParameters & getEquationParameters()
Get equation parameters.

◆ getProperties() [1/2]

JProperties JDETECTOR::JPMTParameters::getProperties ( const JEquationParameters & equation = JPMTParameters::getEquationParameters())
inlineinherited

Get properties of this class.

Parameters
equationequation parameters

Definition at line 233 of file JPMTParameters.hh.

234 {
235 return JPMTParametersHelper(*this, equation);
236 }

◆ getProperties() [2/2]

JProperties JDETECTOR::JPMTParameters::getProperties ( const JEquationParameters & equation = JPMTParameters::getEquationParameters()) const
inlineinherited

Get properties of this class.

Parameters
equationequation parameters

Definition at line 244 of file JPMTParameters.hh.

245 {
246 return JPMTParametersHelper(*this, equation);
247 }

Friends And Related Symbol Documentation

◆ operator>>

std::istream & operator>> ( std::istream & in,
JPMTAnalogueSignalProcessor & object )
friend

Read PMT signal from input.

Parameters
ininput stream
objectPMT signal
Returns
input stream

Definition at line 444 of file JPMTAnalogueSignalProcessor.hh.

445 {
446 in >> static_cast<JPMTParameters&>(object);
447
448 object.configure();
449
450 return in;
451 }

Member Data Documentation

◆ decayTime_ns

double JDETECTOR::JPMTAnalogueSignalProcessor::decayTime_ns
protected

decay time [ns]

Definition at line 967 of file JPMTAnalogueSignalProcessor.hh.

◆ t1

double JDETECTOR::JPMTAnalogueSignalProcessor::t1
protected

time at match point [ns]

Definition at line 968 of file JPMTAnalogueSignalProcessor.hh.

◆ y1

double JDETECTOR::JPMTAnalogueSignalProcessor::y1
protected

amplitude at match point [npe]

Definition at line 969 of file JPMTAnalogueSignalProcessor.hh.

◆ x1

double JDETECTOR::JPMTAnalogueSignalProcessor::x1
protected

Transition point from a logarithmic to a linear relation between time-over-threshold and number of photo-electrons.


Measurements by B. Schermer and R. Bruijn at Nikhef.

Definition at line 975 of file JPMTAnalogueSignalProcessor.hh.

◆ QE

double JDETECTOR::JPMTParameters::QE
inherited

relative quantum efficiency

Definition at line 250 of file JPMTParameters.hh.

◆ gain

double JDETECTOR::JPMTParameters::gain
inherited

gain [unit]

Definition at line 251 of file JPMTParameters.hh.

◆ gainSpread

double JDETECTOR::JPMTParameters::gainSpread
inherited

gain spread [unit]

Definition at line 252 of file JPMTParameters.hh.

◆ riseTime_ns

double JDETECTOR::JPMTParameters::riseTime_ns
inherited

rise time of analogue pulse [ns]

Definition at line 253 of file JPMTParameters.hh.

◆ TTS_ns

double JDETECTOR::JPMTParameters::TTS_ns
inherited

transition time spread [ns]

Definition at line 254 of file JPMTParameters.hh.

◆ threshold

double JDETECTOR::JPMTParameters::threshold
inherited

threshold [npe]

Definition at line 255 of file JPMTParameters.hh.

◆ PunderAmplified

double JDETECTOR::JPMTParameters::PunderAmplified
inherited

probability of underamplified hit

Definition at line 256 of file JPMTParameters.hh.

◆ thresholdBand

double JDETECTOR::JPMTParameters::thresholdBand
inherited

threshold-band [npe]

Definition at line 257 of file JPMTParameters.hh.

◆ mean_ns

double JDETECTOR::JPMTParameters::mean_ns
inherited

mean time-over-threshold of threshold-band hits [ns]

Definition at line 258 of file JPMTParameters.hh.

◆ sigma_ns

double JDETECTOR::JPMTParameters::sigma_ns
inherited

time-over-threshold standard deviation of threshold-band hits [ns]

Definition at line 259 of file JPMTParameters.hh.

◆ slope

double JDETECTOR::JPMTParameters::slope
inherited

slope [ns/npe]

Definition at line 260 of file JPMTParameters.hh.

◆ saturation

double JDETECTOR::JPMTParameters::saturation
inherited

saturation [ns]

Definition at line 261 of file JPMTParameters.hh.

◆ slewing

bool JDETECTOR::JPMTParameters::slewing
inherited

time slewing of analogue signal

Definition at line 262 of file JPMTParameters.hh.


The documentation for this struct was generated from the following file: