/
PndMultiFieldPar.cxx
124 lines (111 loc) · 3.75 KB
/
PndMultiFieldPar.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "PndMultiFieldPar.h"
#include "PndMultiFieldPar.h"
#include "PndConstField.h"
#include "PndConstPar.h"
#include "PndDipoleMap.h"
#include "PndSolenoidMap.h"
#include "PndDipolePar.h"
#include "PndSolenoidPar.h"
#include "PndTransPar.h"
#include "PndTransMap.h"
#include "FairParamList.h"
#include "PndMapPar.h"
#include "FairRuntimeDb.h"
#include "FairRun.h"
// ------ Constructor --------------------------------------------------
PndMultiFieldPar::PndMultiFieldPar(const char* name, const char* title, const char* context)
: PndMapPar(name, title, context), fParArray()
{
fParArray=new TObjArray();
}
PndMultiFieldPar::PndMultiFieldPar()
: PndMapPar(), fParArray()
{
}
PndMultiFieldPar::~PndMultiFieldPar() { }
void PndMultiFieldPar::putParams(FairParamList* list)
{
if ( ! list ) return;
list->addObject("List of Field par", fParArray);
list->add("Field Type", fType);
}
Bool_t PndMultiFieldPar::getParams(FairParamList* l)
{
if (!l->fillObject("list of fields Par",fParArray))return kFALSE;
if ( ! l->fill("Field Type", &fType) ) return kFALSE;
return kTRUE;
}
void PndMultiFieldPar:: SetParameters(FairField* field)
{
fType=5;
FairRuntimeDb *rtdb=FairRuntimeDb::instance();
FairRun *fRun= FairRun::Instance();
PndMultiField *fmField = (PndMultiField *)field;
TObjArray *fArray=fmField->GetFieldList();
TIterator *Iter=fArray->MakeIterator();
Iter->Reset();
FairField* fField = NULL;
Int_t Type=-1;
while( (fField = (FairField*)Iter->Next() ) ) {
Type=fField->GetType();
if(Type==0){
PndConstField *fc= (PndConstField *)fField;
PndConstPar *cp = (PndConstPar*) rtdb->getContainer("PndConstPar");
cp->SetParameters(fc);
cp->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(cp);
}
if(Type==1){
}
if(Type==2){
PndSolenoidMap *fs= (PndSolenoidMap *)fField;
if (PndSolenoidMap::fNumberOfRegions==1){
PndSolenoidPar* cs = (PndSolenoidPar*) rtdb->getContainer("PndSolenoidPar");
cs->SetParameters(fs);
cs->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(cs);
}else{
TString contN1="PndSolenoid";
TString contN3="Par";
char NO[1];
sprintf(NO,"%d",fs->GetRegionNo());
TString contN2=contN1+NO;
TString contName=contN2+contN3;
// cout << "------"<< "PndMultiFieldPar:: SetParameters(FairField* field) " << contName << endl;
PndMapPar* cs = (PndMapPar*) rtdb->getContainer(contName.Data());
cs->SetParameters(fs);
cs->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(cs);
}
}
if(Type==3){
PndDipoleMap *fd= (PndDipoleMap *)fField;
if (PndDipoleMap::fNumberOfRegions==1){
PndDipolePar* cs = (PndDipolePar*) rtdb->getContainer("PndDipolePar");
cs->SetParameters(fd);
cs->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(cs);
}else{
TString contN1="PndDipole";
TString contN3="Par";
char NO[1];
sprintf(NO,"%d",fd->GetRegionNo());
TString contN2=contN1+NO;
TString contName=contN2+contN3;
PndMapPar* cs = (PndMapPar*) rtdb->getContainer(contName.Data());
cs->SetParameters(fd);
cs->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(cs);
}
}
if(Type==4){
PndTransMap *ft= (PndTransMap *)fField;
PndTransPar* ct = (PndTransPar*) rtdb->getContainer("PndTransPar");
ct->SetParameters(ft);
ct->setInputVersion(fRun->GetRunId(),1);
fParArray->AddLast(ct);
}
}
delete Iter;
}
ClassImp(PndMultiFieldPar)