Changeset 353 in PSPA for Interface_Web
- Timestamp:
- Mar 1, 2013, 2:42:36 PM (12 years ago)
- Location:
- Interface_Web/trunk/pspaWT/sources/controler/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
r342 r353 13 13 {;} 14 14 15 bool softwareParmela::createInputFile( particleBeam* beamBefore, unsigned int numeroDeb, unsigned int numeroFin,string workingDir)15 bool softwareParmela::createInputFile(particleBeam* beamBefore,unsigned int numeroDeb,unsigned int numeroFin,string workingDir) 16 16 { 17 17 unsigned int k; … … 23 23 } 24 24 25 string name = workingDir + inputFileName_; 25 26 ofstream outfile; 26 string name = workingDir + inputFileName_;27 27 outfile.open(name.c_str(), ios::out); 28 28 if (!outfile) { … … 36 36 elPtr = dataManager_->getElementPointerFromNumero(numeroDeb); 37 37 bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun ); 38 38 39 if ( !there_is_rfgun ) { 39 if ( !beamToParmela(workingDir, beamBefore ) ) return false; 40 string nameOfInput = workingDir + "parin.input0"; 41 if ( !beamToParmela(nameOfInput,beamBefore) ) return false; 40 42 initalKineticEnergy = beamBefore->referenceKineticEnergyMeV(); 41 // les elements de parmela sont indexes de 1 Ã max, s'inn'y a pas de rfgun43 // les elements de parmela sont indexes de 1 Ã max, s'il n'y a pas de rfgun 42 44 offsetNumElem_ = numeroDeb -1; 43 } 44 else { 45 } else { 45 46 elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() ); 46 47 initalKineticEnergy = elPtr->getInitialKineticEnergy(); 47 48 // les elements de parmela sont indexes de 0 Ã max, s'il y a un rfgun 48 49 offsetNumElem_ = numeroDeb; 49 50 } 50 51 51 52 52 outfile << "TITLE" << endl; 53 53 outfile << " titre provisoire " << endl; … … 56 56 unsigned int premier = numeroDeb ; 57 57 if ( there_is_rfgun ) { 58 59 58 outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl; 59 premier++; 60 60 } else { 61 61 outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl; 62 62 } 63 64 63 64 // commentaire : si l'element est un snapshot ne rien ecrire dans inputFileName_ (= parmin) un saut de ligne perturbe l'execution de parmela 65 65 for ( k = premier; k <= numeroFin; k++) 66 66 { … … 77 77 return true; 78 78 } 79 80 79 81 80 bool softwareParmela::execute(unsigned int numeroDeb,unsigned int numeroFin,string workingDir) … … 126 125 if(elem->getNomdElement().getElementType() == snapshot) { 127 126 int avantDernier = beams.size() - 1; 128 cout<<"["<<k<<"] : ecrit sur fichier le contenu de beam["<<avantDernier<<"]"<<endl; 127 string* param = elem->getParametersString(); 128 string cliche = workingDir + param[2].c_str(); 129 if( beamToParmela(cliche,&beams.at(avantDernier)) ) { 130 cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl; 131 } 129 132 continue; 130 133 } … … 250 253 } 251 254 252 253 255 // sauvegarde d'un 'particleBeam' sur un fichier parmela, en guise d'INPUT 254 256 // pour l'instant de nom standard 'parin.input0' 255 bool softwareParmela::beamToParmela(string workingDir, particleBeam* beam ) { 257 bool softwareParmela::beamToParmela(string nameOfFile,particleBeam* beam) 258 { 256 259 if ( !beam->particleRepresentationOk() ) { 257 260 dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed"); … … 259 262 return false; 260 263 } 264 261 265 ofstream outfile; 262 string name = workingDir + "parin.input0"; 263 outfile.open(name.c_str(), ios::out); 266 outfile.open(nameOfFile.c_str(),ios::out); 264 267 if (!outfile) { 265 268 dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream "); 266 cerr << " softwareParmela::beamToParmela : error opening output stream " << name << endl;267 return false; 268 } 269 269 cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl; 270 return false; 271 } 272 270 273 const vector<bareParticle>& partic = beam->getParticleVector(); 271 unsigned k;272 274 double weight = 1.0; 273 275 double xx,yy,zz; 274 276 double begamx, begamy, begamz; 275 for ( k=0; k < partic.size(); k++) {277 for (unsigned k = 0; k < partic.size(); k++) { 276 278 partic.at(k).getPosition().getComponents(xx,yy,zz); 277 partic.at(k).getBetaGamma().getComponents(begamx, begamy,begamz);279 partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz); 278 280 outfile << xx << " " << begamx << " " << yy << " " << begamy << " " << zz << " " << begamz << " " << weight << endl; 279 281 } … … 281 283 return true; 282 284 } 283 284 -
Interface_Web/trunk/pspaWT/sources/controler/src/softwareTransport.cc
r316 r353 7 7 8 8 softwareTransport::softwareTransport() : abstractSoftware() 9 { 10 ; 11 } 9 {;} 12 10 13 11 softwareTransport::softwareTransport(string inputFileName,globalParameters* globals, dataManager* dt) : abstractSoftware(inputFileName, globals, dt) 14 { 15 ; 16 } 17 12 {;} 18 13 19 14 bool softwareTransport::createInputFile(particleBeam* beamBefore, unsigned int numeroDeb, unsigned int numeroFin, string workingDir) 20 { 21 unsigned int k; 15 { 22 16 if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) { 23 17 dataManager_->consoleMessage(" softwareTransport::createInputFile : numero of element out of limits " ); … … 25 19 return false; 26 20 } 21 27 22 abstractElement* premierEl = NULL; 28 23 premierEl = dataManager_->getElementPointerFromNumero(numeroDeb); … … 34 29 } 35 30 36 31 string name = workingDir + inputFileName_; 37 32 ofstream outfile; 38 string name = workingDir + inputFileName_;39 33 outfile.open(name.c_str(), ios::out); 40 if (!outfile) 41 { 34 if (!outfile) { 42 35 dataManager_->consoleMessage(" softwareTransport::createInputFile : error opening output stream " ); 43 44 45 36 cerr << " error opening output stream " << name << endl; 37 return false; 38 } 46 39 47 40 outfile << string("'titre provisoire'") << endl; … … 49 42 outfile << " UTRANS " << endl; 50 43 44 45 cout << "debug:: c'est quoi le premier element? " << premierEl->getNomdElement().getElementName() << endl; 51 46 52 47 // si le premier element a traiter est un 'beam', on ne fait rien pour l'instant … … 57 52 // s'il n'y a pas faisceau courant, erreur 58 53 if ( beamBefore == NULL ) { 59 dataManager_->consoleMessage(" softwareTransport::createInputFile : no input beam ");54 dataManager_->consoleMessage(" softwareTransport::createInputFile : no input beam"); 60 55 cout << " pas de faisceau " << endl; 61 56 return false; 62 } 63 else { 57 } else { 64 58 // s'il y a un faisceau courant 65 59 if ( !beamBefore->momentRepresentationOk() ) { … … 67 61 // on le met au format transport, s'il est deja au format 'particules' (par ex/ parmela) 68 62 if ( !beamBefore->particleRepresentationOk() ) { 69 63 dataManager_->consoleMessage(" softwareParmela::createInputFile : ca cafouille dans les representations de faisceau : ni particules, ni moments ? " ); 70 64 cout << " ca cafouille dans les representations de faisceau : ni particules, ni moments ? " << endl; 71 65 return false; 72 } 73 else { 66 } else { 74 67 beamBefore->buildMomentRepresentation(); 75 68 } … … 83 76 } 84 77 85 86 87 78 outfile << " PRINT, BEAM, ON; " << endl; 88 79 89 90 80 abstractElement* elPtr; 91 for ( k=numeroDeb; k <= numeroFin; k++)81 for (unsigned k = numeroDeb; k <= numeroFin; k++) 92 82 { 93 83 elPtr = dataManager_->getElementPointerFromNumero(k); 84 cout << "debug:: element [" << k << "] " << elPtr->getNomdElement().getElementName() << endl; 85 if(elPtr->getNomdElement().getElementType() == snapshot) continue; 94 86 outfile << elPtr->transportOutputFlow() << endl; 95 87 } … … 103 95 } 104 96 105 106 107 97 bool softwareTransport::execute( unsigned int numeroDeb, unsigned int numeroFin, string workingDir) 108 98 { 99 bool ExecuteStatus = true; 100 109 101 ostringstream sortie; 110 // resul.clear();111 102 sortie << " EXECUTION DE TRANSPORT DE " << numeroDeb << " a " << numeroFin << endl; 112 113 bool ExecuteStatus = true; 114 string bufString; 115 char buf[132]; 103 116 104 string transportJob = workingDir + "transport"; 117 105 transportJob += string(" < "); 118 106 transportJob += workingDir + inputFileName_; 119 107 cout << " job transport= " << transportJob << endl; 120 121 ofstream outfile; 122 string nameOut = workingDir + "transport.output"; 108 123 109 string resultOfRun; 124 bool success = launchJob(transportJob, 110 bool success = launchJob(transportJob,resultOfRun); 125 111 sortie << resultOfRun << endl; 126 if ( !success ) {112 if ( !success ) { 127 113 sortie << " launching of transport failed " << endl; 128 114 ExecuteStatus = false; 129 } 130 else { 115 } else { 131 116 cout << " execution transport MARCHE " << endl; 117 string nameOut = workingDir + "transport.output"; 118 ofstream outfile; 132 119 outfile.open(nameOut.c_str(), ios::out); 133 if (!outfile) 134 { 135 sortie << " error first opening transport output stream " << nameOut << endl; 136 ExecuteStatus = false; 137 } 138 else { 120 if (!outfile) { 121 sortie << " error first opening transport output stream " << nameOut << endl; 122 ExecuteStatus = false; 123 } else { 139 124 // on copie la sortie dans un fichier 'transport.out' 140 125 outfile << resultOfRun << endl; 141 126 outfile.close(); 142 // ExecuteStatus = buildBeamAfterElements(numeroDeb,numeroFin, beamAfterElement, workingDir); 143 // if ( !ExecuteStatus ) { 144 // sortie << " reading transport results failed " << endl; 145 // } 146 } 147 } 148 // resul = sortie.str(); 149 dataManager_->consoleMessage(sortie.str()); 127 } 128 } 129 130 dataManager_->consoleMessage(sortie.str()); 150 131 return ExecuteStatus; 151 132 } 152 133 153 154 bool softwareTransport::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir){134 bool softwareTransport::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams,string workingDir) 135 { 155 136 156 137 bool result = true; 157 unsigned k; 158 for ( k= numeroDeb; k <= numeroFin; k++) 159 { 160 beams.push_back(particleBeam()); 161 162 abstractElement* ptr = dataManager_->getElementPointerFromNumero(k); 163 164 if ( ptr == NULL ) { 165 dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : null pointer on element " ); 166 cout << " softwareTransport::buildBeamAfterElements : null pointer on element " << endl; 167 result = false; 168 break; 169 } 170 171 string elemLabel = ptr->getLabel(); 172 173 beam2Moments transpMoments; 174 175 if (!moments2FromTransport(workingDir, elemLabel, ptr->getNomdElement(),transpMoments ) ) 176 { 177 dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : failure in reading moments " ); 178 cout << " softwareTransport::buildBeamAfterElements plantage dans lecture moments " << endl; 179 result = false; 180 break; 181 } 182 beams.back().set2Moments(transpMoments); 183 } 184 return result; 185 } 186 187 188 bool softwareTransport::moments2FromTransport(string workingDir, string elLab, const nomdElements elem, beam2Moments& moments) const { 189 138 139 for (unsigned k = numeroDeb; k <= numeroFin; k++) 140 { 141 abstractElement* ptr = dataManager_->getElementPointerFromNumero(k); 142 if ( ptr == NULL ) { 143 dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : null pointer on element " ); 144 cout << " softwareTransport::buildBeamAfterElements : null pointer on element " << endl; 145 result = false; 146 break; 147 } 148 149 // si l'element est un snapshot, recuperer la sortie precedente 150 if(ptr->getNomdElement().getElementType() == snapshot) { 151 int avantDernier = beams.size() - 1; 152 string* param = ptr->getParametersString(); 153 string cliche = workingDir + param[2].c_str(); 154 cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl; 155 continue; 156 } 157 158 beams.push_back(particleBeam()); 159 string elemLabel = ptr->getLabel(); 160 beam2Moments transpMoments; 161 162 if (!moments2FromTransport(workingDir,elemLabel,ptr->getNomdElement(),transpMoments) ) 163 { 164 dataManager_->consoleMessage(" softwareTransport::buildBeamAfterElements : failure in reading moments " ); 165 cout << " softwareTransport::buildBeamAfterElements plantage dans lecture moments " << endl; 166 result = false; 167 break; 168 } 169 beams.back().set2Moments(transpMoments); 170 } 171 return result; 172 } 173 174 bool softwareTransport::moments2FromTransport(string workingDir,string elLab,const nomdElements elem,beam2Moments& moments) const 175 { 190 176 string elementLabel = elLab; 191 177 // transformer le label en majuscules ; je ne suis pas sur que ca 192 178 // marchera a tous les coups (glm) 193 std::transform(elementLabel.begin(), elementLabel.end(), elementLabel.begin(), (int (*)(int))std::toupper); 194 195 cout << " dataManager::moments2FromTransport on cherche element " << elementLabel << endl; 179 std::transform(elementLabel.begin(),elementLabel.end(),elementLabel.begin(),(int (*)(int))std::toupper); 180 181 cout << "softwareTransport::moments2FromTransport on cherche element " << elementLabel << endl; 182 183 string nameIn = workingDir + "transport.output"; 196 184 ifstream infile; 197 string nameIn = workingDir + "transport.output";198 185 infile.open(nameIn.c_str(), ios::in); 199 186 if (!infile) { … … 202 189 return false; 203 190 } 204 // else cout << " particleBeam::setFromTransport() : ouverture du fichier " << nameIn << endl;205 191 206 192 string::size_type nn = string::npos; … … 209 195 unsigned compteur = 0; 210 196 while ( getline(infile, buf) ) { 211 197 fichier += buf+"\n"; 212 198 nn = buf.find(elementLabel); 213 199 if ( nn != string::npos ) { 214 200 compteur++; 215 // break;216 201 } 217 202 } 218 203 infile.close(); 204 219 205 cout << " compteur= " << compteur << endl; 220 206 if ( compteur == 0 ) { … … 223 209 return false; 224 210 } 225 226 211 227 212 stringstream fichierStream(fichier); … … 239 224 } 240 225 } 226 241 227 moments.readFromTransportOutput(fichierStream); 242 // impressionDesMoments();243 228 return true; 244 245 } 246 229 }
Note: See TracChangeset
for help on using the changeset viewer.