From 08411697aed67f3a842b141dbf1d14725d417299 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 29 May 2011 21:33:34 +0000 Subject: Plein de commentaires derniere minute, creation de readme. --- CONCEPTION.pdf | Bin 0 -> 113651 bytes README.txt | 39 ++++++++++++++++++ REPONSES.pdf | Bin 132002 -> 0 bytes reponses.lyx | 63 ++++++++++++++++++++++++++++- src/gui/BeamRenderer.cc | 3 -- src/gui/ElementRenderer.h | 12 +++++- src/gui/EnergyBeamRenderer.cc | 23 ----------- src/gui/EnergyBeamRenderer.h | 25 ------------ src/gui/KeyManager.cc | 4 +- src/gui/KeyManager.h | 9 +++++ src/gui/Main.cc | 2 +- src/gui/ParticleRenderer.cc | 50 ----------------------- src/gui/ParticleRenderer.h | 38 ----------------- src/gui/Stage.cc | 52 +++++++++++++++++++----- src/gui/Stage.h | 40 ++++++++++++++---- src/gui/exerciceP13.cc | 92 ++++++++++++++++++++++++++++++++++++++++++ src/gui/gui.pro | 5 ++- src/gui/simulation.cc | 92 ++++++++++++++++++++++++++++++++++++++++++ src/gui/util.h | 7 ++++ src/main/Element.h | 5 +++ src/main/doxygen.h | 2 - src/test/ParserTest.cc | 37 ----------------- 22 files changed, 396 insertions(+), 204 deletions(-) create mode 100644 CONCEPTION.pdf create mode 100644 README.txt delete mode 100644 REPONSES.pdf delete mode 100644 src/gui/EnergyBeamRenderer.cc delete mode 100644 src/gui/EnergyBeamRenderer.h delete mode 100644 src/gui/ParticleRenderer.cc delete mode 100644 src/gui/ParticleRenderer.h create mode 100644 src/gui/exerciceP13.cc create mode 100644 src/gui/simulation.cc delete mode 100644 src/test/ParserTest.cc diff --git a/CONCEPTION.pdf b/CONCEPTION.pdf new file mode 100644 index 0000000..06e6028 Binary files /dev/null and b/CONCEPTION.pdf 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 Binary files a/REPONSES.pdf and /dev/null 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 ou . \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 { 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 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 -#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 { - -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 +#include +#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 +#include +#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. - * tchigidididi * */ 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 -#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 <clear(); - - delete a; - } - catch(Exception const& ex){ - cout<