ATLAS Offline Software
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 
18 namespace Trk {
19 
20 // Base class for any constraint
21 // Contains derivatines needed for application
22 //
23 
24 class VKVertex;
27  public:
28  VKConstraintBase(const int, int, VKConstraintType, VKVertex*);
29  virtual ~VKConstraintBase();
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 //
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;
64  double m_targetMass;
65 };
66 //
67 // Angular constraints
68 //
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 //
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:
105  bool m_onlyZ;
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 
146 inline 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) {}
155 inline VKConstraintBase::~VKConstraintBase() = default;
156 // MASS constraint
157 inline 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 
165 inline 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 }
173 inline VKMassConstraint::~VKMassConstraint() = default;
174 
175 // Angular constraints
177  : VKConstraintBase(1, NTRK, VKConstraintType::Phi, vk) {
178  m_originVertex = vk;
179 }
180 inline VKPhiConstraint::~VKPhiConstraint() = default;
181 
183  : VKConstraintBase(1, NTRK, VKConstraintType::Theta, vk) {
184  m_originVertex = vk;
185 }
186 inline VKThetaConstraint::~VKThetaConstraint() = default;
187 
188 // Pointing constraint
189 inline VKPointConstraint::VKPointConstraint(int NTRK, const double vrt[3],
190  VKVertex* vk, bool onlyZ = false)
191  : VKConstraintBase(2, NTRK, VKConstraintType::Point, vk), m_onlyZ(onlyZ) {
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 }
198 inline VKPointConstraint::~VKPointConstraint() = default;
199 
200 // Vertex in plane constraint
201 inline 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 
209 inline VKPlaneConstraint::~VKPlaneConstraint() = default;
210 
211 // Vertex at fixed radius
212 inline VKRadiusConstraint::VKRadiusConstraint(int NTRK, double RC, double RefP[2], VKVertex* vk)
213  : VKConstraintBase(1, NTRK, VKConstraintType::Radius, vk),
214  m_RC(RC) {m_refP[0]=RefP[0]; m_refP[1]=RefP[1];}
215 inline VKRadiusConstraint::~VKRadiusConstraint() = default;
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 
239  calcMassConstraint(this);
240 }
242  calcPhiConstraint(this);
243 }
245  calcThetaConstraint(this);
246 }
248  calcPointConstraint(this);
249 }
251  calcPlaneConstraint(this);
252 }
254  calcRadiusConstraint(this);
255 }
256 
257 
258 } // namespace Trk
259 #endif
Trk::VKRadiusConstraint::getRefX
double getRefX() const
Definition: Derivt.h:135
Trk::VKRadiusConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:233
Trk::VKPhiConstraint
Definition: Derivt.h:69
Trk::VKConstraintBase::applyConstraint
virtual void applyConstraint()=0
Trk::VKPointConstraint::onlyZ
bool onlyZ() const
Definition: Derivt.h:94
Base_Fragment.mass
mass
Definition: Sherpa_i/share/common/Base_Fragment.py:59
Trk::VKPlaneConstraint::m_A
double m_A
Definition: Derivt.h:124
Trk::VKRadiusConstraint::m_RC
double m_RC
Definition: Derivt.h:141
Trk::VKRadiusConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:253
hist_file_dump.d
d
Definition: hist_file_dump.py:142
Trk::VKPlaneConstraint::getD
double getD() const
Definition: Derivt.h:119
Derclc2.h
Trk::VKMassConstraint::m_usedParticles
std::vector< int > m_usedParticles
Definition: Derivt.h:60
Trk::VKMassConstraint::m_targetMass
double m_targetMass
Definition: Derivt.h:64
Trk::VKPlaneConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:230
Trk::VKConstraintBase::m_type
const VKConstraintType m_type
Definition: Derivt.h:43
Trk::VKThetaConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:224
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:70
TRT_PAI_gasdata::NC
const int NC
Number of levels for Carbon.
Definition: TRT_PAI_gasdata.h:237
Trk::VKConstraintBase::~VKConstraintBase
virtual ~VKConstraintBase()
Trk::VKConstraintBase::NCDim
int NCDim
Definition: Derivt.h:36
Trk::VKMassConstraint
Definition: Derivt.h:48
Derclc1.h
Trk::VKThetaConstraint::VKThetaConstraint
VKThetaConstraint(int, VKVertex *)
Definition: Derivt.h:182
Phi
@ Phi
Definition: RPCdef.h:8
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
Trk::VKPhiConstraint::VKPhiConstraint
VKPhiConstraint(int, VKVertex *)
Definition: Derivt.h:176
Trk::VKPointConstraint::VKPointConstraint
VKPointConstraint(int, const double[3], VKVertex *, bool)
Definition: Derivt.h:189
Trk::VKConstraintBase
Definition: Derivt.h:26
Trk::VKPlaneConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:250
Trk::VKPhiConstraint::~VKPhiConstraint
~VKPhiConstraint()
Trk::VKThetaConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKThetaConstraint &)
Definition: Derivt.cxx:65
Trk::VKRadiusConstraint
Definition: Derivt.h:129
Trk::calcPlaneConstraint
void calcPlaneConstraint(VKPlaneConstraint *cnst)
Definition: DerclcAng.cxx:99
DerclcAng.h
TrkVKalVrtCoreBase.h
Trk::VKRadiusConstraint::m_refP
double m_refP[2]
Definition: Derivt.h:142
m_type
TokenType m_type
the type
Definition: TProperty.cxx:44
Trk::VKConstraintType::Theta
@ Theta
Trk::VKConstraintType::Mass
@ Mass
Trk::VKConstraintBase::NTrk
int NTrk
Definition: Derivt.h:37
Trk::VKPointConstraint
Definition: Derivt.h:89
Trk::VKPointConstraint::m_targetVertex
double m_targetVertex[3]
Definition: Derivt.h:106
Trk::VKRadiusConstraint::getRefY
double getRefY() const
Definition: Derivt.h:136
lumiFormat.i
int i
Definition: lumiFormat.py:85
vector
Definition: MultiHisto.h:13
Trk::VKPointConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:247
Trk::VKMassConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:238
Trk::VKThetaConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:244
Trk::VKPlaneConstraint::getB
double getB() const
Definition: Derivt.h:117
Trk::VKPhiConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:221
Trk::VKThetaConstraint::~VKThetaConstraint
~VKThetaConstraint()
Trk::calcPointConstraint
void calcPointConstraint(VKPointConstraint *cnst)
Definition: Derclc2.cxx:20
Trk::VKMassConstraint::setTargetMass
void setTargetMass(double M)
Definition: Derivt.h:57
Trk::VKConstraintBase::f0t
std::vector< std::vector< Vect3DF > > f0t
Definition: Derivt.h:39
Trk::VKConstraintBase::m_originVertex
VKVertex * m_originVertex
Definition: Derivt.h:42
Trk::VKPointConstraint::~VKPointConstraint
~VKPointConstraint()
columnar::final
CM final
Definition: ColumnAccessor.h:106
Trk::VKConstraintBase::VKConstraintBase
VKConstraintBase(const int, int, VKConstraintType, VKVertex *)
Definition: Derivt.h:146
Trk::VKPhiConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKPhiConstraint &)
Definition: Derivt.cxx:54
Trk::VKRadiusConstraint::VKRadiusConstraint
VKRadiusConstraint(int, double, double[2], VKVertex *)
Definition: Derivt.h:212
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::VKPointConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:227
Trk::VKPhiConstraint::applyConstraint
virtual void applyConstraint() override
Definition: Derivt.h:241
Trk::VKPlaneConstraint::getA
double getA() const
Definition: Derivt.h:116
Trk::VKPointConstraint::m_onlyZ
bool m_onlyZ
Definition: Derivt.h:105
Trk::Vect3DF
Definition: TrkVKalUtils.h:14
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
ChargedTracksWeightFilter::Spline::Point
Linear spline representation of a function used to calculate weights.
Definition: ChargedTracksWeightFilter.h:28
Trk::VKConstraintType::Plane
@ Plane
Trk::VKConstraintBase::aa
std::vector< double > aa
Definition: Derivt.h:38
Trk::VKConstraintBase::clone
virtual VKConstraintBase * clone() const =0
Trk::VKPlaneConstraint::m_B
double m_B
Definition: Derivt.h:124
Trk::VKMassConstraint::getTargetMass
double getTargetMass() const
Definition: Derivt.h:59
Trk::VKMassConstraint::getUsedParticles
const std::vector< int > & getUsedParticles() const
Definition: Derivt.h:60
Trk::VKRadiusConstraint::getRC
double getRC() const
Definition: Derivt.h:134
Trk::VKMassConstraint::VKMassConstraint
VKMassConstraint(int, double, VKVertex *)
Definition: Derivt.h:157
Trk::VKMassConstraint::~VKMassConstraint
~VKMassConstraint()
Trk::VKPlaneConstraint::~VKPlaneConstraint
~VKPlaneConstraint()
Trk::VKPlaneConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKPlaneConstraint &)
Definition: Derivt.cxx:95
Trk::VKRadiusConstraint::~VKRadiusConstraint
~VKRadiusConstraint()
a
TList * a
Definition: liststreamerinfos.cxx:10
Trk::VKConstraintBase::getOriginVertex
const VKVertex * getOriginVertex() const
Definition: Derivt.h:32
Trk::VKConstraintBase::h0t
std::vector< Vect3DF > h0t
Definition: Derivt.h:40
Trk::VKPlaneConstraint::m_C
double m_C
Definition: Derivt.h:124
Trk::VKPointConstraint::getTargetVertex
const double * getTargetVertex() const
Definition: Derivt.h:100
Trk::VKMassConstraint::clone
virtual VKConstraintBase * clone() const override
Definition: Derivt.h:218
Trk::VKPointConstraint::setTargetVertex
void setTargetVertex(double VRT[3])
Definition: Derivt.h:95
Trk::VKConstraintType::Point
@ Point
Trk::VKPlaneConstraint
Definition: Derivt.h:111
Trk::VKVertex
Definition: TrkVKalVrtCoreBase.h:128
Trk::calcPhiConstraint
void calcPhiConstraint(VKPhiConstraint *cnst)
Definition: DerclcAng.cxx:22
Trk::VKPlaneConstraint::VKPlaneConstraint
VKPlaneConstraint(int, double, double, double, double, VKVertex *)
Definition: Derivt.h:201
Trk::VKMassConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKMassConstraint &)
Definition: Derivt.cxx:32
Trk::VKPlaneConstraint::m_D
double m_D
Definition: Derivt.h:124
TrkVKalUtils.h
Trk::VKConstraintType
VKConstraintType
Definition: Derivt.h:25
Trk::VKConstraintType::Phi
@ Phi
Trk::VKRadiusConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKRadiusConstraint &)
Definition: Derivt.cxx:108
test_AnalysisBaseEventLoopJob.aa
aa
Definition: test_AnalysisBaseEventLoopJob.py:37
python.compressB64.c
def c
Definition: compressB64.py:93
Trk::VKPlaneConstraint::getC
double getC() const
Definition: Derivt.h:118
Trk::VKThetaConstraint
Definition: Derivt.h:77
Trk::VKConstraintBase::getType
VKConstraintType getType() const
Definition: Derivt.h:33
Trk::calcMassConstraint
void calcMassConstraint(VKMassConstraint *cnst)
Definition: Derclc1.cxx:24
Trk::calcThetaConstraint
void calcThetaConstraint(VKThetaConstraint *cnst)
Definition: DerclcAng.cxx:61
Trk::calcRadiusConstraint
void calcRadiusConstraint(VKRadiusConstraint *cnst)
Definition: DerclcAng.cxx:120
Trk::VKPointConstraint::operator<<
friend std::ostream & operator<<(std::ostream &out, const VKPointConstraint &)
Definition: Derivt.cxx:76
Trk::VKConstraintType::Radius
@ Radius