summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2011-05-29 21:33:34 +0000
committerJakob Odersky <jodersky@gmail.com>2011-05-29 21:33:34 +0000
commit08411697aed67f3a842b141dbf1d14725d417299 (patch)
tree55f34b1d2e7a52a4e8a08736e2e381d9ab8b86ff
parent00d592af835e892902bdf6cc5db29a64f24ab9d3 (diff)
downloadvhc-08411697aed67f3a842b141dbf1d14725d417299.tar.gz
vhc-08411697aed67f3a842b141dbf1d14725d417299.tar.bz2
vhc-08411697aed67f3a842b141dbf1d14725d417299.zip
Plein de commentaires derniere minute, creation de readme.
-rw-r--r--CONCEPTION.pdfbin0 -> 113651 bytes
-rw-r--r--README.txt39
-rw-r--r--REPONSES.pdfbin132002 -> 0 bytes
-rw-r--r--reponses.lyx63
-rw-r--r--src/gui/BeamRenderer.cc3
-rw-r--r--src/gui/ElementRenderer.h12
-rw-r--r--src/gui/EnergyBeamRenderer.cc23
-rw-r--r--src/gui/EnergyBeamRenderer.h25
-rw-r--r--src/gui/KeyManager.cc4
-rw-r--r--src/gui/KeyManager.h9
-rw-r--r--src/gui/Main.cc2
-rw-r--r--src/gui/ParticleRenderer.cc50
-rw-r--r--src/gui/ParticleRenderer.h38
-rw-r--r--src/gui/Stage.cc52
-rw-r--r--src/gui/Stage.h40
-rw-r--r--src/gui/exerciceP13.cc92
-rw-r--r--src/gui/gui.pro5
-rw-r--r--src/gui/simulation.cc92
-rw-r--r--src/gui/util.h7
-rw-r--r--src/main/Element.h5
-rw-r--r--src/main/doxygen.h2
-rw-r--r--src/test/ParserTest.cc37
22 files changed, 396 insertions, 204 deletions
diff --git a/CONCEPTION.pdf b/CONCEPTION.pdf
new file mode 100644
index 0000000..06e6028
--- /dev/null
+++ b/CONCEPTION.pdf
Binary files differ
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..2b22926
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,39 @@
+Virtual Hadron Collider
+========================
+
+Projet d'informatique 2011
+Jakob Odersky, Christian Vazquez
+
+1. Nous avons tout fait jusqu'au parseurs. Concernant les interactions particules, nous avons implementes notre propre methode.
+2. Nous utilisons Qt pour l'interface graphique.
+3. En moyenne nous avons passe 4 heures par semaine sur le projet
+
+========================
+Prerequis:
+========================
+
+Qt pour l'interface graphique
+Doxygen pour generer la documentation
+GraphVIZ/Dot pour des jolies schemas dans la documentation
+
+========================
+Compilation:
+========================
+
+commande: effet
+
+make doc: genere la documentation (doc/html/index.html)
+make build: compile le programme
+make test: lance les tests
+make gui lance l'interface graphique
+
+========================
+Interface graphique:
+========================
+navigation: touches w,a,s,d pour bouger, souris pour changer tourner
+
+1: vue pleine
+2: vue grille
+3: vue points
+0: afficher points/spheres pour particules
+
diff --git a/REPONSES.pdf b/REPONSES.pdf
deleted file mode 100644
index 53c7f03..0000000
--- a/REPONSES.pdf
+++ /dev/null
Binary files differ
diff --git a/reponses.lyx b/reponses.lyx
index 460652d..c8d1fd7 100644
--- a/reponses.lyx
+++ b/reponses.lyx
@@ -719,9 +719,57 @@ Nous avons créé une classe Color qui implémente les couleurs données en
Elle est en outre dotée de quelques méthodes pratiques (voir dans doxygen).
\end_layout
+\begin_layout Section*
+Question P15.1
+\end_layout
+
+\begin_layout Standard
+Il faut comparer chaque particule a chaque autre.
+ Avec n particules il faut donc faire n tests.
+ La complexite est donc de
+\begin_inset Formula $O(n^{2})$
+\end_inset
+
+
+\end_layout
+
+\begin_layout Section*
+Question P16.1
+\end_layout
+
\begin_layout Standard
-Aucun objet héritant de la classe Printable n'hérite de cette classe, car
- nous nous sommes concentrés sur l'interface graphique de GUI dans ce projet.
+Au pire des cas, si tous les particules se retrouvent dans une case, la
+ complexites est de
+\begin_inset Formula $O(n^{2})$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Section*
+Question P16.2
+\end_layout
+
+\begin_layout Standard
+Nous n'avons pas implémentés cette méthode mais une autre, voir la doc (SAPInter
+actor.h).
+\end_layout
+
+\begin_layout Section*
+Question P17.1
+\end_layout
+
+\begin_layout Standard
+Comme avant, au pire des cas la complexite est de
+\begin_inset Formula $O(n^{2})$
+\end_inset
+
+.
+ En moyenne elle serait de
+\begin_inset Formula $O(n\: log\: n)$
+\end_inset
+
+.
\end_layout
\begin_layout Section*
@@ -836,5 +884,16 @@ Il n'y a donc pas de balises pour les constantes, car elles font partie
ce qui explique qu'il n'y ait pas de balise de type <Camera> ou <Oeil>.
\end_layout
+\begin_layout Section*
+Question P19.2
+\end_layout
+
+\begin_layout Standard
+Comme il s'agit d'une méthode de fabrication qui n'a pour bute de créer
+ un accélérateur, la méthode prendrait en string le nom d'un fichier contenant
+ la description xml du systeme et renverrait un pointeur sur un accélérateur
+ aloué dynamiquement.
+\end_layout
+
\end_body
\end_document
diff --git a/src/gui/BeamRenderer.cc b/src/gui/BeamRenderer.cc
index c3aab57..f86dbbc 100644
--- a/src/gui/BeamRenderer.cc
+++ b/src/gui/BeamRenderer.cc
@@ -12,12 +12,9 @@
namespace vhc {
BeamRenderer::BeamRenderer() {
- // TODO Auto-generated constructor stub
-
}
BeamRenderer::~BeamRenderer() {
- // TODO Auto-generated destructor stub
}
void BeamRenderer::render(const Beam& beam) const {
diff --git a/src/gui/ElementRenderer.h b/src/gui/ElementRenderer.h
index c72ff69..3f2b9d2 100644
--- a/src/gui/ElementRenderer.h
+++ b/src/gui/ElementRenderer.h
@@ -14,13 +14,19 @@
namespace vhc {
-
+/** Dessinateur d'elements. Implemente une interface de visiteur d'elements.
+ * @see ElementVisitor
+ * @see http://fr.wikipedia.org/wiki/Visiteur_%28motif_de_conception%29 */
class ElementRenderer: public ElementVisitor, public Renderer<Element> {
private:
+ /** Cotes laterales des cylindres. */
static const int SLICES = 100;
+
+ /** Divisions des cylindres. */
static const int STACKS_PER_LENGTH = 20;
+ /** Dessine un element droit. */
void drawStraight(const StraightElement* straight) const;
public:
@@ -29,12 +35,16 @@ public:
virtual ~ElementRenderer();
+ /** Dessine un element. */
virtual void render(const Element& element) const;
+ /** Visite un element droit (le dessine dans ce cas). */
virtual void visit(const StraightElement* straight) const ;
+ /** Visite un quadrupole(le dessine dans ce cas). */
virtual void visit(const Quadrupole* quadrupole) const;
+ /** Visite un dipole (le dessine dans ce cas). */
virtual void visit(const Dipole* dipole) const;
};
diff --git a/src/gui/EnergyBeamRenderer.cc b/src/gui/EnergyBeamRenderer.cc
deleted file mode 100644
index 697af31..0000000
--- a/src/gui/EnergyBeamRenderer.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * EnergyBeamRenderer.cc
- *
- * Created on: May 29, 2011
- * Author: jakob
- */
-
-#include "EnergyBeamRenderer.h"
-
-namespace vhc {
-
-EnergyBeamRenderer::EnergyBeamRenderer() {
-
-}
-
-EnergyBeamRenderer::~EnergyBeamRenderer() {
-}
-
-void EnergyBeamRenderer::render(const Beam& beam) const {
-
-}
-
-}
diff --git a/src/gui/EnergyBeamRenderer.h b/src/gui/EnergyBeamRenderer.h
deleted file mode 100644
index 7c04e9a..0000000
--- a/src/gui/EnergyBeamRenderer.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * EnergyBeamRenderer.h
- *
- * Created on: May 29, 2011
- * Author: jakob
- */
-
-#ifndef ENERGYBEAMRENDERER_H_
-#define ENERGYBEAMRENDERER_H_
-
-#include "BeamRenderer.h"
-
-namespace vhc {
-
-class EnergyBeamRenderer: BeamRenderer {
-public:
- EnergyBeamRenderer();
- virtual ~EnergyBeamRenderer();
-
- virtual void render(const Beam& beam) const;
-};
-
-}
-
-#endif /* ENERGYBEAMRENDERER_H_ */
diff --git a/src/gui/KeyManager.cc b/src/gui/KeyManager.cc
index 1637bc2..548e48d 100644
--- a/src/gui/KeyManager.cc
+++ b/src/gui/KeyManager.cc
@@ -42,8 +42,8 @@ void KeyManager::press(int key) {
case Qt::Key_Space:
stage.setRunning(!stage.isRunning());
break;
- case Qt::Key_QuoteLeft:
- stage.getBeamRenderer().setSpheresEnabled(! stage.getBeamRenderer().getSpheresEnabled());
+ case Qt::Key_0:
+ stage.getBeamRenderer()->setSpheresEnabled(! stage.getBeamRenderer()->getSpheresEnabled());
break;
default:
break;
diff --git a/src/gui/KeyManager.h b/src/gui/KeyManager.h
index 1f5f54d..8f7439c 100644
--- a/src/gui/KeyManager.h
+++ b/src/gui/KeyManager.h
@@ -14,19 +14,28 @@ namespace vhc {
class Stage;
+/** Classe responsable de la gestion des evenement de clavier. */
class KeyManager {
public:
KeyManager(Stage& stage);
virtual ~KeyManager();
+ /** Une clef est appuyee. */
void press(int key);
+
+ /** Une clef est relachee. */
void release(int key);
+
+ /** Retourne vrai si la clef donnee est appuyee, faux sinon. */
bool isPressed(int key) const;
private:
+
+ /** Scene de ce manager. */
Stage& stage;
+ /** Ensemble des clefs actuellement appuyes. */
std::set<int> keys;
};
diff --git a/src/gui/Main.cc b/src/gui/Main.cc
index e89c378..b480830 100644
--- a/src/gui/Main.cc
+++ b/src/gui/Main.cc
@@ -193,7 +193,7 @@ int main(int argc, char *argv[])
vhc::Stage window;
Accelerator* acc = standard();
- window.accelerator = acc;
+ window.setAccelerator(acc);
window.setWindowTitle("Virtual Hadron Collider");
window.resize(QSize(500, 500));
diff --git a/src/gui/ParticleRenderer.cc b/src/gui/ParticleRenderer.cc
deleted file mode 100644
index 6e1cc59..0000000
--- a/src/gui/ParticleRenderer.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ParticleRenderer.cc
- *
- * Created on: Apr 12, 2011
- * Author: jakob
- */
-
-#include <QtOpenGL>
-#include "ParticleRenderer.h"
-#include "util.h"
-
-using namespace vhc::util;
-
-namespace vhc {
-
-ParticleRenderer::ParticleRenderer(): _drawSpheres(false) {
-
-}
-
-ParticleRenderer::~ParticleRenderer() {
-
-}
-
-void ParticleRenderer::render(const Particle& particle) const {
-
- double pos[] = {particle.getPosition().getX(), particle.getPosition().getY(), particle.getPosition().getZ()};
-
- if (!_drawSpheres) {
- glBegin(GL_POINTS);
- glVertex3dv(pos);
- glEnd();
- }
- else {
- glPushMatrix();
- glTranslated(pos[0], pos[1], pos[2]);
- util::sphere(0.01);
- glPopMatrix();
- }
-
-}
-
-void ParticleRenderer::enableDrawSpheres(bool value) {
- _drawSpheres = value;
-}
-
-bool ParticleRenderer::isDrawSpheresEnabled() const {
- return _drawSpheres;
-}
-
-}
diff --git a/src/gui/ParticleRenderer.h b/src/gui/ParticleRenderer.h
deleted file mode 100644
index 458cf5c..0000000
--- a/src/gui/ParticleRenderer.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * ParticleRenderer.h
- *
- * Created on: Apr 12, 2011
- * Author: jakob
- */
-
-#ifndef PARTICLERENDERER_H_
-#define PARTICLERENDERER_H_
-
-#include "Renderer.h"
-#include "Particle.h"
-#include "util.h"
-
-namespace vhc {
-
-class ParticleRenderer: public Renderer<Particle> {
-
-private:
- bool _drawSpheres;
-
-public:
-
- ParticleRenderer();
- virtual ~ParticleRenderer();
-
- virtual void render(const Particle& particle) const;
-
- void enableDrawSpheres(bool value);
-
- bool isDrawSpheresEnabled() const;
-
-
-};
-
-}
-
-#endif /* PARTICLERENDERER_H_ */
diff --git a/src/gui/Stage.cc b/src/gui/Stage.cc
index 41c36a0..36f147e 100644
--- a/src/gui/Stage.cc
+++ b/src/gui/Stage.cc
@@ -21,10 +21,11 @@ Stage::Stage(QWidget* parent):
camera(),
keyManager(*this),
accelerator(NULL),
- elementRenderer(),
- beamRenderer(),
+ elementRenderer(new ElementRenderer),
+ beamRenderer(new BeamRenderer),
displayMode(FILL),
frameTime(0),
+ captured(false),
h(1E-12),
paused(true) {
@@ -39,6 +40,8 @@ Stage::Stage(QWidget* parent):
Stage::~Stage() {
delete timer; timer = NULL;
+ delete elementRenderer; elementRenderer = NULL;
+ delete beamRenderer; beamRenderer = NULL;
};
void Stage::initializeGL () {
@@ -119,7 +122,7 @@ void Stage::paintGL() {
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
for (Accelerator::ElementCollection::const_iterator i = accelerator->getElements().begin(); i != accelerator->getElements().end(); ++i) {
- elementRenderer.render(**i);
+ elementRenderer->render(**i);
}
glEnable(GL_DEPTH_TEST);
@@ -130,7 +133,7 @@ void Stage::paintGL() {
const Accelerator::BeamCollection& beams = accelerator->getBeams();
for (Accelerator::BeamCollection::const_iterator i = beams.begin(); i != beams.end(); ++i) {
- beamRenderer.render(**i);
+ beamRenderer->render(**i);
}
}
@@ -154,13 +157,18 @@ void Stage::paintGL() {
frameTime = time.restart();
}
+void Stage::mousePressEvent (QMouseEvent* event) {
+ captured = !captured;
+}
void Stage::mouseMoveEvent(QMouseEvent* event) {
- int dheading = -event->x() + center.x();
- int dpitch = -event->y() + center.y();
- camera.addHeading(1.0 * dheading * frameTime / 4000);
- camera.addPitch(1.0 * dpitch * frameTime / 4000);
- QCursor::setPos(QWidget::mapToGlobal(center));
+ if (captured) {
+ int dheading = -event->x() + center.x();
+ int dpitch = -event->y() + center.y();
+ camera.addHeading(1.0 * dheading * frameTime / 4000);
+ camera.addPitch(1.0 * dpitch * frameTime / 4000);
+ QCursor::setPos(QWidget::mapToGlobal(center));
+ }
}
void Stage::keyPressEvent (QKeyEvent* event) {
@@ -191,13 +199,35 @@ void Stage::setRunning(bool value) {
paused = !value;
}
-ElementRenderer& Stage::getElementRenderer(){
+ElementRenderer* Stage::getElementRenderer() const {
return elementRenderer;
}
+void Stage::setElementRenderer(ElementRenderer* value) {
+ elementRenderer = value;
+}
-BeamRenderer& Stage::getBeamRenderer() {;
+BeamRenderer* Stage::getBeamRenderer() const {
return beamRenderer;
}
+void Stage::setBeamRenderer(BeamRenderer* value) {
+ beamRenderer = value;
+}
+
+Accelerator* Stage::getAccelerator() const {
+ return accelerator;
+}
+void Stage::setAccelerator(Accelerator* accelerator) {
+ this->accelerator = accelerator;
+}
+
+double Stage::getStep() const {
+ return h;
+}
+
+void Stage::setStep(double value) {
+ h = value;
+}
+
}
diff --git a/src/gui/Stage.h b/src/gui/Stage.h
index cb46b7d..b0938af 100644
--- a/src/gui/Stage.h
+++ b/src/gui/Stage.h
@@ -22,6 +22,7 @@
namespace vhc {
+/** Une scene gere la representation graphique d'un accelerateur. */
class Stage: public QGLWidget {
Q_OBJECT
@@ -31,43 +32,68 @@ public:
Stage(QWidget* parent = NULL);
virtual ~Stage();
+ /** Retourne la camera de cette scene. */
Camera& getCamera();
+ /** Retourne le mode de representation. */
void setDisplayMode(util::DisplayMode value);
+
+ /** Affecte le mode de representation. */
util::DisplayMode getDisplayMode() const;
+ /** Retourne l'etat de la simulation. */
bool isRunning() const;
+
+ /** Affecte l'etat de simulation. */
void setRunning(bool value);
- ElementRenderer& getElementRenderer();
- BeamRenderer& getBeamRenderer();
+ ElementRenderer* getElementRenderer() const;
+ void setElementRenderer(ElementRenderer* value);
+ BeamRenderer* getBeamRenderer() const;
+ void setBeamRenderer(BeamRenderer* value);
- //TODO !!! temporary
- Accelerator* accelerator;
+
+ /** Retourne l'accelerateur de cette scene. */
+ Accelerator* getAccelerator() const;
+
+ /** Affecte l'accelerateur de cette scene. */
+ void setAccelerator(Accelerator* accelerator);
+
+ /** Retourne le pas de temps utilise pour simuler l'accelerateur de cette scene. */
+ double getStep() const;
+
+ /** Affecte le pas de temps utilise pour simuler l'accelerateur de cette scene. */
+ void setStep(double value);
protected:
+ /** Ecrit du texte sur l'ecran. */
void displayText(QString text[], int size);
void initializeGL();
void resizeGL (int width, int height);
void paintGL();
- //void mousePressEvent (QMouseEvent* event);
+ void mousePressEvent (QMouseEvent* event);
//void mouseReleaseEvent (QMouseEvent* event);
void keyPressEvent (QKeyEvent* event);
void keyReleaseEvent (QKeyEvent* event);
void mouseMoveEvent(QMouseEvent* event);
private:
+
+ Accelerator* accelerator;
+
//io
KeyManager keyManager;
//graphics
+ bool captured;
+
Camera camera;
- ElementRenderer elementRenderer;
- BeamRenderer beamRenderer;
+ ElementRenderer* elementRenderer;
+ BeamRenderer* beamRenderer;
QPoint center;
util::DisplayMode displayMode;
diff --git a/src/gui/exerciceP13.cc b/src/gui/exerciceP13.cc
new file mode 100644
index 0000000..e86134e
--- /dev/null
+++ b/src/gui/exerciceP13.cc
@@ -0,0 +1,92 @@
+#include <iostream>
+#include <QApplication>
+#include "Stage.h"
+#include "Accelerator.h"
+#include "SAPInteractor.h"
+#include "CircularBeam.h"
+#include "Bunch.h"
+#include "Particle.h"
+#include "Element.h"
+#include "Dipole.h"
+#include "Quadrupole.h"
+#include "FODO.h"
+#include "Vector3D.h"
+#include "exceptions.h"
+
+using namespace std;
+using namespace vhc;
+
+Accelerator* makeStandard() {
+ double B = 5.8915820038873;
+ double b = 1.2;
+
+ FODO e1 = FODO(Vector3D(3, 2, 0), Vector3D(3, -2, 0), 0.1, 1.0, b);
+ Dipole e2 = Dipole(Vector3D(3, -2, 0), Vector3D(2, -3, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e3 = FODO(e2.getExitPosition(), Vector3D(-2, -3, 0), 0.1, 1, b);
+ Dipole e4 = Dipole(Vector3D(-2, -3, 0), Vector3D(-3, -2, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e5 = FODO(e4.getExitPosition(), Vector3D(-3, 2, 0), 0.1, 1.0, b);
+ Dipole e6 = Dipole(Vector3D(-3, 2, 0), Vector3D(-2, 3, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e7 = FODO(e6.getExitPosition(), Vector3D(2, 3, 0), 0.1, 1.0, b);
+ Dipole e8 = Dipole(Vector3D(2, 3, 0), Vector3D(3, 2, 0), 0.1, 1, Vector3D(0, 0, B));
+
+ Accelerator* acc = new Accelerator(new SAPInteractor);
+ acc->add(e1);
+ acc->add(e2);
+ acc->add(e3);
+ acc->add(e4);
+ acc->add(e5);
+ acc->add(e6);
+ acc->add(e7);
+ acc->add(e8);
+
+ acc->close();
+
+ //proton
+ Particle p1 = Particle(Vector3D(3.01, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
+ Particle p2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
+ acc->add(p1);
+ acc->add(p2);
+
+ //anti-proton
+ Particle ap1 = Particle(Vector3D(3.01, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ Particle ap2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ acc->add(ap1);
+ acc->add(ap2);
+
+ //faisceau circulaire
+ acc->add(CircularBeam(p1, 20, 1));
+
+ //bunch
+ double emittance = 5E-6; //m
+ double A_12 = 0.02; //1/m
+ double A_22 = 4;//E-19; // s² m-1 (dépend totalement de l'accélérateur)
+ double length = 300E-12 * constants::C;
+ double stdDev = 0.1;
+ acc->add(Bunch(p1, 50, 1, stdDev, length, emittance, A_12, A_22));
+
+ return acc;
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+
+ QApplication app(argc, argv);
+
+ vhc::Stage window;
+ Accelerator* acc = makeStandard();
+ window.setAccelerator(acc);
+
+ window.setWindowTitle("Virtual Hadron Collider");
+ window.resize(QSize(800, 800));
+ window.show();
+
+
+ // window.showFullScreen();
+ return app.exec();
+
+ } catch (Exception& ex){
+ std::cerr << ex.toString() << "\n";
+ throw;
+ }
+}
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index a0c883d..a0c0d71 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -1,4 +1,5 @@
-
+#configuration pour Qt
+#
TEMPLATE = app
TARGET =
DESTDIR = $(BINDIR)/gui
@@ -16,4 +17,4 @@ QT += opengl
# Input
HEADERS += Camera.h ElementRenderer.h util.h KeyManager.h Stage.h BeamRenderer.h Renderer.h
-SOURCES += Camera.cc ElementRenderer.cc util.cc KeyManager.cc Stage.cc BeamRenderer.cc Main.cc
+SOURCES += Camera.cc ElementRenderer.cc util.cc KeyManager.cc Stage.cc BeamRenderer.cc simulation.cc
diff --git a/src/gui/simulation.cc b/src/gui/simulation.cc
new file mode 100644
index 0000000..e86134e
--- /dev/null
+++ b/src/gui/simulation.cc
@@ -0,0 +1,92 @@
+#include <iostream>
+#include <QApplication>
+#include "Stage.h"
+#include "Accelerator.h"
+#include "SAPInteractor.h"
+#include "CircularBeam.h"
+#include "Bunch.h"
+#include "Particle.h"
+#include "Element.h"
+#include "Dipole.h"
+#include "Quadrupole.h"
+#include "FODO.h"
+#include "Vector3D.h"
+#include "exceptions.h"
+
+using namespace std;
+using namespace vhc;
+
+Accelerator* makeStandard() {
+ double B = 5.8915820038873;
+ double b = 1.2;
+
+ FODO e1 = FODO(Vector3D(3, 2, 0), Vector3D(3, -2, 0), 0.1, 1.0, b);
+ Dipole e2 = Dipole(Vector3D(3, -2, 0), Vector3D(2, -3, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e3 = FODO(e2.getExitPosition(), Vector3D(-2, -3, 0), 0.1, 1, b);
+ Dipole e4 = Dipole(Vector3D(-2, -3, 0), Vector3D(-3, -2, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e5 = FODO(e4.getExitPosition(), Vector3D(-3, 2, 0), 0.1, 1.0, b);
+ Dipole e6 = Dipole(Vector3D(-3, 2, 0), Vector3D(-2, 3, 0), 0.1, 1, Vector3D(0, 0, B));
+ FODO e7 = FODO(e6.getExitPosition(), Vector3D(2, 3, 0), 0.1, 1.0, b);
+ Dipole e8 = Dipole(Vector3D(2, 3, 0), Vector3D(3, 2, 0), 0.1, 1, Vector3D(0, 0, B));
+
+ Accelerator* acc = new Accelerator(new SAPInteractor);
+ acc->add(e1);
+ acc->add(e2);
+ acc->add(e3);
+ acc->add(e4);
+ acc->add(e5);
+ acc->add(e6);
+ acc->add(e7);
+ acc->add(e8);
+
+ acc->close();
+
+ //proton
+ Particle p1 = Particle(Vector3D(3.01, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
+ Particle p2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, constants::E, 2 * constants::GeV, -Vector3D::j);
+ acc->add(p1);
+ acc->add(p2);
+
+ //anti-proton
+ Particle ap1 = Particle(Vector3D(3.01, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ Particle ap2 = Particle(Vector3D(2.99, 0, 0), constants::PROTON_MASS, -constants::E, 2 * constants::GeV, Vector3D::j);
+ acc->add(ap1);
+ acc->add(ap2);
+
+ //faisceau circulaire
+ acc->add(CircularBeam(p1, 20, 1));
+
+ //bunch
+ double emittance = 5E-6; //m
+ double A_12 = 0.02; //1/m
+ double A_22 = 4;//E-19; // s² m-1 (dépend totalement de l'accélérateur)
+ double length = 300E-12 * constants::C;
+ double stdDev = 0.1;
+ acc->add(Bunch(p1, 50, 1, stdDev, length, emittance, A_12, A_22));
+
+ return acc;
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+
+ QApplication app(argc, argv);
+
+ vhc::Stage window;
+ Accelerator* acc = makeStandard();
+ window.setAccelerator(acc);
+
+ window.setWindowTitle("Virtual Hadron Collider");
+ window.resize(QSize(800, 800));
+ window.show();
+
+
+ // window.showFullScreen();
+ return app.exec();
+
+ } catch (Exception& ex){
+ std::cerr << ex.toString() << "\n";
+ throw;
+ }
+}
diff --git a/src/gui/util.h b/src/gui/util.h
index 075c2d0..e8e9472 100644
--- a/src/gui/util.h
+++ b/src/gui/util.h
@@ -13,9 +13,16 @@ namespace vhc {
/** Contient des fonctions utilitaires. */
namespace util {
+/** Mode de dessin. */
enum DisplayMode {
+
+ /** Remplire. */
FILL = 0,
+
+ /** Grille. */
WIREFRAME = 1,
+
+ /** Points. */
POINTS = 2
};
diff --git a/src/main/Element.h b/src/main/Element.h
index 8f1ce23..96f097e 100644
--- a/src/main/Element.h
+++ b/src/main/Element.h
@@ -58,18 +58,23 @@ public:
* ATTENTION: La delocation de memoire est sous la responsabilite de l'appelant. */
virtual Element* clone() const = 0;
+ /** Retourne vrai si la position donnee se situe avant la face d'entree de cet element. */
virtual bool isBefore(const Vector3D& position) const = 0;
bool isBefore(const Particle& particle) const;
+ /** Retourne vrai si la position donnee se situe a cote de cet element. */
virtual bool isBeside(const Vector3D& position) const = 0;
bool isBeside(const Particle& particle) const;
+ /** Retourne vrai si la position donnee se situe apres la face de sortie de cet element. */
virtual bool isAfter(const Vector3D& position) const = 0;
bool isAfter(const Particle& particle) const;
+ /** Retourne vrai si la position donnee se trouve a l'interieur de cet element (c'est-a-dire si elle n'est ni devnt ni derriere ni a cote de cet element). */
bool contains(const Vector3D& position) const;
bool contains(const Particle& particle) const;
+ /** Retourne un vecteur horizontal pointant en oppose de l'origine (correspond au vecteur u du complement mathemmatique). */
virtual Vector3D getHorizontalAt(const Vector3D& position) const = 0;
/** Retourne le champ magnetique, a l'interieur de cet element a la position donnee. */
diff --git a/src/main/doxygen.h b/src/main/doxygen.h
index 4397335..60e1305 100644
--- a/src/main/doxygen.h
+++ b/src/main/doxygen.h
@@ -8,8 +8,6 @@
#ifndef DOXYGEN_H_
/**@mainpage
- * Page principale.
- * <b>tchigidididi</b>
*
*/
diff --git a/src/test/ParserTest.cc b/src/test/ParserTest.cc
deleted file mode 100644
index 42a0c3e..0000000
--- a/src/test/ParserTest.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * simulationTest.cc
- *
- * Created on: 28 mai 2011
- * Author: christian
- */
-#include <iostream>
-#include "Parser.h"
-#include "Accelerator.h"
-#include "exceptions.h"
-
-using namespace std;
-using namespace vhc;
-
-/* Ne marche pas. L'ouverture du fichier est impossible.
- * Pourtant j'ai essayé en exercice le même bout de code
- * [ que dans la méthode extract() ] pour ouvrir un fichier, et ça marchait....
- * Je suspecte un problème avec la makefile.*/
-
-int main(){
- try{
- Parser pars("./accelerator.xml");
-
- Accelerator* a = pars.extract();
-
- cout<< *a <<endl;
-
- a->clear();
-
- delete a;
- }
- catch(Exception const& ex){
- cout<<ex.getExceptionType()<<endl
- <<ex.getMessage()<<endl;
- }
- return 0;
-}