BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
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
14using namespace std;
15
16// ------------- Default constructor ----------------------------------
18{
19
20 fMaps = new TObjArray(10);
21 fNoOfMaps = 0;
22 fType = 5;
23}
24
25// ------------ Constructor from MpdFieldPar --------------------------
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 --------------------------------------------
38
39// ----------- Adding fields ------------------------------------------
41{
42
43 if (field) {
44 fMaps->AddLast(field);
45 fNoOfMaps++;
46 }
47}
48
49// ----------- Intialisation ------------------------------------------
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 ---------------------------
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 ---------------------------
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 ---------------------------
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//---------------------------------------------------------------------------
128void 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 --------------------------------------------
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 Int_t
double Double_t
const char Option_t
Double_t GetZmin() const
Double_t GetZmax() const
Double_t GetZmin() const
Definition BmnFieldMap.h:70
virtual void Init()
Double_t GetZmax() const
Definition BmnFieldMap.h:74
TObjArray * GetParArray()
TObjArray * fMaps
virtual Double_t GetBx(Double_t x, Double_t y, Double_t z)
Get the field components at a certain point.
virtual ~BmnMultiField()
Destructor.
std::map< BmnRegion *, FairField * > fFieldMaps
virtual void Print(Option_t *) const
Screen output.
void Init()
Initialisation (read map from file).
void AddField(FairField *field)
Adding a field to the collection.
BmnMultiField()
Default constructor.
virtual Double_t GetBy(Double_t x, Double_t y, Double_t z)
virtual Double_t GetBz(Double_t x, Double_t y, Double_t z)
void GetFieldValue(const Double_t point[3], Double_t *bField)
Bool_t IsInside(Double_t Z)
Definition BmnRegion.cxx:15
Bool_t IsEmpty() const override
*brief user defined string literal for JSON values *sa std::size_t n
Definition json.hpp:20362
Definition json.hpp:4446