BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnPid.cxx
Go to the documentation of this file.
1
#include "
BmnPid.h
"
2
3
#include "BmnMath.h"
4
#include "
TCanvas.h
"
5
#include "
TFitResult.h
"
6
#include "
TGraph.h
"
7
8
#include <
TStopwatch.h
>
9
10
static
Double_t
workTime
= 0.0;
11
12
using namespace
std
;
13
using namespace
TMath
;
14
15
BmnPid::BmnPid
(
Int_t
power)
16
{
17
fEventNo
= 0;
18
fGlobalTracksArray
= NULL;
19
fGlobalTracksBranchName
=
"BmnGlobalTrack"
;
20
fModelPower
= power;
21
}
22
23
BmnPid::~BmnPid
() {}
24
25
InitStatus
BmnPid::Init
()
26
{
27
if
(fVerbose > 1)
28
cout <<
"=========================== PID init started ===================="
<< endl;
29
30
db
=
TDatabasePDG::Instance
();
31
32
// Add several types of particles to the database.
33
// p, pi, K, e are already in it
34
db
->AddParticle(
"D"
,
"D"
, 1.876123928,
true
, 0, 3,
"Core"
, 1000010020, 1000010020, 1000010020);
35
db
->AddParticle(
"T"
,
"T"
, 2.809432115,
true
, 0, 3,
"Core"
, 1000010030, 1000010030, 1000010030);
36
db
->AddParticle(
"He3"
,
"He3"
, 2.809413523,
true
, 0, 6,
"Core"
, 1000020030, 1000020030, 1000020030);
37
db
->AddParticle(
"He4"
,
"He4"
, 3.728401326,
true
, 0, 6,
"Core"
, 1000020040, 1000020040, 1000020040);
38
39
// Get ROOT Manager
40
FairRootManager* ioman = FairRootManager::Instance();
41
if
(NULL == ioman)
42
Fatal
(
"Init"
,
"FairRootManager is not instantiated"
);
43
44
fGlobalTracksArray
= (
TClonesArray
*)ioman->GetObject(
fGlobalTracksBranchName
);
// in
45
if
(!
fGlobalTracksArray
) {
46
cout <<
"PID::Init(): branch "
<<
fGlobalTracksBranchName
<<
" not found! Task will be deactivated"
<< endl;
47
SetActive(
kFALSE
);
48
return
kERROR;
49
}
50
51
if
(fVerbose > 1)
52
cout <<
"=========================== PID init finished ==================="
<< endl;
53
54
return
kSUCCESS;
55
}
56
57
void
BmnPid::Exec
(
Option_t
* opt)
58
{
59
60
TStopwatch
sw;
61
sw.
Start
();
62
63
if
(!IsActive())
64
return
;
65
66
if
(fVerbose > 1)
67
cout <<
"======================== PID exec started ======================"
<< endl;
68
if
(fVerbose > 1)
69
cout <<
"Event number: "
<<
fEventNo
++ << endl;
70
71
SetVector
();
72
if
(fVerbose > 1)
73
cout <<
"\n======================== PID exec finished ======================"
<< endl;
74
75
sw.
Stop
();
76
workTime
+= sw.
RealTime
();
77
}
78
79
void
BmnPid::SetVector
()
80
{
81
Int_t
size =
fGlobalTracksArray
->GetEntriesFast();
82
Double_t
rigidity, beta400, beta700, mass, charge, p;
83
84
for
(
Int_t
iTrack = 0; iTrack < size; ++iTrack) {
85
BmnGlobalTrack
* track = (
BmnGlobalTrack
*)
fGlobalTracksArray
->UncheckedAt(iTrack);
// get iTrack'th track
86
vector<Double_t> vectorTof400;
87
vector<Double_t> vectorTof700;
88
89
for
(PidParticles iSort = (PidParticles)0; iSort != EndPidEnum; iSort = (PidParticles)(iSort + 1)) {
90
Int_t
pdg =
EnumToPdg
(iSort);
91
TParticlePDG
* iParticle =
db
->GetParticle(pdg);
92
rigidity = track->
GetP
();
93
beta400 = track->GetBeta(1);
94
beta700 = track->GetBeta(2);
95
mass = iParticle->
Mass
();
96
charge = iParticle->
Charge
() / 3;
97
p = rigidity * charge;
98
if
(beta400 > -999)
99
vectorTof400.push_back(
EstimateProbability
(p, beta400, mass,
fModelPower
));
100
if
(beta700 > -999)
101
vectorTof700.push_back(
EstimateProbability
(p, beta700, mass,
fModelPower
));
102
}
103
NormalizeVector
(vectorTof400);
104
NormalizeVector
(vectorTof700);
105
106
// track->SetPidVectorTof400(vectorTof400);
107
// track->SetPidVectorTof700(vectorTof700);
108
}
109
}
110
111
Double_t
BmnPid::EstimateProbability
(
Double_t
p,
Double_t
beta
,
Double_t
mass,
Int_t
power)
112
{
113
return
1 /
pow
(
abs
(
beta
-
abs
((p /
sqrt
(p * p + mass * mass)))), power);
114
}
115
116
Int_t
BmnPid::EnumToPdg
(PidParticles part)
117
{
118
switch
(part) {
119
case
PidProton:
120
return
2212;
121
case
PidPion:
122
return
211;
123
case
PidKaon:
124
return
321;
125
case
PidElectron:
126
return
11;
127
case
PidDeuteron:
128
return
1000010020;
129
case
PidTriton:
130
return
1000010030;
131
case
PidHelium3:
132
return
1000020030;
133
case
PidHelium4:
134
return
1000020040;
135
default
:
136
cout <<
"No such particle in PidParticles\n"
;
137
return
-1;
138
}
139
}
140
141
void
BmnPid::NormalizeVector
(vector<Double_t>&
vec
)
142
{
143
Double_t
sum =
GetSum
(
vec
);
144
for
(
auto
iter =
vec
.begin(); iter !=
vec
.end(); iter++)
145
*iter = *iter / sum;
146
}
147
148
Double_t
BmnPid::GetSum
(
const
vector<Double_t>&
vec
)
149
{
150
Double_t
sum = 0;
151
for
(
auto
i
:
vec
)
152
sum +=
i
;
153
return
sum;
154
}
155
156
void
BmnPid::Finish
()
157
{
158
printf(
"Work time of BmnPid: %4.2f sec.\n"
,
workTime
);
159
}
BmnPid.h
workTime
static Double_t workTime
Definition
BmnPid.cxx:10
i
int i
Definition
P4_F32vec4.h:22
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
Option_t
const char Option_t
TCanvas.h
Fatal
void Fatal(const char *location, const char *msgfmt,...)
TFitResult.h
TGraph.h
TStopwatch.h
BmnGlobalTrack
BmnGlobalTrack.h.
Definition
BmnGlobalTrack.h:14
BmnPid::GetSum
Double_t GetSum(const vector< Double_t > &vec)
Definition
BmnPid.cxx:148
BmnPid::fGlobalTracksBranchName
TString fGlobalTracksBranchName
Definition
BmnPid.h:39
BmnPid::fModelPower
Int_t fModelPower
Definition
BmnPid.h:42
BmnPid::~BmnPid
virtual ~BmnPid()
Definition
BmnPid.cxx:23
BmnPid::fGlobalTracksArray
TClonesArray * fGlobalTracksArray
Definition
BmnPid.h:50
BmnPid::SetVector
void SetVector()
Definition
BmnPid.cxx:79
BmnPid::fEventNo
Int_t fEventNo
Definition
BmnPid.h:48
BmnPid::db
TDatabasePDG * db
Definition
BmnPid.h:40
BmnPid::BmnPid
BmnPid(Int_t power=1)
Definition
BmnPid.cxx:15
BmnPid::NormalizeVector
void NormalizeVector(vector< Double_t > &vec)
Definition
BmnPid.cxx:141
BmnPid::EstimateProbability
Double_t EstimateProbability(Double_t p, Double_t beta, Double_t mass, Int_t power)
Definition
BmnPid.cxx:111
BmnPid::Exec
virtual void Exec(Option_t *opt)
Definition
BmnPid.cxx:57
BmnPid::Init
virtual InitStatus Init()
Definition
BmnPid.cxx:25
BmnPid::Finish
virtual void Finish()
Definition
BmnPid.cxx:156
BmnPid::EnumToPdg
Int_t EnumToPdg(PidParticles part)
Definition
BmnPid.cxx:116
BmnTrack::GetP
Double_t GetP()
Definition
BmnTrack.h:67
TClonesArray
TDatabasePDG::Instance
static TDatabasePDG * Instance()
TParticlePDG
TParticlePDG::Charge
Double_t Charge() const
TParticlePDG::Mass
Double_t Mass() const
TStopwatch
TStopwatch::RealTime
Double_t RealTime()
TStopwatch::Start
void Start(Bool_t reset=kTRUE)
TStopwatch::Stop
void Stop()
beta
double beta(double x, double y)
abs
RVec< PromoteType< T > > abs(const RVec< T > &v)
pow
RVec< PromoteTypes< T0, T1 > > pow(const RVec< T0 > &v, const T1 &y)
sqrt
RVec< PromoteType< T > > sqrt(const RVec< T > &v)
TMath
std
Definition
json.hpp:4446
vec
reconstruction
identification
BmnPid.cxx
Generated on
for BmnRoot by
1.17.0