BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnMultiField.cxx
Go to the documentation of this file.
1
#include "
BmnMultiField.h
"
2
3
#include "
BmnFieldConst.h
"
4
#include "
BmnFieldMap.h
"
5
#include "
BmnMapPar.h
"
6
#include "
BmnMultiFieldPar.h
"
7
#include "
BmnRegion.h
"
8
#include "
TObjArray.h
"
9
10
#include <fstream>
11
#include <iomanip>
12
#include <iostream>
13
14
using namespace
std
;
15
16
// ------------- Default constructor ----------------------------------
17
BmnMultiField::BmnMultiField
()
18
{
19
20
fMaps
=
new
TObjArray
(10);
21
fNoOfMaps
= 0;
22
fType = 5;
23
}
24
25
// ------------ Constructor from MpdFieldPar --------------------------
26
BmnMultiField::BmnMultiField
(
BmnMultiFieldPar
* fieldPar)
27
{
28
fType = 5;
29
fMaps
=
new
TObjArray
(10);
30
fNoOfMaps
= 0;
31
TObjArray
* fArray = fieldPar->
GetParArray
();
32
if
(fArray->
IsEmpty
())
33
fType = -1;
34
}
35
36
// ------------ Destructor --------------------------------------------
37
BmnMultiField::~BmnMultiField
() {}
38
39
// ----------- Adding fields ------------------------------------------
40
void
BmnMultiField::AddField
(
FairField
* field)
41
{
42
43
if
(field) {
44
fMaps
->AddLast(field);
45
fNoOfMaps
++;
46
}
47
}
48
49
// ----------- Intialisation ------------------------------------------
50
void
BmnMultiField::Init
()
51
{
52
BmnFieldConst
* field = 0;
53
BmnFieldMap
* fieldMap = 0;
54
for
(
Int_t
n
= 0;
n
<=
fNoOfMaps
;
n
++) {
55
fieldMap =
dynamic_cast<
BmnFieldMap
*
>
(
fMaps
->At(
n
));
56
field =
dynamic_cast<
BmnFieldConst
*
>
(
fMaps
->At(
n
));
57
if
(fieldMap) {
58
fieldMap->
Init
();
59
fFieldMaps
.insert(
60
pair<BmnRegion*, FairField*>(
new
BmnRegion
(fieldMap->
GetZmin
(), fieldMap->
GetZmax
()), fieldMap));
61
}
else
if
(field) {
62
field->Init();
63
fFieldMaps
.insert(pair<BmnRegion*, FairField*>(
new
BmnRegion
(field->
GetZmin
(), field->
GetZmax
()), field));
64
}
65
}
66
}
67
68
// ----------- Get x component of the field ---------------------------
69
Double_t
BmnMultiField::GetBx
(
Double_t
x,
Double_t
y,
Double_t
z)
70
{
71
BmnRegion
* fReg = 0;
72
FairField
* fField = 0;
73
std::map<BmnRegion*, FairField*>::iterator fMapIter;
74
for
(fMapIter =
fFieldMaps
.begin(); fMapIter !=
fFieldMaps
.end(); fMapIter++) {
75
fReg = fMapIter->first;
76
if
(fReg->
IsInside
(z)) {
77
fField = fMapIter->second;
78
break
;
79
}
80
}
81
if
(fField)
82
return
fField->GetBx(x, y, z);
83
else
84
return
0;
85
}
86
87
// ----------- Get y component of the field ---------------------------
88
Double_t
BmnMultiField::GetBy
(
Double_t
x,
Double_t
y,
Double_t
z)
89
{
90
91
BmnRegion
* fReg = 0;
92
FairField
* fField = 0;
93
std::map<BmnRegion*, FairField*>::iterator fMapIter;
94
for
(fMapIter =
fFieldMaps
.begin(); fMapIter !=
fFieldMaps
.end(); fMapIter++) {
95
fReg = fMapIter->first;
96
if
(fReg->
IsInside
(z)) {
97
fField = fMapIter->second;
98
break
;
99
}
100
}
101
if
(fField)
102
return
fField->GetBy(x, y, z);
103
else
104
return
0;
105
}
106
107
// ----------- Get z component of the field ---------------------------
108
Double_t
BmnMultiField::GetBz
(
Double_t
x,
Double_t
y,
Double_t
z)
109
{
110
111
BmnRegion
* fReg = 0;
112
FairField
* fField = 0;
113
std::map<BmnRegion*, FairField*>::iterator fMapIter;
114
for
(fMapIter =
fFieldMaps
.begin(); fMapIter !=
fFieldMaps
.end(); fMapIter++) {
115
fReg = fMapIter->first;
116
if
(fReg->
IsInside
(z)) {
117
fField = fMapIter->second;
118
break
;
119
}
120
}
121
if
(fField)
122
return
fField->GetBz(x, y, z);
123
else
124
return
0;
125
}
126
127
//---------------------------------------------------------------------------
128
void
BmnMultiField::GetFieldValue
(
const
Double_t
point[3],
Double_t
* bField)
129
{
130
131
BmnRegion
* fReg = 0;
132
FairField
* fField = 0;
133
std::map<BmnRegion*, FairField*>::iterator fMapIter;
134
for
(fMapIter =
fFieldMaps
.begin(); fMapIter !=
fFieldMaps
.end(); fMapIter++) {
135
fReg = fMapIter->first;
136
if
(fReg->
IsInside
(point[2])) {
137
fField = fMapIter->second;
138
break
;
139
}
140
}
141
if
(fField) {
142
/* bField[0] = fField->GetBx(point[0], point[1], point[2]);
143
bField[1] = fField->GetBy(point[0], point[1], point[2]);
144
bField[2] = fField->GetBz(point[0], point[1], point[2]);
145
*/
146
fField->GetBxyz(point, bField);
147
}
else
{
148
bField[0] = 0;
149
bField[1] = 0;
150
bField[2] = 0;
151
}
152
}
153
154
// --------- Screen output --------------------------------------------
155
void
BmnMultiField::Print
(
Option_t
*)
const
156
{
157
for
(
Int_t
n
= 0;
n
<=
fNoOfMaps
;
n
++) {
158
FairField
* fieldMap =
dynamic_cast<
FairField
*
>
(
fMaps
->At(
n
));
159
if
(fieldMap)
160
fieldMap->Print(
""
);
161
}
162
}
Int_t
int Int_t
Double_t
double Double_t
Option_t
const char Option_t
TObjArray.h
BmnFieldConst
Definition
BmnFieldConst.h:17
BmnFieldConst::GetZmin
Double_t GetZmin() const
Definition
BmnFieldConst.h:75
BmnFieldConst::GetZmax
Double_t GetZmax() const
Definition
BmnFieldConst.h:76
BmnFieldMap
Definition
BmnFieldMap.h:22
BmnFieldMap::GetZmin
Double_t GetZmin() const
Definition
BmnFieldMap.h:70
BmnFieldMap::Init
virtual void Init()
Definition
BmnFieldMap.cxx:120
BmnFieldMap::GetZmax
Double_t GetZmax() const
Definition
BmnFieldMap.h:74
BmnMultiFieldPar
Definition
BmnMultiFieldPar.h:11
BmnMultiFieldPar::GetParArray
TObjArray * GetParArray()
Definition
BmnMultiFieldPar.h:30
BmnMultiField::fMaps
TObjArray * fMaps
Definition
BmnMultiField.h:44
BmnMultiField::GetBx
virtual Double_t GetBx(Double_t x, Double_t y, Double_t z)
Get the field components at a certain point.
Definition
BmnMultiField.cxx:69
BmnMultiField::~BmnMultiField
virtual ~BmnMultiField()
Destructor.
Definition
BmnMultiField.cxx:37
BmnMultiField::fFieldMaps
std::map< BmnRegion *, FairField * > fFieldMaps
Definition
BmnMultiField.h:46
BmnMultiField::fNoOfMaps
Int_t fNoOfMaps
Definition
BmnMultiField.h:45
BmnMultiField::Print
virtual void Print(Option_t *) const
Screen output.
Definition
BmnMultiField.cxx:155
BmnMultiField::Init
void Init()
Initialisation (read map from file).
Definition
BmnMultiField.cxx:50
BmnMultiField::AddField
void AddField(FairField *field)
Adding a field to the collection.
Definition
BmnMultiField.cxx:40
BmnMultiField::BmnMultiField
BmnMultiField()
Default constructor.
Definition
BmnMultiField.cxx:17
BmnMultiField::GetBy
virtual Double_t GetBy(Double_t x, Double_t y, Double_t z)
Definition
BmnMultiField.cxx:88
BmnMultiField::GetBz
virtual Double_t GetBz(Double_t x, Double_t y, Double_t z)
Definition
BmnMultiField.cxx:108
BmnMultiField::GetFieldValue
void GetFieldValue(const Double_t point[3], Double_t *bField)
Definition
BmnMultiField.cxx:128
BmnRegion
Definition
BmnRegion.h:6
BmnRegion::IsInside
Bool_t IsInside(Double_t Z)
Definition
BmnRegion.cxx:15
FairField
TObjArray
TObjArray::IsEmpty
Bool_t IsEmpty() const override
BmnFieldConst.h
BmnFieldMap.h
BmnMapPar.h
BmnMultiFieldPar.h
BmnMultiField.h
BmnRegion.h
n
*brief user defined string literal for JSON values *sa std::size_t n
Definition
json.hpp:20362
std
Definition
json.hpp:4446
field
BmnMultiField.cxx
Generated on
for BmnRoot by
1.17.0