source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc @ 356

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

bugs dans les dessins

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