source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/beam2Moments.cc @ 482

Last change on this file since 482 was 482, checked in by touze, 10 years ago

maj dans le fichier d'appel de madx

File size: 8.1 KB
Line 
1#include "beam2Moments.h"
2#include <sstream>
3
4
5beam2Moments::beam2Moments() {
6    initializeMoments();
7}
8
9beam2Moments::~beam2Moments() {;}
10
11beam2Moments::beam2Moments( beam2Moments& tm) {
12    rij_secondOrderMoments_ = tm.rij_secondOrderMoments_;
13}
14
15beam2Moments::beam2Moments( const beam2Moments& tm) {
16    rij_secondOrderMoments_ = tm.rij_secondOrderMoments_;
17}
18
19beam2Moments::beam2Moments(double x, double xp, double y, double yp, double dl, double del) {
20    initializeMoments();
21    ( rij_secondOrderMoments_.at(0) ).at(0) = x;
22    ( rij_secondOrderMoments_.at(1) ).at(1) = xp;
23    ( rij_secondOrderMoments_.at(2) ).at(2) = y;
24    ( rij_secondOrderMoments_.at(3) ).at(3) = yp;
25    ( rij_secondOrderMoments_.at(4) ).at(4) = dl;
26    ( rij_secondOrderMoments_.at(5) ).at(5) = del;
27   
28}
29
30void beam2Moments::initializeMoments() {
31    rij_secondOrderMoments_.clear();
32    rij_secondOrderMoments_.resize(6);
33    unsigned dim=0;
34    unsigned k;
35    for ( k=0; k < 6; k++){
36        rij_secondOrderMoments_.at(k).resize(++dim, 0.0);
37    }
38}
39
40
41// const vector< vector<double> >& transportMoments::getMoments() const
42// {
43//   return rij_transportMoments_;
44// }
45
46vector< vector<double> >& beam2Moments::getMatrix()
47{
48    return rij_secondOrderMoments_;
49}
50
51const vector< vector<double> >& beam2Moments::getMoments() const 
52{
53  return rij_secondOrderMoments_;
54}
55
56void beam2Moments::impression() const {
57    unsigned j,m;
58    cout << " impression des moments " << endl;
59    for ( j = 0; j < 6; j++)
60    {
61        for (m=0; m <= j; m++)
62        {
63            cout  << ( rij_secondOrderMoments_.at(j) ).at(m) << " ";
64        }
65        cout << endl;
66    }
67}
68
69void beam2Moments::raz() {
70    // initialisation des moments
71    unsigned j,m;
72    for ( j = 0; j < rij_secondOrderMoments_.size(); j++)
73    {
74        for (m=0; m <= j; m++)
75        {
76            ( rij_secondOrderMoments_.at(j) ).at(m) = 0.0; // element r_jm
77        }
78    }
79}
80
81
82
83// suppose qu'on est bien positionné dans le stream (a revoir)
84bool beam2Moments::readFromTransportOutput(stringstream& inp) {
85  string bidString, bidString1, bidString2;
86  double bidon, bidon1, bidon2;
87   
88  // initialisation des moments
89  raz();
90  bool notFound = true;
91  string buf;
92  // sauter les eventuels 'VARY'
93
94  string varied = "VARIED:";
95  // while ( varied == "VARIED:" ) {
96  //   getline(inp, buf);
97  //   cout << " beam2Moments::readFromTransportOutput ligne lue : " << buf << endl;
98  //   stringstream str(buf);
99  //   str >> varied;
100  // }
101
102  string testVary;
103  while ( notFound ) {
104    getline(inp, buf);
105    //    cout << " beam2Moments::readFromTransportOutput ligne lue : " << buf << endl;
106    stringstream str(buf); 
107    if ( str >> bidon1 >>  bidString1 >>  bidon2 >>  ( rij_secondOrderMoments_.at(0) ).at(0) >> bidString2 )  {
108      // le format semble correct
109      if ( bidString1 != "M" ) {
110        // c'est bien ce qu'on attend : la longuer en metres
111        cout << " beam2Moments::readFromTransportOutput ON N'A PAS 'M' ligne lue : " << buf << endl;
112        notFound = true;
113        break;
114      } else {
115        // on a trouve la bonne ligne
116        cout << " beam2Moments::readFromTransportOutput lecture OK :  ligne lue : " << buf << endl;
117        notFound = false;
118      }
119    } else { 
120      // la ligne lue n'est pas au format
121      cout << "  beam2Moments::readFromTransportOutput format non conforme ligne lue : " << buf << endl;
122      stringstream test(buf);
123      if ( test >> testVary ) {
124        if ( testVary == varied ) {
125          // ca peut arriver... on continue
126          cout << "  beam2Moments::readFromTransportOutput VARIED RENCONTRE ligne lue : " << buf << endl;
127          notFound = true;
128        } else {
129          // on essaie de voir ce qui se passe (ce sera probablement a completer)
130          if ( testVary == "(" ) {
131          // on est trop loin, on est sur l'element suivant, on arrete
132          cout << "  beam2Moments::readFromTransportOutput ON EST TOMBE SUR ELEMNT SUIVANT ligne lue : " << buf << endl;
133            notFound = true;
134            break;
135          }
136          if ( testVary == "0" ) {
137            // on doit etre a la fin du fichier, ce qu'on verifie
138            if ( test >> bidString ) {
139              if ( bidString == "*LENGTH*" ) {
140                // c'est bien ca, on arrete
141                cout << "  beam2Moments::readFromTransportOutput ON EST A LA FIN DU FICHIER ligne lue : " << buf << endl;
142                notFound = true;
143                break;
144              } else {
145                // on n'y comprend plus grans chose, on arrete de toute facon
146                cout << "  beam2Moments::readFromTransportOutput SITUATION NON PREVUE 1 ligne lue : " << buf << endl;
147                notFound = true;
148                break;
149              }                // fin test lecture d'une chaine de caracteres
150            } else {
151              // on n'a pas pu lire la chaine, on n'y comprend rien, on arrete
152                cout << "  beam2Moments::readFromTransportOutput SITUATION NON PREVUE 2 ligne lue : " << buf << endl;
153                notFound = true;
154                break;
155            }
156          } else {
157            // le premier element lu n'est pas 0, on n'est pas a la fin
158            // mais il n'y a pas de faisceau a cet endroit, sortie normale
159                cout << "  beam2Moments::readFromTransportOutput SORTIE NORMALE ligne lue : " << buf << endl;
160            notFound = true;
161            break;
162          }
163          // si on arrive la, on est en pleine panade
164                cout << "  beam2Moments::readFromTransportOutput SITUATION NON PREVUE 4 ligne lue : " << buf << endl;
165            notFound = true;
166            break;
167        } 
168      } else {
169        // on n'a pas pu lire le premier element de la ligne (bizarre)
170                cout << "  beam2Moments::readFromTransportOutput SITUATION NON PREVUE 5 ligne lue : " << buf << endl;
171        notFound = true;
172        break;
173      }
174    }
175  } // fin de boucle sur les lignes
176
177  if ( notFound ) return false;
178
179
180  if ( ! ( inp >> bidon >> ( rij_secondOrderMoments_.at(1) ).at(1) >>  bidString >> ( rij_secondOrderMoments_.at(1) ).at(0) ) ) return false;
181  if ( ! (inp >> bidon >> ( rij_secondOrderMoments_.at(2) ).at(2) >>  bidString >> ( rij_secondOrderMoments_.at(2) ).at(0)  >> ( rij_secondOrderMoments_.at(2) ).at(1) ) ) return false;
182  if ( ! (inp >> bidon >> ( rij_secondOrderMoments_.at(3) ).at(3) >>  bidString >> ( rij_secondOrderMoments_.at(3) ).at(0)  >> ( rij_secondOrderMoments_.at(3) ).at(1) >> ( rij_secondOrderMoments_.at(3) ).at(2) ) ) return false; 
183   
184  if ( ! ( inp >> bidon >> ( rij_secondOrderMoments_.at(4) ).at(4) >>  bidString >> ( rij_secondOrderMoments_.at(4) ).at(0)  >> ( rij_secondOrderMoments_.at(4) ).at(1) >> ( rij_secondOrderMoments_.at(4) ).at(2) >> ( rij_secondOrderMoments_.at(4) ).at(3) ) ) return false;
185   
186  if ( ! (inp >> bidon >> ( rij_secondOrderMoments_.at(5) ).at(5) >>  bidString >> ( rij_secondOrderMoments_.at(5) ).at(0)  >> ( rij_secondOrderMoments_.at(5) ).at(1) >> ( rij_secondOrderMoments_.at(5) ).at(2) >> ( rij_secondOrderMoments_.at(5) ).at(3) >> ( rij_secondOrderMoments_.at(5) ).at(4) ) ) return false;
187
188  return true;   
189}
190
191
192string beam2Moments::writeToTransportInput(double P0) const {
193    ostringstream sortie;
194    sortie << " BEAM, X=" << (rij_secondOrderMoments_.at(0)).at(0) << ", XP="<< (rij_secondOrderMoments_.at(1)).at(1) << ", Y=" << (rij_secondOrderMoments_.at(2)).at(2)<< ", YP=" << (rij_secondOrderMoments_.at(3)).at(3) << ", & " << endl;
195   
196    sortie << " DL=" << (rij_secondOrderMoments_.at(4)).at(4) << ", DEL="<< (rij_secondOrderMoments_.at(5)).at(5) << ", P0=" << P0 << " ; " << endl;
197   
198    sortie << " CORR, C21=" << (rij_secondOrderMoments_.at(1)).at(0) << ", C31="<< (rij_secondOrderMoments_.at(2)).at(0) << ", C32=" << (rij_secondOrderMoments_.at(2)).at(1) << ", & " << endl;
199   
200    sortie << " C41=" << (rij_secondOrderMoments_.at(3)).at(0) << ", C42="<< (rij_secondOrderMoments_.at(3)).at(1) << ", C43=" << (rij_secondOrderMoments_.at(3)).at(2) << ", C51=" << (rij_secondOrderMoments_.at(4)).at(0) << ", & " << endl;
201   
202    sortie << " C52=" << (rij_secondOrderMoments_.at(4)).at(1) << ", C53="<< (rij_secondOrderMoments_.at(4)).at(2) << ", C54=" << (rij_secondOrderMoments_.at(4)).at(3) << ", C61=" << (rij_secondOrderMoments_.at(5)).at(0) << ", & " << endl;
203   
204    sortie << " C62=" << (rij_secondOrderMoments_.at(5)).at(1) << ", C63="<< (rij_secondOrderMoments_.at(5)).at(2) << ", C64=" << (rij_secondOrderMoments_.at(5)).at(3) << ", C65=" << (rij_secondOrderMoments_.at(5)).at(4) << " ; " << endl;
205    return sortie.str();
206}
207
208beam2Moments& beam2Moments::operator= (const beam2Moments& tpm) {
209    rij_secondOrderMoments_ = tpm.rij_secondOrderMoments_;
210    return *this;
211}
Note: See TracBrowser for help on using the repository browser.