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

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

mise a jour compatibilites snapshot

File size: 4.7 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    registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk);
16    registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk);
17}
18
19  void elementBend::setDefaultValues()
20  {
21    defaultLabel_ = "bend";
22    angleDegDef_ = 0.0;
23    radiusDef_ = 1.0;
24    beta1Def_ = 0.0;
25    beta2Def_ = 0.0;
26    momentumDef_ = 0.0;
27  }
28
29  void elementBend::setDefaults()
30  {
31    label_ = defaultLabel_;
32    angleDeg_ = angleDegDef_;
33    radius_ = radiusDef_;
34    beta1_ = beta1Def_;
35    beta2_ = beta2Def_;
36    momentum_ = momentumDef_;
37  }
38
39 string* elementBend::getParametersString() const 
40 {
41   int compteur = -1;
42   parametersString_[++compteur] = mixedTools::intToString(nbParam_);
43   parametersString_[++compteur] = label_;
44   parametersString_[++compteur] = mixedTools::doubleToString( angleDeg_);
45   parametersString_[++compteur] = mixedTools::doubleToString(radius_);
46   parametersString_[++compteur] = mixedTools::doubleToString(momentum_);
47   parametersString_[++compteur] = mixedTools::doubleToString(aperture_);
48   parametersString_[++compteur] = mixedTools::doubleToString(beta1_);
49   parametersString_[++compteur] = mixedTools::doubleToString(beta2_);
50   if ( compteur != nbParam_ ) {
51     cerr << " elementBend::getParametersString() : ERROR nr pf parameters dosnt match " << endl;
52     return NULL;
53   }
54   return parametersString_;
55 }
56
57 double elementBend::getLenghtOfElement() const 
58{
59 return 1.0e2 * radius_ * angleDeg_ * DEG_TO_RADIANS; 
60}
61
62
63 void  elementBend::setParametersString(string* param)
64 {
65        if ( param == NULL )
66        {
67          cerr << "  elementBend::setParametersString parameters empty parameter set";
68          return;
69        }
70
71   int compteur = -1;
72   int nbparam = atoi(param[++compteur].c_str());
73    if ( nbparam != nbParam_ ) 
74        {
75          cerr << "  elementBend::setParametersString parameters do not match for a BEND" << endl;
76          return;
77        }
78    label_ = param[++compteur];
79    angleDeg_ =  atof(param[++compteur].c_str());
80    radius_ = atof(param[++compteur].c_str());
81    momentum_ = atof(param[++compteur].c_str());
82    aperture_  = atof(param[++compteur].c_str());
83    beta1_ = atof(param[++compteur].c_str());
84    beta2_ = atof(param[++compteur].c_str());
85    // calcul de la longueur : rayon en m ; longueur en cm
86    lenghtElem_ = getLenghtOfElement();
87    cout << " elementBend::setParametersString calcule longueur = " << lenghtElem_ << endl;
88 }
89
90string elementBend::parmelaOutputFlow() const
91  {
92    ostringstream sortie;
93    // il faut entrer l'energie cinetique
94    double ecin = momentum_/EREST_MeV;
95    ecin = ecin*ecin + 1.;
96    ecin = EREST_MeV*(sqrt(ecin) - 1.0);
97    sortie << "BEND /l=" << lenghtElem_ << "  / aper=" << aperture_ << "  / iout=1 / wr=" << ecin << " /alpha=" << angleDeg_ << " / beta1=" << beta1_;
98    sortie << " / beta2=" << beta1_  << endl;
99
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_ << ";" << endl;
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}
131
132
133string elementBend::print() {
134    string txt = "";
135
136    txt += label_;
137    txt += "\nangle (deg.) : ";
138    txt += mixedTools::doubleToString(angleDeg_);
139    txt += "\nradius (m) : ";
140    txt += mixedTools::doubleToString(radius_);
141    txt += "\nmomentum (MeV/c) : ";
142    txt += mixedTools::doubleToString(momentum_);
143    txt += "\nlength (cm) : ";
144    txt += mixedTools::doubleToString(lenghtElem_);
145    txt += "\naperture (cm) : ";
146    txt += mixedTools::doubleToString(aperture_);
147    txt += "\npole face rotations (deg.) entrance : ";
148    txt += mixedTools::doubleToString(beta1_);
149    txt += "\nexit : ";
150    txt += mixedTools::doubleToString(beta2_);
151   
152    return txt;
153}
Note: See TracBrowser for help on using the repository browser.