FairRoot/PandaRoot
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
PndMultiField Class Reference

#include <PndMultiField.h>

Inheritance diagram for PndMultiField:

Public Member Functions

 PndMultiField ()
 
 PndMultiField (TString Map, Double_t BeamMom=-1.)
 
 PndMultiField (PndMultiFieldPar *fieldPar)
 
virtual ~PndMultiField ()
 
void Init ()
 
void AddField (FairField *field)
 
TObjArray * GetFieldList ()
 
void FillParContainer ()
 
virtual void Print ()
 
void GetFieldValue (const Double_t point[3], Double_t *bField)
 

Protected Attributes

TObjArray * fMaps
 
Int_t fNoOfMaps
 
std::map< PndRegion
*, FairField * > 
fFieldMaps
 
std::map< PndRegion
*, FairField * >::iterator 
fMapIter
 
Double_t fBeamMom
 

Private Member Functions

 PndMultiField (const PndMultiField &field)
 
PndMultiFieldoperator= (const PndMultiField &)
 

Detailed Description

Definition at line 23 of file PndMultiField.h.

Constructor & Destructor Documentation

PndMultiField::PndMultiField ( )

Default constructor

Definition at line 36 of file PndMultiField.cxx.

37  : fMaps(new TObjArray(10)), fNoOfMaps(0), fFieldMaps(), fMapIter(), fBeamMom(0.)
38 {
39  fType = 5;
40 }
TObjArray * fMaps
Definition: PndMultiField.h:61
std::map< PndRegion *, FairField * >::iterator fMapIter
Definition: PndMultiField.h:68
Double_t fBeamMom
Definition: PndMultiField.h:69
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67
PndMultiField::PndMultiField ( TString  Map,
Double_t  BeamMom = -1. 
)

Definition at line 44 of file PndMultiField.cxx.

References AddField(), fBeamMom, fRun, map_d1, map_d2, map_s1, map_s2, map_s3, map_s4, and map_t.

