BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnZdcDigiProducer.cxx
Go to the documentation of this file.
1
/*************************************************************************************
2
*
3
* BmnZdcDigiProducer
4
* Class to create digital data taken from BmnZdc detector
5
*
6
* Author: Elena Litvinenko
7
* e-mail: litvin@nf.jinr.ru
8
* Version: 18-11-2015
9
*
10
************************************************************************************/
11
12
#include "
BmnZdcDigiProducer.h
"
13
14
#include "
BmnZdcDigi.h
"
15
#include "
BmnZdcPoint.h
"
16
#include "FairRootManager.h"
17
#include "FairRun.h"
18
#include "FairRunAna.h"
19
#include "FairRuntimeDb.h"
20
#include "
TClonesArray.h
"
21
#include "
TFile.h
"
22
#include "
TROOT.h
"
23
#include "
TVectorT.h
"
24
25
#include <iostream>
26
27
// ----- Default constructor -------------------------------------------
28
BmnZdcDigiProducer::BmnZdcDigiProducer
(
const
char
* name)
29
:
FairTask
(name)
30
{
31
fPointArray
= 0;
32
fDigiArray
= 0;
33
fGeoPar
= 0;
34
fHistZdcEn
= 0;
35
fELossZdcValue
= NULL;
36
fELossZdcHisto
= NULL;
37
}
38
// -------------------------------------------------------------------------
39
40
// ----- Destructor ----------------------------------------------------
41
BmnZdcDigiProducer::~BmnZdcDigiProducer
() {}
42
// -------------------------------------------------------------------------
43
44
// -------------------------------------------------------------------------
45
void
BmnZdcDigiProducer::SetParContainers
()
46
{
47
cout <<
"-I- BmnZdcDigiProducer: SetParContainers started..."
<< endl;
48
49
// Get run and runtime database
50
FairRunAna* run = FairRunAna::Instance();
51
if
(!run)
52
Fatal
(
"FairMuchDigitize::SetParContainers"
,
"No analysis run"
);
53
54
FairRuntimeDb* rtdb = run->GetRuntimeDb();
55
if
(!rtdb)
56
Fatal
(
"FairMuchDigitize::SetParContainers"
,
"No runtime database"
);
57
58
cout <<
"-I- BmnZdcDigiProducer: SetParContainers continued..."
<< endl;
59
60
rtdb->activateParIo(rtdb->getFirstInput());
61
// fGeoPar=( BmnZdcGeoPar*) rtdb->getContainer("BmnZdcGeoPar");
62
fGeoPar
= (
BmnZdcGeoPar
*)
gROOT
->FindObject(
"BmnZdcGeoPar"
);
63
fGeoPar
->print();
64
65
cout <<
"-I- BmnZdcDigiProducer: SetParContainers finished."
<< endl;
66
}
67
68
// -------------------------------------------------------------------------
69
// ----- Public method Init --------------------------------------------
70
InitStatus
BmnZdcDigiProducer::Init
()
71
{
72
73
cout <<
"-I- BmnZdcDigiProducer: Init started..."
<< endl;
74
75
// Get RootManager
76
FairRootManager* ioman = FairRootManager::Instance();
77
if
(!ioman) {
78
cout <<
"-E- BmnZdcDigiProducer::Init: "
79
<<
"RootManager not instantiated!"
<< endl;
80
return
kFATAL;
81
}
82
83
// Get input array
84
fPointArray
= (
TClonesArray
*)ioman->GetObject(
"ZdcPoint"
);
85
if
(!
fPointArray
) {
86
cout <<
"-W- BmnZdcDigiProducer::Init: "
87
<<
"No ZdcPoint array!"
<< endl;
88
return
kERROR;
89
}
90
91
// Create and register output array
92
fDigiArray
=
new
TClonesArray
(
"BmnZdcDigi"
);
93
ioman->Register(
"ZdcDigi"
,
"Zdc"
,
fDigiArray
,
kTRUE
);
94
95
fELossZdcValue
=
new
TClonesArray
(
"TParameter<double>"
);
96
ioman->Register(
"ELossZdcValue"
,
"Zdc"
,
fELossZdcValue
,
kTRUE
);
97
98
fELossZdcHisto
=
new
TClonesArray
(
"TVectorT<float>"
);
99
ioman->Register(
"ELossZdcHisto"
,
"Zdc"
,
fELossZdcHisto
,
kTRUE
);
100
101
BmnZdcDigiScheme
* fDigiScheme =
BmnZdcDigiScheme::Instance
();
102
fDigiScheme->
Init
(
fGeoPar
, 0, 2);
103
104
cout <<
"-I- BmnZdcDigiProducer: Intialization successfull"
<< endl;
105
106
return
kSUCCESS;
107
}
108
// -------------------------------------------------------------------------
109
void
BmnZdcDigiProducer::CreateHistograms
(
BmnZdcDigiId_t
* pDigiID)
110
{
111
Int_t
nx, ny
/*, nz*/
;
112
Double_t
dx, dy
/*, dz*/
;
113
114
// BmnZdcDigiScheme *fDigiScheme = BmnZdcDigiScheme::Instance();
115
// fDigiScheme->GetZdcDimensions (nx,ny,nz);
116
// fDigiScheme->GetVolDxDyDz (pDigiID,dx, dy, dz);
117
nx = 10;
118
ny = 10;
119
dx = 75;
120
dy = 75;
// dz=1010; // mm
121
122
Int_t
Nx = nx + 2;
123
Double_t
Dx = dx * Nx / 2;
124
Int_t
Ny = ny + 2;
125
Double_t
Dy = dy * Ny / 2;
126
127
fHistZdcEn
=
new
TH2F
(
"HistZdcEn"
,
"HistZdcEnergy"
, Nx, -Dx, Dx, Ny, -Dy, Dy);
128
129
if
(!
fHistZdcEn
)
130
cout <<
"-E- BmnZdcDigiProducer: HistZdcEn Histogram not created !!"
<< endl;
131
else
{
132
FairRootManager* ioman = FairRootManager::Instance();
133
fHistZdcEn
->SetDirectory((
TFile
*)ioman->GetOutFile());
134
fHistZdcEn
->Write();
135
}
136
}
137
138
// ----- Public method Exec --------------------------------------------
139
void
BmnZdcDigiProducer::Exec
(
Option_t
* opt)
140
{
141
142
// #define EDEBUG
143
#ifdef EDEBUG
144
static
Int_t
lEDEBUGcounter = 0;
145
cout <<
"EDEBUG-- BmnZdcDigiProducer::Exec() started... "
<< endl;
146
;
147
#endif
148
149
if
(!
fDigiArray
)
150
Fatal
(
"Exec"
,
"No DigiArray"
);
151
152
fDigiArray
->Clear();
153
154
BmnZdcDigiScheme
* pDigiScheme =
BmnZdcDigiScheme::Instance
();
155
156
if
(!pDigiScheme)
157
Fatal
(
"BmnZdcDigiProducer::Exec"
,
"No DigiScheme"
);
158
159
Int_t
module_groupID, modID, chanID;
160
BmnZdcDigiId_t
digiID;
161
162
BmnZdcPoint
* point = NULL;
163
164
map<BmnZdcDigiId_t, Float_t> fDigiIdEnergy;
165
fDigiIdEnergy.clear();
166
map<BmnZdcDigiId_t, Float_t>::const_iterator p;
167
168
Int_t
nPoints =
fPointArray
->GetEntriesFast();
169
Double_t
e1 = 0;
170
171
if
(
fHistZdcEn
) {
172
fHistZdcEn
->Reset();
173
}
174
TH2F
* hist1 =
fHistZdcEn
;
175
176
// Bool_t flag_of_not_created=1;
177
178
for
(
Int_t
iPoint = 0; iPoint < nPoints; iPoint++) {
179
180
point = (
BmnZdcPoint
*)
fPointArray
->At(iPoint);
181
182
// Int_t pMMcopy=1;
183
digiID = pDigiScheme->
GetDigiIdFromVolumeData
(point->GetDetectorID(), point->
GetCopyMother
());
184
185
if
((digiID[0] != -1) && (digiID[1] != -1)) {
186
187
if
(!
fHistZdcEn
) {
188
189
CreateHistograms
(&digiID);
190
191
hist1 =
fHistZdcEn
;
192
}
193
194
if
(fDigiIdEnergy.find(digiID) == fDigiIdEnergy.end())
195
fDigiIdEnergy[digiID] = point->GetEnergyLoss();
196
else
197
fDigiIdEnergy[digiID] += point->GetEnergyLoss();
198
199
e1 += point->GetEnergyLoss();
200
hist1->
Fill
(point->GetX() * 10, point->GetY() * 10, point->GetEnergyLoss());
// in mm
201
#ifdef EDEBUG
202
if
(lEDEBUGcounter < 20) {
203
cout <<
"EDEBUG-- BmnZdcDigiProducer::Exec: point : "
;
204
point->
Print
(
""
);
205
lEDEBUGcounter++;
206
}
207
#endif
208
209
}
210
#ifdef EDEBUG
211
else
212
{
213
if
(lEDEBUGcounter < 100) {
214
cout <<
"EDEBUG-- BmnZdcDigiProducer::Exec: Boundary point? : "
;
215
point->
Print
(
""
);
216
lEDEBUGcounter++;
217
}
218
}
219
#endif
220
}
221
222
TClonesArray
& clref1 = *
fELossZdcValue
;
223
new
(clref1[0])
TParameter<double>
(
"ELossZdc"
, e1);
224
225
if
(
fHistZdcEn
) {
226
TClonesArray
& clref1e = *
fELossZdcHisto
;
227
new
(clref1e[0])
TVectorT<float>
(
fHistZdcEn
->GetSize(),
fHistZdcEn
->GetArray());
228
}
229
230
Float_t
eloss = 0;
231
232
for
(p = fDigiIdEnergy.begin(); p != fDigiIdEnergy.end(); ++p) {
233
234
pDigiScheme->
SplitDigiID
((*p).first, module_groupID, modID, chanID);
235
236
if
((module_groupID != -1) && (chanID != -1)) {
237
eloss = (*p).second;
238
/*BmnZdcDigi* digi = */
AddHit
(module_groupID, modID, chanID, eloss);
239
#ifdef EDEBUG
240
if
(lEDEBUGcounter < 50) {
241
cout <<
"EDEBUG-- BmnZdcDigiProducer::Exec: "
<< module_groupID <<
" "
<< chanID <<
" "
<< (*p).second
242
<<
" "
<< lEDEBUGcounter << endl;
243
lEDEBUGcounter++;
244
}
245
#endif
246
}
247
}
248
249
#undef EDEBUG
250
}
251
// -------------------------------------------------------------------------
252
253
// ----- Private method AddDigi --------------------------------------------
254
BmnZdcDigi
*
BmnZdcDigiProducer::AddHit
(
Int_t
module_groupID,
Int_t
modID,
Int_t
chanID,
Float_t
energy)
255
{
256
TClonesArray
& clref = *
fDigiArray
;
257
Int_t
size = clref.
GetEntriesFast
();
258
BmnZdcDigi
* result =
new
(clref[size])
BmnZdcDigi
(module_groupID, modID, chanID, (
Double_t
)energy);
259
// result->Print();
260
return
result;
261
}
262
// ----
Int_t
int Int_t
Float_t
float Float_t
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
TClonesArray.h
Fatal
void Fatal(const char *location, const char *msgfmt,...)
TFile.h
TROOT.h
gROOT
#define gROOT
TVectorT.h
BmnZdcDigiProducer::AddHit
BmnZdcDigi * AddHit(Int_t module_groupID, Int_t modID, Int_t chanID, Float_t energy)
Definition
BmnZdcDigiProducer.cxx:254
BmnZdcDigiProducer::fELossZdcValue
TClonesArray * fELossZdcValue
Definition
BmnZdcDigiProducer.h:49
BmnZdcDigiProducer::CreateHistograms
void CreateHistograms(BmnZdcDigiId_t *pDigiID)
Definition
BmnZdcDigiProducer.cxx:109
BmnZdcDigiProducer::fELossZdcHisto
TClonesArray * fELossZdcHisto
Definition
BmnZdcDigiProducer.h:51
BmnZdcDigiProducer::~BmnZdcDigiProducer
~BmnZdcDigiProducer()
Destructor.
Definition
BmnZdcDigiProducer.cxx:41
BmnZdcDigiProducer::fGeoPar
BmnZdcGeoPar * fGeoPar
Input geometry parameters container.
Definition
BmnZdcDigiProducer.h:54
BmnZdcDigiProducer::BmnZdcDigiProducer
BmnZdcDigiProducer(const char *name="BmnZdc Digi Producer")
Default constructor.
Definition
BmnZdcDigiProducer.cxx:28
BmnZdcDigiProducer::Exec
virtual void Exec(Option_t *opt)
Virtual method Exec.
Definition
BmnZdcDigiProducer.cxx:139
BmnZdcDigiProducer::fPointArray
TClonesArray * fPointArray
Input array of BmnZdcPoints.
Definition
BmnZdcDigiProducer.h:44
BmnZdcDigiProducer::fDigiArray
TClonesArray * fDigiArray
Output array of BmnZdcDigi.
Definition
BmnZdcDigiProducer.h:47
BmnZdcDigiProducer::Init
virtual InitStatus Init()
Virtual method Init.
Definition
BmnZdcDigiProducer.cxx:70
BmnZdcDigiProducer::SetParContainers
virtual void SetParContainers()
Definition
BmnZdcDigiProducer.cxx:45
BmnZdcDigiProducer::fHistZdcEn
TH2F * fHistZdcEn
Output Histograms of X-Y energy map.
Definition
BmnZdcDigiProducer.h:57
BmnZdcDigiScheme
Definition
BmnZdcDigiScheme.h:30
BmnZdcDigiScheme::Init
Bool_t Init(BmnZdcGeoPar *geoPar, BmnZdcDigiPar *digiPar, Int_t pVerbose=0)
Definition
BmnZdcDigiScheme.cxx:60
BmnZdcDigiScheme::SplitDigiID
void SplitDigiID(BmnZdcDigiId_t digiID, Int_t &module_groupID, Int_t &modID, Int_t &chanID)
Definition
BmnZdcDigiScheme.cxx:560
BmnZdcDigiScheme::GetDigiIdFromVolumeData
BmnZdcDigiId_t GetDigiIdFromVolumeData(Int_t pMcVolumeNumber, Int_t pMotherMotherCopyNumber)
Definition
BmnZdcDigiScheme.cxx:550
BmnZdcDigiScheme::Instance
static BmnZdcDigiScheme * Instance()
Definition
BmnZdcDigiScheme.cxx:50
BmnZdcDigi
Definition
BmnZdcDigi.h:18
BmnZdcGeoPar
Definition
BmnZdcGeoPar.h:18
BmnZdcPoint
Definition
BmnZdcPoint.h:20
BmnZdcPoint::Print
virtual void Print(const Option_t *opt) const
Output to screen.
Definition
BmnZdcPoint.cxx:73
BmnZdcPoint::GetCopyMother
Short_t GetCopyMother() const
Definition
BmnZdcPoint.h:58
FairTask
TClonesArray
TFile
TH2F
TH2::Fill
virtual Int_t Fill(const char *namex, const char *namey, Double_t w)
TObjArray::GetEntriesFast
Int_t GetEntriesFast() const
TParameter
TVectorT
BmnZdcDigiProducer.h
BmnZdcDigiId_t
std::vector< Int_t > BmnZdcDigiId_t
Definition
BmnZdcDigiScheme.h:26
BmnZdcDigi.h
BmnZdcPoint.h
detectors
zdc
BmnZdcDigiProducer.cxx
Generated on
for BmnRoot by
1.17.0