BmnRoot
Loading...
Searching...
No Matches
BmnMultiField.cxx
Go to the documentation of this file.
1#include <iomanip>
2#include <iostream>
3#include <fstream>
4
5#include "BmnMultiField.h"
6#include "BmnRegion.h"
7#include "BmnFieldConst.h"
8#include "BmnFieldMap.h"
9#include "TObjArray.h"
10#include "BmnMapPar.h"
11#include "BmnMultiFieldPar.h"
12
13
14using namespace std;
15
16// ------------- Default constructor ----------------------------------
18
19 fMaps= new TObjArray(10);
20 fNoOfMaps=0;
21 fType = 5;
22}
23
24// ------------ Constructor from MpdFieldPar --------------------------
26 fType = 5;
27 fMaps= new TObjArray(10);
28 fNoOfMaps=0;
29 TObjArray *fArray= fieldPar->GetParArray();
30 if(fArray->IsEmpty()) fType=-1;
31}
32
33// ------------ Destructor --------------------------------------------
35
36// ----------- Adding fields ------------------------------------------
37void BmnMultiField::AddField(FairField *field) {
38
39 if(field){
40 fMaps->AddLast(field);
41 fNoOfMaps++;
42 }
43}
44
45// ----------- Intialisation ------------------------------------------
47 BmnFieldConst *field=0;
48 BmnFieldMap *fieldMap=0;
49 for (Int_t n=0; n<=fNoOfMaps; n++){
50 fieldMap = dynamic_cast<BmnFieldMap *>(fMaps->At(n));
51 field = dynamic_cast<BmnFieldConst *>(fMaps->At(n));
52 if(fieldMap){
53 fieldMap->Init();
54 fFieldMaps.insert( pair<BmnRegion*, FairField*>(new BmnRegion(fieldMap->GetZmin(),fieldMap->GetZmax()) , fieldMap ));
55 }else if(field){
56 field->Init();
57 fFieldMaps.insert( pair<BmnRegion*, FairField*>(new BmnRegion(field->GetZmin(),field->GetZmax() ), field ));
58 }
59 }
60}
61
62// ----------- Get x component of the field ---------------------------
63Double_t BmnMultiField::GetBx(Double_t x, Double_t y, Double_t z) {
64 BmnRegion *fReg=0;
65 FairField *fField=0;
66 std::map <BmnRegion*, FairField* >::iterator fMapIter;
67 for (fMapIter=fFieldMaps.begin(); fMapIter!= fFieldMaps.end();fMapIter++ ){
68 fReg=fMapIter->first;
69 if(fReg->IsInside(z)){
70 fField=fMapIter->second;
71 break;
72 }
73 }
74 if(fField) return fField->GetBx( x, y, z);
75 else return 0;
76}
77
78// ----------- Get y component of the field ---------------------------
79Double_t BmnMultiField::GetBy(Double_t x, Double_t y, Double_t z) {
80
81 BmnRegion *fReg=0;
82 FairField *fField=0;
83 std::map <BmnRegion*, FairField* >::iterator fMapIter;
84 for (fMapIter=fFieldMaps.begin(); fMapIter!= fFieldMaps.end();fMapIter++ ){
85 fReg=fMapIter->first;
86 if(fReg->IsInside(z)){
87 fField=fMapIter->second;
88 break;
89 }
90 }
91 if(fField) return fField->GetBy( x, y, z);
92 else return 0;
93}
94
95// ----------- Get z component of the field ---------------------------
96Double_t BmnMultiField::GetBz(Double_t x, Double_t y, Double_t z) {
97
98 BmnRegion *fReg=0;
99 FairField *fField=0;
100 std::map <BmnRegion*, FairField* >::iterator fMapIter;
101 for (fMapIter=fFieldMaps.begin(); fMapIter!= fFieldMaps.end();fMapIter++ ){
102 fReg=fMapIter->first;
103 if(fReg->IsInside(z)){
104 fField=fMapIter->second;
105 break;
106 }
107 }
108 if(fField) return fField->GetBz( x, y, z);
109 else return 0;
110}
111
112//---------------------------------------------------------------------------
113void BmnMultiField::GetFieldValue(const Double_t point[3], Double_t* bField)
114{
115
116 BmnRegion *fReg=0;
117 FairField *fField=0;
118 std::map <BmnRegion*, FairField* >::iterator fMapIter;
119 for (fMapIter=fFieldMaps.begin(); fMapIter!= fFieldMaps.end();fMapIter++ ){
120 fReg=fMapIter->first;
121 if(fReg->IsInside(point[2])){
122 fField=fMapIter->second;
123 break;
124 }
125 }
126 if(fField){
127 /* bField[0] = fField->GetBx(point[0], point[1], point[2]);
128 bField[1] = fField->GetBy(point[0], point[1], point[2]);
129 bField[2] = fField->GetBz(point[0], point[1], point[2]);
130 */
131 fField->GetBxyz(point, bField);
132 }
133 else{
134 bField[0] = 0;
135 bField[1] = 0;
136 bField[2] = 0;
137 }
138}
139
140// --------- Screen output --------------------------------------------
141void BmnMultiField::Print(Option_t*) const{
142 for (Int_t n=0; n<=fNoOfMaps; n++){
143 FairField *fieldMap = dynamic_cast<FairField *>(fMaps->At(n));
144 if(fieldMap) fieldMap->Print("");
145 }
146}
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)
virtual ~BmnMultiField()
std::map< BmnRegion *, FairField * > fFieldMaps
virtual void Print(Option_t *) const
void AddField(FairField *field)
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
STL namespace.