ATLAS Offline Software
Loading...
Searching...
No Matches
Amplifier Class Reference

#include <Amplifier.h>

Collaboration diagram for Amplifier:

Public Member Functions

 Amplifier ()
 ~Amplifier ()
double TThreshold () const
double TFirst () const
double AdcResponse () const
double Charge () const
bool PassedThreshold () const
void Reset ()
void SetTriggerElectron (double el)
void SetIntegrationWindow (double win)
void InitResponse (unsigned int bins, double binsize)
bool AddClusters (const cluster_vec &clusters)

Private Types

typedef std::vector< double > cluster_vec
typedef std::vector< double >::iterator cluster_vec_it
typedef std::vector< double >::const_iterator cluster_vec_const_it

Private Member Functions

void InitAmplifierParameters ()
void DoAdcResponse ()
double Integral ()
void AddCluster (int bin, double charge)

Static Private Member Functions

static double ResponseFunction (double time)

Private Attributes

double m_binsize = 0.0
double m_triggerElectron = 0.0
double m_threshold = 0.0
int m_integrationWindow
double m_integrationWindowNs = 0.0
double m_responseMax = 0.0
cluster_vec m_response
cluster_vec m_signal
double m_integral
double m_adcResponse
cluster_vec_it m_signal_th {}
cluster_vec_it m_signal_stop {}
cluster_vec_const_it m_cluster_stop {}
cluster_vec_const_it m_cluster_begin {}
double m_adcOffset = 0.0
double m_adcFactor = 0.0
double m_adcFraction = 0.0

Detailed Description

Definition at line 10 of file Amplifier.h.

Member Typedef Documentation

◆ cluster_vec

typedef std::vector<double> Amplifier::cluster_vec
private

Definition at line 13 of file Amplifier.h.

◆ cluster_vec_const_it

typedef std::vector<double>::const_iterator Amplifier::cluster_vec_const_it
private

Definition at line 15 of file Amplifier.h.

◆ cluster_vec_it

typedef std::vector<double>::iterator Amplifier::cluster_vec_it
private

Definition at line 14 of file Amplifier.h.

Constructor & Destructor Documentation

◆ Amplifier()

Amplifier::Amplifier ( )

Definition at line 9 of file Amplifier.cxx.

9 :
11 m_integral(0.),
12 m_adcResponse(0.)
13{
15}
double m_adcResponse
Definition Amplifier.h:65
double m_integral
Definition Amplifier.h:64
void InitAmplifierParameters()
Definition Amplifier.cxx:20
int m_integrationWindow
Definition Amplifier.h:56

◆ ~Amplifier()

Amplifier::~Amplifier ( )
default

Member Function Documentation

◆ AdcResponse()

double Amplifier::AdcResponse ( ) const
inline

Definition at line 90 of file Amplifier.h.

90 {
91 return m_adcResponse;
92}

◆ AddCluster()

void Amplifier::AddCluster ( int bin,
double charge )
private

Definition at line 151 of file Amplifier.cxx.

152{
153 // set start values for signal and response iterator
154 cluster_vec_it response_it = m_response.begin();
155 cluster_vec_it signal_it = m_signal.begin() + startbin;
156
157 // fill signal vector until stop
158 while(signal_it != m_signal_stop) {
159
160 *signal_it += *response_it*charge; // add response to signal
161 if( *signal_it > m_threshold ) { // check if signal above threshold
162
163 // if new threshold found
164 if( signal_it - m_signal_th < 0 || m_signal_th == m_signal.begin()){
165 m_signal_th = signal_it; // store new threshold
166
167 /* if the bin (threshold + integration window) lies
168 within the signal vector, point the stop iterator to it.
169 nessicary to make sure m_signal_stop never points beyond the m_signal.end() */
170
171 if( m_signal.end()-signal_it > m_integrationWindow ){
174 }
175 }
176 ++signal_it;++response_it; // go to next bin
177 while(signal_it != m_signal_stop) { // loop over the remaining bins
178 *signal_it += *response_it*charge;
179 ++signal_it;++response_it;
180 }
181 break; // exit loop
182 }
183 ++signal_it;++response_it;
184 }
185}
double charge(const T &p)
Definition AtlasPID.h:997
cluster_vec_it m_signal_th
Definition Amplifier.h:68
cluster_vec m_signal
Definition Amplifier.h:63
double m_threshold
Definition Amplifier.h:55
std::vector< double >::iterator cluster_vec_it
Definition Amplifier.h:14
cluster_vec_it m_signal_stop
Definition Amplifier.h:69
cluster_vec_const_it m_cluster_begin
Definition Amplifier.h:71
cluster_vec_const_it m_cluster_stop
Definition Amplifier.h:70
cluster_vec m_response
Definition Amplifier.h:62

◆ AddClusters()

bool Amplifier::AddClusters ( const cluster_vec & clusters)

