8 #include <ecl/digitization/EclConfigurationPure.h>
9 #include <ecl/digitization/ECLSampledShaper.h>
15 using namespace Belle2::ECL;
20 void EclConfigurationPure::signalsamplepure_t::InitSample(
const TH1F* sampledfun,
const TH1F* sampledfunDerivative)
22 const int N = m_ns * m_nlPure;
23 double r1 = 32 / m_ns;
27 dsp.fillarray(N, m_ft);
28 double maxval = * max_element(m_ft, m_ft + N);
30 for_each(m_ft1, m_ft1 + N, [maxval](
double & a) { a /= maxval; });
31 double maxval2 = * max_element(m_ft, m_ft + N);
32 assert(maxval2 - 1.0 < 0.001);
34 for (
int i = 0; i < N; i++) sum += m_ft[i];
35 m_sumscale = m_ns / sum;
38 dsp1.fillarray(N, m_ft1);
39 for_each(m_ft1, m_ft1 + N, [r1, r2, maxval](
double & a) { a *= (r1 / r2) / maxval; });
42 void EclConfigurationPure::adccountspure_t::AddHit(
const double a,
const double t0,
45 total += s.Accumulate(a, t0, c);
48 double EclConfigurationPure::signalsamplepure_t::Accumulate(
const double a,
const double t0,
double* s)
const
55 const double itick = 1 / m_tickPure;
56 const double tlen = m_nlPure - 1.0 / m_ns;
57 const double tmax = m_tmin + m_nsmp - 1;
59 double t = t0 * itick;
60 double x0 = t, x1 = t + tlen;
62 if (x0 > tmax)
return 0;
64 if (x1 < m_tmin)
return 0;
79 double epsilon = 1.0 / m_ns / 10.;
80 double imind = ceil(x0 - m_tmin + epsilon);
83 double w = ((m_tmin - t) + imind - 1) * double(m_ns);
90 const double w1 = a * w, w0 = a - w1;
94 for (
int i = imin, j = jmin; i < imax; i++, j += m_ns) {
96 if (j >= 0) amp = w0 * m_ft[j] + w1 * m_ft[j + 1];
103 return sum * m_sumscale;
static constexpr double m_tick
== 72/127 digitization clock tick (in microseconds ???)
static constexpr int m_ntrg
number of trigger counts per ADC clock tick
Abstract base class for different kinds of events.
a struct for a signal sample for the pure CsI calorimeter