Changeset 359 in PSPA for Interface_Web/trunk/pspaWT/sources
- Timestamp:
- Mar 4, 2013, 6:08:02 PM (12 years ago)
- Location:
- Interface_Web/trunk/pspaWT/sources
- Files:
-
- 2 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
Interface_Web/trunk/pspaWT/sources/controler/include/abstractElement.h
r304 r359 9 9 #include "nomDeLogiciel.h" 10 10 #include "trivaluedBool.h" 11 #include "abstractSoftware.h" 12 #include "softwareGenerator.h" 13 #include "softwareParmela.h" 14 #include "softwareTest.h" 15 #include "softwareTransport.h" 11 16 12 17 using namespace std; … … 54 59 double getLenghtOfElement() const; 55 60 int getNbParams() const; 56 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const; 61 62 trivaluedBool is_accepted_by_software(nomDeLogiciel soft); 63 57 64 virtual void setPhaseStep(double); 58 65 virtual double getInitialKineticEnergy() const; … … 66 73 virtual void FileInput(ifstream& ifs) = 0; 67 74 virtual string print() = 0; 75 76 /** Return the abstractSofware associated with this element 77 */ 78 inline abstractSoftware* getAbstractSoftware() { 79 return abstractSoftware_; 80 } 81 82 83 void registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b); 84 /** 85 Set the software to this element 86 @param abstractName the name of the abstract software 87 @return trivaluedBool if this software is/not allowed/ignore on this component 88 */ 89 trivaluedBool setSoftware(nomDeLogiciel abstractName); 90 91 private : 92 abstractSoftware *abstractSoftware_; 93 94 /** 95 Acceptable software list for this element 96 */ 97 std::vector <nomDeLogiciel> acceptableSoftware_; 98 99 /** 100 Ignore software list for this element 101 */ 102 std::vector <nomDeLogiciel> ignoreSoftware_; 68 103 }; 69 104 #endif -
Interface_Web/trunk/pspaWT/sources/controler/include/dataManager.h
r355 r359 12 12 #include "beam2Moments.h" 13 13 #include "parmelaParticle.h" 14 #include "nomDeLogiciel.h" 14 15 15 16 class PspaApplication; … … 31 32 32 33 void addSectionToExecute(int debut, int fin, nomDeLogiciel prog); 33 34 abstractElement* addElement(typedElement elemType);34 35 abstractElement* addElement(typedElement elemType); 35 36 void removeElement(string); 36 37 … … 46 47 */ 47 48 int getNumeroFromElementLabel(string); 48 abstractElement*getElementPointerFromNumero(int);49 abstractElement* getElementPointerFromNumero(int); 49 50 50 51 void initializeExecution(); 51 trivaluedBool checkExecute(string& diagnostic);52 trivaluedBool checkElementsForExec(nomDeLogiciel logiciel, unsigned indexDeb, unsigned indexFin, string& diagnostic);52 // trivaluedBool checkExecute(string& diagnostic); 53 // trivaluedBool checkElementsForExec(nomDeLogiciel logiciel, unsigned indexDeb, unsigned indexFin, string& diagnostic); 53 54 bool executeAll(); 54 55 -
Interface_Web/trunk/pspaWT/sources/controler/include/elementBeam.h
r287 r359 30 30 ~elementBeam(); 31 31 32 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;33 34 32 35 33 virtual void setParametersString(string* param); -
Interface_Web/trunk/pspaWT/sources/controler/include/elementBend.h
r287 r359 42 42 43 43 double getLenghtOfElement() const; 44 45 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const; 46 47 44 48 45 virtual void setParametersString(string* param); 49 46 -
Interface_Web/trunk/pspaWT/sources/controler/include/elementCell.h
r287 r359 46 46 ~elementCell() { ;} 47 47 48 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;49 50 48 virtual string* getParametersString() const; 51 49 -
Interface_Web/trunk/pspaWT/sources/controler/include/elementDrift.h
r287 r359 20 20 21 21 ~elementDrift() {;} 22 23 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;24 22 25 23 -
Interface_Web/trunk/pspaWT/sources/controler/include/elementFit.h
r287 r359 29 29 ~elementFit() {;} 30 30 31 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;32 33 31 34 32 virtual void setParametersString(string* param); -
Interface_Web/trunk/pspaWT/sources/controler/include/elementRfgun.h
r304 r359 46 46 ~elementRfgun() {;} 47 47 48 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;49 50 48 virtual void setPhaseStep(double ph) { phaseStep_ = ph;} 51 49 -
Interface_Web/trunk/pspaWT/sources/controler/include/elementSnapshot.h
r342 r359 18 18 ~elementSnapshot() {;} 19 19 20 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;21 20 virtual string* getParametersString() const; 22 21 virtual void setParametersString(string* param); -
Interface_Web/trunk/pspaWT/sources/controler/include/elementSoleno.h
r287 r359 32 32 ~elementSoleno() {;} 33 33 34 virtual trivaluedBool is_accepted_by_software(nomDeLogiciel soft) const;35 36 34 virtual void setParametersString(string* param); 37 35 -
Interface_Web/trunk/pspaWT/sources/controler/include/softwareGenerator.h
r347 r359 4 4 5 5 #include "abstractSoftware.h" 6 #include "dataManager.h"7 6 8 7 class softwareGenerator : public abstractSoftware … … 13 12 14 13 15 softwareGenerator();16 17 14 bool beamFromGenerator(string beamFileName, string workingDir, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles, vector<bareParticle>& passiveParticles ); 18 15 … … 20 17 21 18 22 softwareGenerator(string inputFileName, globalParameters* globals, dataManager* dt); 19 softwareGenerator(); 20 21 softwareGenerator(string inputFileName, globalParameters* globals, dataManager* dt); 23 22 24 23 virtual ~softwareGenerator() {;} -
Interface_Web/trunk/pspaWT/sources/controler/include/softwareParmela.h
r347 r359 14 14 15 15 16 softwareParmela();17 18 16 bool beamFromParmela(string workingDir,unsigned numeroElement, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles ); 19 17 … … 21 19 22 20 public : 23 softwareParmela(string inputFileName, globalParameters* globals, dataManager* beamLine); 21 softwareParmela(); 22 23 softwareParmela(string inputFileName, globalParameters* globals, dataManager* beamLine); 24 24 25 25 virtual ~softwareParmela() {;} -
Interface_Web/trunk/pspaWT/sources/controler/include/softwareTest.h
r347 r359 11 11 protected : 12 12 13 softwareTest();14 15 13 bool beamToParin(string workingDir, particleBeam* beam ); 16 14 bool beamFromParin(string workingDir, vector<bareParticle>& particles ); … … 18 16 public : 19 17 20 softwareTest(string inputFileName, globalParameters* globals, dataManager* ); 18 softwareTest(); 19 20 softwareTest(string inputFileName, globalParameters* globals, dataManager* ); 21 21 22 22 virtual ~softwareTest() {;} -
Interface_Web/trunk/pspaWT/sources/controler/include/softwareTransport.h
r347 r359 7 7 { 8 8 9 protected : 10 11 softwareTransport(); 9 protected : 12 10 13 11 bool moments2FromTransport(string workingDir, string elLab, const nomdElements elem, beam2Moments& moments) const; 14 12 15 13 public : 16 softwareTransport(string inputFileName, globalParameters* globals, dataManager* beamLine); 14 softwareTransport(); 15 softwareTransport(string inputFileName, globalParameters* globals, dataManager* beamLine); 17 16 18 17 virtual ~softwareTransport() {;} -
Interface_Web/trunk/pspaWT/sources/controler/include/trivaluedBool.h
r257 r359 2 2 #define TRIVALUEDBOOL_SEEN 3 3 4 enum trivaluedBool { error, warning, ok};4 enum trivaluedBool {TBoolError, TBoolIgnore, TBoolOk}; 5 5 6 6 #endif -
Interface_Web/trunk/pspaWT/sources/controler/src/abstractElement.cc
r342 r359 4 4 5 5 abstractElement::abstractElement() 6 : abstractSoftware_(NULL) 6 7 { 7 8 setDefaultValues(); … … 76 77 } 77 78 78 trivaluedBool abstractElement::is_accepted_by_software(nomDeLogiciel soft) const { 79 cout << " abstractElement : generic method is_accepted_by_software() " << endl; 80 return error; 79 80 trivaluedBool abstractElement::is_accepted_by_software(nomDeLogiciel prog) { 81 if (acceptableSoftware_.size() == 0) { 82 return TBoolError; 83 } 84 85 if ( std::find(acceptableSoftware_.begin(), acceptableSoftware_.end(), prog) != acceptableSoftware_.end()) { 86 return TBoolOk; 87 } else if ( std::find(ignoreSoftware_.begin(), ignoreSoftware_.end(), prog) != ignoreSoftware_.end()) { 88 return TBoolIgnore; 89 } else { 90 return TBoolError; 91 } 92 93 return TBoolOk; 81 94 } 95 82 96 83 97 double abstractElement::getInitialKineticEnergy() const { … … 89 103 return ""; 90 104 } 105 106 trivaluedBool abstractElement::setSoftware(nomDeLogiciel prog) { 107 if (acceptableSoftware_.size() == 0) { 108 return TBoolError; 109 } 110 111 if ( std::find(acceptableSoftware_.begin(), acceptableSoftware_.end(), prog) != acceptableSoftware_.end()) { 112 if (prog == nomDeLogiciel::parmela){ 113 abstractSoftware_ = new softwareParmela(); 114 } else if (prog == nomDeLogiciel::transport) { 115 abstractSoftware_ = new softwareTransport(); 116 } else if (prog == nomDeLogiciel::generator) { 117 abstractSoftware_ = new softwareGenerator(); 118 } else if (prog == nomDeLogiciel::test) { 119 abstractSoftware_ = new softwareTest(); 120 } else if (prog == nomDeLogiciel::unknownSoftware) { 121 abstractSoftware_ = NULL; 122 } 123 } else if ( std::find(ignoreSoftware_.begin(), ignoreSoftware_.end(), prog) != ignoreSoftware_.end()) { 124 return TBoolIgnore; 125 } else { 126 return TBoolError; 127 } 128 return TBoolOk; 129 } 130 131 132 void abstractElement::registerAcceptableSoftware(nomDeLogiciel abs,trivaluedBool b) { 133 if (b == TBoolIgnore) { 134 ignoreSoftware_.push_back(abs); 135 } else if (b == TBoolOk){ 136 acceptableSoftware_.push_back(abs); 137 } 138 } -
Interface_Web/trunk/pspaWT/sources/controler/src/dataManager.cc
r357 r359 14 14 15 15 dataManager::dataManager(PspaApplication* pspa) : 16 17 16 currentBeam_(NULL), 17 pspa_ (pspa) 18 18 {} 19 19 20 dataManager::~dataManager() 21 { 22 unsigned k;23 for (k=0; k < jobList_.size();k++) {24 if ( jobList_[k] != NULL ) delete jobList_[k];25 }26 if ( currentBeam_ == NULL ) delete currentBeam_;20 dataManager::~dataManager() 21 { 22 unsigned k; 23 for (k=0; k < jobList_.size();k++) { 24 if ( jobList_[k] != NULL ) delete jobList_[k]; 25 } 26 if ( currentBeam_ == NULL ) delete currentBeam_; 27 27 } 28 28 29 29 void dataManager::consoleMessage(string message) { 30 GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));31 if (console) console->addConsoleMessage(message);32 pspa_->processEvents();30 GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console")); 31 if (console) console->addConsoleMessage(message); 32 pspa_->processEvents(); 33 33 } 34 34 … … 43 43 int dataManager::getNumeroFromElementLabel(string label) 44 44 { 45 int index = -1;46 47 for (int k = 0; k < getBeamLineSize() ; k++)45 int index = -1; 46 47 for (int k = 0; k < getBeamLineSize() ; k++) 48 48 { 49 if (pspa_->getBeamLine()->getAbstractElement(k) != NULL){50 51 52 53 54 55 }56 } 57 return index;49 if (pspa_->getBeamLine()->getAbstractElement(k) != NULL){ 50 if ( pspa_->getBeamLine()->getAbstractElement(k)->getLabel() == label ) 51 { 52 index = (int)k + 1; 53 return index; 54 } 55 } 56 } 57 return index; 58 58 } 59 59 … … 61 61 abstractElement* dataManager::getElementPointerFromNumero(int k) 62 62 { 63 return pspa_->getBeamLine()->getAbstractElement(k-1);63 return pspa_->getBeamLine()->getAbstractElement(k-1); 64 64 } 65 65 … … 67 67 void dataManager::addSectionToExecute(int debut, int fin, nomDeLogiciel prog) 68 68 { 69 jobList_.push_back(new sectionToExecute);70 jobList_.back()->firstElement = debut;71 jobList_.back()->lastElement = fin;72 jobList_.back()->software = prog;69 jobList_.push_back(new sectionToExecute); 70 jobList_.back()->firstElement = debut; 71 jobList_.back()->lastElement = fin; 72 jobList_.back()->software = prog; 73 73 } 74 74 75 75 void dataManager::clearSectionToExecute() 76 76 { 77 unsigned k;78 for(k = 0; k < jobList_.size(); k++)77 unsigned k; 78 for(k = 0; k < jobList_.size(); k++) 79 79 { 80 if ( jobList_[k] != NULL ) delete jobList_[k]; 81 } 82 jobList_.clear(); 83 } 84 85 trivaluedBool dataManager::checkExecute(string& diagnostic) 86 { 87 cout << "dataManager::checkExecute()" << endl; 88 consoleMessage(" VERIFICATION AVANT EXECUTION "); 89 90 trivaluedBool resul = ok; 91 diagnostic.clear(); 92 93 for(unsigned k = 0; k < jobList_.size(); k++) { 94 95 unsigned numeroDeb = jobList_[k]->firstElement; 96 unsigned numeroFin = jobList_[k]->lastElement; 97 98 if ( numeroFin < numeroDeb ) { 99 diagnostic += " last element before first for job " + (jobList_[k]->software).getString() + " \n"; 100 resul = error; 101 break; 102 } 103 104 string checkCompatibility; 105 resul = checkElementsForExec(jobList_[k]->software,numeroDeb,numeroFin,checkCompatibility); 106 diagnostic += checkCompatibility; 107 } //k 108 109 return resul; 110 } 111 112 trivaluedBool dataManager::checkElementsForExec(nomDeLogiciel logiciel,unsigned numeroDeb,unsigned numeroFin,string& diagnostic) 113 { 114 trivaluedBool resul = ok; 115 trivaluedBool accepted; 116 117 diagnostic.clear(); 118 abstractElement* elPtr; 119 120 for(unsigned j = numeroDeb; j <= numeroFin; j++) { 121 elPtr = pspa_->getBeamLine()->getAbstractElement(j-1); 122 accepted = elPtr->is_accepted_by_software(logiciel); 123 124 if(accepted == error) { 125 diagnostic += " the element " + elPtr->getNomdElement().getElementName() + " is not allowed with " + logiciel.getString() + " \n"; 126 resul = error; 127 } else if (accepted == warning) { 128 diagnostic += " the element " + elPtr->getNomdElement().getElementName() + " will be ignored by " + logiciel.getString() + " \n"; 129 if ( resul != error ) resul = warning; 130 } 131 } 132 133 return resul; 134 } 80 if ( jobList_[k] != NULL ) delete jobList_[k]; 81 } 82 jobList_.clear(); 83 } 84 85 86 135 87 136 88 void dataManager::initializeExecution() 137 89 { 138 string workingDir = pspa_->getWorkingDir();90 string workingDir = pspa_->getWorkingDir(); 139 91 if (workingDir == "") { 140 92 return; … … 165 117 bool dataManager::executeAll() 166 118 { 167 bool success = true;168 abstractSoftware* softw = NULL;169 string workingDir = pspa_->getWorkingDir();170 171 for(unsigned k = 0; k < jobList_.size(); k++)172 { 173 cout << " dataManager::executeAll je m'apprete a executer : " << (jobList_[k]->software).getString() << endl;174 175 int debut = jobList_[k]->firstElement;176 int fin = jobList_[k]->lastElement;177 softw = createSoftwareConnexion(jobList_[k]->software);178 179 if (softw == NULL) {180 181 182 183 }184 185 success = softw->createInputFile(currentBeam_,debut,fin,workingDir);186 if ( success ) {187 188 189 190 191 }192 193 delete softw;194 if ( success ) {195 196 197 } else {198 199 200 }201 if ( !success ) break;202 203 //debug204 cout << "dataManager::executeAll #diagnosticBeam= " << diagnosticBeam_.size() << endl;205 cout << "dataManager::executeAll #getBeamLineSize()= " << getBeamLineSize() << endl;206 for (int j = debut; j <= fin; j++) {207 208 209 }210 119 bool success = true; 120 abstractSoftware* softw = NULL; 121 string workingDir = pspa_->getWorkingDir(); 122 123 for(unsigned k = 0; k < jobList_.size(); k++) 124 { 125 cout << " dataManager::executeAll je m'apprete a executer : " << (jobList_[k]->software).getString() << endl; 126 127 int debut = jobList_[k]->firstElement; 128 int fin = jobList_[k]->lastElement; 129 softw = createSoftwareConnexion(jobList_[k]->software); 130 131 if (softw == NULL) { 132 success = false; 133 consoleMessage("dataManager::executeAll : unknown software"); 134 break; 135 } 136 137 success = softw->createInputFile(currentBeam_,debut,fin,workingDir); 138 if ( success ) { 139 success = softw->execute(debut,fin,workingDir); 140 if ( success ) { 141 success = softw->buildBeamAfterElements(debut,fin,diagnosticBeam_,workingDir); 142 } 143 } 144 145 delete softw; 146 if ( success ) { 147 currentBeam_ = &diagnosticBeam_.back(); 148 cout << " execute termine avec succes " << endl; 149 } else { 150 currentBeam_ = NULL; 151 cout << " execute termine en ECHEC " << endl; 152 } 153 if ( !success ) break; 154 155 //debug 156 cout << "dataManager::executeAll #diagnosticBeam= " << diagnosticBeam_.size() << endl; 157 cout << "dataManager::executeAll #getBeamLineSize()= " << getBeamLineSize() << endl; 158 for (int j = debut; j <= fin; j++) { 159 abstractElement* elPtr= getElementPointerFromNumero(j); 160 cout << "[" << j << "] " << elPtr->getNomdElement().getElementName() << endl; 161 } 162 211 163 } //k 212 213 return success;164 165 return success; 214 166 } 215 167 … … 222 174 cout << " et qu'on puisse restaurer normalement" << endl; 223 175 string name = pspa_->getWorkingDir() + "/" + nameOfFile + ".save"; 224 176 225 177 // make dir if not exist 226 178 boost::filesystem::create_directories(pspa_->getWorkingDir() + folder + "/"); … … 230 182 cerr << " error opening output file for persistency " << name << endl; 231 183 } 232 233 outfile << globParam_.FileOutputFlow();234 abstractElement* elPtr;235 for(unsigned k = 0; k < getBeamLineSize() ; k++)184 185 outfile << globParam_.FileOutputFlow(); 186 abstractElement* elPtr; 187 for(unsigned k = 0; k < getBeamLineSize() ; k++) 236 188 { 237 elPtr = pspa_->getBeamLine()->getAbstractElement(k);238 outfile << elPtr->FileOutputFlow();239 } 240 outfile.close();189 elPtr = pspa_->getBeamLine()->getAbstractElement(k); 190 outfile << elPtr->FileOutputFlow(); 191 } 192 outfile.close(); 241 193 } 242 194 … … 283 235 } 284 236 infile.close(); 285 237 286 238 // debug 287 239 // unsigned k; 288 240 // for(k = 0; k < getBeamLineSize(); k++) { 289 // abstractElement* ptr = pspa_->getBeamLine()->getAbstractElement(k); 241 // abstractElement* ptr = pspa_->getBeamLine()->getAbstractElement(k); 290 242 // cout << "reupere " << ptr->getLabel() << endl; 291 243 // } … … 295 247 particleBeam* dataManager::getDiagnosticBeam(unsigned index) 296 248 { 297 if (index >= diagnosticBeam_.size()) {298 return NULL;299 } else {300 return &diagnosticBeam_.at(index);301 }249 if (index >= diagnosticBeam_.size()) { 250 return NULL; 251 } else { 252 return &diagnosticBeam_.at(index); 253 } 302 254 } 303 255 … … 331 283 // } 332 284 285 333 286 // on ne tient pas compte des elements "snapshot" presents dans la beamLine 334 287 void dataManager::donneesRmsEnveloppe(string type,vector<double>& xcor,vector<double>& ycor) … … 358 311 i++; 359 312 } 360 } else {361 cerr << " dataManager::donneesRmsEnveloppe type " << type << " not programmed " << endl;362 return;363 313 } 364 314 } 365 315 366 316 int dataManager::getBeamLineSize() { 367 return pspa_->getBeamLine()->getBeamLineSize();368 } 369 370 abstractSoftware* dataManager::createSoftwareConnexion(nomDeLogiciel logi) 371 { 372 string inputFileName;373 if(logi == nomDeLogiciel::parmela) {374 inputFileName = "parmin";375 return new softwareParmela(inputFileName, &globParam_, this);376 } else if (logi == nomDeLogiciel::transport) {377 inputFileName = "transport.input";378 return new softwareTransport(inputFileName, &globParam_, this);379 } else if (logi == nomDeLogiciel::generator) {380 inputFileName = "generator.in";381 return new softwareGenerator(inputFileName, &globParam_, this);382 } else if (logi == nomDeLogiciel::test) {383 return new softwareTest(inputFileName, &globParam_, this);384 } else {385 return NULL;386 }387 } 317 return pspa_->getBeamLine()->getBeamLineSize(); 318 } 319 320 abstractSoftware* dataManager::createSoftwareConnexion(nomDeLogiciel logi) 321 { 322 string inputFileName; 323 if(logi == nomDeLogiciel::parmela) { 324 inputFileName = "parmin"; 325 return new softwareParmela(inputFileName, &globParam_, this); 326 } else if (logi == nomDeLogiciel::transport) { 327 inputFileName = "transport.input"; 328 return new softwareTransport(inputFileName, &globParam_, this); 329 } else if (logi == nomDeLogiciel::generator) { 330 inputFileName = "generator.in"; 331 return new softwareGenerator(inputFileName, &globParam_, this); 332 } else if (logi == nomDeLogiciel::test) { 333 return new softwareTest(inputFileName, &globParam_, this); 334 } else { 335 return NULL; 336 } 337 } -
Interface_Web/trunk/pspaWT/sources/controler/src/elementBeam.cc
r288 r359 10 10 parametersString_ = new string[nbParam_+1]; 11 11 // transportOk_ = true; 12 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk); 12 13 } 13 14 … … 36 37 } 37 38 38 trivaluedBool elementBeam::is_accepted_by_software(nomDeLogiciel soft) const {39 if ( soft == nomDeLogiciel::transport ) return ok;40 else return error;41 }42 39 43 40 string* elementBeam::getParametersString() const { -
Interface_Web/trunk/pspaWT/sources/controler/src/elementBend.cc
r356 r359 13 13 // transportOk_ = true; 14 14 // parmelaOk_ = true; 15 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk); 16 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk); 15 17 } 16 18 … … 56 58 { 57 59 return 1.0e2 * radius_ * angleDeg_ * DEG_TO_RADIANS; 58 }59 60 trivaluedBool 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 60 } 65 61 -
Interface_Web/trunk/pspaWT/sources/controler/src/elementCell.cc
r288 r359 15 15 parametersString_ = new string[nbParam_+1]; 16 16 // parmelaOk_ = true; 17 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk); 17 18 } 18 19 19 20 20 void elementCell::setDefaultValues() 21 { 21 22 defaultLabel_ = "cell"; 22 23 initialPhaseDef_ = 0.0; … … 26 27 offsetMagDef_ = 0.0; 27 28 scaleFactorDef_ = 1.0; 28 29 } 29 30 30 31 31 void elementCell::setDefaults() 32 { 32 33 label_ = defaultLabel_; 33 34 initialPhase_ = initialPhaseDef_; … … 39 40 } 40 41 41 trivaluedBool elementCell::is_accepted_by_software(nomDeLogiciel soft) const {42 if ( soft == nomDeLogiciel::parmela ) return ok;43 else return error;44 }45 42 46 43 string* elementCell::getParametersString() const -
Interface_Web/trunk/pspaWT/sources/controler/src/elementDrift.cc
r316 r359 13 13 nbParam_ = elementName_.getElementNbParameters(); 14 14 parametersString_ = new string[nbParam_+1]; 15 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk); 16 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk); 17 registerAcceptableSoftware(nomDeLogiciel::test, TBoolOk); 18 15 19 } 16 20 … … 23 27 label_ = defaultLabel_; 24 28 } 25 26 27 trivaluedBool elementDrift::is_accepted_by_software(nomDeLogiciel soft) const {28 if ( soft == nomDeLogiciel::transport ) return ok;29 else if ( soft == nomDeLogiciel::parmela ) return ok;30 else if ( soft == nomDeLogiciel::test ) return ok;31 else return error;32 }33 29 34 30 -
Interface_Web/trunk/pspaWT/sources/controler/src/elementFit.cc
r288 r359 11 11 // transportOk_ = true; 12 12 // parmelaIgnored_ = true; 13 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk); 14 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore); 13 15 } 14 16 … … 29 31 } 30 32 31 trivaluedBool elementFit::is_accepted_by_software(nomDeLogiciel soft) const {32 if ( soft == nomDeLogiciel::transport ) return ok;33 else if ( soft == nomDeLogiciel::parmela ) return warning;34 else return error;35 }36 33 37 34 -
Interface_Web/trunk/pspaWT/sources/controler/src/elementRfgun.cc
r304 r359 8 8 9 9 elementRfgun::elementRfgun() : abstractElement() 10 { 11 setDefaultValues(); 12 setDefaults(); 13 elementName_ = nomdElements("rfgun"); 14 nbParam_ = elementName_.getElementNbParameters(); 15 parametersString_ = new string[nbParam_+1]; 16 // parmelaOk_ = true; 17 } 10 { 11 setDefaultValues(); 12 setDefaults(); 13 elementName_ = nomdElements("rfgun"); 14 nbParam_ = elementName_.getElementNbParameters(); 15 parametersString_ = new string[nbParam_+1]; 16 // parmelaOk_ = true; 17 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk); 18 registerAcceptableSoftware(nomDeLogiciel::generator, TBoolOk); 19 } 18 20 19 20 21 void elementRfgun::setDefaultValues() 22 { 21 23 defaultLabel_ = "rfgun"; 22 24 defaultPhaseStep_ = 1.0; … … 47 49 } 48 50 49 trivaluedBool elementRfgun::is_accepted_by_software(nomDeLogiciel soft) const {50 cout << " elementRfgun : c'est le bon is_accepted_by_software " << endl;51 if ( soft == nomDeLogiciel::parmela ) return ok;52 else if ( soft == nomDeLogiciel::generator ) return ok;53 else return error;54 }55 51 56 string* elementRfgun::getParametersString() const 52 string* elementRfgun::getParametersString() const 57 53 { 58 54 int compteur = -1; -
Interface_Web/trunk/pspaWT/sources/controler/src/elementSnapshot.cc
r342 r359 6 6 elementSnapshot::elementSnapshot() : abstractElement() 7 7 { 8 setDefaultValues(); 9 setDefaults(); 10 elementName_ = nomdElements("snapshot"); 11 nbParam_ = elementName_.getElementNbParameters(); 12 parametersString_ = new string[nbParam_+1]; 8 setDefaultValues(); 9 setDefaults(); 10 elementName_ = nomdElements("snapshot"); 11 nbParam_ = elementName_.getElementNbParameters(); 12 parametersString_ = new string[nbParam_+1]; 13 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolIgnore); 14 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolIgnore); 15 registerAcceptableSoftware(nomDeLogiciel::generator, TBoolIgnore); 16 registerAcceptableSoftware(nomDeLogiciel::test, TBoolIgnore); 13 17 } 14 18 … … 23 27 } 24 28 25 trivaluedBool elementSnapshot::is_accepted_by_software(nomDeLogiciel soft) const26 {27 return warning;28 }29 29 30 30 string* elementSnapshot::getParametersString() const -
Interface_Web/trunk/pspaWT/sources/controler/src/elementSoleno.cc
r288 r359 5 5 elementSoleno::elementSoleno() : abstractElement() 6 6 { 7 cout << " passage constructeur elementSoleno " << endl; 8 setDefaultValues(); 9 setDefaults(); 10 elementName_ = nomdElements("soleno"); 11 nbParam_ = elementName_.getElementNbParameters(); 12 parametersString_ = new string[nbParam_+1]; 7 cout << " passage constructeur elementSoleno " << endl; 8 setDefaultValues(); 9 setDefaults(); 10 elementName_ = nomdElements("soleno"); 11 nbParam_ = elementName_.getElementNbParameters(); 12 parametersString_ = new string[nbParam_+1]; 13 registerAcceptableSoftware(nomDeLogiciel::transport, TBoolOk); 14 registerAcceptableSoftware(nomDeLogiciel::parmela, TBoolOk); 13 15 } 14 16 … … 27 29 varyB0_ = varyB0Def_; 28 30 } 29 30 trivaluedBool elementSoleno::is_accepted_by_software(nomDeLogiciel soft) const {31 if ( soft == nomDeLogiciel::transport ) return ok;32 else if ( soft == nomDeLogiciel::parmela ) return ok;33 else return error;34 }35 31 36 32 -
Interface_Web/trunk/pspaWT/sources/controler/src/softwareGenerator.cc
r356 r359 5 5 #include "mathematicalConstants.h" 6 6 #include "PhysicalConstants.h" 7 #include "dataManager.h" 7 8 8 9 softwareGenerator::softwareGenerator() : abstractSoftware() -
Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
r356 r359 15 15 bool softwareParmela::createInputFile(particleBeam* beamBefore,unsigned int numeroDeb,unsigned int numeroFin,string workingDir) 16 16 { 17 unsigned int k; 18 19 if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) { 20 dataManager_->consoleMessage(" softwareParmela::createInputFile : numero of element out of limits " ); 21 cerr << " numero of element out of limits " << endl; 22 return false; 23 } 24 25 string name = workingDir + inputFileName_; 26 ofstream outfile; 27 outfile.open(name.c_str(), ios::out); 28 if (!outfile) { 29 dataManager_->consoleMessage(" softwareParmela::createInputFile : error opening output stream " ); 30 cerr << " softwareParmela::createInputFile : error opening output stream " << name << endl; 31 return false; 32 } 33 34 abstractElement* elPtr; 35 double initalKineticEnergy = 0.0; 36 elPtr = dataManager_->getElementPointerFromNumero(numeroDeb); 37 bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun ); 38 39 if ( !there_is_rfgun ) { 40 string nameOfInput = workingDir + "parin.input0"; 41 if ( !beamToParmela(nameOfInput,beamBefore) ) return false; 42 initalKineticEnergy = beamBefore->referenceKineticEnergyMeV(); 43 // les elements de parmela sont indexes de 1 à max, s'il n'y a pas de rfgun 44 offsetNumElem_ = numeroDeb -1; 45 } else { 46 elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() ); 47 initalKineticEnergy = elPtr->getInitialKineticEnergy(); 48 // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun 49 offsetNumElem_ = numeroDeb; 50 } 51 52 outfile << "TITLE" << endl; 53 outfile << " titre provisoire " << endl; 54 outfile << "RUN /n0=1 /ip=999 /freq=" << globParamPtr_->getFrequency() << " /z0=0.0 /W0=" << initalKineticEnergy << " /itype=1" << endl; 55 outfile << "OUTPUT 0" << endl; 56 unsigned int premier = numeroDeb ; 57 if ( there_is_rfgun ) { 58 outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl; 59 premier++; 60 } else { 61 outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl; 62 } 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 for ( k = premier; k <= numeroFin; k++) 66 { 67 elPtr = dataManager_->getElementPointerFromNumero(k); 68 if(elPtr->getNomdElement().getElementType() == snapshot) continue; 69 outfile << elPtr->parmelaOutputFlow() << endl; 70 } 71 72 outfile << "ZOUT" << endl; 73 outfile << "START /wt=0.0 /dwt=" << globParamPtr_->getIntegrationStep() << " /nsteps=" << globParamPtr_->getNbSteps() << " nsc=" << globParamPtr_->getScPeriod() << " /nout=10" << endl; 74 outfile << "END" << endl; 75 outfile.close(); 76 dataManager_->consoleMessage("fichier input termine pour PARMELA"); 77 return true; 17 unsigned int k; 18 19 if ( numeroDeb < 1 || numeroFin > dataManager_->getBeamLineSize() ) { 20 dataManager_->consoleMessage(" softwareParmela::createInputFile : numero of element out of limits " ); 21 cerr << " numero of element out of limits " << endl; 22 return false; 23 } 24 25 string name = workingDir + inputFileName_; 26 ofstream outfile; 27 outfile.open(name.c_str(), ios::out); 28 if (!outfile) { 29 dataManager_->consoleMessage(" softwareParmela::createInputFile : error opening output stream " ); 30 cerr << " softwareParmela::createInputFile : error opening output stream " << name << endl; 31 return false; 32 } 33 34 abstractElement* elPtr; 35 double initalKineticEnergy = 0.0; 36 elPtr = dataManager_->getElementPointerFromNumero(numeroDeb); 37 bool there_is_rfgun = ( elPtr->getNomdElement().getElementType() == RFgun ); 38 39 if ( !there_is_rfgun ) { 40 string nameOfInput = workingDir + "parin.input0"; 41 if ( !beamToParmela(nameOfInput,beamBefore) ) return false; 42 initalKineticEnergy = beamBefore->referenceKineticEnergyMeV(); 43 // les elements de parmela sont indexes de 1 à max, s'il n'y a pas de rfgun 44 offsetNumElem_ = numeroDeb -1; 45 } else { 46 elPtr->setPhaseStep( globParamPtr_->getIntegrationStep() ); 47 initalKineticEnergy = elPtr->getInitialKineticEnergy(); 48 // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun 49 offsetNumElem_ = numeroDeb; 50 } 51 52 outfile << "TITLE" << endl; 53 outfile << " titre provisoire " << endl; 54 outfile << "RUN /n0=1 /ip=999 /freq=" << globParamPtr_->getFrequency() << " /z0=0.0 /W0=" << initalKineticEnergy << " /itype=1" << endl; 55 outfile << "OUTPUT 0" << endl; 56 unsigned int premier = numeroDeb ; 57 if ( there_is_rfgun ) { 58 outfile << dataManager_->getElementPointerFromNumero(numeroDeb)->parmelaOutputFlow() << endl; 59 premier++; 60 } else { 61 outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl; 62 } 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 for ( k = premier; k <= numeroFin; k++) 66 { 67 elPtr = dataManager_->getElementPointerFromNumero(k); 68 if (elPtr) { 69 if(elPtr->getNomdElement().getElementType() == snapshot) continue; 70 outfile << elPtr->parmelaOutputFlow() << endl; 71 } 72 } 73 74 outfile << "ZOUT" << endl; 75 outfile << "START /wt=0.0 /dwt=" << globParamPtr_->getIntegrationStep() << " /nsteps=" << globParamPtr_->getNbSteps() << " nsc=" << globParamPtr_->getScPeriod() << " /nout=10" << endl; 76 outfile << "END" << endl; 77 outfile.close(); 78 dataManager_->consoleMessage("fichier input termine pour PARMELA"); 79 return true; 78 80 } 79 81 80 82 bool softwareParmela::execute(unsigned int numeroDeb,unsigned int numeroFin,string workingDir) 81 83 { 82 bool ExecuteStatus = true; 83 84 ostringstream sortie; 85 sortie << " EXECUTION DE PARMELA DE l'ELEMENT " << numeroDeb << " A L'ELEMENT " << numeroFin << endl; 86 87 string parmelaJob = workingDir + "parmela"; 88 parmelaJob += string(" "); 89 parmelaJob += workingDir; 90 91 string resultOfRun; 92 bool success = launchJob(parmelaJob,resultOfRun); 93 sortie << resultOfRun << endl; 94 if ( !success ) { 95 sortie << " launching of parmela failed " << endl; 96 ExecuteStatus = false; 97 } else { 98 sortie << " successful launching of parmela " << endl; 99 cout << " execution parmela MARCHE " << endl; 100 string::size_type nn = (resultOfRun).find("normal"); 101 if ( nn == string::npos ) 102 { 103 sortie << " abnormal exit of parmela " << endl; 104 ExecuteStatus = false; 105 } 106 } 107 108 dataManager_->consoleMessage(sortie.str()); 109 return ExecuteStatus; 110 } 111 112 bool softwareParmela::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir) 113 { 114 bool result = true; 115 cout << "debug:: debut " << numeroDeb << ", fin " << numeroFin << endl; 116 117 // index du premier element de parmela 118 int id= numeroDeb-offsetNumElem_; 119 120 for(unsigned k = numeroDeb; k <= numeroFin; k++) 121 { 122 abstractElement* elem = dataManager_->getElementPointerFromNumero(k); 123 124 // si l'element est un snapshot, recuperer la sortie precedente 125 if(elem->getNomdElement().getElementType() == snapshot) { 126 int avantDernier = beams.size() - 1; 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 } 132 continue; 133 } 134 135 // sinon c'est un element de parmela d'index id 136 beams.push_back(particleBeam()); 137 cout << " creation diagn. no " << beams.size() << " par PARMELA " << endl; 138 vector<double> centroid; 139 bareParticle refPart; 140 vector<bareParticle> particles; 141 double freq= globParamPtr_->getFrequency(); 142 143 if(!beamFromParmela(workingDir,id,freq,centroid,refPart,particles)) 144 { 145 if(elem->is_accepted_by_software(nomDeLogiciel::parmela) == warning) { 146 int avantDernier = beams.size() -2; 147 beams.back() = beams.at(avantDernier); 148 } else { 149 dataManager_->consoleMessage("softwareParmela::buildBeamAfterElements : reading parmdesz failed"); 150 result = false; 151 break; 152 } 153 } else { 154 beams.back().setWithParticles(centroid,refPart,particles); 155 } 156 157 // l'element de parmela suivant 158 id++; 159 } 160 161 return result; 162 } 163 164 bool softwareParmela::beamFromParmela(string workingDir,unsigned numeroParmel, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles ) 165 { 166 167 string nomfilefais = workingDir + "parmdesz"; 168 cout << " nom fichier desz : " << nomfilefais << endl; 169 FILE *filefais = fopen(nomfilefais.c_str(), "r"); 170 171 if ( filefais == (FILE*)0 ) { 172 dataManager_->consoleMessage(" beamFromParmela() erreur a l'ouverture du fichier 'parmdesz'"); 173 cerr << " beamFromParmela() erreur a l'ouverture du fichier" << nomfilefais << endl; 174 return false; 175 } else 176 cout << " beamFromParmela() : ouverture du fichier " << nomfilefais << endl; 177 178 parmelaParticle partic; 179 std::vector<parmelaParticle> faisceau; 180 int testNombrePartRef =0; 181 double phaseRef = 0.0; 182 183 while( partic.readFromParmelaFile(filefais) > 0 ) 184 { 185 186 if ( partic.ne == (int)numeroParmel ) { 187 if ( partic.np == 1 ) { 188 // en principe on est sur la particule de reference 189 if ( fabs(partic.xx) > EPSILON || fabs(partic.yy) > EPSILON || fabs(partic.xxp) > EPSILON || fabs(partic.yyp) > EPSILON) { 190 printf(" ATTENTION part. reference douteuse \n"); 191 partic.imprim(); 192 } 193 phaseRef = partic.phi; 194 195 // le 'z' est 'absolu' (le long de la trajectoire) 196 TRIDVECTOR posRef(partic.xx,partic.yy,partic.z); 197 TRIDVECTOR betagammaRef(partic.xxp*partic.begamz, partic.yyp*partic.begamz, partic.begamz); 198 refPart = bareParticle(posRef, betagammaRef); 199 testNombrePartRef++; 200 if ( testNombrePartRef != 1 ) { 201 dataManager_->consoleMessage(" beamFromParmela : nombre de part. de ref different de 1 :"); 202 cerr << " nombre de part. de ref different de 1 : " << testNombrePartRef << " !! " << endl; 203 return false; 204 } 205 } 206 faisceau.push_back(partic); 207 } 84 bool ExecuteStatus = true; 85 86 ostringstream sortie; 87 sortie << " EXECUTION DE PARMELA DE l'ELEMENT " << numeroDeb << " A L'ELEMENT " << numeroFin << endl; 88 89 string parmelaJob = workingDir + "parmela"; 90 parmelaJob += string(" "); 91 parmelaJob += workingDir; 92 93 string resultOfRun; 94 bool success = launchJob(parmelaJob,resultOfRun); 95 sortie << resultOfRun << endl; 96 if ( !success ) { 97 sortie << " launching of parmela failed " << endl; 98 ExecuteStatus = false; 99 } else { 100 sortie << " successful launching of parmela " << endl; 101 cout << " execution parmela MARCHE " << endl; 102 string::size_type nn = (resultOfRun).find("normal"); 103 if ( nn == string::npos ) 104 { 105 sortie << " abnormal exit of parmela " << endl; 106 ExecuteStatus = false; 107 } 108 } 109 110 dataManager_->consoleMessage(sortie.str()); 111 return ExecuteStatus; 112 } 113 114 bool softwareParmela::buildBeamAfterElements(unsigned int numeroDeb,unsigned int numeroFin, vector<particleBeam>& beams, string workingDir) 115 { 116 bool result = true; 117 cout << "debug:: debut " << numeroDeb << ", fin " << numeroFin << endl; 118 119 // index du premier element de parmela 120 int id= numeroDeb-offsetNumElem_; 121 122 for(unsigned k = numeroDeb; k <= numeroFin; k++) 123 { 124 abstractElement* elem = dataManager_->getElementPointerFromNumero(k); 125 126 // si l'element est un snapshot, recuperer la sortie precedente 127 if(elem->getNomdElement().getElementType() == snapshot) { 128 int avantDernier = beams.size() - 1; 129 string* param = elem->getParametersString(); 130 string cliche = workingDir + param[2].c_str(); 131 if( beamToParmela(cliche,&beams.at(avantDernier)) ) { 132 cout<<"["<<k<<"] : ecrit sur fichier " << cliche << " le contenu de beam["<<avantDernier<<"]"<<endl; 133 } 134 continue; 135 } 136 137 // sinon c'est un element de parmela d'index id 138 beams.push_back(particleBeam()); 139 cout << " creation diagn. no " << beams.size() << " par PARMELA " << endl; 140 vector<double> centroid; 141 bareParticle refPart; 142 vector<bareParticle> particles; 143 double freq= globParamPtr_->getFrequency(); 144 145 if(!beamFromParmela(workingDir,id,freq,centroid,refPart,particles)) 146 { 147 if(elem->is_accepted_by_software(nomDeLogiciel::parmela) == TBoolIgnore) { 148 int avantDernier = beams.size() -2; 149 beams.back() = beams.at(avantDernier); 150 } else { 151 dataManager_->consoleMessage("softwareParmela::buildBeamAfterElements : reading parmdesz failed"); 152 result = false; 153 break; 154 } 155 156 } else { 157 beams.back().setWithParticles(centroid,refPart,particles); 158 } 159 160 // l'element de parmela suivant 161 id++; 162 } 163 164 return result; 165 } 166 167 bool softwareParmela::beamFromParmela(string workingDir,unsigned numeroParmel, double referencefrequency, vector<double>& centroid, bareParticle& refPart,vector<bareParticle>& particles ) 168 { 169 170 string nomfilefais = workingDir + "parmdesz"; 171 cout << " nom fichier desz : " << nomfilefais << endl; 172 FILE *filefais = fopen(nomfilefais.c_str(), "r"); 173 174 if ( filefais == (FILE*)0 ) { 175 dataManager_->consoleMessage(" beamFromParmela() erreur a l'ouverture du fichier 'parmdesz'"); 176 cerr << " beamFromParmela() erreur a l'ouverture du fichier" << nomfilefais << endl; 177 return false; 178 } else 179 cout << " beamFromParmela() : ouverture du fichier " << nomfilefais << endl; 180 181 parmelaParticle partic; 182 std::vector<parmelaParticle> faisceau; 183 int testNombrePartRef =0; 184 double phaseRef = 0.0; 185 186 while( partic.readFromParmelaFile(filefais) > 0 ) 187 { 188 189 if ( partic.ne == (int)numeroParmel ) { 190 if ( partic.np == 1 ) { 191 // en principe on est sur la particule de reference 192 if ( fabs(partic.xx) > EPSILON || fabs(partic.yy) > EPSILON || fabs(partic.xxp) > EPSILON || fabs(partic.yyp) > EPSILON) { 193 printf(" ATTENTION part. reference douteuse \n"); 194 partic.imprim(); 195 } 196 phaseRef = partic.phi; 197 198 // le 'z' est 'absolu' (le long de la trajectoire) 199 TRIDVECTOR posRef(partic.xx,partic.yy,partic.z); 200 TRIDVECTOR betagammaRef(partic.xxp*partic.begamz, partic.yyp*partic.begamz, partic.begamz); 201 refPart = bareParticle(posRef, betagammaRef); 202 testNombrePartRef++; 203 if ( testNombrePartRef != 1 ) { 204 dataManager_->consoleMessage(" beamFromParmela : nombre de part. de ref different de 1 :"); 205 cerr << " nombre de part. de ref different de 1 : " << testNombrePartRef << " !! " << endl; 206 return false; 207 } 208 } 209 faisceau.push_back(partic); 210 } 208 211 } //while 209 210 if ( faisceau.size() == 0)211 { 212 string stringNum = mixedTools::intToString( (int)numeroParmel );213 dataManager_->consoleMessage("beamFromParmela echec lecture element numero relatif parmela : " + stringNum);214 cerr << " beamFromParmela echec lecture element numero relatif parmela " << numeroParmel << endl;215 return false;216 } 217 218 // facteur c/ 360. pour calculer (c dphi) / (360.freq)219 // avec freq en Mhz et dphi en degres et résultat en cm:220 double FACTEUR = 83.3333; // ameliorer la precision221 222 // pour l'instant on choisit un centroid nul;223 centroid.clear();224 centroid = vector<double>(6,0.0);225 226 particles.clear();227 particles.resize(faisceau.size(), bareParticle());228 double x,xp,y,yp;229 double betagammaz;230 double betaz;231 double deltaz;232 double dephas;233 double g;234 TRIDVECTOR pos;235 TRIDVECTOR betagamma;236 // contrairement a ce qu'indique la notice PARMELA, dans parmdesz, les xp et yp237 // sont donnes en radians238 for (unsigned k = 0; k < faisceau.size(); k++) {239 x= faisceau.at(k).xx;240 xp=faisceau.at(k).xxp;241 y= faisceau.at(k).yy;242 yp=faisceau.at(k).yyp;243 // dephasage par rapport a la reference244 dephas = faisceau.at(k).phi - phaseRef; // degrés245 g = faisceau.at(k).wz/EREST_MeV;246 betagammaz = faisceau.at(k).begamz;247 betaz = betagammaz/(g+1.0);248 deltaz = FACTEUR * betaz * dephas / referencefrequency;249 x += xp * deltaz;250 y += yp * deltaz;251 pos.setComponents(x,y,deltaz);252 betagamma.setComponents(xp*betagammaz, yp*betagammaz, betagammaz);253 particles.at(k) = bareParticle(pos,betagamma);254 }255 256 return true;212 213 if ( faisceau.size() == 0) 214 { 215 string stringNum = mixedTools::intToString( (int)numeroParmel ); 216 dataManager_->consoleMessage("beamFromParmela echec lecture element numero relatif parmela : " + stringNum); 217 cerr << " beamFromParmela echec lecture element numero relatif parmela " << numeroParmel << endl; 218 return false; 219 } 220 221 // facteur c/ 360. pour calculer (c dphi) / (360.freq) 222 // avec freq en Mhz et dphi en degres et résultat en cm: 223 double FACTEUR = 83.3333; // ameliorer la precision 224 225 // pour l'instant on choisit un centroid nul; 226 centroid.clear(); 227 centroid = vector<double>(6,0.0); 228 229 particles.clear(); 230 particles.resize(faisceau.size(), bareParticle()); 231 double x,xp,y,yp; 232 double betagammaz; 233 double betaz; 234 double deltaz; 235 double dephas; 236 double g; 237 TRIDVECTOR pos; 238 TRIDVECTOR betagamma; 239 // contrairement a ce qu'indique la notice PARMELA, dans parmdesz, les xp et yp 240 // sont donnes en radians 241 for (unsigned k = 0; k < faisceau.size(); k++) { 242 x= faisceau.at(k).xx; 243 xp=faisceau.at(k).xxp; 244 y= faisceau.at(k).yy; 245 yp=faisceau.at(k).yyp; 246 // dephasage par rapport a la reference 247 dephas = faisceau.at(k).phi - phaseRef; // degrés 248 g = faisceau.at(k).wz/EREST_MeV; 249 betagammaz = faisceau.at(k).begamz; 250 betaz = betagammaz/(g+1.0); 251 deltaz = FACTEUR * betaz * dephas / referencefrequency; 252 x += xp * deltaz; 253 y += yp * deltaz; 254 pos.setComponents(x,y,deltaz); 255 betagamma.setComponents(xp*betagammaz, yp*betagammaz, betagammaz); 256 particles.at(k) = bareParticle(pos,betagamma); 257 } 258 259 return true; 257 260 } 258 261 … … 261 264 bool softwareParmela::beamToParmela(string nameOfFile,particleBeam* beam) 262 265 { 263 if ( !beam->particleRepresentationOk() ) {264 dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed");265 cout << " softwareParmela::beamToParmela : beam not in particles form : not yet programmed " << endl;266 return false;267 }268 269 ofstream outfile;270 outfile.open(nameOfFile.c_str(),ios::out);271 if (!outfile) {272 dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream ");273 cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl;274 return false;275 }276 277 const vector<bareParticle>& partic = beam->getParticleVector();278 double weight = 1.0;279 double xx,yy,zz;280 double begamx, begamy, begamz;281 for (unsigned k = 0; k < partic.size(); k++) {282 partic.at(k).getPosition().getComponents(xx,yy,zz);283 partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz);284 outfile << xx << " " << begamx << " " << yy << " " << begamy << " " << zz << " " << begamz << " " << weight << endl;285 }286 outfile.close();287 return true;288 } 266 if ( !beam->particleRepresentationOk() ) { 267 dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed"); 268 cout << " softwareParmela::beamToParmela : beam not in particles form : not yet programmed " << endl; 269 return false; 270 } 271 272 ofstream outfile; 273 outfile.open(nameOfFile.c_str(),ios::out); 274 if (!outfile) { 275 dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream "); 276 cerr << " softwareParmela::beamToParmela : error opening output stream " << nameOfFile << endl; 277 return false; 278 } 279 280 const vector<bareParticle>& partic = beam->getParticleVector(); 281 double weight = 1.0; 282 double xx,yy,zz; 283 double begamx, begamy, begamz; 284 for (unsigned k = 0; k < partic.size(); k++) { 285 partic.at(k).getPosition().getComponents(xx,yy,zz); 286 partic.at(k).getBetaGamma().getComponents(begamx,begamy,begamz); 287 outfile << xx << " " << begamx << " " << yy << " " << begamy << " " << zz << " " << begamz << " " << weight << endl; 288 } 289 outfile.close(); 290 return true; 291 } -
Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_elementLigneFaisceau.h
r347 r359 60 60 return GWt_abstractElement_; 61 61 } 62 62 63 63 private: 64 64 … … 74 74 PspaApplication* pspa_; 75 75 GWt_abstractElement* GWt_abstractElement_; 76 WContainerWidget* elementContainer_; 76 77 }; 77 78 #endif -
Interface_Web/trunk/pspaWT/sources/userInterface/include/GWt_ligneFaisceau.h
r308 r359 74 74 void update(); 75 75 76 /** update the status of the given index element 77 */ 78 void update(int); 79 76 80 private : 77 81 void manageLineFaisceauLayout(); -
Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_abstractElement.cc
r343 r359 32 32 { 33 33 abstractElement_ = elem; 34 setStyleClass("beamLineIcon");35 34 } 36 35 … … 83 82 void GWt_abstractElement::updateLabelAndToolTipWidget() 84 83 { 84 if (abstractElement_ != NULL) { 85 85 elementLigneFaiseauContainer_->setElementLabel(abstractElement_->getLabel()); 86 86 setToolTip(print()); 87 } 87 88 } 88 89 … … 111 112 ligneFaisceau->removeElement(this); 112 113 } 113 114 114 115 115 WContainerWidget* GWt_abstractElement::getWidget() { -
Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc
r347 r359 28 28 29 29 GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(PspaApplication* pspa) 30 31 32 33 34 35 36 37 { 38 initialize_ligneFaisceau(inconnu);30 : WContainerWidget(), 31 firstTimeInsertMessage_(NULL), 32 dropZoneLeft_(NULL), 33 dropZoneRight_(NULL), 34 GWt_abstractElement_(NULL), 35 elementLabel_(NULL), 36 pspa_(pspa) 37 { 38 initialize_ligneFaisceau(inconnu); 39 39 } 40 40 41 41 42 42 GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(typedElement type, PspaApplication* pspa) 43 44 45 46 47 48 49 50 { 51 // set the css name52 setObjectName("elementLigneFaisceau");53 initialize_ligneFaisceau(type);43 : WContainerWidget(), 44 firstTimeInsertMessage_(NULL), 45 dropZoneLeft_(NULL), 46 dropZoneRight_(NULL), 47 GWt_abstractElement_(NULL), 48 elementLabel_(NULL), 49 pspa_(pspa) 50 { 51 // set the css name 52 setObjectName("elementLigneFaisceau"); 53 initialize_ligneFaisceau(type); 54 54 } 55 55 … … 57 57 { 58 58 59 cout<<"new GWt_elementLigneFaisceau : "<< this << endl; 60 61 // set layout 62 // +----------+--------+---------+ 63 // | (--->) | ELEM | (-----) | 64 // +----------+--------+---------+ 65 // | NAME | 66 // +----------+--------+---------+ 67 68 69 WGridLayout *gridLayout = new WGridLayout(); 70 71 gridLayout->setContentsMargins(0,0,0,0); 72 gridLayout->setHorizontalSpacing(0); 73 gridLayout->setVerticalSpacing(0); 74 75 // add first line : initialize arrow and link images 76 dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_); 77 dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_); 78 79 // change object name in order to manage css : 80 dropZoneLeft_->resize(10,30); 81 dropZoneRight_->resize(10,30); 82 83 gridLayout->addWidget (dropZoneLeft_,0,0); 84 gridLayout->addWidget (dropZoneRight_,0,2); 59 cout<<"new GWt_elementLigneFaisceau : "<< this << endl; 60 61 // set layout 62 // +----------+--------+---------+ 63 // | (--->) | ELEM | (-----) | 64 // +----------+--------+---------+ 65 66 67 WGridLayout *gridLayout = new WGridLayout(); 68 69 gridLayout->setContentsMargins(0,0,0,0); 70 gridLayout->setHorizontalSpacing(0); 71 gridLayout->setVerticalSpacing(0); 85 72 86 73 // add first line : initialize arrow and link images … … 95 82 gridLayout->addWidget (dropZoneRight_,0,2); 96 83 84 // add first line : initialize arrow and link images 85 dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_); 86 dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_); 87 88 // change object name in order to manage css : 89 dropZoneLeft_->resize(10,30); 90 dropZoneRight_->resize(10,30); 91 92 gridLayout->addWidget (dropZoneLeft_,0,0); 93 gridLayout->addWidget (dropZoneRight_,0,2); 94 97 95 // add the image if present 98 96 … … 122 120 GWt_abstractElement_ = NULL; 123 121 } 122 123 elementContainer_ = new WContainerWidget(); 124 WVBoxLayout* vLayoutElementContainer = new WVBoxLayout(); 125 126 elementContainer_->setStyleClass("beamLineIcon"); 127 elementContainer_->setLayout(vLayoutElementContainer); 128 129 130 124 131 if (GWt_abstractElement_ != NULL) { 125 gridLayout->addWidget (GWt_abstractElement_,0,1);132 vLayoutElementContainer->addWidget(GWt_abstractElement_); 126 133 GWt_abstractElement_->setMaximumSize(80,80); 127 134 GWt_abstractElement_->setMinimumSize(80,80); 128 135 } 129 136 130 // add second line131 132 137 if (GWt_abstractElement_ == NULL) { 133 elementLabel_ = new WText();138 elementLabel_ = new WText(); 134 139 } else { 135 elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel()); 136 } 137 138 gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle); 140 elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel()); 141 } 142 143 vLayoutElementContainer->addWidget(elementLabel_,Wt::AlignCenter |Wt::AlignMiddle); 144 // gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle); 145 146 // Add Actions 147 WContainerWidget* actions = new WContainerWidget(); 148 WVBoxLayout* vLayoutActions = new WVBoxLayout(); 149 actions->setLayout(vLayoutActions); 150 151 WText* actionParameters = new WText(" "); 152 WText* actionSoftware = new WText("Software"); 153 154 // Set class for actions elements 155 actionParameters->setStyleClass("Button WhiteButton ContrastButton parameters"); 156 actionParameters->setMaximumSize(32,32); 157 actionParameters->setMinimumSize(32,32); 158 159 actionSoftware->setStyleClass("Button WhiteButton ContrastButton software"); 160 actionParameters->setPositionScheme(Wt::Static); 161 162 // Set the global action class 163 actions->setStyleClass("beamLineElementActions"); 164 actions->setPositionScheme(Wt::Static); 165 actions->setOffsets(0); 166 167 vLayoutActions->addWidget(actionParameters); 168 vLayoutActions->addWidget(actionSoftware); 169 vLayoutElementContainer->addWidget(actions); 170 171 gridLayout->addWidget (elementContainer_,0,1); 139 172 140 173 gridLayout->setColumnStretch (0,1); … … 143 176 // set layout 144 177 setLayout(gridLayout); 178 145 179 } 146 180 … … 151 185 152 186 void GWt_elementLigneFaisceau::setBGColor(const WColor c) { 153 decorationStyle().setBackgroundColor (c);187 elementContainer_->decorationStyle().setBackgroundColor (c); 154 188 } 155 189 … … 157 191 void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw) 158 192 { 159 if (messageDropZone_->result() == WDialog::Accepted) {160 // FIXME161 // removeDropZone();162 }193 if (messageDropZone_->result() == WDialog::Accepted) { 194 // FIXME 195 // removeDropZone(); 196 } 163 197 } 164 198 165 199 166 200 void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem) 167 { 168 clear();169 GWt_abstractElement_ = elem;170 addWidget(GWt_abstractElement_);171 if (static_cast <WContainerWidget*> (parent())) {172 WContainerWidget* wc = static_cast <WContainerWidget*> (parent());173 WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));174 layout->setStretchFactor(this,0);175 }176 177 178 firstTimeInsertMessage_ = NULL;201 { 202 clear(); 203 GWt_abstractElement_ = elem; 204 addWidget(GWt_abstractElement_); 205 if (static_cast <WContainerWidget*> (parent())) { 206 WContainerWidget* wc = static_cast <WContainerWidget*> (parent()); 207 WBoxLayout* layout = ((WBoxLayout*)(wc->layout())); 208 layout->setStretchFactor(this,0); 209 } 210 211 212 firstTimeInsertMessage_ = NULL; 179 213 dropZoneLeft_ = NULL; 180 214 } … … 182 216 183 217 std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){ 184 string str = "";218 string str = ""; 185 219 186 220 if (static_cast <WContainerWidget*> (parent())) { … … 223 257 224 258 void GWt_elementLigneFaisceau::setElementLabel(std::string label) { 225 if (elementLabel_) { 226 elementLabel_->setText(label); 227 } 228 } 259 if (elementLabel_) { 260 elementLabel_->setText(label.substr(0,10)); 261 elementLabel_->setToolTip(label); 262 } 263 } -
Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc
r343 r359 138 138 139 139 // update labels 140 elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget(); 141 140 if (elem->getGWt_AbstractElement()) { 141 elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget(); 142 } 142 143 // one element 143 144 if ((a == 0) && (a == (ligneFaisceauLayout_->count()-1))) { … … 210 211 211 212 abstractElement* GWt_LigneFaisceau::getAbstractElement(int i){ 212 int index = 0; 213 214 // first if 1 215 // i--; 216 217 for (int a=0; a< ligneFaisceauLayout_->count(); a++) { 218 if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) { 219 if (index == i) { 220 printf("GWt_LigneFaisceau::getAbstractElement %d %s\n",i,elem->getGWt_AbstractElement()->getAbstractElement()->getLabel().c_str()); 221 return elem->getGWt_AbstractElement()->getAbstractElement(); 222 } 223 index ++; 224 } 225 } 226 return NULL; 213 int index = 0; 214 if (i < 0) { 215 return NULL; 216 } 217 218 // first if 1 219 // i--; 220 for (int a=0; a< ligneFaisceauLayout_->count(); a++) { 221 if (ligneFaisceauLayout_->itemAt(a)) { 222 223 if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) { 224 if (index == i) { 225 if (elem->getGWt_AbstractElement()) { 226 return elem->getGWt_AbstractElement()->getAbstractElement(); 227 } 228 } 229 index ++; 230 } 231 } 232 } 233 return NULL; 227 234 } 228 235 … … 238 245 } 239 246 247 240 248 vector <abstractElement*> GWt_LigneFaisceau::getAllAbstractElements() 241 249 { … … 249 257 } 250 258 259 void GWt_LigneFaisceau::update(int i){ 260 int index = 0; 261 262 // first if 1 263 // i--; 264 265 for (int a=0; a< ligneFaisceauLayout_->count(); a++) { 266 if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) { 267 if (index == i) { 268 elem->setBGColor(WColor(elem->getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor())); 269 } 270 index ++; 271 } 272 } 273 } 274 -
Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_softwarePanel.cc
r358 r359 1 //2 1 // GWt_softwarePanel.cpp 3 2 // PSPA … … 260 259 exec_go_->setDisabled(false); 261 260 261 } 262 263 264 bool GWt_softwarePanel::areDataCoherent() 265 { 266 bool caMarche = true; 267 dtmanage_->initializeExecution(); 268 string diagnostic; 269 270 list<GWt_sectionToExecute*>::iterator itr; 271 for(itr = selectedSections_.begin(); itr != selectedSections_.end(); itr++) 272 { 273 string debString = (*itr)->debut->text().toUTF8(); 274 string finString = (*itr)->fin->text().toUTF8(); 262 275 263 // All ok, then put colors on beamLine 264 list<GWt_sectionToExecute*>::iterator itr2; 265 for(itr2 = selectedSections_.begin();itr2 != selectedSections_.end(); itr2++) 266 { 267 string debString = (*itr2)->debut->text().toUTF8(); 268 string finString = (*itr2)->fin->text().toUTF8(); 269 270 271 int debut = dtmanage_->getNumeroFromElementLabel(debString); 272 int fin = dtmanage_->getNumeroFromElementLabel(finString); 273 /** 274 for (int i=debut; i=<fin; i++) { 275 getBeamLine()->getAbstractElement(i)->setBGColor( 276 276 int debut = dtmanage_->getNumeroFromElementLabel(debString); 277 int fin = dtmanage_->getNumeroFromElementLabel(finString); 278 nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() ); 279 dtmanage_->addSectionToExecute(debut,fin,prog); 280 281 // check sections 282 for (int i=debut-1; i<fin; i++) { 283 if (pspa_->getBeamLine()) { 284 if (pspa_->getBeamLine()->getAbstractElement(i)) { 285 if (!pspa_->getBeamLine()->getAbstractElement(i)->setSoftware(prog.getString())) { 286 diagnostic += pspa_->getBeamLine()->getAbstractElement(i)->getLabel()+ "could not be associate with "+ prog.getString()+" "; 287 caMarche = false; 288 } else { 289 pspa_->getBeamLine()->update(i); 290 } 291 } 277 292 } 278 nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() ); 279 dtmanage_->addSectionToExecute(debut,fin,prog); 293 } 294 } 295 296 // trivaluedBool essai = dtmanage_->checkExecute(diagnostic); 297 298 if ( caMarche == false ) { 299 GWt_dialog calculDialog("PSPA check execute : ERROR", diagnostic , GWt_dialog::Error,true,true); 300 calculDialog.exec(); 301 /* 302 } else if ( essai == warning ) { 303 GWt_dialog calculDialog("PSPA check execute : warning ", diagnostic , GWt_dialog::Warning, false,true); 304 calculDialog.exec(); 280 305 */ 281 } 282 } 283 284 285 bool GWt_softwarePanel::areDataCoherent() 286 { 287 bool caMarche = true; 288 dtmanage_->initializeExecution(); 289 290 list<GWt_sectionToExecute*>::iterator itr; 291 for(itr = selectedSections_.begin(); itr != selectedSections_.end(); itr++) 292 { 293 string debString = (*itr)->debut->text().toUTF8(); 294 string finString = (*itr)->fin->text().toUTF8(); 295 296 int debut = dtmanage_->getNumeroFromElementLabel(debString); 297 int fin = dtmanage_->getNumeroFromElementLabel(finString); 298 nomDeLogiciel prog = nomDeLogiciel ( (*itr)->selection->currentIndex() ); 299 dtmanage_->addSectionToExecute(debut,fin,prog); 300 } 301 302 string diagnostic; 303 trivaluedBool essai = dtmanage_->checkExecute(diagnostic); 304 if ( essai == error ) { 305 caMarche = false; 306 GWt_dialog calculDialog("PSPA check execute : ERROR", diagnostic , GWt_dialog::Error,true,true); 307 calculDialog.exec(); 308 } else if ( essai == warning ) { 309 caMarche = true; 310 GWt_dialog calculDialog("PSPA check execute : warning ", diagnostic , GWt_dialog::Warning, false,true); 311 calculDialog.exec(); 312 } 313 314 return caMarche; 306 } 307 308 return caMarche; 315 309 } 316 310
Note: See TracChangeset
for help on using the changeset viewer.