BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnSiBTDigitizer.cxx
Go to the documentation of this file.
1
#include "
BmnSiBTDigitizer.h
"
2
3
#include "
BmnSiBTPoint.h
"
4
#include "CbmMCTrack.h"
5
#include "FairRootManager.h"
6
#include "
TSystem.h
"
7
8
static
Float_t
workTime
= 0.0;
9
static
int
entrys
= 0;
10
11
BmnSiBTDigitizer::BmnSiBTDigitizer
()
12
:
fOnlyPrimary
(
kFALSE
)
13
,
fStripMatching
(
kTRUE
)
14
{
15
16
fInputBranchName
=
"SiBTPoint"
;
17
fOutputDigitsBranchName
=
"BmnSiBTDigit"
;
18
fOutputDigitMatchesBranchName
=
"BmnSiBTDigitMatch"
;
19
20
fVerbose = 1;
21
22
fCurrentConfig
=
BmnSiBTConfiguration::None
;
23
StationSet
=
nullptr
;
24
GlobalModTransfSet
=
nullptr
;
25
fBmnSiBTDigitsArray
=
nullptr
;
26
fBmnSiBTDigitMatchesArray
=
nullptr
;
27
}
28
29
BmnSiBTDigitizer::BmnSiBTDigitizer
(UInt_t run_period)
30
:
BmnSiBTDigitizer
()
31
{
32
switch
(run_period) {
33
case
8:
// BM@N RUN-8
34
fCurrentConfig
=
BmnSiBTConfiguration::Run8
;
35
break
;
36
case
9:
// BM@N RUN-9
37
fCurrentConfig
=
BmnSiBTConfiguration::Run9
;
38
break
;
39
40
default
:
41
fCurrentConfig
=
BmnSiBTConfiguration::None
;
42
}
43
}
44
45
BmnSiBTDigitizer::~BmnSiBTDigitizer
()
46
{
47
if
(
StationSet
) {
48
delete
StationSet
;
49
}
50
if
(
GlobalModTransfSet
) {
51
delete
GlobalModTransfSet
;
52
}
53
if
(
fBmnSiBTDigitsArray
) {
54
fBmnSiBTDigitsArray
->Delete();
55
delete
fBmnSiBTDigitsArray
;
56
}
57
if
(
fBmnSiBTDigitMatchesArray
) {
58
fBmnSiBTDigitMatchesArray
->Delete();
59
delete
fBmnSiBTDigitMatchesArray
;
60
}
61
}
62
63
InitStatus
BmnSiBTDigitizer::Init
()
64
{
65
if
(fVerbose)
66
cout <<
"\nBmnSiBTDigitizer::Init()\n "
;
67
68
if
(fVerbose &&
fOnlyPrimary
)
69
cout <<
" Only primary particles are processed!!! "
<< endl;
70
71
if
(fVerbose &&
fStripMatching
)
72
cout <<
" Strip Matching is activated!!! "
<< endl;
73
else
74
cout <<
" Strip Matching is deactivated!!! "
<< endl;
75
76
FairRootManager* ioman = FairRootManager::Instance();
77
78
fBmnSiBTPointsArray
= (
TClonesArray
*)ioman->GetObject(
fInputBranchName
);
79
if
(!
fBmnSiBTPointsArray
) {
80
cout <<
"BmnSiBTDigitizer::Init(): branch "
<<
fInputBranchName
<<
" not found! Task will be deactivated"
81
<< endl;
82
SetActive(
kFALSE
);
83
return
kERROR;
84
}
85
86
fMCTracksArray
= (
TClonesArray
*)ioman->GetObject(
"MCTrack"
);
87
88
fBmnSiBTDigitsArray
=
new
TClonesArray
(
fOutputDigitsBranchName
);
89
ioman->Register(
fOutputDigitsBranchName
,
"SiBT_DIGIT"
,
fBmnSiBTDigitsArray
,
kTRUE
);
90
91
if
(
fStripMatching
) {
92
fBmnSiBTDigitMatchesArray
=
new
TClonesArray
(
"BmnMatch"
);
93
ioman->Register(
fOutputDigitMatchesBranchName
,
"SiBT_DIGIT"
,
fBmnSiBTDigitMatchesArray
,
kTRUE
);
94
}
95
96
TString
gPathSiBTConfig =
gSystem
->Getenv(
"VMCWORKDIR"
);
97
gPathSiBTConfig +=
"/parameters/SiBT/XMLConfigs/"
;
98
99
// Create SiBT detector ----------------------------------------------------
100
switch
(
fCurrentConfig
) {
101
case
BmnSiBTConfiguration::Run8
:
102
XMLConfigFile
= gPathSiBTConfig +
"SiBTRun8.xml"
;
103
if
(fVerbose)
104
cout <<
" Current SiBT Configuration : Run8"
105
<<
"\n"
;
106
break
;
107
108
case
BmnSiBTConfiguration::Run9
:
109
XMLConfigFile
= gPathSiBTConfig +
"SiBTRun9.xml"
;
110
if
(fVerbose)
111
cout <<
" Current SiBT Configuration : Run9"
112
<<
"\n"
;
113
break
;
114
115
default
:;
116
}
117
118
if
(!
gSystem
->AccessPathName(
XMLConfigFile
)) {
// returns FALSE if the file exists
119
if
(fVerbose)
120
cout <<
" XMLConfigFile : "
<<
XMLConfigFile
<<
"\n"
;
121
StationSet
=
new
BmnSiBTStationSet
(
XMLConfigFile
);
122
GlobalModTransfSet
=
new
BmnSiBTTransform
();
123
GlobalModTransfSet
->LoadFromXMLFile(
XMLConfigFile
);
124
}
else
{
125
Fatal
(
"BmnSiBTDigitizer::Init()"
,
" !!! Current configuration is not set !!! "
);
126
}
127
//--------------------------------------------------------------------------
128
129
if
(fVerbose)
130
cout <<
"BmnSiBTDigitizer::Init() finished\n\n"
;
131
return
kSUCCESS;
132
}
133
134
void
BmnSiBTDigitizer::Exec
(
Option_t
* opt)
135
{
136
137
if
(!IsActive())
138
return
;
139
140
clock_t tStart = clock();
141
fBmnSiBTDigitsArray
->Delete();
142
143
if
(
fStripMatching
) {
144
fBmnSiBTDigitMatchesArray
->Delete();
145
}
146
147
if
(!
fBmnSiBTPointsArray
) {
148
Error
(
"BmnSiBTDigitizer::Exec()"
,
" !!! Unknown branch name !!! "
);
149
return
;
150
}
151
152
if
(fVerbose) {
153
// cout << " BmnSiBTDigitizer::Exec(), Number of BmnSiBTPoints = " << fBmnSiBTPointsArray->GetEntriesFast() <<
154
// "\n";
155
}
156
157
ProcessMCPoints
();
158
159
// if (fVerbose) cout << " BmnSiBTDigitizer::Exec() finished\n\n";
160
entrys
++;
161
clock_t tFinish = clock();
162
workTime
+= ((
Float_t
)(tFinish - tStart)) / CLOCKS_PER_SEC;
163
}
164
165
void
BmnSiBTDigitizer::ProcessMCPoints
()
166
{
167
168
FairMCPoint
* SiBTPoint;
169
Int_t
NNotPrimaries = 0;
170
171
for
(
Int_t
ipoint = 0; ipoint <
fBmnSiBTPointsArray
->GetEntriesFast(); ipoint++) {
172
SiBTPoint = (
FairMCPoint
*)
fBmnSiBTPointsArray
->At(ipoint);
173
174
if
(
fOnlyPrimary
) {
175
CbmMCTrack
* track = (
CbmMCTrack
*)
fMCTracksArray
->UncheckedAt(SiBTPoint->GetTrackID());
176
if
(!track)
177
continue
;
178
if
(track->
GetMotherId
() != -1) {
179
NNotPrimaries++;
180
continue
;
181
}
182
}
183
184
Double_t
x = -SiBTPoint->GetX();
// invert because in the current geometry +x is left, -x is right
185
Double_t
y = SiBTPoint->GetY();
186
Double_t
z = SiBTPoint->GetZ();
187
188
Double_t
px = -SiBTPoint->GetPx();
// invert because in the current geometry +x is left, -x is right
189
Double_t
py = SiBTPoint->GetPy();
190
Double_t
pz = SiBTPoint->GetPz();
191
192
Double_t
dEloss = SiBTPoint->GetEnergyLoss() * 1e6;
// in keV
193
Int_t
refId = ipoint;
194
195
// Information from MC-points
196
Int_t
mc_station_num = ((
BmnSiBTPoint
*)SiBTPoint)->GetStation();
197
Int_t
mc_module_num = ((
BmnSiBTPoint
*)SiBTPoint)->GetModule();
198
199
// test output
200
// cout << "mc_station_num = " << mc_station_num << "\n";
201
// cout << "mc_module_num = " << mc_module_num << "\n";
202
203
// Apply inverse global module transforms to MC-point (in right-handed system)
204
if
(
GlobalModTransfSet
&& mc_station_num < StationSet->GetNStations()) {
205
if
(mc_module_num < StationSet->GetStation(mc_station_num)->GetNModules()) {
206
Plane3D::Point
point_transformed =
207
GlobalModTransfSet
->ApplyInverseTransforms(
Plane3D::Point
(-x, y, z), mc_station_num, mc_module_num);
208
Plane3D::Point
direction_transformed =
GlobalModTransfSet
->ApplyInverseTransforms(
209
Plane3D::Point
(-(px + x), (py + y), (pz + z)), mc_station_num, mc_module_num);
210
x = -point_transformed.
X
();
// convert to detector system (x-inverted)
211
y = point_transformed.
Y
();
212
z = point_transformed.
Z
();
213
214
px = -(direction_transformed.
X
() - point_transformed.
X
());
// convert to detector system (x-inverted)
215
py = direction_transformed.
Y
() - point_transformed.
Y
();
216
pz = direction_transformed.
Z
() - point_transformed.
Z
();
217
}
218
}
219
220
StationSet
->AddPointToDetector(x, y, z, px, py, pz, dEloss, refId);
221
}
222
223
// Int_t NAddedPoints = StationSet->CountNAddedToDetectorPoints();
224
// if (fVerbose && fOnlyPrimary) cout << " Number of not primaries points : " << NNotPrimaries << "\n";
225
// if (fVerbose) cout << " Processed MC points : " << NAddedPoints << "\n";
226
227
for
(
Int_t
iStation = 0; iStation <
StationSet
->GetNStations(); ++iStation) {
228
BmnSiBTStation
* station =
StationSet
->GetStation(iStation);
229
230
for
(
Int_t
iModule = 0; iModule < station->
GetNModules
(); ++iModule) {
231
BmnSiBTModule
* module = station->
GetModule
(iModule);
232
233
for
(
Int_t
iLayer = 0; iLayer < module->
GetNStripLayers
(); ++iLayer) {
234
BmnSiBTLayer
layer =
module
->GetStripLayer(iLayer);
235
236
for
(
Int_t
iStrip = 0; iStrip < layer.
GetNStrips
(); ++iStrip) {
237
Double_t
signal = layer.
GetStripSignal
(iStrip);
238
if
(signal > 0.0) {
239
new
((*fBmnSiBTDigitsArray)[
fBmnSiBTDigitsArray
->GetEntriesFast()])
240
BmnSiBTDigit
(iStation, iModule, iLayer, iStrip, signal);
241
242
if
(
fStripMatching
) {
243
new
((*fBmnSiBTDigitMatchesArray)[
fBmnSiBTDigitMatchesArray
->GetEntriesFast()])
244
BmnMatch
(layer.
GetStripMatch
(iStrip));
245
}
246
}
247
}
248
}
249
}
250
}
251
StationSet
->Reset();
252
}
253
254
void
BmnSiBTDigitizer::Finish
()
255
{
256
if
(
StationSet
) {
257
delete
StationSet
;
258
StationSet
=
nullptr
;
259
}
260
261
if
(
GlobalModTransfSet
) {
262
delete
GlobalModTransfSet
;
263
GlobalModTransfSet
=
nullptr
;
264
}
265
266
cout <<
"Work time of the SiBT digitizer: "
<<
workTime
<< endl;
267
}
entrys
static int entrys
Definition
BmnSiBTDigitizer.cxx:9
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
Option_t
const char Option_t
Error
void Error(const char *location, const char *msgfmt,...)
Fatal
void Fatal(const char *location, const char *msgfmt,...)
TSystem.h
gSystem
R__EXTERN TSystem * gSystem
BmnMatch
Definition
BmnMatch.h:25
BmnSiBTDigit
Definition
BmnSiBTDigit.h:9
BmnSiBTDigitizer::fOnlyPrimary
Bool_t fOnlyPrimary
Definition
BmnSiBTDigitizer.h:66
BmnSiBTDigitizer::BmnSiBTDigitizer
BmnSiBTDigitizer()
Definition
BmnSiBTDigitizer.cxx:11
BmnSiBTDigitizer::fBmnSiBTPointsArray
TClonesArray * fBmnSiBTPointsArray
Input array of SiBT Points.
Definition
BmnSiBTDigitizer.h:55
BmnSiBTDigitizer::fInputBranchName
TString fInputBranchName
Definition
BmnSiBTDigitizer.h:50
BmnSiBTDigitizer::Init
virtual InitStatus Init()
Definition
BmnSiBTDigitizer.cxx:63
BmnSiBTDigitizer::Finish
virtual void Finish()
Definition
BmnSiBTDigitizer.cxx:254
BmnSiBTDigitizer::XMLConfigFile
TString XMLConfigFile
Definition
BmnSiBTDigitizer.h:70
BmnSiBTDigitizer::StationSet
BmnSiBTStationSet * StationSet
Definition
BmnSiBTDigitizer.h:71
BmnSiBTDigitizer::fStripMatching
Bool_t fStripMatching
Definition
BmnSiBTDigitizer.h:67
BmnSiBTDigitizer::fOutputDigitMatchesBranchName
TString fOutputDigitMatchesBranchName
Definition
BmnSiBTDigitizer.h:52
BmnSiBTDigitizer::GlobalModTransfSet
BmnSiBTTransform * GlobalModTransfSet
Definition
BmnSiBTDigitizer.h:72
BmnSiBTDigitizer::Exec
virtual void Exec(Option_t *opt)
Definition
BmnSiBTDigitizer.cxx:134
BmnSiBTDigitizer::ProcessMCPoints
void ProcessMCPoints()
Definition
BmnSiBTDigitizer.cxx:165
BmnSiBTDigitizer::fBmnSiBTDigitMatchesArray
TClonesArray * fBmnSiBTDigitMatchesArray
Output array of SiBT Digit Matches.
Definition
BmnSiBTDigitizer.h:64
BmnSiBTDigitizer::fOutputDigitsBranchName
TString fOutputDigitsBranchName
Definition
BmnSiBTDigitizer.h:51
BmnSiBTDigitizer::~BmnSiBTDigitizer
virtual ~BmnSiBTDigitizer()
Definition
BmnSiBTDigitizer.cxx:45
BmnSiBTDigitizer::fMCTracksArray
TClonesArray * fMCTracksArray
Input array of MC Tracks.
Definition
BmnSiBTDigitizer.h:58
BmnSiBTDigitizer::fBmnSiBTDigitsArray
TClonesArray * fBmnSiBTDigitsArray
Output array of SiBT Digits.
Definition
BmnSiBTDigitizer.h:61
BmnSiBTDigitizer::fCurrentConfig
BmnSiBTConfiguration::SiBT_CONFIG fCurrentConfig
Definition
BmnSiBTDigitizer.h:69
BmnSiBTLayer
Definition
BmnSiBTLayer.h:15
BmnSiBTLayer::GetNStrips
Int_t GetNStrips()
Definition
BmnSiBTLayer.cxx:92
BmnSiBTLayer::GetStripSignal
Double_t GetStripSignal(Int_t strip_num)
Definition
BmnSiBTLayer.cxx:263
BmnSiBTLayer::GetStripMatch
BmnMatch GetStripMatch(Int_t strip_num)
Definition
BmnSiBTLayer.cxx:289
BmnSiBTModule
Definition
BmnSiBTModule.h:14
BmnSiBTModule::GetNStripLayers
Int_t GetNStripLayers()
Definition
BmnSiBTModule.h:55
BmnSiBTPoint
Definition
BmnSiBTPoint.h:7
BmnSiBTStationSet
Definition
BmnSiBTStationSet.h:14
BmnSiBTStation
Definition
BmnSiBTStation.h:12
BmnSiBTStation::GetModule
BmnSiBTModule * GetModule(Int_t module_num)
Definition
BmnSiBTStation.cxx:132
BmnSiBTStation::GetNModules
Int_t GetNModules()
Definition
BmnSiBTStation.h:58
BmnSiBTTransform
Definition
BmnSiBTTransform.h:19
CbmMCTrack
CbmMCTrack.h.
Definition
CbmMCTrack.h:26
CbmMCTrack::GetMotherId
Int_t GetMotherId() const
Definition
CbmMCTrack.h:57
FairMCPoint
ROOT::Math::Impl::Plane3D< double >::Point
PositionVector3D< Cartesian3D< T >, DefaultCoordinateSystemTag > Point
ROOT::Math::PositionVector3D::Y
Scalar Y() const
ROOT::Math::PositionVector3D::Z
Scalar Z() const
ROOT::Math::PositionVector3D::X
Scalar X() const
TClonesArray
TString
BmnSiBTDigitizer.h
BmnSiBTPoint.h
BmnSiBTConfiguration::Run8
@ Run8
Definition
BmnSiBTConfiguration.h:10
BmnSiBTConfiguration::Run9
@ Run9
Definition
BmnSiBTConfiguration.h:11
BmnSiBTConfiguration::None
@ None
Definition
BmnSiBTConfiguration.h:9
detectors
SiBT
BmnSiBTDigitizer.cxx
Generated on
for BmnRoot by
1.17.0