BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnGemResiduals.cxx
Go to the documentation of this file.
1
#include <
BmnGemResiduals.h
>
2
#include <
Fit/FitResult.h
>
3
#include <
TSystem.h
>
4
5
BmnGemResiduals::BmnGemResiduals
(
Int_t
run_period,
Int_t
run_number,
Double_t
fieldScale)
6
:
isField
(
kFALSE
)
7
,
isResid
(
kTRUE
)
8
,
fDebug
(
kFALSE
)
9
,
outRes
(NULL)
10
,
isPrintToFile
(
kFALSE
)
11
,
isMergedDigits
(
kFALSE
)
12
{
13
fPeriod
= run_period;
14
fNumber
= run_number;
15
16
if
(
Abs
(fieldScale) > DBL_EPSILON)
17
isField
=
kTRUE
;
18
19
TString
gPathConfig =
gSystem
->Getenv(
"VMCWORKDIR"
);
20
TString
gPathGemConfig = gPathConfig +
"/parameters/gem/XMLConfigs/"
;
21
TString
confGem = (
fPeriod
== 7) ?
"GemRunSpring2018.xml"
: (
fPeriod
== 6) ?
"GemRunSpring2017.xml"
:
""
;
22
if
(confGem ==
""
) {
23
printf(
ANSI_COLOR_RED
"No GEM geometry defined!\n"
ANSI_COLOR_RESET
);
24
throw
;
25
}
26
fDetector
=
new
BmnGemStripStationSet
(gPathGemConfig + confGem);
27
28
fBranchGemHits
=
"BmnGemStripHit"
;
29
fBranchGemTracks
=
"BmnGemTrack"
;
30
fBranchResiduals
=
"BmnResiduals"
;
31
fBranchFairEventHeader
=
"EventHeader."
;
32
}
33
34
InitStatus
BmnGemResiduals::Init
()
35
{
36
FairRootManager* ioman = FairRootManager::Instance();
37
38
fGemHits
= (
TClonesArray
*)ioman->GetObject(
fBranchGemHits
.Data());
39
fGemTracks
= (
TClonesArray
*)ioman->GetObject(
fBranchGemTracks
.Data());
40
fFairEventHeader
= (
FairEventHeader
*)ioman->GetObject(
fBranchFairEventHeader
.Data());
41
42
fGemResiduals
=
new
TClonesArray
(
fBranchResiduals
.Data());
43
44
ioman->Register(
"BmnGemResiduals"
,
"RESID"
,
fGemResiduals
,
kTRUE
);
45
if
(
TString
(ioman->GetInFile()->GetName()).
Contains
(
"merge"
))
46
isMergedDigits
=
kTRUE
;
47
}
48
49
void
BmnGemResiduals::Exec
(
Option_t
* opt)
50
{
51
fFairEventHeader
->SetRunId((
isMergedDigits
) ? 0 :
fNumber
);
52
fGemResiduals
->Delete();
53
ResidualsAndDistances
();
54
}
55
56
void
BmnGemResiduals::ResidualsAndDistances
()
57
{
58
if
(
isMergedDigits
) {
59
// To be used for rough alignment (1205 + 1233 in RUN6 as an example)
60
// 2 tracks simultaneously separated and satisfying Tx1 * Tx2 < 0
61
if
(
fGemTracks
->GetEntriesFast() != 2)
62
return
;
63
Double_t
Tx1 = ((
BmnGemTrack
*)
fGemTracks
->UncheckedAt(0))->GetParamFirst()->GetTx();
64
Double_t
Tx2 = ((
BmnGemTrack
*)
fGemTracks
->UncheckedAt(1))->GetParamFirst()->GetTx();
65
if
(Tx1 * Tx2 > 0)
66
return
;
67
}
68
69
for
(
Int_t
iTrack = 0; iTrack <
fGemTracks
->GetEntriesFast(); iTrack++) {
70
BmnGemTrack
* track = (
BmnGemTrack
*)
fGemTracks
->UncheckedAt(iTrack);
71
72
Double_t
tx = track->
GetParamFirst
()->GetTx();
73
Double_t
ty = track->
GetParamFirst
()->GetTy();
74
75
Double_t
xFirst = track->
GetParamFirst
()->GetX();
76
Double_t
yFirst = track->
GetParamFirst
()->GetY();
77
Double_t
zFirst = track->
GetParamFirst
()->GetZ();
78
79
for
(
Int_t
iHit = 0; iHit < track->
GetNHits
(); iHit++) {
80
BmnGemStripHit
* hit = (
BmnGemStripHit
*)
fGemHits
->At(track->
GetHitIndex
(iHit));
81
Double_t
x = hit->GetX();
82
Double_t
y = hit->GetY();
83
Double_t
z = hit->GetZ();
84
85
Double_t
xRes = 0., yRes = 0.;
86
if
(!
isField
) {
87
if
(
isResid
) {
88
xRes = x - (xFirst + tx * (z - zFirst));
89
yRes = y - (yFirst + ty * (z - zFirst));
90
}
else
{
91
Double_t
a = 0., b = 0.;
92
LineFit
(a, b, track,
fGemHits
, 1, iHit);
// bmnbase/BmnMath.h
93
xRes = x - (a * z + b);
94
LineFit
(a, b, track,
fGemHits
, 2, iHit);
95
yRes = y - (a * z + b);
96
}
97
}
else
{
98
isResid
=
kFALSE
;
99
Double_t
A = 0., B = 0.,
C
= 0.;
100
Pol2Fit
(track,
fGemHits
, A, B,
C
, iHit);
// XZ-plane
101
xRes = x - A * z * z - B * z -
C
;
102
103
Double_t
a = 0., b = 0.;
104
LineFit
(a, b, track,
fGemHits
, 2, iHit);
105
yRes = y - (a * z + b);
// YZ-plane
106
}
107
108
BmnResiduals
* resid =
new
((*fGemResiduals)[
fGemResiduals
->GetEntriesFast()])
109
BmnResiduals
(hit->
GetStation
(), hit->
GetModule
(), xRes, yRes, 0.,
isField
,
isResid
);
110
resid->SetTrackId(iTrack);
111
resid->SetHitId(track->
GetHitIndex
(iHit));
112
resid->SetIsMergedDigits(
isMergedDigits
);
113
}
114
}
115
}
116
117
void
BmnGemResiduals::Finish
()
118
{
119
delete
fDetector
;
120
}
BmnGemResiduals.h
LineFit
TVector3 LineFit(BmnTrack *track, const TClonesArray *arr, TString type)
Definition
BmnMath.cxx:113
Pol2Fit
void Pol2Fit(BmnTrack *track, const TClonesArray *arr, Double_t &A, Double_t &B, Double_t &C, Int_t idSkip)
Definition
BmnMath.cxx:781
FitResult.h
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
TSystem.h
gSystem
R__EXTERN TSystem * gSystem
ANSI_COLOR_RED
#define ANSI_COLOR_RED
Definition
BmnMath.h:16
ANSI_COLOR_RESET
#define ANSI_COLOR_RESET
Definition
BmnMath.h:18
BmnGemResiduals::Init
virtual InitStatus Init()
Definition
BmnGemResiduals.cxx:34
BmnGemResiduals::fGemHits
TClonesArray * fGemHits
Definition
BmnGemResiduals.h:70
BmnGemResiduals::fDebug
Bool_t fDebug
Definition
BmnGemResiduals.h:59
BmnGemResiduals::isMergedDigits
Bool_t isMergedDigits
Definition
BmnGemResiduals.h:79
BmnGemResiduals::fDetector
BmnGemStripStationSet * fDetector
Definition
BmnGemResiduals.h:76
BmnGemResiduals::fBranchResiduals
TString fBranchResiduals
Definition
BmnGemResiduals.h:66
BmnGemResiduals::fBranchGemHits
TString fBranchGemHits
Definition
BmnGemResiduals.h:64
BmnGemResiduals::fFairEventHeader
FairEventHeader * fFairEventHeader
Definition
BmnGemResiduals.h:74
BmnGemResiduals::fBranchGemTracks
TString fBranchGemTracks
Definition
BmnGemResiduals.h:65
BmnGemResiduals::fPeriod
Int_t fPeriod
Definition
BmnGemResiduals.h:56
BmnGemResiduals::isResid
Bool_t isResid
Definition
BmnGemResiduals.h:62
BmnGemResiduals::fNumber
Int_t fNumber
Definition
BmnGemResiduals.h:57
BmnGemResiduals::outRes
FILE * outRes
Definition
BmnGemResiduals.h:80
BmnGemResiduals::Exec
virtual void Exec(Option_t *opt)
Definition
BmnGemResiduals.cxx:49
BmnGemResiduals::isField
Bool_t isField
Definition
BmnGemResiduals.h:61
BmnGemResiduals::Finish
virtual void Finish()
Definition
BmnGemResiduals.cxx:117
BmnGemResiduals::fGemTracks
TClonesArray * fGemTracks
Definition
BmnGemResiduals.h:69
BmnGemResiduals::fGemResiduals
TClonesArray * fGemResiduals
Definition
BmnGemResiduals.h:72
BmnGemResiduals::fBranchFairEventHeader
TString fBranchFairEventHeader
Definition
BmnGemResiduals.h:67
BmnGemResiduals::BmnGemResiduals
BmnGemResiduals()
Definition
BmnGemResiduals.h:30
BmnGemResiduals::isPrintToFile
Bool_t isPrintToFile
Definition
BmnGemResiduals.h:78
BmnGemResiduals::ResidualsAndDistances
void ResidualsAndDistances()
Definition
BmnGemResiduals.cxx:56
BmnGemStripHit
Definition
BmnGemStripHit.h:9
BmnGemStripStationSet
Definition
BmnGemStripStationSet.h:15
BmnGemTrack
Definition
BmnGemTrack.h:10
BmnHit::GetModule
Int_t GetModule()
Definition
BmnHit.h:36
BmnHit::GetStation
Short_t GetStation() const
Definition
BmnHit.h:35
BmnResiduals
Definition
BmnResiduals.h:20
BmnTrack::GetParamFirst
FairTrackParam * GetParamFirst()
Definition
BmnTrack.h:63
BmnTrack::GetNHits
Int_t GetNHits() const
Accessors.
Definition
BmnTrack.h:49
BmnTrack::GetHitIndex
Int_t GetHitIndex(Int_t iHit) const
Definition
BmnTrack.h:51
FairEventHeader
TClonesArray
TString
TString::Contains
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TMath::C
constexpr Double_t C()
TMath::Abs
Double_t Abs(Double_t d)
alignment
BmnGemResiduals.cxx
Generated on
for BmnRoot by
1.17.0