#include "softwareTest.h" #include "abstractElement.h" #include "dataManager.h" #include "mathematicalConstants.h" #include "PhysicalConstants.h" softwareTest::softwareTest() : abstractSoftware() { nameOfSoftware_ = nomDeLogiciel("test"); } softwareTest::softwareTest(string inputFileName,sectionToExecute* sect) : abstractSoftware(inputFileName, sect) { nameOfSoftware_ = nomDeLogiciel("test"); } bool softwareTest::createInputFile( particleBeam* beamBefore, string workingDir) { dataManager_->consoleMessage(" softwareTest::createInputFile " ); beamToParin(workingDir, beamBefore ); return true; } bool softwareTest::execute(string workingDir) { dataManager_->consoleMessage(" softwareTest::execute " ); return true; } bool softwareTest::buildBeamAfterElements(string workingDir) { dataManager_->consoleMessage(" softwareTest::buildBeamAfterElements " ); bool result = true; unsigned k; for ( k= numeroDeb_deprecated_; k <= numeroFin_deprecated_; k++) { particleBeam* newDiag = dataManager_->updateCurrentDiagnostic(true); // beams.push_back(particleBeam()); vector centroid = vector(6,0.0); bareParticle refPart; vector particles; if (!beamFromParin(workingDir,particles ) ) { dataManager_->consoleMessage(" softwareTest::buildBeamAfterElements : reading parin failed " ); result = false; break; } else { bareParticle refPart (particles.at(0)); newDiag->setWithParticles(centroid, refPart,particles); } } return result; } // sauvegarde d'un 'particleBeam' sur un fichier parmela, en guise d'INPUT // pour l'instant de nom standard 'parin.input0' bool softwareTest::beamToParin(string workingDir, particleBeam* beam ) { if ( !beam->particleRepresentationOk() ) { dataManager_->consoleMessage("softwareParmela::beamToParmela : beam not in particles form : not yet programmed"); cout << " softwareParmela::beamToParmela : beam not in particles form : not yet programmed " << endl; return false; } ofstream outfile; string name = workingDir + "parin.input0"; outfile.open(name.c_str(), ios::out); if (!outfile) { dataManager_->consoleMessage(" softwareTest::beamToParin : error opening in stream "); cerr << " softwareParmela::beamToParmela : error opening output stream " << name << endl; return false; } const vector& partic = beam->getParticleVector(); unsigned k; double weight = 1.0; double xx,yy,zz; double begamx, begamy, begamz; for ( k=0; k < partic.size(); k++) { partic.at(k).getPosition().getComponents(xx,yy,zz); partic.at(k).getBetaGamma().getComponents(begamx, begamy, begamz); outfile << xx << " " << begamx << " " << yy << " " << begamy << " " << zz << " " << begamz << " " << weight << endl; } outfile.close(); return true; } bool softwareTest::beamFromParin(string workingDir, vector& particles ) { ifstream infile; string name = workingDir + "parin.input0"; infile.open(name.c_str(), ios::in); if (!infile) { dataManager_->consoleMessage(" softwareParmela::beamToParmela : error opening output stream "); cerr << " softwareParmela::beamToParmela : error opening output stream " << name << endl; return false; } particles.clear(); double weight; double xx,yy,zz; double begamx, begamy, begamz; TRIDVECTOR pos; TRIDVECTOR betagamma; while ( infile >> xx >> begamx >> yy >> begamy >> zz >> begamz >> weight) { pos.setComponents(xx,yy,zz); betagamma.setComponents(begamx, begamy, begamz); particles.push_back(bareParticle(pos,betagamma)); } infile.close(); return true; }