45  : fMaps(new TObjArray(10)), fNoOfMaps(0), fFieldMaps(), fMapIter(), fBeamMom(BeamMom)
46 {
47  fType = 5;
48  if (BeamMom<0.)
49  {
50  FairRunSim *fRun= FairRunSim::Instance();
51  if(fRun) fBeamMom= fRun->GetBeamMom();
52  }
53 
54  Map.ToUpper();
55 
56  if (Map=="FULL") {
57 
58  PndTransMap *map_t= new PndTransMap("TransMap", "R", fBeamMom);
59  PndDipoleMap *map_d1= new PndDipoleMap("DipoleMap1", "R", fBeamMom);
60  PndDipoleMap *map_d2= new PndDipoleMap("DipoleMap2", "R", fBeamMom);
61  PndSolenoidMap *map_s1= new PndSolenoidMap("SolenoidMap1", "R");
62  PndSolenoidMap *map_s2= new PndSolenoidMap("SolenoidMap2", "R");
63  PndSolenoidMap *map_s3= new PndSolenoidMap("SolenoidMap3", "R");
64  PndSolenoidMap *map_s4= new PndSolenoidMap("SolenoidMap4", "R");
65 
66  AddField(map_t);
67  AddField(map_d1);
68  AddField(map_d2);
69  AddField(map_s1);
70  AddField(map_s2);
71  AddField(map_s3);
72  AddField(map_s4);
73 
74  }
75 
76  else if (Map=="AUTO") {
77  PndDipoleMap *map_d1= new PndDipoleMap("DipoleMap1", "R", fBeamMom);
78  PndDipoleMap *map_d2= new PndDipoleMap("DipoleMap2", "R", fBeamMom);
79 
85 
86  if(fBeamMom >= 3.0) {
87  map_t= new PndTransMap("TransMap", "R", fBeamMom);
88  map_s1= new PndSolenoidMap("SolenoidMap1", "R");
89  map_s2= new PndSolenoidMap("SolenoidMap2", "R");
90  map_s3= new PndSolenoidMap("SolenoidMap3", "R");
91  map_s4= new PndSolenoidMap("SolenoidMap4", "R");
92  }
93  else {
94  map_t= new PndTransMap("TransMap_Half", "R", fBeamMom);
95  map_s1= new PndSolenoidMap("SolenoidMap_Half1", "R");
96  map_s2= new PndSolenoidMap("SolenoidMap_Half2", "R");
97  map_s3= new PndSolenoidMap("SolenoidMap_Half3", "R");
98  map_s4= new PndSolenoidMap("SolenoidMap_Half4", "R");
99  }
100 
101  AddField(map_t);
102  AddField(map_d1);
103  AddField(map_d2);
104  AddField(map_s1);
105  AddField(map_s2);
106  AddField(map_s3);
107  AddField(map_s4);
108  }
109 
110  else if (Map=="HALF") {
111  PndTransMap *map_t= new PndTransMap("TransMap_Half", "R", fBeamMom);
112  PndDipoleMap *map_d1= new PndDipoleMap("DipoleMap1", "R", fBeamMom);
113  PndDipoleMap *map_d2= new PndDipoleMap("DipoleMap2", "R", fBeamMom);
114  PndSolenoidMap *map_s1= new PndSolenoidMap("SolenoidMap_Half1", "R");
115  PndSolenoidMap *map_s2= new PndSolenoidMap("SolenoidMap_Half2", "R");
116  PndSolenoidMap *map_s3= new PndSolenoidMap("SolenoidMap_Half3", "R");
117  PndSolenoidMap *map_s4= new PndSolenoidMap("SolenoidMap_Half4", "R");
118 
119  AddField(map_t);
120  AddField(map_d1);
121  AddField(map_d2);
122  AddField(map_s1);
123  AddField(map_s2);
124  AddField(map_s3);
125  AddField(map_s4);
126 
127  }
128 
129 
130  else if (Map=="DIPOLE") {
131  PndDipoleMap *map_d1= new PndDipoleMap("DipoleMap1", "R", fBeamMom);
132  PndDipoleMap *map_d2= new PndDipoleMap("DipoleMap2", "R", fBeamMom);
133 
134  AddField(map_d1);
135  AddField(map_d2);
136 
137  }else if (Map=="SOLENOID") {
138 
139  PndSolenoidMap *map_s1= new PndSolenoidMap("SolenoidMap1", "R");
140  PndSolenoidMap *map_s2= new PndSolenoidMap("SolenoidMap2", "R");
141  PndSolenoidMap *map_s3= new PndSolenoidMap("SolenoidMap3", "R");
142  PndSolenoidMap *map_s4= new PndSolenoidMap("SolenoidMap4", "R");
143 
144  AddField(map_s1);
145  AddField(map_s2);
146  AddField(map_s3);
147  AddField(map_s4);
148  }
149  else if (Map=="SOLENOID_HALF") {
150 
151 
152  PndSolenoidMap *map_s1= new PndSolenoidMap("SolenoidMap_Half1", "R");
153  PndSolenoidMap *map_s2= new PndSolenoidMap("SolenoidMap_Half2", "R");
154  PndSolenoidMap *map_s3= new PndSolenoidMap("SolenoidMap_Half3", "R");
155  PndSolenoidMap *map_s4= new PndSolenoidMap("SolenoidMap_Half4", "R");
156 
157  AddField(map_s1);
158  AddField(map_s2);
159  AddField(map_s3);
160  AddField(map_s4);
161  }
162 
163 
164 
165 }
TObjArray * fMaps
Definition: PndMultiField.h:61
std::map< PndRegion *, FairField * >::iterator fMapIter
Definition: PndMultiField.h:68
Double_t fBeamMom
Definition: PndMultiField.h:69
PndDipoleMap * map_d2
Definition: sim_hit_emc.C:111
PndSolenoidMap * map_s1
Definition: sim_hit_emc.C:112
FairRunAna * fRun
Definition: hit_dirc.C:58
PndSolenoidMap * map_s3
Definition: sim_hit_emc.C:114
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67
PndSolenoidMap * map_s2
Definition: sim_hit_emc.C:113
void AddField(FairField *field)
PndDipoleMap * map_d1
Definition: sim_hit_emc.C:110
PndTransMap * map_t
Definition: sim_hit_emc.C:109
PndSolenoidMap * map_s4
Definition: sim_hit_emc.C:115
PndMultiField::PndMultiField ( PndMultiFieldPar fieldPar)

Constructor from PndFieldPar

Definition at line 173 of file PndMultiField.cxx.

