BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnMCTrackCreator.cxx
Go to the documentation of this file.
1
/**
2
* \file BmnMCTrackCreator.cxx
3
* \author Andrey Lebedev <andrey.lebedev@gsi.de>
4
* \author Sergey Merts <sergey.merts@gmail.com> - modifications for BMN experiment
5
* \date 2011-2014
6
**/
7
#include "
BmnMCTrackCreator.h
"
8
9
#include "CbmBaseHit.h"
10
#include "CbmGeoStsPar.h"
11
#include "CbmMCTrack.h"
12
#include "CbmStsDigiPar.h"
13
#include "CbmStsDigiScheme.h"
14
#include "CbmStsPoint.h"
15
#include "CbmStsSensor.h"
16
#include "FairGeoNode.h"
17
#include "FairMCPoint.h"
18
#include "FairRootManager.h"
19
#include "FairRunAna.h"
20
#include "FairRuntimeDb.h"
21
#include "
TClonesArray.h
"
22
#include "
TDatabasePDG.h
"
23
#include "
TGeoManager.h
"
24
25
using namespace
std
;
26
27
BmnMCTrackCreator::BmnMCTrackCreator
(
TString
gem,
TString
sil,
TString
csc)
28
:
fMCTracks
(nullptr)
29
,
fSilPoints
(nullptr)
30
,
fGemPoints
(nullptr)
31
,
fTof400Points
(nullptr)
32
,
fTof700Points
(nullptr)
33
,
fCscPoints
(nullptr)
34
,
fDchPoints
(nullptr)
35
,
fNSiliconStations
(0)
36
{
37
ReadDataBranches
();
38
fSilDetector
=
new
BmnSiliconStationSet
(sil);
39
fGemDetector
=
new
BmnGemStripStationSet
(gem);
40
fCscDetector
=
new
BmnCSCStationSet
(csc);
41
}
42
43
BmnMCTrackCreator::~BmnMCTrackCreator
()
44
{
45
delete
fGemDetector
;
46
delete
fSilDetector
;
47
delete
fCscDetector
;
48
}
49
50
BmnMCTrackCreator
*
BmnMCTrackCreator::Instance
(
TString
gem,
TString
sil,
TString
csc)
51
{
52
static
BmnMCTrackCreator
instance(gem, sil, csc);
53
return
&instance;
54
}
55
56
void
BmnMCTrackCreator::Create
()
57
{
58
fBmnMCTracks
.clear();
59
fNSiliconStations
=
fSilDetector
->GetNStations();
60
fNGemStations
=
fGemDetector
->GetNStations();
61
fNCscStations
=
fCscDetector
->GetNStations();
62
AddPoints
(
kSILICON
,
fSilPoints
);
63
AddPoints
(
kSSD
,
fSsdPoints
);
64
AddPoints
(
kGEM
,
fGemPoints
);
65
AddPoints
(
kTOF1
,
fTof400Points
);
66
AddPoints
(
kTOF
,
fTof700Points
);
67
AddPoints
(
kCSC
,
fCscPoints
);
68
AddPoints
(
kDCH
,
fDchPoints
);
69
// printf("fSilDetector->GetNStations() = %d\n", fSilDetector->GetNStations());
70
// printf("fGemDetector->GetNStations() = %d\n", fGemDetector->GetNStations());
71
72
// std::cout << "BmnMCTrackCreator: nof MC tracks=" << fBmnMCTracks.size() << std::endl;
73
// std::map<Int_t, BmnMCTrack>::iterator it;
74
// for (it = fBmnMCTracks.begin(); it != fBmnMCTracks.end(); it++) {
75
// printf("n gem pnts = %d\n", (*it).second.GetNofPoints(kGEM));
76
// printf("n sil pnts = %d\n", (*it).second.GetNofPoints(kSILICON));
77
// //std::cout << (*it).first << " => " << (*it).second;
78
// }
79
}
80
81
void
BmnMCTrackCreator::ReadDataBranches
()
82
{
83
FairRootManager* ioman = FairRootManager::Instance();
84
fMCTracks
= (
TClonesArray
*)ioman->GetObject(
"MCTrack"
);
85
fSilPoints
= (
TClonesArray
*)ioman->GetObject(
"SiliconPoint"
);
86
fSsdPoints
= (
TClonesArray
*)ioman->GetObject(
"SSDPoint"
);
87
fGemPoints
= (
TClonesArray
*)ioman->GetObject(
"StsPoint"
);
88
fTof400Points
= (
TClonesArray
*)ioman->GetObject(
"TOF400Point"
);
89
fTof700Points
= (
TClonesArray
*)ioman->GetObject(
"TOF700Point"
);
90
fCscPoints
= (
TClonesArray
*)ioman->GetObject(
"CSCPoint"
);
91
fDchPoints
= (
TClonesArray
*)ioman->GetObject(
"DCHPoint"
);
92
}
93
94
void
BmnMCTrackCreator::AddPoints
(DetectorId detId,
const
TClonesArray
* array)
95
{
96
if
(!array)
97
return
;
98
Int_t
nofPoints = array->GetEntriesFast();
99
for
(
Int_t
iPoint = 0; iPoint < nofPoints; iPoint++) {
100
FairMCPoint
* fairPoint = (
FairMCPoint
*)(array->At(iPoint));
101
BmnMCPoint
bmnPoint;
102
Int_t
stationId = -1;
103
if
(detId ==
kSILICON
) {
104
stationId =
fSilDetector
->GetPointStationOwnership(fairPoint->GetZ());
105
// printf("stSil = %d\n", stationId);
106
}
else
if
(detId ==
kSSD
) {
107
// BmnSSDHitProducer hp;
108
// stationId = hp.DefineStationByZ(fairPoint->GetZ(), 0);
109
}
else
if
(detId ==
kGEM
) {
110
stationId =
fGemDetector
->GetPointStationOwnership(fairPoint->GetZ()) +
fNSiliconStations
;
111
}
else
if
(detId ==
kCSC
) {
112
stationId =
fCscDetector
->GetPointStationOwnership(fairPoint->GetZ()) +
fNSiliconStations
+
fNGemStations
;
113
}
else
if
(detId ==
kTOF1
) {
114
stationId =
fNSiliconStations
+
fNGemStations
+
fNCscStations
+ 1;
115
}
else
if
(detId ==
kTOF
) {
116
stationId =
fNSiliconStations
+
fNGemStations
+
fNCscStations
+ 2;
117
}
else
if
(detId ==
kDCH
) {
118
stationId =
fNSiliconStations
+
fNGemStations
+
fNCscStations
+ 3;
119
}
120
121
if
(stationId < 0)
122
continue
;
123
FairMCPointCoordinatesAndMomentumToBmnMCPoint
(fairPoint, &bmnPoint);
124
FairMCPointToBmnMCPoint
(fairPoint, &bmnPoint, iPoint, stationId);
125
fBmnMCTracks
[fairPoint->GetTrackID()].AddPoint(detId, bmnPoint);
126
}
127
}
128
129
void
BmnMCTrackCreator::FairMCPointToBmnMCPoint
(
const
FairMCPoint
* fairPoint,
130
BmnMCPoint
* bmnPoint,
131
Int_t
refId,
132
Int_t
stationId)
133
{
134
bmnPoint->
SetRefId
(refId);
135
bmnPoint->
SetStationId
(stationId);
136
const
CbmMCTrack
* mcTrack = (
const
CbmMCTrack
*)(
fMCTracks
->At(fairPoint->GetTrackID()));
137
if
(mcTrack ==
nullptr
)
138
return
;
// FIXME! it shouldn't happen
139
TParticlePDG
* pdgParticle =
TDatabasePDG::Instance
()->
GetParticle
(mcTrack->
GetPdgCode
());
140
Float_t
charge = (pdgParticle !=
nullptr
) ? pdgParticle->
Charge
() : 0.;
141
// Float_t q = (charge > 0) ? 1. : -1.;
142
bmnPoint->
SetQ
(charge / 3);
// Потому что, сука, кварки!
143
}
144
145
void
BmnMCTrackCreator::FairMCPointCoordinatesAndMomentumToBmnMCPoint
(
const
FairMCPoint
* fairPoint,
146
BmnMCPoint
* bmnPoint)
147
{
148
bmnPoint->
SetXIn
(fairPoint->GetX());
149
bmnPoint->
SetYIn
(fairPoint->GetY());
150
bmnPoint->
SetZIn
(fairPoint->GetZ());
151
bmnPoint->
SetPxIn
(fairPoint->GetPx());
152
bmnPoint->
SetPyIn
(fairPoint->GetPy());
153
bmnPoint->
SetPzIn
(fairPoint->GetPz());
154
bmnPoint->
SetXOut
(fairPoint->GetX());
155
bmnPoint->
SetYOut
(fairPoint->GetY());
156
bmnPoint->
SetZOut
(fairPoint->GetZ());
157
bmnPoint->
SetPxOut
(fairPoint->GetPx());
158
bmnPoint->
SetPyOut
(fairPoint->GetPy());
159
bmnPoint->
SetPzOut
(fairPoint->GetPz());
160
}
BmnMCTrackCreator.h
Creates BmnMCTrack objects.
Int_t
int Int_t
Float_t
float Float_t
TClonesArray.h
TDatabasePDG.h
TGeoManager.h
kSILICON
@ kSILICON
Definition
BmnDetectorList.h:25
kGEM
@ kGEM
Definition
BmnDetectorList.h:15
kTOF
@ kTOF
Definition
BmnDetectorList.h:18
kSSD
@ kSSD
Definition
BmnDetectorList.h:37
kTOF1
@ kTOF1
Definition
BmnDetectorList.h:16
kCSC
@ kCSC
Definition
BmnDetectorList.h:24
kDCH
@ kDCH
Definition
BmnDetectorList.h:17
BmnCSCStationSet
Definition
BmnCSCStationSet.h:14
BmnGemStripStationSet
Definition
BmnGemStripStationSet.h:15
BmnMCPoint
Monte-Carlo point.
Definition
BmnMCPoint.h:23
BmnMCPoint::SetYIn
void SetYIn(Double_t y)
Definition
BmnMCPoint.h:103
BmnMCPoint::SetPyOut
void SetPyOut(Double_t py)
Definition
BmnMCPoint.h:112
BmnMCPoint::SetPxOut
void SetPxOut(Double_t px)
Definition
BmnMCPoint.h:111
BmnMCPoint::SetPxIn
void SetPxIn(Double_t px)
Definition
BmnMCPoint.h:105
BmnMCPoint::SetStationId
void SetStationId(Int_t stationId)
Definition
BmnMCPoint.h:116
BmnMCPoint::SetYOut
void SetYOut(Double_t y)
Definition
BmnMCPoint.h:109
BmnMCPoint::SetPzOut
void SetPzOut(Double_t pz)
Definition
BmnMCPoint.h:113
BmnMCPoint::SetPyIn
void SetPyIn(Double_t py)
Definition
BmnMCPoint.h:106
BmnMCPoint::SetZIn
void SetZIn(Double_t z)
Definition
BmnMCPoint.h:104
BmnMCPoint::SetPzIn
void SetPzIn(Double_t pz)
Definition
BmnMCPoint.h:107
BmnMCPoint::SetXIn
void SetXIn(Double_t x)
Definition
BmnMCPoint.h:102
BmnMCPoint::SetXOut
void SetXOut(Double_t x)
Definition
BmnMCPoint.h:108
BmnMCPoint::SetZOut
void SetZOut(Double_t z)
Definition
BmnMCPoint.h:110
BmnMCPoint::SetQ
void SetQ(Double_t q)
Definition
BmnMCPoint.h:114
BmnMCPoint::SetRefId
void SetRefId(Int_t refId)
Definition
BmnMCPoint.h:115
BmnMCTrackCreator::FairMCPointToBmnMCPoint
void FairMCPointToBmnMCPoint(const FairMCPoint *fairPoint, BmnMCPoint *bmnPoint, int refId, int stationId)
Convert FairMCPoint to BmnMCPoint.
Definition
BmnMCTrackCreator.cxx:129
BmnMCTrackCreator::AddPoints
void AddPoints(DetectorId detId, const TClonesArray *array)
Add MC points from a certain detector.
Definition
BmnMCTrackCreator.cxx:94
BmnMCTrackCreator::fDchPoints
TClonesArray * fDchPoints
Definition
BmnMCTrackCreator.h:138
BmnMCTrackCreator::FairMCPointCoordinatesAndMomentumToBmnMCPoint
void FairMCPointCoordinatesAndMomentumToBmnMCPoint(const FairMCPoint *fairPoint, BmnMCPoint *bmnPoint)
Definition
BmnMCTrackCreator.cxx:145
BmnMCTrackCreator::fBmnMCTracks
std::map< Int_t, BmnMCTrack > fBmnMCTracks
Definition
BmnMCTrackCreator.h:146
BmnMCTrackCreator::fTof400Points
TClonesArray * fTof400Points
Definition
BmnMCTrackCreator.h:135
BmnMCTrackCreator::ReadDataBranches
void ReadDataBranches()
Read data branches.
Definition
BmnMCTrackCreator.cxx:81
BmnMCTrackCreator::fMCTracks
TClonesArray * fMCTracks
Definition
BmnMCTrackCreator.h:131
BmnMCTrackCreator::fTof700Points
TClonesArray * fTof700Points
Definition
BmnMCTrackCreator.h:136
BmnMCTrackCreator::fCscDetector
BmnCSCStationSet * fCscDetector
Definition
BmnMCTrackCreator.h:150
BmnMCTrackCreator::fGemDetector
BmnGemStripStationSet * fGemDetector
Definition
BmnMCTrackCreator.h:148
BmnMCTrackCreator::~BmnMCTrackCreator
virtual ~BmnMCTrackCreator()
Destructor.
Definition
BmnMCTrackCreator.cxx:43
BmnMCTrackCreator::fSilDetector
BmnSiliconStationSet * fSilDetector
Definition
BmnMCTrackCreator.h:149
BmnMCTrackCreator::fCscPoints
TClonesArray * fCscPoints
Definition
BmnMCTrackCreator.h:137
BmnMCTrackCreator::fNGemStations
Int_t fNGemStations
Definition
BmnMCTrackCreator.h:141
BmnMCTrackCreator::BmnMCTrackCreator
BmnMCTrackCreator(TString gem, TString sil, TString csc)
Constructor.
Definition
BmnMCTrackCreator.cxx:27
BmnMCTrackCreator::fSilPoints
TClonesArray * fSilPoints
Definition
BmnMCTrackCreator.h:132
BmnMCTrackCreator::Create
void Create()
Creates array of BmnMCTracks for current event.
Definition
BmnMCTrackCreator.cxx:56
BmnMCTrackCreator::Instance
static BmnMCTrackCreator * Instance(TString gem, TString sil, TString csc)
Singleton instance.
Definition
BmnMCTrackCreator.cxx:50
BmnMCTrackCreator::fNCscStations
Int_t fNCscStations
Definition
BmnMCTrackCreator.h:142
BmnMCTrackCreator::fNSiliconStations
Int_t fNSiliconStations
Definition
BmnMCTrackCreator.h:140
BmnMCTrackCreator::fGemPoints
TClonesArray * fGemPoints
Definition
BmnMCTrackCreator.h:134
BmnMCTrackCreator::fSsdPoints
TClonesArray * fSsdPoints
Definition
BmnMCTrackCreator.h:133
BmnSiliconStationSet
Definition
BmnSiliconStationSet.h:14
CbmMCTrack
CbmMCTrack.h.
Definition
CbmMCTrack.h:26
CbmMCTrack::GetPdgCode
Int_t GetPdgCode() const
Accessors.
Definition
CbmMCTrack.h:56
FairMCPoint
TClonesArray
TDatabasePDG::Instance
static TDatabasePDG * Instance()
TDatabasePDG::GetParticle
TParticlePDG * GetParticle(const char *name) const
TParticlePDG
TParticlePDG::Charge
Double_t Charge() const
TString
std
Definition
json.hpp:4446
QA
BmnMCTrackCreator.cxx
Generated on
for BmnRoot by
1.17.0