source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc @ 488

Last change on this file since 488 was 488, checked in by lemeur, 10 years ago

lecture fichier sauvegarde AML

File size: 9.3 KB
Line 
1#include "elementCell.h"
2
3#include <iostream>
4
5#include "mathematicalTools.h"
6#include "mixedTools.h"
7
8
9elementCell::elementCell()  : abstractElement() 
10{
11  setDefaultValues();
12  setDefaults();
13  elementName_ = nomdElements("cell");
14  nbParam_ = elementName_.getElementNbParameters();
15  parametersString_ = new string[nbParam_+1];
16  //        registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
17}
18
19void elementCell::setDefaultValues()
20{
21  defaultSpecificName_ = "cell";
22  initialPhaseDef_ = 0.0;
23  acceleratingFieldDef_ = 1.0;
24  acceleratingShapeFileDef_ = "xxxxxxx";
25  focusingMagFileDef_ = "xxxxxx";
26  offsetMagDef_ = 0.0;
27  scaleFactorDef_ = 1.0;
28}
29
30void elementCell::setDefaults()
31{
32  specificName_ = defaultSpecificName_;
33  initialPhase_ = initialPhaseDef_;
34  acceleratingField_ = acceleratingFieldDef_;
35  acceleratingShapeFile_ = acceleratingShapeFileDef_;
36  focusingMagFile_ = focusingMagFileDef_;
37  offsetMag_ = offsetMagDef_;
38  scaleFactor_ = scaleFactorDef_;
39}
40
41string* elementCell::getParametersString() const 
42{
43  int compteur = -1;
44  parametersString_[++compteur] = mixedTools::intToString(nbParam_);
45  parametersString_[++compteur] = specificName_;
46  parametersString_[++compteur] = mixedTools::doubleToString(lenghtElem_);
47  parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
48  parametersString_[++compteur] = mixedTools::doubleToString(initialPhase_);
49  parametersString_[++compteur] = mixedTools::doubleToString( phaseStepMax_);
50  parametersString_[++compteur] = mixedTools::doubleToString(acceleratingField_);
51  parametersString_[++compteur] = acceleratingShapeFile_;
52  parametersString_[++compteur] = focusingMagFile_;
53  parametersString_[++compteur] = mixedTools::doubleToString(offsetMag_);
54  parametersString_[++compteur] = mixedTools::doubleToString(scaleFactor_);
55  if ( compteur != nbParam_ ) {
56    cerr << " elementCell::getParametersString() : ERROR nr pf parameters dosnt match " << endl;
57    return NULL;
58  }
59  return parametersString_;
60}
61
62void elementCell::setParametersString(string* param)
63{
64  if ( param == NULL ) {
65    cerr << "  elementCell::setParametersString parameters empty parameter set";
66    return;
67  }
68  int compteur = -1;
69  int nbparam = atoi(param[++compteur].c_str());
70  if ( nbparam != nbParam_ ) {
71    cerr << "  elementCell::setParametersString parameters do not match for a CELL";
72    return;
73  }
74 
75  specificName_ = param[++compteur];
76  lenghtElem_ = atof(param[++compteur].c_str());
77  aperture_ = atof(param[++compteur].c_str());
78  initialPhase_ = atof(param[++compteur].c_str());
79  phaseStepMax_ = atof(param[++compteur].c_str());
80  acceleratingField_ = atof(param[++compteur].c_str());
81  acceleratingShapeFile_ = param[++compteur];
82  focusingMagFile_ = param[++compteur];
83  offsetMag_ = atof(param[++compteur].c_str());
84  scaleFactor_ = atof(param[++compteur].c_str());
85}
86
87// string elementCell::parmelaOutputFlow() const
88//   {
89//     ostringstream sortie;
90//     sortie << "CELL /l=" << lenghtElem_ << "  /aper=" << aperture_ << endl;
91//     sortie << "  /iout=1  /phi0=" << initialPhase_ << " /E0=" << acceleratingField_ << endl;
92//     sortie << " /nc=1 /dwtmax=" << phaseStepMax_ << " /sym=-1" << endl;
93//     sortie << "CFIELD 1" << endl;
94//     sortie << acceleratingShapeFile_ << endl;
95//     if ( focusingMagFile_ != "") {
96//       sortie << "POISSON /zoff=" << offsetMag_ << " /rmult=" << scaleFactor_ << endl;
97//       sortie << focusingMagFile_ << endl;
98//     }
99
100//     return sortie.str();
101//   }
102
103
104// string elementCell::FileOutputFlow() const
105// {
106//   ostringstream sortie;
107//   //    sortie << elementName_.getElementType()  << endl;
108//   sortie << elementName_.getGenericLabel() << endl;
109//   sortie  << specificName_ << endl;
110//   sortie << lenghtElem_ << " " << aperture_ << endl;
111//   sortie << initialPhase_ << "  " << acceleratingField_ << endl;
112//   sortie << phaseStepMax_ << endl;
113//   sortie << acceleratingShapeFile_ << endl;
114//   sortie << focusingMagFile_ << endl;
115//   sortie << offsetMag_ << " " << scaleFactor_ << endl;
116//   return sortie.str();
117// }
118
119vector< pair<string, vector<string> > > elementCell::parametersToSoftware () const 
120{
121  vector< pair<string, vector<string> > >  sortie;
122  sortie.push_back( pair<string, vector<string> >("labelsGenericSpecific",  vector<string>() ) );
123  sortie.back().second.push_back(elementName_.getGenericLabel());
124  sortie.back().second.push_back(specificName_);
125  sortie.push_back( pair<string, vector<string> >("lenghtAperture",  vector<string>() ) );
126  sortie.back().second.push_back(mixedTools::doubleToString(lenghtElem_));
127  sortie.back().second.push_back(mixedTools::doubleToString( aperture_));
128  sortie.push_back( pair<string, vector<string> >("phaseInitialStepmax",  vector<string>() ) );
129  sortie.back().second.push_back(mixedTools::doubleToString( initialPhase_));
130  sortie.back().second.push_back(mixedTools::doubleToString( phaseStepMax_));
131  sortie.push_back( pair<string, vector<string> >("fieldValueFile",  vector<string>() ) );
132  sortie.back().second.push_back(mixedTools::doubleToString( acceleratingField_));
133  sortie.back().second.push_back(acceleratingShapeFile_);
134  sortie.push_back( pair<string, vector<string> >("MagFocusingFileOffsetScale",  vector<string>() ) );
135  sortie.back().second.push_back(focusingMagFile_);
136  sortie.back().second.push_back(mixedTools::doubleToString( offsetMag_));
137  sortie.back().second.push_back(mixedTools::doubleToString( scaleFactor_));
138 
139  return sortie;
140}
141
142// void elementCell::FileInput(ifstream& ifs)
143// {
144//   ifs >> specificName_;
145//   ifs >> lenghtElem_ >>  aperture_;
146//   ifs >> initialPhase_ >> acceleratingField_;
147//   ifs >> phaseStepMax_;
148//   ifs >> acceleratingShapeFile_;
149//   ifs >> focusingMagFile_;
150//   ifs >> offsetMag_ >> scaleFactor_;
151// }
152
153string elementCell::print() 
154{
155  string txt = "";
156  txt += specificName_;
157  txt += "\nlength (cm) : ";
158  txt += mixedTools::doubleToString(lenghtElem_);
159  txt += "\naperture (cm) : ";
160  txt += mixedTools::doubleToString(aperture_);
161  txt += "\ninitial phase (deg.) : ";
162  txt += mixedTools::doubleToString(initialPhase_);
163  txt += "\nmax phase step (deg.) : ";
164  txt += mixedTools::doubleToString(phaseStepMax_);
165  txt += "\nmax accelerating field (MV/m) : ";
166  txt += mixedTools::doubleToString(acceleratingField_);
167  txt += "\nname of file for field shape : ";
168  txt += acceleratingShapeFile_;
169  txt += "\nname of file for focusing mag. field : ";
170  txt += focusingMagFile_;
171  txt += "\n z-offset for mag. field : ";
172  txt += mixedTools::doubleToString(offsetMag_);
173  txt += "\n scaling factor for mag. field : ";
174  txt += mixedTools::doubleToString(scaleFactor_);
175  return txt;
176}
177
178void elementCell::InputRep(UAPNode* root)
179{
180  // UAPNode* ele = root->addChild("element");
181  // ele->addAttribute("name",specificName_);
182
183  UAPNode* ele = setAMLelementHeader(root);
184
185
186  UAPNode* node = ele->addChild("methods");
187  node->addChild("tracking")->addAttribute("value","parmela");
188
189  string txt = "";
190  txt = mixedTools::doubleToString(lenghtElem_);
191  ele->addChild("length")->addAttribute("design",txt);
192
193  node = ele->addChild("aperture");
194  node->addAttribute("at","ENTRANCE");
195  node->addAttribute("shape","CIRCLE");
196  txt = mixedTools::doubleToString(aperture_);
197  node->addChild("xy_limit")->addAttribute("design",txt);
198
199  node = ele->addChild("linac_cavity");
200  txt = mixedTools::doubleToString(initialPhase_);
201  node->addChild("phase0")->addAttribute("design",txt);
202  txt = mixedTools::doubleToString(acceleratingField_);
203  node->addChild("gradient")->addAttribute("design",txt);
204
205  // données propres à Parmela
206  ele->addChild("comment")->addAttribute("text","data specific to Parmela");
207  txt = mixedTools::doubleToString(phaseStepMax_);
208  ele->addChild("phaseStepMax")->addAttribute("value",txt);
209  txt = acceleratingShapeFile_;
210  ele->addChild("acceleratingShapeField")->addAttribute("name",txt);
211
212  if ( focusingMagFile_ != "") {
213    txt = focusingMagFile_;
214    ele->addChild("focusingMagneticField")->addAttribute("name",txt);
215    txt = mixedTools::doubleToString(offsetMag_);
216    ele->addChild("z_offset")->addAttribute("value",txt);
217    txt = mixedTools::doubleToString(scaleFactor_);
218    ele->addChild("scaling_factor")->addAttribute("value",txt);
219  }
220}
221
222
223void elementCell::FileAMLInput(UAPNode* entree) 
224{
225  if ( !checkAMLelementGenericName(entree) ) return;
226  AMLtools::readAMLParameterAttribut(entree, "length", "design", lenghtElem_);
227
228  UAPNode* ouverture = entree->getChildByName("aperture");
229  if ( !ouverture ) {
230    cout << " elementCell::FileAMLInput ERREUR pas de noeud AML <aperture>  " << endl;
231    return;
232  }
233  AMLtools::readAMLParameterAttribut(ouverture, "xy_limit", "design", aperture_);
234
235  UAPNode* cavite = entree->getChildByName("linac_cavity");
236  if ( !cavite ) {
237    cout << " elementCell::FileAMLInput ERREUR pas de noeud AML <linac_cavity>  " << endl;
238    return;
239  }
240
241  AMLtools::readAMLParameterAttribut(cavite, "phase0", "design", initialPhase_);
242  AMLtools::readAMLParameterAttribut(cavite, "gradient", "design", acceleratingField_);
243
244  AMLtools::readAMLParameterAttribut(entree, "phaseStepMax", "value", phaseStepMax_);
245  AMLtools::readAMLParameterAttribut(entree, "acceleratingShapeField", "name", acceleratingShapeFile_);
246  AMLtools::readAMLParameterAttribut(entree, "focusingMagneticField", "name", focusingMagFile_);
247  AMLtools::readAMLParameterAttribut(entree, "z_offset", "value", offsetMag_);
248  AMLtools::readAMLParameterAttribut(entree, "scaling_factor", "value", scaleFactor_);
249
250}
Note: See TracBrowser for help on using the repository browser.