source: PSPA/Interface_Web/trunk/pspaWT/src/elementBend.cc @ 256

Last change on this file since 256 was 243, checked in by lemeur, 11 years ago

rationalisation pour introduire nouveau logiciel

File size: 4.0 KB
Line 
1#include "elementBend.h"
2#include "mixedTools.h"
3#include "mathematicalConstants.h"
4#include "PhysicalConstants.h"
5elementBend::elementBend() :  abstractElement() 
6{
7  setDefaultValues();
8  setDefaults();
9  elementName_ = nomdElements("bend");
10  nbParam_ = elementName_.getElementNbParameters();
11  parametersString_ = new string[nbParam_+1];
12  // transportOk_ = true;
13  // parmelaOk_ = true;
14}
15
16  void elementBend::setDefaultValues()
17  {
18    angleDegDef_ = 0.0;
19    radiusDef_ = 1.0;
20    beta1Def_ = 0.0;
21    beta2Def_ = 0.0;
22    momentumDef_ = 0.0;
23  }
24
25  void elementBend::setDefaults()
26  {
27    angleDeg_ = angleDegDef_;
28    radius_ = radiusDef_;
29    beta1_ = beta1Def_;
30    beta2_ = beta2Def_;
31    momentum_ = momentumDef_;
32  }
33
34 string* elementBend::getParametersString() const 
35 {
36   int compteur = -1;
37   parametersString_[++compteur] = mixedTools::intToString(nbParam_);
38   parametersString_[++compteur] = label_;
39   parametersString_[++compteur] = mixedTools::doubleToString( angleDeg_);
40   parametersString_[++compteur] = mixedTools::doubleToString(radius_);
41   parametersString_[++compteur] = mixedTools::doubleToString(momentum_);
42   parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
43   parametersString_[++compteur] = mixedTools::doubleToString(beta1_);
44   parametersString_[++compteur] = mixedTools::doubleToString(beta2_);
45   if ( compteur != nbParam_ ) {
46     cerr << " elementBend::getParametersString() : ERROR nr pf parameters dosnt match " << endl;
47     return NULL;
48   }
49   return parametersString_;
50 }
51
52 double elementBend::getLenghtOfElement() const 
53{
54 return 1.0e2 * radius_ * angleDeg_ * DEG_TO_RADIANS; 
55}
56
57trivaluedBool elementBend::is_accepted_by_software(nomDeLogiciel soft) const {
58  if ( soft == nomDeLogiciel::transport  ) return ok;
59  else if ( soft == nomDeLogiciel::parmela ) return ok;
60  else return error;
61}
62
63
64 void  elementBend::setParametersString(string* param)
65 {
66        if ( param == NULL )
67        {
68          cerr << "  elementBend::setParametersString parameters empty parameter set";
69          return;
70        }
71
72   int compteur = -1;
73   int nbparam = atoi(param[++compteur].c_str());
74    if ( nbparam != nbParam_ ) 
75        {
76          cerr << "  elementBend::setParametersString parameters do not match for a BEND" << endl;
77          return;
78        }
79    label_ = param[++compteur];
80    angleDeg_ =  atof(param[++compteur].c_str());
81    radius_ = atof(param[++compteur].c_str());
82    momentum_ = atof(param[++compteur].c_str());
83    aperture_  = atof(param[++compteur].c_str());
84    beta1_ = atof(param[++compteur].c_str());
85    beta2_ = atof(param[++compteur].c_str());
86    // calcul de la longueur : rayon en m ; longueur en cm
87    lenghtElem_ = getLenghtOfElement();
88    cout << " elementBend::setParametersString calcule longueur = " << lenghtElem_ << endl;
89 }
90
91string elementBend::parmelaOutputFlow() const
92  {
93    ostringstream sortie;
94    // il faut entrer l'energie cinetique
95    double ecin = momentum_/ERESTMeV;
96    ecin = ecin*ecin + 1.;
97    ecin = ERESTMeV*(sqrt(ecin) - 1.0);
98    sortie << "BEND /l=" << lenghtElem_ << "  / aper=" << aperture_ << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_;
99    sortie << " / beta2=" << beta1_;
100    return sortie.str();
101  }
102
103
104string elementBend::transportOutputFlow() const
105  {
106    ostringstream sortie;
107    sortie << label_ << ":" << "  SBEND, RADIUS=" << radius_ << ", ANGLE=" << angleDeg_ << ", E1=" << beta1_ << ", E2=" << beta2_ << ";";
108    return sortie.str();
109  }
110
111
112string elementBend::FileOutputFlow() const
113  {
114    ostringstream sortie;
115    //    sortie << elementName_.getElementType() << endl;
116    sortie << elementName_.getElementLabel() << endl;
117    sortie  << label_ << endl;
118    sortie << angleDeg_ << "  " << radius_ << " " <<  aperture_  << endl;
119    sortie << beta1_ << "  " << beta2_ << " " << momentum_ << endl;
120    return sortie.str();
121  }
122
123void elementBend::FileInput(ifstream& ifs)
124{
125  ifs >> label_;
126  ifs >> angleDeg_ >> radius_ >>  aperture_;
127  ifs >> beta1_ >> beta2_ >> momentum_;
128    lenghtElem_ = getLenghtOfElement();
129    cout << " elementBend::FileInput calcule longueur = " << lenghtElem_ << endl;
130}
Note: See TracBrowser for help on using the repository browser.