ATLAS Offline Software
ITkStripAmp.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "ITkStripAmp.h"
6 
7 //STD includes
8 #include <cmath>
9 #include <fstream>
10 #include "GaudiKernel/SystemOfUnits.h"
11 
12 
13 
14 //----------------------------------------------------------------------
15 // Initialize
16 //----------------------------------------------------------------------
19  m_PeakTime.setValue(m_PeakTime.value() * Gaudi::Units::ns);
20  m_NormConstCentral = 1.0;
21  return sc;
22 }
23 
24 //----------------------------------------------------------------------
25 // Amplifier impulse response is now CR-RC^3
26 //----------------------------------------------------------------------
27 float ITkStripAmp::response(const list_t& /*Charges*/, const float /*timeOfThreshold*/) const {
28  float resp{1.0f};
29  return resp;
30 }
31 
32 void ITkStripAmp::response(const list_t& Charges, const float time, std::vector<float>& response) const {
33  auto bin_max{std::ssize(response)};
34  std::fill(response.begin(), response.end(), 0.0);
35  float tp{m_PeakTime/3.0f}; // for CR-RC^3
36  for (const SiCharge& charge: Charges) {
37  float ch{static_cast<float>(charge.charge())};
38  float ch_time{static_cast<float>(charge.time())};
39  auto bin_end{bin_max-1};
40  for (int bin{-1}; bin<bin_end; ++bin) {
41  float bin_time{time + bin*25};//25, fix me
42  float tC{bin_time - ch_time};
43  if (tC > 0.0f) {
44  tC/=tp; //to avoid doing it four times
45  response[bin+1] += ch*tC*tC*tC*std::exp(-tC); //faster than pow
46  }
47  }
48  }
49  for (int bin{0}; bin<bin_max; ++bin) response[bin] = response[bin]*m_NormConstCentral;
50 }
51 
52 // ----------------------------------------------------------------------
53 // Crosstalk on the neighbour strip
54 // ----------------------------------------------------------------------
55 float ITkStripAmp::crosstalk(const list_t& /*Charges*/, const float /*timeOfThreshold*/) const {
56  float resp{1};
57  return resp;
58 }
59 
60 void ITkStripAmp::crosstalk(const list_t& /*Charges*/, const float /*timeOfThreshold*/, std::vector<float>& response) const {
61  std::fill(response.begin(), response.end(), 1.0);
62 }
63 
ITkStripAmp::response
virtual float response(const list_t &Charges, const float timeOverThreshold) const override
Definition: ITkStripAmp.cxx:27
ITkStripAmp.h
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
ITkStripAmp::m_NormConstCentral
float m_NormConstCentral
Definition: ITkStripAmp.h:39
ITkStripAmp::initialize
virtual StatusCode initialize() override
AlgTool initialize.
Definition: ITkStripAmp.cxx:17
response
MDT_Response response
Definition: MDT_ResponseTest.cxx:28
initialize
void initialize()
Definition: run_EoverP.cxx:894
bin
Definition: BinsDiffFromStripMedian.h:43
ParticleTest.tp
tp
Definition: ParticleTest.py:25
ITkStripAmp::crosstalk
virtual float crosstalk(const list_t &Charges, const float timeOverThreshold) const override
Neighbour strip cross talk response strip to a list of charges with times.
Definition: ITkStripAmp.cxx:55
SiCharge
Definition: SiCharge.h:25
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
ITkStripAmp::m_PeakTime
FloatProperty m_PeakTime
signal peak time
Definition: ITkStripAmp.h:38
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
hist_file_dump.f
f
Definition: hist_file_dump.py:140
plotBeamSpotVxVal.bin
int bin
Definition: plotBeamSpotVxVal.py:82
charge
double charge(const T &p)
Definition: AtlasPID.h:986
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
lumiFormat.fill
fill
Definition: lumiFormat.py:104
python.SystemOfUnits.ns
float ns
Definition: SystemOfUnits.py:146