summaryrefslogtreecommitdiff
path: root/src/main/Parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/Parser.h')
-rw-r--r--src/main/Parser.h162
1 files changed, 125 insertions, 37 deletions
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);
};