BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
MpdPHSDGenerator.cxx
Go to the documentation of this file.
1
/**
2
*@class MpdPHSDGenerator
3
*@author V.Voronyuk <vadimv@jinr.ru>
4
* MpdPHSDGenerator reads newer (instead of default) output (phsd.dat/phsd.dat.gz)
5
* of HSD/PHSD transport model.
6
**/
7
8
#include "
MpdPHSDGenerator.h
"
9
10
#include "FairMCEventHeader.h"
11
#include "
MpdMCEventHeader.h
"
12
#include "constants.h"
//AZ
13
14
#include <
TDatabasePDG.h
>
//AZ
15
#include <
TMath.h
>
16
#include <stdio.h>
17
#include <stdlib.h>
18
19
// ---------------------------------------------------------------------
20
MpdPHSDGenerator::MpdPHSDGenerator
() {
21
/* It is better to leave empty */
22
};
23
// ---------------------------------------------------------------------
24
MpdPHSDGenerator::MpdPHSDGenerator
(
const
char
* filename
/*= "phsd.dat.gz"*/
)
25
{
26
fgzFile
= gzopen(filename,
"rb"
);
// zlib
27
if
(!
fgzFile
) {
28
printf(
"-E- MpdPHSDGenerator: can not open file: %s\n"
, filename);
29
exit(1);
30
}
31
printf(
"-I- MpdPHSDGenerator: open %s\n"
, filename);
32
33
fPsiRP
= 0.;
34
fisRP
=
kTRUE
;
// by default RP is random
35
frandom
=
new
TRandom2
();
36
frandom
->SetSeed(0);
37
};
38
// ---------------------------------------------------------------------
39
MpdPHSDGenerator::~MpdPHSDGenerator
()
40
{
41
if
(
fgzFile
) {
42
gzclose(
fgzFile
);
43
fgzFile
= NULL;
44
}
45
delete
frandom
;
46
};
47
// ---------------------------------------------------------------------
48
Bool_t
MpdPHSDGenerator::ReadEvent
(FairPrimaryGenerator* primGen)
49
{
50
if
(!
ReadHeader
()) {
51
printf(
"-I- MpdPHSDGenerator: End of file reached.\n"
);
52
return
kFALSE
;
// end of file
53
}
54
55
/* set random Reaction Plane angle */
56
if
(
fisRP
) {
57
fPsiRP
=
frandom
->Uniform(2.0 *
TMath::Pi
());
58
}
59
// printf("-I- MpdPHSDGenerator: RP angle = %e\n",fPsiRP);
60
61
/* Set event impact parameter in MCEventHeader if not yet done */
62
FairMCEventHeader
* eventHeader = primGen->GetEvent();
63
if
(eventHeader && (!eventHeader->IsSet())) {
64
eventHeader->SetB(
fb
);
65
eventHeader->MarkSet(
kTRUE
);
66
// fill extra
67
MpdMCEventHeader
* extraEventHeader =
dynamic_cast<
MpdMCEventHeader
*
>
(eventHeader);
68
if
(extraEventHeader) {
69
extraEventHeader->
SetPhi
(
fPsiRP
);
70
}
71
}
72
// AZ
73
Double_t
kProtonMass =
TDatabasePDG::Instance
()->
GetParticle
(2212)->
Mass
();
74
Double_t
ekin = 4.0;
75
Double_t
eBeam = ekin + kProtonMass;
76
Double_t
pBeam =
TMath::Sqrt
(eBeam * eBeam - kProtonMass * kProtonMass);
77
Double_t
betaCM = pBeam / (eBeam + kProtonMass);
78
Double_t
gammaCM =
TMath::Sqrt
(1. / (1. - betaCM * betaCM));
79
// AZ
80
81
/* read tracks */
82
for
(
Int_t
i
= 1;
i
<=
fntr
;
i
++) {
83
// AZ Int_t ipdg; Float_t px,py,pz;
84
Int_t
ipdg;
85
Float_t
px, py, pz, ee;
// AZ
86
/* read track */
87
gzgets(
fgzFile
,
fbuffer
, 256);
88
if
(gzeof(
fgzFile
)) {
89
printf(
"-E- MpdPHSDGenerator: unexpected end of file\n"
);
90
exit(1);
91
}
92
/* scan values */
93
// AZ int res=sscanf(fbuffer,"%d %*d %e %e %e",&ipdg,&px,&py,&pz);
94
// AZ if (res!=4) {printf("-E- MpdPHSDGenerator: selftest error in track, scan %d of 4\n",res); exit(1);}
95
int
res = sscanf(
fbuffer
,
"%d %*d %e %e %e %e"
, &ipdg, &px, &py, &pz, &ee);
// AZ
96
if
(res != 5) {
97
printf(
"-E- MpdPHSDGenerator: selftest error in track, scan %d of 5\n"
, res);
98
exit(1);
99
}
// AZ
100
if
(ipdg == 0) {
101
printf(
"-W- MpdPHSDGenerator: particle with pdg=0\n"
);
102
continue
;
103
}
104
if
(!
TDatabasePDG::Instance
()->GetParticle(ipdg)) {
105
std::cout <<
"\033[31m -W- ---------- MpdPHSDGenerator: particle with pdg "
<< ipdg <<
" not found \033[0m"
106
<< std::endl;
107
continue
;
108
}
// AZ
109
110
// replacement of heavy particles for Geant4
111
// this decays will be improved in the next versions of PHSD
112
if
(ipdg == +413)
113
ipdg = +421;
// D*+ -> D0
114
if
(ipdg == -413)
115
ipdg = -421;
// D*- -> D0_bar
116
if
(ipdg == +423)
117
ipdg = +421;
// D*0 -> D0
118
if
(ipdg == -423)
119
ipdg = -421;
// D*0_bar -> D0_bar
120
if
(ipdg == +4214)
121
ipdg = +4122;
// Sigma*_c+ -> Lambda_c+
122
if
(ipdg == -4214)
123
ipdg = -4122;
// Sigma*_c- -> Lambda_c-
124
if
(ipdg == +4114)
125
ipdg = +4122;
// Sigma*_c0 -> Lambda_c+
126
if
(ipdg == -4114)
127
ipdg = -4122;
// Sigma*_c0 -> Lambda_c-
128
if
(ipdg == +4224)
129
ipdg = +4122;
// Sigma*_c++ -> Lambda_c+
130
if
(ipdg == -4224)
131
ipdg = -4122;
// Sigma*_c-- -> Lambda_c-
132
133
// AZ - Lorentz transformation to lab
134
if
(
gCoordinateSystem
==
sysLaboratory
) {
135
// Double_t mass = TDatabasePDG::Instance()->GetParticle(ipdg)->Mass();
136
// Double_t e = sqrt(mass * mass + px * px + py * py + pz * pz);
137
pz = gammaCM * (pz + betaCM * ee);
138
}
139
// AZ
140
/* rotate RP angle */
141
if
(
fPsiRP
!= 0.) {
142
Double_t
cosPsi =
TMath::Cos
(
fPsiRP
);
143
Double_t
sinPsi =
TMath::Sin
(
fPsiRP
);
144
Double_t
px1 = px * cosPsi - py * sinPsi;
145
Double_t
py1 = px * sinPsi + py * cosPsi;
146
px = px1;
147
py = py1;
148
}
149
150
/* add track to simulation */
151
primGen->AddTrack(ipdg, px, py, pz, 0., 0., 0.);
152
}
153
154
return
kTRUE
;
155
};
156
// ---------------------------------------------------------------------
157
Bool_t
MpdPHSDGenerator::ReadHeader
()
158
{
159
/* read header */
160
gzgets(
fgzFile
,
fbuffer
, 256);
// 1st line
161
if
(gzeof(
fgzFile
))
162
return
kFALSE
;
// end of file reached
163
int
res = sscanf(
fbuffer
,
"%d %*d %*d %e"
, &
fntr
, &
fb
);
164
if
(res != 2) {
165
printf(
"-E- MpdPHSDGenerator: selftest error in header, scan %d of 2\n"
, res);
166
exit(1);
167
}
168
gzgets(
fgzFile
,
fbuffer
, 256);
// 2nd line
169
if
(gzeof(
fgzFile
)) {
170
printf(
"-E- MpdPHSDGenerator: unexpected end of file\n"
);
171
exit(1);
172
}
173
return
kTRUE
;
174
};
175
// ---------------------------------------------------------------------
176
void
MpdPHSDGenerator::SkipTrack
()
177
{
178
gzgets(
fgzFile
,
fbuffer
, 256);
179
if
(gzeof(
fgzFile
)) {
180
printf(
"-E- MpdPHSDGenerator: unexpected end of file\n"
);
181
exit(1);
182
}
183
};
184
// ---------------------------------------------------------------------
185
Bool_t
MpdPHSDGenerator::SkipEvents
(
int
n
)
186
{
187
for
(
Int_t
k = 1; k <=
n
; ++k) {
188
if
(!
ReadHeader
())
189
return
kFALSE
;
// end of file
190
for
(
Int_t
i
= 1;
i
<=
fntr
; ++
i
)
191
SkipTrack
();
192
}
193
return
kTRUE
;
194
};
195
// ---------------------------------------------------------------------
i
int i
Definition
P4_F32vec4.h:22
Bool_t
bool Bool_t
Int_t
int Int_t
Float_t
float Float_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
TDatabasePDG.h
TMath.h
FairMCEventHeader
MpdMCEventHeader
MpdMCEventHeader.h.
Definition
MpdMCEventHeader.h:13
MpdMCEventHeader::SetPhi
void SetPhi(Double_t phi)
Modifiers.
Definition
MpdMCEventHeader.h:49
MpdPHSDGenerator::fntr
Int_t fntr
Definition
MpdPHSDGenerator.h:41
MpdPHSDGenerator::fbuffer
char fbuffer[256]
file
Definition
MpdPHSDGenerator.h:46
MpdPHSDGenerator::ReadEvent
Bool_t ReadEvent(FairPrimaryGenerator *primGen)
Read event.
Definition
MpdPHSDGenerator.cxx:48
MpdPHSDGenerator::fisRP
Bool_t fisRP
reaction plane angle
Definition
MpdPHSDGenerator.h:50
MpdPHSDGenerator::SkipTrack
void SkipTrack()
read event header, return kTRUE if successful
Definition
MpdPHSDGenerator.cxx:176
MpdPHSDGenerator::ReadHeader
Bool_t ReadHeader()
random/fixed reaction plane
Definition
MpdPHSDGenerator.cxx:157
MpdPHSDGenerator::frandom
TRandom2 * frandom
reading buffer
Definition
MpdPHSDGenerator.h:48
MpdPHSDGenerator::fgzFile
gzFile fgzFile
impact parameter in given event
Definition
MpdPHSDGenerator.h:44
MpdPHSDGenerator::fPsiRP
Double_t fPsiRP
Definition
MpdPHSDGenerator.h:49
MpdPHSDGenerator::fb
Float_t fb
number of tracks in given event
Definition
MpdPHSDGenerator.h:42
MpdPHSDGenerator::MpdPHSDGenerator
MpdPHSDGenerator()
Definition
MpdPHSDGenerator.cxx:20
MpdPHSDGenerator::~MpdPHSDGenerator
virtual ~MpdPHSDGenerator()
Destructor.
Definition
MpdPHSDGenerator.cxx:39
MpdPHSDGenerator::SkipEvents
Bool_t SkipEvents(Int_t n)
Skip n events, return kTRUE if successful.
Definition
MpdPHSDGenerator.cxx:185
TDatabasePDG::Instance
static TDatabasePDG * Instance()
TDatabasePDG::GetParticle
TParticlePDG * GetParticle(const char *name) const
TParticlePDG::Mass
Double_t Mass() const
TRandom2
gCoordinateSystem
const CoordinateSystem gCoordinateSystem
Definition
constants.h:6
sysLaboratory
@ sysLaboratory
Definition
constants.h:4
MpdMCEventHeader.h
MpdPHSDGenerator.h
n
*brief user defined string literal for JSON values *sa std::size_t n
Definition
json.hpp:20362
TMath::Sqrt
Double_t Sqrt(Double_t x)
TMath::Cos
Double_t Cos(Double_t)
TMath::Pi
constexpr Double_t Pi()
TMath::Sin
Double_t Sin(Double_t)
generators
MpdPHSDGenerator.cxx
Generated on
for BmnRoot by
1.17.0