#include "beam2Moments.h" #include beam2Moments::beam2Moments() { initializeMoments(); } beam2Moments::~beam2Moments() {;} beam2Moments::beam2Moments( beam2Moments& tm) { rij_secondOrderMoments_ = tm.rij_secondOrderMoments_; } beam2Moments::beam2Moments( const beam2Moments& tm) { rij_secondOrderMoments_ = tm.rij_secondOrderMoments_; } beam2Moments::beam2Moments(double x, double xp, double y, double yp, double dl, double del) { initializeMoments(); ( rij_secondOrderMoments_.at(0) ).at(0) = x; ( rij_secondOrderMoments_.at(1) ).at(1) = xp; ( rij_secondOrderMoments_.at(2) ).at(2) = y; ( rij_secondOrderMoments_.at(3) ).at(3) = yp; ( rij_secondOrderMoments_.at(4) ).at(4) = dl; ( rij_secondOrderMoments_.at(5) ).at(5) = del; } void beam2Moments::initializeMoments() { rij_secondOrderMoments_.clear(); rij_secondOrderMoments_.resize(6); unsigned dim=0; unsigned k; for ( k=0; k < 6; k++){ rij_secondOrderMoments_.at(k).resize(++dim, 0.0); } } // const vector< vector >& transportMoments::getMoments() const // { // return rij_transportMoments_; // } vector< vector >& beam2Moments::getMatrix() { return rij_secondOrderMoments_; } void beam2Moments::impression() const { unsigned j,m; cout << " impression des moments " << endl; for ( j = 0; j < 6; j++) { for (m=0; m <= j; m++) { cout << ( rij_secondOrderMoments_.at(j) ).at(m) << " "; } cout << endl; } } void beam2Moments::raz() { // initialisation des moments unsigned j,m; for ( j = 0; j < rij_secondOrderMoments_.size(); j++) { for (m=0; m <= j; m++) { ( rij_secondOrderMoments_.at(j) ).at(m) = 0.0; // element r_jm } } } // suppose qu'on est bien positionné dans le stream (a revoir) bool beam2Moments::readFromTransportOutput(stringstream& inp) { string bidString, bidString1, bidString2; double bidon, bidon1, bidon2; // initialisation des moments raz(); bool notFound = true; string buf; // sauter les eventuels 'VARY' string varied = "VARIED:"; // while ( varied == "VARIED:" ) { // getline(inp, buf); // cout << " beam2Moments::readFromTransportOutput ligne lue : " << buf << endl; // stringstream str(buf); // str >> varied; // } string testVary; while ( notFound ) { getline(inp, buf); // cout << " beam2Moments::readFromTransportOutput ligne lue : " << buf << endl; stringstream str(buf); if ( str >> bidon1 >> bidString1 >> bidon2 >> ( rij_secondOrderMoments_.at(0) ).at(0) >> bidString2 ) { // le format semble correct if ( bidString1 != "M" ) { // c'est bien ce qu'on attend : la longuer en metres cout << " beam2Moments::readFromTransportOutput ON N'A PAS 'M' ligne lue : " << buf << endl; notFound = true; break; } else { // on a trouve la bonne ligne cout << " beam2Moments::readFromTransportOutput lecture OK : ligne lue : " << buf << endl; notFound = false; } } else { // la ligne lue n'est pas au format cout << " beam2Moments::readFromTransportOutput format non conforme ligne lue : " << buf << endl; stringstream test(buf); if ( test >> testVary ) { if ( testVary == varied ) { // ca peut arriver... on continue cout << " beam2Moments::readFromTransportOutput VARIED RENCONTRE ligne lue : " << buf << endl; notFound = true; } else { // on essaie de voir ce qui se passe (ce sera probablement a completer) if ( testVary == "(" ) { // on est trop loin, on est sur l'element suivant, on arrete cout << " beam2Moments::readFromTransportOutput ON EST TOMBE SUR ELEMNT SUIVANT ligne lue : " << buf << endl; notFound = true; break; } if ( testVary == "0" ) { // on doit etre a la fin du fichier, ce qu'on verifie if ( test >> bidString ) { if ( bidString == "*LENGTH*" ) { // c'est bien ca, on arrete cout << " beam2Moments::readFromTransportOutput ON EST A LA FIN DU FICHIER ligne lue : " << buf << endl; notFound = true; break; } else { // on n'y comprend plus grans chose, on arrete de toute facon cout << " beam2Moments::readFromTransportOutput SITUATION NON PREVUE 1 ligne lue : " << buf << endl; notFound = true; break; } // fin test lecture d'une chaine de caracteres } else { // on n'a pas pu lire la chaine, on n'y comprend rien, on arrete cout << " beam2Moments::readFromTransportOutput SITUATION NON PREVUE 2 ligne lue : " << buf << endl; notFound = true; break; } } else { // le premier element lu n'est pas 0, on n'est pas a la fin // mais il n'y a pas de faisceau a cet endroit, sortie normale cout << " beam2Moments::readFromTransportOutput SORTIE NORMALE ligne lue : " << buf << endl; notFound = true; break; } // si on arrive la, on est en pleine panade cout << " beam2Moments::readFromTransportOutput SITUATION NON PREVUE 4 ligne lue : " << buf << endl; notFound = true; break; } } else { // on n'a pas pu lire le premier element de la ligne (bizarre) cout << " beam2Moments::readFromTransportOutput SITUATION NON PREVUE 5 ligne lue : " << buf << endl; notFound = true; break; } } } // fin de boucle sur les lignes if ( notFound ) return false; if ( ! ( inp >> bidon >> ( rij_secondOrderMoments_.at(1) ).at(1) >> bidString >> ( rij_secondOrderMoments_.at(1) ).at(0) ) ) return false; if ( ! (inp >> bidon >> ( rij_secondOrderMoments_.at(2) ).at(2) >> bidString >> ( rij_secondOrderMoments_.at(2) ).at(0) >> ( rij_secondOrderMoments_.at(2) ).at(1) ) ) return false; 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; 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; 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; return true; } string beam2Moments::writeToTransportInput(double P0) const { ostringstream sortie; 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; sortie << " DL=" << (rij_secondOrderMoments_.at(4)).at(4) << ", DEL="<< (rij_secondOrderMoments_.at(5)).at(5) << ", P0=" << P0 << " ; " << endl; sortie << " CORR, C21=" << (rij_secondOrderMoments_.at(1)).at(0) << ", C31="<< (rij_secondOrderMoments_.at(2)).at(0) << ", C32=" << (rij_secondOrderMoments_.at(2)).at(1) << ", & " << endl; 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; 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; 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; return sortie.str(); } beam2Moments& beam2Moments::operator= (const beam2Moments& tpm) { rij_secondOrderMoments_ = tpm.rij_secondOrderMoments_; return *this; }