References PndMultiFieldPar::GetParArray().

174  : fMaps( new TObjArray(10)), fNoOfMaps(0), fFieldMaps(), fMapIter(), fBeamMom(0.)
175 {
176  fType = 5;
177  TObjArray *fArray= fieldPar->GetParArray();
178  if(fArray->IsEmpty()) fType=-1;
179 
180 }
TObjArray * fMaps
Definition: PndMultiField.h:61
std::map< PndRegion *, FairField * >::iterator fMapIter
Definition: PndMultiField.h:68
Double_t fBeamMom
Definition: PndMultiField.h:69
TObjArray * GetParArray()
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67
PndMultiField::~PndMultiField ( )
virtual

Destructor

Definition at line 190 of file PndMultiField.cxx.

References fMaps.

190  {
191 
192  //printf("PndMultiField::~PndMultiField() \n");
193  fMaps->Delete();
194  delete fMaps;
195 
196 }
TObjArray * fMaps
Definition: PndMultiField.h:61
PndMultiField::PndMultiField ( const PndMultiField field)
private

Definition at line 183 of file PndMultiField.cxx.

183  : FairField(), fMaps(field.fMaps), fNoOfMaps(field.fNoOfMaps), fFieldMaps(field.fFieldMaps), fMapIter(field.fMapIter), fBeamMom(field.fBeamMom)
184 {
185  fType = field.fType;
186 }
TObjArray * fMaps
Definition: PndMultiField.h:61
std::map< PndRegion *, FairField * >::iterator fMapIter
Definition: PndMultiField.h:68
Double_t fBeamMom
Definition: PndMultiField.h:69
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67

Member Function Documentation

void PndMultiField::AddField ( FairField *  field)

Adding a field to the collection

Definition at line 199 of file PndMultiField.cxx.

References fMaps, and fNoOfMaps.

Referenced by PndFieldCreator::createFairField(), emc(), gem_urqmd_sim(), PndMultiField(), QAmacro_mdt_1(), run0AllSysDPMbkg(), run_sim(), run_sim_tpcmvd(), runGeaneTestSimBox(), runGemSim(), runLumi0DPMbkg(), runLumiSimBox(), runMC(), runsim(), sim_emc_test(), sim_gg(), sim_muo_test(), and visualize_fieldmaps().

199  {
200 
201  if(field){
202  fMaps->AddLast(field);
203  fNoOfMaps++;
204  }
205 
206 }
TObjArray * fMaps
Definition: PndMultiField.h:61
void PndMultiField::FillParContainer ( )

Definition at line 239 of file PndMultiField.cxx.

References fRun, Par, rtdb, and PndMultiFieldPar::SetParameters().

239  {
240 // for (Int_t n=0; n<=fNoOfMaps; n++){
241 // FairField *fieldMap = dynamic_cast<FairField *>(fMaps->At(n));
242 // if(fieldMap) fieldMap->FillParContainer();
243 // }
244  FairRun *fRun=FairRun::Instance();
245  FairRuntimeDb *rtdb=fRun->GetRuntimeDb();
246  //Bool_t kParameterMerged=kTRUE;
247  PndMultiFieldPar* Par = (PndMultiFieldPar*) rtdb->getContainer("PndMultiFieldPar");
248  Par->SetParameters(this);
249  Par->setInputVersion(fRun->GetRunId(),1);
250  Par->setChanged();
251 
252 
253 
254 }
void SetParameters(FairField *field)
FairRunAna * fRun
Definition: hit_dirc.C:58
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
PndMultiFieldPar * Par
Definition: sim_emc_apd.C:115
TObjArray* PndMultiField::GetFieldList ( )
inline

Definition at line 46 of file PndMultiField.h.

References fMaps.

Referenced by PndFieldPar::SetParameters(), and PndMultiFieldPar::SetParameters().

46 {return fMaps; }
TObjArray * fMaps
Definition: PndMultiField.h:61
void PndMultiField::GetFieldValue ( const Double_t  point[3],
Double_t bField 
)

Get magnetic field. For use of GEANT3

Parameters
pointCoordinates [cm]
bField(return) Field components [kG]

Definition at line 257 of file PndMultiField.cxx.

References fField, fFieldMaps, fMapIter, and PndRegion::IsInside().

