BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnSiliconHitProducerSRC.cxx
Go to the documentation of this file.
1
#include "
BmnSiliconHitProducerSRC.h
"
2
3
#include "
BmnSiliconHit.h
"
4
#include "
BmnSiliconPoint.h
"
5
#include "CbmMCTrack.h"
6
#include "CbmStsPoint.h"
7
#include "FairRootManager.h"
8
#include "
TCanvas.h
"
9
#include "
TFile.h
"
10
#include "
TH1F.h
"
11
#include "
TRandom.h
"
12
#include "
TSystem.h
"
13
14
using
std::cout;
15
using namespace
TMath
;
16
17
BmnSiliconHitProducerSRC::BmnSiliconHitProducerSRC
()
18
{
19
20
fInputBranchName
=
"SiliconPoint"
;
21
fOutputHitsBranchName
=
"BmnSiliconHitClean"
;
22
fOutputHitsBranchName2
=
"BmnSiliconHitSim"
;
23
}
24
25
BmnSiliconHitProducerSRC::~BmnSiliconHitProducerSRC
() {}
26
27
InitStatus
BmnSiliconHitProducerSRC::Init
()
28
{
29
if
(
fDebug
)
30
cout <<
" BmnSiliconHitProducerSRC::Init() "
<< endl;
31
rand_gen
.SetSeed(5);
32
33
// Get ROOT Manager
34
FairRootManager* ioman = FairRootManager::Instance();
35
36
fBmnPointsArray
= (
TClonesArray
*)ioman->GetObject(
fInputBranchName
);
37
fMCTracksArray
= (
TClonesArray
*)ioman->GetObject(
"MCTrack"
);
38
39
fBmnHitsArray
=
new
TClonesArray
(
"BmnHit"
);
40
ioman->Register(
fOutputHitsBranchName
,
"SILICON"
,
fBmnHitsArray
,
kTRUE
);
41
42
fBmnHitsArray2
=
new
TClonesArray
(
"BmnHit"
);
43
ioman->Register(
fOutputHitsBranchName2
,
"SILICON"
,
fBmnHitsArray2
,
kTRUE
);
44
45
TString
gPathConfig =
gSystem
->Getenv(
"VMCWORKDIR"
);
46
gPathConfig +=
"/parameters/silicon/XMLConfigs/"
;
47
SiliconStationSet
=
new
BmnSiliconStationSet
(gPathConfig +
"SiliconRunSpring2018.xml"
);
48
49
//--some hists--
50
if
(
fDebug
) {
51
hdX
=
new
TH1D
(
"dX"
,
"dX "
, 100, -0.015, 0.015);
52
fList
.Add(
hdX
);
53
hdXp
=
new
TH1D
(
"dXp"
,
"dXp "
, 100, -0.017, 0.017);
54
fList
.Add(
hdXp
);
55
}
56
57
return
kSUCCESS;
58
}
59
60
void
BmnSiliconHitProducerSRC::Exec
(
Option_t
* opt)
61
{
62
63
fBmnHitsArray
->Delete();
64
fBmnHitsArray2
->Delete();
65
66
if
(
fDebug
)
67
cout <<
"======================== BmnSiliconHitProducerSRC ========================"
<< endl;
68
69
if
(!
fBmnPointsArray
) {
70
Error
(
"BmnSiliconHitProducerSRC::Init()"
,
" !!! Unknown branch name !!! "
);
71
return
;
72
}
73
// x xp z
74
Float_t
err[3] = {0.0030, 0.0035, 0.};
// Uncertainties of coordinates //[cm], i.e. 30 & 35 mk
75
76
for
(
Int_t
iPoint = 0; iPoint <
fBmnPointsArray
->GetEntriesFast(); iPoint++) {
77
78
// TRandom* rand_gen = new TRandom();
79
BmnSiliconPoint
* siliconPoint = (
BmnSiliconPoint
*)
fBmnPointsArray
->UncheckedAt(iPoint);
80
81
Int_t
charge = siliconPoint->
GetCharge
();
82
if
(charge == 0)
83
continue
;
// qgsm
84
// if (charge != 18) continue;//ion carbon
85
Int_t
IsPrimary = siliconPoint->
GetIsPrimary
();
86
Double_t
Pz = siliconPoint->GetPz();
87
Int_t
pdgId = siliconPoint->
GetPdgId
();
88
if
(IsPrimary == 0)
89
continue
;
90
if
(Pz < 1.)
91
continue
;
92
93
Int_t
track_id = siliconPoint->GetTrackID();
94
Float_t
dX =
rand_gen
.Gaus(0, err[0]);
95
Float_t
dXp =
rand_gen
.Gaus(0, err[1]);
96
Float_t
dZ =
rand_gen
.Gaus(0, err[2]);
97
if
(
fDebug
)
98
hdX
->Fill(dX);
99
if
(
fDebug
)
100
hdXp
->Fill(dXp);
101
102
Float_t
x = siliconPoint->
GetXIn
();
103
Float_t
y = siliconPoint->
GetYIn
();
104
Float_t
z = siliconPoint->
GetZIn
();
105
Float_t
xp = y *
tan
(2.5 *
TMath::Pi
() / 180.) + x;
106
107
Float_t
x_smeared = siliconPoint->
GetXIn
() + dX;
108
Float_t
xp_smeared = xp + dXp;
109
Float_t
z_smeared = siliconPoint->
GetZIn
() + dZ;
110
111
if
(
fDebug
)
112
cout <<
" track_id "
<< track_id <<
" charge "
<< charge <<
" x "
<< x <<
" x_sm "
<< x_smeared <<
" y "
113
<< y <<
" y_sm "
<< (xp_smeared - x_smeared) /
tan
(2.5 *
TMath::Pi
() / 180.) <<
" xp_sm "
<< xp_smeared
114
<<
" z "
<< z << endl;
115
if
(
fDebug
&& z > -320.)
116
cout <<
" ----------"
<< endl;
117
118
//---faile for Goran---
119
// if (pdgId == PDG_B11 ){//if ( pdgId == PDG_He4 || pdgId == PDG_Li7){//
120
if
(
fDebug
)
121
cout <<
" pdgId "
<< pdgId << endl;
122
//|| pdgId == PDG_Li7 || pdgId == PDG_Li8 || pdgId == PDG_He4 || pdgId == PDG_Be9 || pdgId == PDG_H2){
123
124
// clean/true hit
125
BmnHit
* hit =
new
((*fBmnHitsArray)[
fBmnHitsArray
->GetEntriesFast()])
126
BmnHit
(0,
TVector3
(x, y, z),
TVector3
(err[0], err[1], err[2]), iPoint);
127
// hit->SetIndex(fBmnHitsArray->GetEntriesFast() - 1);
128
hit->
SetType
(1);
129
hit->
SetStation
(
SiliconStationSet
->GetPointStationOwnership(siliconPoint->
GetZIn
()));
130
hit->
SetIndex
(track_id);
131
hit->
SetType
(pdgId);
132
// hit->SetELoss(static_cast< double>(pdgId));//tmp
133
if
(
rand_gen
.Uniform() <= .25)
134
xp_smeared = -999.;
135
136
if
(
rand_gen
.Uniform() <= .90) {
137
138
// sim hit smeared
139
BmnHit
* hit2 =
new
((*fBmnHitsArray2)[
fBmnHitsArray2
->GetEntriesFast()])
140
BmnHit
(0,
TVector3
(x_smeared, xp_smeared, z_smeared),
TVector3
(err[0], err[1], err[2]), iPoint);
141
// hit2->SetIndex(fBmnHitsArray2->GetEntriesFast() - 1);
142
hit2->
SetType
(pdgId);
143
hit2->
SetStation
(
SiliconStationSet
->GetPointStationOwnership(siliconPoint->
GetZIn
()));
144
hit2->
SetIndex
(track_id);
145
}
146
// }
147
148
}
// iPoint
149
}
150
151
void
BmnSiliconHitProducerSRC::Finish
()
152
{
153
154
if
(
fDebug
) {
155
156
printf(
"BmnSiliconHitProducerSRC: "
);
157
fOutputFileName
=
"hSiliconHitProducerSRC.root"
;
158
cout <<
fOutputFileName
<< endl;
159
TFile
file(
fOutputFileName
,
"RECREATE"
);
160
fList
.Write();
161
file.
Close
();
162
}
163
}
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
TCanvas.h
Error
void Error(const char *location, const char *msgfmt,...)
TFile.h
TH1F.h
TRandom.h
TSystem.h
gSystem
R__EXTERN TSystem * gSystem
BmnHit
Definition
BmnHit.h:21
BmnHit::SetType
void SetType(Int_t type)
Definition
BmnHit.h:54
BmnHit::SetIndex
void SetIndex(Int_t id)
Definition
BmnHit.h:49
BmnHit::SetStation
void SetStation(Short_t st)
Definition
BmnHit.h:52
BmnSiliconHitProducerSRC::fOutputHitsBranchName2
TString fOutputHitsBranchName2
Definition
BmnSiliconHitProducerSRC.h:45
BmnSiliconHitProducerSRC::fInputBranchName
TString fInputBranchName
Definition
BmnSiliconHitProducerSRC.h:42
BmnSiliconHitProducerSRC::fOutputFileName
TString fOutputFileName
Definition
BmnSiliconHitProducerSRC.h:46
BmnSiliconHitProducerSRC::SiliconStationSet
BmnSiliconStationSet * SiliconStationSet
Definition
BmnSiliconHitProducerSRC.h:58
BmnSiliconHitProducerSRC::rand_gen
TRandom rand_gen
Entire GEM detector.
Definition
BmnSiliconHitProducerSRC.h:59
BmnSiliconHitProducerSRC::Exec
virtual void Exec(Option_t *opt)
Virtual method Exec.
Definition
BmnSiliconHitProducerSRC.cxx:60
BmnSiliconHitProducerSRC::~BmnSiliconHitProducerSRC
virtual ~BmnSiliconHitProducerSRC()
Destructor.
Definition
BmnSiliconHitProducerSRC.cxx:25
BmnSiliconHitProducerSRC::fBmnHitsArray
TClonesArray * fBmnHitsArray
Output array of Silicon Hits.
Definition
BmnSiliconHitProducerSRC.h:55
BmnSiliconHitProducerSRC::hdXp
TH1D * hdXp
Definition
BmnSiliconHitProducerSRC.h:60
BmnSiliconHitProducerSRC::Init
virtual InitStatus Init()
Virtual method Init.
Definition
BmnSiliconHitProducerSRC.cxx:27
BmnSiliconHitProducerSRC::Finish
virtual void Finish()
Virtual method Finish.
Definition
BmnSiliconHitProducerSRC.cxx:151
BmnSiliconHitProducerSRC::fBmnPointsArray
TClonesArray * fBmnPointsArray
Input array of Silicon Points.
Definition
BmnSiliconHitProducerSRC.h:49
BmnSiliconHitProducerSRC::fList
TList fList
Definition
BmnSiliconHitProducerSRC.h:41
BmnSiliconHitProducerSRC::BmnSiliconHitProducerSRC
BmnSiliconHitProducerSRC()
Default constructor.
Definition
BmnSiliconHitProducerSRC.cxx:17
BmnSiliconHitProducerSRC::fBmnHitsArray2
TClonesArray * fBmnHitsArray2
Definition
BmnSiliconHitProducerSRC.h:56
BmnSiliconHitProducerSRC::fOutputHitsBranchName
TString fOutputHitsBranchName
Definition
BmnSiliconHitProducerSRC.h:44
BmnSiliconHitProducerSRC::fDebug
Bool_t fDebug
Definition
BmnSiliconHitProducerSRC.h:40
BmnSiliconHitProducerSRC::hdX
TH1D * hdX
Definition
BmnSiliconHitProducerSRC.h:60
BmnSiliconHitProducerSRC::fMCTracksArray
TClonesArray * fMCTracksArray
Input array of MC Tracks.
Definition
BmnSiliconHitProducerSRC.h:52
BmnSiliconPoint
Definition
BmnSiliconPoint.h:7
BmnSiliconPoint::GetZIn
Double_t GetZIn() const
Definition
BmnSiliconPoint.h:43
BmnSiliconPoint::GetXIn
Double_t GetXIn() const
Accessors.
Definition
BmnSiliconPoint.h:41
BmnSiliconPoint::GetYIn
Double_t GetYIn() const
Definition
BmnSiliconPoint.h:42
BmnSiliconPoint::GetIsPrimary
Int_t GetIsPrimary()
Definition
BmnSiliconPoint.h:55
BmnSiliconPoint::GetPdgId
Double_t GetPdgId()
Definition
BmnSiliconPoint.h:57
BmnSiliconPoint::GetCharge
Double_t GetCharge()
Definition
BmnSiliconPoint.h:56
BmnSiliconStationSet
Definition
BmnSiliconStationSet.h:14
TClonesArray
TFile
TFile::Close
void Close(Option_t *option="") override
TH1D
TString
TVector3
BmnSiliconHitProducerSRC.h
BmnSiliconHit.h
BmnSiliconPoint.h
tan
RVec< PromoteType< T > > tan(const RVec< T > &v)
TMath
TMath::Pi
constexpr Double_t Pi()
detectors
silicon
BmnSiliconHitProducerSRC.cxx
Generated on
for BmnRoot by
1.17.0