summaryrefslogtreecommitdiff
path: root/src/main/Beam.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/Beam.h')
-rw-r--r--src/main/Beam.h116
1 files changed, 72 insertions, 44 deletions
diff --git a/src/main/Beam.h b/src/main/Beam.h
index f03af97..70f9f86 100644
--- a/src/main/Beam.h
+++ b/src/main/Beam.h
@@ -14,52 +14,12 @@
namespace vhc {
-class Beam {
-
-protected:
-
- /** Particule de reference. */
- Particle referenceParticle;
-
- /** Particules contenus dans ce faisceau. */
- std::list<Particle*> particles;
-
- /** Coefficient des macrosparticules. */
- int lambda;
-
- int quantity;
-
- /** Retourne la moyenne de la distribution horizontale de la position des particules.
- * (<r^2> horizontal du complement) */
- double getHR2() const;
-
- /** Retourne la moyenne de la distribution horizontale de la vitesse des particules.
- * (<v^2> horizontal du complement) */
- double getHV2() const;
-
- /** Retourne la moyenne de la distribution horizontale du produit de la position et de la vitesse des particules.
- * (<r*v>^2 horizontal du complement) */
- double getHRV2() const;
-
- /** Retourne la moyenne de la distribution verticale de la position des particules.
- * (<r^2> vertical du complement) */
- double getVR2() const;
-
- /** Retourne la moyenne de la distribution verticale de la vitesse des particules.
- * (<v^2> vertical du complement) */
- double getVV2() const;
-
- /** Retourne la moyenne de la distribution verticale du produit de la position et de la vitesse des particules.
- * (<r*v>^2 vertical du complement) */
- double getVRV2() const;
-
- /** Initialise ce faisceau a partir de la particule de reference. Comme il s'agit d'une sorte de factory method (au sens vraiment large),
- * la responsabilite de gestion des particules appartient a ce faisceau (et non a la sous-classe). */
- virtual void init(const Particle& referenceParticle, int quantity, int lambda) = 0;
-
+class Beam: public Cloneable {
public:
+ typedef std::list<Particle*> ParticleCollection;
+
/** Cree un nouveau faisceaux.
* <b>ATTENTION:</b> un `Beam' est abstrait et n'initialise pas les particules a partir de la reference.
* C'est au client de faire cela! */
@@ -67,14 +27,34 @@ public:
virtual ~Beam();
+
+ ParticleCollection& getParticles();
+
+ /** Met a jour les particules en leur attribuant l'element dans lequel ils sont contenus.
+ * Contrairement a <code>Accelerator::initializeBeams()</code>, les elements consideres sont:
+ * - l'element actuel de la particule
+ * - l'element precedent
+ * - l'element suivant
+ * Si la particule se situe a cote de son element, elle est supprimee de l'accelerateur.
+ * Attention: si la particule saute un element, elle est tout de meme consideree comme etant dans l'element suivant (ou precedent)! Ceci
+ * peut survenir si un element est trop petit ou si la simulation est faite avec des pas de temps trop grands. */
+ void updateParticles();
+
+ virtual void initializeParticles() = 0;
+
+ void step(double dt);
+
/** Retourne la quantite de particules contenus dans ce faisceau. */
+ int getQuantity() const;
+
+ /** Retourne la quantite de macroparticules contenus dans ce faisceau. */
int getSize() const;
/** Retourne le coefficient des macroparticules. */
int getLambda() const;
/** Retourne la particule de reference. */
- const Particle& getReferenceParticle() const;
+ Particle& getReferenceParticle();
/** Retourne l'energie moyenne des particules dans ce faisceau. */
double getAverageEnergy() const;
@@ -85,6 +65,15 @@ public:
/** Retourne l'emmitance horizontale de ce faisceau. */
double getHorizontalEmittance() const;
+ void clear();
+
+ virtual Beam* clone() const = 0;
+
+
+
+
+ //-------------------------------------------------------------------
+
/** Retourne coefficient des ellipses de phases vertical. */
double getVerticalA11() const;
@@ -103,6 +92,45 @@ public:
/** Retourne coefficient des ellipses de phases horizontal. */
double getHorizontalA22() const;
+protected:
+
+ /** Particule de reference. */
+ Particle referenceParticle;
+
+ /** (Macro-)Particules contenus dans ce faisceau. */
+ ParticleCollection particles;
+
+ /** Coefficient des macrosparticules. */
+ int lambda;
+
+ int quantity;
+
+ /** Retourne la moyenne de la distribution horizontale de la position des particules.
+ * (<r^2> horizontal du complement) */
+ double getHR2() const;
+
+ /** Retourne la moyenne de la distribution horizontale de la vitesse des particules.
+ * (<v^2> horizontal du complement) */
+ double getHV2() const;
+
+ /** Retourne la moyenne de la distribution horizontale du produit de la position et de la vitesse des particules.
+ * (<r*v>^2 horizontal du complement) */
+ double getHRV2() const;
+
+ /** Retourne la moyenne de la distribution verticale de la position des particules.
+ * (<r^2> vertical du complement) */
+ double getVR2() const;
+
+ /** Retourne la moyenne de la distribution verticale de la vitesse des particules.
+ * (<v^2> vertical du complement) */
+ double getVV2() const;
+
+ /** Retourne la moyenne de la distribution verticale du produit de la position et de la vitesse des particules.
+ * (<r*v>^2 vertical du complement) */
+ double getVRV2() const;
+
+
+
};
}