ATLAS Offline Software
Loading...
Searching...
No Matches
LArWaveCumul.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
7#include <math.h>
8
9
10void LArWaveCumul::addEvent( int delay , int step ,
11 const std::vector<double>& Samples )
12{
13 const unsigned int nSwave = getSize() ;
14 const unsigned int nSevt = Samples.size() ;
15 for ( unsigned int i=0 ; i<nSevt ; i++ ) {
16 unsigned int k=(i+1)*step-(delay+1);
17 if (k<nSwave) {
18 double evt = Samples[i] ;
19 int N = m_triggers[k] ;
20 double amp2 = m_amplitudes[k]*m_amplitudes[k];
21 double sum2 = (N-1)*m_errors[k]*m_errors[k] + N*amp2;
22
23 double sum = m_amplitudes[k] * N ;
24 m_amplitudes[k] = ( sum + evt ) / (N+1) ;
25 double arg = N? ( ( sum2 + evt*evt ) - (N+1)*m_amplitudes[k]*m_amplitudes[k] )/N: 0.;
26
27 // Can happen due to underflow if m_errors is zero and evt is
28 // exactly the same as m_amplitudes.
29 if (arg < 0) arg = 0;
30 m_errors[k] = sqrt(arg);
31 m_triggers[k] = N + 1 ;
32
33 }
34 }
35}
36
37
38
40 const std::vector<double>& SamplesSum ,
41 const std::vector<double>& Samples2Sum ,
42 unsigned nTriggers )
43{
44 if (!nTriggers) return; // there should be related warnings displayed by the LArLATOMEDecoder
45 const unsigned int nSwave = getSize() ;
46 const unsigned int nSevt = SamplesSum.size() ;
47
48 for ( unsigned int i=0 ; i<nSevt ; i++ ) {
49
50 unsigned int k=(i+1)*step-(delay+1);
51
52 if (k<nSwave ) {
53
54 int N1 = m_triggers[k] ;
55 double sum1 = m_amplitudes[k] * N1 ;
56 double sum12 = (N1-1)*m_errors[k]*m_errors[k] + N1*m_amplitudes[k]*m_amplitudes[k] ;
57
58 int N2 = nTriggers ;
59 double sum2 = SamplesSum[i] ;
60 double sum22 = Samples2Sum[i] ;
61
62 m_triggers[k] = N1+N2 ;
63 m_amplitudes[k] = (sum1+sum2)/m_triggers[k] ;
64 m_errors[k] = std::sqrt(std::max(sum12+sum22-m_amplitudes[k]*m_amplitudes[k]*m_triggers[k], 0.)/(m_triggers[k]-1) ) ;
65
66 }
67 }
68}
double delay(std::size_t d)
std::vector< int > m_triggers
std::vector< double > m_errors
void addAccumulatedEvent(int delay, int step, const std::vector< double > &SamplesSum, const std::vector< double > &Samples2Sum, unsigned nTriggers)
used when building from LArAccumulatedDigits
void addEvent(int delay, int step, const std::vector< double > &Samples)
add in set of channel responses for a given step/delay
std::vector< double > m_amplitudes
Definition LArWave.h:112
size_t getSize() const
number of time samples
Definition LArWave.h:62