source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/softwareUsersprogram.cc @ 493

Last change on this file since 493 was 493, checked in by lemeur, 10 years ago

refection generale des secteurs et applications de softwares (suite)

File size: 4.1 KB
Line 
1#include "softwareUsersprogram.h"
2#include "abstractElement.h"
3#include "dataManager.h"
4
5#include <algorithm>
6
7softwareUsersprogram::softwareUsersprogram() : abstractSoftware()
8{
9  nameOfSoftware_ = new nomDeLogiciel("usersprogram");
10}
11
12// softwareUsersprogram::softwareUsersprogram(string inputFileName, sectionToExecute* sect, dataManager* data) : abstractSoftware(inputFileName, sect,data)
13// {
14//   cout << " softwareUsersprogram::softwareUsersprogram ENREGISTREMENT " << endl;
15//   nameOfSoftware_ = new nomDeLogiciel("usersprogram");
16//   //  registerElement(nomdElements::snapshot,TBoolOk);
17// }
18
19softwareUsersprogram::softwareUsersprogram(string inputFileName, computingBlock* cmpb, dataManager* data) : abstractSoftware(inputFileName, cmpb,data)
20{
21  cout << " softwareUsersprogram::softwareUsersprogram ENREGISTREMENT " << endl;
22  nameOfSoftware_ = new nomDeLogiciel("usersprogram");
23  //  registerElement(nomdElements::snapshot,TBoolOk);
24}
25
26bool softwareUsersprogram::createInputFile(particleBeam* beamBefore, string workingDir)
27{ 
28
29  abstractElement* element = getComputingBlock()->getFirstElement();
30
31  // Dans le cas où l'element n'est pas snapshot
32  if ( element->getNomdElement().getElementType() != nomdElements::snapshot ) {
33    cout << " ERROR softwareUsersprogram::execute : element non snapshot " << endl;
34    return false;
35  }
36
37  vector< pair<string, vector<string> > > donnees = element->parametersToSoftware();
38  nomProgram_ = "";
39  outputFileName_ = "";
40  for (int k=0; k < donnees.size(); k++) {
41    if ( donnees.at(k).first == "nameOfFiles" ) {
42      if ( donnees.at(k).second.size() < 3 ) {
43        cout << " ERROR softwareUsersprogram::createInputFile " << endl;
44        return false;
45      }
46      nomProgram_ = donnees.at(k).second.at(0).c_str();
47      inputFileName_ = donnees.at(k).second.at(1).c_str();
48      outputFileName_ = donnees.at(k).second.at(2).c_str();
49      break;
50    }
51  }
52
53  string aml_file = workingDir  + inputFileName_ + ".aml";
54    beamBefore->writeToAMLFile(aml_file);
55
56  return true;
57}
58
59bool softwareUsersprogram::execute(string workingDir)
60{
61  bool ExecuteStatus = true;
62
63
64  ostringstream sortie;
65  sortie << " EXECUTION DE " << nomProgram_ << endl;
66 
67  string usersprogramJob = workingDir + nomProgram_;
68  usersprogramJob += " " + workingDir + inputFileName_;
69  usersprogramJob += " " + workingDir + outputFileName_;
70  cout << " job utilisateur= " << usersprogramJob << endl;
71 
72  string resultOfRun;
73  bool success = launchJob(usersprogramJob,resultOfRun);
74  sortie << resultOfRun << endl;
75  if ( !success ) {
76    sortie << " launching of transport failed " << endl;
77    ExecuteStatus = false;
78  } else {
79    string nameOut = workingDir + outputFileName_;
80    ofstream outfile;
81    outfile.open(nameOut.c_str(), ios::out);
82    if (!outfile) {
83      sortie << " error first opening user's program output stream " << nameOut << endl;
84      ExecuteStatus = false;
85    } else {
86      outfile.close();
87    }
88  }
89
90  dataManager_->consoleMessage(sortie.str());
91  return ExecuteStatus;
92}
93
94bool softwareUsersprogram::buildBeamAfterElements(string workingDir) 
95{
96
97  bool result = true;
98
99
100
101
102
103
104
105 
106  //  for (unsigned k = numeroDeb_; k <= numeroFin_; k++)
107 
108  abstractElement* ptr = getComputingBlock()->getFirstElement();
109      if ( ptr == NULL ) {
110        dataManager_->consoleMessage("ERROR  softwareUsersprogram::buildBeamAfterElements : null pointer on element " );
111        cout << " ERROR softwareUsersprogram::buildBeamAfterElements : null pointer on element " << endl;
112        return false;         
113      }
114
115
116      if ( nameOfSoftware_->doAcceptElement(ptr->getNomdElement().getElementType())  != TBoolOk ) {
117        dataManager_->consoleMessage("ERROR  softwareUsersprogram::buildBeamAfterElements : element rejected by user's program " );
118        cout << "ERROR  softwareUsersprogram::buildBeamAfterElements : element rejected by user's program " << endl;
119
120      } else {
121        // si le numero est reconnu
122        string elemLabel = ptr->getLabel();
123        // on initialise une nouvelle sortie diagnostic
124          particleBeam* newDiag = dataManager_->updateCurrentDiagnostic(true);
125        // et on la complete
126          string aml_file = workingDir  + outputFileName_ + ".aml";
127
128          newDiag->readFromAMLFile(aml_file);
129       
130      }
131  return result;
132}
Note: See TracBrowser for help on using the repository browser.