ATLAS Offline Software
Loading...
Searching...
No Matches
Amplifier.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef MDT_RESPONSE_AMPLIFIER_H
6#define MDT_RESPONSE_AMPLIFIER_H
7
8#include <vector>
9
10class Amplifier {
11 private:
12 // define internal data format
13 typedef std::vector<double> cluster_vec;
14 typedef std::vector<double>::iterator cluster_vec_it;
15 typedef std::vector<double>::const_iterator cluster_vec_const_it;
16
17 public:
18 Amplifier();
20
21 // returne t_threshold
22 double TThreshold() const;
23
24 // returns time first electron arrived
25 double TFirst() const;
26
27 // returns amplifier response if the amplifier has signal else -1.
28 double AdcResponse() const;
29
30 // returns integrated charge before wilkinson adc if the amplifier has signal
31 double Charge() const;
32
33 bool PassedThreshold() const; // check if threshold was passed
34 void Reset(); // reset amplifier signal
35
36 // Set routines
37 void SetTriggerElectron(double el); // set threshold in fractions of triggerelectrons
38 void SetIntegrationWindow(double win); // set size integration windos
39
40 // initialize response and signal, needs to be done before using amplifier!
41 void InitResponse(unsigned int bins, double binsize);
42
43 bool AddClusters(const cluster_vec& clusters); // add up response functions for a set of clusters
44
45 private:
46 void InitAmplifierParameters(); // default initialization of amplifier settings
47 static double ResponseFunction(double time);
48
49 void DoAdcResponse(); // calculate adc response
50 double Integral(); // charge integral
51 void AddCluster(int bin,double charge);
52
53 double m_binsize = 0.0; // binsize in ns
54 double m_triggerElectron = 0.0; // trigger electron
55 double m_threshold = 0.0; // threshold
56 int m_integrationWindow; // integration window in bins
57 double m_integrationWindowNs = 0.0; // integration window in ns
58
59 // maximum of the single electron response
60 double m_responseMax = 0.0;
61
64 double m_integral;
66
67 // iterators
68 cluster_vec_it m_signal_th{}; // iterator pointing to the first bin over threshold
72
73 /* non linear response:
74 R = m_adcOffset + m_adcFactor*(log(Q)/log(m_adcFraction)-1) */
75 double m_adcOffset = 0.0;
76 double m_adcFactor = 0.0;
77 double m_adcFraction = 0.0;
78
79};
80
81inline double Amplifier::TThreshold() const {
82 return m_binsize*(m_signal_th-m_signal.begin());
83}
84inline double Amplifier::TFirst() const {
85 cluster_vec_const_it cit = m_signal.begin();
86 while( *cit == 0 )
87 ++cit;
88 return m_binsize*(cit-m_signal.begin()); ;
89}
90inline double Amplifier::AdcResponse() const {
91 return m_adcResponse;
92}
93inline double Amplifier::Charge() const {
94 return m_integral;
95}
96
97inline void Amplifier::SetTriggerElectron(double el) {
100}
101inline void Amplifier::SetIntegrationWindow(double win) {
102 m_integrationWindow = (int)(win/m_binsize)-1;
103}
104inline bool Amplifier::PassedThreshold() const {
105 return m_signal.begin() != m_signal_th;
106}
107
108#endif
109
double charge(const T &p)
Definition AtlasPID.h:997
static const std::vector< std::string > bins
double TFirst() const
Definition Amplifier.h:84
void DoAdcResponse()
static double ResponseFunction(double time)
Definition Amplifier.cxx:32
void SetIntegrationWindow(double win)
Definition Amplifier.h:101
double m_responseMax
Definition Amplifier.h:60
double m_adcResponse
Definition Amplifier.h:65
double m_integral
Definition Amplifier.h:64
cluster_vec_it m_signal_th
Definition Amplifier.h:68
void InitResponse(unsigned int bins, double binsize)
Definition Amplifier.cxx:97
void InitAmplifierParameters()
Definition Amplifier.cxx:20
double m_binsize
Definition Amplifier.h:53
std::vector< double > cluster_vec
Definition Amplifier.h:13
std::vector< double >::const_iterator cluster_vec_const_it
Definition Amplifier.h:15
double Charge() const
Definition Amplifier.h:93
double m_adcFraction
Definition Amplifier.h:77
cluster_vec m_signal
Definition Amplifier.h:63
bool PassedThreshold() const
Definition Amplifier.h:104
bool AddClusters(const cluster_vec &clusters)
void SetTriggerElectron(double el)
Definition Amplifier.h:97
double m_threshold
Definition Amplifier.h:55
double AdcResponse() const
Definition Amplifier.h:90
double m_integrationWindowNs
Definition Amplifier.h:57
double m_triggerElectron
Definition Amplifier.h:54
void Reset()
std::vector< double >::iterator cluster_vec_it
Definition Amplifier.h:14
double m_adcOffset
Definition Amplifier.h:75
double TThreshold() const
Definition Amplifier.h:81
void AddCluster(int bin, double charge)
cluster_vec_it m_signal_stop
Definition Amplifier.h:69
double Integral()
cluster_vec_const_it m_cluster_begin
Definition Amplifier.h:71
cluster_vec_const_it m_cluster_stop
Definition Amplifier.h:70
double m_adcFactor
Definition Amplifier.h:76
int m_integrationWindow
Definition Amplifier.h:56
cluster_vec m_response
Definition Amplifier.h:62