Definition at line 129 of file Amplifier.cxx.

130{
131 if(clusters.empty()){ // no clusters, no signal!
132 return false;
133 }
134
135 // reset cluster iterators
136 m_cluster_begin = clusters.begin();
137 m_cluster_stop = clusters.end(); // stop iterator can be changed in the AddCluster-routine
139 int bin(0);
140 for( ; cit!=m_cluster_stop;++cit){ // iterate over all clusters
141 if(*cit == 0.) continue; // check if the cluster size in the current bin is not zero
142 bin = cit - m_cluster_begin; // calculate the corresponding bin number
143 AddCluster(bin,*cit); // add response of cluster to total detector response
144 }
145 Integral(); // calculate the Q-integral
146 DoAdcResponse(); // get the ADC response
147
148 return PassedThreshold();
149}
void DoAdcResponse()
std::vector< double >::const_iterator cluster_vec_const_it
Definition Amplifier.h:15
bool PassedThreshold() const
Definition Amplifier.h:104
void AddCluster(int bin, double charge)
double Integral()

◆ Charge()

double Amplifier::Charge ( ) const
inline

Definition at line 93 of file Amplifier.h.

93 {
94 return m_integral;
95}

◆ DoAdcResponse()

void Amplifier::DoAdcResponse ( )
private

Definition at line 198 of file Amplifier.cxx.

199{
200 if(m_integral > 0){
202 }else{
203 m_adcResponse = -1000;
204 }
205}
double m_adcFraction
Definition Amplifier.h:77
double m_adcOffset
Definition Amplifier.h:75
double m_adcFactor
Definition Amplifier.h:76

◆ InitAmplifierParameters()

void Amplifier::InitAmplifierParameters ( )
private

Definition at line 20 of file Amplifier.cxx.

21{
22 m_threshold = 0.;
23 m_responseMax = 0.;
25 m_adcOffset = 35.; // determined from Z -> mumu data as of 2025
26 m_adcFactor = 150.; // determined from Z -> mumu data as of 2025
27 m_adcFraction = 10.;
28 m_binsize = 1.;
30}
double m_responseMax
Definition Amplifier.h:60
double m_binsize
Definition Amplifier.h:53
double m_integrationWindowNs
Definition Amplifier.h:57
double m_triggerElectron
Definition Amplifier.h:54

◆ InitResponse()

void Amplifier::InitResponse ( unsigned int bins,
double binsize )

Definition at line 97 of file Amplifier.cxx.

98{
99 m_binsize = binsize;
101
102 m_response.resize(bins);
103 m_signal.resize(bins);
104
105 cluster_vec_it it = m_response.begin();
106 double i(0.);
107 double resp(0),max(0.);//,integral(0.);
108 while( it != m_response.end() ){
110 if(resp>max) max = resp;
111 *it = resp;
112 ++it;++i;
113 }
116 Reset();
117}
static const std::vector< std::string > bins
#define max(a, b)
Definition cfImp.cxx:41
static double ResponseFunction(double time)
Definition Amplifier.cxx:32
void Reset()

◆ Integral()

double Amplifier::Integral ( )
private

Definition at line 187 of file Amplifier.cxx.

188{
190 m_integral = 0.;
191 while(s != m_signal_stop){ // sum charge within integration window
192 m_integral += *s;
193 ++s;
194 }
195 return m_integral;
196}

◆ PassedThreshold()

bool Amplifier::PassedThreshold ( ) const
inline

Definition at line 104 of file Amplifier.h.

104 {
105 return m_signal.begin() != m_signal_th;
106}

◆ Reset()

void Amplifier::Reset ( )

Definition at line 119 of file Amplifier.cxx.

120{
121 m_integral = -10000.;
122 std::vector<double>::iterator dit = m_signal.begin();
123 for( ; dit != m_signal.end(); ++dit)
124 *dit = 0.;
125 m_signal_th = m_signal.begin();
126 m_signal_stop = m_signal.end();
127}

◆ ResponseFunction()

double Amplifier::ResponseFunction ( double time)
staticprivate

Definition at line 32 of file Amplifier.cxx.