Referenced by DrawField(), MakeHoughParabolaFitwithBfield(), PlotMCTracksPrintBField(), and visualize_fieldmaps().

258 {
259 
260  PndRegion *fReg=0;
261  FairField *fField=0;
262  for (fMapIter=fFieldMaps.begin(); fMapIter!= fFieldMaps.end();fMapIter++ ){
263  fReg=fMapIter->first;
264  if(fReg->IsInside(point[2])){
265  fField=fMapIter->second;
266  break;
267  }
268  }
269  if(fField){
270  fField->GetBxyz(point, bField);
271  }else{
272  bField[0] = 0;
273  bField[1] = 0;
274  bField[2] = 0;
275 
276  }
277 }
PndMultiField * fField
Definition: sim_emc_apd.C:97
std::map< PndRegion *, FairField * >::iterator fMapIter
Definition: PndMultiField.h:68
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67
Bool_t IsInside(Double_t Z)
Definition: PndRegion.cxx:20
PndSdsMCPoint * point
Definition: anaLmdCluster.C:72
void PndMultiField::Init ( )

Initialisation (read map from file)

Definition at line 209 of file PndMultiField.cxx.

References fFieldMaps, fMaps, fNoOfMaps, PndConstField::GetZmax(), PndFieldMap::GetZmax(), PndConstField::GetZmin(), PndFieldMap::GetZmin(), PndFieldMap::Init(), and n.

Referenced by PndFieldCreator::createFairField(), DrawField(), plotTrackCands(), and visualize_fieldmaps().

209  {
210  PndConstField *field=0;
211  PndFieldMap *fieldMap=0;
212  for (Int_t n=0; n<=fNoOfMaps; n++){
213  fieldMap = dynamic_cast<PndFieldMap *>(fMaps->At(n));
214  field = dynamic_cast<PndConstField *>(fMaps->At(n));
215  if(fieldMap){
216  fieldMap->Init();
217  fFieldMaps.insert( pair<PndRegion*, FairField*>(new PndRegion(fieldMap->GetZmin(),fieldMap->GetZmax()) , fieldMap ));
218  }else if(field){
219  field->Init();
220  fFieldMaps.insert( pair<PndRegion*, FairField*>(new PndRegion(field->GetZmin(),field->GetZmax() ), field ));
221  }
222  }
223 
224 }
Double_t GetZmin() const
Definition: PndFieldMap.h:90
TObjArray * fMaps
Definition: PndMultiField.h:61
virtual void Init()
int n
Double_t GetZmax() const
Definition: PndConstField.h:91
Double_t GetZmin() const
Definition: PndConstField.h:90
std::map< PndRegion *, FairField * > fFieldMaps
Definition: PndMultiField.h:67
Double_t GetZmax() const
Definition: PndFieldMap.h:93
PndMultiField& PndMultiField::operator= ( const PndMultiField )
inlineprivate

Definition at line 61 of file PndMultiField.h.

61 {return *this;};
void PndMultiField::Print ( )
virtual

Screen output

Definition at line 227 of file PndMultiField.cxx.

References fMaps, fNoOfMaps, and n.

227  {
228  for (Int_t n=0; n<=fNoOfMaps; n++){
229  FairField *fieldMap = dynamic_cast<FairField *>(fMaps->At(n));
230  if(fieldMap) fieldMap->Print("");
231  }
232 }
TObjArray * fMaps
Definition: PndMultiField.h:61
int n

Member Data Documentation

Double_t PndMultiField::fBeamMom
protected

Definition at line 69 of file PndMultiField.h.

Referenced by PndMultiField().

std::map<PndRegion*, FairField* > PndMultiField::fFieldMaps
protected

Definition at line 67 of file PndMultiField.h.

Referenced by GetFieldValue(), and Init().

std::map<PndRegion*, FairField* >::iterator PndMultiField::fMapIter
protected

Definition at line 68 of file PndMultiField.h.

Referenced by GetFieldValue().

TObjArray* PndMultiField::fMaps
protected

Definition at line 61 of file PndMultiField.h.

Referenced by AddField(), GetFieldList(), Init(), Print(), and ~PndMultiField().

Int_t PndMultiField::fNoOfMaps
protected

Definition at line 66 of file PndMultiField.h.

Referenced by AddField(), Init(), and Print().


The documentation for this class was generated from the following files: