LDMX Software
tracking::digitization::FourPoleShape Class Reference

Fourth-order shaper with two time constants. More...

#include <PulseShape.h>

Public Member Functions

 FourPoleShape (double tp, double tp2)
 
double eval (double t) const override
 Evaluate the peak-normalised pulse amplitude at time t [ns] after charge arrival.
 
- Public Member Functions inherited from tracking::digitization::PulseShape

Private Attributes

double tp_
 
double tp2_
 
double A_
 
double B_
 
double peak_amp_
 g(t_peak), used for normalisation.
 

Additional Inherited Members

- Static Public Member Functions inherited from tracking::digitization::PulseShape
static std::unique_ptr< PulseShapemake (const std::string &name, double tp, double tp2=0.0)
 Factory: construct a pulse shape by name.
 

Detailed Description

Fourth-order shaper with two time constants.

The un-normalised amplitude is: g(t) = A · [exp(−t/tp) − exp(−t/tp2) · (1 + t·B + ½·(t·B)²)] where A = tp² / (tp − tp2)³ B = (tp − tp2) / (tp · tp2)

The peak position is approximated by t_peak ≈ 3 · (tp · tp2³)^(1/4)

eval(t) returns g(t) / g(t_peak), i.e. peak-normalised.

Parameters
tpFirst (slower) time constant [ns].
tp2Second (faster) time constant [ns]. Must be < tp.

Definition at line 98 of file PulseShape.h.

Constructor & Destructor Documentation

◆ FourPoleShape()

tracking::digitization::FourPoleShape::FourPoleShape ( double tp,
double tp2 )

Definition at line 11 of file PulseShape.cxx.

11 : tp_(tp), tp2_(tp2) {
12 if (tp2_ <= 0.0 || tp_ <= tp2_) {
13 EXCEPTION_RAISE("InvalidArgument", "FourPoleShape: requires tp > tp2 > 0");
14 }
15
16 A_ = (tp_ * tp_) / std::pow(tp_ - tp2_, 3.0);
17 B_ = (tp_ - tp2_) / (tp_ * tp2_);
18
19 // Approximate peak time: 3·(tp·tp2³)^(1/4)
20 const double t_peak = 3.0 * std::pow(tp_ * std::pow(tp2_, 3.0), 0.25);
21
22 // Evaluate un-normalised amplitude at the peak for normalisation.
23 peak_amp_ = A_ * (std::exp(-t_peak / tp_) -
24 std::exp(-t_peak / tp2_) *
25 (1.0 + t_peak * B_ + 0.5 * t_peak * t_peak * B_ * B_));
26}
double peak_amp_
g(t_peak), used for normalisation.
Definition PulseShape.h:107

Member Function Documentation

◆ eval()

double tracking::digitization::FourPoleShape::eval ( double t) const
overridevirtual

Evaluate the peak-normalised pulse amplitude at time t [ns] after charge arrival.

Returns 0 for t < 0.

Implements tracking::digitization::PulseShape.

Definition at line 28 of file PulseShape.cxx.

28 {
29 if (t <= 0.0) return 0.0;
30 const double g =
31 A_ * (std::exp(-t / tp_) -
32 std::exp(-t / tp2_) * (1.0 + t * B_ + 0.5 * t * t * B_ * B_));
33 return g / peak_amp_;
34}

Member Data Documentation

◆ A_

double tracking::digitization::FourPoleShape::A_
private

Definition at line 106 of file PulseShape.h.

◆ B_

double tracking::digitization::FourPoleShape::B_
private

Definition at line 106 of file PulseShape.h.

◆ peak_amp_

double tracking::digitization::FourPoleShape::peak_amp_
private

g(t_peak), used for normalisation.

Definition at line 107 of file PulseShape.h.

◆ tp2_

double tracking::digitization::FourPoleShape::tp2_
private

Definition at line 105 of file PulseShape.h.

◆ tp_

double tracking::digitization::FourPoleShape::tp_
private

Definition at line 105 of file PulseShape.h.


The documentation for this class was generated from the following files: