Belle II Software development
CDCTrajectory3D.test.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory3D.h>
10
11#include <genfit/TrackCand.h>
12
13#include <TMatrixDSym.h>
14
15#include <gtest/gtest.h>
16
17
18using namespace Belle2;
19using namespace TrackFindingCDC;
20
21TEST(TrackFindingCDCTest, eventdata_trajectories_CDCTrajectory3D_constructorPosMomCharge)
22{
23 Vector3D newMom3D(1.0, 2.0, 1.0);
24 Vector3D newPos3D(1.0, 2.0, 1.0);
25 double newTime = 0.0;
26 ESign newChargeSign = ESign::c_Plus;
27 double bZ = 2.0;
28
29 CDCTrajectory3D trajectory(newPos3D, newTime, newMom3D, newChargeSign, bZ);;
30
31 Vector3D mom3D = trajectory.getMom3DAtSupport(bZ);
32 Vector3D pos3D = trajectory.getSupport();
33 ESign chargeSign = trajectory.getChargeSign();
34
35
36 EXPECT_NEAR(newMom3D.x(), mom3D.x(), 10e-7);
37 EXPECT_NEAR(newMom3D.y(), mom3D.y(), 10e-7);
38 EXPECT_NEAR(newMom3D.z(), mom3D.z(), 10e-7);
39
40 EXPECT_NEAR(newPos3D.x(), pos3D.x(), 10e-7);
41 EXPECT_NEAR(newPos3D.y(), pos3D.y(), 10e-7);
42 EXPECT_NEAR(newPos3D.z(), pos3D.z(), 10e-7);
43
44 EXPECT_NEAR(newChargeSign, chargeSign, 10e-7);
45}
46
47
48
49TEST(TrackFindingCDCTest, CDCTrajectory3D_clear)
50{
51 Vector3D newMom3D(1.0, 2.0, 1.0);
52 Vector3D newPos3D(1.0, 2.0, 1.0);
53 double newTime = 0.0;
54 ESign newChargeSign = ESign::c_Plus;
55
56 CDCTrajectory3D trajectory3D(newPos3D, newTime, newMom3D, newChargeSign);
57 UncertainHelix uncertainHelix = trajectory3D.getLocalHelix();
58 Helix helix = uncertainHelix;
59
60 PerigeeCircle perigeeCircle = helix.circleXY();
61 SZLine szLine = helix.szLine();
62
63 trajectory3D.clear();
64 EXPECT_TRUE(trajectory3D.isInvalid());
65 EXPECT_FALSE(trajectory3D.isFitted());
66
67 uncertainHelix.invalidate();
68 EXPECT_TRUE(uncertainHelix->isInvalid());
69
70 helix.invalidate();
71 EXPECT_TRUE(helix.isInvalid());
72
73 perigeeCircle.invalidate();
74 EXPECT_TRUE(perigeeCircle.isInvalid());
75
76 szLine.invalidate();
77 EXPECT_TRUE(szLine.isInvalid());
78}
79
80
81TEST(TrackFindingCDCTest, CDCTrajectory3D_GFTrackRoundTrip)
82{
83 Vector3D expectedMomentum(1.0, 0.0, 0.0);
84 Vector3D expectedPosition(0.0, 1.0, 0.0);
85 ESign expectedCharge = ESign::c_Plus;
86 double bZ = 2;
87
88 genfit::TrackCand expectedGFTrackCand;
89 expectedGFTrackCand.setPosMomSeed(expectedPosition,
90 expectedMomentum,
91 expectedCharge);
92
93 TMatrixDSym expectedCov6(6);
94 expectedCov6.Zero();
95 expectedCov6(0, 0) = 0; // There cannot be a covariance in the x direction since the direction along the track has no constraint.
96 expectedCov6(1, 1) = 2;
97 expectedCov6(2, 2) = 3;
98 expectedCov6(3, 3) = 4;
99 expectedCov6(4, 4) = 5;
100 expectedCov6(5, 5) = 6;
101 expectedGFTrackCand.setCovSeed(expectedCov6);
102
103
104 CDCTrajectory3D trajectory3D(expectedGFTrackCand, bZ);
105
106 genfit::TrackCand gfTrackCand;
107 trajectory3D.fillInto(gfTrackCand, bZ);
108
109 Vector3D position(gfTrackCand.getPosSeed());
110 Vector3D momentum(gfTrackCand.getMomSeed());
111 ESign charge = sign(gfTrackCand.getChargeSeed());
112 TMatrixDSym cov6 = gfTrackCand.getCovSeed();
113
114
115 EXPECT_NEAR(expectedPosition.x(), position.x(), 10e-7);
116 EXPECT_NEAR(expectedPosition.y(), position.y(), 10e-7);
117 EXPECT_NEAR(expectedPosition.z(), position.z(), 10e-7);
118
119 EXPECT_NEAR(expectedMomentum.x(), momentum.x(), 10e-7);
120 EXPECT_NEAR(expectedMomentum.y(), momentum.y(), 10e-7);
121 EXPECT_NEAR(expectedMomentum.z(), momentum.z(), 10e-7);
122
123 EXPECT_EQ(expectedCharge, charge);
124 for (int i = 0; i < 6; ++i) {
125 for (int j = 0; j < 6; ++j) {
126 EXPECT_NEAR(expectedCov6(i, j), cov6(i, j), 10e-7);
127 }
128 }
129
130}
Helix parameter class.
Definition Helix.h:48
Particle full three dimensional trajectory.
Extension of the generalized circle also caching the perigee coordinates.
bool isInvalid() const
Indicates if all circle parameters are zero.
void invalidate()
Sets all circle parameters to zero.
A line in the sz space.
Definition SZLine.h:26
bool isInvalid() const
Indicates if the line parameters do not represent a valid line.
Definition SZLine.h:142
void invalidate()
Sets the parameters to a invalid representation.
Definition SZLine.h:135
A three dimensional vector.
Definition Vector3D.h:33
double x() const
Getter for the x coordinate.
Definition Vector3D.h:472
double y() const
Getter for the y coordinate.
Definition Vector3D.h:484
double z() const
Getter for the z coordinate.
Definition Vector3D.h:496
This class represents an ideal helix in perigee parameterization including the covariance matrix of t...
double charge(int pdgCode)
Returns electric charge of a particle with given pdg code.
Definition EvtPDLUtil.cc:44
Abstract base class for different kinds of events.