summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Vazquez <christian.vazquez@epfl.ch>2011-05-27 17:14:52 +0000
committerChristian Vazquez <christian.vazquez@epfl.ch>2011-05-27 17:14:52 +0000
commit1f6a3a16a53342e3885d1d16198bbe18aa1383ab (patch)
tree07ec1607ed5b5358928c35e63b804b76b95b9cb0
parent0006bb53b04fc2569839dfaf41547172a13bc7d1 (diff)
downloadvhc-1f6a3a16a53342e3885d1d16198bbe18aa1383ab.tar.gz
vhc-1f6a3a16a53342e3885d1d16198bbe18aa1383ab.tar.bz2
vhc-1f6a3a16a53342e3885d1d16198bbe18aa1383ab.zip
Mis à jour la classe parceur et le fichier xml.
-rw-r--r--src/main/Parser.cc517
-rw-r--r--src/main/Parser.h162
-rw-r--r--src/main/simulation.xml61
3 files changed, 560 insertions, 180 deletions
diff --git a/src/main/Parser.cc b/src/main/Parser.cc
index 5ac74a5..0aed354 100644
--- a/src/main/Parser.cc
+++ b/src/main/Parser.cc
@@ -4,13 +4,18 @@
* Created on: 11 mai 2011
* Author: christian
*/
-
#include "Parser.h"
+//TODO balises fermantes et header et constantes et commentaires????????
+
namespace vhc {
+
/** Cf. header.**/
-Parser::Parser(string file)
- :nameOfFile(file){}
+Parser::Parser(): nameOfFile("") {};
+
+Parser::Parser(std::string file): nameOfFile(file) {};
+
+Parser::~Parser() {};
//===========================================balises ouvrantes==========================================================================
@@ -19,6 +24,14 @@ tagStat Parser::system = "<System>";
tagStat Parser::accelerator ="<Accelerator>";
tagStat Parser::comment = "<--";
+//balises ouvrantes des constantes
+tagStat Parser::constants = "<constants>";
+tagStat Parser::dt = "<dt>";
+tagStat Parser::C = "<C>";
+tagStat Parser::E = "<E>";
+tagStat Parser::PROTON_MASS = "<PROTON_MASS>";
+tagStat Parser::ELECTRON_MASS = "<ELECTRON_MASS>";
+
//balises ouvrantes d'une particule
tagStat Parser::particle ="<Particle>";
tagStat Parser::position = "<Position>";
@@ -57,6 +70,14 @@ tagStat Parser::systemCl = "<\System>";
tagStat Parser::acceleratorCl ="<\Accelerator>";
tagStat Parser::commentCl = "-->";
+//balises fermantes des constantes
+tagStat Parser::constantsCl = "<\constants>";
+tagStat Parser::dtCl = "<\dt>";
+tagStat Parser::CCl = "<\C>";
+tagStat Parser::ECl = "<\E>";
+tagStat Parser::PROTON_MASSCl = "<\PROTON_MASS>";
+tagStat Parser::ELECTRON_MASSCl = "<\ELECTRON_MASS>";
+
//balises fermantes d'une particule
tagStat Parser::particleCl ="<\Particle>";
tagStat Parser::positionCl = "<\Position>";
@@ -87,56 +108,13 @@ tagStat Parser::quadrupoleCl ="<\Quadrupole>";
//balises fermantes d'un StraightElement
tagStat Parser::straightElementCl ="<\StraightElement>";
-//======================================================================================================================================
-//======================================================================================================================================
-//======================================================================================================================================
-Parser::readOneChar(ifstream& file){
- char tmp;
- file>>tmp;
- return tmp;
-}
-Parser::readOneInt(ifstream& file){
- int tmp;
- file>>tmp;
- return tmp;
-}
-Parser::readOneDouble(ifstream& file){
- double tmp;
- file>>tmp;
- return tmp;
-}
-Parser::readVector3D(ifstream& file){
-
- double x = readOneDouble(file);
- readComma(file);
- double y = readOneDouble(file);
- readComma(file);
- double z = readOneDouble(file);
-
- return Vector3D(x,y,z);
-}
-Parser::readOneTag(ifstream& file){
- tag tmp;
- file>>tag;
- return tmp;
-}
-Parser::readComma(ifstream& file){
- char trash;
- file>>trash;
-}
-Parser::readClosingTag(ifstream& file){
- tag tmp;
- file>>tmp;
- if(tmp != *"Cl")
- throw ReadExceptionMessage("No closing tag found.");
-}
-Parser::findNextTag(ifstream& file){}
-Parser::jumpComment(ifstream& file){}
-//======================================================================================================================================
+//===========================================================création et renvoi d'un accélérateur=======================================
Parser::extract() {
- //on déclare une flot d'entrée, ainsi qu'une sortie
+ Accelerator* acc;
+
+ //on déclare une flot d'entrée
ifstream entry;
//associe le flot d'entrée au fichier donné par l'utilisateur
@@ -144,117 +122,424 @@ Parser::extract() {
//teste si l'association a bien pu se faire
if(not entry.fail()){
- readFile(entry);
+
+ //Tant qu'on n'est pas arrivé à la fin du fichier, on continue à le lire
+ while(not file.eof()){
+
+ //tout se fait depuis ici
+ readFile(entry, *acc);
+ }
+
//A la fin de la lecture, on ferme le flot
entry.close();
}else{
//si l'association du flot d'entrée avec le fichier n'a pas pu se faire, on lance une exception
throw IOException("Cannot open file. "+nameOfFile+" not found.");
}
+
+ return acc;
}
+//===========================================================lecture du fichier .xml====================================================
+Parser::readFile(ifstream& file, Accelerator& acc){
+ try {
+
+ // on lit la balise qu'on doit traiter
+ tag tmp1 = readOneTag(file);
+
+ /*on teste si tmp1 correspond à une des balises suivantes :
+ * - soit system
+ * - soit un commentaire
+ * - sinon il y a un problème car on ne s'attend pas à autre chose à ce niveau-là
+ */
+ switch(tmp1){
+
+ case system :
+
+ readSystem(file, acc);
+ break;
+
+ case comment :
+
+ jumpComment(file);
+ break;
+
+ /* si la variable tmp1 ne contient pas les balises voulues, c'est qu'une valeur
+ * (celle contenue par la variable tmp1 donc)
+ * n'a pas été récupérée comme il faut.
+ */
+ default:
+
+ throw ReadException("Values found outside of following tags : "+system+
+ "\n Value is : "+tmp1);
+ break;
+ }
+ }
+
+ catch(Exception const& ex){
+ std::cout<<ex.getMessage()<<std::endl;
+ }
+}
+
+//==============================================================lecture de la balise system=============================================
+Parser::readSystem(ifstream& file, Accelerator& acc){
-Parser::readTag(ifstream& file){
try {
- tag tmp;
+ // on lit la balise qu'on doit traiter
+ tag tmp2 = readOneTag(file);
- //Tant qu'on n'est pas arrivé à la fin du fichier, on continue à le lire
- while(not file.eof()){
+ /*on teste si tmp2 correspond à une des balises suivantes :
+ * - soit constants
+ * - soit accelerator
+ * - soit un commentaire
+ * - sinon il y a un problème car on ne s'attend pas à autre chose à ce niveau-là
+ */
+ switch(tmp2){
- tmp = readOneTag(file);
+ case constants :
- //on teste si la ligne correspond à une des balises
- switch(tmp){
+ readConstants(file);
+ break;
- case system :
- break;
+ case accelerator :
- case accelerator :
+ buildAccelerator(file, acc);
+ break;
- Accelerator* acc = new Accelerator;
- break;
+ case comment :
- case dipole :
+ jumpComment(file);
+ break;
+
+ /* si la variable tmp2 ne contient pas les balises voulues, c'est qu'une valeur
+ * (celle contenue par la variable tmp2 donc)
+ * n'a pas été récupérée comme il faut.
+ */
+ default:
+
+ throw ReadException("Values found outside of following tags : "+constants+accelerator+
+ "\n Value is : "+tmp2);
+ break;
+ }
+ }
+
+ catch(Exception const& ex){
+ std::cout<<ex.getMessage()<<std::endl;
+ }
+}
+
+//====================================================================lecture de constantes=============================================
+Parser::readConstants(ifstream& file){
+ try {
+
+ // on lit la balise qu'on doit traiter
+ tag tmp31 = readOneTag(file);
+
+ /*on teste si tmp31 correspond à une des balises suivantes :
+ * - soit C
+ * - soit E
+ * - soit PROTON_MASS
+ * - soit ELECTRON_MASS
+ * - soit un commentaire
+ * - sinon il y a un problème car on ne s'attend pas à autre chose à ce niveau-là
+ */
+ switch(tmp31){
+
+ case C :
+
+ readC(file);
+ break;
+
+ case E :
+
+ readE(file);
+ break;
+
+ case PROTON_MASS :
+
+ readPROTON_MASS(file);
+ break;
+
+ case ELECTRON_MASS :
+
+ readELECTRON_MASS(file);
+ break;
+
+ case comment :
+
+ jumpComment(file);
+ break;
+
+ /* si la variable tmp31 ne contient pas les balises voulues, c'est qu'une valeur
+ * (celle contenue par la variable tmp31 donc)
+ * n'a pas été récupérée comme il faut.
+ */
+ default:
+
+ throw ReadException("Values found outside of following tags : "+dt+C+E+PROTON_MASS+ELECTRON_MASS+
+ "\n Value is : "+tmp31);
+ break;
+ }
+ }
+
+ catch(Exception const& ex){
+ std::cout<<ex.getMessage()<<std::endl;
+ }
+}
+
+Parser::readC(ifstream& file){
+ Parser::CP = readOneDouble(file);
+ closingTag(file);
+}
+
+Parser::readE(ifstream& file){
+ Parser::EP = readOneDouble(file);
+ closingTag(file);
+}
+
+Parser::readPROTON_MASS(ifstream& file){
+ Parser::PROTON_MASSP = readOneDouble(file);
+ closingTag(file);
+}
- try{
- tag tmp3;
- tmp=readOneTag(file);
+Parser::readELECTRON_MASS(ifstream& file){
+ Parser::ELECTRON_MASSP = readOneDouble(file);
+ closingTag(file);
+}
+
+//==========================================================fabrication de l'accélérateur===============================================
+Parser::buildAccelerator(ifstream& file, Accelerator const& acc){
+
+ try {
- switch(tmp3){
+ // on lit la balise qu'on doit traiter
+ tag tmp32 = readOneTag(file);
- case entryPos :
- Vector3D diEntryPos = readVector3D(file);
- case exitPos :
- Vector3D diExitPos = dsfaga
- }
+ /*on teste si tmp32 correspond à une des balises suivantes :
+ * - soit dipole
+ * - soit fodo
+ * - soit particle
+ * - soit quadrupole
+ * - soit straightElement
+ * - soit un commentaire
+ * - sinon il y a un problème car on ne s'attend pas à autre chose à ce niveau-là
+ */
+ switch(tmp32){
+ case dipole :
- Dipole* di = new Dipole(lkdsflksdanlkfdag);
- }
- catch(ReadException& ex){
- e.addReadExceptionMessage("Error building Dipole.");
- throw;
- }
+ acc.add(buildDipole(file));
+ break;
case fodo :
- try{
- FODO* fodo = new FODO(readsmth);
- }
- catch(ReadException& ex){
- e.addReadExceptionMessage("Error building FODO.");
- throw;
- }
+ acc.add(buildFODO(file));
+ break;
case particle :
- try{
- Particle* pa = new Particle(readsmth);
- }
- catch(ReadException& ex){
- e.addReadExceptionMessage("Error building Particle.");
- throw;
- }
+ Particle* p = new Particle;
+ acc.add(buildParticle(file,*pa));
+ break;
case quadrupole :
- try{
- Quadrupole* quad = new Quadrupole(readsmth);
- }
- catch(ReadException& ex){
- e.addReadExceptionMessage("Error building Quadrupole.");
- throw;
- }
+ acc.add(buildQuadrupole(file));
+ break;
case straightElement :
- try{
- StraightElement* se = new StraightElement(readsmth);
- }
- catch(ReadException& ex){
- e.addReadExceptionMessage("Error building StraightElement.");
- throw;
- }
+ acc.add(buildStraightElement(file));
+ break;
- // si la variable tmp est vide, on ne fait rien, si elle est non-vide mais ne contient pas de balise,
- // c'est qu'une valeur (celle contenue par la variable donc) n'a pas été récupérée comme il faut.
- default:
- //TODO si l'opérateur ne lit pas les blancs, sinon il fau mettre ça ailleurs
- readClosingTag(file);
+ case comment :
- //TODO est-ce que l'opérateur >> lit les blancs?
- //if(tmp != " ") throw ReadException("Values found outside of tag");
+ jumpComment(file);
break;
+ /* si la variable tmp32 ne contient pas les balises voulues, c'est qu'une valeur
+ * (celle contenue par la variable tmp32 donc)
+ * n'a pas été récupérée comme il faut.
+ */
+ default:
- }
- }
+ throw ReadException("Values found outside of following tags : "+dipole+fodo+particle+quadrupole+straightElement+
+ "\n Value is : "+tmp32);
+ break;
+ }//switch
+ }//try
+ catch(Exception const& ex){
+ std::cout<<ex.getMessage()<<std::endl;
}
+}
+
+//===========================================================construction d'une nouvelle particule======================================
+Parser::buildParticle(ifstream& file, Particle const& p){
+ try {
+
+ // on lit la balise qu'on doit traiter
+ tag tmp41 = readOneTag(file);
+
+ /*on teste si tmp41 correspond à une des balises suivantes :
+ * - soit position
+ * - soit mass
+ * - soit charge
+ * - soit energy
+ * - soit direction
+ * - soit un commentaire
+ * - sinon il y a un problème car on ne s'attend pas à autre chose à ce niveau-là
+ */
+ switch(tmp41){
+
+ case position :
+
+ p.setPosition(readPosition(file));
+ break;
+
+ case mass :
+
+ p.setMass(readMass(file));
+ break;
+
+ case charge :
+
+ p.setCharge(readCharge(file));
+ break;
+
+ case energy :
+
+ p.setEnergy(readEnergy(file));//TODO faire un set Energy!!!!!
+ break;
+
+ case direction :
+
+ acc.add(buildStraightElement(file));
+ break;
+
+ case comment :
+
+ jumpComment(file);
+ break;
+
+ /* si la variable tmp41 ne contient pas les balises voulues, c'est qu'une valeur
+ * (celle contenue par la variable tmp41 donc)
+ * n'a pas été récupérée comme il faut.
+ */
+ default:
+
+ throw ReadException("Values found outside of following tags : "+dipole+fodo+particle+quadrupole+straightElement+
+ "\n Value is : "+tmp41);
+ break;
+ }//switch
+ }//try
+
catch(Exception const& ex){
std::cout<<ex.getMessage()<<std::endl;
}
}
+Parser::readPosition(ifstream& file){
+
+}
+
+Parser::readMass(ifstream& file){
+
+}
+
+Parser::readCharge(ifstream& file){
+
+}
+
+Parser::readEnergy(ifstream& file){
+
+}
+
+Parser::readDirection(ifstream& file){
+
+}
+
+//===========================================================construction d'une nouvelle FODO===========================================
+Parser::buildFODO(ifstream& file){
+
+}
+
+//===========================================================construction d'un nouveau Dipole===========================================
+Parser::buildDipole(ifstream& file){
+
+}
+
+//============================================================construction d'un nouveau quadrupole======================================
+Parser::buildQuadrupole(ifstream& file){
+
+}
+
+//============================================================construction d'un nouveau straight Element================================
+Parser::buildStraightElement(ifstream& file){
+
+}
+
+//=======================================================lecture atomique===============================================================
+Parser::readOneChar(ifstream& file){
+ file>>ws;
+ char tmp;
+ file>>tmp;
+ return tmp;
+}
+Parser::readOneInt(ifstream& file){
+ file>>ws;
+ int tmp;
+ file>>tmp;
+ return tmp;
+}
+Parser::readOneDouble(ifstream& file){
+ file>>ws;
+ double tmp;
+ file>>tmp;
+ return tmp;
+}
+Parser::readComma(ifstream& file){
+ char trash;
+ file>>ws;
+ file>>trash;
+}
+//===========================================================lecture moléculaire========================================================
+Parser::readVector3D(ifstream& file){
+
+ double x = readOneDouble(file);
+ readComma(file);
+ double y = readOneDouble(file);
+ readComma(file);
+ double z = readOneDouble(file);
+ file>>ws;
+
+ return Vector3D(x,y,z);
+}
+Parser::readOneTag(ifstream& file){
+ tag tmp;
+ file>>tag;
+ return tmp;
+}
+Parser::closingTag(ifstream& file){
+ tag tmp;
+ file>>ws;
+ file>>tmp;
+ //si on a pas de balise fermante (ici il devrait il y en avoir normalement une) alors on lance une exception
+ found=tmp.find("<");
+ if(found() == string::npos)
+ throw ReadExceptionMessage("No closing tag found.");
+}
+//===========================================================lecture commentaire========================================================
+Parser::jumpComment(ifstream& file){
+ tag tmp;
+ file>>ws;
+ //TODO getLine(file,tmp);
+ //si on a pas de balise fermante (ici il devrait il y en avoir normalement une) alors on lance une exception
+ found=tmp.find("-->");
+ if(found() == string::npos)
+ throw ReadExceptionMessage("No closing tag for comment found.");
+
+}
+
}//namespace
diff --git a/src/main/Parser.h b/src/main/Parser.h
index 85460c9..a0d5103 100644
--- a/src/main/Parser.h
+++ b/src/main/Parser.h
@@ -6,37 +6,71 @@
*/
#include <iostream>
#include <string>
-#include <vector>
-#include <ifstream>
-#include <ofstream>
-#include "Accelerator.h"
+#include <fstream>
#include "Vector3D.h"
+#include "Accelerator.h"
+#include "Dipole.h"
+#include "FODO.h"
+#include "Quadrupole.h"
+#include "StraightElement.h"
+#include "Particle.h"
#include "exceptions.h"
#ifndef PARSER_H_
#define PARSER_H_
-namespace vhc {
-
-
typedef tag string;
typedef tagStat static tag;
+namespace vhc {
+
+/** Cette classe contient une méthode <code>extract<\code> chargée de créer et renvoyer un pointeur
+ * sur l'accélérateur contenu dans le .xml. <b>ATTENTION : cette méthode est une "factory method",
+ * donc il faut soi-même ajouter le <code>delete<\code> après appel à <code>extract<\code> !<\b>
+ * Sont à supprimer : les pointeurs sur chaque particule, element ou accelerateur contenu dans le .xml
+ **/
+
class Parser {
public:
- Parser(string);
- virtual ~Parser(){}
- Accelerator* extract(string);
+ Parser();
+
+ /** Constructeur d'un Parseur. Prend en argument le chemin d'accès du fichier à lire. **/
+ Parser(std::string file);
+
+ /**Destructeur virtuel. **/
+ virtual ~Parser();
+
+ /** Méthode chargée de lire le fichier .xml et de renvoyer un pointeur sur l'accélérateur ainsi construit. **/
+ Accelerator* extract();
private:
+
+ /** Attribut contenant le chemin d'accès du fichier. **/
string nameOfFile;
+
+//===========================================constantes=================================================================================
+
+ const double CP;
+ const double EP;
+ const double PROTON_MASSP;
+ const double ELECTRON_MASSP;
+ const double GeVP = 1E9 * EP;
+
//===========================================balises ouvrantes==========================================================================
- //balises ouvrantes d'un système
+ /** Balises ouvrantes d'un système. **/
tagStat system;
tagStat accelerator;
tagStat comment;
- //balises ouvrantes d'une particule
+ /** Balises ouvrantes des constantes. **/
+ tagStat constants;
+ tagStat dt;
+ tagStat C;
+ tagStat E;
+ tagStat PROTON_MASS;
+ tagStat ELECTRON_MASS;
+
+ /** Balises ouvrantes d'une particule. **/
tagStat particle;
tagStat position;
tagStat mass;
@@ -44,37 +78,45 @@ private:
tagStat energy;
tagStat direction;
- //balises ouvrantes d'un Element
+ /** Balises ouvrantes d'un Element. **/
tagStat entryPos;
tagStat exitPos;
tagStat sectionRadius;
- //balises ouvrantes d'un dipole
+ /** Balises ouvrantes d'un dipole. **/
tagStat dipole;
tagStat curvature;
tagStat magneticField;
- //balise ouvrantes commune aux quadrupoles et aux fodo
+ /** Balise ouvrantes commune aux quadrupoles et aux fodo. **/
tagStat focCoeff;
- //balises ouvrantes d'une FODO
+ /** Balises ouvrantes d'une FODO. **/
tagStat fodo;
tagStat straightLength;
- //balises ouvrante d'un quadrupole
+ /** Balises ouvrante d'un quadrupole. **/
tagStat quadrupole;
- //balises ouvrantes d'une straightElement
+ /** Balises ouvrantes d'une straightElement. **/
tagStat straightElement;
//===================================================balises fermantes==================================================================
- //balises fermantes d'un système
+ /** Balises fermantes d'un système. **/
tagStat systemCl;
tagStat acceleratorCl;
tagStat commentCl;
- //balises fermantes d'une particule
+ /** Balises fermantes des constantes. **/
+ tagStat constantsCl;
+ tagStat dtCl;
+ tagStat CCl;
+ tagStat ECl;
+ tagStat PROTON_MASSCl;
+ tagStat ELECTRON_MASSCl;
+
+ /** Balises fermantes d'une particule. **/
tagStat particleCl;
tagStat positionCl;
tagStat massCl;
@@ -82,47 +124,93 @@ private:
tagStat energyCl;
tagStat directionCl;
- //balises fermantes d'un Element
+ /** Balises fermantes d'un Element. **/
tagStat entryPosCl;
tagStat exitPosCl;
tagStat sectionRadiusCl;
- //balises fermantes d'un dipole
+ /** Balises fermantes d'un dipole. **/
tagStat dipoleCl;
tagStat curvatureCl;
tagStat magneticFieldCl;
- //balise fermantes commune aux quadrupoles et aux fodo
+ /** Balise fermantes commune aux quadrupoles et aux fodo. **/
tagStat focCoeffCl;
- //balises fermantes d'une FODO
+ /** Balises fermantes d'une FODO. **/
tagStat fodoCl;
tagStat straightLengthCl;
- //balises fermantes d'un quadrupole
+ /** Balises fermantes d'un quadrupole. **/
tagStat quadrupoleCl;
- //balises fermantes d'une straightElement
+ /** Balises fermantes d'une straightElement. **/
tagStat straightElementCl;
-//======================================================autres méthodes=================================================================
+//=============================================================méthodes=================================================================
- //méthodes de lectures génériques
- string readFile(ifstream& file);
+ /** Crée et renvoie un accélérateur par appel de la fonction readFile. **/
+ Accelerator* extract();
- //méthodes gestion balises
- tag readOpeningBalise(ifstream& file);
- tag readClosingBalise(ifstream& file);
- tag findNextBalise(ifstream& file);
+ /** Lit le fichier .xml. **/
+ void readFile(ifstream& file, Accelerator& acc);
- //méthode pour commentaire
- void jumpComment(ifstream& file);
+ /** Lit la balise system. Cette méthode appelle readConstants et buildAccelerator. **/
+ void readSystem(ifstream& file, Accelerator& acc);
+
+ /** Affecte les attributs statiques contenant les constantes physiques. **/
+ void readConstants(ifstream& file);
+
+ /** Affecte l'attribut dt. **/
+ void readdt(ifstream& file);
+
+ /** Affecte l'attribut C. **/
+ void readC(ifstream& file);
+
+ /** Affecte l'attribut E. **/
+ void readE(ifstream& file);
+
+ /** Affecte l'attribut PROTON_MASS. **/
+ void readPROTON_MASS(ifstream& file);
+
+ /** Affecte l'attribut ELECTRON_MASS. **/
+ void readELECTRON_MASS(ifstream& file);
- //méthodes atomiques de lecture
+ /** Ajoute les différents éléments et particules du fichier dans l'Accelerator passé en argument. **/
+ void buildAccelerator(ifstream& file, Accelerator const& acc);
+
+ /** Construction d'une nouvelle Particle. **/
+ Particle* buildParticle(ifstream& file);
+
+ /** Construction d'une nouvelle FODO. **/
+ FODO* buildFODO(ifstream& file);
+
+ /** Construction d'un nouveau Dipole. **/
+ Dipole* buildDipole(ifstream& file);
+
+ /** Construction d'un nouveau quadrupole. **/
+ Quadrupole* buildQuadrupole(ifstream& file);
+
+ /** Construction d'un nouveau StraightElement. **/
+ StraightElement* buildStraightElement(ifstream& file);
+
+ /** Lit un char. **/
char readOneChar(ifstream& file);
+ /** Lit un int. **/
int readOneInt(ifstream& file);
+ /** Lit un double. **/
double readOneDouble(ifstream& file);
- Vector3D readOnePosition(ifstream& file);
+ /** Saute une virgule. **/
+ void readComma(ifstream& file);
+
+ /** Lit un Vector3D. **/
+ Vector3D readVector3D(ifstream& file);
+ /** Lit ue balise. **/
+ tag readOneTag(ifstream& file);
+ /** Cherche et lit une balise fermante. **/
+ void closingTag(ifstream& file);
+ /** Saute un commentaire. **/
+ void jumpComment(ifstream& file);
};
diff --git a/src/main/simulation.xml b/src/main/simulation.xml
index c70f26e..24d1b79 100644
--- a/src/main/simulation.xml
+++ b/src/main/simulation.xml
@@ -1,32 +1,39 @@
<System>
- <Particle>
- <Position>
- 3.01,0,0
- <\Position>
- <Mass>
- 1
- <\Mass>
- <!-- ICI PAR RAPPORT A LA MASSE DU PROTON -->
- <Charge>
- 1
- <\Charge>
- <!-- ICI PAR RAPPORT A LA CHARGE DE L'ELECTRON -->
- <Energy>
- 2
- <\Energy>
- <!-- ICI PAR RAPPORT A UN GeV -->
- <Direction>
- 0,-1,0
- <\Direction>
- <\Particle>
- <Particle>
- <Position>2.99,0,0<\Position>
- <Mass>1<\Mass><!-- ICI PAR RAPPORT A LA MASSE DU PROTON -->
- <Charge>1<\Charge><!-- ICI PAR RAPPORT A LA CHARGE DE L'ELECTRON -->
- <Energy>2<\Energy><!-- ICI PAR RAPPORT A UN GeV -->
- <Direction>0,-1,0<\Direction>
- <\Particle>
+ <constants>
+ <dt>10E-11<\dt>
+ <C>299792458.0<\C>
+ <E>1.60217653E-19<\E>
+ <PROTON_MASS>1.672623E-27<\PROTON_MASS>
+ <ELECTRON_MASS>9.109383E-31<\ELECTRON_MASS>
+ <\constants>
<Accelerator>
+ <Particle>
+ <Position>
+ 3.01,0,0
+ <\Position>
+ <Mass>
+ 1
+ <\Mass>
+ <!-- ICI PAR RAPPORT A LA MASSE DU PROTON -->
+ <Charge>
+ 1
+ <\Charge>
+ <!-- ICI PAR RAPPORT A LA CHARGE DE L'ELECTRON -->
+ <Energy>
+ 2
+ <\Energy>
+ <!-- ICI PAR RAPPORT A UN GeV -->
+ <Direction>
+ 0,-1,0
+ <\Direction>
+ <\Particle>
+ <Particle>
+ <Position>2.99,0,0<\Position>
+ <Mass>1<\Mass><!-- ICI PAR RAPPORT A LA MASSE DU PROTON -->
+ <Charge>1<\Charge><!-- ICI PAR RAPPORT A LA CHARGE DE L'ELECTRON -->
+ <Energy>2<\Energy><!-- ICI PAR RAPPORT A UN GeV -->
+ <Direction>0,-1,0<\Direction>
+ <\Particle>
<FODO>
<EntryPosition>3,2,0<\EntryPosition>
<ExitPosition>3,-2,0<\ExitPosition>