ATLAS Offline Software
Loading...
Searching...
No Matches
Derivt.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef _TrkVKalVrtCore_Derivt_H
6#define _TrkVKalVrtCore_Derivt_H
7
8
9
10#include "TrkVKalVrtCore/Derclc1.h" //calcMassConstraint
11#include "TrkVKalVrtCore/Derclc2.h" //calcPointConstraint
12#include "TrkVKalVrtCore/DerclcAng.h" //calcPhiConstraint
13#include "TrkVKalVrtCore/TrkVKalUtils.h" //Vect3DF
15#include <vector>
16#include <iosfwd>
17
18namespace Trk {
19
20// Base class for any constraint
21// Contains derivatines needed for application
22//
23
24class VKVertex;
27 public:
30
31 public:
32 const VKVertex* getOriginVertex() const { return m_originVertex; }
33 VKConstraintType getType() const { return m_type; }
34 virtual VKConstraintBase* clone() const = 0;
35 virtual void applyConstraint() = 0;
36 int NCDim; // constraint dimension
37 int NTrk; // number of tracks
38 std::vector<double> aa; // Constraint values
39 std::vector<std::vector<Vect3DF> > f0t; // Constraint momentum derivatives
40 std::vector<Vect3DF> h0t; // Constraint space derivatives
41 protected:
44};
45//
46// Mass constraint
47//
48class VKMassConstraint final : public VKConstraintBase {
49 public:
50 VKMassConstraint(int, double, VKVertex*);
51 VKMassConstraint(int, double, std::vector<int>, VKVertex*);
53 friend std::ostream& operator<<(std::ostream& out, const VKMassConstraint&);
54 virtual VKConstraintBase* clone() const override;
55
56 public:
57 void setTargetMass(double M) { m_targetMass = M; };
58 virtual void applyConstraint() override;
59 double getTargetMass() const { return m_targetMass; };
60 const std::vector<int>& getUsedParticles() const { return m_usedParticles; };
61
62 private:
63 std::vector<int> m_usedParticles;
65};
66//
67// Angular constraints
68//
69class VKPhiConstraint final : public VKConstraintBase {
70 public:
73 virtual VKConstraintBase* clone() const override;
74 virtual void applyConstraint() override;
75 friend std::ostream& operator<<(std::ostream& out, const VKPhiConstraint&);
76};
78 public:
81 virtual VKConstraintBase* clone() const override;
82 virtual void applyConstraint() override;
83 friend std::ostream& operator<<(std::ostream& out, const VKThetaConstraint&);
84};
85
86//
87// Pointing constraints
88//
89class VKPointConstraint final : public VKConstraintBase {
90 public:
91 VKPointConstraint(int, const double[3], VKVertex*, bool);
93 friend std::ostream& operator<<(std::ostream& out, const VKPointConstraint&);
94 bool onlyZ() const { return m_onlyZ; };
95 void setTargetVertex(double VRT[3]) {
96 m_targetVertex[0] = VRT[0];
97 m_targetVertex[1] = VRT[1];
98 m_targetVertex[2] = VRT[2];
99 };
100 const double* getTargetVertex() const { return m_targetVertex; };
101 virtual VKConstraintBase* clone() const override;
102 virtual void applyConstraint() override;
103
104 private:
106 double m_targetVertex[3]{}; // Target vertex is in global reference system
107};
108//
109// Vertex in plane constraint
110//
112 public:
113 VKPlaneConstraint(int, double, double, double, double, VKVertex*);
115 friend std::ostream& operator<<(std::ostream& out, const VKPlaneConstraint&);
116 double getA() const { return m_A; }
117 double getB() const { return m_B; }
118 double getC() const { return m_C; }
119 double getD() const { return m_D; }
120 virtual void applyConstraint() override;
121 virtual VKConstraintBase* clone() const override;
122
123 private:
124 double m_A, m_B, m_C, m_D;
125};
126//
127// Vertex at fixed radius constraint
128//
130 public:
131 VKRadiusConstraint(int, double, double[2], VKVertex*);
133 friend std::ostream& operator<<(std::ostream& out, const VKRadiusConstraint&);
134 double getRC() const { return m_RC; }
135 double getRefX() const { return m_refP[0]; }
136 double getRefY() const { return m_refP[1]; }
137 virtual void applyConstraint() override;
138 virtual VKConstraintBase* clone() const override;
139
140 private:
141 double m_RC;
142 double m_refP[2];
143};
144
145
146inline VKConstraintBase::VKConstraintBase(const int NC, int NTRK,
148 : NCDim(NC),
149 NTrk(NTRK),
150 aa(NC, 0.),
151 f0t(NTRK, std::vector<Vect3DF>(NC, Vect3DF())),
152 h0t(NC, Vect3DF()),
153 m_originVertex(vrt),
154 m_type(t) {}
155inline VKConstraintBase::~VKConstraintBase() = default;
156// MASS constraint
157inline VKMassConstraint::VKMassConstraint(int NTRK, double mass, VKVertex* vk)
158 : VKConstraintBase(1, NTRK, VKConstraintType::Mass, vk),
159 m_usedParticles(NTRK, 0),
160 m_targetMass(mass) {
161 for (int i = 0; i < NTrk; i++)
162 m_usedParticles[i] = i;
163}
164
165inline VKMassConstraint::VKMassConstraint(int NTRK, double mass,
166 std::vector<int> listTrk,
167 VKVertex* vk)
168 : VKConstraintBase(1, NTRK, VKConstraintType::Mass, vk),
169 m_usedParticles(std::move(listTrk)),
170 m_targetMass(mass) {
171 m_originVertex = vk;
172}
173inline VKMassConstraint::~VKMassConstraint() = default;
174
175// Angular constraints
177 : VKConstraintBase(1, NTRK, VKConstraintType::Phi, vk) {
178 m_originVertex = vk;
179}
180inline VKPhiConstraint::~VKPhiConstraint() = default;
181
183 : VKConstraintBase(1, NTRK, VKConstraintType::Theta, vk) {
184 m_originVertex = vk;
185}
187
188// Pointing constraint
189inline VKPointConstraint::VKPointConstraint(int NTRK, const double vrt[3],
190 VKVertex* vk, bool onlyZ = false)
192 m_originVertex = vk;
193 m_targetVertex[0] = vrt[0];
194 m_targetVertex[1] = vrt[1];
195 m_targetVertex[2] = vrt[2];
196 // For Z only constraint
197}
199
200// Vertex in plane constraint
201inline VKPlaneConstraint::VKPlaneConstraint(int NTRK, double a, double b,
202 double c, double d, VKVertex* vk)
203 : VKConstraintBase(1, NTRK, VKConstraintType::Plane, vk),
204 m_A(a),
205 m_B(b),
206 m_C(c),
207 m_D(d) {}
208
210
211// Vertex at fixed radius
212inline VKRadiusConstraint::VKRadiusConstraint(int NTRK, double RC, double RefP[2], VKVertex* vk)
214 m_RC(RC) {m_refP[0]=RefP[0]; m_refP[1]=RefP[1];}
216
217
219 return new VKMassConstraint(*this);
220}
222 return new VKPhiConstraint(*this);
223}
225 return new VKThetaConstraint(*this);
226}
228 return new VKPointConstraint(*this);
229}
231 return new VKPlaneConstraint(*this);
232}
234 return new VKRadiusConstraint(*this);
235}
236
237
256
257
258} // namespace Trk
259#endif
static Double_t a
std::vector< std::vector< Vect3DF > > f0t
Definition Derivt.h:39
VKConstraintType getType() const
Definition Derivt.h:33
virtual void applyConstraint()=0
virtual ~VKConstraintBase()
VKConstraintBase(const int, int, VKConstraintType, VKVertex *)
Definition Derivt.h:146
VKVertex * m_originVertex
Definition Derivt.h:42
const VKVertex * getOriginVertex() const
Definition Derivt.h:32
std::vector< Vect3DF > h0t
Definition Derivt.h:40
std::vector< double > aa
Definition Derivt.h:38
const VKConstraintType m_type
Definition Derivt.h:43
virtual VKConstraintBase * clone() const =0
void setTargetMass(double M)
Definition Derivt.h:57
friend std::ostream & operator<<(std::ostream &out, const VKMassConstraint &)
Definition Derivt.cxx:32
const std::vector< int > & getUsedParticles() const
Definition Derivt.h:60
std::vector< int > m_usedParticles
Definition Derivt.h:63
virtual void applyConstraint() override
Definition Derivt.h:238
VKMassConstraint(int, double, VKVertex *)
Definition Derivt.h:157
virtual VKConstraintBase * clone() const override
Definition Derivt.h:218
double getTargetMass() const
Definition Derivt.h:59
virtual VKConstraintBase * clone() const override
Definition Derivt.h:221
virtual void applyConstraint() override
Definition Derivt.h:241
VKPhiConstraint(int, VKVertex *)
Definition Derivt.h:176
friend std::ostream & operator<<(std::ostream &out, const VKPhiConstraint &)
Definition Derivt.cxx:54
virtual VKConstraintBase * clone() const override
Definition Derivt.h:230
VKPlaneConstraint(int, double, double, double, double, VKVertex *)
Definition Derivt.h:201
friend std::ostream & operator<<(std::ostream &out, const VKPlaneConstraint &)
Definition Derivt.cxx:95
virtual void applyConstraint() override
Definition Derivt.h:250
double getB() const
Definition Derivt.h:117
double getC() const
Definition Derivt.h:118
double getA() const
Definition Derivt.h:116
double getD() const
Definition Derivt.h:119
virtual VKConstraintBase * clone() const override
Definition Derivt.h:227
void setTargetVertex(double VRT[3])
Definition Derivt.h:95
friend std::ostream & operator<<(std::ostream &out, const VKPointConstraint &)
Definition Derivt.cxx:76
bool onlyZ() const
Definition Derivt.h:94
double m_targetVertex[3]
Definition Derivt.h:106
const double * getTargetVertex() const
Definition Derivt.h:100
virtual void applyConstraint() override
Definition Derivt.h:247
VKPointConstraint(int, const double[3], VKVertex *, bool)
Definition Derivt.h:189
virtual VKConstraintBase * clone() const override
Definition Derivt.h:233
VKRadiusConstraint(int, double, double[2], VKVertex *)
Definition Derivt.h:212
friend std::ostream & operator<<(std::ostream &out, const VKRadiusConstraint &)
Definition Derivt.cxx:108
double getRefX() const
Definition Derivt.h:135
double getRC() const
Definition Derivt.h:134
double getRefY() const
Definition Derivt.h:136
virtual void applyConstraint() override
Definition Derivt.h:253
friend std::ostream & operator<<(std::ostream &out, const VKThetaConstraint &)
Definition Derivt.cxx:65
virtual VKConstraintBase * clone() const override
Definition Derivt.h:224
VKThetaConstraint(int, VKVertex *)
Definition Derivt.h:182
virtual void applyConstraint() override
Definition Derivt.h:244
Ensure that the ATLAS eigen extensions are properly loaded.
void calcThetaConstraint(VKThetaConstraint *cnst)
Definition DerclcAng.cxx:61
void calcPlaneConstraint(VKPlaneConstraint *cnst)
Definition DerclcAng.cxx:99
void calcPhiConstraint(VKPhiConstraint *cnst)
Definition DerclcAng.cxx:22
void calcPointConstraint(VKPointConstraint *cnst)
Definition Derclc2.cxx:20
void calcMassConstraint(VKMassConstraint *cnst)
Definition Derclc1.cxx:24
void calcRadiusConstraint(VKRadiusConstraint *cnst)
VKConstraintType
Definition Derivt.h:25
STL namespace.