Belle II Software  release-05-01-25
ScintillatorFirmware.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2012 Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Kirill Chilikin *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 
11 /* Own header. */
12 #include <klm/simulation/ScintillatorFirmware.h>
13 
14 using namespace Belle2;
15 
17  m_nPoints(nPoints)
18 {
19 }
20 
22 {
23 }
24 
25 enum KLM::ScintillatorFirmwareFitStatus KLM::ScintillatorFirmware::fit(
26  int* amp, int threshold, KLMScintillatorFirmwareFitResult* fitData)
27 {
28  /*
29  * Upper bound of the background region: number of points before threshold
30  * crossing.
31  */
32  const int nPointsSigBg = 10;
33  double bg;
34  float sigAmp;
35  int i, ithr, ibg, sum, bgSum, min;
36  sum = 0;
37  bgSum = 0;
38  /* Get threshold crossing time, sum of ADC outputs and minimal output. */
39  ithr = -1;
40  min = 0; /* To avoid warning, re-initialized at the first cycle. */
41  for (i = 0; i < m_nPoints; i++) {
42  if (amp[i] < threshold) {
43  if (ithr < 0)
44  ithr = i;
45  }
46  sum = sum + amp[i];
47  if (i == 0)
48  min = amp[i];
49  else if (amp[i] < min)
50  min = amp[i];
51  }
52  /* No signal. */
53  if (ithr < 0)
54  return c_ScintillatorFirmwareNoSignal;
55  /* Region for background (pedestal) level. */
56  ibg = std::max(ithr - nPointsSigBg, 0);
57  /* Cannot determine background level, no data before signal. */
58  /* cppcheck-suppress knownConditionTrueFalse */
59  if (ibg == 0)
60  return c_ScintillatorFirmwareNoSignal;
61  /* Determine background (pedestal) level. */
62  for (i = 0; i < ibg; i++)
63  bgSum = bgSum + amp[i];
64  bg = float(bgSum) / i;
65  sigAmp = bg * m_nPoints - sum;
66  if (sigAmp < 0)
67  sigAmp = 0;
68  fitData->setStartTime(ithr);
69  fitData->setBackgroundAmplitude(bg);
70  fitData->setAmplitude(sigAmp);
71  fitData->setMinimalAmplitude(min);
72  return c_ScintillatorFirmwareSuccessfulFit;
73 }
74 
Belle2::KLM::ScintillatorFirmware::ScintillatorFirmware
ScintillatorFirmware(int nPoints)
Constructor.
Definition: ScintillatorFirmware.cc:16
Belle2::KLM::ScintillatorFirmware::fit
enum ScintillatorFirmwareFitStatus fit(int *amp, int threshold, KLMScintillatorFirmwareFitResult *fitData)
FPGA fitter.
Definition: ScintillatorFirmware.cc:25
Belle2::KLM::ScintillatorFirmware::~ScintillatorFirmware
~ScintillatorFirmware()
Destructor.
Definition: ScintillatorFirmware.cc:21
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::KLMScintillatorFirmwareFitResult
FPGA fit simulation data.
Definition: KLMScintillatorFirmwareFitResult.h:50