BmnRoot
26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnATestTrack.h
Go to the documentation of this file.
1
/*
2
BM@N alignment routine
3
BM@N experiment at NICA complex, JINR, 2025
4
5
Department: Math & Soft Group of HEP lab
6
Author: Igor Polev, polev@jinr.int
7
8
BmnATestTrack class header-only implementation
9
Minimalistic representation of random linear track
10
(for alignment algorithm test only)
11
*/
12
13
/*
14
=== DEPRECATION NOTICE =========================================
15
Due to complex changes in BmnAligner, this class requires rework
16
================================================================
17
*/
18
19
#ifndef BMNATESTTRACK_H
20
#define BMNATESTTRACK_H
21
22
#include "
BmnATestHit.h
"
23
#include "
BmnAlignDefines.h
"
24
#include "
BmnAlignResult.h
"
25
#include "
BmnAligner.h
"
26
#include "
TPolyLine3D.h
"
27
28
#include <stdexcept>
29
30
#define BMN_TEST_TRACK_SOLID_COLOR kBlack
31
#define BMN_TEST_TRACK_NONSOLID_COLOR kMagenta
32
#define BMN_TEST_TRACK_DEF_MAX_Z 500.0
33
34
class
BmnATestTrack
35
{
36
private
:
37
// according to _VBCK_ line is defined as:
38
// x = AlphaX1 + AlphaX2 * z
39
// y = AlphaY1 + AlphaY2 * z
40
// see readme.md for details
41
SVectLC
fAlpha
;
42
SVect3
fVertex
,
fDirection
;
43
Int_t
fMaxHits
,
fHitsCnt
{0};
44
BmnATestHit
**
fpHits
;
45
46
protected
:
47
typedef
BmnAligner<BmnATestHit>
BmnAlignerClass
;
48
49
public
:
50
BmnATestTrack
() =
delete
;
51
BmnATestTrack
(
SVectLC
Alpha,
Int_t
nHits);
52
BmnATestTrack
(
Double_t
Alpha1Sigma,
Double_t
Alpha2Min,
Double_t
Alpha2Max,
Int_t
nHits);
53
~BmnATestTrack
() {
delete
[]
fpHits
; }
54
55
const
SVectLC
&
GetAlpha
() const noexcept {
return
fAlpha
; }
56
const
SVect3
&
GetVertex
() const noexcept {
return
fVertex
; }
57
const
SVect3
&
GetDirection
() const noexcept {
return
fDirection
; }
58
59
void
AddHit
(
BmnATestHit
& hit);
60
void
AddMSE
(
BmnAlignerClass
* pAligner,
Bool_t
withResiduals =
kFALSE
)
const
;
61
62
Double_t
X
(
Double_t
z)
const
noexcept
{
return
fAlpha
(
iX0
) +
fAlpha
(
iX1
) * z; }
63
Double_t
Y
(
Double_t
z)
const
noexcept
{
return
fAlpha
(
iY0
) +
fAlpha
(
iY1
) * z; }
64
65
// for ROOT macro mode only
66
void
Draw
(
Bool_t
solid =
kTRUE
,
Double_t
maxZ =
BMN_TEST_TRACK_DEF_MAX_Z
)
const
;
67
};
68
69
inline
BmnATestTrack::BmnATestTrack
(
SVectLC
Alpha,
Int_t
nHits)
70
:
fAlpha
(Alpha)
71
,
fMaxHits
(nHits)
72
{
73
fVertex
=
SVect3
({
fAlpha
(
iX0
),
fAlpha
(
iY0
), 0.0});
74
fDirection
=
SVect3
({
fAlpha
(
iX1
),
fAlpha
(
iY1
), 1.0});
75
76
fpHits
=
new
BmnATestHit
*[
fMaxHits
];
77
for
(
Int_t
i
= 0;
i
<
fMaxHits
;
i
++)
78
fpHits
[
i
] =
nullptr
;
79
}
80
81
inline
BmnATestTrack::BmnATestTrack
(
Double_t
Alpha1Sigma,
Double_t
Alpha2Min,
Double_t
Alpha2Max,
Int_t
nHits)
82
:
fMaxHits
(nHits)
83
{
84
fAlpha
(
iX0
) = BMN_RND.Gaus(0.0, Alpha1Sigma);
85
fAlpha
(
iY0
) = BMN_RND.Gaus(0.0, Alpha1Sigma);
86
fAlpha
(
iX1
) = BMN_RND.Uniform(Alpha2Min, Alpha2Max);
87
fAlpha
(
iY1
) = BMN_RND.Uniform(Alpha2Min, Alpha2Max);
88
fVertex
=
SVect3
({
fAlpha
(
iX0
),
fAlpha
(
iY0
), 0.0});
89
fDirection
=
SVect3
({
fAlpha
(
iX1
),
fAlpha
(
iY1
), 1.0});
90
91
fpHits
=
new
BmnATestHit
*[
fMaxHits
];
92
for
(
Int_t
i
= 0;
i
<
fMaxHits
;
i
++)
93
fpHits
[
i
] =
nullptr
;
94
}
95
96
inline
void
BmnATestTrack::AddHit
(
BmnATestHit
& hit)
97
{
98
if
(
fHitsCnt
>=
fMaxHits
)
99
throw
std::runtime_error(
"BmnATestTrack::AddHit: too many hits"
);
100
fpHits
[
fHitsCnt
++] = &hit;
101
}
102
103
inline
void
BmnATestTrack::AddMSE
(
BmnAlignerClass
* pAligner,
Bool_t
withResiduals)
const
104
{
105
if
(!
fpHits
)
106
throw
std::runtime_error(
"BmnATestTrack::AddResiduals: hits not registered"
);
107
Double_t
z, delta, omega;
108
BmnAlignResult
& result{*pAligner->GetCurrentResult()};
109
110
for
(
Int_t
i
= 0;
i
<
fHitsCnt
;
i
++) {
111
Int_t
detectorIdx{
static_cast<
Int_t
>
(
fpHits
[
i
]->GetDetectorID())};
112
const
SVectGL
& A = result.
A
(detectorIdx);
113
z =
fpHits
[
i
]->GetZ() + A(
iZ
);
114
115
omega = pAligner->OmegaScaleFactor() *
fpHits
[
i
]->GetWx();
116
delta =
fpHits
[
i
]->GetX() + A(
iX
) -
X
(z);
117
result.
AddValueMSE
(detectorIdx, omega * delta * delta);
118
if
(withResiduals)
119
result.
ResidualsX
().
Fill
(delta);
120
121
omega = pAligner->OmegaScaleFactor() *
fpHits
[
i
]->GetWy();
122
delta =
fpHits
[
i
]->GetY() + A(
iY
) -
Y
(z);
123
result.
AddValueMSE
(detectorIdx, omega * delta * delta);
124
if
(withResiduals)
125
result.
ResidualsY
().
Fill
(delta);
126
}
127
}
128
129
// visualization works in ROOT macro mode only
130
inline
void
BmnATestTrack::Draw
(
Bool_t
solid,
Double_t
maxZ)
const
131
{
132
Double_t
x[2]{
X
(0.0),
X
(maxZ)}, y[2]{
Y
(0.0),
Y
(maxZ)}, z[2]{0.0, maxZ};
133
// note: x and z axis are swapped
134
auto
* line =
new
TPolyLine3D
(2, z, y, x);
135
if
(solid)
136
line->SetLineColor(
BMN_TEST_TRACK_SOLID_COLOR
);
137
else
{
138
line->SetLineColor(
BMN_TEST_TRACK_NONSOLID_COLOR
);
139
line->SetLineStyle(2);
140
}
141
line->Draw();
142
// draw hits if known
143
if
(
fpHits
)
144
for
(
Int_t
i
= 0;
i
<
fHitsCnt
;
i
++)
145
if
(
fpHits
[
i
])
146
fpHits
[
i
]->Draw();
147
148
// in macro mode we don't clean RAM, sorry
149
}
150
151
#endif
// BMNATESTTRACK_H
BmnATestHit.h
BMN_TEST_TRACK_DEF_MAX_Z
#define BMN_TEST_TRACK_DEF_MAX_Z
Definition
BmnATestTrack.h:32
BMN_TEST_TRACK_SOLID_COLOR
#define BMN_TEST_TRACK_SOLID_COLOR
Definition
BmnATestTrack.h:30
BMN_TEST_TRACK_NONSOLID_COLOR
#define BMN_TEST_TRACK_NONSOLID_COLOR
Definition
BmnATestTrack.h:31
BmnAlignDefines.h
iY1
@ iY1
Definition
BmnAlignDefines.h:45
iY0
@ iY0
Definition
BmnAlignDefines.h:44
iX1
@ iX1
Definition
BmnAlignDefines.h:43
iX0
@ iX0
Definition
BmnAlignDefines.h:42
SVect3
RM::SVector< Double_t, 3 > SVect3
Definition
BmnAlignDefines.h:59
SVectLC
RM::SVector< Double_t, BMN_LOCAL_PARAMS_PT > SVectLC
Definition
BmnAlignDefines.h:60
SVectGL
RM::SVector< Double_t, BMN_GLOBAL_PARAMS_PD > SVectGL
Definition
BmnAlignDefines.h:61
iZ
@ iZ
Definition
BmnAlignDefines.h:27
iX
@ iX
Definition
BmnAlignDefines.h:25
iY
@ iY
Definition
BmnAlignDefines.h:26
BmnAlignResult.h
BmnAligner.h
i
int i
Definition
P4_F32vec4.h:22
Bool_t
bool Bool_t
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
TPolyLine3D.h
BmnATestHit
Definition
BmnATestHit.h:26
BmnATestTrack::~BmnATestTrack
~BmnATestTrack()
Definition
BmnATestTrack.h:53
BmnATestTrack::fMaxHits
Int_t fMaxHits
Definition
BmnATestTrack.h:43
BmnATestTrack::GetVertex
const SVect3 & GetVertex() const noexcept
Definition
BmnATestTrack.h:56
BmnATestTrack::fAlpha
SVectLC fAlpha
Definition
BmnATestTrack.h:41
BmnATestTrack::GetAlpha
const SVectLC & GetAlpha() const noexcept
Definition
BmnATestTrack.h:55
BmnATestTrack::fVertex
SVect3 fVertex
Definition
BmnATestTrack.h:42
BmnATestTrack::AddMSE
void AddMSE(BmnAlignerClass *pAligner, Bool_t withResiduals=kFALSE) const
Definition
BmnATestTrack.h:103
BmnATestTrack::fDirection
SVect3 fDirection
Definition
BmnATestTrack.h:42
BmnATestTrack::BmnATestTrack
BmnATestTrack()=delete
BmnATestTrack::Y
Double_t Y(Double_t z) const noexcept
Definition
BmnATestTrack.h:63
BmnATestTrack::X
Double_t X(Double_t z) const noexcept
Definition
BmnATestTrack.h:62
BmnATestTrack::Draw
void Draw(Bool_t solid=kTRUE, Double_t maxZ=BMN_TEST_TRACK_DEF_MAX_Z) const
Definition
BmnATestTrack.h:130
BmnATestTrack::BmnAlignerClass
BmnAligner< BmnATestHit > BmnAlignerClass
Definition
BmnATestTrack.h:47
BmnATestTrack::fpHits
BmnATestHit ** fpHits
Definition
BmnATestTrack.h:44
BmnATestTrack::GetDirection
const SVect3 & GetDirection() const noexcept
Definition
BmnATestTrack.h:57
BmnATestTrack::AddHit
void AddHit(BmnATestHit &hit)
Definition
BmnATestTrack.h:96
BmnATestTrack::fHitsCnt
Int_t fHitsCnt
Definition
BmnATestTrack.h:43
BmnAlignResult
Definition
BmnAlignResult.h:37
BmnAlignResult::A
SVectGL & A(Int_t index) noexcept
Definition
BmnAlignResult.h:82
BmnAlignResult::ResidualsX
TH1D & ResidualsX() noexcept
Definition
BmnAlignResult.h:93
BmnAlignResult::AddValueMSE
void AddValueMSE(Double_t val) noexcept
Definition
BmnAlignResult.h:124
BmnAlignResult::ResidualsY
TH1D & ResidualsY() noexcept
Definition
BmnAlignResult.h:94
BmnAligner
Definition
BmnAligner.h:36
TH1::Fill
virtual Int_t Fill(const char *name, Double_t w)
TPolyLine3D
align_new
deprecated
BmnATestTrack.h
Generated on
for BmnRoot by
1.17.0