33{
34 /*
35 amplifier f(t) = (t/tau)**3 exp(-t/tau) u(t)
36
37 signal I(t) = I0/(t+t0) u(t)
38
39 u(t) step function
40 tau 15 ns, t0=12 nsec, I0=1
41
42 */
43 //double TP=20.;
44 double TP=15.;
45 double T0=12./2.;
46 /*
47 FI1=1./3.
48 FI2=2./3.
49 signal = ( FI1 exp(t/t0)/t0 + FI2 exp(-t/(9*t0))/(9*t0))
50 ion/electron fraction electron delta function ion signal
51 */
52 double FI1=1./3.;
53 double FI2=2./3.;
54 double face=2.0;
55
56 /* third order amplifier
57
58 f(t)= u(t) * t/tau**3* exp(-t/tau)/3!/tau
59 I(t)= u(t) * exp(-t/t0)/ t0
60
61 */
62 double TAU=TP/3.;
63 double a=1./TAU;
64 double b =1./T0;
65 double a4 = a*a*a*a;
66 double ab4 = a-b;
67 ab4 = ab4*ab4*ab4*ab4;
68 double dt = (a-b)*time;
69 double dt2 = dt*dt;
70 double dt3 = dt2*dt;
71 // double dt4 = dt2*dt2; // not used
72
73 double F3 = a4*time*time*time*exp(-a*time)/6.;
74 double xnor = b*a4/ab4;
75 double res31= xnor*(exp(-b*time) - exp(-a*time)
76 -dt*exp(-a*time)
77 -dt2/2.*exp(-a*time)
78 -dt3/6.*exp(-a*time));
79
80 b =1./T0/9.;
81 ab4 = a-b;
82 ab4 = ab4*ab4*ab4*ab4;
83 dt = (a-b)*time;
84 dt2 = dt*dt;
85 dt3 = dt2*dt;
86 // dt4 = dt2*dt2; // not used
87 xnor = b*a4/ ab4;
88 double res32= xnor*(exp(-b*time) - exp(-a*time)
89 -dt*exp(-a*time)
90 -dt2/2.*exp(-a*time)
91 -dt3/6.*exp(-a*time));
92 double resolution=(face*(res31*FI1+res32*FI2)+F3)/(1.+face);
93
94 return resolution;
95}
static const int TAU
Definition AtlasPID.h:79
static Double_t a
time(flags, cells_name, *args, **kw)
double resolution[nGasTypes][nParametersResolution]

◆ SetIntegrationWindow()

void Amplifier::SetIntegrationWindow ( double win)
inline

Definition at line 101 of file Amplifier.h.

101 {
103}

◆ SetTriggerElectron()

void Amplifier::SetTriggerElectron ( double el)
inline

◆ TFirst()

double Amplifier::TFirst ( ) const
inline

Definition at line 84 of file Amplifier.h.

84 {
85 cluster_vec_const_it cit = m_signal.begin();
86 while( *cit == 0 )
87 ++cit;
88 return m_binsize*(cit-m_signal.begin()); ;
89}

◆ TThreshold()

double Amplifier::TThreshold ( ) const
inline

Definition at line 81 of file Amplifier.h.

81 {
82 return m_binsize*(m_signal_th-m_signal.begin());
83}

Member Data Documentation

◆ m_adcFactor

double Amplifier::m_adcFactor = 0.0
private

Definition at line 76 of file Amplifier.h.

◆ m_adcFraction

double Amplifier::m_adcFraction = 0.0
private

Definition at line 77 of file Amplifier.h.

◆ m_adcOffset

double Amplifier::m_adcOffset = 0.0
private

Definition at line 75 of file Amplifier.h.

◆ m_adcResponse

double Amplifier::m_adcResponse
private

Definition at line 65 of file Amplifier.h.

◆ m_binsize

double Amplifier::m_binsize = 0.0
private

Definition at line 53 of file Amplifier.h.

◆ m_cluster_begin

cluster_vec_const_it Amplifier::m_cluster_begin {}
private

Definition at line 71 of file Amplifier.h.

71{};

◆ m_cluster_stop

cluster_vec_const_it Amplifier::m_cluster_stop {}
private

Definition at line 70 of file Amplifier.h.

70{};

◆ m_integral

double Amplifier::m_integral
private

Definition at line 64 of file Amplifier.h.

◆ m_integrationWindow

int Amplifier::m_integrationWindow
private

Definition at line 56 of file Amplifier.h.

◆ m_integrationWindowNs

double Amplifier::m_integrationWindowNs = 0.0
private

Definition at line 57 of file Amplifier.h.

◆ m_response

cluster_vec Amplifier::m_response
private

Definition at line 62 of file Amplifier.h.

◆ m_responseMax

double Amplifier::m_responseMax = 0.0
private

Definition at line 60 of file Amplifier.h.

◆ m_signal

cluster_vec Amplifier::m_signal
private

Definition at line 63 of file Amplifier.h.

◆ m_signal_stop

cluster_vec_it Amplifier::m_signal_stop {}
private

Definition at line 69 of file Amplifier.h.

69{};

◆ m_signal_th

cluster_vec_it Amplifier::m_signal_th {}
private

Definition at line 68 of file Amplifier.h.

68{}; // iterator pointing to the first bin over threshold

◆ m_threshold

double Amplifier::m_threshold = 0.0
private

Definition at line 55 of file Amplifier.h.

◆ m_triggerElectron

double Amplifier::m_triggerElectron = 0.0
private

Definition at line 54 of file Amplifier.h.


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