BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnHypNuclPairFinder.h
Go to the documentation of this file.
1
2
#ifndef BMNHYPNUCLPAIRFINDER_H
3
#define BMNHYPNUCLPAIRFINDER_H 1
4
5
#include "BmnFieldMap.h"
6
#include "BmnGlobalTrack.h"
7
#include "
BmnHypNuclPair.h
"
8
#include "BmnKalmanFilter.h"
9
#include "BmnNewFieldMap.h"
10
#include "BmnStripData.h"
11
#include "BmnTofHit.h"
12
#include "BmnTrigInfoDst.h"
13
#include "CbmStsHit.h"
14
#include "CbmStsTrack.h"
15
#include "CbmVertex.h"
16
#include "DstEventHeader.h"
17
#include "FairTask.h"
18
#include "
TFile.h
"
19
#include "
TGeoManager.h
"
20
#include "
TRandom.h
"
21
#include "UniRun.h"
22
23
using namespace
std
;
24
using namespace
TMath
;
25
26
class
BmnHypNuclPairFinder
:
public
FairTask
27
{
28
private
:
29
UInt_t
fEventCounter
;
//! event counter
30
31
TClonesArray*
fStsHits
;
32
TClonesArray*
fUpperGemClusters
;
33
TClonesArray*
fLowerGemClusters
;
34
TClonesArray*
fUpperFsdClusters
;
35
TClonesArray*
fLowerFsdClusters
;
36
TClonesArray*
fStsTracks
;
37
TClonesArray*
fGlobTracks
;
38
TClonesArray*
fTof700Hits
;
39
CbmVertex*
fVertex
;
40
BmnTrigInfoDst*
fTrigger
;
41
DstEventHeader*
fDstHeader
;
42
43
BmnKalmanFilter*
fKalman
;
44
45
TClonesArray*
fParticlePair
;
46
47
Float_t
massPos
;
48
Float_t
massNeg
;
49
50
const
Int_t
fPDG1
= 2212;
// we use proton insted of he3, because kalman cannot work with ions; 1000020030; //He3
51
const
Int_t
fPDG2
= -211;
// pi-minus
52
53
const
Float_t
fMassHe4
= 3.7284013;
54
const
Float_t
fMassHe3
= 2.8094135;
55
const
Float_t
fMassPi
= 0.1395704;
56
const
Float_t
fMassP
= 0.9382721;
57
const
Float_t
fMassD
= 1.8756129;
58
59
Bool_t
isExp
;
60
Int_t
runId
;
61
62
// TF1s for parabolic cuts on K+
63
TF1*
m2CutLowKplsTof700
;
64
TF1*
m2CutUpKplsTof700
;
65
TF1*
m2CutLowKplsTof400
;
66
TF1*
m2CutUpKplsTof400
;
67
68
// Parametrization for dP = Pout - Pin over Pout.
69
// Needed to correct momentum (KF doesn't work correctly for Q=2, default value is Q=1)
70
// This parametrization got in macro ELossTest.C (on VM)
71
TF1*
fit_dP_He
;
72
73
// Cut from Matvey Klimenko by 10mln events
74
// 4He/d data were divided by rough cut to d and 4He
75
// d data were fitted by aleph (medians vs p prepared first)
76
TF1*
alephFit_d
;
77
78
// m^2 cut to select He-4 (low)
79
TF1*
m2CutLow
;
80
// m^2 cut to select He-4 (up)
81
TF1*
m2CutUp
;
82
83
Int_t
nSt
;
84
vector<Int_t>
nSect
;
85
Int_t
nMomSlices
;
86
vector<Float_t>
minMomBound
;
87
vector<Float_t>
maxMomBound
;
88
89
Double_t
***
a
;
90
Double_t
***
b
;
91
92
vector<FairTrackParam>
fParInVPPos
;
93
vector<FairTrackParam>
fParInVPNeg
;
94
vector<Float_t>
fM2Pos700
;
95
vector<Float_t>
fChi2NDFPos
;
96
vector<Float_t>
fChi2NDFNeg
;
97
vector<Float_t>
fDedxPos
;
98
vector<Short_t>
fNGemHitsNeg
;
99
vector<Short_t>
fNGemHitsPos
;
100
vector<Short_t>
fNFsdHitsNeg
;
101
vector<Short_t>
fNFsdHitsPos
;
102
103
public
:
104
BmnHypNuclPairFinder
();
105
// hyp = "H3L"/"h3l" or "H4L"/"h4l"
106
BmnHypNuclPairFinder
(
TString
hyp,
Int_t
run,
Bool_t
exp
=
kTRUE
);
107
virtual
~BmnHypNuclPairFinder
();
108
109
virtual
void
Exec
(
Option_t
* option);
110
virtual
InitStatus
Init
();
111
virtual
void
Finish
();
112
113
private
:
114
// ============================================================
115
// Sentinel-значение для невалидного χ².
116
// ============================================================
117
static
constexpr
Float_t
kInvalidChi2
= -1.0f;
118
// ============================================================
119
// Вспомогательная функция: 2D χ² с учётом корреляций.
120
// dx, dy — разности координат (например, x1 - x2)
121
// C1, C2 — ковариационные матрицы (2x2, представленные как
122
// массивы [c00, c01, c11])
123
// Возвращает χ² = Δᵀ · (C1 + C2)⁻¹ · Δ, или kInvalidChi2
124
// при вырожденной матрице.
125
//
126
// ВАЖНО: внутренние вычисления — в Double_t. Это критично для
127
// треков с хорошим разрешением (σ ~ 0.01 см), где det матрицы
128
// ~ 1e-8 и Float_t теряет точность (вплоть до отрицательного det).
129
// ============================================================
130
static
inline
Float_t
ComputeChi2_2D
(
Float_t
dx,
131
Float_t
dy,
132
Float_t
c1_00,
133
Float_t
c1_01,
134
Float_t
c1_11,
135
Float_t
c2_00,
136
Float_t
c2_01,
137
Float_t
c2_11)
138
{
139
// Суммарная ковариация — в Double_t
140
const
Double_t
s00 =
static_cast<
Double_t
>
(c1_00) + c2_00;
141
const
Double_t
s01 =
static_cast<
Double_t
>
(c1_01) + c2_01;
142
const
Double_t
s11 =
static_cast<
Double_t
>
(c1_11) + c2_11;
143
144
const
Double_t
det = s00 * s11 - s01 * s01;
145
if
(det <= 0.0)
146
return
kInvalidChi2
;
// вырожденная матрица
147
148
// Обратная матрица 2x2
149
const
Double_t
inv00 = s11 / det;
150
const
Double_t
inv01 = -s01 / det;
151
const
Double_t
inv11 = s00 / det;
152
153
// χ² = Δᵀ · Cov⁻¹ · Δ
154
const
Double_t
dxd = dx;
155
const
Double_t
dyd = dy;
156
const
Double_t
chi2 = dxd * dxd * inv00 + 2.0 * dxd * dyd * inv01 + dyd * dyd * inv11;
157
158
// Защита от отрицательного χ² из-за численных ошибок
159
// (теоретически невозможно, но double round-off может дать -1e-15)
160
return
(chi2 >= 0.0) ?
static_cast<
Float_t
>
(chi2) : 0.0f;
161
}
162
163
void
Analysis
();
164
165
Float_t
FindV0ByVirtualPlanes
(FairTrackParam* par1, FairTrackParam* par2,
Float_t
z_0,
Float_t
range = 50.);
166
Float_t
GetdEdx
(
CbmStsTrack
* tr);
167
void
GetNHits
(
CbmStsTrack
* tr,
Int_t
& nGEM,
Int_t
& nFSD);
168
Float_t
GetSigXTof700He3
(FairTrackParam* par);
169
Float_t
GetSigYTof700He3
(FairTrackParam* par);
170
Float_t
GetDyTof700
(FairTrackParam* par);
171
Float_t
GetDxTof700
(FairTrackParam* par);
172
173
// Method to check the presence of strangness in event by presence of K+ or K-
174
Bool_t
IsKaPlus
(
BmnGlobalTrack
* gl);
175
176
ClassDef
(
BmnHypNuclPairFinder
, 0)
177
};
178
179
#endif
Bool_t
bool Bool_t
Int_t
int Int_t
UInt_t
unsigned int UInt_t
Float_t
float Float_t
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
ClassDef
#define ClassDef(name, id)
TFile.h
TGeoManager.h
TRandom.h
BmnGlobalTrack
BmnGlobalTrack.h.
Definition
BmnGlobalTrack.h:14
BmnHypNuclPairFinder
Definition
BmnHypNuclPairFinder.h:27
BmnHypNuclPairFinder::b
Double_t *** b
Definition
BmnHypNuclPairFinder.h:90
BmnHypNuclPairFinder::GetDyTof700
Float_t GetDyTof700(FairTrackParam *par)
BmnHypNuclPairFinder::fVertex
CbmVertex * fVertex
Definition
BmnHypNuclPairFinder.h:39
BmnHypNuclPairFinder::fit_dP_He
TF1 * fit_dP_He
Definition
BmnHypNuclPairFinder.h:71
BmnHypNuclPairFinder::GetSigYTof700He3
Float_t GetSigYTof700He3(FairTrackParam *par)
BmnHypNuclPairFinder::fNFsdHitsNeg
vector< Short_t > fNFsdHitsNeg
Definition
BmnHypNuclPairFinder.h:100
BmnHypNuclPairFinder::IsKaPlus
Bool_t IsKaPlus(BmnGlobalTrack *gl)
BmnHypNuclPairFinder::massPos
Float_t massPos
Definition
BmnHypNuclPairFinder.h:47
BmnHypNuclPairFinder::fUpperFsdClusters
TClonesArray * fUpperFsdClusters
Definition
BmnHypNuclPairFinder.h:34
BmnHypNuclPairFinder::fParticlePair
TClonesArray * fParticlePair
Definition
BmnHypNuclPairFinder.h:45
BmnHypNuclPairFinder::nSt
Int_t nSt
Definition
BmnHypNuclPairFinder.h:83
BmnHypNuclPairFinder::massNeg
Float_t massNeg
Definition
BmnHypNuclPairFinder.h:48
BmnHypNuclPairFinder::m2CutLowKplsTof400
TF1 * m2CutLowKplsTof400
Definition
BmnHypNuclPairFinder.h:65
BmnHypNuclPairFinder::fKalman
BmnKalmanFilter * fKalman
Definition
BmnHypNuclPairFinder.h:43
BmnHypNuclPairFinder::Analysis
void Analysis()
BmnHypNuclPairFinder::nMomSlices
Int_t nMomSlices
Definition
BmnHypNuclPairFinder.h:85
BmnHypNuclPairFinder::m2CutUpKplsTof700
TF1 * m2CutUpKplsTof700
Definition
BmnHypNuclPairFinder.h:64
BmnHypNuclPairFinder::Exec
virtual void Exec(Option_t *option)
BmnHypNuclPairFinder::fPDG2
const Int_t fPDG2
Definition
BmnHypNuclPairFinder.h:51
BmnHypNuclPairFinder::kInvalidChi2
static constexpr Float_t kInvalidChi2
Definition
BmnHypNuclPairFinder.h:117
BmnHypNuclPairFinder::GetNHits
void GetNHits(CbmStsTrack *tr, Int_t &nGEM, Int_t &nFSD)
BmnHypNuclPairFinder::fLowerGemClusters
TClonesArray * fLowerGemClusters
Definition
BmnHypNuclPairFinder.h:33
BmnHypNuclPairFinder::fUpperGemClusters
TClonesArray * fUpperGemClusters
Definition
BmnHypNuclPairFinder.h:32
BmnHypNuclPairFinder::fParInVPNeg
vector< FairTrackParam > fParInVPNeg
Definition
BmnHypNuclPairFinder.h:93
BmnHypNuclPairFinder::fPDG1
const Int_t fPDG1
Definition
BmnHypNuclPairFinder.h:50
BmnHypNuclPairFinder::BmnHypNuclPairFinder
BmnHypNuclPairFinder()
BmnHypNuclPairFinder::m2CutLow
TF1 * m2CutLow
Definition
BmnHypNuclPairFinder.h:79
BmnHypNuclPairFinder::fM2Pos700
vector< Float_t > fM2Pos700
Definition
BmnHypNuclPairFinder.h:94
BmnHypNuclPairFinder::fMassHe4
const Float_t fMassHe4
Definition
BmnHypNuclPairFinder.h:53
BmnHypNuclPairFinder::fMassHe3
const Float_t fMassHe3
Definition
BmnHypNuclPairFinder.h:54
BmnHypNuclPairFinder::a
Double_t *** a
Definition
BmnHypNuclPairFinder.h:89
BmnHypNuclPairFinder::fLowerFsdClusters
TClonesArray * fLowerFsdClusters
Definition
BmnHypNuclPairFinder.h:35
BmnHypNuclPairFinder::m2CutUpKplsTof400
TF1 * m2CutUpKplsTof400
Definition
BmnHypNuclPairFinder.h:66
BmnHypNuclPairFinder::fMassPi
const Float_t fMassPi
Definition
BmnHypNuclPairFinder.h:55
BmnHypNuclPairFinder::isExp
Bool_t isExp
Definition
BmnHypNuclPairFinder.h:59
BmnHypNuclPairFinder::fTrigger
BmnTrigInfoDst * fTrigger
Definition
BmnHypNuclPairFinder.h:40
BmnHypNuclPairFinder::minMomBound
vector< Float_t > minMomBound
Definition
BmnHypNuclPairFinder.h:86
BmnHypNuclPairFinder::alephFit_d
TF1 * alephFit_d
Definition
BmnHypNuclPairFinder.h:76
BmnHypNuclPairFinder::runId
Int_t runId
Definition
BmnHypNuclPairFinder.h:60
BmnHypNuclPairFinder::Init
virtual InitStatus Init()
BmnHypNuclPairFinder::fNGemHitsNeg
vector< Short_t > fNGemHitsNeg
Definition
BmnHypNuclPairFinder.h:98
BmnHypNuclPairFinder::BmnHypNuclPairFinder
BmnHypNuclPairFinder(TString hyp, Int_t run, Bool_t exp=kTRUE)
BmnHypNuclPairFinder::fMassP
const Float_t fMassP
Definition
BmnHypNuclPairFinder.h:56
BmnHypNuclPairFinder::fChi2NDFPos
vector< Float_t > fChi2NDFPos
Definition
BmnHypNuclPairFinder.h:95
BmnHypNuclPairFinder::fNFsdHitsPos
vector< Short_t > fNFsdHitsPos
Definition
BmnHypNuclPairFinder.h:101
BmnHypNuclPairFinder::maxMomBound
vector< Float_t > maxMomBound
Definition
BmnHypNuclPairFinder.h:87
BmnHypNuclPairFinder::~BmnHypNuclPairFinder
virtual ~BmnHypNuclPairFinder()
BmnHypNuclPairFinder::GetDxTof700
Float_t GetDxTof700(FairTrackParam *par)
BmnHypNuclPairFinder::GetSigXTof700He3
Float_t GetSigXTof700He3(FairTrackParam *par)
BmnHypNuclPairFinder::GetdEdx
Float_t GetdEdx(CbmStsTrack *tr)
BmnHypNuclPairFinder::fStsHits
TClonesArray * fStsHits
event counter
Definition
BmnHypNuclPairFinder.h:31
BmnHypNuclPairFinder::ComputeChi2_2D
static Float_t ComputeChi2_2D(Float_t dx, Float_t dy, Float_t c1_00, Float_t c1_01, Float_t c1_11, Float_t c2_00, Float_t c2_01, Float_t c2_11)
Definition
BmnHypNuclPairFinder.h:130
BmnHypNuclPairFinder::nSect
vector< Int_t > nSect
Definition
BmnHypNuclPairFinder.h:84
BmnHypNuclPairFinder::fStsTracks
TClonesArray * fStsTracks
Definition
BmnHypNuclPairFinder.h:36
BmnHypNuclPairFinder::fEventCounter
UInt_t fEventCounter
Definition
BmnHypNuclPairFinder.h:29
BmnHypNuclPairFinder::fTof700Hits
TClonesArray * fTof700Hits
Definition
BmnHypNuclPairFinder.h:38
BmnHypNuclPairFinder::fDedxPos
vector< Float_t > fDedxPos
Definition
BmnHypNuclPairFinder.h:97
BmnHypNuclPairFinder::fChi2NDFNeg
vector< Float_t > fChi2NDFNeg
Definition
BmnHypNuclPairFinder.h:96
BmnHypNuclPairFinder::fNGemHitsPos
vector< Short_t > fNGemHitsPos
Definition
BmnHypNuclPairFinder.h:99
BmnHypNuclPairFinder::fMassD
const Float_t fMassD
Definition
BmnHypNuclPairFinder.h:57
BmnHypNuclPairFinder::fGlobTracks
TClonesArray * fGlobTracks
Definition
BmnHypNuclPairFinder.h:37
BmnHypNuclPairFinder::fDstHeader
DstEventHeader * fDstHeader
Definition
BmnHypNuclPairFinder.h:41
BmnHypNuclPairFinder::Finish
virtual void Finish()
BmnHypNuclPairFinder::m2CutLowKplsTof700
TF1 * m2CutLowKplsTof700
Definition
BmnHypNuclPairFinder.h:63
BmnHypNuclPairFinder::fParInVPPos
vector< FairTrackParam > fParInVPPos
Definition
BmnHypNuclPairFinder.h:92
BmnHypNuclPairFinder::FindV0ByVirtualPlanes
Float_t FindV0ByVirtualPlanes(FairTrackParam *par1, FairTrackParam *par2, Float_t z_0, Float_t range=50.)
BmnHypNuclPairFinder::m2CutUp
TF1 * m2CutUp
Definition
BmnHypNuclPairFinder.h:81
CbmStsTrack
Definition
CbmStsTrack.h:28
FairTask
TString
exp
RVec< PromoteType< T > > exp(const RVec< T > &v)
TMath
std
Definition
json.hpp:4446
BmnHypNuclPair.h
physics
decay
BmnHypNuclPairFinder.h
Generated on
for BmnRoot by
1.17.0