ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtHitCluster.h
Go to the documentation of this file.
1 #ifndef ATHITCLUSTER_HH
2 #define ATHITCLUSTER_HH
3 
4 #include "AtHit.h"
5 
6 #include <Rtypes.h>
7 #include <TMatrixDSymfwd.h> // for TMatrixDSym
8 #include <TMatrixTSym.h> // for TMatrixTSym
9 
10 #include <memory> // for unique_ptr
11 #include <utility> // for move
12 
13 class TBuffer;
14 class TClass;
15 class TMemberInspector;
16 
37 class AtHitCluster : public AtHit {
38 protected:
39  Int_t fClusterID{-1};
40 
41  // Off diagonal elements are calcualed using eqn 18. Diagonal from eqn 24
42  TMatrixDSym fCovMatrix{3}; //< Cluster covariance matrix
43 
44  // Corresponds to equations 15 for off diagonal and 20 for on diagonal
45  TMatrixDSym fCovNumerator{3}; //< Numerator for updating covariance matrix
46 
47  // The reliability weight for each coordinate is 1/variance.
48  XYZVector fTotalWeight{0, 0, 0}; //< Sum of 1/Var*q (Eqn 10)
49  XYZVector fTotalWeight2{0, 0, 0}; //< Sum of 1/Var^2*q (Eqn 11)
50  XYZVector fWeight{0, 0, 0}; //< The weight of the point being added (used during update)
51 
52  XYZPoint fPositionCharge{0, 0, 0}; //< Charge weighted mean of position
53  XYZPoint fPositionChargeOld{0, 0, 0}; //< The last charge weighted position
54  XYZVector fPositionOld{0, 0, 0}; //< The last position (used during update)
55 
56  Double_t fLength{-999};
57  Int_t fClusterSize{0}; //< Number of hits in the cluster
58 
59 public:
60  AtHitCluster();
61  AtHitCluster(const AtHitCluster &cluster) = default;
62  virtual ~AtHitCluster() = default;
63  virtual std::unique_ptr<AtHit> Clone() override; //< Create a copy of sub-type
64 
65  void SetCovMatrix(TMatrixDSym matrix) { fCovMatrix = std::move(matrix); }
66  void SetCovMatrix(int i, int j, double val);
67  virtual void SetPositionVariance(const XYZVector &vec) override;
68  void SetLength(Double_t length) { fLength = length; }
69  void SetClusterID(Int_t id) { fClusterID = id; }
70  virtual void AddHit(const AtHit &hit);
71 
72  Double_t GetLength() const { return fLength; }
74 
75  const TMatrixDSym &GetCovMatrix() const { return fCovMatrix; }
76  const TMatrixDSym &GetCovNumerator() const { return fCovNumerator; }
77 
78  Int_t GetClusterID() const { return fClusterID; }
79  Int_t GetClusterSize() const { return fClusterSize; }
80 
81 protected:
82  template <class A, class B>
83  XYZVector ElementMult(const A &a, const B &b)
84  {
85  return {a.X() * b.X(), a.Y() * b.Y(), a.Z() * b.Z()};
86  }
87  template <class A, class B>
88  XYZVector ElementDiv(const A &a, const B &b)
89  {
90  return {a.X() / b.X(), a.Y() / b.Y(), a.Z() / b.Z()};
91  }
92  template <class T>
93  T ElementInvert(const T &b)
94  {
95  return {1 / b.X(), 1 / b.Y(), 1 / b.Z()};
96  }
97 
98  void updateWeightsAndCharge(const AtHit &hit);
99  void updatePosition(const AtHit &hit);
100  void updateCovariance(const AtHit &hit);
101 
103 };
104 
105 #endif
AtHitCluster::ElementMult
XYZVector ElementMult(const A &a, const B &b)
Definition: AtHitCluster.h:83
AtHitCluster::fTotalWeight2
XYZVector fTotalWeight2
Definition: AtHitCluster.h:49
AtHit::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtHit.h:29
AtHitCluster::fWeight
XYZVector fWeight
Definition: AtHitCluster.h:50
AtHitCluster::updateWeightsAndCharge
void updateWeightsAndCharge(const AtHit &hit)
Definition: AtHitCluster.cxx:129
AtHitCluster::AtHitCluster
AtHitCluster()
Definition: AtHitCluster.cxx:22
AtHitCluster::GetClusterSize
Int_t GetClusterSize() const
Definition: AtHitCluster.h:79
AtHitCluster
: Class representing a cluster of hits that arise from the same deposition of charge in space....
Definition: AtHitCluster.h:37
XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtFindVertex.h:20
AtHit::XYZVector
ROOT::Math::XYZVector XYZVector
Definition: AtHit.h:30
AtHitCluster::fCovNumerator
TMatrixDSym fCovNumerator
Definition: AtHitCluster.h:45
AtHitCluster::AtHitCluster
AtHitCluster(const AtHitCluster &cluster)=default
AtHitCluster::fPositionCharge
XYZPoint fPositionCharge
Definition: AtHitCluster.h:52
AtHitCluster::ClassDefOverride
ClassDefOverride(AtHitCluster, 4)
AtHitCluster::SetCovMatrix
void SetCovMatrix(TMatrixDSym matrix)
Definition: AtHitCluster.h:65
AtHitCluster::updateCovariance
void updateCovariance(const AtHit &hit)
Definition: AtHitCluster.cxx:66
AtHitCluster::fPositionOld
XYZVector fPositionOld
Definition: AtHitCluster.h:54
AtHitCluster::updatePosition
void updatePosition(const AtHit &hit)
Definition: AtHitCluster.cxx:113
AtHitCluster::ElementDiv
XYZVector ElementDiv(const A &a, const B &b)
Definition: AtHitCluster.h:88
hc::cluster
std::vector< size_t > cluster
Definition: hc.h:25
AtHitCluster::fTotalWeight
XYZVector fTotalWeight
Definition: AtHitCluster.h:48
AtHitCluster::GetPositionCharge
XYZPoint GetPositionCharge() const
Definition: AtHitCluster.h:73
AtHit.h
AtHitCluster::AddHit
virtual void AddHit(const AtHit &hit)
Add hit to cluster.
Definition: AtHitCluster.cxx:52
AtHitCluster::SetLength
void SetLength(Double_t length)
Definition: AtHitCluster.h:68
AtHitCluster::fCovMatrix
TMatrixDSym fCovMatrix
Definition: AtHitCluster.h:42
AtHitCluster::GetLength
Double_t GetLength() const
Definition: AtHitCluster.h:72
AtHitCluster::GetClusterID
Int_t GetClusterID() const
Definition: AtHitCluster.h:78
AtHitCluster::SetPositionVariance
virtual void SetPositionVariance(const XYZVector &vec) override
Definition: AtHitCluster.cxx:149
AtHitCluster::Clone
virtual std::unique_ptr< AtHit > Clone() override
Definition: AtHitCluster.cxx:17
AtHitCluster::fPositionChargeOld
XYZPoint fPositionChargeOld
Definition: AtHitCluster.h:53
AtHitCluster::~AtHitCluster
virtual ~AtHitCluster()=default
AtHitCluster::fLength
Double_t fLength
Definition: AtHitCluster.h:56
AtHitCluster::fClusterID
Int_t fClusterID
Definition: AtHitCluster.h:39
AtHitCluster::GetCovNumerator
const TMatrixDSym & GetCovNumerator() const
Definition: AtHitCluster.h:76
AtHitCluster::ElementInvert
T ElementInvert(const T &b)
Definition: AtHitCluster.h:93
AtHitCluster::fClusterSize
Int_t fClusterSize
Definition: AtHitCluster.h:57
AtHitCluster::SetClusterID
void SetClusterID(Int_t id)
Definition: AtHitCluster.h:69
AtHit
Point in space with charge.
Definition: AtHit.h:27
AtHitCluster::GetCovMatrix
const TMatrixDSym & GetCovMatrix() const
Definition: AtHitCluster.h:75