Belle II Software  release-05-01-25
ECLAutoCovariance.h
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2018 - Belle II Collaboration *
4  * *
5  * Packed autocovariance database storage *
6  * *
7  * Author: The Belle II Collaboration *
8  * Contributors: Alexei Sibidanov *
9  * Savino Longo *
10  * *
11  * This software is provided "as is" without any warranty. *
12  **************************************************************************/
13 
14 #include <TObject.h>
15 
18 namespace Belle2 {
25  struct PackedAutoCovariance {
26  float sigmaNoiseSq = -1;
27  short int packedCovMat[30] = {};
28  ClassDef(PackedAutoCovariance, 1);
29  };
30 
34  class ECLAutoCovariance: public TObject {
35  public:
36 
40  ECLAutoCovariance() {};
41 
46 
48  const PackedAutoCovariance& getPacked(const int cellID) const
49  {
50  if (cellID < 1 || cellID > 8736) return m_acov[0];
51  return m_acov[cellID - 1];
52  }
53 
55  void getAutoCovariance(const int cellID, double acov[31]) const
56  {
57  if (cellID < 1 || cellID > 8736) return;
58  const PackedAutoCovariance& tempPacked = m_acov[cellID - 1];
59  acov[0] = static_cast<double>(tempPacked.sigmaNoiseSq);
60  const double norm = acov[0] * (1.0 / 32767);
61  for (int i = 0; i < 30; i++) acov[i + 1] = norm * static_cast<double>(tempPacked.packedCovMat[i]);
62  }
63 
65  void setAutoCovariance(const int cellID, const double acov[31])
66  {
67  if (cellID < 1 || cellID > 8736) return;
68  const double norm = 32767 / acov[0];
69  PackedAutoCovariance& tempPacked = m_acov[cellID - 1];
70  tempPacked.sigmaNoiseSq = static_cast<float>(acov[0]);
71  for (int i = 0; i < 30; i++)
72  tempPacked.packedCovMat[i] = static_cast<short int>(std::max(-32767.0, std::min(acov[i + 1] * norm, 32767.0)));
73  }
74 
75  private:
78  //Initial Version
80  };
82 } // end namespace Belle2
Belle2::PackedAutoCovariance::packedCovMat
short int packedCovMat[30]
packed covariance, the range [-1.0, 1.0] is mapped to [-32767, 32767]
Definition: ECLAutoCovariance.h:38
Belle2::ECLAutoCovariance::ECLAutoCovariance
ECLAutoCovariance()
Default constructor.
Definition: ECLAutoCovariance.h:51
Belle2::ECLAutoCovariance::m_acov
PackedAutoCovariance m_acov[8736]
Packed autocovariance matrix for each crystal.
Definition: ECLAutoCovariance.h:87
Belle2::ECLAutoCovariance::ClassDef
ClassDef(ECLAutoCovariance, 1)
ClassDef.
Belle2::PackedAutoCovariance
packed covariance matrix
Definition: ECLAutoCovariance.h:36
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::ECLAutoCovariance::getAutoCovariance
void getAutoCovariance(const int cellID, double acov[31]) const
Get auto covariance for a channel.
Definition: ECLAutoCovariance.h:66
Belle2::ECLAutoCovariance::getPacked
const PackedAutoCovariance & getPacked(const int cellID) const
Get packed autocovariance.
Definition: ECLAutoCovariance.h:59
Belle2::PackedAutoCovariance::sigmaNoiseSq
float sigmaNoiseSq
sigma noise squared in ADC channels
Definition: ECLAutoCovariance.h:37
Belle2::ECLAutoCovariance::setAutoCovariance
void setAutoCovariance(const int cellID, const double acov[31])
Set auto covariance for a channel.
Definition: ECLAutoCovariance.h:76
Belle2::PackedAutoCovariance::ClassDef
ClassDef(PackedAutoCovariance, 1)
ClassDef to make streamer.
Belle2::ECLAutoCovariance
Covariance matrices for offline ECL waveform fit.
Definition: ECLAutoCovariance.h:45
Belle2::ECLAutoCovariance::~ECLAutoCovariance
~ECLAutoCovariance()
Destructor.
Definition: ECLAutoCovariance.h:56