ATLAS Offline Software
Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
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 }

◆ ~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 }

◆ 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 }

◆ 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 }

◆ InitAmplifierParameters()

void Amplifier::InitAmplifierParameters ( )
private

Definition at line 20 of file Amplifier.cxx.

21 {
22  m_threshold = 0.;
23  m_responseMax = 0.;
24  m_triggerElectron = 20.;
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.;
29  m_integrationWindowNs = 18.5;
30 }

◆ 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  }
114  m_responseMax = max;
116  Reset();
117 }

◆ 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.;
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 }

◆ SetIntegrationWindow()

void Amplifier::SetIntegrationWindow ( double  win)
inline

Definition at line 101 of file Amplifier.h.

101  {
102  m_integrationWindow = (int)(win/m_binsize)-1;
103 }

◆ SetTriggerElectron()

void Amplifier::SetTriggerElectron ( double  el)
inline

Definition at line 97 of file Amplifier.h.

97  {
100 }

◆ 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.

◆ m_cluster_stop

cluster_vec_const_it Amplifier::m_cluster_stop {}
private

Definition at line 70 of file Amplifier.h.

◆ 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.

◆ m_signal_th

cluster_vec_it Amplifier::m_signal_th {}
private

Definition at line 68 of file Amplifier.h.

◆ 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:
Amplifier::m_threshold
double m_threshold
Definition: Amplifier.h:55
Amplifier::m_cluster_stop
cluster_vec_const_it m_cluster_stop
Definition: Amplifier.h:70
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Amplifier::InitAmplifierParameters
void InitAmplifierParameters()
Definition: Amplifier.cxx:20
Amplifier::ResponseFunction
static double ResponseFunction(double time)
Definition: Amplifier.cxx:32
Amplifier::cluster_vec_it
std::vector< double >::iterator cluster_vec_it
Definition: Amplifier.h:14
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
Amplifier::PassedThreshold
bool PassedThreshold() const
Definition: Amplifier.h:104
Amplifier::AddCluster
void AddCluster(int bin, double charge)
Definition: Amplifier.cxx:151
skel.it
it
Definition: skel.GENtoEVGEN.py:407
bin
Definition: BinsDiffFromStripMedian.h:43
Amplifier::m_integrationWindow
int m_integrationWindow
Definition: Amplifier.h:56
Amplifier::DoAdcResponse
void DoAdcResponse()
Definition: Amplifier.cxx:198
Amplifier::m_integral
double m_integral
Definition: Amplifier.h:64
Amplifier::m_adcOffset
double m_adcOffset
Definition: Amplifier.h:75
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
Dedxcorrection::resolution
double resolution[nGasTypes][nParametersResolution]
Definition: TRT_ToT_Corrections.h:46
TCS::TAU
@ TAU
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/L1TopoCommon/Types.h:18
Amplifier::m_adcResponse
double m_adcResponse
Definition: Amplifier.h:65
lumiFormat.i
int i
Definition: lumiFormat.py:85
Amplifier::m_adcFactor
double m_adcFactor
Definition: Amplifier.h:76
Amplifier::m_signal_stop
cluster_vec_it m_signal_stop
Definition: Amplifier.h:69
CaloNoise_fillDB.dt
dt
Definition: CaloNoise_fillDB.py:56
Amplifier::m_signal
cluster_vec m_signal
Definition: Amplifier.h:63
Amplifier::Integral
double Integral()
Definition: Amplifier.cxx:187
python.getProblemFolderFromLogs.el
dictionary el
Definition: getProblemFolderFromLogs.py:48
plotting.yearwise_luminosity_vs_mu.bins
bins
Definition: yearwise_luminosity_vs_mu.py:30
Amplifier::m_triggerElectron
double m_triggerElectron
Definition: Amplifier.h:54
Amplifier::Reset
void Reset()
Definition: Amplifier.cxx:119
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
charge
double charge(const T &p)
Definition: AtlasPID.h:991
Amplifier::m_response
cluster_vec m_response
Definition: Amplifier.h:62
a
TList * a
Definition: liststreamerinfos.cxx:10
Amplifier::cluster_vec_const_it
std::vector< double >::const_iterator cluster_vec_const_it
Definition: Amplifier.h:15
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
Amplifier::m_binsize
double m_binsize
Definition: Amplifier.h:53
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
Amplifier::m_integrationWindowNs
double m_integrationWindowNs
Definition: Amplifier.h:57
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
RunTileMonitoring.clusters
clusters
Definition: RunTileMonitoring.py:133
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
Amplifier::m_adcFraction
double m_adcFraction
Definition: Amplifier.h:77
Amplifier::m_responseMax
double m_responseMax
Definition: Amplifier.h:60
Amplifier::m_cluster_begin
cluster_vec_const_it m_cluster_begin
Definition: Amplifier.h:71
Amplifier::m_signal_th
cluster_vec_it m_signal_th
Definition: Amplifier.h:68